Reviewed-by: jiewen....@intel.com

> -----Original Message-----
> From: Zhang, Chao B
> Sent: Wednesday, January 4, 2017 3:19 PM
> To: edk2-devel@lists.01.org
> Cc: Long, Qin <qin.l...@intel.com>; Yao, Jiewen <jiewen....@intel.com>; Zhang,
> Chao B <chao.b.zh...@intel.com>
> Subject: [PATCH] SecurityPkg: Tcg2ConfigDxe: Display TPM2 HID in Tcg2Config
> 
> Display TPM2 HID from TPM2 ACPI device object in Tcg2Config UI
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Chao Zhang <chao.b.zh...@intel.com>
> ---
>  SecurityPkg/Tcg/Tcg2Config/Tcg2Config.vfr        |   9 +-
>  SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.c      | 107
> ++++++++++++++++++++++-
>  SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.h      |   4 +-
>  SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigStrings.uni |   6 +-
>  SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c                |   3 +-
>  5 files changed, 123 insertions(+), 6 deletions(-)
> 
> diff --git a/SecurityPkg/Tcg/Tcg2Config/Tcg2Config.vfr
> b/SecurityPkg/Tcg/Tcg2Config/Tcg2Config.vfr
> index a805d53..ed833c6 100644
> --- a/SecurityPkg/Tcg/Tcg2Config/Tcg2Config.vfr
> +++ b/SecurityPkg/Tcg/Tcg2Config/Tcg2Config.vfr
> @@ -1,7 +1,7 @@
>  /** @file
>    VFR file used by the TCG2 configuration component.
> 
> -Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> +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
> @@ -59,6 +59,13 @@ formset
> 
>      suppressif ideqvallist TCG2_CONFIGURATION.TpmDevice ==
> TPM_DEVICE_NULL TPM_DEVICE_1_2;
> 
> +    subtitle text = STRING_TOKEN(STR_NULL);
> +
> +    text
> +      help   = STRING_TOKEN(STR_TPM2_ACPI_HID_HELP),
> +      text   = STRING_TOKEN(STR_TPM2_ACPI_HID_PROMPT),
> +        text   = STRING_TOKEN(STR_TPM2_ACPI_HID_CONTENT);
> +
>      oneof varid  = TCG2_CONFIGURATION_NV_INFO.TpmAcpiTableRev,
>            questionid = KEY_TPM_ACPI_REVISION,
>            prompt = STRING_TOKEN(STR_TCG2_ACPI_REVISION_PROMPT),
> diff --git a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.c
> b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.c
> index afba42c..013caf8 100644
> --- a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.c
> +++ b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.c
> @@ -2,7 +2,7 @@
>    HII Config Access protocol implementation of TCG2 configuration module.
>    NOTE: This module is only for reference only, each platform should have its
> own setup page.
> 
> -Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> +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
> @@ -429,6 +429,83 @@ Tcg2RouteConfig (
>  }
> 
>  /**
> +  Get HID string of TPM2 ACPI device object
> +
> +  @param[in]  HID               Points to HID String Buffer.
> +  @param[in]  Size              HID String size in bytes. Must >=
> TPM_HID_ACPI_SIZE
> +
> +  @return                       HID String get status.
> +
> +**/
> +EFI_STATUS
> +GetTpm2HID(
> +   CHAR8 *HID,
> +   UINTN  Size
> +  )
> +{
> +  EFI_STATUS  Status;
> +  UINT32      ManufacturerID;
> +  UINT32      FirmwareVersion1;
> +  UINT32      FirmwareVersion2;
> +  BOOLEAN     PnpHID;
> +
> +  PnpHID = TRUE;
> +
> +  ZeroMem(HID, Size);
> +
> +  //
> +  // Get Manufacturer ID
> +  //
> +  Status = Tpm2GetCapabilityManufactureID(&ManufacturerID);
> +  if (!EFI_ERROR(Status)) {
> +    DEBUG((DEBUG_INFO, "TPM_PT_MANUFACTURER 0x%08x\n",
> ManufacturerID));
> +    //
> +    // ManfacturerID defined in TCG Vendor ID Registry
> +    // may tailed with 0x00 or 0x20
> +    //
> +    if ((ManufacturerID >> 24) == 0x00 || ((ManufacturerID >> 24) == 0x20)) {
> +      //
> +      //  HID containing PNP ID "NNN####"
> +      //   NNN is uppercase letter for Vendor ID specified by manufacturer
> +      //
> +      CopyMem(HID, &ManufacturerID, 3);
> +    } else {
> +      //
> +      //  HID containing ACP ID "NNNN####"
> +      //   NNNN is uppercase letter for Vendor ID specified by manufacturer
> +      //
> +      CopyMem(HID, &ManufacturerID, 4);
> +      PnpHID = FALSE;
> +    }
> +  } else {
> +    DEBUG ((DEBUG_ERROR, "Get TPM_PT_MANUFACTURER failed %x!\n",
> Status));
> +    ASSERT(FALSE);
> +    return Status;
> +  }
> +
> +  Status = Tpm2GetCapabilityFirmwareVersion(&FirmwareVersion1,
> &FirmwareVersion2);
> +  if (!EFI_ERROR(Status)) {
> +    DEBUG((DEBUG_INFO, "TPM_PT_FIRMWARE_VERSION_1 0x%x\n",
> FirmwareVersion1));
> +    DEBUG((DEBUG_INFO, "TPM_PT_FIRMWARE_VERSION_2 0x%x\n",
> FirmwareVersion2));
> +    //
> +    //   #### is Firmware Version 1
> +    //
> +    if (PnpHID) {
> +      AsciiSPrint(HID + 3, TPM_HID_PNP_SIZE - 3, "%02d%02d",
> ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 && 0x0000FFFF));
> +    } else {
> +      AsciiSPrint(HID + 4, TPM_HID_ACPI_SIZE - 4, "%02d%02d",
> ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 && 0x0000FFFF));
> +    }
> +
> +  } else {
> +    DEBUG ((DEBUG_ERROR, "Get TPM_PT_FIRMWARE_VERSION_X
> failed %x!\n", Status));
> +    ASSERT(FALSE);
> +    return Status;
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> +
> +/**
>    This function processes the results of changes in configuration.
> 
>    @param[in]  This               Points to the
> EFI_HII_CONFIG_ACCESS_PROTOCOL.
> @@ -461,12 +538,38 @@ Tcg2Callback (
>       OUT EFI_BROWSER_ACTION_REQUEST            *ActionRequest
>    )
>  {
> -  EFI_INPUT_KEY               Key;
> +  EFI_STATUS                 Status;
> +  EFI_INPUT_KEY              Key;
> +  CHAR8                      HidStr[16];
> +  CHAR16                     UnHidStr[16];
> +  TCG2_CONFIG_PRIVATE_DATA   *Private;
> 
>    if ((This == NULL) || (Value == NULL) || (ActionRequest == NULL)) {
>      return EFI_INVALID_PARAMETER;
>    }
> 
> +  Private = TCG2_CONFIG_PRIVATE_DATA_FROM_THIS (This);
> +
> +  if (Action == EFI_BROWSER_ACTION_FORM_OPEN) {
> +    //
> +    // Update TPM2 HID info
> +    //
> +    if (QuestionId == KEY_TPM_DEVICE) {
> +      Status = GetTpm2HID(HidStr, 16);
> +
> +      if (EFI_ERROR(Status)) {
> +        //
> +        //  Fail to get TPM2 HID
> +        //
> +        HiiSetString (Private->HiiHandle, STRING_TOKEN
> (STR_TPM2_ACPI_HID_CONTENT), L"Unknown", NULL);
> +      } else {
> +        AsciiStrToUnicodeStrS(HidStr, UnHidStr, 16);
> +        HiiSetString (Private->HiiHandle, STRING_TOKEN
> (STR_TPM2_ACPI_HID_CONTENT), UnHidStr, NULL);
> +      }
> +    }
> +    return EFI_SUCCESS;
> +  }
> +
>    if (Action == EFI_BROWSER_ACTION_CHANGING) {
>      if (QuestionId == KEY_TPM_DEVICE_INTERFACE) {
>        EFI_STATUS  Status;
> diff --git a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.h
> b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.h
> index 1b9a845..91d0c27 100644
> --- a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.h
> +++ b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigImpl.h
> @@ -2,7 +2,7 @@
>    The header file of HII Config Access protocol implementation of TCG2
>    configuration module.
> 
> -Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> +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
> @@ -73,6 +73,8 @@ extern TCG2_CONFIG_PRIVATE_DATA
> *mTcg2ConfigPrivateDate;
>  #define TCG2_CONFIG_PRIVATE_DATA_SIGNATURE     SIGNATURE_32 ('T', 'r',
> 'E', 'D')
>  #define TCG2_CONFIG_PRIVATE_DATA_FROM_THIS(a)  CR (a,
> TCG2_CONFIG_PRIVATE_DATA, ConfigAccess,
> TCG2_CONFIG_PRIVATE_DATA_SIGNATURE)
> 
> +#define TPM_HID_PNP_SIZE                                           8
> +#define TPM_HID_ACPI_SIZE                                          9
> 
>  /**
>    This function publish the TCG2 configuration Form for TPM device.
> diff --git a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigStrings.uni
> b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigStrings.uni
> index 7c63f99..64208e0 100644
> --- a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigStrings.uni
> +++ b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigStrings.uni
> @@ -1,7 +1,7 @@
>  /** @file
>    String definitions for TCG2 configuration form.
> 
> -Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
> +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
> @@ -29,6 +29,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY
> KIND, EITHER EXPRESS OR IMPLIED.
>  #string STR_TCG2_ACPI_REVISION_HELP                    #language
> en-US "Rev 3 or Rev 4 (Rev 4 is defined in TCG ACPI Spec 00.37)"
>  #string STR_TCG2_ACPI_REVISION_CONTENT                 #language
> en-US ""
> 
> +#string STR_TPM2_ACPI_HID_PROMPT                  #language en-US
> "HID from TPM2 ACPI Table"
> +#string STR_TPM2_ACPI_HID_HELP                    #language en-US
> "HID from TPM2 ACPI Table: ManfacturerID + FirmwareVersion_1"
> +#string STR_TPM2_ACPI_HID_CONTENT                 #language en-US ""
> +
>  #string STR_TCG2_DEVICE_INTERFACE_STATE_PROMPT         #language
> en-US "Current TPM Device Interface"
>  #string STR_TCG2_DEVICE_INTERFACE_STATE_HELP           #language
> en-US "Current TPM Device Interface: TIS, PTP FIFO, PTP CRB"
>  #string STR_TCG2_DEVICE_INTERFACE_STATE_CONTENT        #language
> en-US ""
> diff --git a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> index 4c6cd6d..aff8cb1 100644
> --- a/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> +++ b/SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
> @@ -397,7 +397,8 @@ UpdateHID (
> 
>          CopyMem(DataPtr, HID, TPM_HID_ACPI_SIZE);
>        }
> -      DEBUG((EFI_D_INFO, "TPM2 ACPI _HID updated to %a\n", HID));
> +      DEBUG((DEBUG_INFO, "TPM2 ACPI _HID is patched to %a\n", DataPtr));
> +
>        return Status;
>      }
>    }
> --
> 1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to