SecurityPkg/Tpm2CommandLib: add a new function

Tpm2GetCapabilityIsCommandImplemented

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2793

check if the commad is supported by comparing the command code with
command index.

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Chao Zhang <chao.b.zhang@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Signed-off-by: Qi Zhang <qi1.zhang@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Zhang, Qi 2020-07-28 16:20:39 +08:00 committed by mergify[bot]
parent ffde22468e
commit 1b0d659e6d
2 changed files with 56 additions and 0 deletions

View File

@ -790,6 +790,22 @@ Tpm2GetCapabilityAlgorithmSet (
OUT UINT32 *AlgorithmSet OUT UINT32 *AlgorithmSet
); );
/**
This function will query if the command is supported.
@param[In] Command TPM_CC command starts from TPM_CC_FIRST.
@param[out] IsCmdImpl The command is supported or not.
@retval EFI_SUCCESS Operation completed successfully.
@retval EFI_DEVICE_ERROR The command was unsuccessful.
**/
EFI_STATUS
EFIAPI
Tpm2GetCapabilityIsCommandImplemented (
IN TPM_CC Command,
OUT BOOLEAN *IsCmdImpl
);
/** /**
This command is used to check to see if specific combinations of algorithm parameters are supported. This command is used to check to see if specific combinations of algorithm parameters are supported.

View File

@ -39,6 +39,8 @@ typedef struct {
#pragma pack() #pragma pack()
#define TPMA_CC_COMMANDINDEX_MASK 0x2000FFFF
/** /**
This command returns various information regarding the TPM and its current state. This command returns various information regarding the TPM and its current state.
@ -628,6 +630,44 @@ Tpm2GetCapabilityAlgorithmSet (
return EFI_SUCCESS; return EFI_SUCCESS;
} }
/**
This function will query if the command is supported.
@param[In] Command TPM_CC command starts from TPM_CC_FIRST.
@param[out] IsCmdImpl The command is supported or not.
@retval EFI_SUCCESS Operation completed successfully.
@retval EFI_DEVICE_ERROR The command was unsuccessful.
**/
EFI_STATUS
EFIAPI
Tpm2GetCapabilityIsCommandImplemented (
IN TPM_CC Command,
OUT BOOLEAN *IsCmdImpl
)
{
TPMS_CAPABILITY_DATA TpmCap;
TPMI_YES_NO MoreData;
EFI_STATUS Status;
UINT32 Attribute;
Status = Tpm2GetCapability (
TPM_CAP_COMMANDS,
Command,
1,
&MoreData,
&TpmCap
);
if (EFI_ERROR (Status)) {
return Status;
}
CopyMem (&Attribute, &TpmCap.data.command.commandAttributes[0], sizeof (UINT32));
*IsCmdImpl = (Command == (SwapBytes32(Attribute) & TPMA_CC_COMMANDINDEX_MASK));
return EFI_SUCCESS;
}
/** /**
This command is used to check to see if specific combinations of algorithm parameters are supported. This command is used to check to see if specific combinations of algorithm parameters are supported.