From 04f666f34e0ada0a67d18a6eeb90bb6fd3f11d59 Mon Sep 17 00:00:00 2001 From: timhe Date: Thu, 3 Dec 2015 07:59:57 +0000 Subject: Vlv2TbltDevicePkg: Add SsdtUpdate Application to update Ssdt table to ACPI table. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Shifei Lu Reviewed-by: Tim He git-svn-id: https://svn.code.sf.net/p/edk2/code/branches/UDK2014.SP1@19103 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Application/SsdtUpdate/SsdtUpdate.asl | 28 +++ .../Application/SsdtUpdate/SsdtUpdate.c | 200 +++++++++++++++++++++ .../Application/SsdtUpdate/SsdtUpdate.h | 39 ++++ .../Application/SsdtUpdate/SsdtUpdate.inf | 64 +++++++ Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc | 1 + Vlv2TbltDevicePkg/PlatformPkgIA32.dsc | 1 + Vlv2TbltDevicePkg/PlatformPkgX64.dsc | 1 + 7 files changed, 334 insertions(+) create mode 100644 Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.asl create mode 100644 Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.c create mode 100644 Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.h create mode 100644 Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.inf diff --git a/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.asl b/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.asl new file mode 100644 index 0000000000..c158a94c6f --- /dev/null +++ b/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.asl @@ -0,0 +1,28 @@ +/** @file + The definition block in ACPI table for Genernal device. + + Copyright (c) 2015, 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. + +**/ + +DefinitionBlock ( + "Gene.aml", + "SSDT", + 2, + "INTEL ", + "GeneTabl", + 0x1000 + ) +{ + Scope (\_SB) + { + } +} diff --git a/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.c b/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.c new file mode 100644 index 0000000000..cd42a88131 --- /dev/null +++ b/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.c @@ -0,0 +1,200 @@ +/** @file + Update SSDT table to ACPI table. + + Copyright (c) 2013 - 2015, 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. + +**/ + +#include "SsdtUpdate.h" + +FV_INPUT_DATA mInputData = {0}; + +/** + Read file data from given file name. + + @param[in] FileName Pointer the readed given file name. + @param[out] Buffer The buffer which read the given file name's data. + @param[out] BufferSize The buffer size which read the given file name's data. + + @retval EFI_SUCCESS The file data is successfully readed. + @retval EFI_ERROR The file data is unsuccessfully readed. + +**/ +STATIC +EFI_STATUS +ReadFileData ( + IN CHAR16 *FileName, + OUT UINT8 **Buffer, + OUT UINT32 *BufferSize + ) +{ + EFI_STATUS Status; + SHELL_FILE_HANDLE FileHandle; + UINT64 Size; + VOID *NewBuffer; + UINTN ReadSize; + + FileHandle = NULL; + NewBuffer = NULL; + Size = 0; + + Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ, 0); + if (EFI_ERROR (Status)) { + goto Done; + } + + Status = FileHandleIsDirectory (FileHandle); + if (!EFI_ERROR (Status)) { + Status = EFI_NOT_FOUND; + goto Done; + } + + Status = FileHandleGetSize (FileHandle, &Size); + if (EFI_ERROR (Status)) { + goto Done; + } + + NewBuffer = AllocatePool ((UINTN) Size); + + ReadSize = (UINTN) Size; + Status = FileHandleRead (FileHandle, &ReadSize, NewBuffer); + if (EFI_ERROR (Status)) { + goto Done; + } else if (ReadSize != (UINTN) Size) { + Status = EFI_INVALID_PARAMETER; + goto Done; + } + +Done: + if (FileHandle != NULL) { + ShellCloseFile (&FileHandle); + } + + if (EFI_ERROR (Status)) { + if (NewBuffer != NULL) { + FreePool (NewBuffer); + } + } else { + *Buffer = NewBuffer; + *BufferSize = (UINT32) Size; + } + + return Status; +} + +/** + Initialize and publish device in ACPI table. + + @param[in] Table The pointer to the ACPI table which will be published. + @param[in] TableSize The size of ACPI table which will be published. + + @retval EFI_SUCCESS The ACPI table is published successfully. + @retval Others The ACPI table is not published. + +**/ +EFI_STATUS +PublishAcpiTable ( + IN UINT8 *Table, + IN UINT32 TableSize + ) +{ + EFI_STATUS Status; + EFI_ACPI_TABLE_PROTOCOL *AcpiTable; + UINTN TableKey; + + // + // Basic check ::TODO: Add check here!!!!!!!!!!!!!!!!! + // + //ASSERT (Table->OemTableId == SIGNATURE_64 ('E', 'v', 'e', 'r', 'T', 'a', 'b', 'l')); + + // + // Publish the ACPI table + // + Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTable); + DEBUG((EFI_D_INFO, " Publish ACPI Table-3\n")); + ASSERT_EFI_ERROR (Status); + + TableKey = 0; + Status = AcpiTable->InstallAcpiTable ( + AcpiTable, + (EFI_ACPI_DESCRIPTION_HEADER*) Table, + TableSize, + &TableKey + ); + DEBUG((EFI_D_INFO, " Publish ACPI Table-4\n")); + ASSERT_EFI_ERROR (Status); + + return Status; +} + +/** + Init device + + @retval EFI_SUCCESS Init Devices successfully + @retval Others Some error occurs + +**/ +EFI_STATUS +InitDevice ( + ) +{ + // + // Add device Init here if needed + // + return EFI_SUCCESS; +} + +/** + UEFI application entry point which has an interface similar to a + standard C main function. + + The ShellCEntryLib library instance wrappers the actual UEFI application + entry point and calls this ShellAppMain function. + + @param[in] Argc The number of items in Argv. + @param[in] Argv Array of pointers to strings. + + @retval +**/ +INTN +EFIAPI + ShellAppMain ( + IN UINTN Argc, + IN CHAR16 **Argv + ) +{ + EFI_STATUS Status; + UINT8 *FileBuffer; + UINT32 TableSize; + + TableSize = 0; + FileBuffer = NULL; + + // + // Necessary device Initialization + // + Status = InitDevice(); + if (EFI_ERROR (Status)) { + return EFI_DEVICE_ERROR; + } + + StrCpy (mInputData.FileName, Argv[1]); + Status = ReadFileData (mInputData.FileName, &FileBuffer, &TableSize); + + // + // Update and publish ACPI table + // + Status = PublishAcpiTable (FileBuffer, TableSize); + ASSERT_EFI_ERROR (Status); + + return Status; + } + diff --git a/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.h b/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.h new file mode 100644 index 0000000000..83e80fbe18 --- /dev/null +++ b/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.h @@ -0,0 +1,39 @@ +/** @file + The header file for update SSDT table to ACPI table. + + Copyright (c) 2015, 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. + +**/ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define INPUT_STRING_LEN 255 +#define INPUT_STRING_SIZE (INPUT_STRING_LEN + 1) + +typedef struct { + BOOLEAN UpdateFromFile; + CHAR16 FileName[INPUT_STRING_SIZE]; +} FV_INPUT_DATA; + diff --git a/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.inf b/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.inf new file mode 100644 index 0000000000..aaa9926483 --- /dev/null +++ b/Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.inf @@ -0,0 +1,64 @@ +## @file +# This application add SSDT table into ACPI table. +# +# Copyright (c) 2015, 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. +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = SsdtUpdate + FILE_GUID = 6527d4b8-8f0f-4c02-9e78-8338cb6f0875 + MODULE_TYPE = UEFI_APPLICATION + PI_SPECIFICATION_VERSION = 0x0001000A + VERSION_STRING = 1.0 + ENTRY_POINT = ShellCEntryLib + +[Sources] + SsdtUpdate.h + SsdtUpdate.c + SsdtUpdate.asl + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + ShellPkg/ShellPkg.dec + + +[LibraryClasses] + BaseLib + BaseMemoryLib + UefiBootServicesTableLib + DebugLib + DxeServicesLib + UefiApplicationEntryPoint + FileHandleLib + ShellCEntryLib + ShellLib + UefiBootServicesTableLib + MemoryAllocationLib + +[Guids] + +[Protocols] + gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED + +[Pcd] + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemTableId + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemRevision + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision + +##[FeaturePcd] + +[Depex] + gEfiAcpiTableProtocolGuid diff --git a/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc b/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc index cc046e98fa..d989a305c4 100644 --- a/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc +++ b/Vlv2TbltDevicePkg/PlatformPkgGccX64.dsc @@ -1512,6 +1512,7 @@ $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf !endif Vlv2TbltDevicePkg/Application/FirmwareUpdate/FirmwareUpdate.inf + Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.inf [BuildOptions] # diff --git a/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc b/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc index 058cd5d521..b445009a86 100644 --- a/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc +++ b/Vlv2TbltDevicePkg/PlatformPkgIA32.dsc @@ -1493,6 +1493,7 @@ $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf !endif Vlv2TbltDevicePkg/Application/FirmwareUpdate/FirmwareUpdate.inf + Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.inf [BuildOptions] # diff --git a/Vlv2TbltDevicePkg/PlatformPkgX64.dsc b/Vlv2TbltDevicePkg/PlatformPkgX64.dsc index 6fc9d13638..97e2f72b5b 100644 --- a/Vlv2TbltDevicePkg/PlatformPkgX64.dsc +++ b/Vlv2TbltDevicePkg/PlatformPkgX64.dsc @@ -1499,6 +1499,7 @@ $(PLATFORM_BINARY_PACKAGE)/$(DXE_ARCHITECTURE)$(TARGET)/IA32/fTPMInitPeim.inf !endif Vlv2TbltDevicePkg/Application/FirmwareUpdate/FirmwareUpdate.inf + Vlv2TbltDevicePkg/Application/SsdtUpdate/SsdtUpdate.inf [BuildOptions] # -- cgit v1.2.3