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