patch by kjk::hyperion, fix syntax of gcc inline asm
[reactos.git] / reactos / hal / halx86 / include / hal.h
index 88d382e..18c9195 100644 (file)
@@ -33,6 +33,9 @@ VOID HalpStartEnumerator (VOID);
 /* dma.c */
 VOID HalpInitDma (VOID);
 
+/* mem.c */
+PVOID HalpMapPhysMemory(ULONG PhysAddr, ULONG Size);
+
 /* Non-generic initialization */
 VOID HalpInitPhase0 (VOID);
 
@@ -281,10 +284,10 @@ typedef struct _EISA_CONTROL {
    UCHAR Reserved9[30];                 /* 0A2h-0BFh */
    
    /* DMA Controller 2 */
-   DMA1_CONTROL DmaController2;         /* 0C0h-0DFh */
+   DMA1_CONTROL DmaController2;         /* 0C0h-0CFh */
    
    /* System Reserved Ports */
-   UCHAR SystemReserved[800];           /* 0E0h-3FFh */
+   UCHAR SystemReserved[816];           /* 0D0h-3FFh */
    
    /* Extended DMA Registers, Controller 1 */
    UCHAR DmaHighByteCount1[8];          /* 400h-407h */
@@ -351,8 +354,11 @@ struct _ADAPTER_OBJECT {
   UCHAR ChannelNumber;
   UCHAR AdapterNumber;
   USHORT DmaPortAddress;
-  UCHAR AdapterMode;
-  BOOLEAN  NeedsMapRegisters;
+  union {
+    DMA_MODE AdapterMode;
+    UCHAR AdapterModeByte;
+  };
+  BOOLEAN NeedsMapRegisters;
   BOOLEAN MasterDevice;
   UCHAR Width16Bits;
   UCHAR ScatterGather;
@@ -407,17 +413,19 @@ HalQueryDisplayOwnership();
 #define Ki386EnableInterrupts()            __asm__ __volatile__("sti\n\t")
 #define Ki386HaltProcessor()       __asm__ __volatile__("hlt\n\t")
 #define Ki386RdTSC(x)              __asm__ __volatile__("rdtsc\n\t" : "=A" (x.u.LowPart), "=d" (x.u.HighPart));
+#define Ki386Rdmsr(msr,val1,val2)   __asm__ __volatile__("rdmsr" : "=a" (val1), "=d" (val2) : "c" (msr))
+#define Ki386Wrmsr(msr,val1,val2)   __asm__ __volatile__("wrmsr" : /* no outputs */ : "c" (msr), "a" (val1), "d" (val2))
 
 static inline BYTE Ki386ReadFsByte(ULONG offset)
 {
    BYTE b;
-   __asm__ __volatile__("movb %%fs:(%1),%0":"=g" (b):"0" (offset));
+   __asm__ __volatile__("movb %%fs:(%1),%0":"=r" (b):"r" (offset));
    return b;
 }
 
 static inline VOID Ki386WriteFsByte(ULONG offset, BYTE value)
 {
-    __asm__ __volatile__("movb %0,%%fs:(%1)"::"r" (value), "r" (offset));
+   __asm__ __volatile__("movb %0,%%fs:(%1)"::"r" (value), "r" (offset));
 }
 
 #elif defined(_MSC_VER)
@@ -430,8 +438,11 @@ static inline VOID Ki386WriteFsByte(ULONG offset, BYTE value)
 #error Unknown compiler for inline assembler
 #endif
 
+typedef struct tagHALP_HOOKS
+{
+  void (*InitPciBus)(ULONG BusNumber, PBUS_HANDLER BusHandler);
+} HALP_HOOKS, *PHALP_HOOKS;
 
-
-
+extern HALP_HOOKS HalpHooks;
 
 #endif /* __INTERNAL_HAL_HAL_H */