Browse Source

Define a struct memory_map with a fixed number of entries, rather than

requiring each caller to decide how many entries it wants to permit.
tags/v0.9.3
Michael Brown 18 years ago
parent
commit
986f6ffff1
2 changed files with 21 additions and 13 deletions
  1. 12
    12
      src/arch/i386/firmware/pcbios/memmap.c
  2. 9
    1
      src/arch/i386/include/memmap.h

+ 12
- 12
src/arch/i386/firmware/pcbios/memmap.c View File

135
  * Get e820 memory map
135
  * Get e820 memory map
136
  *
136
  *
137
  * @v memmap		Memory map to fill in
137
  * @v memmap		Memory map to fill in
138
- * @v entries		Maximum number of entries in memory map
139
  * @ret rc		Return status code
138
  * @ret rc		Return status code
140
  */
139
  */
141
-static int meme820 ( struct memory_region *memmap, unsigned int entries ) {
140
+static int meme820 ( struct memory_map *memmap ) {
142
 	unsigned int index = 0;
141
 	unsigned int index = 0;
143
 	uint32_t next = 0;
142
 	uint32_t next = 0;
144
 	uint32_t smap;
143
 	uint32_t smap;
170
 		if ( e820buf.type != E820_TYPE_RAM )
169
 		if ( e820buf.type != E820_TYPE_RAM )
171
 			continue;
170
 			continue;
172
 
171
 
173
-		memmap[index].start = e820buf.start;
174
-		memmap[index].end = e820buf.start + e820buf.len;
172
+		memmap->regions[index].start = e820buf.start;
173
+		memmap->regions[index].end = e820buf.start + e820buf.len;
175
 		index++;
174
 		index++;
176
-	} while ( ( index < entries ) && ( next != 0 ) );
175
+	} while ( ( next != 0 ) && 
176
+		  ( index < ( sizeof ( memmap->regions ) /
177
+			      sizeof ( memmap->regions[0] ) ) ) );
177
 	return 0;
178
 	return 0;
178
 }
179
 }
179
 
180
 
181
  * Get memory map
182
  * Get memory map
182
  *
183
  *
183
  * @v memmap		Memory map to fill in
184
  * @v memmap		Memory map to fill in
184
- * @v entries		Maximum number of entries in memory map (minimum 2)
185
  */
185
  */
186
-void get_memmap ( struct memory_region *memmap, unsigned int entries ) {
186
+void get_memmap ( struct memory_map *memmap ) {
187
 	unsigned int basemem, extmem;
187
 	unsigned int basemem, extmem;
188
 	int rc;
188
 	int rc;
189
 
189
 
190
 	/* Clear memory map */
190
 	/* Clear memory map */
191
-	memset ( memmap, 0, ( entries * sizeof ( *memmap ) ) );
191
+	memset ( memmap, 0, sizeof ( *memmap ) );
192
 
192
 
193
 	/* Get base and extended memory sizes */
193
 	/* Get base and extended memory sizes */
194
 	basemem = basememsize();
194
 	basemem = basememsize();
195
 	extmem = extmemsize();
195
 	extmem = extmemsize();
196
 	
196
 	
197
 	/* Try INT 15,e820 first */
197
 	/* Try INT 15,e820 first */
198
-	if ( ( rc = meme820 ( memmap, entries ) ) == 0 )
198
+	if ( ( rc = meme820 ( memmap ) ) == 0 )
199
 		return;
199
 		return;
200
 
200
 
201
 	/* Fall back to constructing a map from basemem and extmem sizes */
201
 	/* Fall back to constructing a map from basemem and extmem sizes */
202
-	memmap[0].end = ( basemem * 1024 );
203
-	memmap[1].start = 0x100000;
204
-	memmap[1].end = 0x100000 + ( extmem * 1024 );
202
+	memmap->regions[0].end = ( basemem * 1024 );
203
+	memmap->regions[1].start = 0x100000;
204
+	memmap->regions[1].end = 0x100000 + ( extmem * 1024 );
205
 }
205
 }

+ 9
- 1
src/arch/i386/include/memmap.h View File

18
 	uint64_t end;
18
 	uint64_t end;
19
 };
19
 };
20
 
20
 
21
-extern void get_memmap ( struct memory_region *memmap, unsigned int entries );
21
+/** Maximum number of memory regions we expect to encounter */
22
+#define MAX_MEMORY_REGIONS 8
23
+
24
+/** A memory map */
25
+struct memory_map {
26
+	struct memory_region regions[MAX_MEMORY_REGIONS];
27
+};
28
+
29
+extern void get_memmap ( struct memory_map *memmap );
22
 
30
 
23
 #endif /* _MEMMAP_H */
31
 #endif /* _MEMMAP_H */

Loading…
Cancel
Save