162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* Copyright (c) 2022, Intel Corporation. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef _ICE_DDP_H_ 562306a36Sopenharmony_ci#define _ICE_DDP_H_ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include "ice_type.h" 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* Package minimal version supported */ 1062306a36Sopenharmony_ci#define ICE_PKG_SUPP_VER_MAJ 1 1162306a36Sopenharmony_ci#define ICE_PKG_SUPP_VER_MNR 3 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* Package format version */ 1462306a36Sopenharmony_ci#define ICE_PKG_FMT_VER_MAJ 1 1562306a36Sopenharmony_ci#define ICE_PKG_FMT_VER_MNR 0 1662306a36Sopenharmony_ci#define ICE_PKG_FMT_VER_UPD 0 1762306a36Sopenharmony_ci#define ICE_PKG_FMT_VER_DFT 0 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define ICE_PKG_CNT 4 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define ICE_FV_OFFSET_INVAL 0x1FF 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci/* Extraction Sequence (Field Vector) Table */ 2462306a36Sopenharmony_cistruct ice_fv_word { 2562306a36Sopenharmony_ci u8 prot_id; 2662306a36Sopenharmony_ci u16 off; /* Offset within the protocol header */ 2762306a36Sopenharmony_ci u8 resvrd; 2862306a36Sopenharmony_ci} __packed; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define ICE_MAX_NUM_PROFILES 256 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#define ICE_MAX_FV_WORDS 48 3362306a36Sopenharmony_cistruct ice_fv { 3462306a36Sopenharmony_ci struct ice_fv_word ew[ICE_MAX_FV_WORDS]; 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cienum ice_ddp_state { 3862306a36Sopenharmony_ci /* Indicates that this call to ice_init_pkg 3962306a36Sopenharmony_ci * successfully loaded the requested DDP package 4062306a36Sopenharmony_ci */ 4162306a36Sopenharmony_ci ICE_DDP_PKG_SUCCESS = 0, 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci /* Generic error for already loaded errors, it is mapped later to 4462306a36Sopenharmony_ci * the more specific one (one of the next 3) 4562306a36Sopenharmony_ci */ 4662306a36Sopenharmony_ci ICE_DDP_PKG_ALREADY_LOADED = -1, 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci /* Indicates that a DDP package of the same version has already been 4962306a36Sopenharmony_ci * loaded onto the device by a previous call or by another PF 5062306a36Sopenharmony_ci */ 5162306a36Sopenharmony_ci ICE_DDP_PKG_SAME_VERSION_ALREADY_LOADED = -2, 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci /* The device has a DDP package that is not supported by the driver */ 5462306a36Sopenharmony_ci ICE_DDP_PKG_ALREADY_LOADED_NOT_SUPPORTED = -3, 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci /* The device has a compatible package 5762306a36Sopenharmony_ci * (but different from the request) already loaded 5862306a36Sopenharmony_ci */ 5962306a36Sopenharmony_ci ICE_DDP_PKG_COMPATIBLE_ALREADY_LOADED = -4, 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci /* The firmware loaded on the device is not compatible with 6262306a36Sopenharmony_ci * the DDP package loaded 6362306a36Sopenharmony_ci */ 6462306a36Sopenharmony_ci ICE_DDP_PKG_FW_MISMATCH = -5, 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci /* The DDP package file is invalid */ 6762306a36Sopenharmony_ci ICE_DDP_PKG_INVALID_FILE = -6, 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci /* The version of the DDP package provided is higher than 7062306a36Sopenharmony_ci * the driver supports 7162306a36Sopenharmony_ci */ 7262306a36Sopenharmony_ci ICE_DDP_PKG_FILE_VERSION_TOO_HIGH = -7, 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci /* The version of the DDP package provided is lower than the 7562306a36Sopenharmony_ci * driver supports 7662306a36Sopenharmony_ci */ 7762306a36Sopenharmony_ci ICE_DDP_PKG_FILE_VERSION_TOO_LOW = -8, 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci /* The signature of the DDP package file provided is invalid */ 8062306a36Sopenharmony_ci ICE_DDP_PKG_FILE_SIGNATURE_INVALID = -9, 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci /* The DDP package file security revision is too low and not 8362306a36Sopenharmony_ci * supported by firmware 8462306a36Sopenharmony_ci */ 8562306a36Sopenharmony_ci ICE_DDP_PKG_FILE_REVISION_TOO_LOW = -10, 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci /* An error occurred in firmware while loading the DDP package */ 8862306a36Sopenharmony_ci ICE_DDP_PKG_LOAD_ERROR = -11, 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci /* Other errors */ 9162306a36Sopenharmony_ci ICE_DDP_PKG_ERR = -12 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* Package and segment headers and tables */ 9562306a36Sopenharmony_cistruct ice_pkg_hdr { 9662306a36Sopenharmony_ci struct ice_pkg_ver pkg_format_ver; 9762306a36Sopenharmony_ci __le32 seg_count; 9862306a36Sopenharmony_ci __le32 seg_offset[]; 9962306a36Sopenharmony_ci}; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci/* generic segment */ 10262306a36Sopenharmony_cistruct ice_generic_seg_hdr { 10362306a36Sopenharmony_ci#define SEGMENT_TYPE_METADATA 0x00000001 10462306a36Sopenharmony_ci#define SEGMENT_TYPE_ICE 0x00000010 10562306a36Sopenharmony_ci __le32 seg_type; 10662306a36Sopenharmony_ci struct ice_pkg_ver seg_format_ver; 10762306a36Sopenharmony_ci __le32 seg_size; 10862306a36Sopenharmony_ci char seg_id[ICE_PKG_NAME_SIZE]; 10962306a36Sopenharmony_ci}; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci/* ice specific segment */ 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ciunion ice_device_id { 11462306a36Sopenharmony_ci struct { 11562306a36Sopenharmony_ci __le16 device_id; 11662306a36Sopenharmony_ci __le16 vendor_id; 11762306a36Sopenharmony_ci } dev_vend_id; 11862306a36Sopenharmony_ci __le32 id; 11962306a36Sopenharmony_ci}; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_cistruct ice_device_id_entry { 12262306a36Sopenharmony_ci union ice_device_id device; 12362306a36Sopenharmony_ci union ice_device_id sub_device; 12462306a36Sopenharmony_ci}; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_cistruct ice_seg { 12762306a36Sopenharmony_ci struct ice_generic_seg_hdr hdr; 12862306a36Sopenharmony_ci __le32 device_table_count; 12962306a36Sopenharmony_ci struct ice_device_id_entry device_table[]; 13062306a36Sopenharmony_ci}; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_cistruct ice_nvm_table { 13362306a36Sopenharmony_ci __le32 table_count; 13462306a36Sopenharmony_ci __le32 vers[]; 13562306a36Sopenharmony_ci}; 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_cistruct ice_buf { 13862306a36Sopenharmony_ci#define ICE_PKG_BUF_SIZE 4096 13962306a36Sopenharmony_ci u8 buf[ICE_PKG_BUF_SIZE]; 14062306a36Sopenharmony_ci}; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_cistruct ice_buf_table { 14362306a36Sopenharmony_ci __le32 buf_count; 14462306a36Sopenharmony_ci struct ice_buf buf_array[]; 14562306a36Sopenharmony_ci}; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_cistruct ice_run_time_cfg_seg { 14862306a36Sopenharmony_ci struct ice_generic_seg_hdr hdr; 14962306a36Sopenharmony_ci u8 rsvd[8]; 15062306a36Sopenharmony_ci struct ice_buf_table buf_table; 15162306a36Sopenharmony_ci}; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci/* global metadata specific segment */ 15462306a36Sopenharmony_cistruct ice_global_metadata_seg { 15562306a36Sopenharmony_ci struct ice_generic_seg_hdr hdr; 15662306a36Sopenharmony_ci struct ice_pkg_ver pkg_ver; 15762306a36Sopenharmony_ci __le32 rsvd; 15862306a36Sopenharmony_ci char pkg_name[ICE_PKG_NAME_SIZE]; 15962306a36Sopenharmony_ci}; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci#define ICE_MIN_S_OFF 12 16262306a36Sopenharmony_ci#define ICE_MAX_S_OFF 4095 16362306a36Sopenharmony_ci#define ICE_MIN_S_SZ 1 16462306a36Sopenharmony_ci#define ICE_MAX_S_SZ 4084 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci/* section information */ 16762306a36Sopenharmony_cistruct ice_section_entry { 16862306a36Sopenharmony_ci __le32 type; 16962306a36Sopenharmony_ci __le16 offset; 17062306a36Sopenharmony_ci __le16 size; 17162306a36Sopenharmony_ci}; 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci#define ICE_MIN_S_COUNT 1 17462306a36Sopenharmony_ci#define ICE_MAX_S_COUNT 511 17562306a36Sopenharmony_ci#define ICE_MIN_S_DATA_END 12 17662306a36Sopenharmony_ci#define ICE_MAX_S_DATA_END 4096 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci#define ICE_METADATA_BUF 0x80000000 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_cistruct ice_buf_hdr { 18162306a36Sopenharmony_ci __le16 section_count; 18262306a36Sopenharmony_ci __le16 data_end; 18362306a36Sopenharmony_ci struct ice_section_entry section_entry[]; 18462306a36Sopenharmony_ci}; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci#define ICE_MAX_ENTRIES_IN_BUF(hd_sz, ent_sz) \ 18762306a36Sopenharmony_ci ((ICE_PKG_BUF_SIZE - \ 18862306a36Sopenharmony_ci struct_size_t(struct ice_buf_hdr, section_entry, 1) - (hd_sz)) / \ 18962306a36Sopenharmony_ci (ent_sz)) 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci/* ice package section IDs */ 19262306a36Sopenharmony_ci#define ICE_SID_METADATA 1 19362306a36Sopenharmony_ci#define ICE_SID_XLT0_SW 10 19462306a36Sopenharmony_ci#define ICE_SID_XLT_KEY_BUILDER_SW 11 19562306a36Sopenharmony_ci#define ICE_SID_XLT1_SW 12 19662306a36Sopenharmony_ci#define ICE_SID_XLT2_SW 13 19762306a36Sopenharmony_ci#define ICE_SID_PROFID_TCAM_SW 14 19862306a36Sopenharmony_ci#define ICE_SID_PROFID_REDIR_SW 15 19962306a36Sopenharmony_ci#define ICE_SID_FLD_VEC_SW 16 20062306a36Sopenharmony_ci#define ICE_SID_CDID_KEY_BUILDER_SW 17 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_cistruct ice_meta_sect { 20362306a36Sopenharmony_ci struct ice_pkg_ver ver; 20462306a36Sopenharmony_ci#define ICE_META_SECT_NAME_SIZE 28 20562306a36Sopenharmony_ci char name[ICE_META_SECT_NAME_SIZE]; 20662306a36Sopenharmony_ci __le32 track_id; 20762306a36Sopenharmony_ci}; 20862306a36Sopenharmony_ci 20962306a36Sopenharmony_ci#define ICE_SID_CDID_REDIR_SW 18 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci#define ICE_SID_XLT0_ACL 20 21262306a36Sopenharmony_ci#define ICE_SID_XLT_KEY_BUILDER_ACL 21 21362306a36Sopenharmony_ci#define ICE_SID_XLT1_ACL 22 21462306a36Sopenharmony_ci#define ICE_SID_XLT2_ACL 23 21562306a36Sopenharmony_ci#define ICE_SID_PROFID_TCAM_ACL 24 21662306a36Sopenharmony_ci#define ICE_SID_PROFID_REDIR_ACL 25 21762306a36Sopenharmony_ci#define ICE_SID_FLD_VEC_ACL 26 21862306a36Sopenharmony_ci#define ICE_SID_CDID_KEY_BUILDER_ACL 27 21962306a36Sopenharmony_ci#define ICE_SID_CDID_REDIR_ACL 28 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci#define ICE_SID_XLT0_FD 30 22262306a36Sopenharmony_ci#define ICE_SID_XLT_KEY_BUILDER_FD 31 22362306a36Sopenharmony_ci#define ICE_SID_XLT1_FD 32 22462306a36Sopenharmony_ci#define ICE_SID_XLT2_FD 33 22562306a36Sopenharmony_ci#define ICE_SID_PROFID_TCAM_FD 34 22662306a36Sopenharmony_ci#define ICE_SID_PROFID_REDIR_FD 35 22762306a36Sopenharmony_ci#define ICE_SID_FLD_VEC_FD 36 22862306a36Sopenharmony_ci#define ICE_SID_CDID_KEY_BUILDER_FD 37 22962306a36Sopenharmony_ci#define ICE_SID_CDID_REDIR_FD 38 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci#define ICE_SID_XLT0_RSS 40 23262306a36Sopenharmony_ci#define ICE_SID_XLT_KEY_BUILDER_RSS 41 23362306a36Sopenharmony_ci#define ICE_SID_XLT1_RSS 42 23462306a36Sopenharmony_ci#define ICE_SID_XLT2_RSS 43 23562306a36Sopenharmony_ci#define ICE_SID_PROFID_TCAM_RSS 44 23662306a36Sopenharmony_ci#define ICE_SID_PROFID_REDIR_RSS 45 23762306a36Sopenharmony_ci#define ICE_SID_FLD_VEC_RSS 46 23862306a36Sopenharmony_ci#define ICE_SID_CDID_KEY_BUILDER_RSS 47 23962306a36Sopenharmony_ci#define ICE_SID_CDID_REDIR_RSS 48 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci#define ICE_SID_RXPARSER_MARKER_PTYPE 55 24262306a36Sopenharmony_ci#define ICE_SID_RXPARSER_BOOST_TCAM 56 24362306a36Sopenharmony_ci#define ICE_SID_RXPARSER_METADATA_INIT 58 24462306a36Sopenharmony_ci#define ICE_SID_TXPARSER_BOOST_TCAM 66 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci#define ICE_SID_XLT0_PE 80 24762306a36Sopenharmony_ci#define ICE_SID_XLT_KEY_BUILDER_PE 81 24862306a36Sopenharmony_ci#define ICE_SID_XLT1_PE 82 24962306a36Sopenharmony_ci#define ICE_SID_XLT2_PE 83 25062306a36Sopenharmony_ci#define ICE_SID_PROFID_TCAM_PE 84 25162306a36Sopenharmony_ci#define ICE_SID_PROFID_REDIR_PE 85 25262306a36Sopenharmony_ci#define ICE_SID_FLD_VEC_PE 86 25362306a36Sopenharmony_ci#define ICE_SID_CDID_KEY_BUILDER_PE 87 25462306a36Sopenharmony_ci#define ICE_SID_CDID_REDIR_PE 88 25562306a36Sopenharmony_ci 25662306a36Sopenharmony_ci/* Label Metadata section IDs */ 25762306a36Sopenharmony_ci#define ICE_SID_LBL_FIRST 0x80000010 25862306a36Sopenharmony_ci#define ICE_SID_LBL_RXPARSER_TMEM 0x80000018 25962306a36Sopenharmony_ci/* The following define MUST be updated to reflect the last label section ID */ 26062306a36Sopenharmony_ci#define ICE_SID_LBL_LAST 0x80000038 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci/* Label ICE runtime configuration section IDs */ 26362306a36Sopenharmony_ci#define ICE_SID_TX_5_LAYER_TOPO 0x10 26462306a36Sopenharmony_ci 26562306a36Sopenharmony_cienum ice_block { 26662306a36Sopenharmony_ci ICE_BLK_SW = 0, 26762306a36Sopenharmony_ci ICE_BLK_ACL, 26862306a36Sopenharmony_ci ICE_BLK_FD, 26962306a36Sopenharmony_ci ICE_BLK_RSS, 27062306a36Sopenharmony_ci ICE_BLK_PE, 27162306a36Sopenharmony_ci ICE_BLK_COUNT 27262306a36Sopenharmony_ci}; 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_cienum ice_sect { 27562306a36Sopenharmony_ci ICE_XLT0 = 0, 27662306a36Sopenharmony_ci ICE_XLT_KB, 27762306a36Sopenharmony_ci ICE_XLT1, 27862306a36Sopenharmony_ci ICE_XLT2, 27962306a36Sopenharmony_ci ICE_PROF_TCAM, 28062306a36Sopenharmony_ci ICE_PROF_REDIR, 28162306a36Sopenharmony_ci ICE_VEC_TBL, 28262306a36Sopenharmony_ci ICE_CDID_KB, 28362306a36Sopenharmony_ci ICE_CDID_REDIR, 28462306a36Sopenharmony_ci ICE_SECT_COUNT 28562306a36Sopenharmony_ci}; 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_ci/* package labels */ 28862306a36Sopenharmony_cistruct ice_label { 28962306a36Sopenharmony_ci __le16 value; 29062306a36Sopenharmony_ci#define ICE_PKG_LABEL_SIZE 64 29162306a36Sopenharmony_ci char name[ICE_PKG_LABEL_SIZE]; 29262306a36Sopenharmony_ci}; 29362306a36Sopenharmony_ci 29462306a36Sopenharmony_cistruct ice_label_section { 29562306a36Sopenharmony_ci __le16 count; 29662306a36Sopenharmony_ci struct ice_label label[]; 29762306a36Sopenharmony_ci}; 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ci#define ICE_MAX_LABELS_IN_BUF \ 30062306a36Sopenharmony_ci ICE_MAX_ENTRIES_IN_BUF(struct_size_t(struct ice_label_section, \ 30162306a36Sopenharmony_ci label, 1) - \ 30262306a36Sopenharmony_ci sizeof(struct ice_label), \ 30362306a36Sopenharmony_ci sizeof(struct ice_label)) 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_cistruct ice_sw_fv_section { 30662306a36Sopenharmony_ci __le16 count; 30762306a36Sopenharmony_ci __le16 base_offset; 30862306a36Sopenharmony_ci struct ice_fv fv[]; 30962306a36Sopenharmony_ci}; 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_cistruct ice_sw_fv_list_entry { 31262306a36Sopenharmony_ci struct list_head list_entry; 31362306a36Sopenharmony_ci u32 profile_id; 31462306a36Sopenharmony_ci struct ice_fv *fv_ptr; 31562306a36Sopenharmony_ci}; 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci/* The BOOST TCAM stores the match packet header in reverse order, meaning 31862306a36Sopenharmony_ci * the fields are reversed; in addition, this means that the normally big endian 31962306a36Sopenharmony_ci * fields of the packet are now little endian. 32062306a36Sopenharmony_ci */ 32162306a36Sopenharmony_cistruct ice_boost_key_value { 32262306a36Sopenharmony_ci#define ICE_BOOST_REMAINING_HV_KEY 15 32362306a36Sopenharmony_ci u8 remaining_hv_key[ICE_BOOST_REMAINING_HV_KEY]; 32462306a36Sopenharmony_ci __le16 hv_dst_port_key; 32562306a36Sopenharmony_ci __le16 hv_src_port_key; 32662306a36Sopenharmony_ci u8 tcam_search_key; 32762306a36Sopenharmony_ci} __packed; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_cistruct ice_boost_key { 33062306a36Sopenharmony_ci struct ice_boost_key_value key; 33162306a36Sopenharmony_ci struct ice_boost_key_value key2; 33262306a36Sopenharmony_ci}; 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci/* package Boost TCAM entry */ 33562306a36Sopenharmony_cistruct ice_boost_tcam_entry { 33662306a36Sopenharmony_ci __le16 addr; 33762306a36Sopenharmony_ci __le16 reserved; 33862306a36Sopenharmony_ci /* break up the 40 bytes of key into different fields */ 33962306a36Sopenharmony_ci struct ice_boost_key key; 34062306a36Sopenharmony_ci u8 boost_hit_index_group; 34162306a36Sopenharmony_ci /* The following contains bitfields which are not on byte boundaries. 34262306a36Sopenharmony_ci * These fields are currently unused by driver software. 34362306a36Sopenharmony_ci */ 34462306a36Sopenharmony_ci#define ICE_BOOST_BIT_FIELDS 43 34562306a36Sopenharmony_ci u8 bit_fields[ICE_BOOST_BIT_FIELDS]; 34662306a36Sopenharmony_ci}; 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_cistruct ice_boost_tcam_section { 34962306a36Sopenharmony_ci __le16 count; 35062306a36Sopenharmony_ci __le16 reserved; 35162306a36Sopenharmony_ci struct ice_boost_tcam_entry tcam[]; 35262306a36Sopenharmony_ci}; 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci#define ICE_MAX_BST_TCAMS_IN_BUF \ 35562306a36Sopenharmony_ci ICE_MAX_ENTRIES_IN_BUF(struct_size_t(struct ice_boost_tcam_section, \ 35662306a36Sopenharmony_ci tcam, 1) - \ 35762306a36Sopenharmony_ci sizeof(struct ice_boost_tcam_entry), \ 35862306a36Sopenharmony_ci sizeof(struct ice_boost_tcam_entry)) 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci/* package Marker Ptype TCAM entry */ 36162306a36Sopenharmony_cistruct ice_marker_ptype_tcam_entry { 36262306a36Sopenharmony_ci#define ICE_MARKER_PTYPE_TCAM_ADDR_MAX 1024 36362306a36Sopenharmony_ci __le16 addr; 36462306a36Sopenharmony_ci __le16 ptype; 36562306a36Sopenharmony_ci u8 keys[20]; 36662306a36Sopenharmony_ci}; 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_cistruct ice_marker_ptype_tcam_section { 36962306a36Sopenharmony_ci __le16 count; 37062306a36Sopenharmony_ci __le16 reserved; 37162306a36Sopenharmony_ci struct ice_marker_ptype_tcam_entry tcam[]; 37262306a36Sopenharmony_ci}; 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci#define ICE_MAX_MARKER_PTYPE_TCAMS_IN_BUF \ 37562306a36Sopenharmony_ci ICE_MAX_ENTRIES_IN_BUF(struct_size_t(struct ice_marker_ptype_tcam_section, tcam, \ 37662306a36Sopenharmony_ci 1) - \ 37762306a36Sopenharmony_ci sizeof(struct ice_marker_ptype_tcam_entry), \ 37862306a36Sopenharmony_ci sizeof(struct ice_marker_ptype_tcam_entry)) 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_cistruct ice_xlt1_section { 38162306a36Sopenharmony_ci __le16 count; 38262306a36Sopenharmony_ci __le16 offset; 38362306a36Sopenharmony_ci u8 value[]; 38462306a36Sopenharmony_ci}; 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_cistruct ice_xlt2_section { 38762306a36Sopenharmony_ci __le16 count; 38862306a36Sopenharmony_ci __le16 offset; 38962306a36Sopenharmony_ci __le16 value[]; 39062306a36Sopenharmony_ci}; 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_cistruct ice_prof_redir_section { 39362306a36Sopenharmony_ci __le16 count; 39462306a36Sopenharmony_ci __le16 offset; 39562306a36Sopenharmony_ci u8 redir_value[]; 39662306a36Sopenharmony_ci}; 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci/* package buffer building */ 39962306a36Sopenharmony_ci 40062306a36Sopenharmony_cistruct ice_buf_build { 40162306a36Sopenharmony_ci struct ice_buf buf; 40262306a36Sopenharmony_ci u16 reserved_section_table_entries; 40362306a36Sopenharmony_ci}; 40462306a36Sopenharmony_ci 40562306a36Sopenharmony_cistruct ice_pkg_enum { 40662306a36Sopenharmony_ci struct ice_buf_table *buf_table; 40762306a36Sopenharmony_ci u32 buf_idx; 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_ci u32 type; 41062306a36Sopenharmony_ci struct ice_buf_hdr *buf; 41162306a36Sopenharmony_ci u32 sect_idx; 41262306a36Sopenharmony_ci void *sect; 41362306a36Sopenharmony_ci u32 sect_type; 41462306a36Sopenharmony_ci 41562306a36Sopenharmony_ci u32 entry_idx; 41662306a36Sopenharmony_ci void *(*handler)(u32 sect_type, void *section, u32 index, u32 *offset); 41762306a36Sopenharmony_ci}; 41862306a36Sopenharmony_ci 41962306a36Sopenharmony_ciint ice_aq_upload_section(struct ice_hw *hw, struct ice_buf_hdr *pkg_buf, 42062306a36Sopenharmony_ci u16 buf_size, struct ice_sq_cd *cd); 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_civoid *ice_pkg_buf_alloc_section(struct ice_buf_build *bld, u32 type, u16 size); 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_cistruct ice_buf_build *ice_pkg_buf_alloc(struct ice_hw *hw); 42562306a36Sopenharmony_ci 42662306a36Sopenharmony_ciint ice_update_pkg_no_lock(struct ice_hw *hw, struct ice_buf *bufs, u32 count); 42762306a36Sopenharmony_ciint ice_update_pkg(struct ice_hw *hw, struct ice_buf *bufs, u32 count); 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_ciint ice_pkg_buf_reserve_section(struct ice_buf_build *bld, u16 count); 43062306a36Sopenharmony_ciu16 ice_pkg_buf_get_active_sections(struct ice_buf_build *bld); 43162306a36Sopenharmony_civoid *ice_pkg_enum_section(struct ice_seg *ice_seg, struct ice_pkg_enum *state, 43262306a36Sopenharmony_ci u32 sect_type); 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ci#endif 435