From c76dfd5cb80e250038921b77a939fff650979be4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 5 Mar 2010 04:03:34 +0000 Subject: [PATCH] - Convert the members of PCI_COMMON_HEADER into a #define to avoid inheritance on C++, which would render the type a non-POD, causing compilation errors. - IoInitializeDpcRequest expects PIO_DPC_ROUTINE as 2nd parameter, fix callers. - While FILE_CHARACTERISTIC_PNP_DEVICE is defined in the DDK/WDK, _SYSTEM_INFORMATION_CLASS is not, fix include guards in ntddk_ex.h - add InterlockedBitTestAndSet64 and InterlockedBitTestAndReset64 for amd64 - Fix definition of NLS_MB_CODE_PAGE_TAG for gcc - Fix parameters of DMA inline functions - remove duplicate IoAllocateAdapterChannel - Everything compiles again -> Amine, your turn :) svn path=/branches/header-work/; revision=45858 --- drivers/base/beep/beep.c | 2 +- drivers/storage/floppy/floppy.c | 2 +- drivers/storage/ide/uniata/ntddk_ex.h | 4 +- include/ddk/wdm.h | 242 +++++++++++--------------- 4 files changed, 104 insertions(+), 146 deletions(-) diff --git a/drivers/base/beep/beep.c b/drivers/base/beep/beep.c index 324ad1622ae..45addc6f50f 100644 --- a/drivers/base/beep/beep.c +++ b/drivers/base/beep/beep.c @@ -393,7 +393,7 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, DeviceExtension = DeviceObject->DeviceExtension; DeviceExtension->ReferenceCount = 0; DeviceExtension->TimerActive = FALSE; - IoInitializeDpcRequest(DeviceObject, BeepDPC); + IoInitializeDpcRequest(DeviceObject, (PIO_DPC_ROUTINE)BeepDPC); KeInitializeTimer(&DeviceExtension->Timer); ExInitializeFastMutex(&DeviceExtension->Mutex); diff --git a/drivers/storage/floppy/floppy.c b/drivers/storage/floppy/floppy.c index dcb79e04a0c..712f8d85468 100644 --- a/drivers/storage/floppy/floppy.c +++ b/drivers/storage/floppy/floppy.c @@ -972,7 +972,7 @@ static BOOLEAN NTAPI AddControllers(PDRIVER_OBJECT DriverObject) } /* 3e: Set up the DPC */ - IoInitializeDpcRequest(gControllerInfo[i].DriveInfo[j].DeviceObject, DpcForIsr); + IoInitializeDpcRequest(gControllerInfo[i].DriveInfo[j].DeviceObject, (PIO_DPC_ROUTINE)DpcForIsr); /* 3f: Point the device extension at our DriveInfo struct */ gControllerInfo[i].DriveInfo[j].DeviceObject->DeviceExtension = &gControllerInfo[i].DriveInfo[j]; diff --git a/drivers/storage/ide/uniata/ntddk_ex.h b/drivers/storage/ide/uniata/ntddk_ex.h index 221ba792316..e13ca480909 100644 --- a/drivers/storage/ide/uniata/ntddk_ex.h +++ b/drivers/storage/ide/uniata/ntddk_ex.h @@ -8,8 +8,8 @@ #endif #ifndef FILE_CHARACTERISTIC_PNP_DEVICE // DDK 2003 - #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 +#endif // !FILE_CHARACTERISTIC_PNP_DEVICE typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation, @@ -127,8 +127,6 @@ typedef enum _SYSTEM_INFORMATION_CLASS { #endif //__REACTOS__ } SYSTEM_INFORMATION_CLASS; -#endif // !FILE_CHARACTERISTIC_PNP_DEVICE - NTSYSAPI NTSTATUS diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 338f47fc31b..ba20571d9dd 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -68,6 +68,7 @@ struct _DEVICE_DESCRIPTION; struct _SCATTER_GATHER_LIST; struct _DRIVE_LAYOUT_INFORMATION; struct _COMPRESSED_DATA_INFO; +struct _IO_RESOURCE_DESCRIPTOR; /* Structures not exposed to drivers */ typedef struct _OBJECT_TYPE *POBJECT_TYPE; @@ -133,7 +134,6 @@ InterlockedBitTestAndReset(IN LONG volatile *Base, #endif - #define BitScanForward _BitScanForward #define BitScanReverse _BitScanReverse #define BitTest _bittest @@ -143,6 +143,11 @@ InterlockedBitTestAndReset(IN LONG volatile *Base, #define InterlockedBitTestAndSet _interlockedbittestandset #define InterlockedBitTestAndReset _interlockedbittestandreset +#ifdef _M_AMD64 +#define InterlockedBitTestAndSet64 _interlockedbittestandset64 +#define InterlockedBitTestAndReset64 _interlockedbittestandreset64 +#endif + #if !defined(__INTERLOCKED_DECLARED) #define __INTERLOCKED_DECLARED @@ -1364,21 +1369,6 @@ ProbeForWrite( #error Unsupported Architecture #endif -#ifdef _NTSYSTEM_ - -#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag -#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag - -#else - -#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag) -#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag) - -#endif /* _NTSYSTEM_ */ - -extern BOOLEAN NLS_MB_CODE_PAGE_TAG; -extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG; - /****************************************************************************** * Memory manager Types * @@ -3568,7 +3558,7 @@ NTSYSAPI ULONGLONG NTAPI RtlIoDecodeMemIoResource ( - IN PIO_RESOURCE_DESCRIPTOR Descriptor, + IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, OUT PULONGLONG Alignment OPTIONAL, OUT PULONGLONG MinimumAddress OPTIONAL, OUT PULONGLONG MaximumAddress OPTIONAL); @@ -3577,7 +3567,7 @@ NTSYSAPI NTSTATUS NTAPI RtlIoEncodeMemIoResource( - IN PIO_RESOURCE_DESCRIPTOR Descriptor, + IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, IN UCHAR Type, IN ULONGLONG Length, IN ULONGLONG Alignment, @@ -3910,7 +3900,6 @@ RtlCheckBit( ******************************************************************************/ /* PCI_COMMON_CONFIG.Command */ - #define PCI_ENABLE_IO_SPACE 0x0001 #define PCI_ENABLE_MEMORY_SPACE 0x0002 #define PCI_ENABLE_BUS_MASTER 0x0004 @@ -3924,7 +3913,6 @@ RtlCheckBit( #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400 /* PCI_COMMON_CONFIG.Status */ - #define PCI_STATUS_INTERRUPT_PENDING 0x0008 #define PCI_STATUS_CAPABILITIES_LIST 0x0010 #define PCI_STATUS_66MHZ_CAPABLE 0x0020 @@ -3939,7 +3927,6 @@ RtlCheckBit( #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 /* PCI_COMMON_CONFIG.HeaderType */ - #define PCI_MULTIFUNCTION 0x80 #define PCI_DEVICE_TYPE 0x00 #define PCI_BRIDGE_TYPE 0x01 @@ -3952,7 +3939,6 @@ RtlCheckBit( ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) /* PCI device classes */ - #define PCI_CLASS_PRE_20 0x00 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01 #define PCI_CLASS_NETWORK_CTLR 0x02 @@ -3973,12 +3959,10 @@ RtlCheckBit( #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11 /* PCI device subclasses for class 0 */ - #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00 #define PCI_SUBCLASS_PRE_20_VGA 0x01 /* PCI device subclasses for class 1 (mass storage controllers)*/ - #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 @@ -3987,7 +3971,6 @@ RtlCheckBit( #define PCI_SUBCLASS_MSC_OTHER 0x80 /* PCI device subclasses for class 2 (network controllers)*/ - #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02 @@ -3996,27 +3979,23 @@ RtlCheckBit( #define PCI_SUBCLASS_NET_OTHER 0x80 /* PCI device subclasses for class 3 (display controllers)*/ - #define PCI_SUBCLASS_VID_VGA_CTLR 0x00 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01 #define PCI_SUBCLASS_VID_3D_CTLR 0x02 #define PCI_SUBCLASS_VID_OTHER 0x80 /* PCI device subclasses for class 4 (multimedia device)*/ - #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02 #define PCI_SUBCLASS_MM_OTHER 0x80 /* PCI device subclasses for class 5 (memory controller)*/ - #define PCI_SUBCLASS_MEM_RAM 0x00 #define PCI_SUBCLASS_MEM_FLASH 0x01 #define PCI_SUBCLASS_MEM_OTHER 0x80 /* PCI device subclasses for class 6 (bridge device)*/ - #define PCI_SUBCLASS_BR_HOST 0x00 #define PCI_SUBCLASS_BR_ISA 0x01 #define PCI_SUBCLASS_BR_EISA 0x02 @@ -4029,7 +4008,6 @@ RtlCheckBit( #define PCI_SUBCLASS_BR_OTHER 0x80 /* PCI device subclasses for class C (serial bus controller)*/ - #define PCI_SUBCLASS_SB_IEEE1394 0x00 #define PCI_SUBCLASS_SB_ACCESS 0x01 #define PCI_SUBCLASS_SB_SSA 0x02 @@ -4081,13 +4059,11 @@ RtlCheckBit( #define IO_TYPE_CSQ_EX 3 /* IO_RESOURCE_DESCRIPTOR.Option */ - #define IO_RESOURCE_PREFERRED 0x01 #define IO_RESOURCE_DEFAULT 0x02 #define IO_RESOURCE_ALTERNATIVE 0x08 /* DEVICE_OBJECT.Flags */ - #define DO_VERIFY_VOLUME 0x00000002 #define DO_BUFFERED_IO 0x00000004 #define DO_EXCLUSIVE 0x00000008 @@ -4100,7 +4076,6 @@ RtlCheckBit( #define DO_POWER_INRUSH 0x00004000 /* DEVICE_OBJECT.Characteristics */ - #define FILE_REMOVABLE_MEDIA 0x00000001 #define FILE_READ_ONLY_DEVICE 0x00000002 #define FILE_FLOPPY_DISKETTE 0x00000004 @@ -4115,7 +4090,6 @@ RtlCheckBit( #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000 /* DEVICE_OBJECT.AlignmentRequirement */ - #define FILE_BYTE_ALIGNMENT 0x00000000 #define FILE_WORD_ALIGNMENT 0x00000001 #define FILE_LONG_ALIGNMENT 0x00000003 @@ -4128,7 +4102,6 @@ RtlCheckBit( #define FILE_512_BYTE_ALIGNMENT 0x000001ff /* DEVICE_OBJECT.DeviceType */ - #define DEVICE_TYPE ULONG #define FILE_DEVICE_BEEP 0x00000001 @@ -4328,91 +4301,94 @@ typedef struct _SHARE_ACCESS { ULONG SharedDelete; } SHARE_ACCESS, *PSHARE_ACCESS; -typedef struct _PCI_COMMON_HEADER { - USHORT VendorID; - USHORT DeviceID; - USHORT Command; - USHORT Status; - UCHAR RevisionID; - UCHAR ProgIf; - UCHAR SubClass; - UCHAR BaseClass; - UCHAR CacheLineSize; - UCHAR LatencyTimer; - UCHAR HeaderType; - UCHAR BIST; - union { - struct _PCI_HEADER_TYPE_0 { - ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; - ULONG CIS; - USHORT SubVendorID; - USHORT SubSystemID; - ULONG ROMBaseAddress; - UCHAR CapabilitiesPtr; - UCHAR Reserved1[3]; - ULONG Reserved2; - UCHAR InterruptLine; - UCHAR InterruptPin; - UCHAR MinimumGrant; - UCHAR MaximumLatency; - } type0; - struct _PCI_HEADER_TYPE_1 { - ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; - UCHAR PrimaryBus; - UCHAR SecondaryBus; - UCHAR SubordinateBus; - UCHAR SecondaryLatency; - UCHAR IOBase; - UCHAR IOLimit; - USHORT SecondaryStatus; - USHORT MemoryBase; - USHORT MemoryLimit; - USHORT PrefetchBase; - USHORT PrefetchLimit; - ULONG PrefetchBaseUpper32; - ULONG PrefetchLimitUpper32; - USHORT IOBaseUpper16; - USHORT IOLimitUpper16; - UCHAR CapabilitiesPtr; - UCHAR Reserved1[3]; - ULONG ROMBaseAddress; - UCHAR InterruptLine; - UCHAR InterruptPin; - USHORT BridgeControl; - } type1; - struct _PCI_HEADER_TYPE_2 { - ULONG SocketRegistersBaseAddress; - UCHAR CapabilitiesPtr; - UCHAR Reserved; - USHORT SecondaryStatus; - UCHAR PrimaryBus; - UCHAR SecondaryBus; - UCHAR SubordinateBus; - UCHAR SecondaryLatency; - struct { - ULONG Base; - ULONG Limit; - } Range[PCI_TYPE2_ADDRESSES-1]; - UCHAR InterruptLine; - UCHAR InterruptPin; - USHORT BridgeControl; - } type2; +/* While MS WDK uses inheritance in C++, we cannot do this with gcc, as + inheritance, even from a struct renders the type non-POD. So we use + this hack */ +#define PCI_COMMON_HEADER_MEMBERS \ + USHORT VendorID; \ + USHORT DeviceID; \ + USHORT Command; \ + USHORT Status; \ + UCHAR RevisionID; \ + UCHAR ProgIf; \ + UCHAR SubClass; \ + UCHAR BaseClass; \ + UCHAR CacheLineSize; \ + UCHAR LatencyTimer; \ + UCHAR HeaderType; \ + UCHAR BIST; \ + union { \ + struct _PCI_HEADER_TYPE_0 { \ + ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \ + ULONG CIS; \ + USHORT SubVendorID; \ + USHORT SubSystemID; \ + ULONG ROMBaseAddress; \ + UCHAR CapabilitiesPtr; \ + UCHAR Reserved1[3]; \ + ULONG Reserved2; \ + UCHAR InterruptLine; \ + UCHAR InterruptPin; \ + UCHAR MinimumGrant; \ + UCHAR MaximumLatency; \ + } type0; \ + struct _PCI_HEADER_TYPE_1 { \ + ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \ + UCHAR PrimaryBus; \ + UCHAR SecondaryBus; \ + UCHAR SubordinateBus; \ + UCHAR SecondaryLatency; \ + UCHAR IOBase; \ + UCHAR IOLimit; \ + USHORT SecondaryStatus; \ + USHORT MemoryBase; \ + USHORT MemoryLimit; \ + USHORT PrefetchBase; \ + USHORT PrefetchLimit; \ + ULONG PrefetchBaseUpper32; \ + ULONG PrefetchLimitUpper32; \ + USHORT IOBaseUpper16; \ + USHORT IOLimitUpper16; \ + UCHAR CapabilitiesPtr; \ + UCHAR Reserved1[3]; \ + ULONG ROMBaseAddress; \ + UCHAR InterruptLine; \ + UCHAR InterruptPin; \ + USHORT BridgeControl; \ + } type1; \ + struct _PCI_HEADER_TYPE_2 { \ + ULONG SocketRegistersBaseAddress; \ + UCHAR CapabilitiesPtr; \ + UCHAR Reserved; \ + USHORT SecondaryStatus; \ + UCHAR PrimaryBus; \ + UCHAR SecondaryBus; \ + UCHAR SubordinateBus; \ + UCHAR SecondaryLatency; \ + struct { \ + ULONG Base; \ + ULONG Limit; \ + } Range[PCI_TYPE2_ADDRESSES-1]; \ + UCHAR InterruptLine; \ + UCHAR InterruptPin; \ + USHORT BridgeControl; \ + } type2; \ } u; + +typedef struct _PCI_COMMON_HEADER { + PCI_COMMON_HEADER_MEMBERS } PCI_COMMON_HEADER, *PPCI_COMMON_HEADER; #ifdef __cplusplus - -typedef struct _PCI_COMMON_CONFIG : PCI_COMMON_HEADER { +typedef struct _PCI_COMMON_CONFIG { + PCI_COMMON_HEADER_MEMBERS UCHAR DeviceSpecific[192]; } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; - #else - typedef struct _PCI_COMMON_CONFIG { PCI_COMMON_HEADER DUMMYSTRUCTNAME; UCHAR DeviceSpecific[192]; } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; - #endif typedef enum _CREATE_FILE_TYPE { @@ -6714,7 +6690,7 @@ WRITE_REGISTER_USHORT( FORCEINLINE NTSTATUS IoAllocateAdapterChannel( - IN PADAPTER_OBJECT AdapterObject, + IN PDMA_ADAPTER DmaAdapter, IN PDEVICE_OBJECT DeviceObject, IN ULONG NumberOfMapRegisters, IN PDRIVER_CONTROL ExecutionRoutine, @@ -6734,7 +6710,7 @@ IoAllocateAdapterChannel( FORCEINLINE BOOLEAN IoFlushAdapterBuffers( - IN PADAPTER_OBJECT AdapterObject, + IN PDMA_ADAPTER DmaAdapter, IN PMDL Mdl, IN PVOID MapRegisterBase, IN PVOID CurrentVa, @@ -6749,13 +6725,13 @@ IoFlushAdapterBuffers( MapRegisterBase, CurrentVa, Length, - WriteToDevice ); + WriteToDevice); } FORCEINLINE VOID IoFreeAdapterChannel( - IN PADAPTER_OBJECT AdapterObject) + IN PDMA_ADAPTER DmaAdapter) { PFREE_ADAPTER_CHANNEL FreeAdapterChannel; FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel; @@ -6766,7 +6742,7 @@ IoFreeAdapterChannel( FORCEINLINE VOID IoFreeMapRegisters( - IN PADAPTER_OBJECT AdapterObject, + IN PDMA_ADAPTER DmaAdapter, IN PVOID MapRegisterBase, IN ULONG NumberOfMapRegisters) { @@ -6850,33 +6826,6 @@ IoAcquireRemoveLockEx( } \ } -#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) -FORCEINLINE -NTSTATUS -IoAllocateAdapterChannel( - IN PDMA_ADAPTER DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG NumberOfMapRegisters, - IN PDRIVER_CONTROL ExecutionRoutine, - IN PVOID Context) -{ - PALLOCATE_ADAPTER_CHANNEL allocateAdapterChannel; - NTSTATUS status; - - allocateAdapterChannel = *(DmaAdapter)->DmaOperations->AllocateAdapterChannel; - - ASSERT( allocateAdapterChannel != NULL ); - - status = allocateAdapterChannel( DmaAdapter, - DeviceObject, - NumberOfMapRegisters, - ExecutionRoutine, - Context ); - - return status; -} -#endif - #if (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI @@ -9122,6 +9071,17 @@ typedef struct _QUOTA_LIMITS { #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010 +/* HACK HACK HACK - GCC (or perhaps LD) is messing this up */ +#if defined(_NTSYSTEM_) || defined(__GNUC__) +#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag +#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag +#else +#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag) +#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag) +#endif /* _NT_SYSTEM */ +extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG; +extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG; + #ifdef __cplusplus } #endif