mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 16:52:59 +00:00
* Create a branch for USB experiments.
svn path=/branches/usb-experiments/; revision=72629
This commit is contained in:
parent
28d8ba0d3e
commit
0ee830d7a4
23049 changed files with 0 additions and 1313991 deletions
358
sdk/include/xdk/arm/ke.h
Normal file
358
sdk/include/xdk/arm/ke.h
Normal file
|
@ -0,0 +1,358 @@
|
|||
$if (_WDMDDK_)
|
||||
/** Kernel definitions for ARM **/
|
||||
|
||||
/* Interrupt request levels */
|
||||
#define PASSIVE_LEVEL 0
|
||||
#define LOW_LEVEL 0
|
||||
#define APC_LEVEL 1
|
||||
#define DISPATCH_LEVEL 2
|
||||
#define CLOCK_LEVEL 13
|
||||
#define IPI_LEVEL 14
|
||||
#define DRS_LEVEL 14
|
||||
#define POWER_LEVEL 14
|
||||
#define PROFILE_LEVEL 15
|
||||
#define HIGH_LEVEL 15
|
||||
|
||||
#define KIP0PCRADDRESS 0xFFDFF000
|
||||
#define KI_USER_SHARED_DATA 0xFFFF9000
|
||||
#define SharedUserData ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA)
|
||||
|
||||
#define PAGE_SIZE 0x1000
|
||||
#define PAGE_SHIFT 12L
|
||||
|
||||
typedef struct _KFLOATING_SAVE
|
||||
{
|
||||
ULONG Reserved;
|
||||
} KFLOATING_SAVE, *PKFLOATING_SAVE;
|
||||
|
||||
extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
YieldProcessor(
|
||||
VOID)
|
||||
{
|
||||
__dmb(_ARM_BARRIER_ISHST);
|
||||
__yield();
|
||||
}
|
||||
|
||||
#define MemoryBarrier() __dmb(_ARM_BARRIER_SY)
|
||||
#define PreFetchCacheLine(l,a) __prefetch((const void *) (a))
|
||||
#define PrefetchForWrite(p) __prefetch((const void *) (p))
|
||||
#define ReadForWriteAccess(p) (*(p))
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
KeMemoryBarrier(
|
||||
VOID)
|
||||
{
|
||||
_ReadWriteBarrier();
|
||||
MemoryBarrier();
|
||||
}
|
||||
|
||||
#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
|
||||
|
||||
_IRQL_requires_max_(HIGH_LEVEL)
|
||||
_IRQL_saves_
|
||||
NTHALAPI
|
||||
KIRQL
|
||||
NTAPI
|
||||
KeGetCurrentIrql(
|
||||
VOID);
|
||||
|
||||
_IRQL_requires_max_(HIGH_LEVEL)
|
||||
NTHALAPI
|
||||
VOID
|
||||
FASTCALL
|
||||
KfLowerIrql(
|
||||
_In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql);
|
||||
#define KeLowerIrql(a) KfLowerIrql(a)
|
||||
|
||||
_IRQL_requires_max_(HIGH_LEVEL)
|
||||
_IRQL_raises_(NewIrql)
|
||||
_IRQL_saves_
|
||||
NTHALAPI
|
||||
KIRQL
|
||||
FASTCALL
|
||||
KfRaiseIrql(
|
||||
_In_ KIRQL NewIrql);
|
||||
#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
|
||||
|
||||
_IRQL_requires_max_(DISPATCH_LEVEL)
|
||||
_IRQL_saves_
|
||||
_IRQL_raises_(DISPATCH_LEVEL)
|
||||
NTHALAPI
|
||||
KIRQL
|
||||
NTAPI
|
||||
KeRaiseIrqlToDpcLevel(VOID);
|
||||
|
||||
NTHALAPI
|
||||
KIRQL
|
||||
NTAPI
|
||||
KeRaiseIrqlToSynchLevel(VOID);
|
||||
|
||||
_Requires_lock_not_held_(*SpinLock)
|
||||
_Acquires_lock_(*SpinLock)
|
||||
_IRQL_requires_max_(DISPATCH_LEVEL)
|
||||
_IRQL_saves_
|
||||
_IRQL_raises_(DISPATCH_LEVEL)
|
||||
NTHALAPI
|
||||
KIRQL
|
||||
FASTCALL
|
||||
KfAcquireSpinLock(
|
||||
_Inout_ PKSPIN_LOCK SpinLock);
|
||||
#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
|
||||
|
||||
_Requires_lock_held_(*SpinLock)
|
||||
_Releases_lock_(*SpinLock)
|
||||
_IRQL_requires_(DISPATCH_LEVEL)
|
||||
NTHALAPI
|
||||
VOID
|
||||
FASTCALL
|
||||
KfReleaseSpinLock(
|
||||
_Inout_ PKSPIN_LOCK SpinLock,
|
||||
_In_ _IRQL_restores_ KIRQL NewIrql);
|
||||
#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
|
||||
|
||||
_Requires_lock_not_held_(*SpinLock)
|
||||
_Acquires_lock_(*SpinLock)
|
||||
_IRQL_requires_min_(DISPATCH_LEVEL)
|
||||
NTKERNELAPI
|
||||
VOID
|
||||
FASTCALL
|
||||
KefAcquireSpinLockAtDpcLevel(
|
||||
_Inout_ PKSPIN_LOCK SpinLock);
|
||||
#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
|
||||
|
||||
_Requires_lock_held_(*SpinLock)
|
||||
_Releases_lock_(*SpinLock)
|
||||
_IRQL_requires_min_(DISPATCH_LEVEL)
|
||||
NTKERNELAPI
|
||||
VOID
|
||||
FASTCALL
|
||||
KefReleaseSpinLockFromDpcLevel(
|
||||
_Inout_ PKSPIN_LOCK SpinLock);
|
||||
#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
|
||||
|
||||
NTSYSAPI
|
||||
PKTHREAD
|
||||
NTAPI
|
||||
KeGetCurrentThread(VOID);
|
||||
|
||||
_Always_(_Post_satisfies_(return<=0))
|
||||
_Must_inspect_result_
|
||||
_IRQL_requires_max_(DISPATCH_LEVEL)
|
||||
_Kernel_float_saved_
|
||||
_At_(*FloatSave, _Kernel_requires_resource_not_held_(FloatState) _Kernel_acquires_resource_(FloatState))
|
||||
FORCEINLINE
|
||||
NTSTATUS
|
||||
KeSaveFloatingPointState(
|
||||
_Out_ PKFLOATING_SAVE FloatSave)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(FloatSave);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
_Success_(1)
|
||||
_Kernel_float_restored_
|
||||
_At_(*FloatSave, _Kernel_requires_resource_held_(FloatState) _Kernel_releases_resource_(FloatState))
|
||||
FORCEINLINE
|
||||
NTSTATUS
|
||||
KeRestoreFloatingPointState(
|
||||
_In_ PKFLOATING_SAVE FloatSave)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(FloatSave);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
VOID
|
||||
KeFlushIoBuffers(
|
||||
_In_ PMDL Mdl,
|
||||
_In_ BOOLEAN ReadOperation,
|
||||
_In_ BOOLEAN DmaOperation);
|
||||
|
||||
#define DbgRaiseAssertionFailure() __emit(0xdefc)
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
_KeQueryTickCount(
|
||||
OUT PLARGE_INTEGER CurrentCount)
|
||||
{
|
||||
for (;;) {
|
||||
#ifdef NONAMELESSUNION
|
||||
CurrentCount->s.HighPart = KeTickCount.High1Time;
|
||||
CurrentCount->s.LowPart = KeTickCount.LowPart;
|
||||
if (CurrentCount->s.HighPart == KeTickCount.High2Time) break;
|
||||
#else
|
||||
CurrentCount->HighPart = KeTickCount.High1Time;
|
||||
CurrentCount->LowPart = KeTickCount.LowPart;
|
||||
if (CurrentCount->HighPart == KeTickCount.High2Time) break;
|
||||
#endif
|
||||
YieldProcessor();
|
||||
}
|
||||
}
|
||||
#define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
|
||||
|
||||
#define CP15_PMSELR 15, 0, 9, 12, 5 /* Event Counter Selection Register */
|
||||
#define CP15_PMXEVCNTR 15, 0, 9, 13, 2 /* Event Count Register */
|
||||
#define CP15_TPIDRURW 15, 0, 13, 0, 2 /* Software Thread ID Register, UsRW */
|
||||
#define CP15_TPIDRURO 15, 0, 13, 0, 3 /* Software Thread ID Register, UsRO */
|
||||
#define CP15_TPIDRPRW 15, 0, 13, 0, 4 /* Software Thread ID Register, Kernel */
|
||||
|
||||
$endif (_WDMDDK_)
|
||||
$if (_NTDDK_)
|
||||
|
||||
#define PAUSE_PROCESSOR __yield();
|
||||
|
||||
#define KERNEL_STACK_SIZE 0x3000
|
||||
#define KERNEL_LARGE_STACK_SIZE 0xF000
|
||||
#define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
|
||||
|
||||
#define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
|
||||
|
||||
#define EXCEPTION_READ_FAULT 0
|
||||
#define EXCEPTION_WRITE_FAULT 1
|
||||
#define EXCEPTION_EXECUTE_FAULT 8
|
||||
|
||||
/* The following flags control the contents of the CONTEXT structure. */
|
||||
#define CONTEXT_ARM 0x200000L
|
||||
#define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001L)
|
||||
#define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002L)
|
||||
#define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004L)
|
||||
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008L)
|
||||
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
|
||||
|
||||
typedef struct _NEON128
|
||||
{
|
||||
ULONGLONG Low;
|
||||
LONGLONG High;
|
||||
} NEON128, *PNEON128;
|
||||
|
||||
#define ARM_MAX_BREAKPOINTS 8
|
||||
#define ARM_MAX_WATCHPOINTS 1
|
||||
|
||||
typedef struct _CONTEXT
|
||||
{
|
||||
/* The flags values within this flag control the contents of
|
||||
a CONTEXT record.
|
||||
|
||||
If the context record is used as an input parameter, then
|
||||
for each portion of the context record controlled by a flag
|
||||
whose value is set, it is assumed that that portion of the
|
||||
context record contains valid context. If the context record
|
||||
is being used to modify a thread's context, then only that
|
||||
portion of the threads context will be modified.
|
||||
|
||||
If the context record is used as an IN OUT parameter to capture
|
||||
the context of a thread, then only those portions of the thread's
|
||||
context corresponding to set flags will be returned.
|
||||
|
||||
The context record is never used as an OUT only parameter. */
|
||||
ULONG ContextFlags;
|
||||
|
||||
/* This section is specified/returned if the ContextFlags word contains
|
||||
the flag CONTEXT_INTEGER. */
|
||||
ULONG R0;
|
||||
ULONG R1;
|
||||
ULONG R2;
|
||||
ULONG R3;
|
||||
ULONG R4;
|
||||
ULONG R5;
|
||||
ULONG R6;
|
||||
ULONG R7;
|
||||
ULONG R8;
|
||||
ULONG R9;
|
||||
ULONG R10;
|
||||
ULONG R11;
|
||||
ULONG R12;
|
||||
|
||||
ULONG Sp;
|
||||
ULONG Lr;
|
||||
ULONG Pc;
|
||||
ULONG Cpsr;
|
||||
|
||||
/* Floating Point/NEON Registers */
|
||||
ULONG Fpscr;
|
||||
ULONG Padding;
|
||||
union
|
||||
{
|
||||
NEON128 Q[16];
|
||||
ULONGLONG D[32];
|
||||
ULONG S[32];
|
||||
} DUMMYUNIONNAME;
|
||||
|
||||
/* Debug registers */
|
||||
ULONG Bvr[ARM_MAX_BREAKPOINTS];
|
||||
ULONG Bcr[ARM_MAX_BREAKPOINTS];
|
||||
ULONG Wvr[ARM_MAX_WATCHPOINTS];
|
||||
ULONG Wcr[ARM_MAX_WATCHPOINTS];
|
||||
|
||||
ULONG Padding2[2];
|
||||
} CONTEXT;
|
||||
|
||||
#define PCR_MINOR_VERSION 1
|
||||
#define PCR_MAJOR_VERSION 1
|
||||
|
||||
typedef struct _KPCR
|
||||
{
|
||||
_ANONYMOUS_UNION union
|
||||
{
|
||||
NT_TIB NtTib;
|
||||
_ANONYMOUS_STRUCT struct
|
||||
{
|
||||
ULONG TibPad0[2];
|
||||
PVOID Spare1;
|
||||
struct _KPCR *Self;
|
||||
struct _KPRCB *CurrentPrcb;
|
||||
PKSPIN_LOCK_QUEUE LockArray;
|
||||
PVOID Used_Self;
|
||||
};
|
||||
};
|
||||
KIRQL CurrentIrql;
|
||||
UCHAR SecondLevelCacheAssociativity;
|
||||
ULONG Unused0[3];
|
||||
USHORT MajorVersion;
|
||||
USHORT MinorVersion;
|
||||
ULONG StallScaleFactor;
|
||||
PVOID Unused1[3];
|
||||
ULONG KernelReserved[15];
|
||||
ULONG SecondLevelCacheSize;
|
||||
_ANONYMOUS_UNION union
|
||||
{
|
||||
USHORT SoftwareInterruptPending; // Software Interrupt Pending Flag
|
||||
struct
|
||||
{
|
||||
UCHAR ApcInterrupt; // 0x01 if APC int pending
|
||||
UCHAR DispatchInterrupt; // 0x01 if dispatch int pending
|
||||
};
|
||||
};
|
||||
USHORT InterruptPad;
|
||||
ULONG HalReserved[32];
|
||||
PVOID KdVersionBlock;
|
||||
PVOID Unused3;
|
||||
ULONG PcrAlign1[8];
|
||||
} KPCR, *PKPCR;
|
||||
|
||||
#define CP15_PCR_RESERVED_MASK 0xFFF
|
||||
//#define KIPCR() ((ULONG_PTR)(_MoveFromCoprocessor(CP15_TPIDRPRW)) & ~CP15_PCR_RESERVED_MASK)
|
||||
|
||||
FORCEINLINE
|
||||
PKPCR
|
||||
KeGetPcr(
|
||||
VOID)
|
||||
{
|
||||
return (PKPCR)(_MoveFromCoprocessor(CP15_TPIDRPRW) & ~CP15_PCR_RESERVED_MASK);
|
||||
}
|
||||
|
||||
#if (NTDDI_VERSION < NTDDI_WIN7) || !defined(NT_PROCESSOR_GROUPS)
|
||||
FORCEINLINE
|
||||
ULONG
|
||||
KeGetCurrentProcessorNumber(
|
||||
VOID)
|
||||
|
||||
{
|
||||
return *((PUCHAR)KeGetPcr() + 0x580);
|
||||
}
|
||||
#endif /* (NTDDI_VERSION < NTDDI_WIN7) || !defined(NT_PROCESSOR_GROUPS) */
|
||||
|
||||
$endif
|
Loading…
Add table
Add a link
Reference in a new issue