Env_memory_parse: move into VM

Only possible user of that function.
While here, fix bug about NR_MEMS vs MAXMEMMAP
NR_MEMS=16 is currently less than MAXMEMMAP=40; avoid overriding
This commit is contained in:
Antoine Leca 2013-04-03 15:14:34 +02:00 committed by David van Moolenbroek
parent cfc36e5fd3
commit 521de2a716
3 changed files with 13 additions and 33 deletions

View file

@ -2,5 +2,3 @@ int env_parse(char *env, char *fmt, int field, long *param, long min,
long max);
void env_panic(char *env);
int env_prefix(char *env, char *prefix);
int env_memory_parse(struct memory *chunks, int nchunks);

View file

@ -89,27 +89,3 @@ badenv:
env_panic(env);
return -1;
}
/*=========================================================================*
* env_memory_parse *
*=========================================================================*/
int env_memory_parse(mem_chunks, maxchunks)
struct memory *mem_chunks; /* where to store the memory bits */
int maxchunks; /* how many were found */
{
static kinfo_t kinfo;
int mm, r;
if((r=sys_getkinfo(&kinfo)) != OK) return r;
/* Initialize everything to zero. */
memset(mem_chunks, 0, maxchunks*sizeof(*mem_chunks));
for(mm = 0; mm < MAXMEMMAP; mm++) {
mem_chunks[mm].base = kinfo.memmap[mm].addr;
mem_chunks[mm].size = kinfo.memmap[mm].len;
}
return OK;
}

View file

@ -40,20 +40,26 @@
/*===========================================================================*
* get_mem_chunks *
*===========================================================================*/
void get_mem_chunks(mem_chunks)
struct memory *mem_chunks; /* store mem chunks here */
void get_mem_chunks(
struct memory *mem_chunks) /* store mem chunks here */
{
/* Initialize the free memory list from the 'memory' boot variable. Translate
/* Initialize the free memory list from the kernel-provided memory map. Translate
* the byte offsets and sizes in this list to clicks, properly truncated.
*/
phys_bytes base, size, limit;
int i;
struct memory *memp;
/* Obtain and parse memory from system environment. */
if(env_memory_parse(mem_chunks, NR_MEMS) != OK)
panic("couldn't obtain memory chunks");
/* Initialize everything to zero. */
memset(mem_chunks, 0, NR_MEMS*sizeof(*mem_chunks));
/* Obtain and parse memory from kernel environment. */
/* XXX Any memory chunk in excess of NR_MEMS is silently ignored. */
for(i = 0; i < MIN(MAXMEMMAP, NR_MEMS); i++) {
mem_chunks[i].base = kernel_boot_info.memmap[i].addr;
mem_chunks[i].size = kernel_boot_info.memmap[i].len;
}
/* Round physical memory to clicks. Round start up, round end down. */
for (i = 0; i < NR_MEMS; i++) {
memp = &mem_chunks[i]; /* next mem chunk is stored here */