[NTOSKRNL]
[reactos.git] / ntoskrnl / include / internal / hdl.h
1 /*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: ntoskrnl/include/internal/hdl.h
5 * PURPOSE: Internal header for the Configuration Manager
6 * PROGRAMMERS: ReactOS Portable Systems Group
7 */
8 #define _HDL_
9 #include <cportlib/cportlib.h>
10 #include <ndk/extypes.h>
11
12 //
13 // Define this if you want debugging support
14 //
15 #define _HDL_DEBUG_ 0x00
16
17 //
18 // These define the Debug Masks Supported
19 //
20 #define HDL_XXX_DEBUG 0x01
21
22 //
23 // Debug/Tracing support
24 //
25 #if _HDL_DEBUG_
26 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
27 #define HDLTRACE DbgPrintEx
28 #else
29 #define HDLTRACE(x, ...) \
30 if (x & HdlpTraceLevel) DbgPrint(__VA_ARGS__)
31 #endif
32 #else
33 #define HDLTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)
34 #endif
35
36 //
37 // Well-known messages that Io and Pnp post to the kernel log
38 //
39 typedef enum _HEADLESS_LOG_MESSAGE
40 {
41 HeadlessLogDriverLoad = 1,
42 HeadlessLogDriverSuccess,
43 HeadlessLogDriverFailed,
44 HeadlessLogEventFailed,
45 HeadlessLogObjectFailed,
46 HeadlessLogDirectoryFailed,
47 HeadlessLogPnpFailed,
48 HeadlessLogPnpFailed2,
49 HeadlessLogBootDriversFailed,
50 HeadlessLogNtdllFailed,
51 HeadlessLogSystemDriversFailed,
52 HeadlessLogReassignSystemRootFailed,
53 HeadlessLogProtectSystemRootFailed,
54 HeadlessLogConvertSystemRootFailed,
55 HeadlessLogConvertDeviceNameFailed,
56 HeadlessLogGroupOrderListFailed,
57 HeadlessLogGroupTableFailed
58 //
59 // There are more, but not applicable to ReactOS, I believe
60 //
61 } HEADLESS_LOG_MESSAGE;
62
63 //
64 // Headless Log Entry
65 //
66 typedef struct _HEADLESS_LOG_ENTRY
67 {
68 SYSTEM_TIMEOFDAY_INFORMATION TimeOfEntry;
69 PWCHAR String;
70 } HEADLESS_LOG_ENTRY, *PHEADLESS_LOG_ENTRY;
71
72 //
73 // Headless Bugcheck Information
74 //
75 typedef struct _HEADLESS_BLUE_SCREEN_DATA
76 {
77 PUCHAR Property;
78 PUCHAR XMLData;
79 struct _HEADLESS_BLUE_SCREEN_DATA *Next;
80 } HEADLESS_BLUE_SCREEN_DATA, * PHEADLESS_BLUE_SCREEN_DATA;
81
82 //
83 // Headless Control Structure, mostly for !SAC
84 //
85 typedef struct _HEADLESS_GLOBALS
86 {
87 KSPIN_LOCK SpinLock;
88 HANDLE PageLockHandle;
89 PHEADLESS_LOG_ENTRY LogEntries;
90 PUCHAR TmpBuffer;
91 PUCHAR InputBuffer;
92 PHEADLESS_BLUE_SCREEN_DATA BlueScreenData;
93 union
94 {
95 struct
96 {
97 ULONG TerminalEnabled:1;
98 ULONG InBugCheck:1;
99 ULONG NewLogEntryAdded:1;
100 ULONG UsedBiosSettings:1;
101 ULONG InputProcessing:1;
102 ULONG InputLineDone:1;
103 ULONG ProcessingCmd:1;
104 ULONG TerminalParity:1;
105 ULONG TerminalStopBits:1;
106 ULONG TerminalPortNumber:3;
107 ULONG IsNonLegacyDevice:1;
108 };
109 ULONG AllFlags;
110 };
111 ULONG TerminalBaudRate;
112 ULONG TerminalPort;
113 PUCHAR TerminalPortAddress;
114 LARGE_INTEGER DelayTime;
115 ULONG MicroSecondsDelayTime;
116 UCHAR TerminalType;
117 SIZE_T InputBufferIndex;
118 USHORT LogEntryLast;
119 USHORT LogEntryStart;
120 GUID SystemGUID;
121 BOOLEAN IsMMIODevice;
122 BOOLEAN IsLastCharCR;
123 } HEADLESS_GLOBALS, *PHEADLESS_GLOBALS;
124
125 //
126 // FIXME: A public header in the NDK? Ask Alex
127 //
128 typedef enum _HEADLESS_CMD
129 {
130 HeadlessCmdEnableTerminal = 1,
131 HeadlessCmdCheckForReboot,
132 HeadlessCmdPutString,
133 HeadlessCmdClearDisplay,
134 HeadlessCmdClearToEndOfDisplay,
135 HeadlessCmdClearToEndOfLine,
136 HeadlessCmdDisplayAttributesOff,
137 HeadlessCmdDisplayInverseVideo,
138 HeadlessCmdSetColor,
139 HeadlessCmdPositionCursor,
140 HeadlessCmdTerminalPoll,
141 HeadlessCmdGetByte,
142 HeadlessCmdGetLine,
143 HeadlessCmdStartBugCheck,
144 HeadlessCmdDoBugCheckProcessing,
145 HeadlessCmdQueryInformation,
146 HeadlessCmdAddLogEntry,
147 HeadlessCmdDisplayLog,
148 HeadlessCmdSetBlueScreenData,
149 HeadlessCmdSendBlueScreenData,
150 HeadlessCmdQueryGUID,
151 HeadlessCmdPutData
152 } HEADLESS_CMD, *PHEADLESS_CMD;
153
154 typedef enum _HEADLESS_TERM_PORT_TYPE
155 {
156 HeadlessUndefinedPortType = 0,
157 HeadlessSerialPort
158 } HEADLESS_TERM_PORT_TYPE, *PHEADLESS_TERM_PORT_TYPE;
159
160 typedef enum _HEADLESS_TERM_SERIAL_PORT
161 {
162 SerialPortUndefined = 0,
163 ComPort1,
164 ComPort2,
165 ComPort3,
166 ComPort4
167 } HEADLESS_TERM_SERIAL_PORT, *PHEADLESS_TERM_SERIAL_PORT;
168
169 typedef struct _HEADLESS_RSP_QUERY_INFO
170 {
171 HEADLESS_TERM_PORT_TYPE PortType;
172 union
173 {
174 struct
175 {
176 BOOLEAN TerminalAttached;
177 BOOLEAN UsedBiosSettings;
178 HEADLESS_TERM_SERIAL_PORT TerminalPort;
179 PUCHAR TerminalPortBaseAddress;
180 ULONG TerminalBaudRate;
181 UCHAR TerminalType;
182 } Serial;
183 };
184 } HEADLESS_RSP_QUERY_INFO, *PHEADLESS_RSP_QUERY_INFO;
185
186 typedef struct _HEADLESS_CMD_PUT_STRING
187 {
188 UCHAR String[1];
189 } HEADLESS_CMD_PUT_STRING, *PHEADLESS_CMD_PUT_STRING;
190
191 NTSTATUS
192 NTAPI
193 HeadlessDispatch(
194 IN HEADLESS_CMD Command,
195 IN PVOID InputBuffer,
196 IN SIZE_T InputBufferSize,
197 OUT PVOID OutputBuffer,
198 OUT PSIZE_T OutputBufferSize
199 );
200
201 //
202 // Global variables accessible from all of Hdl
203 //
204 extern PHEADLESS_GLOBALS HeadlessGlobals;
205
206 //
207 // Inlined functions
208 //
209 //#include "hdl_x.h"