Fix kdbg build and some more header cleanups: add csq.q to ntifs, since it's now...
[reactos.git] / reactos / ntoskrnl / inbv / inbv.c
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/inbv/inbv.c
6 * PURPOSE: Boot video support
7 *
8 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
9 */
10
11 /* INCLUDES ******************************************************************/
12
13 #include <ntoskrnl.h>
14 #include "../../drivers/dd/bootvid/ntbootvid.h"
15 #define NDEBUG
16 #include <internal/debug.h>
17
18
19 /* GLOBALS *******************************************************************/
20
21 /* DATA **********************************************************************/
22
23 static HANDLE BootVidDevice = NULL;
24 static BOOL BootVidDriverInstalled = FALSE;
25 static NTBOOTVID_FUNCTION_TABLE BootVidFunctionTable;
26
27 /* FUNCTIONS *****************************************************************/
28
29 NTSTATUS
30 STATIC
31 InbvCheckBootVid(VOID)
32 {
33 IO_STATUS_BLOCK Iosb;
34
35 if (BootVidDevice == NULL)
36 {
37 NTSTATUS Status;
38 OBJECT_ATTRIBUTES ObjectAttributes;
39 UNICODE_STRING BootVidName = RTL_CONSTANT_STRING(L"\\Device\\BootVid");
40
41 InitializeObjectAttributes(&ObjectAttributes,
42 &BootVidName,
43 0,
44 NULL,
45 NULL);
46 Status = ZwOpenFile(&BootVidDevice,
47 FILE_ALL_ACCESS,
48 &ObjectAttributes,
49 &Iosb,
50 0,
51 0);
52 if (!NT_SUCCESS(Status))
53 {
54 return(Status);
55 }
56 }
57 return(STATUS_SUCCESS);
58 }
59
60
61 VOID
62 STDCALL
63 InbvAcquireDisplayOwnership(VOID)
64 {
65 }
66
67 BOOLEAN
68 STDCALL
69 InbvCheckDisplayOwnership(VOID)
70 {
71 return FALSE;
72 }
73
74 BOOLEAN
75 STDCALL
76 InbvDisplayString(IN PCHAR String)
77 {
78 /* Call Bootvid (we don't support bootvid for now)
79 * vidDisplayString(String);
80 * so instead, we'll fall-back to HAL
81 */
82 HalDisplayString(String);
83
84 /* Call Headless (We don't support headless for now)
85 HeadlessDispatch(DISPLAY_STRING);
86 */
87
88 /* Return success */
89 return TRUE;
90 }
91
92 BOOLEAN
93 STDCALL
94 InbvResetDisplayParameters(ULONG SizeX, ULONG SizeY)
95 {
96 return(InbvResetDisplay());
97 }
98
99
100 VOID
101 STDCALL INIT_FUNCTION
102 InbvEnableBootDriver(IN BOOLEAN Enable)
103 {
104 NTSTATUS Status;
105 IO_STATUS_BLOCK Iosb;
106
107 Status = InbvCheckBootVid();
108 if (!NT_SUCCESS(Status))
109 {
110 return;
111 }
112
113 if (Enable)
114 {
115 /* Notify the hal we will acquire the display. */
116 HalAcquireDisplayOwnership(InbvResetDisplayParameters);
117
118 Status = NtDeviceIoControlFile(BootVidDevice,
119 NULL,
120 NULL,
121 NULL,
122 &Iosb,
123 IOCTL_BOOTVID_INITIALIZE,
124 NULL,
125 0,
126 &BootVidFunctionTable,
127 sizeof(BootVidFunctionTable));
128 if (!NT_SUCCESS(Status))
129 {
130 KEBUGCHECK(0);
131 }
132 BootVidDriverInstalled = TRUE;
133 CHECKPOINT;
134 }
135 else
136 {
137 Status = NtDeviceIoControlFile(BootVidDevice,
138 NULL,
139 NULL,
140 NULL,
141 &Iosb,
142 IOCTL_BOOTVID_CLEANUP,
143 NULL,
144 0,
145 NULL,
146 0);
147 if (!NT_SUCCESS(Status))
148 {
149 KEBUGCHECK(0);
150 }
151 BootVidDriverInstalled = FALSE;
152 /* Notify the hal we have released the display. */
153 HalReleaseDisplayOwnership();
154
155 NtClose(BootVidDevice);
156 BootVidDevice = NULL;
157 }
158 }
159
160
161 BOOLEAN
162 STDCALL
163 InbvEnableDisplayString(IN BOOLEAN Enable)
164 {
165 return FALSE;
166 }
167
168
169 VOID
170 STDCALL
171 InbvInstallDisplayStringFilter(IN PVOID Unknown)
172 {
173 }
174
175
176 BOOLEAN
177 STDCALL
178 InbvIsBootDriverInstalled(VOID)
179 {
180 return(BootVidDriverInstalled);
181 }
182
183
184 VOID
185 STDCALL
186 InbvNotifyDisplayOwnershipLost(IN PVOID Callback)
187 {
188 }
189
190
191 BOOLEAN
192 STDCALL
193 InbvResetDisplay(VOID)
194 {
195 if (!BootVidDriverInstalled)
196 {
197 return(FALSE);
198 }
199 return(BootVidFunctionTable.ResetDisplay());
200 }
201
202
203 VOID
204 STDCALL
205 InbvSetScrollRegion(IN ULONG Left,
206 IN ULONG Top,
207 IN ULONG Width,
208 IN ULONG Height)
209 {
210 }
211
212
213 VOID
214 STDCALL
215 InbvSetTextColor(IN ULONG Color)
216 {
217 }
218
219
220 VOID
221 STDCALL
222 InbvSolidColorFill(IN ULONG Left,
223 IN ULONG Top,
224 IN ULONG Width,
225 IN ULONG Height,
226 IN ULONG Color)
227 {
228 }
229
230 NTSTATUS
231 STDCALL
232 NtDisplayString(IN PUNICODE_STRING DisplayString)
233 {
234 OEM_STRING OemString;
235
236 RtlUnicodeStringToOemString(&OemString, DisplayString, TRUE);
237 HalDisplayString(OemString.Buffer);
238 RtlFreeOemString(&OemString);
239
240 return STATUS_SUCCESS;
241 }