1#![forbid(unsafe_code)]
7
8use inspect::Inspect;
9use mesh::MeshPayload;
10use vm_resource::Resource;
11use vm_resource::ResourceId;
12use vm_resource::ResourceKind;
13use vm_resource::kind::ChipsetDeviceHandleKind;
14use vm_resource::kind::NonVolatileStoreKind;
15
16#[derive(MeshPayload)]
18pub struct TpmDeviceHandle {
19 pub ppi_store: Resource<NonVolatileStoreKind>,
21 pub nvram_store: Resource<NonVolatileStoreKind>,
23 pub refresh_tpm_seeds: bool,
25 pub ak_cert_type: TpmAkCertTypeResource,
27 pub register_layout: TpmRegisterLayout,
29 pub guest_secret_key: Option<Vec<u8>>,
31 pub logger: Option<Resource<TpmLoggerKind>>,
33}
34
35impl ResourceId<ChipsetDeviceHandleKind> for TpmDeviceHandle {
36 const ID: &'static str = "tpm";
37}
38
39pub enum RequestAkCertKind {}
41
42impl ResourceKind for RequestAkCertKind {
43 const NAME: &'static str = "tpm_request_ak_cert";
44}
45
46#[derive(MeshPayload)]
48pub enum TpmAkCertTypeResource {
49 None,
51 Trusted(Resource<RequestAkCertKind>),
54 HwAttested(Resource<RequestAkCertKind>),
58}
59
60#[derive(Inspect, MeshPayload, PartialEq)]
62pub enum TpmRegisterLayout {
63 IoPort,
65 Mmio,
67}
68
69pub enum TpmLoggerKind {}
71
72impl ResourceKind for TpmLoggerKind {
73 const NAME: &'static str = "tpm_logger";
74}