- Add in MSVC support for HAL .init sections by using alloc_text. MSVC support for putting the HAL pci class and vendor tables into .init is still lacking. Put into a _MINIHAL_ guard or freeldr gets REALLY sad.

- Rename INIT_FUNCTION to INIT_SECTION and put it at the top of functions for consistency with __declspec declarations (it is actually possible to do this via __declspec in newer MSVC versions).

svn path=/trunk/; revision=69037
This commit is contained in:
Stefan Ginsberg
2015-09-05 18:33:38 +00:00
parent 141f412d0f
commit 4a3db0a6c3
12 changed files with 224 additions and 47 deletions
+4 -2
View File
@@ -13,6 +13,9 @@
#define NDEBUG
#include <debug.h>
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalpInitializeClock)
#endif
/* GLOBALS ********************************************************************/
@@ -61,10 +64,9 @@ RtcSetClockRate(UCHAR ClockRate)
HalpReleaseCmosSpinLock();
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpInitializeClock(VOID)
{
ULONG_PTR EFlags;
+5 -1
View File
@@ -13,6 +13,10 @@
#define NDEBUG
#include <debug.h>
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalpInitializeCmos)
#endif
/* GLOBALS *******************************************************************/
UCHAR HalpCmosCenturyOffset;
@@ -150,9 +154,9 @@ HalpSetCmosData(IN ULONG BusNumber,
return Length - Len;
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpInitializeCmos(VOID)
{
/* Set default century offset byte */
+5 -1
View File
@@ -77,6 +77,10 @@
#define NDEBUG
#include <debug.h>
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalpInitDma)
#endif
#define MAX_SG_ELEMENTS 0x10
#ifndef _MINIHAL_
@@ -129,8 +133,8 @@ static DMA_OPERATIONS HalpDmaOperations = {
/* FUNCTIONS *****************************************************************/
#ifndef _MINIHAL_
INIT_SECTION
VOID
INIT_FUNCTION
HalpInitDma(VOID)
{
/*
+13 -2
View File
@@ -12,15 +12,26 @@
#define NDEBUG
#include <debug.h>
VOID
NTAPI
HalpGetParameters(
IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalInitSystem)
#pragma alloc_text(INIT, HalpGetParameters)
#endif
/* GLOBALS *******************************************************************/
BOOLEAN HalpPciLockSettings;
/* PRIVATE FUNCTIONS *********************************************************/
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpGetParameters(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
PCHAR CommandLine;
@@ -65,9 +76,9 @@ HalInitializeProcessor(
/*
* @implemented
*/
INIT_SECTION
BOOLEAN
NTAPI
INIT_FUNCTION
HalInitSystem(IN ULONG BootPhase,
IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
+7 -2
View File
@@ -12,6 +12,11 @@
#define NDEBUG
#include <debug.h>
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalpMarkAcpiHal)
#pragma alloc_text(INIT, HalpReportSerialNumber)
#endif
/* GLOBALS *******************************************************************/
BOOLEAN HalpNMIInProgress;
@@ -22,9 +27,9 @@ CHAR HalpSerialNumber[31];
/* PRIVATE FUNCTIONS **********************************************************/
#ifndef _MINIHAL_
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpReportSerialNumber(VOID)
{
NTSTATUS Status;
@@ -53,9 +58,9 @@ HalpReportSerialNumber(VOID)
}
}
INIT_SECTION
NTSTATUS
NTAPI
INIT_FUNCTION
HalpMarkAcpiHal(VOID)
{
NTSTATUS Status;
+5 -1
View File
@@ -13,6 +13,10 @@
#define NDEBUG
#include <debug.h>
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalpInitializeClock)
#endif
/* GLOBALS *******************************************************************/
#define PIT_LATCH 0x00
@@ -107,9 +111,9 @@ HalpSetTimerRollOver(USHORT RollOver)
__writeeflags(Flags);
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpInitializeClock(VOID)
{
ULONG Increment;
+43 -7
View File
@@ -12,6 +12,42 @@
#define NDEBUG
#include <debug.h>
VOID
NTAPI
HalpGetResourceSortValue(
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
OUT PULONG Scale,
OUT PLARGE_INTEGER Value
);
VOID
NTAPI
HalpBuildPartialFromIdt(
IN ULONG Entry,
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR RawDescriptor,
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR TranslatedDescriptor
);
VOID
NTAPI
HalpBuildPartialFromAddress(
IN INTERFACE_TYPE Interface,
IN PADDRESS_USAGE CurrentAddress,
IN ULONG Element,
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR RawDescriptor,
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR TranslatedDescriptor
);
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalpBuildPartialFromAddress)
#pragma alloc_text(INIT, HalpBuildPartialFromIdt)
#pragma alloc_text(INIT, HalpEnableInterruptHandler)
#pragma alloc_text(INIT, HalpGetNMICrashFlag)
#pragma alloc_text(INIT, HalpGetResourceSortValue)
#pragma alloc_text(INIT, HalpRegisterVector)
#pragma alloc_text(INIT, HalpReportResourceUsage)
#endif
/* GLOBALS ********************************************************************/
BOOLEAN HalpGetInfoFromACPI;
@@ -61,9 +97,9 @@ ADDRESS_USAGE HalpDefaultIoSpace =
/* FUNCTIONS ******************************************************************/
#ifndef _MINIHAL_
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpGetResourceSortValue(IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
OUT PULONG Scale,
OUT PLARGE_INTEGER Value)
@@ -101,9 +137,9 @@ HalpGetResourceSortValue(IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
}
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpBuildPartialFromIdt(IN ULONG Entry,
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR RawDescriptor,
IN PCM_PARTIAL_RESOURCE_DESCRIPTOR TranslatedDescriptor)
@@ -139,9 +175,9 @@ HalpBuildPartialFromIdt(IN ULONG Entry,
TranslatedDescriptor->u.Interrupt.Level = HalpIDTUsage[Entry].Irql;
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpBuildPartialFromAddress(IN INTERFACE_TYPE Interface,
IN PADDRESS_USAGE CurrentAddress,
IN ULONG Element,
@@ -207,9 +243,9 @@ HalpBuildPartialFromAddress(IN INTERFACE_TYPE Interface,
}
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpReportResourceUsage(IN PUNICODE_STRING HalName,
IN INTERFACE_TYPE InterfaceType)
{
@@ -486,9 +522,9 @@ HalpReportResourceUsage(IN PUNICODE_STRING HalName,
}
#endif
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpRegisterVector(IN UCHAR Flags,
IN ULONG BusVector,
IN ULONG SystemVector,
@@ -503,9 +539,9 @@ HalpRegisterVector(IN UCHAR Flags,
}
#ifndef _MINIHAL_
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpEnableInterruptHandler(IN UCHAR Flags,
IN ULONG BusVector,
IN ULONG SystemVector,
@@ -526,9 +562,9 @@ HalpEnableInterruptHandler(IN UCHAR Flags,
HalEnableSystemInterrupt(SystemVector, Irql, Mode);
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpGetNMICrashFlag(VOID)
{
UNICODE_STRING ValueName;
+3 -3
View File
@@ -4,10 +4,10 @@
#pragma once
#if defined(__GNUC__) && !defined(_MINIHAL_)
#define INIT_FUNCTION __attribute__((section ("INIT")))
#ifdef __GNUC__
#define INIT_SECTION __attribute__((section ("INIT")))
#else
#define INIT_FUNCTION /* Done via alloc_text for MSC */
#define INIT_SECTION /* Done via alloc_text for MSC */
#endif
+13 -5
View File
@@ -12,6 +12,14 @@
#define NDEBUG
#include <debug.h>
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalpInitializePciStubs)
#pragma alloc_text(INIT, HalpQueryPciRegistryInfo)
#pragma alloc_text(INIT, HalpRegisterPciDebuggingDeviceInfo)
#pragma alloc_text(INIT, HalpReleasePciDeviceForDebugging)
#pragma alloc_text(INIT, HalpSetupPciDeviceForDebugging)
#endif
/* GLOBALS *******************************************************************/
extern BOOLEAN HalpPciLockSettings;
@@ -600,9 +608,9 @@ HalpGetISAFixedPCIIrq(IN PBUS_HANDLER BusHandler,
return STATUS_SUCCESS;
}
INIT_SECTION
NTSTATUS
NTAPI
INIT_FUNCTION
HalpSetupPciDeviceForDebugging(IN PVOID LoaderBlock,
IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice)
{
@@ -610,18 +618,18 @@ HalpSetupPciDeviceForDebugging(IN PVOID LoaderBlock,
return STATUS_NOT_IMPLEMENTED;
}
INIT_SECTION
NTSTATUS
NTAPI
INIT_FUNCTION
HalpReleasePciDeviceForDebugging(IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice)
{
DPRINT1("Unimplemented!\n");
return STATUS_NOT_IMPLEMENTED;
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpRegisterPciDebuggingDeviceInfo(VOID)
{
BOOLEAN Found = FALSE;
@@ -854,9 +862,9 @@ HaliPciInterfaceReadConfig(IN PBUS_HANDLER RootBusHandler,
return Length;
}
INIT_SECTION
PPCI_REGISTRY_INFO_INTERNAL
NTAPI
INIT_FUNCTION
HalpQueryPciRegistryInfo(VOID)
{
#ifndef _MINIHAL_
@@ -1087,9 +1095,9 @@ HalpQueryPciRegistryInfo(VOID)
#endif
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpInitializePciStubs(VOID)
{
PPCI_REGISTRY_INFO_INTERNAL PciRegistryInfo;
+109 -15
View File
@@ -12,6 +12,100 @@
#define NDEBUG
#include <debug.h>
PBUS_HANDLER
NTAPI
HalpAllocateAndInitPciBusHandler(
IN ULONG PciType,
IN ULONG BusNo,
IN BOOLEAN TestAllocation
);
VOID
NTAPI
HalpFixupPciSupportedRanges(
IN ULONG BusCount
);
NTSTATUS
NTAPI
HalpGetChipHacks(
IN USHORT VendorId,
IN USHORT DeviceId,
IN UCHAR RevisionId,
IN PULONG HackFlags
);
BOOLEAN
NTAPI
HalpGetPciBridgeConfig(
IN ULONG PciType,
IN PUCHAR BusCount
);
BOOLEAN
NTAPI
HalpIsBridgeDevice(
IN PPCI_COMMON_CONFIG PciData
);
BOOLEAN
NTAPI
HalpIsIdeDevice(
IN PPCI_COMMON_CONFIG PciData
);
BOOLEAN
NTAPI
HalpIsRecognizedCard(
IN PPCI_REGISTRY_INFO_INTERNAL PciRegistryInfo,
IN PPCI_COMMON_CONFIG PciData,
IN ULONG Flags
);
BOOLEAN
NTAPI
HalpIsValidPCIDevice(
IN PBUS_HANDLER BusHandler,
IN PCI_SLOT_NUMBER Slot
);
NTSTATUS
NTAPI
HalpMarkChipsetDecode(
IN BOOLEAN OverrideEnable
);
VOID
NTAPI
HalpRegisterInternalBusHandlers(
VOID
);
VOID
NTAPI
ShowSize(
IN ULONG Size
);
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
#pragma alloc_text(INIT, HalpAllocateAndInitPciBusHandler)
#pragma alloc_text(INIT, HalpDebugPciDumpBus)
#pragma alloc_text(INIT, HalpFixupPciSupportedRanges)
#pragma alloc_text(INIT, HalpGetChipHacks)
#pragma alloc_text(INIT, HalpGetPciBridgeConfig)
#pragma alloc_text(INIT, HalpInitBusHandlers)
#pragma alloc_text(INIT, HalpInitializePciBus)
#pragma alloc_text(INIT, HalpIsBridgeDevice)
#pragma alloc_text(INIT, HalpIsIdeDevice)
#pragma alloc_text(INIT, HalpIsRecognizedCard)
#pragma alloc_text(INIT, HalpIsValidPCIDevice)
#pragma alloc_text(INIT, HalpMarkChipsetDecode)
#pragma alloc_text(INIT, HalpRegisterKdSupportFunctions)
#pragma alloc_text(INIT, HalpRegisterInternalBusHandlers)
#pragma alloc_text(INIT, ShowSize)
#endif
/* GLOBALS ********************************************************************/
extern KSPIN_LOCK HalpPCIConfigLock;
@@ -66,9 +160,9 @@ HalpAllocateBusHandler(IN INTERFACE_TYPE InterfaceType,
return Bus;
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpRegisterInternalBusHandlers(VOID)
{
PBUS_HANDLER Bus;
@@ -141,9 +235,9 @@ HalpRegisterInternalBusHandlers(VOID)
}
#ifndef _MINIHAL_
INIT_SECTION
NTSTATUS
NTAPI
INIT_FUNCTION
HalpMarkChipsetDecode(BOOLEAN OverrideEnable)
{
NTSTATUS Status;
@@ -189,9 +283,9 @@ HalpMarkChipsetDecode(BOOLEAN OverrideEnable)
return Status;
}
INIT_SECTION
PBUS_HANDLER
NTAPI
INIT_FUNCTION
HalpAllocateAndInitPciBusHandler(IN ULONG PciType,
IN ULONG BusNo,
IN BOOLEAN TestAllocation)
@@ -274,9 +368,9 @@ HalpAllocateAndInitPciBusHandler(IN ULONG PciType,
return Bus;
}
INIT_SECTION
BOOLEAN
NTAPI
INIT_FUNCTION
HalpIsValidPCIDevice(IN PBUS_HANDLER BusHandler,
IN PCI_SLOT_NUMBER Slot)
{
@@ -336,9 +430,9 @@ HalpIsValidPCIDevice(IN PBUS_HANDLER BusHandler,
static BOOLEAN WarningsGiven[5];
INIT_SECTION
NTSTATUS
NTAPI
INIT_FUNCTION
HalpGetChipHacks(IN USHORT VendorId,
IN USHORT DeviceId,
IN UCHAR RevisionId,
@@ -400,9 +494,9 @@ HalpGetChipHacks(IN USHORT VendorId,
return Status;
}
INIT_SECTION
BOOLEAN
NTAPI
INIT_FUNCTION
HalpIsRecognizedCard(IN PPCI_REGISTRY_INFO_INTERNAL PciRegistryInfo,
IN PPCI_COMMON_CONFIG PciData,
IN ULONG Flags)
@@ -481,9 +575,9 @@ HalpIsRecognizedCard(IN PPCI_REGISTRY_INFO_INTERNAL PciRegistryInfo,
return FALSE;
}
INIT_SECTION
BOOLEAN
NTAPI
INIT_FUNCTION
HalpIsIdeDevice(IN PPCI_COMMON_CONFIG PciData)
{
/* Simple test first */
@@ -534,9 +628,9 @@ HalpIsIdeDevice(IN PPCI_COMMON_CONFIG PciData)
return FALSE;
}
INIT_SECTION
BOOLEAN
NTAPI
INIT_FUNCTION
HalpIsBridgeDevice(IN PPCI_COMMON_CONFIG PciData)
{
/* Either this is a PCI-to-PCI Bridge, or a CardBUS Bridge */
@@ -548,9 +642,9 @@ HalpIsBridgeDevice(IN PPCI_COMMON_CONFIG PciData)
(PciData->SubClass == PCI_SUBCLASS_BR_CARDBUS)));
}
INIT_SECTION
BOOLEAN
NTAPI
INIT_FUNCTION
HalpGetPciBridgeConfig(IN ULONG PciType,
IN PUCHAR BusCount)
{
@@ -601,9 +695,9 @@ HalpGetPciBridgeConfig(IN ULONG PciType,
return FALSE;
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpFixupPciSupportedRanges(IN ULONG BusCount)
{
ULONG i;
@@ -664,9 +758,9 @@ HalpFixupPciSupportedRanges(IN ULONG BusCount)
}
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
ShowSize(ULONG x)
{
if (!x) return;
@@ -696,9 +790,9 @@ ShowSize(ULONG x)
*/
#include "pci_classes.h"
#include "pci_vendors.h"
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpDebugPciDumpBus(IN ULONG i,
IN ULONG j,
IN ULONG k,
@@ -849,9 +943,9 @@ HalpDebugPciDumpBus(IN ULONG i,
}
#endif
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpInitializePciBus(VOID)
{
#ifndef _MINIHAL_
@@ -1114,18 +1208,18 @@ HalpInitializePciBus(VOID)
#endif
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpInitBusHandlers(VOID)
{
/* Register the HAL Bus Handler support */
HalpRegisterInternalBusHandlers();
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpRegisterKdSupportFunctions(VOID)
{
/* Register PCI Device Functions */
+15 -6
View File
@@ -12,6 +12,15 @@
#define NDEBUG
#include <debug.h>
#if defined(ALLOC_PRAGMA) && !defined(_MINIHAL_)
//#pragma alloc_text(INIT, HaliInitPnpDriver)
#pragma alloc_text(INIT, HalpBuildAddressMap)
#pragma alloc_text(INIT, HalpGetDebugPortTable)
#pragma alloc_text(INIT, HalpIs16BitPortDecodeSupported)
#pragma alloc_text(INIT, HalpSetupAcpiPhase0)
#pragma alloc_text(INIT, HalReportResourceUsage)
#endif
/* GLOBALS ********************************************************************/
/* This determines the HAL type */
@@ -21,18 +30,18 @@ PWCHAR HalName = L"PC Compatible Eisa/Isa HAL";
/* PRIVATE FUNCTIONS **********************************************************/
INIT_SECTION
NTSTATUS
NTAPI
INIT_FUNCTION
HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
/* There is no ACPI on these HALs */
return STATUS_NO_SUCH_DEVICE;
}
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalpBuildAddressMap(VOID)
{
/* FIXME: Inherit ROM blocks from the registry */
@@ -42,18 +51,18 @@ HalpBuildAddressMap(VOID)
//HalpAddROMRanges();
}
INIT_SECTION
BOOLEAN
NTAPI
INIT_FUNCTION
HalpGetDebugPortTable(VOID)
{
/* No ACPI */
return FALSE;
}
INIT_SECTION
ULONG
NTAPI
INIT_FUNCTION
HalpIs16BitPortDecodeSupported(VOID)
{
/* Only EISA systems support this */
@@ -61,9 +70,9 @@ HalpIs16BitPortDecodeSupported(VOID)
}
#if 0
INIT_SECTION
NTSTATUS
NTAPI
INIT_FUNCTION
HaliInitPnpDriver(VOID)
{
/* On PC-AT, this will interface with the PCI driver */
@@ -75,9 +84,9 @@ HaliInitPnpDriver(VOID)
/*
* @implemented
*/
INIT_SECTION
VOID
NTAPI
INIT_FUNCTION
HalReportResourceUsage(VOID)
{
INTERFACE_TYPE InterfaceType;
+2 -2
View File
@@ -3,11 +3,11 @@
#
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h
COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h BINSTR ClassTable INIT_FUNCTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.c ${CMAKE_CURRENT_BINARY_DIR}/pci_classes.h BINSTR ClassTable INIT_SECTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
DEPENDS native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_classes.ids)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h
COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h BINSTR VendorTable INIT_FUNCTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
COMMAND native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.c ${CMAKE_CURRENT_BINARY_DIR}/pci_vendors.h BINSTR VendorTable INIT_SECTION ${CMAKE_CURRENT_SOURCE_DIR}/include/hal.h
DEPENDS native-bin2c ${CMAKE_CURRENT_SOURCE_DIR}/legacy/bus/pci_vendors.ids)
#####################################