diff --git a/reactos/include/ddk/ntifs.h b/reactos/include/ddk/ntifs.h index 28b75553862..a0318e6b940 100644 --- a/reactos/include/ddk/ntifs.h +++ b/reactos/include/ddk/ntifs.h @@ -3631,6 +3631,8 @@ IoVerifyVolume ( IN BOOLEAN AllowRawMount ); +#if !defined (_M_AMD64) + NTHALAPI KIRQL FASTCALL @@ -3646,6 +3648,51 @@ KeReleaseQueuedSpinLock ( IN KIRQL OldIrql ); +NTHALAPI +KIRQL +FASTCALL +KeAcquireSpinLockRaiseToSynch( + IN OUT PKSPIN_LOCK SpinLock +); + +NTHALAPI +LOGICAL +FASTCALL +KeTryToAcquireQueuedSpinLock( + KSPIN_LOCK_QUEUE_NUMBER Number, + PKIRQL OldIrql); + +#else + +NTKERNELAPI +KIRQL +FASTCALL +KeAcquireQueuedSpinLock ( + IN KSPIN_LOCK_QUEUE_NUMBER Number +); + +NTKERNELAPI +VOID +FASTCALL +KeReleaseQueuedSpinLock ( + IN KSPIN_LOCK_QUEUE_NUMBER Number, + IN KIRQL OldIrql +); + +NTKERNELAPI +KIRQL +KeAcquireSpinLockRaiseToSynch( + IN OUT PKSPIN_LOCK SpinLock +); + +NTKERNELAPI +LOGICAL +KeTryToAcquireQueuedSpinLock( + KSPIN_LOCK_QUEUE_NUMBER Number, + PKIRQL OldIrql); + +#endif + NTKERNELAPI VOID NTAPI diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index 4ca8657f051..6a9e8b8e51e 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -1759,8 +1759,25 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { struct { ULONG Level; ULONG Vector; - ULONG Affinity; + KAFFINITY Affinity; } Interrupt; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + struct { + union { + struct { + USHORT Reserved; + USHORT MessageCount; + ULONG Vector; + KAFFINITY Affinity; + } Raw; + struct { + ULONG Level; + ULONG Vector; + KAFFINITY Affinity; + } Translated; + }; + } MessageInterrupt; +#endif struct { PHYSICAL_ADDRESS Start; ULONG Length; @@ -1783,6 +1800,20 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { ULONG Reserved1; ULONG Reserved2; } DeviceSpecificData; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + struct { + PHYSICAL_ADDRESS Start; + ULONG Length40; + } Memory40; + struct { + PHYSICAL_ADDRESS Start; + ULONG Length48; + } Memory48; + struct { + PHYSICAL_ADDRESS Start; + ULONG Length64; + } Memory64; +#endif } u; } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR; @@ -5444,6 +5475,8 @@ typedef struct _KPCR { ULONG HalReserved[16]; // For use by Hal } KPCR, *PKPCR; /* 54 */ +#define KeGetPcr() PCR + typedef struct _KFLOATING_SAVE { ULONG ControlWord; ULONG StatusWord; @@ -5661,6 +5694,8 @@ typedef struct _KPCR { UCHAR Number; /* 51 */ } KPCR, *PKPCR; /* 54 */ +#define KeGetPcr() PCR + static __inline ULONG DDKAPI @@ -5695,6 +5730,8 @@ typedef struct _KPCR { ULONG IDR; /* 30 */ } KPCR, *PKPCR; +#define KeGetPcr() PCR + typedef struct _KFLOATING_SAVE { } KFLOATING_SAVE, *PKFLOATING_SAVE; @@ -5792,6 +5829,7 @@ typedef struct _PCIBUSDATA } PCIBUSDATA, *PPCIBUSDATA; +/** INTERLOCKED FUNCTIONS *****************************************************/ #if !defined(__INTERLOCKED_DECLARED) #define __INTERLOCKED_DECLARED @@ -5908,12 +5946,43 @@ InterlockedExchangeAdd( #define InterlockedPushEntrySList(Head, Entry) ExpInterlockedPushEntrySList(Head, Entry) #define InterlockedFlushSList(Head) ExpInterlockedFlushSList(Head) #define QueryDepthSList(Head) ExQueryDepthSList(Head) -#endif // !defined(_WINBASE_ +#endif // !defined(_WINBASE_) #endif // _M_AMD64 #endif /* !__INTERLOCKED_DECLARED */ + +/** SPINLOCK FUNCTIONS ********************************************************/ + +NTKERNELAPI +BOOLEAN +FASTCALL +KeTryToAcquireSpinLockAtDpcLevel( + IN OUT PKSPIN_LOCK SpinLock +); + +#if defined (_X86_) + +NTKERNELAPI +VOID +NTAPI +KeInitializeSpinLock( + IN PKSPIN_LOCK SpinLock); + +NTHALAPI +KIRQL +FASTCALL +KfAcquireSpinLock( + IN PKSPIN_LOCK SpinLock); + +NTHALAPI +VOID +FASTCALL +KfReleaseSpinLock( + IN PKSPIN_LOCK SpinLock, + IN KIRQL NewIrql); + NTKERNELAPI VOID FASTCALL @@ -5926,46 +5995,48 @@ FASTCALL KefReleaseSpinLockFromDpcLevel( IN PKSPIN_LOCK SpinLock); -#if defined(_M_AMD64) -NTKERNELAPI -KIRQL -FASTCALL -KfAcquireSpinLock( - IN PKSPIN_LOCK SpinLock); - -NTKERNELAPI -VOID -FASTCALL -KfReleaseSpinLock( - IN PKSPIN_LOCK SpinLock, - IN KIRQL NewIrql); -#else -NTHALAPI -KIRQL -FASTCALL -KfAcquireSpinLock( - IN PKSPIN_LOCK SpinLock); - -NTHALAPI -VOID -FASTCALL -KfReleaseSpinLock( - IN PKSPIN_LOCK SpinLock, - IN KIRQL NewIrql); -#endif - -NTKERNELAPI -BOOLEAN -FASTCALL -KeTryToAcquireSpinLockAtDpcLevel( - IN OUT PKSPIN_LOCK SpinLock -); - #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) +#else // !defined (_X86_) + +FORCEINLINE +VOID +NTAPI +KeInitializeSpinLock( + PKSPIN_LOCK SpinLock) +{ + *SpinLock = 0; +} + +NTKERNELAPI +VOID +KeReleaseSpinLock( + IN PKSPIN_LOCK SpinLock, + IN KIRQL NewIrql); + +NTKERNELAPI +VOID +KeAcquireSpinLockAtDpcLevel( + IN PKSPIN_LOCK SpinLock); + +NTKERNELAPI +VOID +KeReleaseSpinLockFromDpcLevel( + IN PKSPIN_LOCK SpinLock); + +NTKERNELAPI +KIRQL +KeAcquireSpinLockRaiseToDpc( + IN PKSPIN_LOCK SpinLock); + +#define KeAcquireSpinLock(SpinLock, OldIrql) \ + *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock) + +#endif // !defined (_X86_) + #define RtlCopyMemoryNonTemporal RtlCopyMemory #define KeGetDcacheFillSize() 1L @@ -6364,17 +6435,23 @@ RtlConvertLongToLargeInteger(LONG SignedInteger) return Result; } +static __inline +LARGE_INTEGER +NTAPI_INLINE +RtlConvertUlongToLargeInteger( + ULONG UnsignedInteger) +{ + LARGE_INTEGER ret; + ret.QuadPart = UnsignedInteger; + return ret; +} + NTSYSAPI LUID NTAPI RtlConvertLongToLuid( IN LONG Long); -NTSYSAPI -LARGE_INTEGER -NTAPI -RtlConvertUlongToLargeInteger( - IN ULONG UnsignedInteger); NTSYSAPI LUID @@ -6382,6 +6459,37 @@ NTAPI RtlConvertUlongToLuid( ULONG Ulong); +#ifdef _M_AMD64 + +static __inline +LARGE_INTEGER +NTAPI_INLINE +RtlExtendedIntegerMultiply( + LARGE_INTEGER Multiplicand, + LONG Multiplier) +{ + LARGE_INTEGER ret; + ret.QuadPart = Multiplicand.QuadPart * Multiplier; + return ret; +} + +static __inline +LARGE_INTEGER +NTAPI_INLINE +RtlExtendedLargeIntegerDivide( + LARGE_INTEGER Dividend, + ULONG Divisor, + PULONG Remainder) +{ + LARGE_INTEGER ret; + ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor; + if (Remainder) + *Remainder = (ULONG)(Dividend.QuadPart % Divisor); + return ret; +} + +#endif + /* * VOID * RtlCopyMemory( @@ -9587,12 +9695,6 @@ KeInitializeSemaphore( IN LONG Count, IN LONG Limit); -NTKERNELAPI -VOID -NTAPI -KeInitializeSpinLock( - IN PKSPIN_LOCK SpinLock); - NTKERNELAPI VOID NTAPI @@ -10331,11 +10433,11 @@ MmMarkPhysicalMemoryAsGood( * IN MM_PAGE_PRIORITY Priority) */ #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \ - ((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \ + (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \ | MDL_SOURCE_IS_NONPAGED_POOL)) ? \ (_Mdl)->MappedSystemVa : \ (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \ - KernelMode, MmCached, NULL, FALSE, _Priority) + KernelMode, MmCached, NULL, FALSE, (_Priority))) NTKERNELAPI PVOID diff --git a/reactos/include/ddk/winnt4.h b/reactos/include/ddk/winnt4.h index eb0d5e48916..642a06ef5d9 100644 --- a/reactos/include/ddk/winnt4.h +++ b/reactos/include/ddk/winnt4.h @@ -411,6 +411,7 @@ RtlEnlargedUnsignedMultiply( IN ULONG Multiplicand, IN ULONG Multiplier); +#ifndef _M_AMD64 NTSYSAPI LARGE_INTEGER NTAPI @@ -425,6 +426,7 @@ RtlExtendedLargeIntegerDivide( IN LARGE_INTEGER Dividend, IN ULONG Divisor, IN OUT PULONG Remainder); +#endif NTSYSAPI LARGE_INTEGER diff --git a/reactos/include/ndk/cmtypes.h b/reactos/include/ndk/cmtypes.h index d5a6ba012ac..c800f1370de 100644 --- a/reactos/include/ndk/cmtypes.h +++ b/reactos/include/ndk/cmtypes.h @@ -433,8 +433,29 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { ULONG Level; ULONG Vector; - ULONG Affinity; + KAFFINITY Affinity; } Interrupt; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + struct + { + union + { + struct + { + USHORT Reserved; + USHORT MessageCount; + ULONG Vector; + KAFFINITY Affinity; + } Raw; + struct + { + ULONG Level; + ULONG Vector; + KAFFINITY Affinity; + } Translated; + }; + } MessageInterrupt; +#endif struct { PHYSICAL_ADDRESS Start; @@ -448,7 +469,7 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR } Dma; struct { - ULONG Data[3]; + ULONG Data[3]; } DevicePrivate; struct { @@ -462,6 +483,23 @@ typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR ULONG Reserved1; ULONG Reserved2; } DeviceSpecificData; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + struct + { + PHYSICAL_ADDRESS Start; + ULONG Length40; + } Memory40; + struct + { + PHYSICAL_ADDRESS Start; + ULONG Length48; + } Memory48; + struct + { + PHYSICAL_ADDRESS Start; + ULONG Length64; + } Memory64; +#endif } u; } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR; diff --git a/reactos/include/ndk/kefuncs.h b/reactos/include/ndk/kefuncs.h index 06a16c5b88e..3b0fe4e139d 100644 --- a/reactos/include/ndk/kefuncs.h +++ b/reactos/include/ndk/kefuncs.h @@ -133,11 +133,6 @@ KeAcquireInStackQueuedSpinLockRaiseToSynch( IN PKLOCK_QUEUE_HANDLE LockHandle ); -KIRQL -FASTCALL -KeAcquireSpinLockRaiseToSynch( - IN OUT PKSPIN_LOCK SpinLock -); // // Interrupt Functions diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index 3ef796547a4..0bc99acef39 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -107,11 +107,6 @@ Author: #define KINTERRUPT_DISPATCH_CODES 106 #endif -// -// Get KPCR -// -#define KeGetPcr() PCR - #ifdef NTOS_MODE_USER //