4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The header file of HII Config Access protocol implementation of TCG
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync configuration module.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncwhich accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __TCG_CONFIG_IMPL_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __TCG_CONFIG_IMPL_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Uefi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/HiiConfigAccess.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/HiiConfigRouting.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/TcgService.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiBootServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiRuntimeServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiHiiServicesLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/HiiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DevicePathLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PcdLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PrintLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/TpmCommLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/MdeModuleHii.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "TcgConfigNvData.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Tool generated IFR binary data and String package data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT8 TcgConfigBin[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT8 TcgConfigDxeStrings[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// HII specific Vendor Device Path definition.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VENDOR_DEVICE_PATH VendorDevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL End;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} HII_VENDOR_DEVICE_PATH;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HII_HANDLE HiiHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE DriverHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_TCG_PROTOCOL *TcgProtocol;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN HideTpm;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TCG_CONFIG_PRIVATE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern TCG_CONFIG_PRIVATE_DATA mTcgConfigPrivateDateTemplate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TCG_CONFIG_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('T', 'C', 'G', 'D')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define TCG_CONFIG_PRIVATE_DATA_FROM_THIS(a) CR (a, TCG_CONFIG_PRIVATE_DATA, ConfigAccess, TCG_CONFIG_PRIVATE_DATA_SIGNATURE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function publish the TCG configuration Form for TPM device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] PrivateData Points to TCG configuration private data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS HII Form is installed for this network device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Not enough resource for HII Form installation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other errors as indicated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInstallTcgConfigForm (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT TCG_CONFIG_PRIVATE_DATA *PrivateData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function removes TCG configuration Form.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] PrivateData Points to TCG configuration private data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUninstallTcgConfigForm (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT TCG_CONFIG_PRIVATE_DATA *PrivateData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function allows a caller to extract the current configuration for one
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or more named elements from the target driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Request A null-terminated Unicode string in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync <ConfigRequest> format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Progress On return, points to a character in the Request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync string. Points to the string's null terminator if
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync request was successful. Points to the most recent
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync '&' before the first failing name/value pair (or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the beginning of the string if the failure is in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the first name/value pair) if the request was not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Results A null-terminated Unicode string in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync <ConfigAltResp> format which has all values filled
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in for the names in the Request string. String to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be allocated by the called function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Results is filled with the requested values.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Not enough memory to store the results.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Request is illegal syntax, or unknown name.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND Routing data doesn't match any storage in this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTcgExtractConfig (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_STRING Request,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_STRING *Progress,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_STRING *Results
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function processes the results of changes in configuration.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Configuration A null-terminated Unicode string in <ConfigResp>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Progress A pointer to a string filled in with the offset of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the most recent '&' before the first failing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync name/value pair (or the beginning of the string if
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the failure is in the first name/value pair) or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the terminating NULL if all was successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Results is processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Configuration is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND Routing data doesn't match any storage in this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTcgRouteConfig (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_STRING Configuration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_STRING *Progress
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function processes the results of changes in configuration.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Action Specifies the type of action taken by the browser.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] QuestionId A unique value which is sent to the original
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync exporting driver so that it can identify the type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of data to expect.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Type The type of value for the question.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Value A pointer to the data being sent to the original
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync exporting driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] ActionRequest On return, points to the action requested by the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync callback function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The callback successfully handled the action.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync variable and its data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The variable could not be saved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The specified Action is not supported by the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync callback.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTcgCallback (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_BROWSER_ACTION Action,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_QUESTION_ID QuestionId,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Type,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IFR_TYPE_VALUE *Value,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif