Merge HAL changes 34743, 34812, 34839, 34917, 35515, 35771, 35902, 35904,
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 26 Sep 2009 21:32:53 +0000 (21:32 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 26 Sep 2009 21:32:53 +0000 (21:32 +0000)
35905, 35906, 35942, 35947, 35948, 35949, 35953, 36013, 36388, 36389, 36570, 37873, 37991, 39151 from amd64 branch

svn path=/trunk/; revision=43173

1  2  3  4  5 
reactos/hal/hal.rbuild
reactos/hal/hal/hal.c
reactos/hal/hal/hal.rbuild
reactos/hal/halamd64/generic/irq.S
reactos/hal/halamd64/include/halp.h
reactos/hal/halx86/generic/timer.c
reactos/hal/halx86/include/apic.h
reactos/hal/halx86/include/hal.h
reactos/hal/halx86/include/halp.h
reactos/hal/halx86/mp/apic.c

                        <xi:include href="halarm/directory.rbuild" />
                </directory>
        </if>
   -                    <xi:include href="halx86/hal_generic_pc.rbuild" />
+       <if property="ARCH" value="amd64">
+++             <directory name="halx86">
+++                     <xi:include href="halx86/hal_generic_amd64.rbuild" />
 -                      <xi:include href="halamd64/hal_generic.rbuild" />
+++             </directory>
+               <directory name="halamd64">
++                      <xi:include href="halamd64/directory.rbuild" />
+               </directory>
+       </if>
     </group>
@@@@@@ -71,10 -71,10 -71,10 -71,11 -71,11 +71,11 @@@@@@ ULONG_PT
     NTAPI
     HalSetProfileInterval(IN ULONG_PTR Interval)
     {
 ----    KEBUGCHECK(0);
 ++++    ASSERT(FALSE);
         return Interval;
     }
  -  #if 0
  +  
+++  #ifndef _M_AMD64
     VOID
     FASTCALL
     ExAcquireFastMutex(
@@@@@@ -747,7 -747,7 -747,7 -748,7 -748,7 +748,7 @@@@@@ KeAcquireSpinLockRaiseToSynch
       return 0;
     }
     
-----
+++++#ifndef _M_AMD64
     VOID
     FASTCALL
     KeAcquireInStackQueuedSpinLock(
@@@@@@ -776,6 -776,6 -776,6 -777,6 -777,6 +777,7 @@@@@@ KeReleaseInStackQueuedSpinLock
     {
       UNIMPLEMENTED;
     }
+++++#endif
     
     VOID
     NTAPI
@@@@@@ -818,6 -818,6 -818,6 -821,7 -821,7 +822,7 @@@@@@ KeQueryPerformanceCounter
       return Value;
     }
     
   --#if 0
+++++#ifndef _M_AMD64
     #undef KeRaiseIrql
     VOID
     NTAPI
@@@@@@ -847,7 -847,7 -847,7 -851,8 -851,8 +852,9 @@@@@@ KeRaiseIrqlToSynchLevel(VOID
     
       return (KIRQL)0;
     }
+++  #endif
     
+++++#ifndef _M_AMD64
     #undef KeReleaseSpinLock
     VOID
     NTAPI
@@@@@@ -857,7 -857,7 -857,7 -862,7 -862,7 +864,7 @@@@@@ KeReleaseSpinLock
     {
       UNIMPLEMENTED;
     }
-----
+++++#endif
     
     VOID
     NTAPI
@@@@@@ -931,8 -931,8 -931,8 -936,9 -936,9 +938,9 @@@@@@ KfReleaseSpinLock
     {
       UNIMPLEMENTED;
     }
+++  #endif
     
-    
+    #if !defined(_M_AMD64)
     VOID
     NTAPI
     READ_PORT_BUFFER_UCHAR(
     <?xml version="1.0"?>
     <!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
     <group>
 ++     <if property="ARCH" value="arm">
        <module name="hal" type="kernelmodedll">
 --             <importlibrary definition="hal_$(ARCH).def" />
   --           <importlibrary definition="hal_arm.def" />
 ++++           <importlibrary definition="hal.pspec" />
                <include base="ntoskrnl">include</include>
                <library>ntoskrnl</library>
                <define name="_NTHAL_" />
 --             <linkerflag>-enable-stdcall-fixup</linkerflag>
                <file>hal.c</file>
                <file>hal.rc</file>
   --           <file>hal.spec</file>
        </module>
-        </if>
-        <if property="ARCH" value="i386">
+++     </if>
+++     <if property="ARCH" value="i386">
 ++     <module name="hal" type="kernelmodedll">
   --           <importlibrary definition="hal.spec.def" />
 ++++           <importlibrary definition="hal.pspec" />
 ++             <include base="ntoskrnl">include</include>
 ++             <library>ntoskrnl</library>
 ++             <define name="_NTHAL_" />
 ++             <file>hal.c</file>
 ++             <file>hal.rc</file>
   --           <file>hal.spec</file>
 ++     </module>
-        </if>
+++     </if>
        <if property="ARCH" value="i386">
                <module ifnot="false" name="halupalias" type="alias" installbase="system32" installname="hal.dll" aliasof="halup">
                </module>
index 0000000,0000000,0000000,dc1f6d4,060b5b6..1d5bb59
mode 000000,000000,000000,100644,100644..100644
--- /dev/null
--- /dev/null
--- /dev/null
@@@@@@ -1,0 -1,0 -1,0 -1,93 -1,91 +1,91 @@@@@@
   --    .ascii "Sory, asm function "
+++  /*
+++   * FILE:            hal/halx86/generic/irq.S
+++   * COPYRIGHT:       See COPYING in the top level directory
+++   * PURPOSE:         Software, System and Hardware IRQ Management
+++   * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
+++   */
+++  
+++  /* INCLUDES ******************************************************************/
+++  
+++  #include <asm.h>
+++  #include <internal/i386/asmmacro.S>
+++  .intel_syntax noprefix
+++  
+++  .macro UNIMPLEMENTED func
+++      jmp 2f
+++  1:
   - UNIMPLEMENTED "HalpInitPICs"
+++++    .ascii "Sorry, asm function "
+++      .ascii func
+++      .ascii " is unimplemented!\n\0"
+++  2:
+++      movabs rcx, offset 1b
+++      call _DbgPrint
+++      ret
+++  .endm
+++  
+++  
+++  
+++  /* GLOBALS *******************************************************************/
+++  
+++  
+++  
+++  /* FUNCTIONS *****************************************************************/
+++  
+++  .globl _HalpInitPICs
+++  .func _HalpInitPICs
+++  _HalpInitPICs:
   - .globl _HalRequestSoftwareInterrupt
   - .func _HalRequestSoftwareInterrupt
   - _HalRequestSoftwareInterrupt:
   - UNIMPLEMENTED "HalRequestSoftwareInterrupt"
   - .endfunc
   - 
++++     UNIMPLEMENTED "HalpInitPICs"
++++ .endfunc
++++ 
++++ .global _HalEnableInterrupt
++++ .func _HalEnableInterrupt
++++ _HalEnableInterrupt:
++++     UNIMPLEMENTED "HalEnableInterrupt"
++++ .endfunc
+++  
++++ .global _HalDisableInterrupt
++++ .func _HalDisableInterrupt
++++ _HalDisableInterrupt:
++++     UNIMPLEMENTED "HalDisableInterrupt"
++++ .endfunc
++++ 
++++ .global _HalRequestSoftwareInterrupt
++++ .func _HalRequestSoftwareInterrupt
++++ _HalRequestSoftwareInterrupt:
++++     UNIMPLEMENTED "HalRequestSoftwareInterrupt"
+++  .endfunc
+++  
++++ .global _HalSendSoftwareInterrupt
++++ .func _HalSendSoftwareInterrupt
++++ _HalSendSoftwareInterrupt:
++++     UNIMPLEMENTED "HalSendSoftwareInterrupt"
++++ .endfunc
++++ 
++++ .global _HalEndSystemInterrupt
++++ .func _HalEndSystemInterrupt
++++ _HalEndSystemInterrupt:
++++     UNIMPLEMENTED "HalEndSystemInterrupt"
++++ .endfunc
++++ 
++++ 
+++  .globl _HalClearSoftwareInterrupt
+++  .func _HalClearSoftwareInterrupt
+++  _HalClearSoftwareInterrupt:
++++     UNIMPLEMENTED "HalClearSoftwareInterrupt"
+++  
+++      /* Get IRR mask */
+++      mov eax, 1
+++      shl eax, cl
+++      not eax
+++  
+++      /* Set IRR */
+++  //    and gs:[KPCR_IRR], eax
+++      ret
+++  .endfunc
+++  
   - UNIMPLEMENTED "HalBeginSystemInterrupt"
   - .endfunc
   - 
   - .globl _HalpApcInterrupt
   - .func _HalpApcInterrupt
   - //TRAP_FIXUPS hapc_a, hapc_t, DoFixupV86, DoFixupAbios
   - _HalpApcInterrupt:
   - UNIMPLEMENTED "HalpApcInterrupt"
   - .endfunc
   - 
   - .globl _HalpApcInterrupt2ndEntry
   - .func _HalpApcInterrupt2ndEntry
   - _HalpApcInterrupt2ndEntry:
   - UNIMPLEMENTED "HalpApcInterrupt2ndEntry"
   - .endfunc
   - 
   - .globl _HalpDispatchInterrupt
   - .func _HalpDispatchInterrupt
   - //TRAP_FIXUPS hdpc_a, hdpc_t, DoFixupV86, DoFixupAbios
   - _HalpDispatchInterrupt:
   - UNIMPLEMENTED "HalpDispatchInterrupt"
   - .endfunc
   - 
   - 
   - .globl _HalpDispatchInterrupt2ndEntry
   - .func _HalpDispatchInterrupt2ndEntry
   - _HalpDispatchInterrupt2ndEntry:
   - UNIMPLEMENTED "HalpDispatchInterrupt2ndEntry"
+++  .globl _HalBeginSystemInterrupt
+++  .func _HalBeginSystemInterrupt
+++  _HalBeginSystemInterrupt:
++++     UNIMPLEMENTED "HalBeginSystemInterrupt"
+++  .endfunc
+++  
index 0000000,0000000,2351b9e,e1b9127,e1b9127..bac9ef1
mode 000000,000000,100644,100644,100644..100644
--- /dev/null
--- /dev/null
@@@@@@ -1,0 -1,0 -1,22 -1,162 -1,162 +1,172 @@@@@@
   --PADAPTER_OBJECT STDCALL HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
+++  /*
+++   *
+++   */
+++  
++   #ifndef __INTERNAL_HAL_HAL_H
++   #define __INTERNAL_HAL_HAL_H
++   
+++  #define HAL_APC_REQUEST         0
+++  #define HAL_DPC_REQUEST         1
+++  
+++  /* CMOS Registers and Ports */
+++  #define CMOS_CONTROL_PORT       (PUCHAR)0x70
+++  #define CMOS_DATA_PORT          (PUCHAR)0x71
+++  #define RTC_REGISTER_A          0x0A
+++  #define RTC_REGISTER_B          0x0B
+++  #define RTC_REG_A_UIP           0x80
+++  #define RTC_REGISTER_CENTURY    0x32
+++  
+++  /* Timer Registers and Ports */
+++  #define TIMER_CONTROL_PORT      0x43
+++  #define TIMER_DATA_PORT0        0x40
+++  #define TIMER_SC0               0
+++  #define TIMER_BOTH              0x30
+++  #define TIMER_MD2               0x4
+++  
+++  /* Conversion functions */
+++  #define BCD_INT(bcd)            \
+++      (((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F))
+++  #define INT_BCD(int)            \
+++      (UCHAR)(((int / 10) << 4) + (int % 10))
+++  
+++  /* adapter.c */
  -  // ARM Headers
+++++PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
+++  
+++  /* bus.c */
+++  VOID NTAPI HalpInitNonBusHandler (VOID);
+++  
+++  /* irql.c */
+++  VOID NTAPI HalpInitPICs(VOID);
+++  
+++  /* udelay.c */
+++  VOID NTAPI HalpInitializeClock(VOID);
+++  
+++  /* pci.c */
+++  VOID HalpInitPciBus (VOID);
+++  
+++  /* dma.c */
+++  VOID HalpInitDma (VOID);
+++  
+++  /* Non-generic initialization */
+++  VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock);
+++  VOID HalpInitPhase1(VOID);
+++  VOID NTAPI HalpClockInterrupt(VOID);
+++  
++   //
  -  #include <internal/arm/ke.h>
  -  #include <internal/arm/intrin_i.h>
+++  // KD Support
++   //
  -  // Versatile Peripherals
+++  VOID
+++  NTAPI
+++  HalpCheckPowerButton(
+++      VOID
+++  );
+++  
+++  VOID
+++  NTAPI
+++  HalpRegisterKdSupportFunctions(
+++      VOID
+++  );
+++  
+++  NTSTATUS
+++  NTAPI
+++  HalpSetupPciDeviceForDebugging(
+++      IN PVOID LoaderBlock,
+++      IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
+++  );
+++  
+++  NTSTATUS
+++  NTAPI
+++  HalpReleasePciDeviceForDebugging(
+++      IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
+++  );
++   
++   //
  -  #include <peripherals/pl011.h>
  -  #include <peripherals/pl190.h>
  -  #include <peripherals/sp804.h>
+++  // Memory routines
++   //
  -  // WDK Hack
+++  PVOID
+++  NTAPI
+++  HalpMapPhysicalMemory64(
+++      IN PHYSICAL_ADDRESS PhysicalAddress,
+++      IN ULONG NumberPage
+++  );
+++  
+++  VOID
+++  NTAPI
+++  HalpUnmapVirtualAddress(
+++      IN PVOID VirtualAddress,
+++      IN ULONG NumberPages
+++  );
+++  
+++  /* sysinfo.c */
+++  NTSTATUS
+++  NTAPI
+++  HaliQuerySystemInformation(
+++      IN HAL_QUERY_INFORMATION_CLASS InformationClass,
+++      IN ULONG BufferSize,
+++      IN OUT PVOID Buffer,
+++      OUT PULONG ReturnedLength
+++  );
+++  
+++  NTSTATUS
+++  NTAPI
+++  HaliSetSystemInformation(
+++      IN HAL_SET_INFORMATION_CLASS InformationClass,
+++      IN ULONG BufferSize,
+++      IN OUT PVOID Buffer
+++  );
++   
++   //
  -  #define KdComPortInUse          _KdComPortInUse
+++  // BIOS Routines
++   //
+++  BOOLEAN
+++  NTAPI
+++  HalpBiosDisplayReset(
+++      VOID
+++  );
+++  
+++  ULONG
+++  NTAPI
+++  HalpBorrowTss(
+++      VOID
+++  );
+++  
+++  ULONG
+++  NTAPI
+++  HalpReturnTss(
+++      ULONG SavedTss
+++  );
+++  
+++  VOID
+++  NTAPI
+++  HalpBiosCall(
+++      VOID
+++  );
+++  
+++  VOID
+++  NTAPI
+++  HalpTrap0D(
+++      VOID
+++  );
+++  
+++  VOID
+++  NTAPI
+++  HalpTrap06(
+++      VOID
+++  );
+++  
+++++PDMA_ADAPTER
+++++NTAPI
+++++HalpGetDmaAdapter(
+++++   IN PVOID Context,
+++++   IN PDEVICE_DESCRIPTION DeviceDescription,
+++++   OUT PULONG NumberOfMapRegisters);
+++++
+++++VOID HaliInitBSP(VOID);
+++++VOID HaliStartApplicationProcessor(ULONG Cpu, ULONG Stack);
+++++
+++  extern PVOID HalpRealModeStart;
+++  extern PVOID HalpRealModeEnd;
+++  
+++  extern KSPIN_LOCK HalpSystemHardwareLock;
++   
++   #endif /* __INTERNAL_HAL_HAL_H */
@@@@@@ -48,7 -48,7 -48,7 -48,7 -48,7 +48,7 @@@@@@ HalpInitializeClock(VOID
         PKPRCB Prcb = KeGetCurrentPrcb();
         ULONG Increment;
         USHORT RollOver;
-        ULONG Flags;
 --      ULONG Flags = 0;
   --    ULONG_PTR Flags = 0;
+++++    ULONG_PTR Flags;
     
         /* Check the CPU Type */
         if (Prcb->CpuType <= 4)
@@@@@@ -92,10 -92,10 -92,10 -92,10 -92,10 +92,10 @@@@@@ NTAP
     HalCalibratePerformanceCounter(IN volatile PLONG Count,
                                    IN ULONGLONG NewCount)
     {
-        ULONG Flags;
 --      ULONG Flags = 0;
   --    ULONG_PTR Flags = 0;
+++++    ULONG_PTR Flags;
     
         /* Disable interrupts */
 ----    Ke386SaveFlags(Flags);
 ++++    Flags = __readeflags();
         _disable();
     
         /* Do a decrement for this CPU */
@@@@@@ -5,7 -5,7 -5,7 -5,7 -5,7 +5,11 @@@@@@
     #ifndef __INTERNAL_HAL_APIC_H
     #define __INTERNAL_HAL_APIC_H
     
+++++#ifdef _M_AMD64
+++++#define APIC_DEFAULT_BASE     0xfffffffffee00000ULL;
+++++#else
     #define APIC_DEFAULT_BASE     0xFEE00000    /* Default Local APIC Base Register Address */
+++++#endif
     
     /* APIC Register Address Map */
     #define APIC_ID      0x0020 /* Local APIC ID Register (R/W) */
@@@@@@ -202,75 -200,15 -200,15 -200,15 -200,15 +182,75 @@@@@@ VOID APICSyncArbIDs(VOID)
     VOID APICCalibrateTimer(ULONG CPU);
     VOID HaliStartApplicationProcessor(ULONG Cpu, ULONG Stack);
     
 ----static __inline ULONG ThisCPU(VOID)
 ++++static __inline ULONG _APICRead(ULONG Offset)
     {
 ----    return (APICRead(APIC_ID) & APIC_ID_MASK) >> 24;
 ++++    PULONG p;
 ++++
-        p = (PULONG)((ULONG)APICBase + Offset);
+++++    p = (PULONG)((ULONG_PTR)APICBase + Offset);
 ++++    return *p;
     }
     
-        p = (PULONG)((ULONG)APICBase + Offset);
 ++++#if 0
 ++++static __inline VOID APICWrite(ULONG Offset,
 ++++                               ULONG Value)
 ++++{
 ++++    PULONG p;
 ++++
+++++    p = (PULONG)((ULONG_PTR)APICBase + Offset);
     
-        p = (PULONG)((ULONG)APICBase + Offset);
 ++++    *p = Value;
 ++++}
 ++++#else
 ++++static __inline VOID APICWrite(ULONG Offset,
 ++++                               ULONG Value)
 ++++{
 ++++    PULONG p;
 ++++    ULONG CPU = (_APICRead(APIC_ID) & APIC_ID_MASK) >> 24;
 ++++
 ++++    lastregw[CPU] = Offset;
 ++++    lastvalw[CPU] = Value;
 ++++
+++++    p = (PULONG)((ULONG_PTR)APICBase + Offset);
 ++++
 ++++    *p = Value;
 ++++}
     #endif
     
 ++++#if 0 
 ++++static __inline ULONG APICRead(ULONG Offset)
 ++++{
 ++++    PULONG p;
     
-        p = (PULONG)((ULONG)APICBase + Offset);
 ----/* EOF */
+++++    p = (PULONG)((ULONG_PTR)APICBase + Offset);
 ++++    return *p;
 ++++}
 ++++#else
 ++++static __inline ULONG APICRead(ULONG Offset)
 ++++{
 ++++    PULONG p;
 ++++    ULONG CPU = (_APICRead(APIC_ID) & APIC_ID_MASK) >> 24;
 ++++
 ++++    lastregr[CPU] = Offset;
 ++++    lastvalr[CPU] = 0;
 ++++
-        p = (PULONG)((ULONG)APICBase + Offset);
+++++    p = (PULONG)((ULONG_PTR)APICBase + Offset);
     
 ++++    lastvalr[CPU] = *p;
 ++++    return lastvalr[CPU];
 ++++}
 ++++#endif
 ++++
 ++++static __inline ULONG ThisCPU(VOID)
 ++++{
 ++++    return (APICRead(APIC_ID) & APIC_ID_MASK) >> 24;
 ++++}
 ++++
 ++++static __inline VOID APICSendEOI(VOID)
 ++++{
 ++++    // Send the EOI
 ++++    APICWrite(APIC_EOI, 0);
 ++++}
 ++++
 ++++#endif /* __INTERNAL_HAL_APIC_H */
 ++++
 ++++/* EOF */
Simple merge
Simple merge
@@@@@@ -223,6 -223,72 -223,72 -223,72 -223,72 +223,6 @@@@@@ VOID APICDisable(VOID
       APICWrite(APIC_SIVR, tmp);
     }
     
 ----
 ----__inline ULONG _APICRead(ULONG Offset)
 ----{
 ----   PULONG p;
 ----
 ---    p = (PULONG)((ULONG)APICBase + Offset);
    -   p = (PULONG)((ULONG_PTR)APICBase + Offset);
 ----   return *p;
 ----}
 ----
 ----#if 0
 ----__inline VOID APICWrite(ULONG Offset,
 ----                 ULONG Value)
 ----{
 ----   PULONG p;
 ----
 ---    p = (PULONG)((ULONG)APICBase + Offset);
    -   p = (PULONG)((ULONG_PTR)APICBase + Offset);
 ----
 ----   *p = Value;
 ----}
 ----#else
 ----__inline VOID APICWrite(ULONG Offset,
 ----                 ULONG Value)
 ----{
 ----   PULONG p;
 ----   ULONG CPU = (_APICRead(APIC_ID) & APIC_ID_MASK) >> 24;
 ----
 ----   lastregw[CPU] = Offset;
 ----   lastvalw[CPU] = Value;
 ----
 ---    p = (PULONG)((ULONG)APICBase + Offset);
    -   p = (PULONG)((ULONG_PTR)APICBase + Offset);
 ----
 ----   *p = Value;
 ----}
 ----#endif
 ----
 ----
 ----#if 0
 ----__inline ULONG APICRead(ULONG Offset)
 ----{
 ----   PULONG p;
 ----
 ---    p = (PULONG)((ULONG)APICBase + Offset);
    -   p = (PULONG)((ULONG_PTR)APICBase + Offset);
 ----   return *p;
 ----}
 ----#else
 ----__inline ULONG APICRead(ULONG Offset)
 ----{
 ----   PULONG p;
 ----   ULONG CPU = (_APICRead(APIC_ID) & APIC_ID_MASK) >> 24;
 ----
 ----   lastregr[CPU] = Offset;
 ----   lastvalr[CPU] = 0;
 ----
 ---    p = (PULONG)((ULONG)APICBase + Offset);
    -   p = (PULONG)((ULONG_PTR)APICBase + Offset);
 ----
 ----   lastvalr[CPU] = *p;
 ----   return lastvalr[CPU];
 ----}
 ----#endif
 ----
 ----__inline VOID APICSendEOI(VOID)
 ----{
 ----  // Send the EOI
 ----  APICWrite(APIC_EOI, 0);
 ----}
 ----
     static VOID APICDumpBit(ULONG base)
     {
        ULONG v, i, j;
@@@@@@ -843,8 -909,8 -909,8 -909,8 -913,11 +847,25 @@@@@@ APICCalibrateTimer(ULONG CPU
     }
     
     VOID 
---- SetInterruptGate(ULONG index, ULONG address)
++++ SetInterruptGate(ULONG index, ULONG_PTR address)
     {
    -UNIMPLEMENTED;
++++ #ifdef _M_AMD64
+++++  KIDTENTRY64 *idt;
+++++
+++++  idt = &KeGetPcr()->IdtBase[index];
+++++
+++++  idt->OffsetLow = address & 0xffff;
+++++  idt->Selector = KGDT_64_R0_CODE;
+++++  idt->IstIndex = 0;
+++++  idt->Reserved0 = 0;
+++++  idt->Type = 0x0e;
+++++  idt->Dpl = 0;
+++++  idt->Present = 1;
+++++  idt->OffsetMiddle = (address >> 16) & 0xffff;
+++++  idt->OffsetHigh = address >> 32;
+++++  idt->Reserved1 = 0;
+++++  idt->Alignment = 0;
++++ #else
       KIDTENTRY *idt;
       KIDT_ACCESS Access;
     
       Access.SegmentType = I386_INTERRUPT_GATE;
       
       idt = (KIDTENTRY*)((ULONG)KeGetPcr()->IDT + index * sizeof(KIDTENTRY));
 ----  idt->Offset = address & 0xffff;
 ++++  idt->Offset = (USHORT)(address & 0xffff);
       idt->Selector = KGDT_R0_CODE;
       idt->Access = Access.Value;
 ----  idt->ExtendedOffset = address >> 16;
 ++++  idt->ExtendedOffset = (USHORT)(address >> 16);
++++ #endif
     }
     
     VOID HaliInitBSP(VOID)
        CommonBase = (PULONG)COMMON_AREA;
      
        /* Copy bootstrap code to common area */
-----   memcpy((PVOID)((ULONG)CommonBase + PAGE_SIZE),
+++++   memcpy((PVOID)((ULONG_PTR)CommonBase + PAGE_SIZE),
          &APstart,
-----     (ULONG)&APend - (ULONG)&APstart + 1);
+++++     (ULONG_PTR)&APend - (ULONG_PTR)&APstart + 1);
     
        /* Set shutdown code */
        CMOS_WRITE(0xF, 0xA);
     
        /* Set warm reset vector */
-----   ps = (PUSHORT)((ULONG)BIOSBase + 0x467);
+++++   ps = (PUSHORT)((ULONG_PTR)BIOSBase + 0x467);
        *ps = (COMMON_AREA + PAGE_SIZE) & 0xF;
      
-----   ps = (PUSHORT)((ULONG)BIOSBase + 0x469);
+++++   ps = (PUSHORT)((ULONG_PTR)BIOSBase + 0x469);
        *ps = (COMMON_AREA + PAGE_SIZE) >> 4;
     #endif