update for HEAD-2003091401
[reactos.git] / 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  * 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 }