12345678910111213141516171819202122232425262728293031323334353637383940 |
- #include "u.h"
- #include "mem.h"
- #include "dat.h"
- #include "fns.h"
- #include "lib.h"
- uchar pcbpage[64*1024+sizeof(PCB)];
- PCB *pcb;
- void (*kentry)(Bootconf*);
- void
- gokernel(void)
- {
- (*kentry)(&conf);
- }
- void
- kexec(ulong entry)
- {
- uvlong pcbb, paltype;
- pcb = (PCB*)(((ulong)pcbpage+0xffff) & ~0xffff); /* page align, even on 64K page Alphas */
- memset(pcb, 0, sizeof(PCB));
- pcb->ksp = (uvlong)&entry;
- pcb->ptbr = getptbr();
- pcb->fen = 1;
- conf.pcb = pcb;
- pcbb = paddr((uvlong)pcb);
- kentry = (void(*)(Bootconf*))entry;
- paltype = 2; /* OSF/1 please */
- switch (swppal(paltype, (uvlong)gokernel, pcbb, hwrpb->vptb, pcb->ksp)) {
- case 1:
- panic("unknown PALcode variant");
- case 2:
- panic("PALcode variant not loaded");
- default:
- panic("weird return status from swppal");
- }
- }
|