xref: /reactos/sdk/include/xdk/ppc/ke.h (revision 8a978a17)
1 $if (_WDMDDK_)
2 
3 /* Interrupt request levels */
4 #define PASSIVE_LEVEL                      0
5 #define LOW_LEVEL                          0
6 #define APC_LEVEL                          1
7 #define DISPATCH_LEVEL                     2
8 #define PROFILE_LEVEL                     27
9 #define CLOCK1_LEVEL                      28
10 #define CLOCK2_LEVEL                      28
11 #define IPI_LEVEL                         29
12 #define POWER_LEVEL                       30
13 #define HIGH_LEVEL                        31
14 
15 //
16 // Used to contain PFNs and PFN counts
17 //
18 typedef ULONG PFN_COUNT;
19 typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
20 typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
21 
22 
23 typedef struct _KFLOATING_SAVE {
24   ULONG Dummy;
25 } KFLOATING_SAVE, *PKFLOATING_SAVE;
26 
27 typedef struct _KPCR_TIB {
28   PVOID ExceptionList;         /* 00 */
29   PVOID StackBase;             /* 04 */
30   PVOID StackLimit;            /* 08 */
31   PVOID SubSystemTib;          /* 0C */
32   _ANONYMOUS_UNION union {
33     PVOID FiberData;           /* 10 */
34     ULONG Version;             /* 10 */
35   } DUMMYUNIONNAME;
36   PVOID ArbitraryUserPointer;  /* 14 */
37   struct _KPCR_TIB *Self;       /* 18 */
38 } KPCR_TIB, *PKPCR_TIB;         /* 1C */
39 
40 #define PCR_MINOR_VERSION 1
41 #define PCR_MAJOR_VERSION 1
42 
43 typedef struct _KPCR {
44   KPCR_TIB Tib;                /* 00 */
45   struct _KPCR *Self;          /* 1C */
46   struct _KPRCB *Prcb;         /* 20 */
47   KIRQL Irql;                  /* 24 */
48   ULONG IRR;                   /* 28 */
49   ULONG IrrActive;             /* 2C */
50   ULONG IDR;                   /* 30 */
51   PVOID KdVersionBlock;        /* 34 */
52   PUSHORT IDT;                 /* 38 */
53   PUSHORT GDT;                 /* 3C */
54   struct _KTSS *TSS;           /* 40 */
55   USHORT MajorVersion;         /* 44 */
56   USHORT MinorVersion;         /* 46 */
57   KAFFINITY SetMember;         /* 48 */
58   ULONG StallScaleFactor;      /* 4C */
59   UCHAR SpareUnused;           /* 50 */
60   UCHAR Number;                /* 51 */
61 } KPCR, *PKPCR;                /* 54 */
62 
63 #define KeGetPcr()                      PCR
64 
65 #define YieldProcessor() __asm__ __volatile__("nop");
66 
67 FORCEINLINE
68 ULONG
69 NTAPI
70 KeGetCurrentProcessorNumber(VOID)
71 {
72   ULONG Number;
73   __asm__ __volatile__ (
74     "lwz %0, %c1(12)\n"
75     : "=r" (Number)
76     : "i" (FIELD_OFFSET(KPCR, Number))
77   );
78   return Number;
79 }
80 
81 NTHALAPI
82 VOID
83 FASTCALL
84 KfLowerIrql(
85   IN KIRQL NewIrql);
86 #define KeLowerIrql(a) KfLowerIrql(a)
87 
88 NTHALAPI
89 KIRQL
90 FASTCALL
91 KfRaiseIrql(
92   IN KIRQL NewIrql);
93 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
94 
95 NTHALAPI
96 KIRQL
97 NTAPI
98 KeRaiseIrqlToDpcLevel(VOID);
99 
100 NTHALAPI
101 KIRQL
102 NTAPI
103 KeRaiseIrqlToSynchLevel(VOID);
104 
105 $endif
106 
107 
108