106 lines
2.4 KiB
C
106 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/* Copyright (C) 2015--2024 Intel Corporation */
|
|
|
|
#ifndef IPU6_CPD_H
|
|
#define IPU6_CPD_H
|
|
|
|
struct ipu6_device;
|
|
struct ipu6_bus_device;
|
|
|
|
#define IPU6_CPD_SIZE_OF_FW_ARCH_VERSION 7
|
|
#define IPU6_CPD_SIZE_OF_SYSTEM_VERSION 11
|
|
#define IPU6_CPD_SIZE_OF_COMPONENT_NAME 12
|
|
|
|
#define IPU6_CPD_METADATA_EXTN_TYPE_IUNIT 0x10
|
|
|
|
#define IPU6_CPD_METADATA_IMAGE_TYPE_RESERVED 0
|
|
#define IPU6_CPD_METADATA_IMAGE_TYPE_BOOTLOADER 1
|
|
#define IPU6_CPD_METADATA_IMAGE_TYPE_MAIN_FIRMWARE 2
|
|
|
|
#define IPU6_CPD_PKG_DIR_PSYS_SERVER_IDX 0
|
|
#define IPU6_CPD_PKG_DIR_ISYS_SERVER_IDX 1
|
|
|
|
#define IPU6_CPD_PKG_DIR_CLIENT_PG_TYPE 3
|
|
|
|
#define IPU6_CPD_METADATA_HASH_KEY_SIZE 48
|
|
#define IPU6SE_CPD_METADATA_HASH_KEY_SIZE 32
|
|
|
|
struct ipu6_cpd_module_data_hdr {
|
|
u32 hdr_len;
|
|
u32 endian;
|
|
u32 fw_pkg_date;
|
|
u32 hive_sdk_date;
|
|
u32 compiler_date;
|
|
u32 target_platform_type;
|
|
u8 sys_ver[IPU6_CPD_SIZE_OF_SYSTEM_VERSION];
|
|
u8 fw_arch_ver[IPU6_CPD_SIZE_OF_FW_ARCH_VERSION];
|
|
u8 rsvd[2];
|
|
} __packed;
|
|
|
|
/*
|
|
* ipu6_cpd_hdr structure updated as the chksum and
|
|
* sub_partition_name is unused on host side
|
|
* CSE layout version 1.6 for IPU6SE (hdr_len = 0x10)
|
|
* CSE layout version 1.7 for IPU6 (hdr_len = 0x14)
|
|
*/
|
|
struct ipu6_cpd_hdr {
|
|
u32 hdr_mark;
|
|
u32 ent_cnt;
|
|
u8 hdr_ver;
|
|
u8 ent_ver;
|
|
u8 hdr_len;
|
|
} __packed;
|
|
|
|
struct ipu6_cpd_ent {
|
|
u8 name[IPU6_CPD_SIZE_OF_COMPONENT_NAME];
|
|
u32 offset;
|
|
u32 len;
|
|
u8 rsvd[4];
|
|
} __packed;
|
|
|
|
struct ipu6_cpd_metadata_cmpnt_hdr {
|
|
u32 id;
|
|
u32 size;
|
|
u32 ver;
|
|
} __packed;
|
|
|
|
struct ipu6_cpd_metadata_cmpnt {
|
|
struct ipu6_cpd_metadata_cmpnt_hdr hdr;
|
|
u8 sha2_hash[IPU6_CPD_METADATA_HASH_KEY_SIZE];
|
|
u32 entry_point;
|
|
u32 icache_base_offs;
|
|
u8 attrs[16];
|
|
} __packed;
|
|
|
|
struct ipu6se_cpd_metadata_cmpnt {
|
|
struct ipu6_cpd_metadata_cmpnt_hdr hdr;
|
|
u8 sha2_hash[IPU6SE_CPD_METADATA_HASH_KEY_SIZE];
|
|
u32 entry_point;
|
|
u32 icache_base_offs;
|
|
u8 attrs[16];
|
|
} __packed;
|
|
|
|
struct ipu6_cpd_metadata_extn {
|
|
u32 extn_type;
|
|
u32 len;
|
|
u32 img_type;
|
|
u8 rsvd[16];
|
|
} __packed;
|
|
|
|
struct ipu6_cpd_client_pkg_hdr {
|
|
u32 prog_list_offs;
|
|
u32 prog_list_size;
|
|
u32 prog_desc_offs;
|
|
u32 prog_desc_size;
|
|
u32 pg_manifest_offs;
|
|
u32 pg_manifest_size;
|
|
u32 prog_bin_offs;
|
|
u32 prog_bin_size;
|
|
} __packed;
|
|
|
|
int ipu6_cpd_create_pkg_dir(struct ipu6_bus_device *adev, const void *src);
|
|
void ipu6_cpd_free_pkg_dir(struct ipu6_bus_device *adev);
|
|
int ipu6_cpd_validate_cpd_file(struct ipu6_device *isp, const void *cpd_file,
|
|
unsigned long cpd_file_size);
|
|
#endif /* IPU6_CPD_H */
|