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