Linux Audio

Check our new training course

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