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