Просмотр исходного кода

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 лет назад
Родитель
Сommit
986f6ffff1
2 измененных файлов: 21 добавлений и 13 удалений
  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 Просмотреть файл

@@ -135,10 +135,9 @@ static unsigned int extmemsize ( void ) {
135 135
  * Get e820 memory map
136 136
  *
137 137
  * @v memmap		Memory map to fill in
138
- * @v entries		Maximum number of entries in memory map
139 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 141
 	unsigned int index = 0;
143 142
 	uint32_t next = 0;
144 143
 	uint32_t smap;
@@ -170,10 +169,12 @@ static int meme820 ( struct memory_region *memmap, unsigned int entries ) {
170 169
 		if ( e820buf.type != E820_TYPE_RAM )
171 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 174
 		index++;
176
-	} while ( ( index < entries ) && ( next != 0 ) );
175
+	} while ( ( next != 0 ) && 
176
+		  ( index < ( sizeof ( memmap->regions ) /
177
+			      sizeof ( memmap->regions[0] ) ) ) );
177 178
 	return 0;
178 179
 }
179 180
 
@@ -181,25 +182,24 @@ static int meme820 ( struct memory_region *memmap, unsigned int entries ) {
181 182
  * Get memory map
182 183
  *
183 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 187
 	unsigned int basemem, extmem;
188 188
 	int rc;
189 189
 
190 190
 	/* Clear memory map */
191
-	memset ( memmap, 0, ( entries * sizeof ( *memmap ) ) );
191
+	memset ( memmap, 0, sizeof ( *memmap ) );
192 192
 
193 193
 	/* Get base and extended memory sizes */
194 194
 	basemem = basememsize();
195 195
 	extmem = extmemsize();
196 196
 	
197 197
 	/* Try INT 15,e820 first */
198
-	if ( ( rc = meme820 ( memmap, entries ) ) == 0 )
198
+	if ( ( rc = meme820 ( memmap ) ) == 0 )
199 199
 		return;
200 200
 
201 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 Просмотреть файл

@@ -18,6 +18,14 @@ struct memory_region {
18 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 31
 #endif /* _MEMMAP_H */

Загрузка…
Отмена
Сохранить