[HAL] Implement amd64 BIOS call support
[reactos.git] / hal / halx86 / include / halp.h
index f27b7a3..9c03a96 100644 (file)
@@ -4,23 +4,6 @@
 
 #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
@@ -46,13 +29,12 @@ typedef struct _HAL_BIOS_FRAME
 
 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
 );
@@ -60,6 +42,10 @@ ATTRIB_NORETURN
 #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
@@ -68,6 +54,7 @@ ATTRIB_NORETURN
 #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
 
@@ -434,14 +421,14 @@ typedef struct _PIC_MASK
 
 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,
@@ -449,7 +436,7 @@ HalpDismissIrqGeneric(
 );
 
 BOOLEAN
-REGISTERCALL
+NTAPI
 HalpDismissIrq15(
     IN KIRQL Irql,
     IN ULONG Irq,
@@ -457,7 +444,7 @@ HalpDismissIrq15(
 );
 
 BOOLEAN
-REGISTERCALL
+NTAPI
 HalpDismissIrq13(
     IN KIRQL Irql,
     IN ULONG Irq,
@@ -465,7 +452,7 @@ HalpDismissIrq13(
 );
 
 BOOLEAN
-REGISTERCALL
+NTAPI
 HalpDismissIrq07(
     IN KIRQL Irql,
     IN ULONG Irq,
@@ -473,7 +460,7 @@ HalpDismissIrq07(
 );
 
 BOOLEAN
-REGISTERCALL
+NTAPI
 HalpDismissIrqLevel(
     IN KIRQL Irql,
     IN ULONG Irq,
@@ -481,7 +468,7 @@ HalpDismissIrqLevel(
 );
 
 BOOLEAN
-REGISTERCALL
+NTAPI
 HalpDismissIrq15Level(
     IN KIRQL Irql,
     IN ULONG Irq,
@@ -489,7 +476,7 @@ HalpDismissIrq15Level(
 );
 
 BOOLEAN
-REGISTERCALL
+NTAPI
 HalpDismissIrq13Level(
     IN KIRQL Irql,
     IN ULONG Irq,
@@ -497,7 +484,7 @@ HalpDismissIrq13Level(
 );
 
 BOOLEAN
-REGISTERCALL
+NTAPI
 HalpDismissIrq07Level(
     IN KIRQL Irql,
     IN ULONG Irq,
@@ -505,6 +492,7 @@ HalpDismissIrq07Level(
 );
 
 VOID
+__cdecl
 HalpHardwareInterruptLevel(
     VOID
 );
@@ -561,6 +549,7 @@ typedef struct _HalAddressUsage
 PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses);
 
 /* sysinfo.c */
+INIT_FUNCTION
 VOID
 NTAPI
 HalpRegisterVector(IN UCHAR Flags,
@@ -568,6 +557,7 @@ HalpRegisterVector(IN UCHAR Flags,
                    IN ULONG SystemVector,
                    IN KIRQL Irql);
 
+INIT_FUNCTION
 VOID
 NTAPI
 HalpEnableInterruptHandler(IN UCHAR Flags,
@@ -579,16 +569,19 @@ 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
@@ -598,7 +591,7 @@ HalpCalibrateStallExecution(VOID);
 VOID HalpInitPciBus (VOID);
 
 /* dma.c */
-VOID HalpInitDma (VOID);
+INIT_FUNCTION VOID HalpInitDma (VOID);
 
 /* Non-generic initialization */
 VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock);
@@ -617,12 +610,14 @@ HalpCheckPowerButton(
     VOID
 );
 
+INIT_FUNCTION
 VOID
 NTAPI
 HalpRegisterKdSupportFunctions(
     VOID
 );
 
+INIT_FUNCTION
 NTSTATUS
 NTAPI
 HalpSetupPciDeviceForDebugging(
@@ -630,6 +625,7 @@ HalpSetupPciDeviceForDebugging(
     IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
 );
 
+INIT_FUNCTION
 NTSTATUS
 NTAPI
 HalpReleasePciDeviceForDebugging(
@@ -639,15 +635,31 @@ 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(
@@ -696,7 +708,7 @@ HalpExitToV86(
 );
 
 VOID
-DECLSPEC_NORETURN
+__cdecl
 HalpRealModeStart(
     VOID
 );
@@ -713,6 +725,7 @@ HaliHaltSystem(
 //
 // CMOS Routines
 //
+INIT_FUNCTION
 VOID
 NTAPI
 HalpInitializeCmos(
@@ -747,6 +760,12 @@ HalpReleaseCmosSpinLock(
     VOID
 );
 
+VOID
+NTAPI
+HalpInitializeLegacyPICs(
+    VOID
+);
+
 NTSTATUS
 NTAPI
 HalpOpenRegistryKey(
@@ -757,36 +776,42 @@ 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(
@@ -794,6 +819,7 @@ HalpReportResourceUsage(
     IN INTERFACE_TYPE InterfaceType
 );
 
+INIT_FUNCTION
 ULONG
 NTAPI
 HalpIs16BitPortDecodeSupported(
@@ -814,6 +840,7 @@ KeUpdateSystemTime(
     IN KIRQL OldIrql
 );
 
+INIT_FUNCTION
 VOID
 NTAPI
 HalpInitBusHandlers(
@@ -826,6 +853,7 @@ HaliInitPnpDriver(
     VOID
 );
 
+INIT_FUNCTION
 VOID
 NTAPI
 HalpDebugPciDumpBus(
@@ -843,6 +871,14 @@ HalpInitProcessor(
 );
 
 #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 */