xref: /plan9-contrib/sys/src/9/pcboot/multiboot.c (revision 25210b069a6ed8c047fa67220cf1dff32812f121)
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 Colombier mkmultiboot(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