#pragma once
-#define PLACE_IN_SECTION(s) __attribute__((section (s)))
-#ifdef __GNUC__
-#define INIT_FUNCTION
-#define PAGE_LOCKED_FUNCTION PLACE_IN_SECTION("pagelk")
-#define PAGE_UNLOCKED_FUNCTION PLACE_IN_SECTION("pagepo")
-#else
-#define INIT_FUNCTION
-#define PAGE_LOCKED_FUNCTION
-#define PAGE_UNLOCKED_FUNCTION
-#endif
-
-#ifdef _MSC_VER
-#define REGISTERCALL FASTCALL
-#else
-#define REGISTERCALL __attribute__((regparm(3)))
-#endif
-
#ifdef CONFIG_SMP
#define HAL_BUILD_TYPE (DBG ? PRCB_BUILD_DEBUG : 0)
#else
typedef
VOID
-(*PHAL_SW_INTERRUPT_HANDLER)(
+(__cdecl *PHAL_SW_INTERRUPT_HANDLER)(
VOID
);
typedef
VOID
-ATTRIB_NORETURN
(FASTCALL *PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)(
IN PKTRAP_FRAME TrapFrame
);
#define HAL_APC_REQUEST 0
#define HAL_DPC_REQUEST 1
+/* HAL profiling offsets in KeGetPcr()->HalReserved[] */
+#define HAL_PROFILING_INTERVAL 0
+#define HAL_PROFILING_MULTIPLIER 1
+
/* CMOS Registers and Ports */
#define CMOS_CONTROL_PORT (PUCHAR)0x70
#define CMOS_DATA_PORT (PUCHAR)0x71
#define RTC_REGISTER_B 0x0B
#define RTC_REG_B_PI 0x40
#define RTC_REGISTER_C 0x0C
+#define RTC_REG_C_IRQ 0x80
#define RTC_REGISTER_D 0x0D
#define RTC_REGISTER_CENTURY 0x32
//
#define GRAPHICS_MODE_12 0x12 /* 80x30 8x16 640x480 16/256K */
+#if defined(SARCH_XBOX)
+//
+// For some unknown reason the PIT of the Xbox is fixed at 1.125000 MHz,
+// which is ~5.7% lower than on the PC.
+//
+#define PIT_FREQUENCY 1125000
+#else
//
// Commonly stated as being 1.19318MHz
//
// See ISA System Architecture 3rd Edition (Tom Shanley, Don Anderson, John Swindle)
-// P. 471
+// p. 471
//
// However, the true value is closer to 1.19318181[...]81MHz since this is 1/3rd
// of the NTSC color subcarrier frequency which runs at 3.57954545[...]45MHz.
// number is quite long.
//
#define PIT_FREQUENCY 1193182
+#endif
//
// These ports are controlled by the i8254 Programmable Interrupt Timer (PIT)
typedef
BOOLEAN
-( REGISTERCALL *PHAL_DISMISS_INTERRUPT)(
+(NTAPI *PHAL_DISMISS_INTERRUPT)(
IN KIRQL Irql,
IN ULONG Irq,
OUT PKIRQL OldIrql
);
BOOLEAN
-REGISTERCALL
+NTAPI
HalpDismissIrqGeneric(
IN KIRQL Irql,
IN ULONG Irq,
);
BOOLEAN
-REGISTERCALL
+NTAPI
HalpDismissIrq15(
IN KIRQL Irql,
IN ULONG Irq,
);
BOOLEAN
-REGISTERCALL
+NTAPI
HalpDismissIrq13(
IN KIRQL Irql,
IN ULONG Irq,
);
BOOLEAN
-REGISTERCALL
+NTAPI
HalpDismissIrq07(
IN KIRQL Irql,
IN ULONG Irq,
);
BOOLEAN
-REGISTERCALL
+NTAPI
HalpDismissIrqLevel(
IN KIRQL Irql,
IN ULONG Irq,
);
BOOLEAN
-REGISTERCALL
+NTAPI
HalpDismissIrq15Level(
IN KIRQL Irql,
IN ULONG Irq,
);
BOOLEAN
-REGISTERCALL
+NTAPI
HalpDismissIrq13Level(
IN KIRQL Irql,
IN ULONG Irq,
);
BOOLEAN
-REGISTERCALL
+NTAPI
HalpDismissIrq07Level(
IN KIRQL Irql,
IN ULONG Irq,
);
VOID
+__cdecl
HalpHardwareInterruptLevel(
VOID
);
PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
/* sysinfo.c */
+INIT_FUNCTION
VOID
NTAPI
HalpRegisterVector(IN UCHAR Flags,
IN ULONG SystemVector,
IN KIRQL Irql);
+INIT_FUNCTION
VOID
NTAPI
HalpEnableInterruptHandler(IN UCHAR Flags,
/* pic.c */
VOID NTAPI HalpInitializePICs(IN BOOLEAN EnableInterrupts);
-VOID HalpApcInterrupt(VOID);
-VOID HalpDispatchInterrupt(VOID);
-VOID HalpDispatchInterrupt2(VOID);
+VOID __cdecl HalpApcInterrupt(VOID);
+VOID __cdecl HalpDispatchInterrupt(VOID);
+PHAL_SW_INTERRUPT_HANDLER __cdecl HalpDispatchInterrupt2(VOID);
DECLSPEC_NORETURN VOID FASTCALL HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL HalpDispatchInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame);
+/* profil.c */
+extern BOOLEAN HalpProfilingStopped;
+
/* timer.c */
-VOID NTAPI HalpInitializeClock(VOID);
-VOID HalpClockInterrupt(VOID);
-VOID HalpProfileInterrupt(VOID);
+INIT_FUNCTION VOID NTAPI HalpInitializeClock(VOID);
+VOID __cdecl HalpClockInterrupt(VOID);
+VOID __cdecl HalpProfileInterrupt(VOID);
VOID
NTAPI
VOID HalpInitPciBus (VOID);
/* dma.c */
-VOID HalpInitDma (VOID);
+INIT_FUNCTION VOID HalpInitDma (VOID);
/* Non-generic initialization */
VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock);
VOID
);
+INIT_FUNCTION
VOID
NTAPI
HalpRegisterKdSupportFunctions(
VOID
);
+INIT_FUNCTION
NTSTATUS
NTAPI
HalpSetupPciDeviceForDebugging(
IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
+INIT_FUNCTION
NTSTATUS
NTAPI
HalpReleasePciDeviceForDebugging(
//
// Memory routines
//
-ULONG_PTR
+ULONG64
NTAPI
HalpAllocPhysicalMemory(
IN PLOADER_PARAMETER_BLOCK LoaderBlock,
- IN ULONG_PTR MaxAddress,
+ IN ULONG64 MaxAddress,
IN PFN_NUMBER PageCount,
IN BOOLEAN Aligned
);
+PVOID
+NTAPI
+HalpMapPhysicalMemory64Vista(
+ IN PHYSICAL_ADDRESS PhysicalAddress,
+ IN PFN_COUNT PageCount,
+ IN BOOLEAN FlushCurrentTLB
+);
+
+VOID
+NTAPI
+HalpUnmapVirtualAddressVista(
+ IN PVOID VirtualAddress,
+ IN PFN_COUNT NumberPages,
+ IN BOOLEAN FlushCurrentTLB
+);
+
PVOID
NTAPI
HalpMapPhysicalMemory64(
);
VOID
-DECLSPEC_NORETURN
+__cdecl
HalpRealModeStart(
VOID
);
//
// CMOS Routines
//
+INIT_FUNCTION
VOID
NTAPI
HalpInitializeCmos(
VOID
);
+VOID
+NTAPI
+HalpInitializeLegacyPICs(
+ VOID
+);
+
NTSTATUS
NTAPI
HalpOpenRegistryKey(
IN BOOLEAN Create
);
+INIT_FUNCTION
VOID
NTAPI
HalpGetNMICrashFlag(
VOID
);
+INIT_FUNCTION
BOOLEAN
NTAPI
HalpGetDebugPortTable(
VOID
);
+INIT_FUNCTION
VOID
NTAPI
HalpReportSerialNumber(
VOID
);
+INIT_FUNCTION
NTSTATUS
NTAPI
HalpMarkAcpiHal(
VOID
);
+INIT_FUNCTION
VOID
NTAPI
HalpBuildAddressMap(
VOID
);
+INIT_FUNCTION
VOID
NTAPI
HalpReportResourceUsage(
IN INTERFACE_TYPE InterfaceType
);
+INIT_FUNCTION
ULONG
NTAPI
HalpIs16BitPortDecodeSupported(
IN KIRQL OldIrql
);
+INIT_FUNCTION
VOID
NTAPI
HalpInitBusHandlers(
VOID
);
+INIT_FUNCTION
VOID
NTAPI
HalpDebugPciDumpBus(
);
#ifdef _M_AMD64
+
+VOID
+NTAPI
+HalInitializeBios(
+ _In_ ULONG Unknown,
+ _In_ PLOADER_PARAMETER_BLOCK LoaderBlock
+);
+
#define KfLowerIrql KeLowerIrql
#define KiEnterInterruptTrap(TrapFrame) /* We do all neccessary in asm code */
#define KiEoiHelper(TrapFrame) return /* Just return to the caller */