5298d61d5a1267ea108b4157e0c6d2955f610fe0
[reactos.git] / reactos / ntoskrnl / inbv / inbv.c
1 /* $Id: inbv.c,v 1.5 2003/12/30 18:52:03 fireball Exp $
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 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * UPDATE HISTORY:
9 * 12-07-2003 CSH Created
10 */
11
12 /* INCLUDES ******************************************************************/
13
14 #include <roskrnl.h>
15 #include <ntos/bootvid.h>
16 #include <ddk/ntbootvid.h>
17 #include <rosrtl/string.h>
18
19 #define NDEBUG
20 #include <internal/debug.h>
21
22
23 /* GLOBALS *******************************************************************/
24
25 /* DATA **********************************************************************/
26
27 static HANDLE BootVidDevice = NULL;
28 static BOOL BootVidDriverInstalled = FALSE;
29 static NTBOOTVID_FUNCTION_TABLE BootVidFunctionTable;
30
31 /* FUNCTIONS *****************************************************************/
32
33 NTSTATUS
34 STATIC
35 InbvCheckBootVid(VOID)
36 {
37 IO_STATUS_BLOCK Iosb;
38
39 if (BootVidDevice == NULL)
40 {
41 NTSTATUS Status;
42 OBJECT_ATTRIBUTES ObjectAttributes;
43 UNICODE_STRING BootVidName;
44
45 RtlRosInitUnicodeStringFromLiteral(&BootVidName, L"\\Device\\BootVid");
46 InitializeObjectAttributes(&ObjectAttributes,
47 &BootVidName,
48 0,
49 NULL,
50 NULL);
51 Status = ZwOpenFile(&BootVidDevice,
52 FILE_ALL_ACCESS,
53 &ObjectAttributes,
54 &Iosb,
55 0,
56 0);
57 if (!NT_SUCCESS(Status))
58 {
59 return(Status);
60 }
61 }
62 return(STATUS_SUCCESS);
63 }
64
65 VOID
66 STDCALL
67 InbvAcquireDisplayOwnership(VOID)
68 {
69 }
70
71
72 BOOLEAN
73 STDCALL
74 InbvCheckDisplayOwnership(VOID)
75 {
76 return FALSE;
77 }
78
79
80 BOOLEAN
81 STDCALL
82 InbvDisplayString(IN PCHAR String)
83 {
84 return FALSE;
85 }
86
87 BOOLEAN
88 STDCALL
89 InbvResetDisplayParameters(ULONG SizeX, ULONG SizeY)
90 {
91 return(InbvResetDisplay());
92 }
93
94 VOID
95 STDCALL INIT_FUNCTION
96 InbvEnableBootDriver(IN BOOLEAN Enable)
97 {
98 NTSTATUS Status;
99 IO_STATUS_BLOCK Iosb;
100
101 Status = InbvCheckBootVid();
102 if (!NT_SUCCESS(Status))
103 {
104 return;
105 }
106
107 if (Enable)
108 {
109 Status = NtDeviceIoControlFile(BootVidDevice,
110 NULL,
111 NULL,
112 NULL,
113 &Iosb,
114 IOCTL_BOOTVID_INITIALIZE,
115 NULL,
116 0,
117 &BootVidFunctionTable,
118 sizeof(BootVidFunctionTable));
119 if (!NT_SUCCESS(Status))
120 {
121 KeBugCheck(0);
122 }
123 BootVidDriverInstalled = TRUE;
124 /* Notify the hal we have acquired the display. */
125 CHECKPOINT;
126 HalAcquireDisplayOwnership(InbvResetDisplayParameters);
127 }
128 else
129 {
130 Status = NtDeviceIoControlFile(BootVidDevice,
131 NULL,
132 NULL,
133 NULL,
134 &Iosb,
135 IOCTL_BOOTVID_CLEANUP,
136 NULL,
137 0,
138 NULL,
139 0);
140 if (!NT_SUCCESS(Status))
141 {
142 KeBugCheck(0);
143 }
144 BootVidDriverInstalled = FALSE;
145 /* Notify the hal we have released the display. */
146 HalReleaseDisplayOwnership();
147
148 NtClose(BootVidDevice);
149 BootVidDevice = NULL;
150 }
151 }
152
153 BOOLEAN
154 STDCALL
155 InbvEnableDisplayString(IN BOOLEAN Enable)
156 {
157 return FALSE;
158 }
159
160
161 VOID
162 STDCALL
163 InbvInstallDisplayStringFilter(IN PVOID Unknown)
164 {
165 }
166
167
168 BOOLEAN
169 STDCALL
170 InbvIsBootDriverInstalled(VOID)
171 {
172 return(BootVidDriverInstalled);
173 }
174
175
176 VOID
177 STDCALL
178 InbvNotifyDisplayOwnershipLost(IN PVOID Callback)
179 {
180 }
181
182
183 BOOLEAN
184 STDCALL
185 InbvResetDisplay(VOID)
186 {
187 if (!BootVidDriverInstalled)
188 {
189 return(FALSE);
190 }
191 return(BootVidFunctionTable.ResetDisplay());
192 }
193
194
195 VOID
196 STDCALL
197 InbvSetScrollRegion(IN ULONG Left,
198 IN ULONG Top,
199 IN ULONG Width,
200 IN ULONG Height)
201 {
202 }
203
204
205 VOID
206 STDCALL
207 InbvSetTextColor(IN ULONG Color)
208 {
209 }
210
211
212 VOID
213 STDCALL
214 InbvSolidColorFill(IN ULONG Left,
215 IN ULONG Top,
216 IN ULONG Width,
217 IN ULONG Height,
218 IN ULONG Color)
219 {
220 }