/** @file This driver implements Global Pcd definition block in ACPI table and registers SMI callback functions for ReadPcd ;****************************************************************************** ;* Copyright (c) 2018, Insyde Software Corp. All Rights Reserved. ;* ;* You may not reproduce, distribute, publish, display, perform, modify, adapt, ;* transmit, broadcast, present, recite, release, license or otherwise exploit ;* any part of this publication in any form, by any means, without the prior ;* written permission of Insyde Software Corporation. ;* ;****************************************************************************** */ #ifndef __PCD_ACPI_SUPPORT_H__ #define __PCD_ACPI_SUPPORT_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define READ_PCD_COMMAND 0 typedef enum { H2O_PCD_ACPI_STATUS_SUCCESS, // PCD data returned in PcdData. PcdDataSize updated with actual PCD data size. H2O_PCD_ACPI_STATUS_DATA_TOO_SMALL, // PcdDataSize was too small to hold the PCD's data. PcdDataSize updated with the actual PCD data size H2O_PCD_ACPI_STATUS_INVALID_PCD, // PCD not found or wrong PCD Type specified H2O_PCD_ACPI_STATUS_INVALID_ACTION // PcdAction not set to a valid PCD action value } H2O_PCD_STATUS; /// /// Global PCD Area definition /// #define MAX_PCD_DATA_SIZE 480 #pragma pack(1) typedef struct _H2O_ACPI_GET_PCD_VALUE { UINT32 PcdDataSize; // Unsigned integer that specifies the size of the PCD data, in bytes. UINT32 PcdTokenNumber; // Unsigned integer that, along with PcdGuid, uniquely identifies the PCD in the PCD database. UINT8 PcdType; // The returned information associated with the requested TokenNumber. If TokenNumber is 0, then PcdType is set to EFI_PCD_TYPE_8. UINT8 PcdStatus; // the result of retrieving the PCD ,See H2O_PCD_STATUS UINT8 PcdAction; // Enumerated value that specifies the PCD action to take,0 - Read a PCD from the PCD database. UINT8 Reserved[5]; EFI_GUID PcdGuid; // GUID that, along with the PcdTokenNumber, uniquely identifies a PCD in the PCD database. UINT8 PcdData[MAX_PCD_DATA_SIZE]; // the buffer that holds the returned PCD data. The size of this buffer is specified by PcdDataSize.It can not exceed MAX_PCD_DATA_SIZE } H2O_ACPI_GET_PCD_VALUE; typedef struct { UINT8 OpRegionOp; UINT32 NameString; UINT8 RegionSpace; UINT8 DWordPrefix; UINT32 RegionOffset; UINT8 WordPrefix; UINT16 RegionLen; } AML_OP_REGION_32_16; #pragma pack() #endif // __PCD_ACPI_SUPPORT_H__