- NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL...
[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/base/bootvid/ntbootvid.h"
15 #define NDEBUG
16 #include <internal/debug.h>
17
18 #if defined (ALLOC_PRAGMA)
19 #pragma alloc_text(INIT, InbvEnableBootDriver)
20 #endif
21
22 /* ROS Internal. Please deprecate */
23 NTHALAPI
24 VOID
25 NTAPI
26 HalReleaseDisplayOwnership(
27 VOID
28 );
29
30 /* GLOBALS *******************************************************************/
31
32 /* DATA **********************************************************************/
33
34 static HANDLE BootVidDevice = NULL;
35 static BOOL BootVidDriverInstalled = FALSE;
36 static NTBOOTVID_FUNCTION_TABLE BootVidFunctionTable;
37
38 /* FUNCTIONS *****************************************************************/
39
40 NTSTATUS
41 STATIC
42 InbvCheckBootVid(VOID)
43 {
44 IO_STATUS_BLOCK Iosb;
45
46 if (BootVidDevice == NULL)
47 {
48 NTSTATUS Status;
49 OBJECT_ATTRIBUTES ObjectAttributes;
50 UNICODE_STRING BootVidName = RTL_CONSTANT_STRING(L"\\Device\\BootVid");
51
52 InitializeObjectAttributes(&ObjectAttributes,
53 &BootVidName,
54 0,
55 NULL,
56 NULL);
57 Status = ZwOpenFile(&BootVidDevice,
58 FILE_ALL_ACCESS,
59 &ObjectAttributes,
60 &Iosb,
61 0,
62 0);
63 if (!NT_SUCCESS(Status))
64 {
65 return(Status);
66 }
67 }
68 return(STATUS_SUCCESS);
69 }
70
71
72 VOID
73 STDCALL
74 InbvAcquireDisplayOwnership(VOID)
75 {
76 }
77
78 BOOLEAN
79 STDCALL
80 InbvCheckDisplayOwnership(VOID)
81 {
82 return FALSE;
83 }
84
85 BOOLEAN
86 STDCALL
87 InbvDisplayString(IN PCHAR String)
88 {
89 /* Call Bootvid (we don't support bootvid for now)
90 * vidDisplayString(String);
91 * so instead, we'll fall-back to HAL
92 */
93 HalDisplayString(String);
94
95 /* Call Headless (We don't support headless for now)
96 HeadlessDispatch(DISPLAY_STRING);
97 */
98
99 /* Return success */
100 return TRUE;
101 }
102
103 BOOLEAN
104 STDCALL
105 InbvResetDisplayParameters(ULONG SizeX, ULONG SizeY)
106 {
107 return(InbvResetDisplay());
108 }
109
110
111 VOID
112 STDCALL INIT_FUNCTION
113 InbvEnableBootDriver(IN BOOLEAN Enable)
114 {
115 NTSTATUS Status;
116 IO_STATUS_BLOCK Iosb;
117
118 Status = InbvCheckBootVid();
119 if (!NT_SUCCESS(Status))
120 {
121 return;
122 }
123
124 if (Enable)
125 {
126 /* Notify the hal we will acquire the display. */
127 HalAcquireDisplayOwnership(InbvResetDisplayParameters);
128
129 Status = ZwDeviceIoControlFile(BootVidDevice,
130 NULL,
131 NULL,
132 NULL,
133 &Iosb,
134 IOCTL_BOOTVID_INITIALIZE,
135 NULL,
136 0,
137 &BootVidFunctionTable,
138 sizeof(BootVidFunctionTable));
139 if (!NT_SUCCESS(Status))
140 {
141 KEBUGCHECK(0);
142 }
143 BootVidDriverInstalled = TRUE;
144 CHECKPOINT;
145 }
146 else
147 {
148 Status = ZwDeviceIoControlFile(BootVidDevice,
149 NULL,
150 NULL,
151 NULL,
152 &Iosb,
153 IOCTL_BOOTVID_CLEANUP,
154 NULL,
155 0,
156 NULL,
157 0);
158 if (!NT_SUCCESS(Status))
159 {
160 KEBUGCHECK(0);
161 }
162 BootVidDriverInstalled = FALSE;
163 /* Notify the hal we have released the display. */
164 HalReleaseDisplayOwnership();
165 }
166
167 ZwClose(BootVidDevice);
168 BootVidDevice = NULL;
169 }
170
171
172 BOOLEAN
173 STDCALL
174 InbvEnableDisplayString(IN BOOLEAN Enable)
175 {
176 return FALSE;
177 }
178
179
180 VOID
181 STDCALL
182 InbvInstallDisplayStringFilter(IN PVOID Unknown)
183 {
184 }
185
186
187 BOOLEAN
188 STDCALL
189 InbvIsBootDriverInstalled(VOID)
190 {
191 return(BootVidDriverInstalled);
192 }
193
194
195 VOID
196 STDCALL
197 InbvNotifyDisplayOwnershipLost(IN PVOID Callback)
198 {
199 }
200
201
202 BOOLEAN
203 STDCALL
204 InbvResetDisplay(VOID)
205 {
206 if (!BootVidDriverInstalled)
207 {
208 return(FALSE);
209 }
210 return(BootVidFunctionTable.ResetDisplay());
211 }
212
213
214 VOID
215 STDCALL
216 InbvSetScrollRegion(IN ULONG Left,
217 IN ULONG Top,
218 IN ULONG Width,
219 IN ULONG Height)
220 {
221 }
222
223
224 VOID
225 STDCALL
226 InbvSetTextColor(IN ULONG Color)
227 {
228 }
229
230
231 VOID
232 STDCALL
233 InbvSolidColorFill(IN ULONG Left,
234 IN ULONG Top,
235 IN ULONG Width,
236 IN ULONG Height,
237 IN ULONG Color)
238 {
239 }
240
241 NTSTATUS
242 STDCALL
243 NtDisplayString(IN PUNICODE_STRING DisplayString)
244 {
245 OEM_STRING OemString;
246
247 RtlUnicodeStringToOemString(&OemString, DisplayString, TRUE);
248 HalDisplayString(OemString.Buffer);
249 RtlFreeOemString(&OemString);
250
251 return STATUS_SUCCESS;
252 }