From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A20D880472 for ; Tue, 21 Mar 2017 02:28:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1490088499; x=1521624499; h=date:from:cc:sender:to:subject:message-id:mime-version; bh=IQQi2pRD73Kx/ZyxfnwiVpG5M4Or3OB62boi39Qy9RY=; b=I/W1sV/aLi4AGndtErZM2pJVzl9TbXPw8czjkSa2DX/EGG50zk5vVvVT u19NqjGHKKZ77XgtcGu4NHCHTPWONA==; Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Mar 2017 02:28:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,198,1486454400"; d="scan'208";a="1125239938" Received: from shwdeopenpsi011.ccr.corp.intel.com (HELO SHWDEOPENPSI011.local) ([10.239.9.8]) by fmsmga001.fm.intel.com with SMTP; 21 Mar 2017 02:28:18 -0700 Date: Tue, 21 Mar 2017 17:28:18 +0800 From: lushifex CC: david.wei@intel.com; Sender: lushifex To: edk2-devel@lists.01.org Message-ID: X-Mailer: TortoiseGit MIME-Version: 1.0 Subject: [Patch][edk2-platforms/devel-MinnowBoard3] Add SSDT table tool. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 09:28:19 -0000 Content-Type: text/plain; Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: lushifex --- .../Common/Application/SsdtUpdate/SsdtUpdate.asl | 29 +++ .../Common/Application/SsdtUpdate/SsdtUpdate.c | 199 +++++++++++++++++++++ .../Common/Application/SsdtUpdate/SsdtUpdate.h | 38 ++++ .../Common/Application/SsdtUpdate/SsdtUpdate.inf | 62 +++++++ 4 files changed, 328 insertions(+) create mode 100644 Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.asl create mode 100644 Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.c create mode 100644 Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.h create mode 100644 Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.inf diff --git a/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.asl b/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.asl new file mode 100644 index 0000000..e5bd7e6 --- /dev/null +++ b/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.asl @@ -0,0 +1,29 @@ +/** @file + The definition block in ACPI table for Genernal device. + + Copyright (c) 2015 - 2017, 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/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.c b/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.c new file mode 100644 index 0000000..f63df95 --- /dev/null +++ b/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.c @@ -0,0 +1,199 @@ +/** @file + Update SSDT table to ACPI table. + + Copyright (c) 2013 - 2017, 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; + + // + // Publish the ACPI table + // + Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTable); + DEBUG ((DEBUG_INFO, " Publish ACPI Table-3\n")); + ASSERT_EFI_ERROR (Status); + + TableKey = 0; + Status = AcpiTable->InstallAcpiTable ( + AcpiTable, + (EFI_ACPI_DESCRIPTION_HEADER *) Table, + TableSize, + &TableKey + ); + DEBUG ((DEBUG_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 Status + +**/ +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/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.h b/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.h new file mode 100644 index 0000000..a3ca6d3 --- /dev/null +++ b/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.h @@ -0,0 +1,38 @@ +/** @file + The header file for update SSDT table to ACPI table. + + Copyright (c) 2015 - 2017, 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/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.inf b/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.inf new file mode 100644 index 0000000..911dff3 --- /dev/null +++ b/Platform/BroxtonPlatformPkg/Common/Application/SsdtUpdate/SsdtUpdate.inf @@ -0,0 +1,62 @@ +## @file +# This application add SSDT table into ACPI table. +# +# Copyright (c) 2015 - 2017, 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 + +[Depex] + gEfiAcpiTableProtocolGuid + -- 2.7.0.windows.1