grml...
[seabios.git] / src / pirtable.c
index 75c46938bccc06a22cf79e4a37bc679c967c9ee3..4c3f1ffc486d7afc725f43687c63f0f1138da5d0 100644 (file)
@@ -3,17 +3,22 @@
 // Copyright (C) 2008  Kevin O'Connor <kevin@koconnor.net>
 // Copyright (C) 2002  MandrakeSoft S.A.
 //
-// This file may be distributed under the terms of the GNU GPLv3 license.
+// This file may be distributed under the terms of the GNU LGPLv3 license.
 
 #include "pci.h" // struct pir_header
 #include "util.h" // checksum
 #include "biosvar.h" // SET_EBDA
 
+u16 PirOffset VAR16VISIBLE;
+
 struct pir_table {
     struct pir_header pir;
     struct pir_slot slots[6];
-} PACKED PIR_TABLE __attribute__((aligned(16))) = {
-#if CONFIG_PIRTABLE
+} PACKED;
+
+extern struct pir_table PIR_TABLE;
+#if CONFIG_PIRTABLE && !CONFIG_COREBOOT
+struct pir_table PIR_TABLE __aligned(16) VAR16EXPORT = {
     .pir = {
         .version = 0x0100,
         .size = sizeof(struct pir_table),
@@ -83,16 +88,18 @@ struct pir_table {
             .slot_nr = 5,
         },
     }
-#endif // CONFIG_PIRTABLE
 };
+#endif // CONFIG_PIRTABLE && !CONFIG_COREBOOT
 
 void
-create_pirtable()
+create_pirtable(void)
 {
     if (! CONFIG_PIRTABLE)
         return;
 
+    dprintf(3, "init PIR table\n");
+
     PIR_TABLE.pir.signature = PIR_SIGNATURE;
-    PIR_TABLE.pir.checksum = -checksum((u8*)&PIR_TABLE, sizeof(PIR_TABLE));
-    SET_EBDA(pir_loc, (u32)&PIR_TABLE);
+    PIR_TABLE.pir.checksum -= checksum(&PIR_TABLE, sizeof(PIR_TABLE));
+    PirOffset = (u32)&PIR_TABLE.pir - BUILD_BIOS_ADDR;
 }