⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 head.s

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
        brct  %r3,.Lidebc        j     .Lnocv.Ldocv:        l     %r3,.Lcvtab        tr    0(256,%r4),0(%r3)                # convert parameters to ascii        tr    256(256,%r4),0(%r3)        tr    512(256,%r4),0(%r3)        tr    768(122,%r4),0(%r3).Lnocv: la    %r3,COMMAND_LINE-PARMAREA(%r12)  # load adr. of command line        mvc   0(256,%r3),0(%r4)        mvc   256(256,%r3),256(%r4)        mvc   512(256,%r3),512(%r4)        mvc   768(122,%r3),768(%r4)        slr   %r0,%r0        j     .Lcntlp.Ldelspc:        ic    %r0,0(%r2,%r3)        chi   %r0,0x20                         # is it a space ?        je    .Lcntlp        ahi   %r2,1        j     .Leolp.Lcntlp:        brct  %r2,.Ldelspc.Leolp:        slr   %r0,%r0        stc   %r0,0(%r2,%r3)                   # terminate buffer.Lnopf:## load ramdisk from reader#		l     %r2,INITRD_START-PARMAREA(%r12)  # load adr. of ramdisk        bras  %r14,.Lloader                    # load ramdisk	st    %r2,INITRD_SIZE-PARMAREA(%r12)   # store size of ramdisk        ltr   %r2,%r2        jnz   .Lrdcont        st    %r2,INITRD_START-PARMAREA(%r12)  # no ramdisk found, null it.Lrdcont:## everything loaded, reset files in reader, then go for it#        stidp __LC_CPUID                       # store cpuid        lh    %r0,__LC_CPUID+4                 # get cpu version        chi   %r0,0x7490                       # running on P/390 ?        je   start                             #   no -> skip reset        la    %r2,.Lreset                      lhi   %r3,26        .long 0x83230008	j     start## subroutine for loading cards from the reader#.Lloader:		la    %r3,.Lorb                        # r2 = address of orb into r2	la    %r5,.Lirb                        # r4 = address of irb        la    %r6,.Lccws                      la    %r7,20.Linit:        st    %r2,4(%r6)                       # initialize CCW data addresses        ahi   %r2,0x50        ahi   %r6,8        brct  7,.Linit        lctl  %c6,%c6,.Lcr6                    # set IO subclass mask	slr   %r2,%r2.Lldlp:        ssch  0(%r3)                           # load chunk of 1600 bytes        jnz   .Llderr.Lwait4irq:        mvc   __LC_IO_NEW_PSW(8),.Lnewpsw      # set up IO interrupt psw        lpsw  .Lwaitpsw              .Lioint:        c     %r1,0xb8                         # compare subchannel number	jne   .Lwait4irq	tsch  0(%r5)	slr   %r0,%r0	ic    %r0,8(%r5)                       # get device status	chi   %r0,8                            # channel end ?	je    .Lcont	chi   %r0,12                           # channel end + device end ?	je    .Lcont        l     %r0,4(%r5)        s     %r0,8(%r3)                       # r0/8 = number of ccws executed        mhi   %r0,10                           # *10 = number of bytes in ccws        lh    %r3,10(%r5)                      # get residual count        sr    %r0,%r3                          # #ccws*80-residual=#bytes read	ar    %r2,%r0	        br    %r14                             # r2 contains the total size.Lcont:	ahi   %r2,0x640                        # add 0x640 to total size        la    %r6,.Lccws                     la    %r7,20.Lincr:        l     %r0,4(%r6)                       # update CCW data addresses        ahi   %r0,0x640        st    %r0,4(%r6)        ahi   %r6,8        brct  7,.Lincr        j     .Lldlp.Llderr:        lpsw  .Lcrash                      .align 8.Lorb:	.long  0x00000000,0x0080ff00,.Lccws.Lirb:	.long  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.Lcr6:  .long  0xff000000.Lloadp:.long  0,0.Lparm:	.long  PARMAREA.L4malign0:.long 0xffc00000.Lbigmem:.long 0x04000000.Lrdstart:.long 0x02000000.Lcvtab:.long  _ebcasc                         # ebcdic to ascii table.Lreset:.byte  0xc3,0xc8,0xc1,0xd5,0xc7,0xc5,0x40,0xd9,0xc4,0xd9,0x40        .byte  0xc1,0xd3,0xd3,0x40,0xd2,0xc5,0xc5,0xd7,0x40,0xd5,0xd6        .byte  0xc8,0xd6,0xd3,0xc4             # "change rdr all keep nohold"        .align 8.Lpcmem0:.long  0x00080000,0x80000000 + .Lchkmem0.Lcrash:.long  0x000a0000,0x00000000.Lnewpsw:        .long  0x00080000,0x80000000+.Lioint.Lwaitpsw:        .long  0x020a0000,0x80000000+.Lioint        .align 8.Lccws: .rept  19        .long  0x02600050,0x00000000        .endr        .long  0x02200050,0x00000000	        .org   0x730     # end of the area loaded by the ipl channel program#endif  /* CONFIG_IPL_VM */#endif  /* CONFIG_IPL */## startup-code at 0x10000, running in real mode# this is called either by the ipl loader or directly by PSW restart or linload#        .org  0x10000        .globl startstart:  basr  %r13,0                     # get base.LPG1:  lctl  %c1,%c1,.Lpstd-.LPG1(%r13) # load pstd        lctl  %c7,%c7,.Lpstd-.LPG1(%r13) # load sstd        lctl  %c13,%c13,.Lpstd-.LPG1(%r13) # load hstd        lctl  %c0,%c0,.Lcr0-.LPG1(%r13)  # set CR0	l     %r12,.Lparm1-.LPG1(%r13)   # pointer to parameter area## find out memory size. That is done in the ipl loader too but for# ipl from dasd the size of the memory has to be detected too...#        icm   %r0,15,MEMORY_SIZE-PARMAREA(%r12)        jnz   .Lsizeok	mvc   104(8,0),.Lpcmem-.LPG1(%r13) # setup program check handler        slr   %r1,%r1        lhi   %r2,1        sll   %r2,20.Lloop:		l     %r0,0(%r1)                 # test page	ar    %r1,%r2                    # add 1M	jnm   .Lloop                     # r1 < 0x80000000 -> loop.Lchkmem:	n     %r1,.L4malign-.LPG1(%r13)  # align to multiples of 4M	st    %r1,MEMORY_SIZE-PARMAREA(%r12)  # store memory size.Lsizeok:## find out if we are running under VM#        stidp  __LC_CPUID               # store cpuid	tm     __LC_CPUID,0xff          # running under VM ?	jno    .Lnovm        oi     MACHINE_FLAGS+3-PARMAREA(%r12),1    # set VM flag.Lnovm:        lh     %r0,__LC_CPUID+4         # get cpu version        chi    %r0,0x7490               # running on a P/390 ?        jne    .Lnop390        oi     MACHINE_FLAGS+3-PARMAREA(%r12),4    # set P/390 flag.Lnop390:## find out if we have an IEEE fpu#        mvc    104(8,0),.Lpcfpu-.LPG1(%r13) # setup program check handler        ld     %f0,.Lflt0-.LPG1(%r13)   # load (float) 0.0        ldr    %f2,%f0        adbr   %f0,%f2                  # test IEEE add instruction        oi     MACHINE_FLAGS+3-PARMAREA(%r12),2    # set IEEE fpu flag.Lchkfpu:        lpsw  .Lentry-.LPG1(13)         # jump to _stext in primary-space,                                        # virtual and never return ...        .align 8.Lentry:.long  0x04080000,0x80000000 + _stext.Lpstd: .long  .Lpgd+0x7F               # segment-table.Lcr0:  .long  0x04b50002.Lpcmem:.long  0x00080000,0x80000000 + .Lchkmem.Lpcfpu:.long  0x00080000,0x80000000 + .Lchkfpu.Lflt0: .double 0.Lparm1:.long  PARMAREA.L4malign:.long 0xffc00000## params at 10400 (setup.h)#	.org   PARMAREA        .long  0x0100                   # ORIG_ROOT_DEV: ramdisk major/minor        .word  0                        # MOUNT_ROOT_RDONLY: no	.long  0                        # MEMORY_SIZE	.long  0                        # MACHINE_FLAGS (bit 0:VM, bit 1:IEEE)        .long  RAMDISK_ORIGIN           # INITRD_START        .long  0x800000                 # INITRD_SIZE	.word  0                        # RAMDISK_FLAGS        .org   COMMAND_LINE#       .byte  "root=/dev/nfs rw nfsroot=9.164.160.7:/home/mschwide/nfsboot "#       .byte  "ip=9.164.147.12:9.164.160.7:9.164.147.1:255.255.255.0:vmlinux:tr0:off"#       .byte  "root=/dev/nfs nfsroot=9.164.160.7:/home/mschwide/nfsboot "#       .byte  "ip=9.164.181.228:9.164.160.7:9.164.181.1:255.255.224.0:vmlinux:tr0:off"#       .byte  "root=/dev/nfs nfsroot=9.164.160.7:/home/pasch/nfsboot "#       .byte  "ip=9.164.185.120:9.164.160.7:9.164.181.1:255.255.224.0:vmlinux:tr0:off"#       .byte  "mdisk=402:65536:1229,403:131072:2780 root=/dev/mnda ro"#       .byte  "root=/dev/nfs rw nfsroot=9.164.160.209:/usr/local/nfsboot "#       .byte  "ip=9.164.181.228:9.164.160.209:9.164.181.1:255.255.224.0:vmlinux:tr0:off"    	.byte  "root=/dev/ram0 ro"#       .byte  0## startup-code, running in virtual mode#        .org   0x10800        .globl _stext_stext:	basr  %r13,0                    # get base.LPG2:## Setup lowcore#        l     %r1,__LC_IPLDEV           # load ipl device number        spx   .Lprefix-.LPG2(%r13)      # set prefix to linux lowcore        st    %r1,__LC_IPLDEV           # store ipl device number        l     %r15,.Linittu-.LPG2(%r13)        ahi   %r15,8192                 # init_task_union + 8191        st    %r15,__LC_KERNEL_STACK    # set end of kernel stack        ahi   %r15,-96        xc    0(4,%r15),0(%r15)         # set backchain to zero        lhi   %r0,-1        st    %r0,__LC_KERNEL_LEVEL     # set interrupt count to -1## clear bss memory#        l     %r2,.Lbss_bgn-.LPG2(%r13) # start of bss        l     %r3,.Lbss_end-.LPG2(%r13) # end of bss        sr    %r3,%r2                   # length of bss        sr    %r4,%r4                   #        sr    %r5,%r5                   # set src,length and pad to zero        sr    %r0,%r0                   #        mvcle %r2,%r4,0                 # clear mem        jo    .-4                       # branch back, if not finish# check control registers        stctl  %c0,%c15,0(%r15)        oc     2(1,%r15),.Locbits+5-.LPG2(%r13) # enable sigp external ints.        oc     0(1,%r15),.Locbits+4-.LPG2(%r13) # low addresss proctection        lctl   %c0,%c15,0(%r15)#        lam    0,15,.Laregs-.LPG2(%r13) # load access regs needed by uaccess        l      %r14,.Lstart-.LPG2(%r13)        basr   %r14,%r14                # call start_kernel## We returned from start_kernel ?!? PANIK#        basr  %r13,0	lpsw  .Ldw-.(%r13)           # load disabled wait psw#.Lstart:    .long  start_kernel            .align 8.Lprefix:   .long  init_S390_lowcore	.Linittu:   .long  init_task_union.Lbss_bgn:  .long  __bss_start.Lbss_end:  .long  _end.Locbits:   .long  0x01020408,0x10204080            .align 4.Laregs:    .long  0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0	    .align 8.Ldw:	    .long  0x000a0000,0x00000000##        tempory segment-table at 0x11000#        .org   0x11000.Lpgd:  .long  .Lpt0+0x1f               # 00000000-000fffff        .long  .Lpt1+0x1f               # 00100000-001fffff        .long  .Lpt2+0x1f               # 00200000-002fffff        .long  .Lpt3+0x1f               # 00300000-003fffff        .fill  2044,4,0x20              # 00400000-7fffffff##        tempory page-tables at 0x12000-0x15fff#        .macro  mktable from,to        .long   \from*0x10000        .long   \from*0x10000+0x1000        .long   \from*0x10000+0x2000        .long   \from*0x10000+0x3000        .long   \from*0x10000+0x4000        .long   \from*0x10000+0x5000        .long   \from*0x10000+0x6000        .long   \from*0x10000+0x7000        .long   \from*0x10000+0x8000        .long   \from*0x10000+0x9000        .long   \from*0x10000+0xa000        .long   \from*0x10000+0xb000        .long   \from*0x10000+0xc000        .long   \from*0x10000+0xd000        .long   \from*0x10000+0xe000        .long   \from*0x10000+0xf000        .if     \to-\from        mktable "(\from+1)",\to        .endif        .endm.Lpt0:  mktable 0,15.Lpt1:  mktable 16,31.Lpt2:  mktable 32,47.Lpt3:  mktable 48,63

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -