acrn-hypervisor/misc/config_tools/board_inspector/acpiparser/tpm2.py
Geoffroy Van Cutsem 8b16be9185 Remove "All rights reserved" string headers
Many of the license and Intel copyright headers include the "All rights
reserved" string. It is not relevant in the context of the BSD-3-Clause
license that the code is released under. This patch removes those strings
throughout the code (hypervisor, devicemodel and misc).

Tracked-On: #7254
Signed-off-by: Geoffroy Van Cutsem <geoffroy.vancutsem@intel.com>
2022-04-06 13:21:02 +08:00

52 lines
1.8 KiB
Python

# Copyright (C) 2021 Intel Corporation.
#
# SPDX-License-Identifier: BSD-3-Clause
#
import ctypes
import logging
import inspectorlib.cdata as cdata
from acpiparser._utils import TableHeader
def tpm2_optional_data(data_len):
start_method_data_len = 0
has_log_area = False
if data_len <= 12:
start_method_data_len = data_len
elif data_len == 24:
start_method_data_len = 12
has_log_area = True
else:
start_method_data_len = 12
logging.debug(f"TPM2 data length: {data_len + 52} is greater than 64 bytes but less than 76 bytes.")
logging.debug(f"The TPM2 data is still processed but the 65 to {data_len + 52} bytes are discard.")
return start_method_data_len, has_log_area
def tpm2_factory(start_method_data_len, has_log_area):
class TPM2(cdata.Struct):
_pack_ = 1
_fields_ = [
('header', TableHeader),
('platform_class', ctypes.c_uint16),
('reserved', ctypes.c_uint16),
('address_of_control_area', ctypes.c_uint64),
('start_method', ctypes.c_uint32),
('start_method_specific_parameters', ctypes.c_ubyte * start_method_data_len),
] + ([
('log_area_minimum_length', ctypes.c_uint32),
('log_area_start_address', ctypes.c_uint64),
] if has_log_area else [])
return TPM2
def TPM2(val):
"""Create class based on decode of a TPM2 table from filename."""
if isinstance(val, str):
base_length = 52
data = open(val, mode='rb').read()
start_method_data_len, has_log_area = tpm2_optional_data(len(data) - base_length)
return tpm2_factory(start_method_data_len, has_log_area).from_buffer_copy(data)
elif isinstance(val, bytearray):
return tpm2_factory(12, True).from_buffer(val) if len(val) > 64 else tpm2_factory(12, False).from_buffer(val)