From c9093a06e72ef16d2f3bd7ce0a2b9a172e9d048c Mon Sep 17 00:00:00 2001 From: tgingold Date: Sat, 6 Jan 2007 14:59:06 +0000 Subject: Unix version of EFI emulator git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2182 6f19259b-4bc3-4df7-8a09-765794883524 --- EdkUnixPkg/Include/Common/UnixInclude.h | 32 +++ EdkUnixPkg/Include/FlashLayout.h | 64 +++++ EdkUnixPkg/Include/Library/EdkGenericBdsLib.h | 382 ++++++++++++++++++++++++++ EdkUnixPkg/Include/Library/UnixLib.h | 27 ++ EdkUnixPkg/Include/Ppi/UnixAutoScan.h | 66 +++++ EdkUnixPkg/Include/Ppi/UnixFwh.h | 62 +++++ EdkUnixPkg/Include/Ppi/UnixPeiLoadFile.h | 65 +++++ EdkUnixPkg/Include/Ppi/UnixThunk.h | 56 ++++ EdkUnixPkg/Include/Protocol/UnixIo.h | 132 +++++++++ EdkUnixPkg/Include/Protocol/UnixThunk.h | 187 +++++++++++++ EdkUnixPkg/Include/Protocol/UnixUgaIo.h | 72 +++++ EdkUnixPkg/Include/UnixDxe.h | 36 +++ EdkUnixPkg/Include/UnixPeim.h | 30 ++ 13 files changed, 1211 insertions(+) create mode 100644 EdkUnixPkg/Include/Common/UnixInclude.h create mode 100644 EdkUnixPkg/Include/FlashLayout.h create mode 100644 EdkUnixPkg/Include/Library/EdkGenericBdsLib.h create mode 100644 EdkUnixPkg/Include/Library/UnixLib.h create mode 100644 EdkUnixPkg/Include/Ppi/UnixAutoScan.h create mode 100644 EdkUnixPkg/Include/Ppi/UnixFwh.h create mode 100644 EdkUnixPkg/Include/Ppi/UnixPeiLoadFile.h create mode 100644 EdkUnixPkg/Include/Ppi/UnixThunk.h create mode 100644 EdkUnixPkg/Include/Protocol/UnixIo.h create mode 100644 EdkUnixPkg/Include/Protocol/UnixThunk.h create mode 100644 EdkUnixPkg/Include/Protocol/UnixUgaIo.h create mode 100644 EdkUnixPkg/Include/UnixDxe.h create mode 100644 EdkUnixPkg/Include/UnixPeim.h (limited to 'EdkUnixPkg/Include') diff --git a/EdkUnixPkg/Include/Common/UnixInclude.h b/EdkUnixPkg/Include/Common/UnixInclude.h new file mode 100644 index 0000000000..922964672c --- /dev/null +++ b/EdkUnixPkg/Include/Common/UnixInclude.h @@ -0,0 +1,32 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + UnixInclude.h + +Abstract: + Public include file for the Unix Library + +--*/ + +#ifndef __UNIX_INCLUDE_H__ +#define __UNIX_INCLUDE_H__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif diff --git a/EdkUnixPkg/Include/FlashLayout.h b/EdkUnixPkg/Include/FlashLayout.h new file mode 100644 index 0000000000..1a13f16c50 --- /dev/null +++ b/EdkUnixPkg/Include/FlashLayout.h @@ -0,0 +1,64 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + + FlashLayout.h + +Abstract: + + Platform specific flash layout + + BugBug: We need a better way + +--*/ + +#ifndef __EFI_FLASH_LAYOUT__ +#define __EFI_FLASH_LAYOUT__ + +// +// Firmware Volume Information for Nt32 +// adding one working block before FFS FV, +// and another one for spare block behind FFS FV +// +// +// Note: When block number is changed in .dsc file, +// this value should be changed accordingly!!! +// +#define FIRMWARE_BLOCK_NUMBER 0x28 + +#define EFI_WINNT_FIRMWARE_OFFSET 0x0 +#define EFI_WINNT_FIRMWARE_LENGTH (0x10000 * FIRMWARE_BLOCK_NUMBER) + +#define EFI_WINNT_RUNTIME_UPDATABLE_OFFSET (EFI_WINNT_FIRMWARE_OFFSET + EFI_WINNT_FIRMWARE_LENGTH) + +#define EFI_WINNT_RUNTIME_UPDATABLE_LENGTH 0x10000 + +#define EFI_WINNT_FTW_SPARE_BLOCK_OFFSET (EFI_WINNT_RUNTIME_UPDATABLE_OFFSET + EFI_WINNT_RUNTIME_UPDATABLE_LENGTH) + +#define EFI_WINNT_FTW_SPARE_BLOCK_LENGTH 0x10000 + +#define EFI_WINNT_RUNTIME_UPDATABLE_FV_HEADER_LENGTH 0x48 + +#define EFI_VARIABLE_STORE_OFFSET EFI_WINNT_RUNTIME_UPDATABLE_OFFSET + +#define EFI_VARIABLE_STORE_LENGTH 0x00C000 + +#define EFI_EVENT_LOG_OFFSET (EFI_VARIABLE_STORE_OFFSET + EFI_VARIABLE_STORE_LENGTH) + +#define EFI_EVENT_LOG_LENGTH 0x002000 + +#define EFI_FTW_WORKING_OFFSET (EFI_EVENT_LOG_OFFSET + EFI_EVENT_LOG_LENGTH) + +#define EFI_FTW_WORKING_LENGTH 0x002000 + +#endif + diff --git a/EdkUnixPkg/Include/Library/EdkGenericBdsLib.h b/EdkUnixPkg/Include/Library/EdkGenericBdsLib.h new file mode 100644 index 0000000000..9abda55891 --- /dev/null +++ b/EdkUnixPkg/Include/Library/EdkGenericBdsLib.h @@ -0,0 +1,382 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + + BdsLib.h + +Abstract: + + BDS library definition, include the file and data structure + +--*/ + +#ifndef _BDS_LIB_H_ +#define _BDS_LIB_H_ + +extern EFI_HANDLE mBdsImageHandle; + +// +// Constants which are variable names used to access variables +// +#define VarLegacyDevOrder L"LegacyDevOrder" + +// +// Data structures and defines +// +#define FRONT_PAGE_QUESTION_ID 0x0000 +#define FRONT_PAGE_DATA_WIDTH 0x01 + +// +// ConnectType +// +#define CONSOLE_OUT 0x00000001 +#define STD_ERROR 0x00000002 +#define CONSOLE_IN 0x00000004 +#define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR) + +// +// Load Option Attributes defined in EFI Specification +// +#define LOAD_OPTION_ACTIVE 0x00000001 +#define LOAD_OPTION_FORCE_RECONNECT 0x00000002 +#define IS_LOAD_OPTION_TYPE(_c, _Mask) (BOOLEAN) (((_c) & (_Mask)) != 0) + +// +// Define Maxmim characters that will be accepted +// +#define MAX_CHAR 480 +#define MAX_CHAR_SIZE (MAX_CHAR * 2) + +#define MIN_ALIGNMENT_SIZE 4 +#define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0) + +// +// Define maximum characters for boot option variable "BootXXXX" +// +#define BOOT_OPTION_MAX_CHAR 10 + +// +// This data structure is the part of BDS_CONNECT_ENTRY that we can hard code. +// +#define BDS_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('B', 'd', 'C', 'O') + +typedef struct { + + UINTN Signature; + LIST_ENTRY Link; + + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + + CHAR16 *OptionName; + UINTN OptionNumber; + UINT16 BootCurrent; + UINT32 Attribute; + CHAR16 *Description; + VOID *LoadOptions; + UINT32 LoadOptionsSize; + +} BDS_COMMON_OPTION; + +typedef struct { + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + UINTN ConnectType; +} BDS_CONSOLE_CONNECT_ENTRY; + +// +// Lib Functions +// + +// +// Bds boot relate lib functions +// +EFI_STATUS +BdsLibUpdateBootOrderList ( + IN LIST_ENTRY *BdsOptionList, + IN CHAR16 *VariableName + ); + +VOID +BdsLibBootNext ( + VOID + ); + +EFI_STATUS +BdsLibBootViaBootOption ( + IN BDS_COMMON_OPTION * Option, + IN EFI_DEVICE_PATH_PROTOCOL * DevicePath, + OUT UINTN *ExitDataSize, + OUT CHAR16 **ExitData OPTIONAL + ); + +EFI_STATUS +BdsLibEnumerateAllBootOption ( + IN OUT LIST_ENTRY *BdsBootOptionList + ); + +VOID +BdsLibBuildOptionFromHandle ( + IN EFI_HANDLE Handle, + IN LIST_ENTRY *BdsBootOptionList + ); + +VOID +BdsLibBuildOptionFromShell ( + IN EFI_HANDLE Handle, + IN LIST_ENTRY *BdsBootOptionList + ); + +// +// Bds misc lib functions +// +UINT16 +BdsLibGetTimeout ( + VOID + ); + +EFI_STATUS +BdsLibGetBootMode ( + OUT EFI_BOOT_MODE *BootMode + ); + +VOID +BdsLibLoadDrivers ( + IN LIST_ENTRY *BdsDriverLists + ); + +EFI_STATUS +BdsLibBuildOptionFromVar ( + IN LIST_ENTRY *BdsCommonOptionList, + IN CHAR16 *VariableName + ); + +VOID * +BdsLibGetVariableAndSize ( + IN CHAR16 *Name, + IN EFI_GUID *VendorGuid, + OUT UINTN *VariableSize + ); + +EFI_STATUS +BdsLibOutputStrings ( + IN EFI_SIMPLE_TEXT_OUT_PROTOCOL *ConOut, + ... + ); + +BDS_COMMON_OPTION * +BdsLibVariableToOption ( + IN OUT LIST_ENTRY *BdsCommonOptionList, + IN CHAR16 *VariableName + ); + +EFI_STATUS +BdsLibRegisterNewOption ( + IN LIST_ENTRY *BdsOptionList, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + IN CHAR16 *String, + IN CHAR16 *VariableName + ); + +// +// Bds connect or disconnect driver lib funcion +// +VOID +BdsLibConnectAllDriversToAllControllers ( + VOID + ); + +VOID +BdsLibConnectAll ( + VOID + ); + +EFI_STATUS +BdsLibConnectDevicePath ( + IN EFI_DEVICE_PATH_PROTOCOL *DevicePathToConnect + ); + +EFI_STATUS +BdsLibConnectAllEfi ( + VOID + ); + +EFI_STATUS +BdsLibDisconnectAllEfi ( + VOID + ); + +// +// Bds console relate lib functions +// +VOID +BdsLibConnectAllConsoles ( + VOID + ); + +EFI_STATUS +BdsLibConnectAllDefaultConsoles ( + VOID + ); + +EFI_STATUS +BdsLibUpdateConsoleVariable ( + IN CHAR16 *ConVarName, + IN EFI_DEVICE_PATH_PROTOCOL *CustomizedConDevicePath, + IN EFI_DEVICE_PATH_PROTOCOL *ExclusiveDevicePath + ); + +EFI_STATUS +BdsLibConnectConsoleVariable ( + IN CHAR16 *ConVarName + ); + +// +// Bds device path relate lib functions +// +EFI_DEVICE_PATH_PROTOCOL * +BdsLibUnpackDevicePath ( + IN EFI_DEVICE_PATH_PROTOCOL *DevPath + ); + +BOOLEAN +BdsLibMatchDevicePaths ( + IN EFI_DEVICE_PATH_PROTOCOL *Multi, + IN EFI_DEVICE_PATH_PROTOCOL *Single + ); + +CHAR16 * +DevicePathToStr ( + EFI_DEVICE_PATH_PROTOCOL *DevPath + ); + +VOID * +EfiLibGetVariable ( + IN CHAR16 *Name, + IN EFI_GUID *VendorGuid + ); + +// +// Internal definitions +// +typedef struct { + CHAR16 *str; + UINTN len; + UINTN maxlen; +} POOL_PRINT; + +typedef struct { + UINT8 Type; + UINT8 SubType; + VOID (*Function) (POOL_PRINT *, VOID *); +} DEVICE_PATH_STRING_TABLE; + +// +// Internal functions +// +EFI_STATUS +BdsBootByDiskSignatureAndPartition ( + IN BDS_COMMON_OPTION * Option, + IN HARDDRIVE_DEVICE_PATH * HardDriveDevicePath, + IN UINT32 LoadOptionsSize, + IN VOID *LoadOptions, + OUT UINTN *ExitDataSize, + OUT CHAR16 **ExitData OPTIONAL + ); + +// +// Notes: EFI 64 shadow all option rom +// +#ifdef EFI64 +#define EFI64_SHADOW_ALL_LEGACY_ROM() ShadowAllOptionRom (); +VOID +ShadowAllOptionRom(); +#else +#define EFI64_SHADOW_ALL_LEGACY_ROM() +#endif + +// +// BBS support macros and functions +// +#ifdef EFI32 +#define REFRESH_LEGACY_BOOT_OPTIONS \ + BdsDeleteAllInvalidLegacyBootOptions ();\ + BdsAddNonExistingLegacyBootOptions (); \ + BdsUpdateLegacyDevOrder () +#else +#define REFRESH_LEGACY_BOOT_OPTIONS +#endif + +EFI_STATUS +BdsDeleteAllInvalidLegacyBootOptions ( + VOID + ); + +EFI_STATUS +BdsAddNonExistingLegacyBootOptions ( + VOID + ); + +EFI_STATUS +BdsUpdateLegacyDevOrder ( + VOID + ); + +EFI_STATUS +BdsRefreshBbsTableForBoot ( + IN BDS_COMMON_OPTION *Entry + ); + +EFI_STATUS +BdsDeleteBootOption ( + IN UINTN OptionNumber, + IN OUT UINT16 *BootOrder, + IN OUT UINTN *BootOrderSize + ); + +// +//The interface functions relate with Setup Browser Reset Reminder feature +// +VOID +EnableResetReminderFeature ( + VOID + ); + +VOID +DisableResetReminderFeature ( + VOID + ); + +VOID +EnableResetRequired ( + VOID + ); + +VOID +DisableResetRequired ( + VOID + ); + +BOOLEAN +IsResetReminderFeatureEnable ( + VOID + ); + +BOOLEAN +IsResetRequired ( + VOID + ); + +VOID +SetupResetReminder ( + VOID + ); + +#endif // _BDS_LIB_H_ diff --git a/EdkUnixPkg/Include/Library/UnixLib.h b/EdkUnixPkg/Include/Library/UnixLib.h new file mode 100644 index 0000000000..3ea371af15 --- /dev/null +++ b/EdkUnixPkg/Include/Library/UnixLib.h @@ -0,0 +1,27 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + + UnixLib.h + +Abstract: + + Public include file for the Unix Library + +--*/ + +#ifndef __UNIX_LIB_H__ +#define __UNIX_LIB_H__ + +extern EFI_UNIX_THUNK_PROTOCOL *gUnix; + +#endif diff --git a/EdkUnixPkg/Include/Ppi/UnixAutoScan.h b/EdkUnixPkg/Include/Ppi/UnixAutoScan.h new file mode 100644 index 0000000000..17a4c02b8f --- /dev/null +++ b/EdkUnixPkg/Include/Ppi/UnixAutoScan.h @@ -0,0 +1,66 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + + UnixAutoscan.h + +Abstract: + +Unix Autoscan PPI + +--*/ + +#ifndef __UNIX_PEI_AUTOSCAN_H__ +#define __UNIX_PEI_AUTOSCAN_H__ + +#include + +#define PEI_UNIX_AUTOSCAN_PPI_GUID \ + { \ + 0xf2ed3d14, 0x8985, 0x11db, {0xb0, 0x57, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +typedef +EFI_STATUS +(EFIAPI *PEI_UNIX_AUTOSCAN) ( + IN UINTN Index, + OUT EFI_PHYSICAL_ADDRESS *MemoryBase, + OUT UINT64 *MemorySize + ); + +/*++ + +Routine Description: + This service is called from Index == 0 until it returns EFI_UNSUPPORTED. + It allows discontiguous memory regions to be supported by the emulator. + It uses gSystemMemory[] and gSystemMemoryCount that were created by + parsing the Windows environment variable EFI_MEMORY_SIZE. + The size comes from the varaible and the address comes from the call to + WinNtOpenFile. + +Arguments: + Index - Which memory region to use + MemoryBase - Return Base address of memory region + MemorySize - Return size in bytes of the memory region + +Returns: + EFI_SUCCESS - If memory region was mapped + EFI_UNSUPPORTED - If Index is not supported + +--*/ +typedef struct { + PEI_UNIX_AUTOSCAN UnixAutoScan; +} PEI_UNIX_AUTOSCAN_PPI; + +extern EFI_GUID gPeiUnixAutoScanPpiGuid; + +#endif diff --git a/EdkUnixPkg/Include/Ppi/UnixFwh.h b/EdkUnixPkg/Include/Ppi/UnixFwh.h new file mode 100644 index 0000000000..869f4c968f --- /dev/null +++ b/EdkUnixPkg/Include/Ppi/UnixFwh.h @@ -0,0 +1,62 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + + UnixFwh.h + +Abstract: + + Unix FWH PPI as defined in Tiano + +--*/ + +#ifndef __UNIX_PEI_FWH_H__ +#define __UNIX_PEI_FWH_H__ + +#include + +#define UNIX_FWH_PPI_GUID \ + { \ + 0xf2f0dc30, 0x8985, 0x11db, {0xa1, 0x5b, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +typedef +EFI_STATUS +(EFIAPI *UNIX_FWH_INFORMATION) ( + IN UINTN Index, + IN OUT EFI_PHYSICAL_ADDRESS *FdBase, + IN OUT UINT64 *FdSize + ); + +/*++ + +Routine Description: + Return the FD Size and base address. Since the FD is loaded from a + file into Windows memory only the SEC will know it's address. + +Arguments: + Index - Which FD, starts at zero. + FdSize - Size of the FD in bytes + FdBase - Start address of the FD. Assume it points to an FV Header + +Returns: + EFI_SUCCESS - Return the Base address and size of the FV + EFI_UNSUPPORTED - Index does nto map to an FD in the system + +--*/ +typedef struct { + UNIX_FWH_INFORMATION UnixFwh; +} UNIX_FWH_PPI; + +extern EFI_GUID gUnixFwhPpiGuid; + +#endif diff --git a/EdkUnixPkg/Include/Ppi/UnixPeiLoadFile.h b/EdkUnixPkg/Include/Ppi/UnixPeiLoadFile.h new file mode 100644 index 0000000000..b91c630b5a --- /dev/null +++ b/EdkUnixPkg/Include/Ppi/UnixPeiLoadFile.h @@ -0,0 +1,65 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + + UnixPeiLoadFile.h + +Abstract: + + Unix Load File PPI. + + When the PEI core is done it calls the DXE IPL via PPI + +--*/ + +#ifndef __UNIX_PEI_LOAD_FILE_H__ +#define __UNIX_PEI_LOAD_FILE_H__ + +#include + +#define UNIX_PEI_LOAD_FILE_GUID \ + { \ + 0xf2f48768, 0x8985, 0x11db, {0xb8, 0xda, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +typedef +EFI_STATUS +(EFIAPI *UNIX_PEI_LOAD_FILE) ( + VOID *Pe32Data, + EFI_PHYSICAL_ADDRESS *ImageAddress, + UINT64 *ImageSize, + EFI_PHYSICAL_ADDRESS *EntryPoint + ); + +/*++ + +Routine Description: + Loads and relocates a PE/COFF image into memory. + +Arguments: + Pe32Data - The base address of the PE/COFF file that is to be loaded and relocated + ImageAddress - The base address of the relocated PE/COFF image + ImageSize - The size of the relocated PE/COFF image + EntryPoint - The entry point of the relocated PE/COFF image + +Returns: + EFI_SUCCESS - The file was loaded and relocated + EFI_OUT_OF_RESOURCES - There was not enough memory to load and relocate the PE/COFF file + +--*/ +typedef struct { + UNIX_PEI_LOAD_FILE PeiLoadFileService; +} UNIX_PEI_LOAD_FILE_PPI; + +extern EFI_GUID gUnixPeiLoadFilePpiGuid; + +#endif diff --git a/EdkUnixPkg/Include/Ppi/UnixThunk.h b/EdkUnixPkg/Include/Ppi/UnixThunk.h new file mode 100644 index 0000000000..866bd61398 --- /dev/null +++ b/EdkUnixPkg/Include/Ppi/UnixThunk.h @@ -0,0 +1,56 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + + UnixThunk.h + +Abstract: + + Unix Thunk interface PPI + +--*/ + +#ifndef __UNIX_PEI_UNIX_THUNK_H__ +#define __UNIX_PEI_UNIX_THUNK_H__ + +#include + +#define PEI_UNIX_THUNK_PPI_GUID \ + { \ + 0xf2f830f2, 0x8985, 0x11db, {0x80, 0x6b, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +typedef +VOID * +(EFIAPI *PEI_UNIX_THUNK_INTERFACE) ( + VOID + ); + +/*++ + +Routine Description: + Export of EFI_UNIX_THUNK_PROTOCOL from the Unix SEC. + +Arguments: + InterfaceBase - Address of the EFI_UNIX_THUNK_PROTOCOL + +Returns: + EFI_SUCCESS - Data returned + +--*/ +typedef struct { + PEI_UNIX_THUNK_INTERFACE UnixThunk; +} PEI_UNIX_THUNK_PPI; + +extern EFI_GUID gPeiUnixThunkPpiGuid; + +#endif diff --git a/EdkUnixPkg/Include/Protocol/UnixIo.h b/EdkUnixPkg/Include/Protocol/UnixIo.h new file mode 100644 index 0000000000..6b83c99fe4 --- /dev/null +++ b/EdkUnixPkg/Include/Protocol/UnixIo.h @@ -0,0 +1,132 @@ +/*++ + +Copyright (c) 2004 - 2006, Intel Corporation +All rights reserved. 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: + + UnixIo.h + +Abstract: + +--*/ + +#ifndef _UNIX_IO_H_ +#define _UNIX_IO_H_ + +#define EFI_UNIX_IO_PROTOCOL_GUID \ + { \ + 0xf2e23f54, 0x8985, 0x11db, {0xac, 0x79, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +typedef struct { + EFI_UNIX_THUNK_PROTOCOL *UnixThunk; + EFI_GUID *TypeGuid; + UINT16 *EnvString; + UINT16 InstanceNumber; +} EFI_UNIX_IO_PROTOCOL; + +extern EFI_GUID gEfiUnixIoProtocolGuid; + +// +// The following GUIDs are used in EFI_UNIX_IO_PROTOCOL_GUID +// Device paths. They map 1:1 with NT envirnment variables. The variables +// define what virtual hardware the emulator/UnixBusDriver will produce. +// +// +// EFI_UNIX_VIRTUAL_DISKS +// +#define EFI_UNIX_VIRTUAL_DISKS_GUID \ + { \ + 0xf2ba331a, 0x8985, 0x11db, {0xa4, 0x06, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixVirtualDisksGuid; + +// +// EFI_UNIX_PHYSICAL_DISKS +// +#define EFI_UNIX_PHYSICAL_DISKS_GUID \ + { \ + 0xf2bdcc96, 0x8985, 0x11db, {0x87, 0x19, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixPhysicalDisksGuid; + +// +// EFI_UNIX_FILE_SYSTEM +// +#define EFI_UNIX_FILE_SYSTEM_GUID \ + { \ + 0xf2c16b9e, 0x8985, 0x11db, {0x92, 0xc8, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixFileSystemGuid; + +// +// EFI_UNIX_UGA +// +#define EFI_UNIX_UGA_GUID \ + { \ + 0xf2c8b80e, 0x8985, 0x11db, {0x93, 0xf1, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixUgaGuid; + +// +// EFI_UNIX_GOP +// +#define EFI_UNIX_GOP_GUID \ + { \ + 0xbace07c2, 0x8987, 0x11db, {0xa5, 0x9a, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixGopGuid; + +// +// EFI_UNIX_CONSOLE +// +#define EFI_UNIX_CONSOLE_GUID \ + { \ + 0xf2cc5d06, 0x8985, 0x11db, {0xbb, 0x19, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixConsoleGuid; + +// +// EFI_UNIX_MEMORY +// +#define EFI_UNIX_MEMORY_GUID \ + { \ + 0xf2d006cc, 0x8985, 0x11db, {0xa4, 0x72, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixMemoryGuid; + +// +// EFI_UNIX_CPU_MODEL +// +#define EFI_UNIX_CPU_MODEL_GUID \ + { \ + 0xf2d3b330, 0x8985, 0x11db, {0x8a, 0xa3, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixCPUModelGuid; + +// +// EFI_UNIX_CPU_SPEED +// +#define EFI_UNIX_CPU_SPEED_GUID \ + { \ + 0xf2d74e5a, 0x8985, 0x11db, {0x97, 0x05, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +extern EFI_GUID gEfiUnixCPUSpeedGuid; + +#endif diff --git a/EdkUnixPkg/Include/Protocol/UnixThunk.h b/EdkUnixPkg/Include/Protocol/UnixThunk.h new file mode 100644 index 0000000000..aabb9b130d --- /dev/null +++ b/EdkUnixPkg/Include/Protocol/UnixThunk.h @@ -0,0 +1,187 @@ +/*++ + +Copyright (c) 2004, Intel Corporation +All rights reserved. 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: + + UnixThunk.h + +Abstract: + + This protocol allows an EFI driver in the Unix emulation environment + to make Posix calls. + + NEVER make an Unix call directly, always make the call via this protocol. + + There are no This pointers on the protocol member functions as they map + exactly into Unix system calls. + +--*/ + +#ifndef _UNIX_THUNK_H_ +#define _UNIX_THUNK_H_ + + +#define EFI_UNIX_THUNK_PROTOCOL_GUID \ + { \ + 0xf2e98868, 0x8985, 0x11db, {0x9a, 0x59, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +typedef +VOID +(*UnixSleep) ( + unsigned long Milliseconds + ); + +typedef +VOID +(*UnixExit) ( + int status // exit code for all threads + ); + +typedef +VOID +(*UnixSetTimer) (UINT64 PeriodMs, VOID (*CallBack)(UINT64 DeltaMs)); +typedef +VOID +(*UnixGetLocalTime) (EFI_TIME *Time); +typedef +struct tm * +(*UnixGmTime)(const time_t *timep); +typedef +long +(*UnixGetTimeZone)(void); +typedef +int +(*UnixGetDayLight)(void); +typedef +int +(*UnixPoll)(struct pollfd *pfd, int nfds, int timeout); +typedef +int +(*UnixRead) (int fd, void *buf, int count); +typedef +int +(*UnixWrite) (int fd, const void *buf, int count); +typedef +char * +(*UnixGetenv) (const char *var); +typedef +int +(*UnixOpen) (const char *name, int flags, int mode); +typedef +long int +(*UnixSeek) (int fd, long int off, int whence); +typedef +int +(*UnixFtruncate) (int fd, long int len); +typedef +int +(*UnixClose) (int fd); + +typedef +int +(*UnixMkdir)(const char *pathname, mode_t mode); +typedef +int +(*UnixRmDir)(const char *pathname); +typedef +int +(*UnixUnLink)(const char *pathname); +typedef +int +(*UnixGetErrno)(VOID); +typedef +DIR * +(*UnixOpenDir)(const char *pathname); +typedef +void +(*UnixRewindDir)(DIR *dir); +typedef +struct dirent * +(*UnixReadDir)(DIR *dir); +typedef +int +(*UnixCloseDir)(DIR *dir); +typedef +int +(*UnixStat)(const char *path, struct stat *buf); +typedef +int +(*UnixStatFs)(const char *path, struct statfs *buf); +typedef +int +(*UnixRename)(const char *oldpath, const char *newpath); +typedef +time_t +(*UnixMkTime)(struct tm *tm); +typedef +int +(*UnixFSync)(int fd); +typedef +int +(*UnixChmod)(const char *path, mode_t mode); +typedef +int +(*UnixUTime)(const char *filename, const struct utimbuf *buf); + +struct _EFI_UNIX_UGA_IO_PROTOCOL; +typedef +EFI_STATUS +(*UnixUgaCreate)(struct _EFI_UNIX_UGA_IO_PROTOCOL **UgaIo, + CONST CHAR16 *Title); + +// +// +// + +#define EFI_UNIX_THUNK_PROTOCOL_SIGNATURE EFI_SIGNATURE_32 ('L', 'N', 'X', 'T') + +typedef struct _EFI_UNIX_THUNK_PROTOCOL { + UINT64 Signature; + + UnixSleep Sleep; + UnixExit Exit; + UnixSetTimer SetTimer; + UnixGetLocalTime GetLocalTime; + UnixGmTime GmTime; + UnixGetTimeZone GetTimeZone; + UnixGetDayLight GetDayLight; + UnixPoll Poll; + UnixRead Read; + UnixWrite Write; + UnixGetenv Getenv; + UnixOpen Open; + UnixSeek Lseek; + UnixFtruncate FTruncate; + UnixClose Close; + UnixMkdir MkDir; + UnixRmDir RmDir; + UnixUnLink UnLink; + UnixGetErrno GetErrno; + UnixOpenDir OpenDir; + UnixRewindDir RewindDir; + UnixReadDir ReadDir; + UnixCloseDir CloseDir; + UnixStat Stat; + UnixStatFs StatFs; + UnixRename Rename; + UnixMkTime MkTime; + UnixFSync FSync; + UnixChmod Chmod; + UnixUTime UTime; + + UnixUgaCreate UgaCreate; + +} EFI_UNIX_THUNK_PROTOCOL; + +extern EFI_GUID gEfiUnixThunkProtocolGuid; + +#endif diff --git a/EdkUnixPkg/Include/Protocol/UnixUgaIo.h b/EdkUnixPkg/Include/Protocol/UnixUgaIo.h new file mode 100644 index 0000000000..4ec0bb9b7d --- /dev/null +++ b/EdkUnixPkg/Include/Protocol/UnixUgaIo.h @@ -0,0 +1,72 @@ +/*++ + +Copyright (c) 2006, Tristan Gingold +All rights reserved. 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: + + UnixUgaIo.h + +Abstract: + +--*/ + +#ifndef _UNIX_UGA_IO_H_ +#define _UNIX_UGA_IO_H_ + +#define EFI_UNIX_UGA_IO_PROTOCOL_GUID \ + { \ + 0xf2e5e2c6, 0x8985, 0x11db, {0xa1, 0x91, 0x00, 0x40, 0xd0, 0x2b, 0x18, 0x35 } \ + } + +struct _EFI_UNIX_UGA_IO_PROTOCOL; +typedef struct _EFI_UNIX_UGA_IO_PROTOCOL EFI_UNIX_UGA_IO_PROTOCOL; + +typedef +EFI_STATUS +(*UGAClose)(EFI_UNIX_UGA_IO_PROTOCOL *Uga); + +typedef +EFI_STATUS +(*UGASize)(EFI_UNIX_UGA_IO_PROTOCOL *Uga, UINT32 Width, UINT32 Height); + +typedef +EFI_STATUS +(*UGACheckKey)(EFI_UNIX_UGA_IO_PROTOCOL *Uga); + +typedef +EFI_STATUS +(*UGAGetKey)(EFI_UNIX_UGA_IO_PROTOCOL *Uga, EFI_INPUT_KEY *key); + +typedef +EFI_STATUS +(*UGABlt)(EFI_UNIX_UGA_IO_PROTOCOL *Uga, + IN EFI_UGA_PIXEL *BltBuffer OPTIONAL, + IN EFI_UGA_BLT_OPERATION BltOperation, + IN UINTN SourceX, + IN UINTN SourceY, + IN UINTN DestinationX, + IN UINTN DestinationY, + IN UINTN Width, + IN UINTN Height, + IN UINTN Delta OPTIONAL); + +struct _EFI_UNIX_UGA_IO_PROTOCOL { + VOID *Private; + UGAClose UgaClose; + UGASize UgaSize; + UGACheckKey UgaCheckKey; + UGAGetKey UgaGetKey; + UGABlt UgaBlt; +}; + + +extern EFI_GUID gEfiUnixUgaIoProtocolGuid; + +#endif diff --git a/EdkUnixPkg/Include/UnixDxe.h b/EdkUnixPkg/Include/UnixDxe.h new file mode 100644 index 0000000000..29a0c16e0f --- /dev/null +++ b/EdkUnixPkg/Include/UnixDxe.h @@ -0,0 +1,36 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + UnixDxe.h + +Abstract: + Public include file for the Unix Library + +--*/ + +#ifndef __UNIX_DXE_H__ +#define __UNIX_DXE_H__ + +#include +#include +#include +#include + +// +// UnixIo.h depends on UnixThunk.h +// + +#include +#include +#include + +#endif diff --git a/EdkUnixPkg/Include/UnixPeim.h b/EdkUnixPkg/Include/UnixPeim.h new file mode 100644 index 0000000000..4ddda91cbd --- /dev/null +++ b/EdkUnixPkg/Include/UnixPeim.h @@ -0,0 +1,30 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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: + UnixPeim.h + +Abstract: + Public include file for the Unix Library + +--*/ + +#ifndef __UNIX_PEIM_H__ +#define __UNIX_PEIM_H__ + +#include +#include +#include +#include + +#include + +#endif -- cgit v1.2.3