/* * arch/alpha/boot/head.S * * initial bootloader stuff.. */ #include "pal.h" #include .set noreorder .globl __start .ent __start __start: .prologue 0 bis $31,$31,$31 br 1f /* room for the initial PCB, which comes here */ .quad 0,0,0,0,0,0,0,0 1: br $27,2f 2: ldgp $29,0($27) lda $27,main_ jsr $26,($27),main_ call_pal PAL_halt .end __start /* these must appear within first 512 bytes: */ .align 3 .quad ABOOT_MAGIC config_file_partition: .globl config_file_partition .quad CONFIG_FILE_PARTITION raw_initrd_size: .globl raw_initrd_size .quad 0 .align 3 .globl wrent .ent wrent wrent: .prologue 0 call_pal PAL_wrent ret ($26) .end wrent .align 3 .globl wrkgp .ent wrkgp wrkgp: .prologue 0 call_pal PAL_wrkgp ret ($26) .end wrkgp .align 3 .globl tbi .ent tbi tbi: .prologue 0 call_pal PAL_tbi ret ($26) .end tbi .align 3 .globl switch_to_osf_pal .ent switch_to_osf_pal switch_to_osf_pal: .prologue 0 subq $30,128,$30 stq $26,0($30) stq $1,8($30) # regs clobbered by swppal stq $2,16($30) stq $3,24($30) stq $4,32($30) stq $5,40($30) stq $6,48($30) stq $7,56($30) stq $8,64($30) stq $9,72($30) stq $10,80($30) stq $11,88($30) stq $12,96($30) stq $13,104($30) stq $14,112($30) stq $15,120($30) stq $30,0($17) /* save KSP in PCB (a1) */ bis $30,$30,$20 /* a4 = KSP */ br $17,__do_swppal ldq $26,0($30) ldq $1,8($30) ldq $2,16($30) ldq $3,24($30) ldq $4,32($30) ldq $5,40($30) ldq $6,48($30) ldq $7,56($30) ldq $8,64($30) ldq $9,72($30) ldq $10,80($30) ldq $11,88($30) ldq $12,96($30) ldq $13,104($30) ldq $14,112($30) ldq $15,120($30) addq $30,128,$30 ret ($26) __do_swppal: call_pal PAL_swppal .end switch_to_osf_pal .align 3 .globl dispatch .ent dispatch dispatch: .prologue 0 subq $30,80,$30 stq $26,0($30) stq $29,8($30) stq $8,16($30) /* OpenVMS save regs */ stq $9,24($30) stq $10,32($30) stq $11,40($30) stq $12,48($30) stq $13,56($30) stq $14,64($30) stq $15,72($30) lda $1,0x10000000 /* hwrpb */ ldq $2,0xc0($1) /* crb offset */ addq $2,$1,$2 /* crb */ ldq $27,0($2) /* dispatch procedure value */ ldq $2,8($27) /* dispatch call address */ jsr $26,($2) /* call it (weird VMS call seq) */ ldq $26,0($30) ldq $29,8($30) ldq $8,16($30) ldq $9,24($30) ldq $10,32($30) ldq $11,40($30) ldq $12,48($30) ldq $13,56($30) ldq $14,64($30) ldq $15,72($30) addq $30,80,$30 ret $31,($26) .end dispatch .align 3 .globl halt .ent halt halt: .prologue 0 call_pal PAL_halt .end halt .ent run_kernel .globl run_kernel run_kernel: .prologue 0 mov $16,$27 mov $17,$30 jmp $31,($27) .end run_kernel