Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenketypes.h
Go to the documentation of this file.
00001 /*++ NDK Version: 0098 00002 00003 Copyright (c) Alex Ionescu. All rights reserved. 00004 00005 Header Name: 00006 00007 ketypes.h (ARM) 00008 00009 Abstract: 00010 00011 ARM Type definitions for the Kernel services. 00012 00013 Author: 00014 00015 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 00016 00017 --*/ 00018 00019 #ifndef _ARM_KETYPES_H 00020 #define _ARM_KETYPES_H 00021 00022 // 00023 // Dependencies 00024 // 00025 00026 // 00027 // IPI Types 00028 // 00029 #define IPI_APC 1 00030 #define IPI_DPC 2 00031 #define IPI_FREEZE 4 00032 #define IPI_PACKET_READY 8 00033 #define IPI_SYNCH_REQUEST 16 00034 00035 // 00036 // PRCB Flags 00037 // 00038 #define PRCB_MAJOR_VERSION 1 00039 #define PRCB_BUILD_DEBUG 1 00040 #define PRCB_BUILD_UNIPROCESSOR 2 00041 00042 // 00043 // No LDTs on ARM 00044 // 00045 #define LDT_ENTRY ULONG 00046 00047 // 00048 // HAL Variables 00049 // 00050 #define INITIAL_STALL_COUNT 100 00051 00052 // 00053 // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual) 00054 // 00055 #define KSEG0_BASE 0x80000000 00056 00057 // 00058 // Trap Frame Definition 00059 // 00060 typedef struct _KTRAP_FRAME 00061 { 00062 ULONG DbgArgMark; 00063 ULONG R0; 00064 ULONG R1; 00065 ULONG R2; 00066 ULONG R3; 00067 ULONG R4; 00068 ULONG R5; 00069 ULONG R6; 00070 ULONG R7; 00071 ULONG R8; 00072 ULONG R9; 00073 ULONG R10; 00074 ULONG R11; 00075 ULONG R12; 00076 ULONG UserSp; 00077 ULONG UserLr; 00078 ULONG SvcSp; 00079 ULONG SvcLr; 00080 ULONG Pc; 00081 ULONG Spsr; 00082 ULONG OldIrql; 00083 ULONG PreviousMode; 00084 ULONG PreviousTrapFrame; 00085 } KTRAP_FRAME, *PKTRAP_FRAME; 00086 00087 // 00088 // Defines the Callback Stack Layout for User Mode Callbacks 00089 // 00090 // Just a stub with some required members for now 00091 // 00092 typedef struct _KCALLOUT_FRAME 00093 { 00094 ULONG CallbackStack; 00095 ULONG DummyFramePointer; 00096 } KCALLOUT_FRAME, *PKCALLOUT_FRAME; 00097 00098 #ifndef NTOS_MODE_USER 00099 00100 // 00101 // Exception Frame Definition 00102 // 00103 typedef struct _KEXCEPTION_FRAME 00104 { 00105 // ULONG R0; 00106 // ULONG R1; 00107 // ULONG R2; 00108 // ULONG R3; 00109 ULONG R4; 00110 ULONG R5; 00111 ULONG R6; 00112 ULONG R7; 00113 ULONG R8; 00114 ULONG R9; 00115 ULONG R10; 00116 ULONG R11; 00117 // ULONG R12; 00118 ULONG Lr; 00119 ULONG Psr; 00120 } KEXCEPTION_FRAME, *PKEXCEPTION_FRAME; 00121 00122 // 00123 // ARM Internal Registers 00124 // 00125 typedef union _ARM_TTB_REGISTER 00126 { 00127 struct 00128 { 00129 ULONG Reserved:14; 00130 ULONG BaseAddress:18; 00131 }; 00132 ULONG AsUlong; 00133 } ARM_TTB_REGISTER; 00134 00135 typedef union _ARM_STATUS_REGISTER 00136 { 00137 00138 struct 00139 { 00140 ULONG Mode:5; 00141 ULONG State:1; 00142 ULONG FiqDisable:1; 00143 ULONG IrqDisable:1; 00144 ULONG ImpreciseAbort:1; 00145 ULONG Endianness:1; 00146 ULONG Sbz:6; 00147 ULONG GreaterEqual:4; 00148 ULONG Sbz1:4; 00149 ULONG Java:1; 00150 ULONG Sbz2:2; 00151 ULONG StickyOverflow:1; 00152 ULONG Overflow:1; 00153 ULONG CarryBorrowExtend:1; 00154 ULONG Zero:1; 00155 ULONG NegativeLessThan:1; 00156 }; 00157 ULONG AsUlong; 00158 } ARM_STATUS_REGISTER; 00159 00160 typedef union _ARM_DOMAIN_REGISTER 00161 { 00162 struct 00163 { 00164 ULONG Domain0:2; 00165 ULONG Domain1:2; 00166 ULONG Domain2:2; 00167 ULONG Domain3:2; 00168 ULONG Domain4:2; 00169 ULONG Domain5:2; 00170 ULONG Domain6:2; 00171 ULONG Domain7:2; 00172 ULONG Domain8:2; 00173 ULONG Domain9:2; 00174 ULONG Domain10:2; 00175 ULONG Domain11:2; 00176 ULONG Domain12:2; 00177 ULONG Domain13:2; 00178 ULONG Domain14:2; 00179 ULONG Domain15:2; 00180 }; 00181 ULONG AsUlong; 00182 } ARM_DOMAIN_REGISTER; 00183 00184 typedef union _ARM_CONTROL_REGISTER 00185 { 00186 struct 00187 { 00188 ULONG MmuEnabled:1; 00189 ULONG AlignmentFaultsEnabled:1; 00190 ULONG DCacheEnabled:1; 00191 ULONG Sbo:4; 00192 ULONG BigEndianEnabled:1; 00193 ULONG System:1; 00194 ULONG Rom:1; 00195 ULONG Sbz:2; 00196 ULONG ICacheEnabled:1; 00197 ULONG HighVectors:1; 00198 ULONG RoundRobinReplacementEnabled:1; 00199 ULONG Armv4Compat:1; 00200 ULONG Ignored:6; 00201 ULONG UnalignedAccess:1; 00202 ULONG ExtendedPageTables:1; 00203 ULONG Sbz1:1; 00204 ULONG ExceptionBit:1; 00205 ULONG Sbz2:1; 00206 ULONG Nmif:1; 00207 ULONG TexRemap:1; 00208 ULONG ForceAp:1; 00209 ULONG Reserved:2; 00210 }; 00211 ULONG AsUlong; 00212 } ARM_CONTROL_REGISTER, *PARM_CONTROL_REGISTER; 00213 00214 C_ASSERT(sizeof(ARM_CONTROL_REGISTER) == sizeof(ULONG)); 00215 00216 typedef union _ARM_ID_CODE_REGISTER 00217 { 00218 struct 00219 { 00220 ULONG Revision:4; 00221 ULONG PartNumber:12; 00222 ULONG Architecture:4; 00223 ULONG Variant:4; 00224 ULONG Identifier:8; 00225 }; 00226 ULONG AsUlong; 00227 } ARM_ID_CODE_REGISTER, *PARM_ID_CODE_REGISTER; 00228 00229 typedef union _ARM_CACHE_REGISTER 00230 { 00231 struct 00232 { 00233 ULONG ILength:2; 00234 ULONG IMultipler:1; 00235 ULONG IAssociativty:3; 00236 ULONG ISize:4; 00237 ULONG IReserved:2; 00238 ULONG DLength:2; 00239 ULONG DMultipler:1; 00240 ULONG DAssociativty:3; 00241 ULONG DSize:4; 00242 ULONG DReserved:2; 00243 ULONG Separate:1; 00244 ULONG CType:4; 00245 ULONG Reserved:3; 00246 }; 00247 ULONG AsUlong; 00248 } ARM_CACHE_REGISTER, *PARM_CACHE_REGISTER; 00249 00250 typedef union _ARM_LOCKDOWN_REGISTER 00251 { 00252 struct 00253 { 00254 ULONG Preserve:1; 00255 ULONG Ignored:25; 00256 ULONG Victim:3; 00257 ULONG Reserved:3; 00258 }; 00259 ULONG AsUlong; 00260 } ARM_LOCKDOWN_REGISTER, *PARM_LOCKDOWN_REGISTER; 00261 00262 // 00263 // ARM Domains 00264 // 00265 typedef enum _ARM_DOMAINS 00266 { 00267 Domain0, 00268 Domain1, 00269 Domain2, 00270 Domain3, 00271 Domain4, 00272 Domain5, 00273 Domain6, 00274 Domain7, 00275 Domain8, 00276 Domain9, 00277 Domain10, 00278 Domain11, 00279 Domain12, 00280 Domain13, 00281 Domain14, 00282 Domain15 00283 } ARM_DOMAINS; 00284 00285 // 00286 // Special Registers Structure (outside of CONTEXT) 00287 // 00288 typedef struct _KSPECIAL_REGISTERS 00289 { 00290 ARM_CONTROL_REGISTER ControlRegister; 00291 ARM_LOCKDOWN_REGISTER LockdownRegister; 00292 ARM_CACHE_REGISTER CacheRegister; 00293 ARM_STATUS_REGISTER StatusRegister; 00294 } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS; 00295 00296 // 00297 // Processor State 00298 // 00299 typedef struct _KPROCESSOR_STATE 00300 { 00301 struct _CONTEXT ContextFrame; 00302 struct _KSPECIAL_REGISTERS SpecialRegisters; 00303 } KPROCESSOR_STATE, *PKPROCESSOR_STATE; 00304 00305 // 00306 // Processor Region Control Block 00307 // 00308 typedef struct _KPRCB 00309 { 00310 USHORT MinorVersion; 00311 USHORT MajorVersion; 00312 struct _KTHREAD *CurrentThread; 00313 struct _KTHREAD *NextThread; 00314 struct _KTHREAD *IdleThread; 00315 UCHAR Number; 00316 UCHAR Reserved; 00317 USHORT BuildType; 00318 KAFFINITY SetMember; 00319 UCHAR CpuType; 00320 UCHAR CpuID; 00321 USHORT CpuStep; 00322 KPROCESSOR_STATE ProcessorState; 00323 ULONG KernelReserved[16]; 00324 ULONG HalReserved[16]; 00325 UCHAR PrcbPad0[92]; 00326 KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock]; 00327 struct _KTHREAD *NpxThread; 00328 ULONG InterruptCount; 00329 ULONG KernelTime; 00330 ULONG UserTime; 00331 ULONG DpcTime; 00332 ULONG DebugDpcTime; 00333 ULONG InterruptTime; 00334 ULONG AdjustDpcThreshold; 00335 ULONG PageColor; 00336 UCHAR SkipTick; 00337 UCHAR DebuggerSavedIRQL; 00338 UCHAR NodeColor; 00339 UCHAR Spare1; 00340 ULONG NodeShiftedColor; 00341 struct _KNODE *ParentNode; 00342 ULONG MultiThreadProcessorSet; 00343 struct _KPRCB *MultiThreadSetMaster; 00344 ULONG SecondaryColorMask; 00345 LONG Sleeping; 00346 ULONG CcFastReadNoWait; 00347 ULONG CcFastReadWait; 00348 ULONG CcFastReadNotPossible; 00349 ULONG CcCopyReadNoWait; 00350 ULONG CcCopyReadWait; 00351 ULONG CcCopyReadNoWaitMiss; 00352 ULONG KeAlignmentFixupCount; 00353 ULONG SpareCounter0; 00354 ULONG KeDcacheFlushCount; 00355 ULONG KeExceptionDispatchCount; 00356 ULONG KeFirstLevelTbFills; 00357 ULONG KeFloatingEmulationCount; 00358 ULONG KeIcacheFlushCount; 00359 ULONG KeSecondLevelTbFills; 00360 ULONG KeSystemCalls; 00361 volatile ULONG IoReadOperationCount; 00362 volatile ULONG IoWriteOperationCount; 00363 volatile ULONG IoOtherOperationCount; 00364 LARGE_INTEGER IoReadTransferCount; 00365 LARGE_INTEGER IoWriteTransferCount; 00366 LARGE_INTEGER IoOtherTransferCount; 00367 ULONG SpareCounter1[8]; 00368 PP_LOOKASIDE_LIST PPLookasideList[16]; 00369 PP_LOOKASIDE_LIST PPNPagedLookasideList[32]; 00370 PP_LOOKASIDE_LIST PPPagedLookasideList[32]; 00371 volatile ULONG PacketBarrier; 00372 volatile ULONG ReverseStall; 00373 PVOID IpiFrame; 00374 UCHAR PrcbPad2[52]; 00375 volatile PVOID CurrentPacket[3]; 00376 volatile ULONG TargetSet; 00377 volatile PKIPI_WORKER WorkerRoutine; 00378 volatile ULONG IpiFrozen; 00379 UCHAR PrcbPad3[40]; 00380 volatile ULONG RequestSummary; 00381 volatile struct _KPRCB *SignalDone; 00382 UCHAR PrcbPad4[56]; 00383 struct _KDPC_DATA DpcData[2]; 00384 PVOID DpcStack; 00385 ULONG MaximumDpcQueueDepth; 00386 ULONG DpcRequestRate; 00387 ULONG MinimumDpcRate; 00388 volatile UCHAR DpcInterruptRequested; 00389 volatile UCHAR DpcThreadRequested; 00390 volatile UCHAR DpcRoutineActive; 00391 volatile UCHAR DpcThreadActive; 00392 ULONG PrcbLock; 00393 ULONG DpcLastCount; 00394 volatile ULONG TimerHand; 00395 volatile ULONG TimerRequest; 00396 PVOID DpcThread; 00397 KEVENT DpcEvent; 00398 UCHAR ThreadDpcEnable; 00399 volatile BOOLEAN QuantumEnd; 00400 UCHAR PrcbPad50; 00401 volatile UCHAR IdleSchedule; 00402 LONG DpcSetEventRequest; 00403 UCHAR PrcbPad5[18]; 00404 LONG TickOffset; 00405 KDPC CallDpc; 00406 ULONG PrcbPad7[8]; 00407 LIST_ENTRY WaitListHead; 00408 ULONG ReadySummary; 00409 ULONG QueueIndex; 00410 LIST_ENTRY DispatcherReadyListHead[32]; 00411 SINGLE_LIST_ENTRY DeferredReadyListHead; 00412 ULONG PrcbPad72[11]; 00413 PVOID ChainedInterruptList; 00414 LONG LookasideIrpFloat; 00415 volatile LONG MmPageFaultCount; 00416 volatile LONG MmCopyOnWriteCount; 00417 volatile LONG MmTransitionCount; 00418 volatile LONG MmCacheTransitionCount; 00419 volatile LONG MmDemandZeroCount; 00420 volatile LONG MmPageReadCount; 00421 volatile LONG MmPageReadIoCount; 00422 volatile LONG MmCacheReadCount; 00423 volatile LONG MmCacheIoCount; 00424 volatile LONG MmDirtyPagesWriteCount; 00425 volatile LONG MmDirtyWriteIoCount; 00426 volatile LONG MmMappedPagesWriteCount; 00427 volatile LONG MmMappedWriteIoCount; 00428 ULONG SpareFields0[1]; 00429 CHAR VendorString[13]; 00430 UCHAR InitialApicId; 00431 UCHAR LogicalProcessorsPerPhysicalProcessor; 00432 ULONG MHz; 00433 ULONG FeatureBits; 00434 LARGE_INTEGER UpdateSignature; 00435 volatile LARGE_INTEGER IsrTime; 00436 LARGE_INTEGER SpareField1; 00437 //FX_SAVE_AREA NpxSaveArea; 00438 PROCESSOR_POWER_STATE PowerState; 00439 } KPRCB, *PKPRCB; 00440 00441 // 00442 // Processor Control Region 00443 // 00444 typedef struct _KIPCR 00445 { 00446 union 00447 { 00448 NT_TIB NtTib; 00449 struct 00450 { 00451 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList; // Unused 00452 PVOID Used_StackBase; // Unused 00453 PVOID PerfGlobalGroupMask; 00454 PVOID TssCopy; // Unused 00455 ULONG ContextSwitches; 00456 KAFFINITY SetMemberCopy; // Unused 00457 PVOID Used_Self; 00458 }; 00459 }; 00460 struct _KPCR *Self; 00461 struct _KPRCB *Prcb; 00462 KIRQL Irql; 00463 ULONG IRR; // Unused 00464 ULONG IrrActive; // Unused 00465 ULONG IDR; // Unused 00466 PVOID KdVersionBlock; 00467 PVOID IDT; // Unused 00468 PVOID GDT; // Unused 00469 PVOID TSS; // Unused 00470 USHORT MajorVersion; 00471 USHORT MinorVersion; 00472 KAFFINITY SetMember; 00473 ULONG StallScaleFactor; 00474 UCHAR SpareUnused; 00475 UCHAR Number; 00476 UCHAR Spare0; 00477 UCHAR SecondLevelCacheAssociativity; 00478 ULONG VdmAlert; 00479 ULONG KernelReserved[14]; 00480 ULONG SecondLevelCacheSize; 00481 ULONG HalReserved[16]; 00482 // arm part 00483 UCHAR IrqlMask[32]; 00484 ULONG IrqlTable[32]; 00485 PKINTERRUPT_ROUTINE InterruptRoutine[32]; 00486 ULONG ReservedVectors; 00487 ULONG FirstLevelDcacheSize; 00488 ULONG FirstLevelDcacheFillSize; 00489 ULONG FirstLevelIcacheSize; 00490 ULONG FirstLevelIcacheFillSize; 00491 ULONG SecondLevelDcacheSize; 00492 ULONG SecondLevelDcacheFillSize; 00493 ULONG SecondLevelIcacheSize; 00494 ULONG SecondLevelIcacheFillSize; 00495 ULONG DcacheFillSize; 00496 ULONG DcacheAlignment; 00497 ULONG IcacheAlignment; 00498 ULONG IcacheFillSize; 00499 ULONG ProcessorId; 00500 PVOID InterruptStack; 00501 PVOID PanicStack; 00502 PVOID InitialStack; 00503 KPRCB PrcbData; 00504 } KIPCR, *PKIPCR; 00505 00506 // 00507 // Macro to get current KPRCB 00508 // 00509 FORCEINLINE 00510 struct _KPRCB * 00511 KeGetCurrentPrcb(VOID) 00512 { 00513 return PCR->Prcb; 00514 } 00515 00516 // 00517 // Just read it from the PCR 00518 // 00519 #define KeGetCurrentProcessorNumber() (int)PCR->Number 00520 #define KeGetCurrentIrql() PCR->Irql 00521 #define _KeGetCurrentThread() KeGetCurrentPrcb()->CurrentThread 00522 #define _KeGetPreviousMode() KeGetCurrentPrcb()->CurrentThread->PreviousMode 00523 #define _KeIsExecutingDpc() (KeGetCurrentPrcb()->DpcRoutineActive != 0) 00524 #define KeGetCurrentThread() _KeGetCurrentThread() 00525 #define KeGetPreviousMode() _KeGetPreviousMode() 00526 #define KeGetDcacheFillSize() PCR->DcacheFillSize 00527 00528 #endif 00529 #endif Generated on Sat May 26 2012 04:29:26 for ReactOS by
1.7.6.1
|