ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ketypes.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.