git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10436 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			324 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			324 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/**@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
 |