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