1 /**@file
2 
3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4 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 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  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
324