mirror of
https://git.proxmox.com/git/fwupd
synced 2025-06-13 08:01:24 +00:00
165 lines
4.6 KiB
C
165 lines
4.6 KiB
C
/*
|
|
* Copyright (C) 2022 Intel
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.1+
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <glib.h>
|
|
|
|
#define HECI1_CSE_FS_FWUPDATE_STATE_IDLE_BIT (1 << 11)
|
|
#define HECI1_CSE_FS_INITSTATE_COMPLETED_BIT (1 << 9)
|
|
#define HECI1_CSE_GS1_PHASE_FWUPDATE 7
|
|
#define HECI1_CSE_FS_FWUPD_PHASE_SHIFT 28
|
|
#define HECI1_CSE_FS_FWUPD_PHASE_MASK 0xF
|
|
#define HECI1_CSE_FS_FWUPD_PERCENT_SHIFT 16
|
|
#define HECI1_CSE_FS_FWUPD_PERCENT_MASK 0xFF
|
|
#define HECI1_CSE_FS_MODE_MASK 0x3
|
|
#define HECI1_CSE_FS_CP_MODE 0x3
|
|
|
|
enum gsc_fwu_heci_partition_version {
|
|
GSC_FWU_HECI_PART_VERSION_INVALID = 0,
|
|
GSC_FWU_HECI_PART_VERSION_GFX_FW = 1,
|
|
GSC_FWU_HECI_PART_VERSION_OPROM_DATA = 2,
|
|
GSC_FWU_HECI_PART_VERSION_OPROM_CODE = 3,
|
|
};
|
|
|
|
enum gsc_fwu_heci_payload_type {
|
|
GSC_FWU_HECI_PAYLOAD_TYPE_INVALID = 0,
|
|
GSC_FWU_HECI_PAYLOAD_TYPE_GFX_FW = 1,
|
|
GSC_FWU_HECI_PAYLOAD_TYPE_OPROM_DATA = 2,
|
|
GSC_FWU_HECI_PAYLOAD_TYPE_OPROM_CODE = 3,
|
|
GSC_FWU_HECI_PAYLOAD_TYPE_FWDATA = 5,
|
|
};
|
|
|
|
enum gsc_fwu_heci_command_id {
|
|
GSC_FWU_HECI_COMMAND_ID_INVALID = 0,
|
|
GSC_FWU_HECI_COMMAND_ID_START, /* start firmware updated flow */
|
|
GSC_FWU_HECI_COMMAND_ID_DATA, /* send firmware data to device */
|
|
GSC_FWU_HECI_COMMAND_ID_END, /* last command in update */
|
|
GSC_FWU_HECI_COMMAND_ID_GET_VERSION, /* retrieve version of a firmware */
|
|
GSC_FWU_HECI_COMMAND_ID_NO_UPDATE, /* do not wait for firmware update */
|
|
GSC_FWU_HECI_COMMAND_ID_GET_IP_VERSION, /* retrieve version of a partition */
|
|
GSC_FWU_HECI_COMMAND_ID_GET_CONFIG, /* get hardware config */
|
|
GSC_FWU_HECI_COMMAND_ID_STATUS, /* get status of most recent update */
|
|
GSC_FWU_HECI_COMMAND_ID_GET_GFX_DATA_UPDATE_INFO, /* get signed firmware data info */
|
|
GSC_FWU_HECI_COMMAND_ID_GET_SUBSYSTEM_IDS, /* get subsystem ids (vid/did) */
|
|
GSC_FWU_HECI_COMMAND_MAX
|
|
};
|
|
|
|
struct gsc_fwu_heci_header {
|
|
guint8 command_id;
|
|
guint8 is_response : 1;
|
|
guint8 reserved : 7;
|
|
guint8 reserved2[2];
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_response {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 status;
|
|
guint32 reserved;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_version_req {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 partition;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_version_resp {
|
|
struct gsc_fwu_heci_response response;
|
|
guint32 partition;
|
|
guint32 version_length;
|
|
guint8 version[];
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fw_data_heci_version_req {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 reserved[2];
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fw_data_heci_version_resp {
|
|
struct gsc_fwu_heci_response response;
|
|
guint32 format_version;
|
|
guint32 oem_version_nvm;
|
|
guint32 oem_version_fitb;
|
|
guint16 major_version;
|
|
guint16 major_vcn;
|
|
guint32 oem_version_fitb_valid;
|
|
guint32 flags;
|
|
guint32 reserved[7];
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_get_config_message_req {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 reserved[2];
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_get_config_message_resp {
|
|
struct gsc_fwu_heci_response response;
|
|
guint32 format_version;
|
|
guint32 hw_step;
|
|
guint32 hw_sku;
|
|
guint32 oprom_code_devid_enforcement : 1;
|
|
guint32 flags : 31;
|
|
guint32 reserved[7];
|
|
guint32 debug_config;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_get_subsystem_ids_message_req {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 reserved[2];
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_get_subsystem_ids_message_resp {
|
|
struct gsc_fwu_heci_response response;
|
|
guint16 ssvid;
|
|
guint16 ssdid;
|
|
guint32 reserved[2];
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_start_flags {
|
|
guint32 force_update : 1;
|
|
guint32 reserved : 31;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_start_req {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 update_img_length;
|
|
guint32 payload_type;
|
|
struct gsc_fwu_heci_start_flags flags;
|
|
guint32 reserved[8];
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_start_resp {
|
|
struct gsc_fwu_heci_response response;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_data_req {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 data_length;
|
|
guint32 reserved;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_data_resp {
|
|
struct gsc_fwu_heci_response response;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_end_req {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 reserved;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_end_resp {
|
|
struct gsc_fwu_heci_response response;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_no_update_req {
|
|
struct gsc_fwu_heci_header header;
|
|
guint32 reserved;
|
|
} __attribute__((packed));
|
|
|
|
struct gsc_fwu_heci_image_metadata {
|
|
guint32 metadata_format_version;
|
|
} __attribute__((packed));
|