VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c

最後變更 在這個檔案是 99404,由 vboxsync 提交於 20 月 前

Devices/EFI/FirmwareNew: Update to edk2-stable202302 and make it build, bugref:4643

  • 屬性 svn:eol-style 設為 native
檔案大小: 1.9 KB
 
1/** @file
2 Implement the InternalTpm12Detect() function on top of the Tpm12DeviceLib
3 class.
4
5 Copyright (C) 2020, Red Hat, Inc.
6
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8**/
9
10#include <Library/BaseLib.h>
11#include <Library/Tpm12DeviceLib.h>
12
13#include "Tpm12Support.h"
14
15#pragma pack (1)
16typedef struct {
17 TPM_RSP_COMMAND_HDR Hdr;
18 TPM_CURRENT_TICKS CurrentTicks;
19} TPM_RSP_GET_TICKS;
20#pragma pack ()
21
22/**
23 Probe for the TPM for 1.2 version, by sending TPM1.2 GetTicks
24
25 Sending a TPM1.2 command to a TPM2 should return a TPM1.2
26 header (tag = 0xc4) and error code (TPM_BADTAG = 0x1e)
27
28 @retval EFI_SUCCESS TPM version 1.2 probing successful.
29
30 @return Error codes propagated from Tpm12SubmitCommand().
31**/
32STATIC
33EFI_STATUS
34TestTpm12 (
35 )
36{
37 EFI_STATUS Status;
38 TPM_RQU_COMMAND_HDR Command;
39 TPM_RSP_GET_TICKS Response;
40 UINT32 Length;
41
42 Command.tag = SwapBytes16 (TPM_TAG_RQU_COMMAND);
43 Command.paramSize = SwapBytes32 (sizeof (Command));
44 Command.ordinal = SwapBytes32 (TPM_ORD_GetTicks);
45
46 Length = sizeof (Response);
47 Status = Tpm12SubmitCommand (
48 sizeof (Command),
49 (UINT8 *)&Command,
50 &Length,
51 (UINT8 *)&Response
52 );
53 if (EFI_ERROR (Status)) {
54 return Status;
55 }
56
57 return EFI_SUCCESS;
58}
59
60/**
61 Detect the presence of a TPM with interface version 1.2.
62
63 @retval EFI_SUCCESS TPM-1.2 available. The Tpm12RequestUseTpm() and
64 Tpm12SubmitCommand(TPM_ORD_GetTicks) operations
65 (from the Tpm12DeviceLib class) have succeeded.
66
67 @return Error codes propagated from Tpm12RequestUseTpm() and
68 Tpm12SubmitCommand().
69**/
70EFI_STATUS
71InternalTpm12Detect (
72 VOID
73 )
74{
75 EFI_STATUS Status;
76
77 Status = Tpm12RequestUseTpm ();
78 if (EFI_ERROR (Status)) {
79 return Status;
80 }
81
82 return TestTpm12 ();
83}
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette