1*25210b06SDavid du Colombier #include "u.h" 2*25210b06SDavid du Colombier #include "../port/lib.h" 3*25210b06SDavid du Colombier #include "mem.h" 4*25210b06SDavid du Colombier #include "dat.h" 5*25210b06SDavid du Colombier #include "fns.h" 6*25210b06SDavid du Colombier #include "io.h" 7*25210b06SDavid du Colombier #include "ureg.h" 8*25210b06SDavid du Colombier 9*25210b06SDavid du Colombier Mbi mbhdr; 10*25210b06SDavid du Colombier int nmmap; 11*25210b06SDavid du Colombier 12*25210b06SDavid du Colombier /* these need to end up in low memory */ 13*25210b06SDavid du Colombier Mbi *multibootheader = &mbhdr; 14*25210b06SDavid du Colombier MMap mmap[32+1]; 15*25210b06SDavid du Colombier 16*25210b06SDavid du Colombier void mkmultiboot(void)17*25210b06SDavid du Colombiermkmultiboot(void) 18*25210b06SDavid du Colombier { 19*25210b06SDavid du Colombier MMap *lmmap; 20*25210b06SDavid du Colombier 21*25210b06SDavid du Colombier /* reuse the bios table memory */ 22*25210b06SDavid du Colombier multibootheader = (Mbi *)KADDR(BIOSTABLES); 23*25210b06SDavid du Colombier memset(multibootheader, 0, sizeof *multibootheader); 24*25210b06SDavid du Colombier 25*25210b06SDavid du Colombier lmmap = (MMap *)(multibootheader + 1); 26*25210b06SDavid du Colombier memmove(lmmap, mmap, sizeof mmap); 27*25210b06SDavid du Colombier 28*25210b06SDavid du Colombier multibootheader->cmdline = PADDR(BOOTLINE); 29*25210b06SDavid du Colombier multibootheader->flags |= Fcmdline; 30*25210b06SDavid du Colombier if(nmmap != 0){ 31*25210b06SDavid du Colombier multibootheader->mmapaddr = PADDR(lmmap); 32*25210b06SDavid du Colombier multibootheader->mmaplength = nmmap*sizeof(MMap); 33*25210b06SDavid du Colombier multibootheader->flags |= Fmmap; 34*25210b06SDavid du Colombier } 35*25210b06SDavid du Colombier multibootheader = (Mbi *)PADDR(multibootheader); 36*25210b06SDavid du Colombier if(v_flag) 37*25210b06SDavid du Colombier print("PADDR(&multibootheader) %#p\n", multibootheader); 38*25210b06SDavid du Colombier } 39