Patch by Anton Yarotsky:
[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 // Headless Log Entry
37 //
38 typedef struct _HEADLESS_LOG_ENTRY
39 {
40 SYSTEM_TIMEOFDAY_INFORMATION TimeOfEntry;
41 PWCHAR String;
42 } HEADLESS_LOG_ENTRY, *PHEADLESS_LOG_ENTRY;
43
44 //
45 // Headless Bugcheck Information
46 //
47 typedef struct _HEADLESS_BLUE_SCREEN_DATA
48 {
49 PUCHAR Property;
50 PUCHAR XMLData;
51 struct _HEADLESS_BLUE_SCREEN_DATA *Next;
52 } HEADLESS_BLUE_SCREEN_DATA, * PHEADLESS_BLUE_SCREEN_DATA;
53
54 //
55 // Headless Control Structure, mostly for !SAC
56 //
57 typedef struct _HEADLESS_GLOBALS
58 {
59 KSPIN_LOCK SpinLock;
60 HANDLE PageLockHandle;
61 PHEADLESS_LOG_ENTRY LogEntries;
62 PUCHAR TmpBuffer;
63 PUCHAR InputBuffer;
64 PHEADLESS_BLUE_SCREEN_DATA BlueScreenData;
65 union
66 {
67 struct
68 {
69 ULONG TerminalEnabled:1;
70 ULONG InBugCheck:1;
71 ULONG NewLogEntryAdded:1;
72 ULONG UsedBiosSettings:1;
73 ULONG InputProcessing:1;
74 ULONG InputLineDone:1;
75 ULONG ProcessingCmd:1;
76 ULONG TerminalParity:1;
77 ULONG TerminalStopBits:1;
78 ULONG TerminalPortNumber:3;
79 ULONG IsNonLegacyDevice:1;
80 };
81 ULONG AllFlags;
82 };
83 ULONG TerminalBaudRate;
84 ULONG TerminalPort;
85 PUCHAR TerminalPortAddress;
86 LARGE_INTEGER DelayTime;
87 ULONG MicroSecondsDelayTime;
88 UCHAR TerminalType;
89 SIZE_T InputBufferIndex;
90 USHORT LogEntryLast;
91 USHORT LogEntryStart;
92 GUID SystemGUID;
93 BOOLEAN IsMMIODevice;
94 BOOLEAN IsLastCharCR;
95 } HEADLESS_GLOBALS, *PHEADLESS_GLOBALS;
96
97 //
98 // FIXME: A public header in the NDK? Ask Alex
99 //
100 typedef enum _HEADLESS_CMD
101 {
102 HeadlessCmdEnableTerminal = 1,
103 HeadlessCmdCheckForReboot,
104 HeadlessCmdPutString,
105 HeadlessCmdClearDisplay,
106 HeadlessCmdClearToEndOfDisplay,
107 HeadlessCmdClearToEndOfLine,
108 HeadlessCmdDisplayAttributesOff,
109 HeadlessCmdDisplayInverseVideo,
110 HeadlessCmdSetColor,
111 HeadlessCmdPositionCursor,
112 HeadlessCmdTerminalPoll,
113 HeadlessCmdGetByte,
114 HeadlessCmdGetLine,
115 HeadlessCmdStartBugCheck,
116 HeadlessCmdDoBugCheckProcessing,
117 HeadlessCmdQueryInformation,
118 HeadlessCmdAddLogEntry,
119 HeadlessCmdDisplayLog,
120 HeadlessCmdSetBlueScreenData,
121 HeadlessCmdSendBlueScreenData,
122 HeadlessCmdQueryGUID,
123 HeadlessCmdPutData
124 } HEADLESS_CMD, *PHEADLESS_CMD;
125
126 NTSTATUS
127 NTAPI
128 HeadlessDispatch(
129 IN HEADLESS_CMD Command,
130 IN PVOID InputBuffer,
131 IN SIZE_T InputBufferSize,
132 OUT PVOID OutputBuffer,
133 OUT PSIZE_T OutputBufferSize
134 );
135
136 //
137 // Global variables accessible from all of Hdl
138 //
139 extern PHEADLESS_GLOBALS HeadlessGlobals;
140
141 //
142 // Inlined functions
143 //
144 //#include "hdl_x.h"