/**@file Copyright (c) 2006, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent 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 ixed - Fixed disk like a hard drive. emovable - Removable media like a floppy or CD-ROM. Read nly - Write protected device. Read rite - Read write device. - Decimal number of blocks a device supports. - 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 = ;;[!...] EFI_WIN_NT_PHYSICAL_DISKS = :;;[!...] 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 = [!...] 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 = 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 = [!...] 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 = [!...] Declaring two serial ports on COM1 and COM2 would look like: Example : EFI_WIN_NT_SERIAL_PORT=COM1!COM2 EFI_WIN_NT_PASS_THROUGH = ;;; 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 #include // // The protocols, PPI and GUID defintions for this module // #include #include #include #include #include // // The Library classes this module consumes // #include #include #include #include #include #include #include #include #include // // 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