+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
-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
- EfiScriptLib.c\r
-\r
-Abstract:\r
-\r
- Support for EFI script. \r
-\r
---*/\r
-\r
-#include "EfiScriptLib.h"\r
-\r
-EFI_BOOT_SCRIPT_SAVE_PROTOCOL *mBootScriptSave;\r
-\r
-UINTN\r
-EfiScriptLibAsciiStrLen (\r
- IN CHAR8 *String\r
- )\r
-/*++\r
-\r
-Routine Description:\r
- Return the number of Ascii characters in String. This is not the same as\r
- the length of the string in bytes.\r
-\r
-Arguments:\r
- String - String to process\r
-\r
-Returns:\r
- Number of Ascii characters in String\r
-\r
---*/\r
-{\r
- UINTN Length;\r
- \r
- for (Length=0; *String; String++, Length++);\r
- return Length;\r
-}\r
-\r
-UINTN\r
-EfiScriptLibStrLen (\r
- IN CHAR16 *String\r
- )\r
-/*++\r
-\r
-Routine Description:\r
- Return the number of Unicode characters in String. This is not the same as\r
- the length of the string in bytes.\r
-\r
-Arguments:\r
- String - String to process\r
-\r
-Returns:\r
- Number of Unicode characters in String\r
-\r
---*/\r
-{\r
- UINTN Length;\r
- \r
- for (Length=0; *String; String++, Length++);\r
- return Length;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveInitialize (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Intialize Boot Script Lib if it has not yet been initialized. \r
-\r
-Arguments:\r
-\r
- (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)\r
-\r
-Returns: \r
-\r
- EFI_STATUS always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: ImageHandle - add argument and description to function comment\r
-// GC_TODO: SystemTable - add argument and description to function comment\r
-{\r
- EFI_STATUS Status;\r
- EFI_BOOT_SERVICES *BS;\r
-\r
- BS = SystemTable->BootServices;\r
-\r
- Status = BS->LocateProtocol (&gEfiBootScriptSaveGuid, NULL, (VOID **)&mBootScriptSave);\r
- if (EFI_ERROR (Status) && Status != EFI_ALREADY_STARTED) {\r
- mBootScriptSave = NULL;\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveIoWrite (\r
- IN UINT16 TableName,\r
- IN EFI_BOOT_SCRIPT_WIDTH Width,\r
- IN UINT64 Address,\r
- IN UINTN Count,\r
- IN VOID *Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
-\r
- (Standard EFI IO write script parameter) \r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: Width - add argument and description to function comment\r
-// GC_TODO: Address - add argument and description to function comment\r
-// GC_TODO: Count - add argument and description to function comment\r
-// GC_TODO: Buffer - add argument and description to function comment\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_IO_WRITE_OPCODE,\r
- Width,\r
- Address,\r
- Count,\r
- Buffer\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveIoReadWrite (\r
- IN UINT16 TableName,\r
- IN EFI_BOOT_SCRIPT_WIDTH Width,\r
- IN UINT64 Address,\r
- IN VOID *Data,\r
- IN VOID *DataMask\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
-\r
- (Standard EFI IO read write script parameter) \r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: Width - add argument and description to function comment\r
-// GC_TODO: Address - add argument and description to function comment\r
-// GC_TODO: Data - add argument and description to function comment\r
-// GC_TODO: DataMask - add argument and description to function comment\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_IO_READ_WRITE_OPCODE,\r
- Width,\r
- Address,\r
- Data,\r
- DataMask\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveMemWrite (\r
- IN UINT16 TableName,\r
- IN EFI_BOOT_SCRIPT_WIDTH Width,\r
- IN UINT64 Address,\r
- IN UINTN Count,\r
- IN VOID *Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
-\r
- (Standard EFI MEM write script parameter) \r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: Width - add argument and description to function comment\r
-// GC_TODO: Address - add argument and description to function comment\r
-// GC_TODO: Count - add argument and description to function comment\r
-// GC_TODO: Buffer - add argument and description to function comment\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_MEM_WRITE_OPCODE,\r
- Width,\r
- Address,\r
- Count,\r
- Buffer\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveMemReadWrite (\r
- IN UINT16 TableName,\r
- IN EFI_BOOT_SCRIPT_WIDTH Width,\r
- IN UINT64 Address,\r
- IN VOID *Data,\r
- IN VOID *DataMask\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
-\r
- (Standard EFI MEM read write script parameter) \r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: Width - add argument and description to function comment\r
-// GC_TODO: Address - add argument and description to function comment\r
-// GC_TODO: Data - add argument and description to function comment\r
-// GC_TODO: DataMask - add argument and description to function comment\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_MEM_READ_WRITE_OPCODE,\r
- Width,\r
- Address,\r
- Data,\r
- DataMask\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSavePciCfgWrite (\r
- IN UINT16 TableName,\r
- IN EFI_BOOT_SCRIPT_WIDTH Width,\r
- IN UINT64 Address,\r
- IN UINTN Count,\r
- IN VOID *Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
-\r
- (Standard EFI PCI write script parameter) \r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: Width - add argument and description to function comment\r
-// GC_TODO: Address - add argument and description to function comment\r
-// GC_TODO: Count - add argument and description to function comment\r
-// GC_TODO: Buffer - add argument and description to function comment\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_PCI_CONFIG_WRITE_OPCODE,\r
- Width,\r
- Address,\r
- Count,\r
- Buffer\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSavePciCfgReadWrite (\r
- IN UINT16 TableName,\r
- IN EFI_BOOT_SCRIPT_WIDTH Width,\r
- IN UINT64 Address,\r
- IN VOID *Data,\r
- IN VOID *DataMask\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
-\r
- (Standard EFI PCI read write script parameter) \r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: Width - add argument and description to function comment\r
-// GC_TODO: Address - add argument and description to function comment\r
-// GC_TODO: Data - add argument and description to function comment\r
-// GC_TODO: DataMask - add argument and description to function comment\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_PCI_CONFIG_READ_WRITE_OPCODE,\r
- Width,\r
- Address,\r
- Data,\r
- DataMask\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveSmbusExecute (\r
- IN UINT16 TableName,\r
- IN EFI_SMBUS_DEVICE_ADDRESS SlaveAddress,\r
- IN EFI_SMBUS_DEVICE_COMMAND Command,\r
- IN EFI_SMBUS_OPERATION Operation,\r
- IN BOOLEAN PecCheck,\r
- IN UINTN *Length,\r
- IN VOID *Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
-\r
- (Standard EFI Smbus execute script parameter) \r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: SlaveAddress - add argument and description to function comment\r
-// GC_TODO: Command - add argument and description to function comment\r
-// GC_TODO: Operation - add argument and description to function comment\r
-// GC_TODO: PecCheck - add argument and description to function comment\r
-// GC_TODO: Length - add argument and description to function comment\r
-// GC_TODO: Buffer - add argument and description to function comment\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_SMBUS_EXECUTE_OPCODE,\r
- SlaveAddress,\r
- Command,\r
- Operation,\r
- PecCheck,\r
- Length,\r
- Buffer\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveStall (\r
- IN UINT16 TableName,\r
- IN UINTN Duration\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
-\r
- (Standard EFI stall script parameter) \r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-// GC_TODO: Duration - add argument and description to function comment\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_STALL_OPCODE,\r
- Duration\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveDispatch (\r
- IN UINT16 TableName,\r
- IN EFI_PHYSICAL_ADDRESS EntryPoint\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- GC_TODO: Add function description\r
-\r
-Arguments:\r
-\r
- TableName - GC_TODO: add argument description\r
- EntryPoint - GC_TODO: add argument description\r
-\r
-Returns:\r
-\r
- EFI_NOT_FOUND - GC_TODO: Add description for return value\r
- EFI_SUCCESS - GC_TODO: Add description for return value\r
-\r
---*/\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_DISPATCH_OPCODE,\r
- EntryPoint\r
- );\r
-\r
- return EFI_SUCCESS;\r
-\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptMemPoll (\r
- IN UINT16 TableName,\r
- IN EFI_BOOT_SCRIPT_WIDTH Width,\r
- IN UINT64 Address,\r
- IN VOID *BitMask,\r
- IN VOID *BitValue,\r
- IN UINTN Duration,\r
- IN UINTN LoopTimes\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save I/O write to boot script \r
-\r
-Arguments:\r
- TableName - Desired boot script table\r
-\r
- Width - The width of the memory operations.\r
- \r
- Address - The base address of the memory operations.\r
- \r
- BitMask - A pointer to the bit mask to be AND-ed with the data read from the register.\r
-\r
- BitValue - A pointer to the data value after to be Masked.\r
-\r
- Duration - Duration in microseconds of the stall.\r
- \r
- LoopTimes - The times of the register polling.\r
-\r
-Returns: \r
- \r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-{\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_MEM_POLL_OPCODE,\r
- Width,\r
- Address,\r
- BitMask,\r
- BitValue,\r
- Duration,\r
- LoopTimes\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveInformation (\r
- IN UINT16 TableName,\r
- IN UINT32 Length, \r
- IN EFI_PHYSICAL_ADDRESS Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save a Information Opcode record in table specified with TableName\r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
- Length - Length of information in bytes\r
- Buffer - Content of information that will be saved in script table\r
-\r
-Returns:\r
-\r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-{\r
- if (mBootScriptSave == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
-\r
- mBootScriptSave->Write (\r
- mBootScriptSave,\r
- TableName,\r
- EFI_BOOT_SCRIPT_INFORMATION_OPCODE,\r
- Length,\r
- Buffer\r
- );\r
-\r
- return EFI_SUCCESS;\r
-\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveInformationUnicodeString (\r
- IN UINT16 TableName,\r
- IN CHAR16 *String\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save a Information Opcode record in table specified with TableName, the information\r
- is a unicode string.\r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
- String - The string that will be saved in script table\r
-\r
-Returns:\r
-\r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-{\r
- return BootScriptSaveInformation ( \r
- TableName,\r
- (UINT32) EfiScriptLibStrLen (String) * 2 + 2, \r
- (EFI_PHYSICAL_ADDRESS) (UINTN) String\r
- );\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-BootScriptSaveInformationAsciiString (\r
- IN UINT16 TableName,\r
- IN CHAR8 *String\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Save a Information Opcode record in table specified with TableName, the information\r
- is a ascii string.\r
-\r
-Arguments:\r
-\r
- TableName - Desired boot script table\r
- String - The string that will be saved in script table\r
-\r
-Returns:\r
-\r
- EFI_NOT_FOUND - BootScriptSave Protocol not exist.\r
- \r
- EFI_STATUS - BootScriptSave Protocol exist, always returns EFI_SUCCESS\r
-\r
---*/\r
-{\r
- return BootScriptSaveInformation ( \r
- TableName,\r
- (UINT32) EfiScriptLibAsciiStrLen (String) + 1, \r
- (EFI_PHYSICAL_ADDRESS) (UINTN) String\r
- );\r
-}\r
-\r