--- /dev/null
+/*++\r
+\r
+Copyright (c) 2006, Intel Corporation \r
+All rights reserved. This program and the accompanying materials \r
+are licensed and made available under the terms and conditions of the BSD License \r
+which accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Module Name:\r
+\r
+ UnixBusDriver.h\r
+\r
+Abstract:\r
+\r
+This following section documents the PCD for the Unix \r
+build. These variables are used to define the (virtual) hardware \r
+configuration of the Unix environment\r
+\r
+A ! can be used to seperate multiple instances in a variable. Each \r
+instance represents a seperate hardware device. \r
+\r
+EFI_UNIX_PHYSICAL_DISKS - maps to drives on your system\r
+EFI_UNIX_VIRTUAL_DISKS - maps to a device emulated by a file\r
+EFI_UNIX_FILE_SYSTEM - mouts a directory as a file system\r
+EFI_UNIX_CONSOLE - make a logical comand line window (only one!)\r
+EFI_UNIX_UGA - Builds UGA Windows of Width and Height\r
+EFI_UNIX_SERIAL_PORT - maps physical serial ports\r
+EFI_UNIX_PASS_THRU - associates a device with our PCI support\r
+\r
+ <F>ixed - Fixed disk like a hard drive.\r
+ <R>emovable - Removable media like a floppy or CD-ROM.\r
+ Read <O>nly - Write protected device.\r
+ Read <W>rite - Read write device.\r
+ <block count> - Decimal number of blocks a device supports.\r
+ <block size> - Decimal number of bytes per block.\r
+\r
+ NT envirnonment variable contents. '<' and '>' are not part of the variable, \r
+ they are just used to make this help more readable. There should be no \r
+ spaces between the ';'. Extra spaces will break the variable. A '!' is \r
+ used to seperate multiple devices in a variable.\r
+\r
+ EFI_UNIX_VIRTUAL_DISKS = \r
+ <F | R><O | W>;<block count>;<block size>[!...]\r
+\r
+ EFI_UNIX_PHYSICAL_DISKS =\r
+ <drive letter>:<F | R><O | W>;<block count>;<block size>[!...]\r
+\r
+ Virtual Disks: These devices use a file to emulate a hard disk or removable\r
+ media device. \r
+ \r
+ Thus a 20 MB emulated hard drive would look like:\r
+ EFI_UNIX_VIRTUAL_DISKS=FW;40960;512\r
+\r
+ A 1.44MB emulated floppy with a block size of 1024 would look like:\r
+ EFI_UNIX_VIRTUAL_DISKS=RW;1440;1024\r
+\r
+ Physical Disks: These devices use NT to open a real device in your system\r
+\r
+ Thus a 120 MB floppy would look like:\r
+ EFI_UNIX_PHYSICAL_DISKS=B:RW;245760;512\r
+\r
+ Thus a standard CD-ROM floppy would look like:\r
+ EFI_UNIX_PHYSICAL_DISKS=Z:RO;307200;2048\r
+\r
+ EFI_UNIX_FILE_SYSTEM = \r
+ <directory path>[!...]\r
+\r
+ Mounting the two directories C:\FOO and C:\BAR would look like:\r
+ EFI_UNIX_FILE_SYSTEM=c:\foo!c:\bar\r
+\r
+ EFI_UNIX_CONSOLE = \r
+ <window title>\r
+\r
+ Declaring a text console window with the title "My EFI Console" woild look like:\r
+ EFI_UNIX_CONSOLE=My EFI Console\r
+\r
+ EFI_UNIX_UGA = \r
+ <width> <height>[!...]\r
+\r
+ Declaring a two UGA windows with resolutions of 800x600 and 1024x768 would look like:\r
+ Example : EFI_UNIX_UGA=800 600!1024 768\r
+\r
+ EFI_UNIX_SERIAL_PORT = \r
+ <port name>[!...]\r
+\r
+ Declaring two serial ports on COM1 and COM2 would look like:\r
+ Example : EFI_UNIX_SERIAL_PORT=COM1!COM2\r
+\r
+ EFI_UNIX_PASS_THROUGH =\r
+ <BaseAddress>;<Bus#>;<Device#>;<Function#>\r
+\r
+ Declaring a base address of 0xE0000000 (used for PCI Express devices)\r
+ and having NT32 talk to a device located at bus 0, device 1, function 0:\r
+ Example : EFI_UNIX_PASS_THROUGH=E000000;0;1;0\r
+\r
+---*/\r
+\r
+#ifndef __UNIX_BUS_DRIVER_H__\r
+#define __UNIX_BUS_DRIVER_H__\r
+\r
+\r
+\r
+//\r
+// Unix Bus Driver Global Variables\r
+//\r
+extern EFI_DRIVER_BINDING_PROTOCOL gUnixBusDriverBinding;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gUnixBusDriverComponentName;\r
+\r
+//\r
+// Unix Bus Controller Structure\r
+//\r
+#define UNIX_BUS_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('L', 'X', 'B', 'D')\r
+\r
+typedef struct {\r
+ UINT64 Signature;\r
+ EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
+} UNIX_BUS_DEVICE;\r
+\r
+//\r
+// Unix Child Device Controller Structure\r
+//\r
+#define UNIX_IO_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('L', 'X', 'V', 'D')\r
+\r
+typedef struct {\r
+ UINT64 Signature;\r
+ EFI_HANDLE Handle;\r
+ EFI_UNIX_IO_PROTOCOL UnixIo;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+\r
+ //\r
+ // Private data about the parent\r
+ //\r
+ EFI_HANDLE ControllerHandle;\r
+ EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
+\r
+ EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
+\r
+} UNIX_IO_DEVICE;\r
+\r
+#define UNIX_IO_DEVICE_FROM_THIS(a) \\r
+ CR(a, UNIX_IO_DEVICE, UnixIo, UNIX_IO_DEVICE_SIGNATURE)\r
+\r
+//\r
+// This is the largest env variable we can parse\r
+//\r
+#define MAX_UNIX_ENVIRNMENT_VARIABLE_LENGTH 512\r
+\r
+typedef struct {\r
+ UINTN Token;\r
+ EFI_GUID *DevicePathGuid;\r
+} UNIX_PCD_ENTRY;\r
+\r
+typedef struct {\r
+ VENDOR_DEVICE_PATH VendorDevicePath;\r
+ UINT32 Instance;\r
+} UNIX_VENDOR_DEVICE_PATH_NODE;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+CpuIoInitialize (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ ImageHandle - TODO: add argument description\r
+ SystemTable - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+//\r
+// Driver Binding Protocol function prototypes\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+UnixBusDriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Handle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Handle - TODO: add argument description\r
+ RemainingDevicePath - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixBusDriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ParentHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ ParentHandle - TODO: add argument description\r
+ RemainingDevicePath - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+UnixBusDriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Handle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ This - TODO: add argument description\r
+ Handle - TODO: add argument description\r
+ NumberOfChildren - TODO: add argument description\r
+ ChildHandleBuffer - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+//\r
+// Unix Bus Driver private worker functions\r
+//\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+UnixBusCreateDevicePath (\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RootDevicePath,\r
+ IN EFI_GUID *Guid,\r
+ IN UINT16 InstanceNumber\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ TODO: Add function description\r
+\r
+Arguments:\r
+\r
+ RootDevicePath - TODO: add argument description\r
+ Guid - TODO: add argument description\r
+ InstanceNumber - TODO: add argument description\r
+\r
+Returns:\r
+\r
+ TODO: add return values\r
+\r
+--*/\r
+;\r
+\r
+\r
+#endif\r