diff --git a/reactos/hal/halx86/generic/cmos.c b/reactos/hal/halx86/generic/cmos.c index 71c4e67c13c..6a3a9ec47a3 100644 --- a/reactos/hal/halx86/generic/cmos.c +++ b/reactos/hal/halx86/generic/cmos.c @@ -152,6 +152,7 @@ HalpSetCmosData(IN ULONG BusNumber, VOID NTAPI +INIT_FUNCTION HalpInitializeCmos(VOID) { /* Set default century offset byte */ diff --git a/reactos/hal/halx86/generic/dma.c b/reactos/hal/halx86/generic/dma.c index bdfae48bfc0..725e23f2690 100644 --- a/reactos/hal/halx86/generic/dma.c +++ b/reactos/hal/halx86/generic/dma.c @@ -126,6 +126,7 @@ static DMA_OPERATIONS HalpDmaOperations = { #ifndef _MINIHAL_ VOID +INIT_FUNCTION HalpInitDma(VOID) { /* diff --git a/reactos/hal/halx86/generic/halinit.c b/reactos/hal/halx86/generic/halinit.c index 9615891c045..f0011d71429 100644 --- a/reactos/hal/halx86/generic/halinit.c +++ b/reactos/hal/halx86/generic/halinit.c @@ -20,6 +20,7 @@ BOOLEAN HalpPciLockSettings; VOID NTAPI +INIT_FUNCTION HalpGetParameters(IN PLOADER_PARAMETER_BLOCK LoaderBlock) { PCHAR CommandLine; @@ -45,6 +46,7 @@ HalpGetParameters(IN PLOADER_PARAMETER_BLOCK LoaderBlock) */ BOOLEAN NTAPI +INIT_FUNCTION HalInitSystem(IN ULONG BootPhase, IN PLOADER_PARAMETER_BLOCK LoaderBlock) { diff --git a/reactos/hal/halx86/generic/legacy/bus/libpcidata.a b/reactos/hal/halx86/generic/legacy/bus/libpcidata.a new file mode 100644 index 00000000000..a186d0fb299 Binary files /dev/null and b/reactos/hal/halx86/generic/legacy/bus/libpcidata.a differ diff --git a/reactos/hal/halx86/generic/legacy/bus/pcibus.c b/reactos/hal/halx86/generic/legacy/bus/pcibus.c index 8169fb19deb..ddb05cacf43 100644 --- a/reactos/hal/halx86/generic/legacy/bus/pcibus.c +++ b/reactos/hal/halx86/generic/legacy/bus/pcibus.c @@ -600,6 +600,7 @@ HalpGetISAFixedPCIIrq(IN PBUS_HANDLER BusHandler, NTSTATUS NTAPI +INIT_FUNCTION HalpSetupPciDeviceForDebugging(IN PVOID LoaderBlock, IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) { @@ -609,6 +610,7 @@ HalpSetupPciDeviceForDebugging(IN PVOID LoaderBlock, NTSTATUS NTAPI +INIT_FUNCTION HalpReleasePciDeviceForDebugging(IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) { DPRINT1("Unimplemented!\n"); @@ -617,6 +619,7 @@ HalpReleasePciDeviceForDebugging(IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) VOID NTAPI +INIT_FUNCTION HalpRegisterPciDebuggingDeviceInfo(VOID) { BOOLEAN Found = FALSE; @@ -853,6 +856,7 @@ HaliPciInterfaceReadConfig(IN PBUS_HANDLER RootBusHandler, PPCI_REGISTRY_INFO_INTERNAL NTAPI +INIT_FUNCTION HalpQueryPciRegistryInfo(VOID) { #ifndef _MINIHAL_ @@ -1085,6 +1089,7 @@ HalpQueryPciRegistryInfo(VOID) VOID NTAPI +INIT_FUNCTION HalpInitializePciStubs(VOID) { PPCI_REGISTRY_INFO_INTERNAL PciRegistryInfo; diff --git a/reactos/hal/halx86/generic/legacy/bus/pcidata.c b/reactos/hal/halx86/generic/legacy/bus/pcidata.c index 83ccecef7d6..f7ca914752f 100644 --- a/reactos/hal/halx86/generic/legacy/bus/pcidata.c +++ b/reactos/hal/halx86/generic/legacy/bus/pcidata.c @@ -15,7 +15,7 @@ /* GLOBALS *******************************************************************/ #ifndef _MINIHAL_ -CHAR ClassTable[3922] = +INIT_FUNCTION CHAR ClassTable[3922] = { 0x43, 0x20, 0x30, 0x30, 0x20, 0x20, 0x55, 0x6E, 0x63, 0x6C, 0x61, 0x73, 0x73, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x0D, 0x0A, 0x09, 0x30, 0x30, 0x20, 0x20, @@ -265,7 +265,7 @@ CHAR ClassTable[3922] = 0x72, 0x00, }; -CHAR VendorTable[642355] = +INIT_FUNCTION CHAR VendorTable[642355] = { 0x30, 0x30, 0x30, 0x30, 0x20, 0x20, 0x47, 0x61, 0x6D, 0x6D, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x78, 0x2C, 0x20, 0x49, 0x6E, 0x63, 0x2E, 0x20, 0x28, 0x6F, 0x72, 0x20, 0x6D, 0x69, 0x73, 0x73, diff --git a/reactos/hal/halx86/generic/legacy/bussupp.c b/reactos/hal/halx86/generic/legacy/bussupp.c index 078a05980a7..013b8564d79 100644 --- a/reactos/hal/halx86/generic/legacy/bussupp.c +++ b/reactos/hal/halx86/generic/legacy/bussupp.c @@ -65,6 +65,7 @@ HalpAllocateBusHandler(IN INTERFACE_TYPE InterfaceType, VOID NTAPI +INIT_FUNCTION HalpRegisterInternalBusHandlers(VOID) { PBUS_HANDLER Bus; @@ -139,6 +140,7 @@ HalpRegisterInternalBusHandlers(VOID) #ifndef _MINIHAL_ NTSTATUS NTAPI +INIT_FUNCTION HalpMarkChipsetDecode(BOOLEAN OverrideEnable) { NTSTATUS Status; @@ -186,6 +188,7 @@ HalpMarkChipsetDecode(BOOLEAN OverrideEnable) PBUS_HANDLER NTAPI +INIT_FUNCTION HalpAllocateAndInitPciBusHandler(IN ULONG PciType, IN ULONG BusNo, IN BOOLEAN TestAllocation) @@ -270,6 +273,7 @@ HalpAllocateAndInitPciBusHandler(IN ULONG PciType, BOOLEAN NTAPI +INIT_FUNCTION HalpIsValidPCIDevice(IN PBUS_HANDLER BusHandler, IN PCI_SLOT_NUMBER Slot) { @@ -331,6 +335,7 @@ static BOOLEAN WarningsGiven[5]; NTSTATUS NTAPI +INIT_FUNCTION HalpGetChipHacks(IN USHORT VendorId, IN USHORT DeviceId, IN UCHAR RevisionId, @@ -394,6 +399,7 @@ HalpGetChipHacks(IN USHORT VendorId, BOOLEAN NTAPI +INIT_FUNCTION HalpIsRecognizedCard(IN PPCI_REGISTRY_INFO_INTERNAL PciRegistryInfo, IN PPCI_COMMON_CONFIG PciData, IN ULONG Flags) @@ -474,6 +480,7 @@ HalpIsRecognizedCard(IN PPCI_REGISTRY_INFO_INTERNAL PciRegistryInfo, BOOLEAN NTAPI +INIT_FUNCTION HalpIsIdeDevice(IN PPCI_COMMON_CONFIG PciData) { /* Simple test first */ @@ -526,6 +533,7 @@ HalpIsIdeDevice(IN PPCI_COMMON_CONFIG PciData) BOOLEAN NTAPI +INIT_FUNCTION HalpIsBridgeDevice(IN PPCI_COMMON_CONFIG PciData) { /* Either this is a PCI-to-PCI Bridge, or a CardBUS Bridge */ @@ -539,6 +547,7 @@ HalpIsBridgeDevice(IN PPCI_COMMON_CONFIG PciData) BOOLEAN NTAPI +INIT_FUNCTION HalpGetPciBridgeConfig(IN ULONG PciType, IN PUCHAR BusCount) { @@ -591,6 +600,7 @@ HalpGetPciBridgeConfig(IN ULONG PciType, VOID NTAPI +INIT_FUNCTION HalpFixupPciSupportedRanges(IN ULONG BusCount) { ULONG i; @@ -653,6 +663,7 @@ HalpFixupPciSupportedRanges(IN ULONG BusCount) VOID NTAPI +INIT_FUNCTION ShowSize(ULONG x) { if (!x) return; @@ -678,6 +689,7 @@ ShowSize(ULONG x) VOID NTAPI +INIT_FUNCTION HalpDebugPciDumpBus(IN ULONG i, IN ULONG j, IN ULONG k, @@ -829,6 +841,7 @@ HalpDebugPciDumpBus(IN ULONG i, VOID NTAPI +INIT_FUNCTION HalpInitializePciBus(VOID) { #ifndef _MINIHAL_ @@ -1093,6 +1106,7 @@ HalpInitializePciBus(VOID) VOID NTAPI +INIT_FUNCTION HalpInitBusHandlers(VOID) { /* Register the HAL Bus Handler support */ @@ -1101,6 +1115,7 @@ HalpInitBusHandlers(VOID) VOID NTAPI +INIT_FUNCTION HalpRegisterKdSupportFunctions(VOID) { /* Register PCI Device Functions */ diff --git a/reactos/hal/halx86/generic/legacy/halpcat.c b/reactos/hal/halx86/generic/legacy/halpcat.c index 28913f9fc16..c403b6ffd19 100644 --- a/reactos/hal/halx86/generic/legacy/halpcat.c +++ b/reactos/hal/halx86/generic/legacy/halpcat.c @@ -23,6 +23,7 @@ PWCHAR HalName = L"PC Compatible Eisa/Isa HAL"; NTSTATUS NTAPI +INIT_FUNCTION HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock) { /* There is no ACPI on these HALs */ @@ -31,6 +32,7 @@ HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock) VOID NTAPI +INIT_FUNCTION HalpBuildAddressMap(VOID) { /* FIXME: Inherit ROM blocks from the registry */ @@ -42,6 +44,7 @@ HalpBuildAddressMap(VOID) BOOLEAN NTAPI +INIT_FUNCTION HalpGetDebugPortTable(VOID) { /* No ACPI */ @@ -50,6 +53,7 @@ HalpGetDebugPortTable(VOID) ULONG NTAPI +INIT_FUNCTION HalpIs16BitPortDecodeSupported(VOID) { /* Only EISA systems support this */ @@ -58,9 +62,11 @@ HalpIs16BitPortDecodeSupported(VOID) NTSTATUS NTAPI +INIT_FUNCTION HaliInitPnpDriver(VOID) { /* On PC-AT, this will interface with the PCI driver */ + //HalpDebugPciBus(); return STATUS_SUCCESS; } @@ -69,6 +75,7 @@ HaliInitPnpDriver(VOID) */ VOID NTAPI +INIT_FUNCTION HalReportResourceUsage(VOID) { INTERFACE_TYPE InterfaceType; diff --git a/reactos/hal/halx86/generic/memory.c b/reactos/hal/halx86/generic/memory.c index 74f20cbc6ed..979cacf4f0d 100644 --- a/reactos/hal/halx86/generic/memory.c +++ b/reactos/hal/halx86/generic/memory.c @@ -25,7 +25,6 @@ PVOID HalpHeapStart = MM_HAL_HEAP_START; /* PRIVATE FUNCTIONS *********************************************************/ - ULONG NTAPI HalpAllocPhysicalMemory(IN PLOADER_PARAMETER_BLOCK LoaderBlock, diff --git a/reactos/hal/halx86/generic/misc.c b/reactos/hal/halx86/generic/misc.c index 4b171a819a6..2ddd18599e1 100644 --- a/reactos/hal/halx86/generic/misc.c +++ b/reactos/hal/halx86/generic/misc.c @@ -24,6 +24,7 @@ CHAR HalpSerialNumber[31]; #ifndef _MINIHAL_ VOID NTAPI +INIT_FUNCTION HalpReportSerialNumber(VOID) { NTSTATUS Status; @@ -54,6 +55,7 @@ HalpReportSerialNumber(VOID) NTSTATUS NTAPI +INIT_FUNCTION HalpMarkAcpiHal(VOID) { NTSTATUS Status; diff --git a/reactos/hal/halx86/generic/timer.c b/reactos/hal/halx86/generic/timer.c index 2f78ac46cd8..89d66279574 100644 --- a/reactos/hal/halx86/generic/timer.c +++ b/reactos/hal/halx86/generic/timer.c @@ -44,6 +44,7 @@ LARGE_INTEGER HalpRolloverTable[15] = VOID NTAPI +INIT_FUNCTION HalpInitializeClock(VOID) { PKPRCB Prcb = KeGetCurrentPrcb(); diff --git a/reactos/hal/halx86/generic/usage.c b/reactos/hal/halx86/generic/usage.c index be6710d73fd..8339119c39a 100644 --- a/reactos/hal/halx86/generic/usage.c +++ b/reactos/hal/halx86/generic/usage.c @@ -63,6 +63,7 @@ ADDRESS_USAGE HalpDefaultIoSpace = #ifndef _MINIHAL_ VOID NTAPI +INIT_FUNCTION HalpGetResourceSortValue(IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, OUT PULONG Scale, OUT PLARGE_INTEGER Value) @@ -102,6 +103,7 @@ HalpGetResourceSortValue(IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, VOID NTAPI +INIT_FUNCTION HalpBuildPartialFromIdt(IN ULONG Entry, IN PCM_PARTIAL_RESOURCE_DESCRIPTOR RawDescriptor, IN PCM_PARTIAL_RESOURCE_DESCRIPTOR TranslatedDescriptor) @@ -139,6 +141,7 @@ HalpBuildPartialFromIdt(IN ULONG Entry, VOID NTAPI +INIT_FUNCTION HalpBuildPartialFromAddress(IN INTERFACE_TYPE Interface, IN PADDRESS_USAGE CurrentAddress, IN ULONG Element, @@ -206,6 +209,7 @@ HalpBuildPartialFromAddress(IN INTERFACE_TYPE Interface, VOID NTAPI +INIT_FUNCTION HalpReportResourceUsage(IN PUNICODE_STRING HalName, IN INTERFACE_TYPE InterfaceType) { @@ -484,6 +488,7 @@ HalpReportResourceUsage(IN PUNICODE_STRING HalName, VOID NTAPI +INIT_FUNCTION HalpRegisterVector(IN UCHAR Flags, IN ULONG BusVector, IN ULONG SystemVector, @@ -500,6 +505,7 @@ HalpRegisterVector(IN UCHAR Flags, #ifndef _MINIHAL_ VOID NTAPI +INIT_FUNCTION HalpEnableInterruptHandler(IN UCHAR Flags, IN ULONG BusVector, IN ULONG SystemVector, @@ -522,6 +528,7 @@ HalpEnableInterruptHandler(IN UCHAR Flags, VOID NTAPI +INIT_FUNCTION HalpGetNMICrashFlag(VOID) { UNICODE_STRING ValueName; diff --git a/reactos/hal/halx86/include/halp.h b/reactos/hal/halx86/include/halp.h index 3ab0f7b253c..cbb372a1e47 100644 --- a/reactos/hal/halx86/include/halp.h +++ b/reactos/hal/halx86/include/halp.h @@ -4,6 +4,16 @@ #pragma once +#define PLACE_IN_SECTION(s) __attribute__((section (s))) +#ifdef __GNUC__ +#define INIT_FUNCTION PLACE_IN_SECTION("init") +#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