Loading...
Note: File does not exist in v4.6.
1/* SPDX-License-Identifier: MIT */
2/*
3 * Copyright © 2023 Intel Corporation
4 */
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 exist
31 * bits1-15: reserved
32 */
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 0x000055AA
52
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 type
67 * Bits 16-17: reserved
68 * Bit 18: code sub-partition
69 * Bits 19-31: reserved
70 */
71 u32 type;
72#define INTEL_GSC_BPDT_ENTRY_TYPE_MASK GENMASK(15, 0)
73#define INTEL_GSC_BPDT_ENTRY_TYPE_GSC_RBE 0x1
74
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 0x44504324
83
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 partition
98 * Bit 25: huffman compressed
99 * Bits 26-31: reserved
100 */
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, this
107 * 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#endif