/**@file | |
Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
Module Name: | |
WinNtBusDriver.h | |
Abstract: | |
This following section documents the envirnoment variables for the Win NT | |
build. These variables are used to define the (virtual) hardware | |
configuration of the NT environment | |
A ! can be used to seperate multiple instances in a variable. Each | |
instance represents a seperate hardware device. | |
EFI_WIN_NT_PHYSICAL_DISKS - maps to drives on your system | |
EFI_WIN_NT_VIRTUAL_DISKS - maps to a device emulated by a file | |
EFI_WIN_NT_FILE_SYSTEM - mouts a directory as a file system | |
EFI_WIN_NT_CONSOLE - make a logical comand line window (only one!) | |
EFI_WIN_NT_GOP - Builds GOP Windows of Width and Height | |
EFI_WIN_NT_SERIAL_PORT - maps physical serial ports | |
EFI_WIN_NT_PASS_THRU - associates a device with our PCI support | |
<F>ixed - Fixed disk like a hard drive. | |
<R>emovable - Removable media like a floppy or CD-ROM. | |
Read <O>nly - Write protected device. | |
Read <W>rite - Read write device. | |
<block count> - Decimal number of blocks a device supports. | |
<block size> - Decimal number of bytes per block. | |
NT envirnonment variable contents. '<' and '>' are not part of the variable, | |
they are just used to make this help more readable. There should be no | |
spaces between the ';'. Extra spaces will break the variable. A '!' is | |
used to seperate multiple devices in a variable. | |
EFI_WIN_NT_VIRTUAL_DISKS = | |
<F | R><O | W>;<block count>;<block size>[!...] | |
EFI_WIN_NT_PHYSICAL_DISKS = | |
<drive letter>:<F | R><O | W>;<block count>;<block size>[!...] | |
Virtual Disks: These devices use a file to emulate a hard disk or removable | |
media device. | |
Thus a 20 MB emulated hard drive would look like: | |
EFI_WIN_NT_VIRTUAL_DISKS=FW;40960;512 | |
A 1.44MB emulated floppy with a block size of 1024 would look like: | |
EFI_WIN_NT_VIRTUAL_DISKS=RW;1440;1024 | |
Physical Disks: These devices use NT to open a real device in your system | |
Thus a 120 MB floppy would look like: | |
EFI_WIN_NT_PHYSICAL_DISKS=B:RW;245760;512 | |
Thus a standard CD-ROM floppy would look like: | |
EFI_WIN_NT_PHYSICAL_DISKS=Z:RO;307200;2048 | |
EFI_WIN_NT_FILE_SYSTEM = | |
<directory path>[!...] | |
Mounting the two directories C:\FOO and C:\BAR would look like: | |
EFI_WIN_NT_FILE_SYSTEM=c:\foo!c:\bar | |
EFI_WIN_NT_CONSOLE = | |
<window title> | |
Declaring a text console window with the title "My EFI Console" woild look like: | |
EFI_WIN_NT_CONSOLE=My EFI Console | |
EFI_WIN_NT_GOP = | |
<width> <height>[!...] | |
Declaring a two GOP windows with resolutions of 800x600 and 1024x768 would look like: | |
Example : EFI_WIN_NT_GOP=800 600!1024 768 | |
EFI_WIN_NT_SERIAL_PORT = | |
<port name>[!...] | |
Declaring two serial ports on COM1 and COM2 would look like: | |
Example : EFI_WIN_NT_SERIAL_PORT=COM1!COM2 | |
EFI_WIN_NT_PASS_THROUGH = | |
<BaseAddress>;<Bus#>;<Device#>;<Function#> | |
Declaring a base address of 0xE0000000 (used for PCI Express devices) | |
and having NT32 talk to a device located at bus 0, device 1, function 0: | |
Example : EFI_WIN_NT_PASS_THROUGH=E000000;0;1;0 | |
---*/ | |
#ifndef __NT_BUS_DRIVER_H__ | |
#define __NT_BUS_DRIVER_H__ | |
// | |
// The package level header files this module uses | |
// | |
#include <Uefi.h> | |
#include <WinNtDxe.h> | |
// | |
// The protocols, PPI and GUID defintions for this module | |
// | |
#include <Protocol/WinNtIo.h> | |
#include <Protocol/ComponentName.h> | |
#include <Protocol/WinNtThunk.h> | |
#include <Protocol/DriverBinding.h> | |
#include <Protocol/DevicePath.h> | |
// | |
// The Library classes this module consumes | |
// | |
#include <Library/DebugLib.h> | |
#include <Library/BaseLib.h> | |
#include <Library/UefiDriverEntryPoint.h> | |
#include <Library/UefiLib.h> | |
#include <Library/PcdLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/DevicePathLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
// | |
// WinNt Bus Driver Global Variables | |
// | |
extern EFI_DRIVER_BINDING_PROTOCOL gWinNtBusDriverBinding; | |
extern EFI_COMPONENT_NAME_PROTOCOL gWinNtBusDriverComponentName; | |
extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtBusDriverComponentName2; | |
// | |
// WinNt Bus Controller Structure | |
// | |
#define WIN_NT_BUS_DEVICE_SIGNATURE SIGNATURE_32 ('N', 'T', 'B', 'D') | |
typedef struct { | |
UINT64 Signature; | |
EFI_UNICODE_STRING_TABLE *ControllerNameTable; | |
} WIN_NT_BUS_DEVICE; | |
// | |
// WinNt Child Device Controller Structure | |
// | |
#define WIN_NT_IO_DEVICE_SIGNATURE SIGNATURE_32 ('N', 'T', 'V', 'D') | |
typedef struct { | |
UINT64 Signature; | |
EFI_HANDLE Handle; | |
EFI_WIN_NT_IO_PROTOCOL WinNtIo; | |
EFI_DEVICE_PATH_PROTOCOL *DevicePath; | |
// | |
// Private data about the parent | |
// | |
EFI_HANDLE ControllerHandle; | |
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; | |
EFI_UNICODE_STRING_TABLE *ControllerNameTable; | |
} WIN_NT_IO_DEVICE; | |
#define WIN_NT_IO_DEVICE_FROM_THIS(a) \ | |
CR(a, WIN_NT_IO_DEVICE, WinNtIo, WIN_NT_IO_DEVICE_SIGNATURE) | |
// | |
// This is the largest env variable we can parse | |
// | |
#define MAX_NT_ENVIRNMENT_VARIABLE_LENGTH 512 | |
typedef struct { | |
UINTN Token; | |
EFI_GUID *DevicePathGuid; | |
} NT_PCD_ENTRY; | |
typedef struct { | |
VENDOR_DEVICE_PATH VendorDevicePath; | |
UINT32 Instance; | |
} WIN_NT_VENDOR_DEVICE_PATH_NODE; | |
EFI_STATUS | |
EFIAPI | |
CpuIoInitialize ( | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_SYSTEM_TABLE *SystemTable | |
) | |
/*++ | |
Routine Description: | |
TODO: Add function description | |
Arguments: | |
ImageHandle - TODO: add argument description | |
SystemTable - TODO: add argument description | |
Returns: | |
TODO: add return values | |
**/ | |
; | |
// | |
// Driver Binding Protocol function prototypes | |
// | |
EFI_STATUS | |
EFIAPI | |
WinNtBusDriverBindingSupported ( | |
IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
IN EFI_HANDLE Handle, | |
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath | |
) | |
/*++ | |
Routine Description: | |
TODO: Add function description | |
Arguments: | |
This - TODO: add argument description | |
Handle - TODO: add argument description | |
RemainingDevicePath - TODO: add argument description | |
Returns: | |
TODO: add return values | |
--*/ | |
; | |
EFI_STATUS | |
EFIAPI | |
WinNtBusDriverBindingStart ( | |
IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
IN EFI_HANDLE ParentHandle, | |
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath | |
) | |
/*++ | |
Routine Description: | |
TODO: Add function description | |
Arguments: | |
This - TODO: add argument description | |
ParentHandle - TODO: add argument description | |
RemainingDevicePath - TODO: add argument description | |
Returns: | |
TODO: add return values | |
--*/ | |
; | |
EFI_STATUS | |
EFIAPI | |
WinNtBusDriverBindingStop ( | |
IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
IN EFI_HANDLE Handle, | |
IN UINTN NumberOfChildren, | |
IN EFI_HANDLE *ChildHandleBuffer | |
) | |
/*++ | |
Routine Description: | |
TODO: Add function description | |
Arguments: | |
This - TODO: add argument description | |
Handle - TODO: add argument description | |
NumberOfChildren - TODO: add argument description | |
ChildHandleBuffer - TODO: add argument description | |
Returns: | |
TODO: add return values | |
--*/ | |
; | |
// | |
// WinNt Bus Driver private worker functions | |
// | |
EFI_DEVICE_PATH_PROTOCOL * | |
WinNtBusCreateDevicePath ( | |
IN EFI_DEVICE_PATH_PROTOCOL *RootDevicePath, | |
IN EFI_GUID *Guid, | |
IN UINT16 InstanceNumber | |
) | |
/*++ | |
Routine Description: | |
TODO: Add function description | |
Arguments: | |
RootDevicePath - TODO: add argument description | |
Guid - TODO: add argument description | |
InstanceNumber - TODO: add argument description | |
Returns: | |
TODO: add return values | |
--*/ | |
; | |
#endif |