ReactOS  0.4.14-dev-114-gc8cbd56
ke_i.h
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Kernel
3  * LICENSE: BSD - See COPYING.ARM in the top level directory
4  * FILE: ntoskrnl/ke/arm/ke_i.h
5  * PURPOSE: Implements macro-generated system call portable wrappers
6  * PROGRAMMERS: ReactOS Portable Systems Group
7  */
8 
9 //
10 // First, cleanup after any previous invocation
11 //
12 #undef _1
13 #undef _2
14 #undef _3
15 #undef _4
16 #undef _5
17 #undef _6
18 #undef _7
19 #undef _8
20 #undef _9
21 #undef a
22 #undef b
23 #undef c
24 #undef d
25 #undef e
26 #undef f
27 #undef _10
28 #undef _11
29 #undef SYSCALL
30 
31 //
32 // Are we building the typedef prototypes?
33 //
34 #ifdef PROTO
35  //
36  // Then, each parameter is actually a prototype argument
37  //
38  #define _1 PVOID
39  #define _2 PVOID
40  #define _3 PVOID
41  #define _4 PVOID
42  #define _5 PVOID
43  #define _6 PVOID
44  #define _7 PVOID
45  #define _8 PVOID
46  #define _9 PVOID
47  #define a PVOID
48  #define b PVOID
49  #define c PVOID
50  #define d PVOID
51  #define e PVOID
52  #define f PVOID
53  #define _10 PVOID
54  #define _11 PVOID
55 
56  //
57  // And we generate the typedef
58  //
59  #define SYSCALL(x, y) typedef NTSTATUS (*PKI_SYSCALL_##x##PARAM)y;
60 
61  //
62  // Cleanup for next run
63  //
64  #undef PROTO
65 #else
66  //
67  // Each parameter is actually an argument for the system call
68  //
69  #define _1 g[0x00]
70  #define _2 g[0x01]
71  #define _3 g[0x02]
72  #define _4 g[0x03]
73  #define _5 g[0x04]
74  #define _6 g[0x05]
75  #define _7 g[0x06]
76  #define _8 g[0x07]
77  #define _9 g[0x08]
78  #define a g[0x09]
79  #define b g[0x0A]
80  #define c g[0x0B]
81  #define d g[0x0C]
82  #define e g[0x0D]
83  #define f g[0x0E]
84  #define _10 g[0x0F]
85  #define _11 g[0x10]
86 
87  //
88  // And we generate the actual system call
89  //
90  #define SYSCALL(x, y) \
91  NTSTATUS \
92  KiSyscall##x##Param( \
93  IN PVOID p, \
94  IN PVOID *g \
95  ) \
96  { \
97  return ((PKI_SYSCALL_##x##PARAM)p)y; \
98  }
99 
100  //
101  // Cleanup for next run
102  //
103  #undef FUNC
104 #endif