e820: support new format
This commit is contained in:
parent
447b37d838
commit
ba7374508e
1 changed files with 13 additions and 4 deletions
|
@ -513,10 +513,11 @@ ramscan(ulong maxmem)
|
||||||
typedef struct Emap Emap;
|
typedef struct Emap Emap;
|
||||||
struct Emap
|
struct Emap
|
||||||
{
|
{
|
||||||
|
int type;
|
||||||
uvlong base;
|
uvlong base;
|
||||||
uvlong len;
|
uvlong len;
|
||||||
};
|
};
|
||||||
static Emap emap[16];
|
static Emap emap[128];
|
||||||
int nemap;
|
int nemap;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -654,15 +655,23 @@ e820scan(void)
|
||||||
if((s = getconf("e820")) == nil)
|
if((s = getconf("e820")) == nil)
|
||||||
return -1;
|
return -1;
|
||||||
for(nemap = 0; nemap < nelem(emap); nemap++){
|
for(nemap = 0; nemap < nelem(emap); nemap++){
|
||||||
|
while(*s == ' ')
|
||||||
|
s++;
|
||||||
if(*s == 0)
|
if(*s == 0)
|
||||||
break;
|
break;
|
||||||
e = emap + nemap;
|
e = emap + nemap;
|
||||||
|
e->type = 1;
|
||||||
|
if(s[1] == ' '){ /* new format */
|
||||||
|
e->type = s[0] - '0';
|
||||||
|
s += 2;
|
||||||
|
}
|
||||||
e->base = strtoull(s, &s, 16);
|
e->base = strtoull(s, &s, 16);
|
||||||
if(*s != ' ')
|
if(*s != ' ')
|
||||||
break;
|
break;
|
||||||
e->len = strtoull(s, &s, 16) - e->base;
|
e->len = strtoull(s, &s, 16);
|
||||||
if(*s != ' ' && *s != 0 || e->len >= 1ull<<32 || e->len == 0)
|
if(*s != ' ' && *s != 0 || e->len <= e->base)
|
||||||
break;
|
break;
|
||||||
|
e->len -= e->base;
|
||||||
}
|
}
|
||||||
if(nemap == 0)
|
if(nemap == 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -686,7 +695,7 @@ e820scan(void)
|
||||||
if(last < e->base)
|
if(last < e->base)
|
||||||
map(last, e->base-last, MemUPA);
|
map(last, e->base-last, MemUPA);
|
||||||
last = base+len;
|
last = base+len;
|
||||||
map(base, len, MemRAM);
|
map(base, len, (e->type == 1) ? MemRAM : MemReserved);
|
||||||
}
|
}
|
||||||
if(last < (1LL<<32))
|
if(last < (1LL<<32))
|
||||||
map(last, (u32int)-last, MemUPA);
|
map(last, (u32int)-last, MemUPA);
|
||||||
|
|
Loading…
Reference in a new issue