Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F152837832
D12370.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D12370.diff
View Options
Index: head/sys/boot/i386/libi386/biosmem.c
===================================================================
--- head/sys/boot/i386/libi386/biosmem.c
+++ head/sys/boot/i386/libi386/biosmem.c
@@ -63,150 +63,157 @@
* memory correctly. You need both maker and product as
* reported by smbios.
*/
-#define BQ_DISTRUST_E820_EXTMEM 0x1 /* e820 might not return useful
- extended memory */
+/* e820 might not return useful extended memory */
+#define BQ_DISTRUST_E820_EXTMEM 0x1
struct bios_getmem_quirks {
- const char* bios_vendor;
- const char* maker;
- const char* product;
- int quirk;
+ const char *bios_vendor;
+ const char *maker;
+ const char *product;
+ int quirk;
};
static struct bios_getmem_quirks quirks[] = {
- {"coreboot", "Acer", "Peppy", BQ_DISTRUST_E820_EXTMEM},
- {NULL, NULL, NULL, 0}
+ {"coreboot", "Acer", "Peppy", BQ_DISTRUST_E820_EXTMEM},
+ {NULL, NULL, NULL, 0}
};
static int
bios_getquirks(void)
{
- int i;
+ int i;
- for (i=0; quirks[i].quirk != 0; ++i)
- if (smbios_match(quirks[i].bios_vendor, quirks[i].maker,
- quirks[i].product))
- return (quirks[i].quirk);
+ for (i = 0; quirks[i].quirk != 0; ++i) {
+ if (smbios_match(quirks[i].bios_vendor, quirks[i].maker,
+ quirks[i].product))
+ return (quirks[i].quirk);
+ }
- return (0);
+ return (0);
}
void
bios_getmem(void)
{
- uint64_t size;
+ uint64_t size;
- /* Parse system memory map */
- v86.ebx = 0;
- do {
- v86.ctl = V86_FLAGS;
- v86.addr = 0x15; /* int 0x15 function 0xe820*/
- v86.eax = 0xe820;
- v86.ecx = sizeof(struct bios_smap_xattr);
- v86.edx = SMAP_SIG;
- v86.es = VTOPSEG(&smap);
- v86.edi = VTOPOFF(&smap);
- v86int();
- if ((V86_CY(v86.efl)) || (v86.eax != SMAP_SIG))
- break;
- /* look for a low-memory segment that's large enough */
- if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base == 0) &&
- (smap.length >= (512 * 1024))) {
- bios_basemem = smap.length;
- b_bios_probed |= B_BASEMEM_E820;
- }
+ /* Parse system memory map */
+ v86.ebx = 0;
+ do {
+ v86.ctl = V86_FLAGS;
+ v86.addr = 0x15; /* int 0x15 function 0xe820 */
+ v86.eax = 0xe820;
+ v86.ecx = sizeof(struct bios_smap_xattr);
+ v86.edx = SMAP_SIG;
+ v86.es = VTOPSEG(&smap);
+ v86.edi = VTOPOFF(&smap);
+ v86int();
+ if ((V86_CY(v86.efl)) || (v86.eax != SMAP_SIG))
+ break;
+ /* look for a low-memory segment that's large enough */
+ if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base == 0) &&
+ (smap.length >= (512 * 1024))) {
+ bios_basemem = smap.length;
+ b_bios_probed |= B_BASEMEM_E820;
+ }
- /* look for the first segment in 'extended' memory */
- if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base == 0x100000) &&
- !(bios_getquirks() & BQ_DISTRUST_E820_EXTMEM)) {
- bios_extmem = smap.length;
- b_bios_probed |= B_EXTMEM_E820;
- }
+ /* look for the first segment in 'extended' memory */
+ if ((smap.type == SMAP_TYPE_MEMORY) &&
+ (smap.base == 0x100000) &&
+ !(bios_getquirks() & BQ_DISTRUST_E820_EXTMEM)) {
+ bios_extmem = smap.length;
+ b_bios_probed |= B_EXTMEM_E820;
+ }
- /*
- * Look for the largest segment in 'extended' memory beyond
- * 1MB but below 4GB.
- */
- if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base > 0x100000) &&
- (smap.base < 0x100000000ull)) {
- size = smap.length;
+ /*
+ * Look for the largest segment in 'extended' memory beyond
+ * 1MB but below 4GB.
+ */
+ if ((smap.type == SMAP_TYPE_MEMORY) &&
+ (smap.base > 0x100000) &&
+ (smap.base < 0x100000000ull)) {
+ size = smap.length;
- /*
- * If this segment crosses the 4GB boundary, truncate it.
- */
- if (smap.base + size > 0x100000000ull)
- size = 0x100000000ull - smap.base;
+ /*
+ * If this segment crosses the 4GB boundary,
+ * truncate it.
+ */
+ if (smap.base + size > 0x100000000ull)
+ size = 0x100000000ull - smap.base;
- if (size > high_heap_size) {
- high_heap_size = size;
- high_heap_base = smap.base;
- }
- }
- } while (v86.ebx != 0);
+ if (size > high_heap_size) {
+ high_heap_size = size;
+ high_heap_base = smap.base;
+ }
+ }
+ } while (v86.ebx != 0);
- /* Fall back to the old compatibility function for base memory */
- if (bios_basemem == 0) {
- v86.ctl = 0;
- v86.addr = 0x12; /* int 0x12 */
- v86int();
-
- bios_basemem = (v86.eax & 0xffff) * 1024;
- b_bios_probed |= B_BASEMEM_12;
- }
+ /* Fall back to the old compatibility function for base memory */
+ if (bios_basemem == 0) {
+ v86.ctl = 0;
+ v86.addr = 0x12; /* int 0x12 */
+ v86int();
- /* Fall back through several compatibility functions for extended memory */
- if (bios_extmem == 0) {
- v86.ctl = V86_FLAGS;
- v86.addr = 0x15; /* int 0x15 function 0xe801*/
- v86.eax = 0xe801;
- v86int();
- if (!(V86_CY(v86.efl))) {
- /*
- * Clear high_heap; it may end up overlapping
- * with the segment we're determining here.
- * Let the default "steal stuff from top of
- * bios_extmem" code below pick up on it.
- */
- high_heap_size = 0;
- high_heap_base = 0;
+ bios_basemem = (v86.eax & 0xffff) * 1024;
+ b_bios_probed |= B_BASEMEM_12;
+ }
- /*
- * %cx is the number of 1KiB blocks between 1..16MiB.
- * It can only be up to 0x3c00; if it's smaller then
- * there's a PC AT memory hole so we can't treat
- * it as contiguous.
- */
- bios_extmem = (v86.ecx & 0xffff) * 1024;
- if (bios_extmem == (1024 * 0x3c00))
- bios_extmem += (v86.edx & 0xffff) * 64 * 1024;
+ /*
+ * Fall back through several compatibility functions for extended
+ * memory.
+ */
+ if (bios_extmem == 0) {
+ v86.ctl = V86_FLAGS;
+ v86.addr = 0x15; /* int 0x15 function 0xe801 */
+ v86.eax = 0xe801;
+ v86int();
+ if (!(V86_CY(v86.efl))) {
+ /*
+ * Clear high_heap; it may end up overlapping
+ * with the segment we're determining here.
+ * Let the default "steal stuff from top of
+ * bios_extmem" code below pick up on it.
+ */
+ high_heap_size = 0;
+ high_heap_base = 0;
- /* truncate bios_extmem */
- if (bios_extmem > 0x3ff00000)
- bios_extmem = 0x3ff00000;
+ /*
+ * %cx is the number of 1KiB blocks between 1..16MiB.
+ * It can only be up to 0x3c00; if it's smaller then
+ * there's a PC AT memory hole so we can't treat
+ * it as contiguous.
+ */
+ bios_extmem = (v86.ecx & 0xffff) * 1024;
+ if (bios_extmem == (1024 * 0x3c00))
+ bios_extmem += (v86.edx & 0xffff) * 64 * 1024;
- b_bios_probed |= B_EXTMEM_E801;
+ /* truncate bios_extmem */
+ if (bios_extmem > 0x3ff00000)
+ bios_extmem = 0x3ff00000;
+
+ b_bios_probed |= B_EXTMEM_E801;
+ }
}
- }
- if (bios_extmem == 0) {
- v86.ctl = 0;
- v86.addr = 0x15; /* int 0x15 function 0x88*/
- v86.eax = 0x8800;
- v86int();
- bios_extmem = (v86.eax & 0xffff) * 1024;
- b_bios_probed |= B_EXTMEM_8800;
- }
+ if (bios_extmem == 0) {
+ v86.ctl = 0;
+ v86.addr = 0x15; /* int 0x15 function 0x88 */
+ v86.eax = 0x8800;
+ v86int();
+ bios_extmem = (v86.eax & 0xffff) * 1024;
+ b_bios_probed |= B_EXTMEM_8800;
+ }
- /* Set memtop to actual top of memory */
- memtop = memtop_copyin = 0x100000 + bios_extmem;
+ /* Set memtop to actual top of memory */
+ memtop = memtop_copyin = 0x100000 + bios_extmem;
- /*
- * If we have extended memory and did not find a suitable heap
- * region in the SMAP, use the last HEAP_MIN of 'extended' memory as a
- * high heap candidate.
- */
- if (bios_extmem >= HEAP_MIN && high_heap_size < HEAP_MIN) {
- high_heap_size = HEAP_MIN;
- high_heap_base = memtop - HEAP_MIN;
- }
+ /*
+ * If we have extended memory and did not find a suitable heap
+ * region in the SMAP, use the last HEAP_MIN of 'extended' memory as a
+ * high heap candidate.
+ */
+ if (bios_extmem >= HEAP_MIN && high_heap_size < HEAP_MIN) {
+ high_heap_size = HEAP_MIN;
+ high_heap_base = memtop - HEAP_MIN;
+ }
}
static int
@@ -214,16 +221,16 @@
{
int bq = bios_getquirks();
- printf("bios_basemem: 0x%llx\n", (unsigned long long) bios_basemem);
- printf("bios_extmem: 0x%llx\n", (unsigned long long) bios_extmem);
- printf("memtop: 0x%llx\n", (unsigned long long) memtop);
- printf("high_heap_base: 0x%llx\n", (unsigned long long) high_heap_base);
- printf("high_heap_size: 0x%llx\n", (unsigned long long) high_heap_size);
+ printf("bios_basemem: 0x%llx\n", (unsigned long long)bios_basemem);
+ printf("bios_extmem: 0x%llx\n", (unsigned long long)bios_extmem);
+ printf("memtop: 0x%llx\n", (unsigned long long)memtop);
+ printf("high_heap_base: 0x%llx\n", (unsigned long long)high_heap_base);
+ printf("high_heap_size: 0x%llx\n", (unsigned long long)high_heap_size);
printf("bios_quirks: 0x%02x", bq);
if (bq & BQ_DISTRUST_E820_EXTMEM)
printf(" BQ_DISTRUST_E820_EXTMEM");
printf("\n");
- printf("b_bios_probed: 0x%02x", (int) b_bios_probed);
+ printf("b_bios_probed: 0x%02x", (int)b_bios_probed);
if (b_bios_probed & B_BASEMEM_E820)
printf(" B_BASEMEM_E820");
if (b_bios_probed & B_BASEMEM_12)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 18, 10:36 AM (7 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31714143
Default Alt Text
D12370.diff (8 KB)
Attached To
Mode
D12370: loader: biosmem.c cstyle cleanup
Attached
Detach File
Event Timeline
Log In to Comment