Home | History | Annotate | Download | only in WinNtBlockIoDxe
      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
    481