Merger trackers #7807 and #8372.
[mirror_edk2.git] / Nt32Pkg / WinNtBusDriverDxe / WinNtBusDriver.h
1 /*++
2
3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 WinNtBusDriver.h
15
16 Abstract:
17
18 This following section documents the envirnoment variables for the Win NT
19 build. These variables are used to define the (virtual) hardware
20 configuration of the NT environment
21
22 A ! can be used to seperate multiple instances in a variable. Each
23 instance represents a seperate hardware device.
24
25 EFI_WIN_NT_PHYSICAL_DISKS - maps to drives on your system
26 EFI_WIN_NT_VIRTUAL_DISKS - maps to a device emulated by a file
27 EFI_WIN_NT_FILE_SYSTEM - mouts a directory as a file system
28 EFI_WIN_NT_CONSOLE - make a logical comand line window (only one!)
29 EFI_WIN_NT_GOP - Builds GOP Windows of Width and Height
30 EFI_WIN_NT_SERIAL_PORT - maps physical serial ports
31 EFI_WIN_NT_PASS_THRU - associates a device with our PCI support
32
33 <F>ixed - Fixed disk like a hard drive.
34 <R>emovable - Removable media like a floppy or CD-ROM.
35 Read <O>nly - Write protected device.
36 Read <W>rite - Read write device.
37 <block count> - Decimal number of blocks a device supports.
38 <block size> - Decimal number of bytes per block.
39
40 NT envirnonment variable contents. '<' and '>' are not part of the variable,
41 they are just used to make this help more readable. There should be no
42 spaces between the ';'. Extra spaces will break the variable. A '!' is
43 used to seperate multiple devices in a variable.
44
45 EFI_WIN_NT_VIRTUAL_DISKS =
46 <F | R><O | W>;<block count>;<block size>[!...]
47
48 EFI_WIN_NT_PHYSICAL_DISKS =
49 <drive letter>:<F | R><O | W>;<block count>;<block size>[!...]
50
51 Virtual Disks: These devices use a file to emulate a hard disk or removable
52 media device.
53
54 Thus a 20 MB emulated hard drive would look like:
55 EFI_WIN_NT_VIRTUAL_DISKS=FW;40960;512
56
57 A 1.44MB emulated floppy with a block size of 1024 would look like:
58 EFI_WIN_NT_VIRTUAL_DISKS=RW;1440;1024
59
60 Physical Disks: These devices use NT to open a real device in your system
61
62 Thus a 120 MB floppy would look like:
63 EFI_WIN_NT_PHYSICAL_DISKS=B:RW;245760;512
64
65 Thus a standard CD-ROM floppy would look like:
66 EFI_WIN_NT_PHYSICAL_DISKS=Z:RO;307200;2048
67
68 EFI_WIN_NT_FILE_SYSTEM =
69 <directory path>[!...]
70
71 Mounting the two directories C:\FOO and C:\BAR would look like:
72 EFI_WIN_NT_FILE_SYSTEM=c:\foo!c:\bar
73
74 EFI_WIN_NT_CONSOLE =
75 <window title>
76
77 Declaring a text console window with the title "My EFI Console" woild look like:
78 EFI_WIN_NT_CONSOLE=My EFI Console
79
80 EFI_WIN_NT_GOP =
81 <width> <height>[!...]
82
83 Declaring a two GOP windows with resolutions of 800x600 and 1024x768 would look like:
84 Example : EFI_WIN_NT_GOP=800 600!1024 768
85
86 EFI_WIN_NT_SERIAL_PORT =
87 <port name>[!...]
88
89 Declaring two serial ports on COM1 and COM2 would look like:
90 Example : EFI_WIN_NT_SERIAL_PORT=COM1!COM2
91
92 EFI_WIN_NT_PASS_THROUGH =
93 <BaseAddress>;<Bus#>;<Device#>;<Function#>
94
95 Declaring a base address of 0xE0000000 (used for PCI Express devices)
96 and having NT32 talk to a device located at bus 0, device 1, function 0:
97 Example : EFI_WIN_NT_PASS_THROUGH=E000000;0;1;0
98
99 ---*/
100
101 #ifndef __NT_BUS_DRIVER_H__
102 #define __NT_BUS_DRIVER_H__
103
104
105 //
106 // The package level header files this module uses
107 //
108 #include <Uefi.h>
109 #include <WinNtDxe.h>
110 //
111 // The protocols, PPI and GUID defintions for this module
112 //
113 #include <Protocol/WinNtIo.h>
114 #include <Protocol/ComponentName.h>
115 #include <Protocol/WinNtThunk.h>
116 #include <Protocol/DriverBinding.h>
117 #include <Protocol/DevicePath.h>
118 //
119 // The Library classes this module consumes
120 //
121 #include <Library/DebugLib.h>
122 #include <Library/BaseLib.h>
123 #include <Library/UefiDriverEntryPoint.h>
124 #include <Library/UefiLib.h>
125 #include <Library/PcdLib.h>
126 #include <Library/BaseMemoryLib.h>
127 #include <Library/UefiBootServicesTableLib.h>
128 #include <Library/DevicePathLib.h>
129 #include <Library/MemoryAllocationLib.h>
130
131 //
132 // WinNt Bus Driver Global Variables
133 //
134 extern EFI_DRIVER_BINDING_PROTOCOL gWinNtBusDriverBinding;
135 extern EFI_COMPONENT_NAME_PROTOCOL gWinNtBusDriverComponentName;
136 extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtBusDriverComponentName2;
137
138 //
139 // WinNt Bus Controller Structure
140 //
141 #define WIN_NT_BUS_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('N', 'T', 'B', 'D')
142
143 typedef struct {
144 UINT64 Signature;
145 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
146 } WIN_NT_BUS_DEVICE;
147
148 //
149 // WinNt Child Device Controller Structure
150 //
151 #define WIN_NT_IO_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('N', 'T', 'V', 'D')
152
153 typedef struct {
154 UINT64 Signature;
155 EFI_HANDLE Handle;
156 EFI_WIN_NT_IO_PROTOCOL WinNtIo;
157 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
158
159 //
160 // Private data about the parent
161 //
162 EFI_HANDLE ControllerHandle;
163 EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
164
165 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
166
167 } WIN_NT_IO_DEVICE;
168
169 #define WIN_NT_IO_DEVICE_FROM_THIS(a) \
170 CR(a, WIN_NT_IO_DEVICE, WinNtIo, WIN_NT_IO_DEVICE_SIGNATURE)
171
172 //
173 // This is the largest env variable we can parse
174 //
175 #define MAX_NT_ENVIRNMENT_VARIABLE_LENGTH 512
176
177 typedef struct {
178 UINTN Token;
179 EFI_GUID *DevicePathGuid;
180 } NT_PCD_ENTRY;
181
182 typedef struct {
183 VENDOR_DEVICE_PATH VendorDevicePath;
184 UINT32 Instance;
185 } WIN_NT_VENDOR_DEVICE_PATH_NODE;
186
187 EFI_STATUS
188 EFIAPI
189 CpuIoInitialize (
190 IN EFI_HANDLE ImageHandle,
191 IN EFI_SYSTEM_TABLE *SystemTable
192 )
193 /*++
194
195 Routine Description:
196
197 TODO: Add function description
198
199 Arguments:
200
201 ImageHandle - TODO: add argument description
202 SystemTable - TODO: add argument description
203
204 Returns:
205
206 TODO: add return values
207
208 --*/
209 ;
210
211 //
212 // Driver Binding Protocol function prototypes
213 //
214 EFI_STATUS
215 EFIAPI
216 WinNtBusDriverBindingSupported (
217 IN EFI_DRIVER_BINDING_PROTOCOL *This,
218 IN EFI_HANDLE Handle,
219 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
220 )
221 /*++
222
223 Routine Description:
224
225 TODO: Add function description
226
227 Arguments:
228
229 This - TODO: add argument description
230 Handle - TODO: add argument description
231 RemainingDevicePath - TODO: add argument description
232
233 Returns:
234
235 TODO: add return values
236
237 --*/
238 ;
239
240 EFI_STATUS
241 EFIAPI
242 WinNtBusDriverBindingStart (
243 IN EFI_DRIVER_BINDING_PROTOCOL *This,
244 IN EFI_HANDLE ParentHandle,
245 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
246 )
247 /*++
248
249 Routine Description:
250
251 TODO: Add function description
252
253 Arguments:
254
255 This - TODO: add argument description
256 ParentHandle - TODO: add argument description
257 RemainingDevicePath - TODO: add argument description
258
259 Returns:
260
261 TODO: add return values
262
263 --*/
264 ;
265
266 EFI_STATUS
267 EFIAPI
268 WinNtBusDriverBindingStop (
269 IN EFI_DRIVER_BINDING_PROTOCOL *This,
270 IN EFI_HANDLE Handle,
271 IN UINTN NumberOfChildren,
272 IN EFI_HANDLE *ChildHandleBuffer
273 )
274 /*++
275
276 Routine Description:
277
278 TODO: Add function description
279
280 Arguments:
281
282 This - TODO: add argument description
283 Handle - TODO: add argument description
284 NumberOfChildren - TODO: add argument description
285 ChildHandleBuffer - TODO: add argument description
286
287 Returns:
288
289 TODO: add return values
290
291 --*/
292 ;
293
294 //
295 // WinNt Bus Driver private worker functions
296 //
297 EFI_DEVICE_PATH_PROTOCOL *
298 WinNtBusCreateDevicePath (
299 IN EFI_DEVICE_PATH_PROTOCOL *RootDevicePath,
300 IN EFI_GUID *Guid,
301 IN UINT16 InstanceNumber
302 )
303 /*++
304
305 Routine Description:
306
307 TODO: Add function description
308
309 Arguments:
310
311 RootDevicePath - TODO: add argument description
312 Guid - TODO: add argument description
313 InstanceNumber - TODO: add argument description
314
315 Returns:
316
317 TODO: add return values
318
319 --*/
320 ;
321
322
323 #endif