[FREELDR]
[reactos.git] / reactos / boot / freeldr / freeldr / include / arch / pc / x86common.h
index 47854fa..91f8c42 100644 (file)
@@ -4,55 +4,58 @@
 #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(8000)
-#define FREELDR_PE_BASE     HEX(9000)
-#define STACK32ADDR        HEX(78000) /* The 32-bit stack top will be at 7000:8000, or 0x78000 */
-#define BIOSCALLBUFFER     HEX(78000) /* Buffer to store temporary data for any Int386() call */
-#define BIOSCALLBUFSEGMENT  HEX(7800) /* Buffer to store temporary data for any Int386() call */
+#define FREELDR_BASE        HEX(F800)
+#define FREELDR_PE_BASE    HEX(10000)
+#define DISKREADBUFFER     HEX(80000) /* Buffer to store data read in from the disk via the BIOS */
+#define STACKLOWLIMIT      HEX(90000)
+#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 DISKREADBUFFER_SIZE HEX(10000)
+
+#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 */
-#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 DISKREADBUFFER_SIZE 512
+#define BIOSCALLBUFSIZE     PAGE_SIZE /* max is sizeof(VESA_SVGA_INFO) = 512 */
 
 /* These addresses specify the realmode "BSS section" layout */
-#define BSS_RealModeEntry   (BSS_START +  0)
-#define BSS_CallbackAddress (BSS_START +  4)
-#define BSS_CallbackReturn  (BSS_START +  8)
-
-#define BSS_RegisterSet     (BSS_START + 16) /* size = 36 */
-#define BSS_IntVector       (BSS_START + 52)
-// next 52
-
-/* 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 BSS_RealModeEntry        (BSS_START +  0)
+#define BSS_CallbackReturn       (BSS_START +  4)
+#define BSS_RegisterSet          (BSS_START +  8) /* size = 40 */
+#define BSS_IntVector            (BSS_START + 52)
+#define BSS_PxeEntryPoint        (BSS_START + 56)
+#define BSS_PxeBufferSegment     (BSS_START + 60)
+#define BSS_PxeBufferOffset      (BSS_START + 64)
+#define BSS_PxeFunction          (BSS_START + 68)
+#define BSS_PxeResult            (BSS_START + 72)
+#define BSS_PnpBiosEntryPoint    (BSS_START + 76)
+#define BSS_PnpBiosDataSegment   (BSS_START + 80)
+#define BSS_PnpBiosBufferSegment (BSS_START + 84)
+#define BSS_PnpBiosBufferOffset  (BSS_START + 88)
+#define BSS_PnpNodeSize          (BSS_START + 92)
+#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
 
 
-// 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
+/* Realmode function IDs */
+#define FNID_Int386 0
+#define FNID_Reboot 1
+#define FNID_ChainLoadBiosBootSectorCode 2
+#define FNID_PxeCallApi 3
+#define FNID_PnpBiosGetDeviceNodeCount 4
+#define FNID_PnpBiosGetDeviceNode 5
+#define FNID_BootLinuxKernel 6
 
+/* 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 */