+/*
+ * PROJECT: ReactOS Kernel
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: ntoskrnl/include/internal/hdl.h
+ * PURPOSE: Internal header for the Configuration Manager
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+#define _HDL_
+#include <cportlib/cportlib.h>
+
+//
+// Define this if you want debugging support
+//
+#define _HDL_DEBUG_ 0x00
+
+//
+// These define the Debug Masks Supported
+//
+#define HDL_XXX_DEBUG 0x01
+
+//
+// Debug/Tracing support
+//
+#if _HDL_DEBUG_
+#ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
+#define HDLTRACE DbgPrintEx
+#else
+#define HDLTRACE(x, ...) \
+ if (x & HdlpTraceLevel) DbgPrint(__VA_ARGS__)
+#endif
+#else
+#define HDLTRACE(x, ...) DPRINT(__VA_ARGS__)
+#endif
+
+//
+// Headless Log Entry
+//
+typedef struct _HEADLESS_LOG_ENTRY
+{
+ SYSTEM_TIMEOFDAY_INFORMATION TimeOfEntry;
+ PWCHAR String;
+} HEADLESS_LOG_ENTRY, *PHEADLESS_LOG_ENTRY;
+
+//
+// Headless Bugcheck Information
+//
+typedef struct _HEADLESS_BLUE_SCREEN_DATA
+{
+ PUCHAR Property;
+ PUCHAR XMLData;
+ struct _HEADLESS_BLUE_SCREEN_DATA *Next;
+} HEADLESS_BLUE_SCREEN_DATA, * PHEADLESS_BLUE_SCREEN_DATA;
+
+//
+// Headless Control Structure, mostly for !SAC
+//
+typedef struct _HEADLESS_GLOBALS
+{
+ KSPIN_LOCK SpinLock;
+ HANDLE PageLockHandle;
+ PHEADLESS_LOG_ENTRY LogEntries;
+ PUCHAR TmpBuffer;
+ PUCHAR InputBuffer;
+ PHEADLESS_BLUE_SCREEN_DATA BlueScreenData;
+ union
+ {
+ struct
+ {
+ ULONG TerminalEnabled:1;
+ ULONG InBugCheck:1;
+ ULONG NewLogEntryAdded:1;
+ ULONG UsedBiosSettings:1;
+ ULONG InputProcessing:1;
+ ULONG InputLineDone:1;
+ ULONG ProcessingCmd:1;
+ ULONG TerminalParity:1;
+ ULONG TerminalStopBits:1;
+ ULONG TerminalPortNumber:3;
+ ULONG IsNonLegacyDevice:1;
+ };
+ ULONG AllFlags;
+ };
+ ULONG TerminalBaudRate;
+ ULONG TerminalPort;
+ PUCHAR TerminalPortAddress;
+ LARGE_INTEGER DelayTime;
+ ULONG MicroSecondsDelayTime;
+ UCHAR TerminalType;
+ SIZE_T InputBufferIndex;
+ USHORT LogEntryLast;
+ USHORT LogEntryStart;
+ GUID SystemGUID;
+ BOOLEAN IsMMIODevice;
+ BOOLEAN IsLastCharCR;
+} HEADLESS_GLOBALS, *PHEADLESS_GLOBALS;
+
+//
+// FIXME: A public header in the NDK? Ask Alex
+//
+typedef enum _HEADLESS_CMD
+{
+ HeadlessCmdEnableTerminal = 1,
+ HeadlessCmdCheckForReboot,
+ HeadlessCmdPutString,
+ HeadlessCmdClearDisplay,
+ HeadlessCmdClearToEndOfDisplay,
+ HeadlessCmdClearToEndOfLine,
+ HeadlessCmdDisplayAttributesOff,
+ HeadlessCmdDisplayInverseVideo,
+ HeadlessCmdSetColor,
+ HeadlessCmdPositionCursor,
+ HeadlessCmdTerminalPoll,
+ HeadlessCmdGetByte,
+ HeadlessCmdGetLine,
+ HeadlessCmdStartBugCheck,
+ HeadlessCmdDoBugCheckProcessing,
+ HeadlessCmdQueryInformation,
+ HeadlessCmdAddLogEntry,
+ HeadlessCmdDisplayLog,
+ HeadlessCmdSetBlueScreenData,
+ HeadlessCmdSendBlueScreenData,
+ HeadlessCmdQueryGUID,
+ HeadlessCmdPutData
+} HEADLESS_CMD, *PHEADLESS_CMD;
+
+NTSTATUS
+NTAPI
+HeadlessDispatch(
+ IN HEADLESS_CMD Command,
+ IN PVOID InputBuffer,
+ IN SIZE_T InputBufferSize,
+ OUT PVOID OutputBuffer,
+ OUT PSIZE_T OutputBufferSize
+);
+
+//
+// Global variables accessible from all of Hdl
+//
+extern PHEADLESS_GLOBALS HeadlessGlobals;
+
+//
+// Inlined functions
+//
+//#include "hdl_x.h"