Home | History | Annotate | Download | only in Tcg2Config
      1 /** @file
      2   The header file of HII Config Access protocol implementation of TCG2
      3   configuration module.
      4 
      5 Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef __TCG2_CONFIG_IMPL_H__
     17 #define __TCG2_CONFIG_IMPL_H__
     18 
     19 #include <Uefi.h>
     20 
     21 #include <Protocol/HiiConfigAccess.h>
     22 #include <Protocol/HiiConfigRouting.h>
     23 #include <Protocol/Tcg2Protocol.h>
     24 #include <Protocol/VariableLock.h>
     25 
     26 #include <Library/BaseLib.h>
     27 #include <Library/BaseMemoryLib.h>
     28 #include <Library/DebugLib.h>
     29 #include <Library/MemoryAllocationLib.h>
     30 #include <Library/UefiBootServicesTableLib.h>
     31 #include <Library/UefiRuntimeServicesTableLib.h>
     32 #include <Library/UefiHiiServicesLib.h>
     33 #include <Library/UefiLib.h>
     34 #include <Library/HiiLib.h>
     35 #include <Library/DevicePathLib.h>
     36 #include <Library/PcdLib.h>
     37 #include <Library/PrintLib.h>
     38 #include <Library/Tcg2PhysicalPresenceLib.h>
     39 
     40 #include <Guid/MdeModuleHii.h>
     41 
     42 #include "Tcg2ConfigNvData.h"
     43 
     44 //
     45 // Tool generated IFR binary data and String package data
     46 //
     47 extern UINT8                        Tcg2ConfigBin[];
     48 extern UINT8                        Tcg2ConfigDxeStrings[];
     49 
     50 ///
     51 /// HII specific Vendor Device Path definition.
     52 ///
     53 typedef struct {
     54   VENDOR_DEVICE_PATH                VendorDevicePath;
     55   EFI_DEVICE_PATH_PROTOCOL          End;
     56 } HII_VENDOR_DEVICE_PATH;
     57 
     58 typedef struct {
     59   UINTN                             Signature;
     60 
     61   EFI_HII_CONFIG_ACCESS_PROTOCOL    ConfigAccess;
     62   EFI_HII_HANDLE                    HiiHandle;
     63   EFI_HANDLE                        DriverHandle;
     64 
     65   UINT8                             TpmDeviceDetected;
     66   EFI_TCG2_PROTOCOL                 *Tcg2Protocol;
     67   EFI_TCG2_BOOT_SERVICE_CAPABILITY  ProtocolCapability;
     68   UINT32                            PCRBanksDesired;
     69 } TCG2_CONFIG_PRIVATE_DATA;
     70 
     71 extern TCG2_CONFIG_PRIVATE_DATA      mTcg2ConfigPrivateDateTemplate;
     72 extern TCG2_CONFIG_PRIVATE_DATA      *mTcg2ConfigPrivateDate;
     73 #define TCG2_CONFIG_PRIVATE_DATA_SIGNATURE     SIGNATURE_32 ('T', 'r', 'E', 'D')
     74 #define TCG2_CONFIG_PRIVATE_DATA_FROM_THIS(a)  CR (a, TCG2_CONFIG_PRIVATE_DATA, ConfigAccess, TCG2_CONFIG_PRIVATE_DATA_SIGNATURE)
     75 
     76 #define TPM_HID_PNP_SIZE                                           8
     77 #define TPM_HID_ACPI_SIZE                                          9
     78 
     79 /**
     80   This function publish the TCG2 configuration Form for TPM device.
     81 
     82   @param[in, out]  PrivateData   Points to TCG2 configuration private data.
     83 
     84   @retval EFI_SUCCESS            HII Form is installed for this network device.
     85   @retval EFI_OUT_OF_RESOURCES   Not enough resource for HII Form installation.
     86   @retval Others                 Other errors as indicated.
     87 
     88 **/
     89 EFI_STATUS
     90 InstallTcg2ConfigForm (
     91   IN OUT TCG2_CONFIG_PRIVATE_DATA  *PrivateData
     92   );
     93 
     94 /**
     95   This function removes TCG2 configuration Form.
     96 
     97   @param[in, out]  PrivateData   Points to TCG2 configuration private data.
     98 
     99 **/
    100 VOID
    101 UninstallTcg2ConfigForm (
    102   IN OUT TCG2_CONFIG_PRIVATE_DATA    *PrivateData
    103   );
    104 
    105 /**
    106   This function allows a caller to extract the current configuration for one
    107   or more named elements from the target driver.
    108 
    109   @param[in]   This              Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
    110   @param[in]   Request           A null-terminated Unicode string in
    111                                  <ConfigRequest> format.
    112   @param[out]  Progress          On return, points to a character in the Request
    113                                  string. Points to the string's null terminator if
    114                                  request was successful. Points to the most recent
    115                                  '&' before the first failing name/value pair (or
    116                                  the beginning of the string if the failure is in
    117                                  the first name/value pair) if the request was not
    118                                  successful.
    119   @param[out]  Results           A null-terminated Unicode string in
    120                                  <ConfigAltResp> format which has all values filled
    121                                  in for the names in the Request string. String to
    122                                  be allocated by the called function.
    123 
    124   @retval EFI_SUCCESS            The Results is filled with the requested values.
    125   @retval EFI_OUT_OF_RESOURCES   Not enough memory to store the results.
    126   @retval EFI_INVALID_PARAMETER  Request is illegal syntax, or unknown name.
    127   @retval EFI_NOT_FOUND          Routing data doesn't match any storage in this
    128                                  driver.
    129 
    130 **/
    131 EFI_STATUS
    132 EFIAPI
    133 Tcg2ExtractConfig (
    134   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL        *This,
    135   IN CONST EFI_STRING                            Request,
    136        OUT EFI_STRING                            *Progress,
    137        OUT EFI_STRING                            *Results
    138   );
    139 
    140 /**
    141   This function processes the results of changes in configuration.
    142 
    143   @param[in]  This               Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
    144   @param[in]  Configuration      A null-terminated Unicode string in <ConfigResp>
    145                                  format.
    146   @param[out] Progress           A pointer to a string filled in with the offset of
    147                                  the most recent '&' before the first failing
    148                                  name/value pair (or the beginning of the string if
    149                                  the failure is in the first name/value pair) or
    150                                  the terminating NULL if all was successful.
    151 
    152   @retval EFI_SUCCESS            The Results is processed successfully.
    153   @retval EFI_INVALID_PARAMETER  Configuration is NULL.
    154   @retval EFI_NOT_FOUND          Routing data doesn't match any storage in this
    155                                  driver.
    156 
    157 **/
    158 EFI_STATUS
    159 EFIAPI
    160 Tcg2RouteConfig (
    161   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL      *This,
    162   IN CONST EFI_STRING                          Configuration,
    163        OUT EFI_STRING                          *Progress
    164   );
    165 
    166 /**
    167   This function processes the results of changes in configuration.
    168 
    169   @param[in]  This               Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
    170   @param[in]  Action             Specifies the type of action taken by the browser.
    171   @param[in]  QuestionId         A unique value which is sent to the original
    172                                  exporting driver so that it can identify the type
    173                                  of data to expect.
    174   @param[in]  Type               The type of value for the question.
    175   @param[in]  Value              A pointer to the data being sent to the original
    176                                  exporting driver.
    177   @param[out] ActionRequest      On return, points to the action requested by the
    178                                  callback function.
    179 
    180   @retval EFI_SUCCESS            The callback successfully handled the action.
    181   @retval EFI_OUT_OF_RESOURCES   Not enough storage is available to hold the
    182                                  variable and its data.
    183   @retval EFI_DEVICE_ERROR       The variable could not be saved.
    184   @retval EFI_UNSUPPORTED        The specified Action is not supported by the
    185                                  callback.
    186 
    187 **/
    188 EFI_STATUS
    189 EFIAPI
    190 Tcg2Callback (
    191   IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL      *This,
    192   IN     EFI_BROWSER_ACTION                    Action,
    193   IN     EFI_QUESTION_ID                       QuestionId,
    194   IN     UINT8                                 Type,
    195   IN     EFI_IFR_TYPE_VALUE                    *Value,
    196      OUT EFI_BROWSER_ACTION_REQUEST            *ActionRequest
    197   );
    198 
    199 #endif
    200