]> git.proxmox.com Git - mirror_edk2.git/blob - Nt32Pkg/WinNtBlockIoDxe/WinNtBlockIo.h
BaseTools/BinToPcd: Fix Python 2.7.x compatibility issue
[mirror_edk2.git] / Nt32Pkg / WinNtBlockIoDxe / WinNtBlockIo.h
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 WinNtBlockIo.h
15
16 Abstract:
17
18 Produce block IO abstractions for real devices on your PC using Win32 APIs.
19 The configuration of what devices to mount or emulate comes from NT
20 environment variables. The variables must be visible to the Microsoft*
21 Developer Studio for them to work.
22
23 * Other names and brands may be claimed as the property of others.
24
25 **/
26
27 #ifndef _WIN_NT_BLOCK_IO_H_
28 #define _WIN_NT_BLOCK_IO_H_
29
30 #include <Uefi.h>
31 #include <WinNtDxe.h>
32 #include <Protocol/WinNtThunk.h>
33 #include <Protocol/WinNtIo.h>
34 #include <Protocol/BlockIo.h>
35 #include <Protocol/ComponentName.h>
36 #include <Protocol/DriverBinding.h>
37 //
38 // The Library classes this module consumes
39 //
40 #include <Library/DebugLib.h>
41 #include <Library/BaseLib.h>
42 #include <Library/UefiDriverEntryPoint.h>
43 #include <Library/UefiLib.h>
44 #include <Library/BaseMemoryLib.h>
45 #include <Library/UefiBootServicesTableLib.h>
46 #include <Library/MemoryAllocationLib.h>
47
48 #define FILENAME_BUFFER_SIZE 80
49
50 //
51 // Language supported for driverconfiguration protocol
52 //
53 #define LANGUAGESUPPORTED "eng"
54
55 typedef enum {
56 EfiWinNtVirtualDisks,
57 EfiWinNtPhysicalDisks,
58 EifWinNtMaxTypeDisks
59 } WIN_NT_RAW_DISK_DEVICE_TYPE;
60
61 #define WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE SIGNATURE_32 ('N', 'T', 'b', 'k')
62 typedef struct {
63 UINTN Signature;
64
65 EFI_LOCK Lock;
66
67 CHAR16 Filename[FILENAME_BUFFER_SIZE];
68 UINTN ReadMode;
69 UINTN ShareMode;
70 UINTN OpenMode;
71
72 HANDLE NtHandle;
73 WIN_NT_RAW_DISK_DEVICE_TYPE DeviceType;
74
75 UINT64 LastBlock;
76 UINTN BlockSize;
77 UINT64 NumberOfBlocks;
78
79 EFI_HANDLE EfiHandle;
80 EFI_BLOCK_IO_PROTOCOL BlockIo;
81 EFI_BLOCK_IO_MEDIA Media;
82
83 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
84
85 EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;
86
87 } WIN_NT_BLOCK_IO_PRIVATE;
88
89 #define WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS(a) \
90 CR(a, WIN_NT_BLOCK_IO_PRIVATE, BlockIo, WIN_NT_BLOCK_IO_PRIVATE_SIGNATURE)
91
92 #define LIST_BUFFER_SIZE 512
93
94 //
95 // Block I/O Global Variables
96 //
97 extern EFI_DRIVER_BINDING_PROTOCOL gWinNtBlockIoDriverBinding;
98 extern EFI_COMPONENT_NAME_PROTOCOL gWinNtBlockIoComponentName;
99 extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtBlockIoComponentName2;
100 extern EFI_DRIVER_CONFIGURATION_PROTOCOL gWinNtBlockIoDriverConfiguration;
101 extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL gWinNtBlockIoDriverDiagnostics;
102 extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gWinNtBlockIoDriverDiagnostics2;
103
104 //
105 // EFI Driver Binding Functions
106 //
107 EFI_STATUS
108 EFIAPI
109 WinNtBlockIoDriverBindingSupported (
110 IN EFI_DRIVER_BINDING_PROTOCOL *This,
111 IN EFI_HANDLE Handle,
112 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
113 )
114 /*++
115
116 Routine Description:
117
118 TODO: Add function description
119
120 Arguments:
121
122 This - TODO: add argument description
123 Handle - TODO: add argument description
124 RemainingDevicePath - TODO: add argument description
125
126 Returns:
127
128 TODO: add return values
129
130 --*/
131 ;
132
133 EFI_STATUS
134 EFIAPI
135 WinNtBlockIoDriverBindingStart (
136 IN EFI_DRIVER_BINDING_PROTOCOL *This,
137 IN EFI_HANDLE Handle,
138 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
139 )
140 /*++
141
142 Routine Description:
143
144 TODO: Add function description
145
146 Arguments:
147
148 This - TODO: add argument description
149 Handle - TODO: add argument description
150 RemainingDevicePath - TODO: add argument description
151
152 Returns:
153
154 TODO: add return values
155
156 --*/
157 ;
158
159 EFI_STATUS
160 EFIAPI
161 WinNtBlockIoDriverBindingStop (
162 IN EFI_DRIVER_BINDING_PROTOCOL *This,
163 IN EFI_HANDLE Handle,
164 IN UINTN NumberOfChildren,
165 IN EFI_HANDLE *ChildHandleBuffer
166 )
167 /*++
168
169 Routine Description:
170
171 TODO: Add function description
172
173 Arguments:
174
175 This - TODO: add argument description
176 Handle - TODO: add argument description
177 NumberOfChildren - TODO: add argument description
178 ChildHandleBuffer - TODO: add argument description
179
180 Returns:
181
182 TODO: add return values
183
184 --*/
185 ;
186
187 //
188 // Block IO protocol member functions
189 //
190 EFI_STATUS
191 EFIAPI
192 WinNtBlockIoReadBlocks (
193 IN EFI_BLOCK_IO_PROTOCOL *This,
194 IN UINT32 MediaId,
195 IN EFI_LBA Lba,
196 IN UINTN BufferSize,
197 OUT VOID *Buffer
198 )
199 /*++
200
201 Routine Description:
202
203 TODO: Add function description
204
205 Arguments:
206
207 This - TODO: add argument description
208 MediaId - TODO: add argument description
209 Lba - TODO: add argument description
210 BufferSize - TODO: add argument description
211 Buffer - TODO: add argument description
212
213 Returns:
214
215 TODO: add return values
216
217 --*/
218 ;
219
220 EFI_STATUS
221 EFIAPI
222 WinNtBlockIoWriteBlocks (
223 IN EFI_BLOCK_IO_PROTOCOL *This,
224 IN UINT32 MediaId,
225 IN EFI_LBA Lba,
226 IN UINTN BufferSize,
227 IN VOID *Buffer
228 )
229 /*++
230
231 Routine Description:
232
233 TODO: Add function description
234
235 Arguments:
236
237 This - TODO: add argument description
238 MediaId - TODO: add argument description
239 Lba - TODO: add argument description
240 BufferSize - TODO: add argument description
241 Buffer - TODO: add argument description
242
243 Returns:
244
245 TODO: add return values
246
247 --*/
248 ;
249
250 EFI_STATUS
251 EFIAPI
252 WinNtBlockIoFlushBlocks (
253 IN EFI_BLOCK_IO_PROTOCOL *This
254 )
255 /*++
256
257 Routine Description:
258
259 TODO: Add function description
260
261 Arguments:
262
263 This - TODO: add argument description
264
265 Returns:
266
267 TODO: add return values
268
269 --*/
270 ;
271
272 EFI_STATUS
273 EFIAPI
274 WinNtBlockIoResetBlock (
275 IN EFI_BLOCK_IO_PROTOCOL *This,
276 IN BOOLEAN ExtendedVerification
277 )
278 /*++
279
280 Routine Description:
281
282 TODO: Add function description
283
284 Arguments:
285
286 This - TODO: add argument description
287 ExtendedVerification - TODO: add argument description
288
289 Returns:
290
291 TODO: add return values
292
293 --*/
294 ;
295
296 //
297 // Private Worker functions
298 //
299 EFI_STATUS
300 WinNtBlockIoCreateMapping (
301 IN EFI_WIN_NT_IO_PROTOCOL *WinNtIo,
302 IN EFI_HANDLE EfiDeviceHandle,
303 IN CHAR16 *Filename,
304 IN BOOLEAN ReadOnly,
305 IN BOOLEAN RemovableMedia,
306 IN UINTN NumberOfBlocks,
307 IN UINTN BlockSize,
308 IN WIN_NT_RAW_DISK_DEVICE_TYPE DeviceType
309 )
310 /*++
311
312 Routine Description:
313
314 TODO: Add function description
315
316 Arguments:
317
318 WinNtIo - TODO: add argument description
319 EfiDeviceHandle - TODO: add argument description
320 Filename - TODO: add argument description
321 ReadOnly - TODO: add argument description
322 RemovableMedia - TODO: add argument description
323 NumberOfBlocks - TODO: add argument description
324 BlockSize - TODO: add argument description
325 DeviceType - TODO: add argument description
326
327 Returns:
328
329 TODO: add return values
330
331 --*/
332 ;
333
334 EFI_STATUS
335 WinNtBlockIoReadWriteCommon (
336 IN WIN_NT_BLOCK_IO_PRIVATE *Private,
337 IN UINT32 MediaId,
338 IN EFI_LBA Lba,
339 IN UINTN BufferSize,
340 IN VOID *Buffer,
341 IN CHAR8 *CallerName
342 )
343 /*++
344
345 Routine Description:
346
347 TODO: Add function description
348
349 Arguments:
350
351 Private - TODO: add argument description
352 MediaId - TODO: add argument description
353 Lba - TODO: add argument description
354 BufferSize - TODO: add argument description
355 Buffer - TODO: add argument description
356 CallerName - TODO: add argument description
357
358 Returns:
359
360 TODO: add return values
361
362 --*/
363 ;
364
365 EFI_STATUS
366 WinNtBlockIoError (
367 IN WIN_NT_BLOCK_IO_PRIVATE *Private
368 )
369 /*++
370
371 Routine Description:
372
373 TODO: Add function description
374
375 Arguments:
376
377 Private - TODO: add argument description
378
379 Returns:
380
381 TODO: add return values
382
383 --*/
384 ;
385
386 EFI_STATUS
387 WinNtBlockIoOpenDevice (
388 WIN_NT_BLOCK_IO_PRIVATE *Private
389 )
390 /*++
391
392 Routine Description:
393
394 TODO: Add function description
395
396 Arguments:
397
398 Private - TODO: add argument description
399
400 Returns:
401
402 TODO: add return values
403
404 --*/
405 ;
406
407 CHAR16 *
408 GetNextElementPastTerminator (
409 IN CHAR16 *EnvironmentVariable,
410 IN CHAR16 Terminator
411 )
412 /*++
413
414 Routine Description:
415
416 TODO: Add function description
417
418 Arguments:
419
420 EnvironmentVariable - TODO: add argument description
421 Terminator - TODO: add argument description
422
423 Returns:
424
425 TODO: add return values
426
427 --*/
428 ;
429
430
431
432 EFI_STATUS
433 SetFilePointer64 (
434 IN WIN_NT_BLOCK_IO_PRIVATE *Private,
435 IN INT64 DistanceToMove,
436 OUT UINT64 *NewFilePointer,
437 IN DWORD MoveMethod
438 )
439 /*++
440
441 Routine Description:
442
443 TODO: Add function description
444
445 Arguments:
446
447 Private - TODO: add argument description
448 DistanceToMove - TODO: add argument description
449 NewFilePointer - TODO: add argument description
450 MoveMethod - TODO: add argument description
451
452 Returns:
453
454 TODO: add return values
455
456 --*/
457 ;
458
459 UINTN
460 Atoi (
461 CHAR16 *String
462 )
463 /*++
464
465 Routine Description:
466
467 TODO: Add function description
468
469 Arguments:
470
471 String - TODO: add argument description
472
473 Returns:
474
475 TODO: add return values
476
477 --*/
478 ;
479
480 #endif