Allow external code to update hidden memory regions.
authorMichael Brown <mcb30@etherboot.org>
Fri, 12 Jan 2007 03:13:04 +0000 (03:13 +0000)
committerMichael Brown <mcb30@etherboot.org>
Fri, 12 Jan 2007 03:13:04 +0000 (03:13 +0000)
src/arch/i386/firmware/pcbios/hidemem.c
src/include/gpxe/hidemem.h [new file with mode: 0644]

index 276f9c9..3a57fcb 100644 (file)
 
 #include <realmode.h>
 #include <biosint.h>
-
-/**
- * A hidden region of Etherboot
- *
- * This represents a region that will be edited out of the system's
- * memory map.
- *
- * This structure is accessed by assembly code, so must not be
- * changed.
- */
-struct hidden_region {
-       /* Physical start address */
-       uint32_t start;
-       /* Physical end address */
-       uint32_t end;
-};
+#include <gpxe/hidemem.h>
 
 /* Linker-defined symbols */
 extern char _text[];
@@ -45,14 +30,6 @@ extern void int15();
 extern struct segoff __text16 ( int15_vector );
 #define int15_vector __use_text16 ( int15_vector )
 
-/**
- * Unique IDs for hidden regions
- */
-enum {
-       TEXT = 0,
-       BASEMEM,
-};
-
 /**
  * List of hidden regions
  *
@@ -61,9 +38,9 @@ enum {
 struct hidden_region __data16_array ( hidden_regions, [] ) = {
        [TEXT] = { 0, 0 },
        [BASEMEM] = { 0, ( 640 * 1024 ) },
+       [EXTMEM] = { 0, 0 },
        { 0, 0, } /* Terminator */
 };
-#define hidden_regions __use_data16 ( hidden_regions )
 
 /**
  * Hide Etherboot
diff --git a/src/include/gpxe/hidemem.h b/src/include/gpxe/hidemem.h
new file mode 100644 (file)
index 0000000..8910900
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _GPXE_HIDEMEM_H
+#define _GPXE_HIDEMEM_H
+
+/**
+ * @file
+ *
+ * Hidden memory regions
+ *
+ */
+
+/**
+ * A hidden region of Etherboot
+ *
+ * This represents a region that will be edited out of the system's
+ * memory map.
+ *
+ * This structure is accessed by assembly code, so must not be
+ * changed.
+ */
+struct hidden_region {
+       /* Physical start address */
+       physaddr_t start;
+       /* Physical end address */
+       physaddr_t end;
+};
+
+/**
+ * Unique IDs for hidden regions
+ */
+enum {
+       TEXT = 0,
+       BASEMEM,
+       EXTMEM,
+};
+
+extern struct hidden_region __data16_array ( hidden_regions, [] );
+#define hidden_regions __use_data16 ( hidden_regions )
+
+static inline void hide_region ( unsigned int region,
+                                physaddr_t start, physaddr_t end ) {
+       hidden_regions[region].start = start;
+       hidden_regions[region].end = end;
+}
+
+#endif /* _GPXE_HIDEMEM_H */