* Sync to trunk HEAD (r53473).
[reactos.git] / boot / freeldr / freeldr / include / arch / pc / x86common.h
index 1e85f21..c8b94f7 100644 (file)
@@ -4,11 +4,17 @@
 #endif
 
 /* Memory layout */
+//#ifdef _M_AMD64
+#define PML4_ADDRESS        HEX(1000) /* One page PML4 page table */
+#define PDP_ADDRESS         HEX(2000) /* One page PDP page table */
+#define PD_ADDRESS          HEX(3000) /* One page PD page table */
+//#endif
 #define STACK16ADDR         HEX(6F00) /* The 16-bit stack top will be at 0000:6F00 */
 #define BSS_START           HEX(6F00)
 #define FREELDR_BASE        HEX(F800)
 #define FREELDR_PE_BASE    HEX(10000)
 #define STACK32ADDR        HEX(98000) /* The 32-bit stack top will be at 9000:8000, or 0xA8000 */
+#define STACK64ADDR           HEX(98000) /* The 64-bit stack top will be at 98000 */
 #define BIOSCALLBUFFER     HEX(98000) /* Buffer to store temporary data for any Int386() call */
 #define FILESYSBUFFER      HEX(80000) /* Buffer to store file system data (e.g. cluster buffer for FAT) */
 #define DISKREADBUFFER     HEX(90000) /* Buffer to store data read in from the disk via the BIOS */
 #define BIOSCALLBUFSEGMENT (BIOSCALLBUFFER/16) /* Buffer to store temporary data for any Int386() call */
 #define BIOSCALLBUFOFFSET   HEX(0000) /* Buffer to store temporary data for any Int386() call */
 
+/* Layout of the REGS structure */
+#define REGS_EAX 0
+#define REGS_EBX 4
+#define REGS_ECX 8
+#define REGS_EDX 12
+#define REGS_ESI 16
+#define REGS_EDI 20
+#define REGS_DS 24
+#define REGS_ES 26
+#define REGS_FS 28
+#define REGS_GS 30
+#define REGS_EFLAGS 32
+#define REGS_SIZE 36
+
 /* These addresses specify the realmode "BSS section" layout */
 #define BSS_RealModeEntry        (BSS_START +  0)
 #define BSS_CallbackAddress      (BSS_START +  4)
@@ -36,6 +56,8 @@
 #define BSS_PnpNodeCount         (BSS_START + 96)
 #define BSS_PnpNodeNumber        (BSS_START + 100)
 #define BSS_PnpResult            (BSS_START + 104)
+#define BSS_BootDrive            (BSS_START + 108) // 1 byte
+#define BSS_BootPartition        (BSS_START + 109) // 1 byte
 
 
 /* Realmode function IDs */
 #define FNID_PnpBiosGetDeviceNode 5
 #define FNID_BootLinuxKernel 6
 
-/* Layout of the REGS structure */
-#define REGS_EAX 0
-#define REGS_EBX 4
-#define REGS_ECX 8
-#define REGS_EDX 12
-#define REGS_ESI 16
-#define REGS_EDI 20
-#define REGS_DS 24
-#define REGS_ES 26
-#define REGS_FS 28
-#define REGS_GS 30
-#define REGS_EFLAGS 32
-
-
-// Flag Masks
-#define I386FLAG_CF            HEX(0001)  // Carry Flag
-#define I386FLAG_RESV1 HEX(0002)  // Reserved - Must be 1
-#define I386FLAG_PF            HEX(0004)  // Parity Flag
-#define I386FLAG_RESV2 HEX(0008)  // Reserved - Must be 0
-#define I386FLAG_AF            HEX(0010)  // Auxiliary Flag
-#define I386FLAG_RESV3 HEX(0020)  // Reserved - Must be 0
-#define I386FLAG_ZF            HEX(0040)  // Zero Flag
-#define I386FLAG_SF            HEX(0080)  // Sign Flag
-#define I386FLAG_TF            HEX(0100)  // Trap Flag (Single Step)
-#define I386FLAG_IF            HEX(0200)  // Interrupt Flag
-#define I386FLAG_DF            HEX(0400)  // Direction Flag
-#define I386FLAG_OF            HEX(0800)  // Overflow Flag
-
+/* Flag Masks */
 #define CR0_PE_SET     HEX(00000001)   /* OR this value with CR0 to enable pmode */
 #define CR0_PE_CLR     HEX(FFFFFFFE)   /* AND this value with CR0 to disable pmode */
 
 #define PMODE_DS       HEX(10) /* PMode data selector, base 0 limit 4g */
 #define RMODE_CS       HEX(18) /* RMode code selector, base 0 limit 64k */
 #define RMODE_DS       HEX(20) /* RMode data selector, base 0 limit 64k */
+//#else
+/* Long mode selectors */
+#define LMODE_CS HEX(10)
+#define LMODE_DS HEX(18)
+#define CMODE_CS HEX(30)
 //#endif
 
 /* Makes "x" a global variable or label */