Use symbols for cmos offsets in ram_probe()
authorKevin O'Connor <kevin@koconnor.net>
Fri, 7 Mar 2008 00:16:37 +0000 (19:16 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Fri, 7 Mar 2008 00:16:37 +0000 (19:16 -0500)
This patches uses symbols for cmos offsets when calculating ram size
in ram_probe()
Besides, it adds some cmos offset symbols into cmos.h, and changes
some memory cmos offset to be more meaningful.

Signed-off-by: Nguyen Anh Quynh <aquynh@gmail.com>
src/cmos.h
src/post.c
src/system.c

index fe765c1..d1ff8b3 100644 (file)
 #define CMOS_FLOPPY_DRIVE_TYPE   0x10
 #define CMOS_DISK_DATA           0x12
 #define CMOS_EQUIPMENT_INFO      0x14
+#define CMOS_MEM_BASE_LOW        0x17
+#define CMOS_MEM_BASE_HIGH       0x18
 #define CMOS_DISK_DRIVE1_TYPE    0x19
 #define CMOS_DISK_DRIVE2_TYPE    0x1a
 #define CMOS_DISK_DRIVE1_CYL     0x1b
 #define CMOS_DISK_DRIVE2_CYL     0x24
 #define CMOS_BIOS_CONFIG         0x2d
-#define CMOS_EXTMEM_LOW          0x30
-#define CMOS_EXTMEM_HIGH         0x31
+#define CMOS_MEM_EXTMEM_LOW      0x30
+#define CMOS_MEM_EXTMEM_HIGH     0x31
 #define CMOS_CENTURY             0x32
-#define CMOS_EXTMEM2_LOW         0x34
-#define CMOS_EXTMEM2_HIGH        0x35
+#define CMOS_MEM_EXTMEM2_LOW     0x34
+#define CMOS_MEM_EXTMEM2_HIGH    0x35
 #define CMOS_BIOS_BOOTFLAG1      0x38
 #define CMOS_BIOS_DISKTRANSFLAG  0x39
 #define CMOS_BIOS_BOOTFLAG2      0x3d
index acd35db..31d08cc 100644 (file)
@@ -525,11 +525,11 @@ rom_scan(u32 start, u32 end)
 static void
 ram_probe(void)
 {
-    if (inb_cmos(0x34) | inb_cmos(0x35))
-        ram_size = (inb_cmos(0x34) | (inb_cmos(0x35) << 8)) * 65536 +
-                   16 * 1024 * 1024;
+    if (inb_cmos(CMOS_MEM_EXTMEM2_LOW) | inb_cmos(CMOS_MEM_EXTMEM2_HIGH))
+        ram_size = (inb_cmos(CMOS_MEM_EXTMEM2_LOW) | (inb_cmos(CMOS_MEM_EXTMEM2_HIGH) << 8)) *
+                          64 * 1024 + 16 * 1024 * 1024;
     else
-        ram_size = (inb_cmos(0x17) | (inb_cmos(0x18) << 8)) * 1024;
+        ram_size = (inb_cmos(CMOS_MEM_BASE_LOW) | (inb_cmos(CMOS_MEM_BASE_HIGH) << 8)) * 1024;
 #ifdef CONFIG_USE_EBDA_TABLES
     ebda_cur_addr = ((*(u16 *)(0x40e)) << 4) + 0x380;
 #endif
index 67fdb63..bd8527a 100644 (file)
@@ -211,8 +211,8 @@ handle_1587(struct bregs *regs)
 static void
 handle_1588(struct bregs *regs)
 {
-    regs->al = inb_cmos(CMOS_EXTMEM_LOW);
-    regs->ah = inb_cmos(CMOS_EXTMEM_HIGH);
+    regs->al = inb_cmos(CMOS_MEM_EXTMEM_LOW);
+    regs->ah = inb_cmos(CMOS_MEM_EXTMEM_HIGH);
     // According to Ralf Brown's interrupt the limit should be 15M,
     // but real machines mostly return max. 63M.
     if (regs->ax > 0xffc0)
@@ -265,16 +265,16 @@ handle_15e801(struct bregs *regs)
     // regs.u.r16.bx = 0;
 
     // Get the amount of extended memory (above 1M)
-    regs->cl = inb_cmos(CMOS_EXTMEM_LOW);
-    regs->ch = inb_cmos(CMOS_EXTMEM_HIGH);
+    regs->cl = inb_cmos(CMOS_MEM_EXTMEM_LOW);
+    regs->ch = inb_cmos(CMOS_MEM_EXTMEM_HIGH);
 
     // limit to 15M
     if (regs->cx > 0x3c00)
         regs->cx = 0x3c00;
 
     // Get the amount of extended memory above 16M in 64k blocs
-    regs->dl = inb_cmos(CMOS_EXTMEM2_LOW);
-    regs->dh = inb_cmos(CMOS_EXTMEM2_HIGH);
+    regs->dl = inb_cmos(CMOS_MEM_EXTMEM2_LOW);
+    regs->dh = inb_cmos(CMOS_MEM_EXTMEM2_HIGH);
 
     // Set configured memory equal to extended memory
     regs->ax = regs->cx;
@@ -310,9 +310,9 @@ handle_15e820(struct bregs *regs)
         return;
     }
 
-    u32 extended_memory_size = inb_cmos(CMOS_EXTMEM2_HIGH);
+    u32 extended_memory_size = inb_cmos(CMOS_MEM_EXTMEM2_HIGH);
     extended_memory_size <<= 8;
-    extended_memory_size |= inb_cmos(CMOS_EXTMEM2_LOW);
+    extended_memory_size |= inb_cmos(CMOS_MEM_EXTMEM2_LOW);
     extended_memory_size *= 64;
     // greater than EFF00000???
     if (extended_memory_size > 0x3bc000)
@@ -322,9 +322,9 @@ handle_15e820(struct bregs *regs)
     extended_memory_size += (16L * 1024 * 1024);
 
     if (extended_memory_size <= (16L * 1024 * 1024)) {
-        extended_memory_size = inb_cmos(CMOS_EXTMEM_HIGH);
+        extended_memory_size = inb_cmos(CMOS_MEM_EXTMEM_HIGH);
         extended_memory_size <<= 8;
-        extended_memory_size |= inb_cmos(CMOS_EXTMEM_LOW);
+        extended_memory_size |= inb_cmos(CMOS_MEM_EXTMEM_LOW);
         extended_memory_size *= 1024;
     }