kernel: add support for multiboot memory map
This commit is contained in:
parent
1259fe5c38
commit
7e2e5b7a6f
|
@ -32,27 +32,61 @@ int nconf;
|
|||
uchar *sp; /* user stack of init proc */
|
||||
int delaylink;
|
||||
|
||||
static void
|
||||
multibootargs(void)
|
||||
{
|
||||
char *cp, *ep;
|
||||
ulong *m, l;
|
||||
|
||||
extern ulong *multiboot;
|
||||
|
||||
if(multiboot == nil)
|
||||
return;
|
||||
|
||||
/* command line */
|
||||
if((multiboot[0] & (1<<2)) != 0)
|
||||
strncpy(BOOTLINE, KADDR(multiboot[4]), BOOTLINELEN-1);
|
||||
|
||||
cp = BOOTARGS;
|
||||
ep = cp + BOOTARGSLEN-1;
|
||||
|
||||
/* memory map */
|
||||
if((multiboot[0] & (1<<6)) != 0 && (l = multiboot[11]) >= 24){
|
||||
cp = seprint(cp, ep, "*e820=");
|
||||
m = KADDR(multiboot[12]);
|
||||
while(m[0] >= 20 && m[0] <= l-4){
|
||||
uvlong base, size;
|
||||
m++;
|
||||
base = ((uvlong)m[0] | (uvlong)m[1]<<32);
|
||||
size = ((uvlong)m[2] | (uvlong)m[3]<<32);
|
||||
cp = seprint(cp, ep, "%.1x %.16llux %.16llux ",
|
||||
m[4] & 0xF, base, base+size);
|
||||
l -= m[-1]+4;
|
||||
m = (ulong*)((ulong)m + m[-1]);
|
||||
}
|
||||
cp[-1] = '\n';
|
||||
}
|
||||
|
||||
/* plan9.ini passed as the first module */
|
||||
if((multiboot[0] & (1<<3)) != 0 && multiboot[5] > 0){
|
||||
m = KADDR(multiboot[6]);
|
||||
l = m[1] - m[0];
|
||||
m = KADDR(m[0]);
|
||||
if(cp+l > ep)
|
||||
l = ep - cp;
|
||||
memmove(cp, m, l);
|
||||
cp += l;
|
||||
}
|
||||
*cp = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
options(void)
|
||||
{
|
||||
long i, n;
|
||||
char *cp, *line[MAXCONF], *p, *q;
|
||||
ulong *m, l;
|
||||
extern ulong *multiboot;
|
||||
|
||||
if(multiboot != nil){
|
||||
cp = BOOTARGS;
|
||||
*cp = 0;
|
||||
if((*multiboot & 8) != 0 && multiboot[5] > 0){
|
||||
m = KADDR(multiboot[6]);
|
||||
l = m[1] - m[0];
|
||||
m = KADDR(m[0]);
|
||||
if(l >= BOOTARGSLEN)
|
||||
l = BOOTARGSLEN - 1;
|
||||
memmove(cp, m, l);
|
||||
cp[l] = 0;
|
||||
}
|
||||
}
|
||||
multibootargs();
|
||||
|
||||
/*
|
||||
* parse configuration args from dos file plan9.ini
|
||||
|
|
Loading…
Reference in a new issue