brintos

brintos / linux-shallow public Read only

0
0
Text · 2.8 KiB · 6d009a9 Raw
136 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Copyright © 2023 Intel Corporation4 */5 6#ifndef _INTEL_GSC_BINARY_HEADERS_H_7#define _INTEL_GSC_BINARY_HEADERS_H_8 9#include <linux/types.h>10 11struct intel_gsc_version {12	u16 major;13	u16 minor;14	u16 hotfix;15	u16 build;16} __packed;17 18struct intel_gsc_partition {19	u32 offset;20	u32 size;21} __packed;22 23struct intel_gsc_layout_pointers {24	u8 rom_bypass_vector[16];25 26	/* size of pointers layout not including ROM bypass vector */27	u16 size;28 29	/*30	 * bit0: Backup copy of layout pointers exist31	 * bits1-15: reserved32	 */33	u8 flags;34 35	u8 reserved;36 37	u32 crc32;38 39	struct intel_gsc_partition datap;40	struct intel_gsc_partition boot1;41	struct intel_gsc_partition boot2;42	struct intel_gsc_partition boot3;43	struct intel_gsc_partition boot4;44	struct intel_gsc_partition boot5;45	struct intel_gsc_partition temp_pages;46} __packed;47 48/* Boot partition structures */49struct intel_gsc_bpdt_header {50	u32 signature;51#define INTEL_GSC_BPDT_HEADER_SIGNATURE 0x000055AA52 53	u16 descriptor_count; /* num of entries after the header */54 55	u8 version;56	u8 configuration;57 58	u32 crc32;59 60	u32 build_version;61	struct intel_gsc_version tool_version;62} __packed;63 64struct intel_gsc_bpdt_entry {65	/*66	 * Bits 0-15: BPDT entry type67	 * Bits 16-17: reserved68	 * Bit 18: code sub-partition69	 * Bits 19-31: reserved70	 */71	u32 type;72#define INTEL_GSC_BPDT_ENTRY_TYPE_MASK GENMASK(15, 0)73#define INTEL_GSC_BPDT_ENTRY_TYPE_GSC_RBE 0x174 75	u32 sub_partition_offset; /* from the base of the BPDT header */76	u32 sub_partition_size;77} __packed;78 79/* Code partition directory (CPD) structures */80struct intel_gsc_cpd_header_v2 {81	u32 header_marker;82#define INTEL_GSC_CPD_HEADER_MARKER 0x4450432483 84	u32 num_of_entries;85	u8 header_version;86	u8 entry_version;87	u8 header_length; /* in bytes */88	u8 flags;89	u32 partition_name;90	u32 crc32;91} __packed;92 93struct intel_gsc_cpd_entry {94	u8 name[12];95 96	/*97	 * Bits 0-24: offset from the beginning of the code partition98	 * Bit 25: huffman compressed99	 * Bits 26-31: reserved100	 */101	u32 offset;102#define INTEL_GSC_CPD_ENTRY_OFFSET_MASK GENMASK(24, 0)103#define INTEL_GSC_CPD_ENTRY_HUFFMAN_COMP BIT(25)104 105	/*106	 * Module/Item length, in bytes. For Huffman-compressed modules, this107	 * refers to the uncompressed size. For software-compressed modules,108	 * this refers to the compressed size.109	 */110	u32 length;111 112	u8 reserved[4];113} __packed;114 115struct intel_gsc_manifest_header {116	u32 header_type; /* 0x4 for manifest type */117	u32 header_length; /* in dwords */118	u32 header_version;119	u32 flags;120	u32 vendor;121	u32 date;122	u32 size; /* In dwords, size of entire manifest (header + extensions) */123	u32 header_id;124	u32 internal_data;125	struct intel_gsc_version fw_version;126	u32 security_version;127	struct intel_gsc_version meu_kit_version;128	u32 meu_manifest_version;129	u8 general_data[4];130	u8 reserved3[56];131	u32 modulus_size; /* in dwords */132	u32 exponent_size; /* in dwords */133} __packed;134 135#endif136