]> git.lizzy.rs Git - plan9front.git/blob - sys/src/boot/alphapc/exec.c
9bootfat: only check for fat at block 0 on floppy drives (thanks aap)
[plan9front.git] / sys / src / boot / alphapc / exec.c
1 #include        "u.h"
2 #include        "mem.h"
3 #include        "dat.h"
4 #include        "fns.h"
5 #include        "lib.h"
6
7 uchar   pcbpage[64*1024+sizeof(PCB)];
8 PCB             *pcb;
9
10 void    (*kentry)(Bootconf*);
11
12 void
13 gokernel(void)
14 {
15         (*kentry)(&conf);
16 }
17
18 void
19 kexec(ulong entry)
20 {
21         uvlong pcbb, paltype;
22
23         pcb = (PCB*)(((ulong)pcbpage+0xffff) & ~0xffff);        /* page align, even on 64K page Alphas */
24         memset(pcb, 0, sizeof(PCB));
25         pcb->ksp = (uvlong)&entry;
26         pcb->ptbr = getptbr();
27         pcb->fen = 1;
28         conf.pcb = pcb;
29         pcbb = paddr((uvlong)pcb);
30         kentry = (void(*)(Bootconf*))entry;
31         paltype = 2;    /* OSF/1 please */
32         switch (swppal(paltype, (uvlong)gokernel, pcbb, hwrpb->vptb, pcb->ksp)) {
33         case 1:
34                 panic("unknown PALcode variant");
35         case 2:
36                 panic("PALcode variant not loaded");
37         default:
38                 panic("weird return status from swppal");
39         }
40 }