public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: lushifex <shifeix.a.lu@intel.com>
To: edk2-devel@lists.01.org
Cc: david.wei@intel.com;
Subject: [Patch][edk2-platforms/devel-MinnowBoard3] Add SSDT table tool.
Date: Tue, 21 Mar 2017 17:28:18 +0800	[thread overview]
Message-ID: <b604a75c-069c-4a68-b829-380c2c042a0e@SHWDEOPENPSI011.local> (raw)

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: lushifex <shifeix.a.lu@intel.com>
---
 .../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.<BR>
+
+  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.<BR>
+
+  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.<BR>
+
+  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 <PiDxe.h>
+#include <IndustryStandard/Acpi.h>
+#include <Protocol/AcpiTable.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DxeServicesLib.h>
+#include <Library/ShellLib.h>
+#include <Library/UefiApplicationEntryPoint.h>
+#include <Library/FileHandleLib.h>
+#include <Library/UefiLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/MemoryAllocationLib.h>
+
+#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.<BR>
+#
+#  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




             reply	other threads:[~2017-03-21  9:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-21  9:28 lushifex [this message]
2017-03-22  1:38 ` [Patch][edk2-platforms/devel-MinnowBoard3] Add SSDT table tool Wei, David

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b604a75c-069c-4a68-b829-380c2c042a0e@SHWDEOPENPSI011.local \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox