1503b82deSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2503b82deSJerin Jacob * Copyright(C) 2021 Marvell. 3503b82deSJerin Jacob */ 4503b82deSJerin Jacob 5503b82deSJerin Jacob #ifndef __ROC_MBOX_H__ 6503b82deSJerin Jacob #define __ROC_MBOX_H__ 7503b82deSJerin Jacob 8503b82deSJerin Jacob #include <errno.h> 9503b82deSJerin Jacob #include <stdbool.h> 10503b82deSJerin Jacob #include <stdint.h> 11503b82deSJerin Jacob 12fdbec406SAnoob Joseph #include "hw/cpt.h" 13fdbec406SAnoob Joseph 14fdbec406SAnoob Joseph #include "roc_platform.h" 15503b82deSJerin Jacob 16503b82deSJerin Jacob /* Header which precedes all mbox messages */ 17503b82deSJerin Jacob struct mbox_hdr { 18503b82deSJerin Jacob uint64_t __io msg_size; /* Total msgs size embedded */ 19503b82deSJerin Jacob uint16_t __io num_msgs; /* No of msgs embedded */ 20503b82deSJerin Jacob }; 21503b82deSJerin Jacob 22503b82deSJerin Jacob /* Header which precedes every msg and is also part of it */ 23503b82deSJerin Jacob struct mbox_msghdr { 24503b82deSJerin Jacob uint16_t __io pcifunc; /* Who's sending this msg */ 25503b82deSJerin Jacob uint16_t __io id; /* Mbox message ID */ 26503b82deSJerin Jacob #define MBOX_REQ_SIG (0xdead) 27503b82deSJerin Jacob #define MBOX_RSP_SIG (0xbeef) 28503b82deSJerin Jacob /* Signature, for validating corrupted msgs */ 29503b82deSJerin Jacob uint16_t __io sig; 30699d1729SKiran Kumar K #define MBOX_VERSION (0x000b) 31503b82deSJerin Jacob /* Version of msg's structure for this ID */ 32503b82deSJerin Jacob uint16_t __io ver; 33503b82deSJerin Jacob /* Offset of next msg within mailbox region */ 34503b82deSJerin Jacob uint16_t __io next_msgoff; 35503b82deSJerin Jacob int __io rc; /* Msg processed response code */ 36503b82deSJerin Jacob }; 37503b82deSJerin Jacob 38fa4ee2d4SHarman Kalra #define RVU_AF_AFPF_MBOX0 (0x02000) 39fa4ee2d4SHarman Kalra #define RVU_AF_AFPF_MBOX1 (0x02008) 40fa4ee2d4SHarman Kalra 41fa4ee2d4SHarman Kalra #define RVU_PF_PFAF_MBOX0 (0xC00) 42fa4ee2d4SHarman Kalra #define RVU_PF_PFAF_MBOX1 (0xC08) 43fa4ee2d4SHarman Kalra 44fa4ee2d4SHarman Kalra #define RVU_PF_VFX_PFVF_MBOX0 (0x0000) 45fa4ee2d4SHarman Kalra #define RVU_PF_VFX_PFVF_MBOX1 (0x0008) 46fa4ee2d4SHarman Kalra 47fa4ee2d4SHarman Kalra #define RVU_VF_VFPF_MBOX0 (0x0000) 48fa4ee2d4SHarman Kalra #define RVU_VF_VFPF_MBOX1 (0x0008) 49fa4ee2d4SHarman Kalra 50fa4ee2d4SHarman Kalra #define MBOX_DOWN_MSG 1 51fa4ee2d4SHarman Kalra #define MBOX_UP_MSG 2 52fa4ee2d4SHarman Kalra 53503b82deSJerin Jacob /* Mailbox message types */ 54503b82deSJerin Jacob #define MBOX_MSG_MASK 0xFFFF 55503b82deSJerin Jacob #define MBOX_MSG_INVALID 0xFFFE 56503b82deSJerin Jacob #define MBOX_MSG_MAX 0xFFFF 570924cc0bSAkhil Goyal #define MBOX_MSG_GENERIC_MAX_ID 0x1FF 58384903edSAkhil Goyal #define MBOX_MSG_REQ_SIZE_MAX (16 * 1024) 59503b82deSJerin Jacob 60503b82deSJerin Jacob #define MBOX_MESSAGES \ 61503b82deSJerin Jacob /* Generic mbox IDs (range 0x000 - 0x1FF) */ \ 62503b82deSJerin Jacob M(READY, 0x001, ready, msg_req, ready_msg_rsp) \ 63503b82deSJerin Jacob M(ATTACH_RESOURCES, 0x002, attach_resources, rsrc_attach_req, msg_rsp) \ 64503b82deSJerin Jacob M(DETACH_RESOURCES, 0x003, detach_resources, rsrc_detach_req, msg_rsp) \ 65503b82deSJerin Jacob M(FREE_RSRC_CNT, 0x004, free_rsrc_cnt, msg_req, free_rsrcs_rsp) \ 66503b82deSJerin Jacob M(MSIX_OFFSET, 0x005, msix_offset, msg_req, msix_offset_rsp) \ 67503b82deSJerin Jacob M(VF_FLR, 0x006, vf_flr, msg_req, msg_rsp) \ 68503b82deSJerin Jacob M(PTP_OP, 0x007, ptp_op, ptp_req, ptp_rsp) \ 69503b82deSJerin Jacob M(GET_HW_CAP, 0x008, get_hw_cap, msg_req, get_hw_cap_rsp) \ 70503b82deSJerin Jacob M(NDC_SYNC_OP, 0x009, ndc_sync_op, ndc_sync_op, msg_rsp) \ 71503b82deSJerin Jacob M(LMTST_TBL_SETUP, 0x00a, lmtst_tbl_setup, lmtst_tbl_setup_req, \ 72503b82deSJerin Jacob msg_rsp) \ 73162c77c1SHarman Kalra M(GET_REP_CNT, 0x00d, get_rep_cnt, msg_req, get_rep_cnt_rsp) \ 74503b82deSJerin Jacob /* CGX mbox IDs (range 0x200 - 0x3FF) */ \ 75503b82deSJerin Jacob M(CGX_START_RXTX, 0x200, cgx_start_rxtx, msg_req, msg_rsp) \ 76503b82deSJerin Jacob M(CGX_STOP_RXTX, 0x201, cgx_stop_rxtx, msg_req, msg_rsp) \ 77503b82deSJerin Jacob M(CGX_STATS, 0x202, cgx_stats, msg_req, cgx_stats_rsp) \ 78503b82deSJerin Jacob M(CGX_MAC_ADDR_SET, 0x203, cgx_mac_addr_set, cgx_mac_addr_set_or_get, \ 79503b82deSJerin Jacob cgx_mac_addr_set_or_get) \ 80503b82deSJerin Jacob M(CGX_MAC_ADDR_GET, 0x204, cgx_mac_addr_get, cgx_mac_addr_set_or_get, \ 81503b82deSJerin Jacob cgx_mac_addr_set_or_get) \ 82503b82deSJerin Jacob M(CGX_PROMISC_ENABLE, 0x205, cgx_promisc_enable, msg_req, msg_rsp) \ 83503b82deSJerin Jacob M(CGX_PROMISC_DISABLE, 0x206, cgx_promisc_disable, msg_req, msg_rsp) \ 84503b82deSJerin Jacob M(CGX_START_LINKEVENTS, 0x207, cgx_start_linkevents, msg_req, msg_rsp) \ 85503b82deSJerin Jacob M(CGX_STOP_LINKEVENTS, 0x208, cgx_stop_linkevents, msg_req, msg_rsp) \ 86503b82deSJerin Jacob M(CGX_GET_LINKINFO, 0x209, cgx_get_linkinfo, msg_req, \ 87503b82deSJerin Jacob cgx_link_info_msg) \ 88503b82deSJerin Jacob M(CGX_INTLBK_ENABLE, 0x20A, cgx_intlbk_enable, msg_req, msg_rsp) \ 89503b82deSJerin Jacob M(CGX_INTLBK_DISABLE, 0x20B, cgx_intlbk_disable, msg_req, msg_rsp) \ 90503b82deSJerin Jacob M(CGX_PTP_RX_ENABLE, 0x20C, cgx_ptp_rx_enable, msg_req, msg_rsp) \ 91503b82deSJerin Jacob M(CGX_PTP_RX_DISABLE, 0x20D, cgx_ptp_rx_disable, msg_req, msg_rsp) \ 92503b82deSJerin Jacob M(CGX_CFG_PAUSE_FRM, 0x20E, cgx_cfg_pause_frm, cgx_pause_frm_cfg, \ 93503b82deSJerin Jacob cgx_pause_frm_cfg) \ 94503b82deSJerin Jacob M(CGX_FW_DATA_GET, 0x20F, cgx_get_aux_link_info, msg_req, cgx_fw_data) \ 95503b82deSJerin Jacob M(CGX_FEC_SET, 0x210, cgx_set_fec_param, fec_mode, fec_mode) \ 96503b82deSJerin Jacob M(CGX_MAC_ADDR_ADD, 0x211, cgx_mac_addr_add, cgx_mac_addr_add_req, \ 97503b82deSJerin Jacob cgx_mac_addr_add_rsp) \ 98503b82deSJerin Jacob M(CGX_MAC_ADDR_DEL, 0x212, cgx_mac_addr_del, cgx_mac_addr_del_req, \ 99503b82deSJerin Jacob msg_rsp) \ 100503b82deSJerin Jacob M(CGX_MAC_MAX_ENTRIES_GET, 0x213, cgx_mac_max_entries_get, msg_req, \ 101503b82deSJerin Jacob cgx_max_dmac_entries_get_rsp) \ 102503b82deSJerin Jacob M(CGX_SET_LINK_STATE, 0x214, cgx_set_link_state, \ 103503b82deSJerin Jacob cgx_set_link_state_msg, msg_rsp) \ 104503b82deSJerin Jacob M(CGX_GET_PHY_MOD_TYPE, 0x215, cgx_get_phy_mod_type, msg_req, \ 105503b82deSJerin Jacob cgx_phy_mod_type) \ 106503b82deSJerin Jacob M(CGX_SET_PHY_MOD_TYPE, 0x216, cgx_set_phy_mod_type, cgx_phy_mod_type, \ 107503b82deSJerin Jacob msg_rsp) \ 108503b82deSJerin Jacob M(CGX_FEC_STATS, 0x217, cgx_fec_stats, msg_req, cgx_fec_stats_rsp) \ 109503b82deSJerin Jacob M(CGX_SET_LINK_MODE, 0x218, cgx_set_link_mode, cgx_set_link_mode_req, \ 110503b82deSJerin Jacob cgx_set_link_mode_rsp) \ 111503b82deSJerin Jacob M(CGX_GET_PHY_FEC_STATS, 0x219, cgx_get_phy_fec_stats, msg_req, \ 112503b82deSJerin Jacob msg_rsp) \ 113503b82deSJerin Jacob M(CGX_STATS_RST, 0x21A, cgx_stats_rst, msg_req, msg_rsp) \ 114503b82deSJerin Jacob M(RPM_STATS, 0x21C, rpm_stats, msg_req, rpm_stats_rsp) \ 11520d02329SSunil Kumar Kori M(CGX_PRIO_FLOW_CTRL_CFG, 0x21F, cgx_prio_flow_ctrl_cfg, cgx_pfc_cfg, \ 11620d02329SSunil Kumar Kori cgx_pfc_rsp) \ 117503b82deSJerin Jacob /* NPA mbox IDs (range 0x400 - 0x5FF) */ \ 118503b82deSJerin Jacob M(NPA_LF_ALLOC, 0x400, npa_lf_alloc, npa_lf_alloc_req, \ 119503b82deSJerin Jacob npa_lf_alloc_rsp) \ 120503b82deSJerin Jacob M(NPA_LF_FREE, 0x401, npa_lf_free, msg_req, msg_rsp) \ 121503b82deSJerin Jacob M(NPA_AQ_ENQ, 0x402, npa_aq_enq, npa_aq_enq_req, npa_aq_enq_rsp) \ 122503b82deSJerin Jacob M(NPA_HWCTX_DISABLE, 0x403, npa_hwctx_disable, hwctx_disable_req, \ 123503b82deSJerin Jacob msg_rsp) \ 124143a419eSAshwin Sekhar T K M(NPA_CN20K_AQ_ENQ, 0x404, npa_cn20k_aq_enq, npa_cn20k_aq_enq_req, \ 125143a419eSAshwin Sekhar T K npa_cn20k_aq_enq_rsp) \ 126503b82deSJerin Jacob /* SSO/SSOW mbox IDs (range 0x600 - 0x7FF) */ \ 127503b82deSJerin Jacob M(SSO_LF_ALLOC, 0x600, sso_lf_alloc, sso_lf_alloc_req, \ 128503b82deSJerin Jacob sso_lf_alloc_rsp) \ 129503b82deSJerin Jacob M(SSO_LF_FREE, 0x601, sso_lf_free, sso_lf_free_req, msg_rsp) \ 130503b82deSJerin Jacob M(SSOW_LF_ALLOC, 0x602, ssow_lf_alloc, ssow_lf_alloc_req, msg_rsp) \ 131503b82deSJerin Jacob M(SSOW_LF_FREE, 0x603, ssow_lf_free, ssow_lf_free_req, msg_rsp) \ 132503b82deSJerin Jacob M(SSO_HW_SETCONFIG, 0x604, sso_hw_setconfig, sso_hw_setconfig, \ 133503b82deSJerin Jacob msg_rsp) \ 134503b82deSJerin Jacob M(SSO_GRP_SET_PRIORITY, 0x605, sso_grp_set_priority, sso_grp_priority, \ 135503b82deSJerin Jacob msg_rsp) \ 136503b82deSJerin Jacob M(SSO_GRP_GET_PRIORITY, 0x606, sso_grp_get_priority, sso_info_req, \ 137503b82deSJerin Jacob sso_grp_priority) \ 138e746aec1SSatha Rao M(SSO_WS_CACHE_INV, 0x607, sso_ws_cache_inv, ssow_lf_inv_req, msg_rsp) \ 139503b82deSJerin Jacob M(SSO_GRP_QOS_CONFIG, 0x608, sso_grp_qos_config, sso_grp_qos_cfg, \ 140503b82deSJerin Jacob msg_rsp) \ 141503b82deSJerin Jacob M(SSO_GRP_GET_STATS, 0x609, sso_grp_get_stats, sso_info_req, \ 142503b82deSJerin Jacob sso_grp_stats) \ 143503b82deSJerin Jacob M(SSO_HWS_GET_STATS, 0x610, sso_hws_get_stats, sso_info_req, \ 144503b82deSJerin Jacob sso_hws_stats) \ 145503b82deSJerin Jacob M(SSO_HW_RELEASE_XAQ, 0x611, sso_hw_release_xaq_aura, \ 146503b82deSJerin Jacob sso_hw_xaq_release, msg_rsp) \ 147e746aec1SSatha Rao M(SSO_CONFIG_LSW, 0x612, ssow_config_lsw, ssow_config_lsw, msg_rsp) \ 148e746aec1SSatha Rao M(SSO_HWS_CHNG_MSHIP, 0x613, ssow_chng_mship, ssow_chng_mship, \ 149e746aec1SSatha Rao msg_rsp) \ 15020345cbdSPavan Nikhilesh M(SSO_GRP_STASH_CONFIG, 0x614, sso_grp_stash_config, \ 15120345cbdSPavan Nikhilesh sso_grp_stash_cfg, msg_rsp) \ 15262afdd8dSPavan Nikhilesh M(SSO_AGGR_SET_CONFIG, 0x615, sso_aggr_setconfig, sso_aggr_setconfig, \ 15362afdd8dSPavan Nikhilesh msg_rsp) \ 15462afdd8dSPavan Nikhilesh M(SSO_AGGR_GET_STATS, 0x616, sso_aggr_get_stats, sso_info_req, \ 15562afdd8dSPavan Nikhilesh sso_aggr_stats) \ 15682526521SPavan Nikhilesh M(SSO_GET_HW_INFO, 0x617, sso_get_hw_info, msg_req, sso_hw_info) \ 157503b82deSJerin Jacob /* TIM mbox IDs (range 0x800 - 0x9FF) */ \ 158503b82deSJerin Jacob M(TIM_LF_ALLOC, 0x800, tim_lf_alloc, tim_lf_alloc_req, \ 159503b82deSJerin Jacob tim_lf_alloc_rsp) \ 160503b82deSJerin Jacob M(TIM_LF_FREE, 0x801, tim_lf_free, tim_ring_req, msg_rsp) \ 161503b82deSJerin Jacob M(TIM_CONFIG_RING, 0x802, tim_config_ring, tim_config_req, msg_rsp) \ 162503b82deSJerin Jacob M(TIM_ENABLE_RING, 0x803, tim_enable_ring, tim_ring_req, \ 163503b82deSJerin Jacob tim_enable_rsp) \ 164503b82deSJerin Jacob M(TIM_DISABLE_RING, 0x804, tim_disable_ring, tim_ring_req, msg_rsp) \ 16567e1cbf3SRakesh Kudurumalla M(TIM_GET_MIN_INTVL, 0x805, tim_get_min_intvl, tim_intvl_req, \ 16667e1cbf3SRakesh Kudurumalla tim_intvl_rsp) \ 16737a94462SPavan Nikhilesh M(TIM_CAPTURE_COUNTERS, 0x806, tim_capture_counters, msg_req, \ 16837a94462SPavan Nikhilesh tim_capture_rsp) \ 169*f3c7b607SPavan Nikhilesh M(TIM_CONFIG_HWWQE, 0x807, tim_config_hwwqe, tim_cfg_hwwqe_req, \ 170*f3c7b607SPavan Nikhilesh msg_rsp) \ 171*f3c7b607SPavan Nikhilesh M(TIM_GET_HW_INFO, 0x808, tim_get_hw_info, msg_req, tim_hw_info) \ 172503b82deSJerin Jacob /* CPT mbox IDs (range 0xA00 - 0xBFF) */ \ 173503b82deSJerin Jacob M(CPT_LF_ALLOC, 0xA00, cpt_lf_alloc, cpt_lf_alloc_req_msg, msg_rsp) \ 174503b82deSJerin Jacob M(CPT_LF_FREE, 0xA01, cpt_lf_free, msg_req, msg_rsp) \ 175503b82deSJerin Jacob M(CPT_RD_WR_REGISTER, 0xA02, cpt_rd_wr_register, cpt_rd_wr_reg_msg, \ 176503b82deSJerin Jacob cpt_rd_wr_reg_msg) \ 177503b82deSJerin Jacob M(CPT_SET_CRYPTO_GRP, 0xA03, cpt_set_crypto_grp, \ 178503b82deSJerin Jacob cpt_set_crypto_grp_req_msg, msg_rsp) \ 179503b82deSJerin Jacob M(CPT_INLINE_IPSEC_CFG, 0xA04, cpt_inline_ipsec_cfg, \ 180503b82deSJerin Jacob cpt_inline_ipsec_cfg_msg, msg_rsp) \ 181503b82deSJerin Jacob M(CPT_STATS, 0xA05, cpt_sts_get, cpt_sts_req, cpt_sts_rsp) \ 182503b82deSJerin Jacob M(CPT_RXC_TIME_CFG, 0xA06, cpt_rxc_time_cfg, cpt_rxc_time_cfg_req, \ 183503b82deSJerin Jacob msg_rsp) \ 1842635c25dSSrujana Challa M(CPT_CTX_CACHE_SYNC, 0xA07, cpt_ctx_cache_sync, msg_req, msg_rsp) \ 185068d2647SSrujana Challa M(CPT_LF_RESET, 0xA08, cpt_lf_reset, cpt_lf_rst_req, msg_rsp) \ 186503b82deSJerin Jacob M(CPT_RX_INLINE_LF_CFG, 0xBFE, cpt_rx_inline_lf_cfg, \ 187503b82deSJerin Jacob cpt_rx_inline_lf_cfg_msg, msg_rsp) \ 188503b82deSJerin Jacob M(CPT_GET_CAPS, 0xBFD, cpt_caps_get, msg_req, cpt_caps_rsp_msg) \ 189503b82deSJerin Jacob M(CPT_GET_ENG_GRP, 0xBFF, cpt_eng_grp_get, cpt_eng_grp_req, \ 190503b82deSJerin Jacob cpt_eng_grp_rsp) \ 191d6655e14SLiron Himi /* REE mbox IDs (range 0xE00 - 0xFFF) */ \ 192d6655e14SLiron Himi M(REE_CONFIG_LF, 0xE01, ree_config_lf, ree_lf_req_msg, msg_rsp) \ 193d6655e14SLiron Himi M(REE_RD_WR_REGISTER, 0xE02, ree_rd_wr_register, ree_rd_wr_reg_msg, \ 194d6655e14SLiron Himi ree_rd_wr_reg_msg) \ 195d6655e14SLiron Himi M(REE_RULE_DB_PROG, 0xE03, ree_rule_db_prog, ree_rule_db_prog_req_msg, \ 196d6655e14SLiron Himi msg_rsp) \ 197d6655e14SLiron Himi M(REE_RULE_DB_LEN_GET, 0xE04, ree_rule_db_len_get, ree_req_msg, \ 198d6655e14SLiron Himi ree_rule_db_len_rsp_msg) \ 199d6655e14SLiron Himi M(REE_RULE_DB_GET, 0xE05, ree_rule_db_get, ree_rule_db_get_req_msg, \ 200d6655e14SLiron Himi ree_rule_db_get_rsp_msg) \ 201503b82deSJerin Jacob /* SDP mbox IDs (range 0x1000 - 0x11FF) */ \ 202503b82deSJerin Jacob M(SET_SDP_CHAN_INFO, 0x1000, set_sdp_chan_info, sdp_chan_info_msg, \ 203503b82deSJerin Jacob msg_rsp) \ 204503b82deSJerin Jacob /* NPC mbox IDs (range 0x6000 - 0x7FFF) */ \ 205503b82deSJerin Jacob M(NPC_MCAM_ALLOC_ENTRY, 0x6000, npc_mcam_alloc_entry, \ 206503b82deSJerin Jacob npc_mcam_alloc_entry_req, npc_mcam_alloc_entry_rsp) \ 207503b82deSJerin Jacob M(NPC_MCAM_FREE_ENTRY, 0x6001, npc_mcam_free_entry, \ 208503b82deSJerin Jacob npc_mcam_free_entry_req, msg_rsp) \ 209503b82deSJerin Jacob M(NPC_MCAM_WRITE_ENTRY, 0x6002, npc_mcam_write_entry, \ 210503b82deSJerin Jacob npc_mcam_write_entry_req, msg_rsp) \ 211503b82deSJerin Jacob M(NPC_MCAM_ENA_ENTRY, 0x6003, npc_mcam_ena_entry, \ 212503b82deSJerin Jacob npc_mcam_ena_dis_entry_req, msg_rsp) \ 213503b82deSJerin Jacob M(NPC_MCAM_DIS_ENTRY, 0x6004, npc_mcam_dis_entry, \ 214503b82deSJerin Jacob npc_mcam_ena_dis_entry_req, msg_rsp) \ 215503b82deSJerin Jacob M(NPC_MCAM_SHIFT_ENTRY, 0x6005, npc_mcam_shift_entry, \ 216503b82deSJerin Jacob npc_mcam_shift_entry_req, npc_mcam_shift_entry_rsp) \ 217503b82deSJerin Jacob M(NPC_MCAM_ALLOC_COUNTER, 0x6006, npc_mcam_alloc_counter, \ 218503b82deSJerin Jacob npc_mcam_alloc_counter_req, npc_mcam_alloc_counter_rsp) \ 219503b82deSJerin Jacob M(NPC_MCAM_FREE_COUNTER, 0x6007, npc_mcam_free_counter, \ 220503b82deSJerin Jacob npc_mcam_oper_counter_req, msg_rsp) \ 221503b82deSJerin Jacob M(NPC_MCAM_UNMAP_COUNTER, 0x6008, npc_mcam_unmap_counter, \ 222503b82deSJerin Jacob npc_mcam_unmap_counter_req, msg_rsp) \ 223503b82deSJerin Jacob M(NPC_MCAM_CLEAR_COUNTER, 0x6009, npc_mcam_clear_counter, \ 224503b82deSJerin Jacob npc_mcam_oper_counter_req, msg_rsp) \ 225503b82deSJerin Jacob M(NPC_MCAM_COUNTER_STATS, 0x600a, npc_mcam_counter_stats, \ 226503b82deSJerin Jacob npc_mcam_oper_counter_req, npc_mcam_oper_counter_rsp) \ 227503b82deSJerin Jacob M(NPC_MCAM_ALLOC_AND_WRITE_ENTRY, 0x600b, \ 228503b82deSJerin Jacob npc_mcam_alloc_and_write_entry, npc_mcam_alloc_and_write_entry_req, \ 229503b82deSJerin Jacob npc_mcam_alloc_and_write_entry_rsp) \ 230503b82deSJerin Jacob M(NPC_GET_KEX_CFG, 0x600c, npc_get_kex_cfg, msg_req, \ 231503b82deSJerin Jacob npc_get_kex_cfg_rsp) \ 232503b82deSJerin Jacob M(NPC_INSTALL_FLOW, 0x600d, npc_install_flow, npc_install_flow_req, \ 233503b82deSJerin Jacob npc_install_flow_rsp) \ 234503b82deSJerin Jacob M(NPC_DELETE_FLOW, 0x600e, npc_delete_flow, npc_delete_flow_req, \ 235503b82deSJerin Jacob msg_rsp) \ 236503b82deSJerin Jacob M(NPC_MCAM_READ_ENTRY, 0x600f, npc_mcam_read_entry, \ 237503b82deSJerin Jacob npc_mcam_read_entry_req, npc_mcam_read_entry_rsp) \ 238503b82deSJerin Jacob M(NPC_SET_PKIND, 0x6010, npc_set_pkind, npc_set_pkind, msg_rsp) \ 239503b82deSJerin Jacob M(NPC_MCAM_READ_BASE_RULE, 0x6011, npc_read_base_steer_rule, msg_req, \ 240503b82deSJerin Jacob npc_mcam_read_base_rule_rsp) \ 241503b82deSJerin Jacob M(NPC_MCAM_GET_STATS, 0x6012, npc_mcam_entry_stats, \ 242503b82deSJerin Jacob npc_mcam_get_stats_req, npc_mcam_get_stats_rsp) \ 243e3315630SSatheesh Paul M(NPC_GET_FIELD_HASH_INFO, 0x6013, npc_get_field_hash_info, \ 244e3315630SSatheesh Paul npc_get_field_hash_info_req, npc_get_field_hash_info_rsp) \ 245357f5ebcSAnkur Dwivedi M(NPC_MCAM_GET_HIT_STATUS, 0x6015, npc_mcam_get_hit_status, \ 246357f5ebcSAnkur Dwivedi npc_mcam_get_hit_status_req, npc_mcam_get_hit_status_rsp) \ 247503b82deSJerin Jacob /* NIX mbox IDs (range 0x8000 - 0xFFFF) */ \ 248503b82deSJerin Jacob M(NIX_LF_ALLOC, 0x8000, nix_lf_alloc, nix_lf_alloc_req, \ 249503b82deSJerin Jacob nix_lf_alloc_rsp) \ 250503b82deSJerin Jacob M(NIX_LF_FREE, 0x8001, nix_lf_free, nix_lf_free_req, msg_rsp) \ 251503b82deSJerin Jacob M(NIX_AQ_ENQ, 0x8002, nix_aq_enq, nix_aq_enq_req, nix_aq_enq_rsp) \ 252503b82deSJerin Jacob M(NIX_HWCTX_DISABLE, 0x8003, nix_hwctx_disable, hwctx_disable_req, \ 253503b82deSJerin Jacob msg_rsp) \ 254503b82deSJerin Jacob M(NIX_TXSCH_ALLOC, 0x8004, nix_txsch_alloc, nix_txsch_alloc_req, \ 255503b82deSJerin Jacob nix_txsch_alloc_rsp) \ 256503b82deSJerin Jacob M(NIX_TXSCH_FREE, 0x8005, nix_txsch_free, nix_txsch_free_req, msg_rsp) \ 257503b82deSJerin Jacob M(NIX_TXSCHQ_CFG, 0x8006, nix_txschq_cfg, nix_txschq_config, \ 258503b82deSJerin Jacob nix_txschq_config) \ 259503b82deSJerin Jacob M(NIX_STATS_RST, 0x8007, nix_stats_rst, msg_req, msg_rsp) \ 260503b82deSJerin Jacob M(NIX_VTAG_CFG, 0x8008, nix_vtag_cfg, nix_vtag_config, msg_rsp) \ 261503b82deSJerin Jacob M(NIX_RSS_FLOWKEY_CFG, 0x8009, nix_rss_flowkey_cfg, \ 262503b82deSJerin Jacob nix_rss_flowkey_cfg, nix_rss_flowkey_cfg_rsp) \ 263503b82deSJerin Jacob M(NIX_SET_MAC_ADDR, 0x800a, nix_set_mac_addr, nix_set_mac_addr, \ 264503b82deSJerin Jacob msg_rsp) \ 265503b82deSJerin Jacob M(NIX_SET_RX_MODE, 0x800b, nix_set_rx_mode, nix_rx_mode, msg_rsp) \ 266503b82deSJerin Jacob M(NIX_SET_HW_FRS, 0x800c, nix_set_hw_frs, nix_frs_cfg, msg_rsp) \ 267503b82deSJerin Jacob M(NIX_LF_START_RX, 0x800d, nix_lf_start_rx, msg_req, msg_rsp) \ 268503b82deSJerin Jacob M(NIX_LF_STOP_RX, 0x800e, nix_lf_stop_rx, msg_req, msg_rsp) \ 269503b82deSJerin Jacob M(NIX_MARK_FORMAT_CFG, 0x800f, nix_mark_format_cfg, \ 270503b82deSJerin Jacob nix_mark_format_cfg, nix_mark_format_cfg_rsp) \ 271503b82deSJerin Jacob M(NIX_SET_RX_CFG, 0x8010, nix_set_rx_cfg, nix_rx_cfg, msg_rsp) \ 272503b82deSJerin Jacob M(NIX_LSO_FORMAT_CFG, 0x8011, nix_lso_format_cfg, nix_lso_format_cfg, \ 273503b82deSJerin Jacob nix_lso_format_cfg_rsp) \ 274503b82deSJerin Jacob M(NIX_LF_PTP_TX_ENABLE, 0x8013, nix_lf_ptp_tx_enable, msg_req, \ 275503b82deSJerin Jacob msg_rsp) \ 276503b82deSJerin Jacob M(NIX_LF_PTP_TX_DISABLE, 0x8014, nix_lf_ptp_tx_disable, msg_req, \ 277503b82deSJerin Jacob msg_rsp) \ 278503b82deSJerin Jacob M(NIX_SET_VLAN_TPID, 0x8015, nix_set_vlan_tpid, nix_set_vlan_tpid, \ 279503b82deSJerin Jacob msg_rsp) \ 280503b82deSJerin Jacob M(NIX_BP_ENABLE, 0x8016, nix_bp_enable, nix_bp_cfg_req, \ 281503b82deSJerin Jacob nix_bp_cfg_rsp) \ 282503b82deSJerin Jacob M(NIX_BP_DISABLE, 0x8017, nix_bp_disable, nix_bp_cfg_req, msg_rsp) \ 283503b82deSJerin Jacob M(NIX_GET_MAC_ADDR, 0x8018, nix_get_mac_addr, msg_req, \ 284503b82deSJerin Jacob nix_get_mac_addr_rsp) \ 285503b82deSJerin Jacob M(NIX_INLINE_IPSEC_CFG, 0x8019, nix_inline_ipsec_cfg, \ 286503b82deSJerin Jacob nix_inline_ipsec_cfg, msg_rsp) \ 287503b82deSJerin Jacob M(NIX_INLINE_IPSEC_LF_CFG, 0x801a, nix_inline_ipsec_lf_cfg, \ 288503b82deSJerin Jacob nix_inline_ipsec_lf_cfg, msg_rsp) \ 289503b82deSJerin Jacob M(NIX_CN10K_AQ_ENQ, 0x801b, nix_cn10k_aq_enq, nix_cn10k_aq_enq_req, \ 290503b82deSJerin Jacob nix_cn10k_aq_enq_rsp) \ 291cf8f6aa1SSunil Kumar Kori M(NIX_GET_HW_INFO, 0x801c, nix_get_hw_info, msg_req, nix_hw_info) \ 292cf8f6aa1SSunil Kumar Kori M(NIX_BANDPROF_ALLOC, 0x801d, nix_bandprof_alloc, \ 293cf8f6aa1SSunil Kumar Kori nix_bandprof_alloc_req, nix_bandprof_alloc_rsp) \ 294cf8f6aa1SSunil Kumar Kori M(NIX_BANDPROF_FREE, 0x801e, nix_bandprof_free, nix_bandprof_free_req, \ 2950663a845SNithin Dabilpuram msg_rsp) \ 29667e1cbf3SRakesh Kudurumalla M(NIX_BANDPROF_GET_HWINFO, 0x801f, nix_bandprof_get_hwinfo, msg_req, \ 29767e1cbf3SRakesh Kudurumalla nix_bandprof_get_hwinfo_rsp) \ 2980663a845SNithin Dabilpuram M(NIX_CPT_BP_ENABLE, 0x8020, nix_cpt_bp_enable, nix_bp_cfg_req, \ 2990663a845SNithin Dabilpuram nix_bp_cfg_rsp) \ 3000663a845SNithin Dabilpuram M(NIX_CPT_BP_DISABLE, 0x8021, nix_cpt_bp_disable, nix_bp_cfg_req, \ 301e746aec1SSatha Rao msg_rsp) \ 30237da5850SSrujana Challa M(NIX_RX_SW_SYNC, 0x8022, nix_rx_sw_sync, msg_req, msg_rsp) \ 30337da5850SSrujana Challa M(NIX_READ_INLINE_IPSEC_CFG, 0x8023, nix_read_inline_ipsec_cfg, \ 304ddf955d3SRakesh Kudurumalla msg_req, nix_inline_ipsec_cfg) \ 305ddf955d3SRakesh Kudurumalla M(NIX_LF_INLINE_RQ_CFG, 0x8024, nix_lf_inline_rq_cfg, \ 30604087b78SSatheesh Paul nix_rq_cpt_field_mask_cfg_req, msg_rsp) \ 30704087b78SSatheesh Paul M(NIX_SPI_TO_SA_ADD, 0x8026, nix_spi_to_sa_add, nix_spi_to_sa_add_req, \ 30804087b78SSatheesh Paul nix_spi_to_sa_add_rsp) \ 30904087b78SSatheesh Paul M(NIX_SPI_TO_SA_DELETE, 0x8027, nix_spi_to_sa_delete, \ 3104d00b8c6SSatha Rao nix_spi_to_sa_delete_req, msg_rsp) \ 3114d00b8c6SSatha Rao M(NIX_ALLOC_BPIDS, 0x8028, nix_alloc_bpids, nix_alloc_bpid_req, \ 3124d00b8c6SSatha Rao nix_bpids) \ 3134d00b8c6SSatha Rao M(NIX_FREE_BPIDS, 0x8029, nix_free_bpids, nix_bpids, msg_rsp) \ 3144d00b8c6SSatha Rao M(NIX_RX_CHAN_CFG, 0x802a, nix_rx_chan_cfg, nix_rx_chan_cfg, \ 315f752780fSAkhil Goyal nix_rx_chan_cfg) \ 316209188d1SSatheesh Paul M(NIX_MCAST_GRP_CREATE, 0x802b, nix_mcast_grp_create, nix_mcast_grp_create_req, \ 317209188d1SSatheesh Paul nix_mcast_grp_create_rsp) \ 318209188d1SSatheesh Paul M(NIX_MCAST_GRP_DESTROY, 0x802c, nix_mcast_grp_destroy, nix_mcast_grp_destroy_req, msg_rsp)\ 319209188d1SSatheesh Paul M(NIX_MCAST_GRP_UPDATE, 0x802d, nix_mcast_grp_update, nix_mcast_grp_update_req, \ 320209188d1SSatheesh Paul nix_mcast_grp_update_rsp) \ 321d921b1bbSHarman Kalra M(NIX_GET_LF_STATS, 0x802e, nix_get_lf_stats, nix_get_lf_stats_req, nix_lf_stats_rsp) \ 3229a01217eSSatha Rao M(NIX_CN20K_AQ_ENQ, 0x802f, nix_cn20k_aq_enq, nix_cn20k_aq_enq_req, nix_cn20k_aq_enq_rsp) \ 323f752780fSAkhil Goyal /* MCS mbox IDs (range 0xa000 - 0xbFFF) */ \ 324f752780fSAkhil Goyal M(MCS_ALLOC_RESOURCES, 0xa000, mcs_alloc_resources, mcs_alloc_rsrc_req, \ 325f752780fSAkhil Goyal mcs_alloc_rsrc_rsp) \ 326f752780fSAkhil Goyal M(MCS_FREE_RESOURCES, 0xa001, mcs_free_resources, mcs_free_rsrc_req, msg_rsp) \ 327ee71a3b2SAkhil Goyal M(MCS_FLOWID_ENTRY_WRITE, 0xa002, mcs_flowid_entry_write, mcs_flowid_entry_write_req, \ 328ee71a3b2SAkhil Goyal msg_rsp) \ 329ee71a3b2SAkhil Goyal M(MCS_SECY_PLCY_WRITE, 0xa003, mcs_secy_plcy_write, mcs_secy_plcy_write_req, msg_rsp) \ 330f4bf4780SAkhil Goyal M(MCS_RX_SC_CAM_WRITE, 0xa004, mcs_rx_sc_cam_write, mcs_rx_sc_cam_write_req, msg_rsp) \ 3312211ef84SAkhil Goyal M(MCS_SA_PLCY_WRITE, 0xa005, mcs_sa_plcy_write, mcs_sa_plcy_write_req, msg_rsp) \ 332f4bf4780SAkhil Goyal M(MCS_TX_SC_SA_MAP_WRITE, 0xa006, mcs_tx_sc_sa_map_write, mcs_tx_sc_sa_map, msg_rsp) \ 333f4bf4780SAkhil Goyal M(MCS_RX_SC_SA_MAP_WRITE, 0xa007, mcs_rx_sc_sa_map_write, mcs_rx_sc_sa_map, msg_rsp) \ 334ee71a3b2SAkhil Goyal M(MCS_FLOWID_ENA_ENTRY, 0xa008, mcs_flowid_ena_entry, mcs_flowid_ena_dis_entry, msg_rsp) \ 335e4a6ea54SAkhil Goyal M(MCS_PN_TABLE_WRITE, 0xa009, mcs_pn_table_write, mcs_pn_table_write_req, msg_rsp) \ 336e4a6ea54SAkhil Goyal M(MCS_SET_ACTIVE_LMAC, 0xa00a, mcs_set_active_lmac, mcs_set_active_lmac, msg_rsp) \ 337f752780fSAkhil Goyal M(MCS_GET_HW_INFO, 0xa00b, mcs_get_hw_info, msg_req, mcs_hw_info) \ 338bd8d7755SAkhil Goyal M(MCS_GET_FLOWID_STATS, 0xa00c, mcs_get_flowid_stats, mcs_stats_req, mcs_flowid_stats) \ 339bd8d7755SAkhil Goyal M(MCS_GET_SECY_STATS, 0xa00d, mcs_get_secy_stats, mcs_stats_req, mcs_secy_stats) \ 340bd8d7755SAkhil Goyal M(MCS_GET_SC_STATS, 0xa00e, mcs_get_sc_stats, mcs_stats_req, mcs_sc_stats) \ 341bd8d7755SAkhil Goyal M(MCS_GET_PORT_STATS, 0xa010, mcs_get_port_stats, mcs_stats_req, mcs_port_stats) \ 342bd8d7755SAkhil Goyal M(MCS_CLEAR_STATS, 0xa011, mcs_clear_stats, mcs_clear_stats, msg_rsp) \ 343c26d94f2SAkhil Goyal M(MCS_INTR_CFG, 0xa012, mcs_intr_cfg, mcs_intr_cfg, msg_rsp) \ 344e4a6ea54SAkhil Goyal M(MCS_SET_LMAC_MODE, 0xa013, mcs_set_lmac_mode, mcs_set_lmac_mode, msg_rsp) \ 345e4a6ea54SAkhil Goyal M(MCS_SET_PN_THRESHOLD, 0xa014, mcs_set_pn_threshold, mcs_set_pn_threshold, msg_rsp) \ 3462b1dbc07SAkhil Goyal M(MCS_ALLOC_CTRL_PKT_RULE, 0xa015, mcs_alloc_ctrl_pkt_rule, mcs_alloc_ctrl_pkt_rule_req, \ 3472b1dbc07SAkhil Goyal mcs_alloc_ctrl_pkt_rule_rsp) \ 3482b1dbc07SAkhil Goyal M(MCS_FREE_CTRL_PKT_RULE, 0xa016, mcs_free_ctrl_pkt_rule, mcs_free_ctrl_pkt_rule_req, \ 3492b1dbc07SAkhil Goyal msg_rsp) \ 3502b1dbc07SAkhil Goyal M(MCS_CTRL_PKT_RULE_WRITE, 0xa017, mcs_ctrl_pkt_rule_write, mcs_ctrl_pkt_rule_write_req, \ 3512b1dbc07SAkhil Goyal msg_rsp) \ 352f0a0d0ceSAkhil Goyal M(MCS_PORT_RESET, 0xa018, mcs_port_reset, mcs_port_reset_req, msg_rsp) \ 353f0a0d0ceSAkhil Goyal M(MCS_PORT_CFG_SET, 0xa019, mcs_port_cfg_set, mcs_port_cfg_set_req, msg_rsp) \ 354f0a0d0ceSAkhil Goyal M(MCS_PORT_CFG_GET, 0xa020, mcs_port_cfg_get, mcs_port_cfg_get_req, mcs_port_cfg_get_rsp) \ 3552b1dbc07SAkhil Goyal M(MCS_CUSTOM_TAG_CFG_GET, 0xa021, mcs_custom_tag_cfg_get, mcs_custom_tag_cfg_get_req, \ 3562b1dbc07SAkhil Goyal mcs_custom_tag_cfg_get_rsp) \ 357df5ba910SAkhil Goyal M(MCS_FIPS_RESET, 0xa040, mcs_fips_reset, mcs_fips_req, msg_rsp) \ 358df5ba910SAkhil Goyal M(MCS_FIPS_MODE_SET, 0xa041, mcs_fips_mode_set, mcs_fips_mode_req, msg_rsp) \ 359df5ba910SAkhil Goyal M(MCS_FIPS_CTL_SET, 0xa042, mcs_fips_ctl_set, mcs_fips_ctl_req, msg_rsp) \ 360df5ba910SAkhil Goyal M(MCS_FIPS_IV_SET, 0xa043, mcs_fips_iv_set, mcs_fips_iv_req, msg_rsp) \ 361df5ba910SAkhil Goyal M(MCS_FIPS_CTR_SET, 0xa044, mcs_fips_ctr_set, mcs_fips_ctr_req, msg_rsp) \ 362df5ba910SAkhil Goyal M(MCS_FIPS_KEY_SET, 0xa045, mcs_fips_key_set, mcs_fips_key_req, msg_rsp) \ 363df5ba910SAkhil Goyal M(MCS_FIPS_BLOCK_SET, 0xa046, mcs_fips_block_set, mcs_fips_block_req, msg_rsp) \ 364df5ba910SAkhil Goyal M(MCS_FIPS_START, 0xa047, mcs_fips_start, mcs_fips_req, msg_rsp) \ 365df5ba910SAkhil Goyal M(MCS_FIPS_RESULT_GET, 0xa048, mcs_fips_result_get, mcs_fips_req, mcs_fips_result_rsp) 366503b82deSJerin Jacob 367503b82deSJerin Jacob /* Messages initiated by AF (range 0xC00 - 0xDFF) */ 368503b82deSJerin Jacob #define MBOX_UP_CGX_MESSAGES \ 369503b82deSJerin Jacob M(CGX_LINK_EVENT, 0xC00, cgx_link_event, cgx_link_info_msg, msg_rsp) \ 370503b82deSJerin Jacob M(CGX_PTP_RX_INFO, 0xC01, cgx_ptp_rx_info, cgx_ptp_rx_info_msg, msg_rsp) 371503b82deSJerin Jacob 372c26d94f2SAkhil Goyal #define MBOX_UP_MCS_MESSAGES M(MCS_INTR_NOTIFY, 0xE00, mcs_intr_notify, mcs_intr_info, msg_rsp) 373c26d94f2SAkhil Goyal 374e66a6e54SAnkur Dwivedi #define MBOX_UP_REP_MESSAGES M(REP_EVENT_UP_NOTIFY, 0xEF0, rep_event_up_notify, rep_event, msg_rsp) 375d85c80b4SHarman Kalra 376503b82deSJerin Jacob enum { 377503b82deSJerin Jacob #define M(_name, _id, _1, _2, _3) MBOX_MSG_##_name = _id, 378d85c80b4SHarman Kalra MBOX_MESSAGES MBOX_UP_CGX_MESSAGES MBOX_UP_MCS_MESSAGES MBOX_UP_REP_MESSAGES 379503b82deSJerin Jacob #undef M 380503b82deSJerin Jacob }; 381503b82deSJerin Jacob 382503b82deSJerin Jacob /* Mailbox message formats */ 383503b82deSJerin Jacob 384503b82deSJerin Jacob #define RVU_DEFAULT_PF_FUNC 0xFFFF 385503b82deSJerin Jacob 386503b82deSJerin Jacob /* Generic request msg used for those mbox messages which 387503b82deSJerin Jacob * don't send any data in the request. 388503b82deSJerin Jacob */ 389503b82deSJerin Jacob struct msg_req { 390503b82deSJerin Jacob struct mbox_msghdr hdr; 391503b82deSJerin Jacob }; 392503b82deSJerin Jacob 393503b82deSJerin Jacob /* Generic response msg used a ack or response for those mbox 394503b82deSJerin Jacob * messages which does not have a specific rsp msg format. 395503b82deSJerin Jacob */ 396503b82deSJerin Jacob struct msg_rsp { 397503b82deSJerin Jacob struct mbox_msghdr hdr; 398503b82deSJerin Jacob }; 399503b82deSJerin Jacob 400503b82deSJerin Jacob /* RVU mailbox error codes 401503b82deSJerin Jacob * Range 256 - 300. 402503b82deSJerin Jacob */ 403503b82deSJerin Jacob enum rvu_af_status { 404503b82deSJerin Jacob RVU_INVALID_VF_ID = -256, 405503b82deSJerin Jacob }; 406503b82deSJerin Jacob 407df29c91cSHarman Kalra /* For NIX RX vtag action */ 408df29c91cSHarman Kalra enum nix_rx_vtag0_type { 409df29c91cSHarman Kalra NIX_RX_VTAG_TYPE0, 410df29c91cSHarman Kalra NIX_RX_VTAG_TYPE1, 411df29c91cSHarman Kalra NIX_RX_VTAG_TYPE2, 412df29c91cSHarman Kalra NIX_RX_VTAG_TYPE3, 413df29c91cSHarman Kalra NIX_RX_VTAG_TYPE4, 414df29c91cSHarman Kalra NIX_RX_VTAG_TYPE5, 415df29c91cSHarman Kalra NIX_RX_VTAG_TYPE6, 416df29c91cSHarman Kalra NIX_RX_VTAG_TYPE7, 417df29c91cSHarman Kalra }; 418df29c91cSHarman Kalra 419503b82deSJerin Jacob struct ready_msg_rsp { 420503b82deSJerin Jacob struct mbox_msghdr hdr; 421503b82deSJerin Jacob uint16_t __io sclk_freq; /* SCLK frequency */ 422503b82deSJerin Jacob uint16_t __io rclk_freq; /* RCLK frequency */ 423503b82deSJerin Jacob }; 424503b82deSJerin Jacob 425612ce5cfSSatheesh Paul enum npc_pkind_type { 426699d1729SKiran Kumar K NPC_RX_CUSTOM_PRE_L2_PKIND = 55ULL, 427612ce5cfSSatheesh Paul NPC_RX_VLAN_EXDSA_PKIND = 56ULL, 428612ce5cfSSatheesh Paul NPC_RX_CHLEN24B_PKIND, 429612ce5cfSSatheesh Paul NPC_RX_CPT_HDR_PKIND, 430612ce5cfSSatheesh Paul NPC_RX_CHLEN90B_PKIND, 431612ce5cfSSatheesh Paul NPC_TX_HIGIG_PKIND, 432612ce5cfSSatheesh Paul NPC_RX_HIGIG_PKIND, 433612ce5cfSSatheesh Paul NPC_RX_EXDSA_PKIND, 434612ce5cfSSatheesh Paul NPC_RX_EDSA_PKIND, 435612ce5cfSSatheesh Paul NPC_TX_DEF_PKIND, 436612ce5cfSSatheesh Paul }; 437612ce5cfSSatheesh Paul 438503b82deSJerin Jacob /* Struct to set pkind */ 439503b82deSJerin Jacob struct npc_set_pkind { 440503b82deSJerin Jacob struct mbox_msghdr hdr; 441503b82deSJerin Jacob #define ROC_PRIV_FLAGS_DEFAULT BIT_ULL(0) 442503b82deSJerin Jacob #define ROC_PRIV_FLAGS_EDSA BIT_ULL(1) 443503b82deSJerin Jacob #define ROC_PRIV_FLAGS_HIGIG BIT_ULL(2) 444503b82deSJerin Jacob #define ROC_PRIV_FLAGS_LEN_90B BIT_ULL(3) 445612ce5cfSSatheesh Paul #define ROC_PRIV_FLAGS_EXDSA BIT_ULL(4) 446612ce5cfSSatheesh Paul #define ROC_PRIV_FLAGS_VLAN_EXDSA BIT_ULL(5) 4475bffab53SKiran Kumar K #define ROC_PRIV_FLAGS_PRE_L2 BIT_ULL(6) 448503b82deSJerin Jacob #define ROC_PRIV_FLAGS_CUSTOM BIT_ULL(63) 449503b82deSJerin Jacob uint64_t __io mode; 450503b82deSJerin Jacob #define PKIND_TX BIT_ULL(0) 451503b82deSJerin Jacob #define PKIND_RX BIT_ULL(1) 452503b82deSJerin Jacob uint8_t __io dir; 453503b82deSJerin Jacob uint8_t __io pkind; /* valid only in case custom flag */ 454699d1729SKiran Kumar K uint8_t __io var_len_off; 455699d1729SKiran Kumar K /* Offset of custom header length field. 456699d1729SKiran Kumar K * Valid only for pkind NPC_RX_CUSTOM_PRE_L2_PKIND 457699d1729SKiran Kumar K */ 458699d1729SKiran Kumar K uint8_t __io var_len_off_mask; /* Mask for length with in offset */ 459699d1729SKiran Kumar K uint8_t __io shift_dir; 460699d1729SKiran Kumar K /* Shift direction to get length of the 461699d1729SKiran Kumar K * header at var_len_off 462699d1729SKiran Kumar K */ 463503b82deSJerin Jacob }; 464503b82deSJerin Jacob 465503b82deSJerin Jacob /* Structure for requesting resource provisioning. 466503b82deSJerin Jacob * 'modify' flag to be used when either requesting more 467503b82deSJerin Jacob * or to detach partial of a certain resource type. 468503b82deSJerin Jacob * Rest of the fields specify how many of what type to 469503b82deSJerin Jacob * be attached. 470503b82deSJerin Jacob * To request LFs from two blocks of same type this mailbox 471503b82deSJerin Jacob * can be sent twice as below: 472503b82deSJerin Jacob * struct rsrc_attach *attach; 473503b82deSJerin Jacob * .. Allocate memory for message .. 474503b82deSJerin Jacob * attach->cptlfs = 3; <3 LFs from CPT0> 475503b82deSJerin Jacob * .. Send message .. 476503b82deSJerin Jacob * .. Allocate memory for message .. 477503b82deSJerin Jacob * attach->modify = 1; 478503b82deSJerin Jacob * attach->cpt_blkaddr = BLKADDR_CPT1; 479503b82deSJerin Jacob * attach->cptlfs = 2; <2 LFs from CPT1> 480503b82deSJerin Jacob * .. Send message .. 481503b82deSJerin Jacob */ 482503b82deSJerin Jacob struct rsrc_attach_req { 483503b82deSJerin Jacob struct mbox_msghdr hdr; 484503b82deSJerin Jacob uint8_t __io modify : 1; 485503b82deSJerin Jacob uint8_t __io npalf : 1; 486503b82deSJerin Jacob uint8_t __io nixlf : 1; 487503b82deSJerin Jacob uint16_t __io sso; 488503b82deSJerin Jacob uint16_t __io ssow; 489503b82deSJerin Jacob uint16_t __io timlfs; 490503b82deSJerin Jacob uint16_t __io cptlfs; 491503b82deSJerin Jacob uint16_t __io reelfs; 492503b82deSJerin Jacob /* BLKADDR_CPT0/BLKADDR_CPT1 or 0 for BLKADDR_CPT0 */ 493503b82deSJerin Jacob int __io cpt_blkaddr; 494503b82deSJerin Jacob /* BLKADDR_REE0/BLKADDR_REE1 or 0 for BLKADDR_REE0 */ 495503b82deSJerin Jacob int __io ree_blkaddr; 496503b82deSJerin Jacob }; 497503b82deSJerin Jacob 498503b82deSJerin Jacob /* Structure for relinquishing resources. 499503b82deSJerin Jacob * 'partial' flag to be used when relinquishing all resources 500503b82deSJerin Jacob * but only of a certain type. If not set, all resources of all 501503b82deSJerin Jacob * types provisioned to the RVU function will be detached. 502503b82deSJerin Jacob */ 503503b82deSJerin Jacob struct rsrc_detach_req { 504503b82deSJerin Jacob struct mbox_msghdr hdr; 505503b82deSJerin Jacob uint8_t __io partial : 1; 506503b82deSJerin Jacob uint8_t __io npalf : 1; 507503b82deSJerin Jacob uint8_t __io nixlf : 1; 508503b82deSJerin Jacob uint8_t __io sso : 1; 509503b82deSJerin Jacob uint8_t __io ssow : 1; 510503b82deSJerin Jacob uint8_t __io timlfs : 1; 511503b82deSJerin Jacob uint8_t __io cptlfs : 1; 512503b82deSJerin Jacob uint8_t __io reelfs : 1; 513503b82deSJerin Jacob }; 514503b82deSJerin Jacob 515503b82deSJerin Jacob /* NIX Transmit schedulers */ 516503b82deSJerin Jacob #define NIX_TXSCH_LVL_SMQ 0x0 517503b82deSJerin Jacob #define NIX_TXSCH_LVL_MDQ 0x0 518503b82deSJerin Jacob #define NIX_TXSCH_LVL_TL4 0x1 519503b82deSJerin Jacob #define NIX_TXSCH_LVL_TL3 0x2 520503b82deSJerin Jacob #define NIX_TXSCH_LVL_TL2 0x3 521503b82deSJerin Jacob #define NIX_TXSCH_LVL_TL1 0x4 522503b82deSJerin Jacob #define NIX_TXSCH_LVL_CNT 0x5 523503b82deSJerin Jacob 524503b82deSJerin Jacob /* 525503b82deSJerin Jacob * Number of resources available to the caller. 526503b82deSJerin Jacob * In reply to MBOX_MSG_FREE_RSRC_CNT. 527503b82deSJerin Jacob */ 528503b82deSJerin Jacob struct free_rsrcs_rsp { 529503b82deSJerin Jacob struct mbox_msghdr hdr; 530503b82deSJerin Jacob uint16_t __io schq[NIX_TXSCH_LVL_CNT]; 531503b82deSJerin Jacob uint16_t __io sso; 532503b82deSJerin Jacob uint16_t __io tim; 533503b82deSJerin Jacob uint16_t __io ssow; 534503b82deSJerin Jacob uint16_t __io cpt; 535503b82deSJerin Jacob uint8_t __io npa; 536503b82deSJerin Jacob uint8_t __io nix; 537503b82deSJerin Jacob uint16_t __io schq_nix1[NIX_TXSCH_LVL_CNT]; 538503b82deSJerin Jacob uint8_t __io nix1; 539503b82deSJerin Jacob uint8_t __io cpt1; 540503b82deSJerin Jacob uint8_t __io ree0; 541503b82deSJerin Jacob uint8_t __io ree1; 542503b82deSJerin Jacob }; 543503b82deSJerin Jacob 544503b82deSJerin Jacob #define MSIX_VECTOR_INVALID 0xFFFF 545503b82deSJerin Jacob #define MAX_RVU_BLKLF_CNT 256 546503b82deSJerin Jacob 547503b82deSJerin Jacob struct msix_offset_rsp { 548503b82deSJerin Jacob struct mbox_msghdr hdr; 549503b82deSJerin Jacob uint16_t __io npa_msixoff; 550503b82deSJerin Jacob uint16_t __io nix_msixoff; 551503b82deSJerin Jacob uint16_t __io sso; 552503b82deSJerin Jacob uint16_t __io ssow; 553503b82deSJerin Jacob uint16_t __io timlfs; 554503b82deSJerin Jacob uint16_t __io cptlfs; 555503b82deSJerin Jacob uint16_t __io sso_msixoff[MAX_RVU_BLKLF_CNT]; 556503b82deSJerin Jacob uint16_t __io ssow_msixoff[MAX_RVU_BLKLF_CNT]; 557503b82deSJerin Jacob uint16_t __io timlf_msixoff[MAX_RVU_BLKLF_CNT]; 558503b82deSJerin Jacob uint16_t __io cptlf_msixoff[MAX_RVU_BLKLF_CNT]; 559503b82deSJerin Jacob uint16_t __io cpt1_lfs; 560503b82deSJerin Jacob uint16_t __io ree0_lfs; 561503b82deSJerin Jacob uint16_t __io ree1_lfs; 562503b82deSJerin Jacob uint16_t __io cpt1_lf_msixoff[MAX_RVU_BLKLF_CNT]; 563503b82deSJerin Jacob uint16_t __io ree0_lf_msixoff[MAX_RVU_BLKLF_CNT]; 564503b82deSJerin Jacob uint16_t __io ree1_lf_msixoff[MAX_RVU_BLKLF_CNT]; 565503b82deSJerin Jacob }; 566503b82deSJerin Jacob 567503b82deSJerin Jacob struct lmtst_tbl_setup_req { 568503b82deSJerin Jacob struct mbox_msghdr hdr; 569503b82deSJerin Jacob 570503b82deSJerin Jacob uint64_t __io dis_sched_early_comp : 1; 571503b82deSJerin Jacob uint64_t __io sched_ena : 1; 572503b82deSJerin Jacob uint64_t __io dis_line_pref : 1; 573503b82deSJerin Jacob uint64_t __io ssow_pf_func : 13; 574503b82deSJerin Jacob uint16_t __io pcifunc; 5759854e5dbSHarman Kalra uint8_t __io use_local_lmt_region; 5769854e5dbSHarman Kalra uint64_t __io lmt_iova; 5779854e5dbSHarman Kalra uint64_t __io rsvd[2]; /* Future use */ 578503b82deSJerin Jacob }; 579503b82deSJerin Jacob 580162c77c1SHarman Kalra #define MAX_PFVF_REP 64 581162c77c1SHarman Kalra struct get_rep_cnt_rsp { 582162c77c1SHarman Kalra struct mbox_msghdr hdr; 583162c77c1SHarman Kalra uint16_t __io rep_cnt; 584162c77c1SHarman Kalra uint16_t __io rep_pfvf_map[MAX_PFVF_REP]; 585162c77c1SHarman Kalra }; 586162c77c1SHarman Kalra 587503b82deSJerin Jacob /* CGX mbox message formats */ 588bd9ef855SRahul Bhansali /* CGX mailbox error codes 589bd9ef855SRahul Bhansali * Range 1101 - 1200. 590bd9ef855SRahul Bhansali */ 591bd9ef855SRahul Bhansali enum cgx_af_status { 592bd9ef855SRahul Bhansali LMAC_AF_ERR_INVALID_PARAM = -1101, 593bd9ef855SRahul Bhansali LMAC_AF_ERR_PF_NOT_MAPPED = -1102, 594bd9ef855SRahul Bhansali LMAC_AF_ERR_PERM_DENIED = -1103, 595bd9ef855SRahul Bhansali LMAC_AF_ERR_PFC_ENADIS_PERM_DENIED = -1104, 596bd9ef855SRahul Bhansali LMAC_AF_ERR_8023PAUSE_ENADIS_PERM_DENIED = -1105, 597bd9ef855SRahul Bhansali LMAC_AF_ERR_CMD_TIMEOUT = -1106, 598bd9ef855SRahul Bhansali LMAC_AF_ERR_FIRMWARE_DATA_NOT_MAPPED = -1107, 599bd9ef855SRahul Bhansali LMAC_AF_ERR_EXACT_MATCH_TBL_ADD_FAILED = -1108, 600bd9ef855SRahul Bhansali LMAC_AF_ERR_EXACT_MATCH_TBL_DEL_FAILED = -1109, 601bd9ef855SRahul Bhansali LMAC_AF_ERR_EXACT_MATCH_TBL_LOOK_UP_FAILED = -1110, 602bd9ef855SRahul Bhansali }; 603503b82deSJerin Jacob 604503b82deSJerin Jacob struct cgx_stats_rsp { 605503b82deSJerin Jacob struct mbox_msghdr hdr; 606c68c442fSRakesh Kudurumalla #define CGX_RX_STATS_COUNT 9 607503b82deSJerin Jacob #define CGX_TX_STATS_COUNT 18 608503b82deSJerin Jacob uint64_t __io rx_stats[CGX_RX_STATS_COUNT]; 609503b82deSJerin Jacob uint64_t __io tx_stats[CGX_TX_STATS_COUNT]; 610503b82deSJerin Jacob }; 611503b82deSJerin Jacob 612503b82deSJerin Jacob struct rpm_stats_rsp { 613503b82deSJerin Jacob struct mbox_msghdr hdr; 614503b82deSJerin Jacob #define RPM_RX_STATS_COUNT 43 615503b82deSJerin Jacob #define RPM_TX_STATS_COUNT 34 616503b82deSJerin Jacob uint64_t __io rx_stats[RPM_RX_STATS_COUNT]; 617503b82deSJerin Jacob uint64_t __io tx_stats[RPM_TX_STATS_COUNT]; 618503b82deSJerin Jacob }; 619503b82deSJerin Jacob 620503b82deSJerin Jacob struct cgx_fec_stats_rsp { 621503b82deSJerin Jacob struct mbox_msghdr hdr; 622503b82deSJerin Jacob uint64_t __io fec_corr_blks; 623503b82deSJerin Jacob uint64_t __io fec_uncorr_blks; 624503b82deSJerin Jacob }; 625503b82deSJerin Jacob 626503b82deSJerin Jacob /* Structure for requesting the operation for 627503b82deSJerin Jacob * setting/getting mac address in the CGX interface 628503b82deSJerin Jacob */ 629503b82deSJerin Jacob struct cgx_mac_addr_set_or_get { 630503b82deSJerin Jacob struct mbox_msghdr hdr; 631503b82deSJerin Jacob uint8_t __io mac_addr[PLT_ETHER_ADDR_LEN]; 6323c1eae0fSSrujana Challa uint32_t index; 633503b82deSJerin Jacob }; 634503b82deSJerin Jacob 635503b82deSJerin Jacob /* Structure for requesting the operation to 636503b82deSJerin Jacob * add DMAC filter entry into CGX interface 637503b82deSJerin Jacob */ 638503b82deSJerin Jacob struct cgx_mac_addr_add_req { 639503b82deSJerin Jacob struct mbox_msghdr hdr; 640503b82deSJerin Jacob uint8_t __io mac_addr[PLT_ETHER_ADDR_LEN]; 641503b82deSJerin Jacob }; 642503b82deSJerin Jacob 643503b82deSJerin Jacob /* Structure for response against the operation to 644503b82deSJerin Jacob * add DMAC filter entry into CGX interface 645503b82deSJerin Jacob */ 646503b82deSJerin Jacob struct cgx_mac_addr_add_rsp { 647503b82deSJerin Jacob struct mbox_msghdr hdr; 648503b82deSJerin Jacob uint8_t __io index; 649503b82deSJerin Jacob }; 650503b82deSJerin Jacob 651503b82deSJerin Jacob /* Structure for requesting the operation to 652503b82deSJerin Jacob * delete DMAC filter entry from CGX interface 653503b82deSJerin Jacob */ 654503b82deSJerin Jacob struct cgx_mac_addr_del_req { 655503b82deSJerin Jacob struct mbox_msghdr hdr; 656503b82deSJerin Jacob uint8_t __io index; 657503b82deSJerin Jacob }; 658503b82deSJerin Jacob 659503b82deSJerin Jacob /* Structure for response against the operation to 660503b82deSJerin Jacob * get maximum supported DMAC filter entries 661503b82deSJerin Jacob */ 662503b82deSJerin Jacob struct cgx_max_dmac_entries_get_rsp { 663503b82deSJerin Jacob struct mbox_msghdr hdr; 664503b82deSJerin Jacob uint8_t __io max_dmac_filters; 665503b82deSJerin Jacob }; 666503b82deSJerin Jacob 667503b82deSJerin Jacob struct cgx_link_user_info { 668503b82deSJerin Jacob uint64_t __io link_up : 1; 669503b82deSJerin Jacob uint64_t __io full_duplex : 1; 670503b82deSJerin Jacob uint64_t __io lmac_type_id : 4; 671503b82deSJerin Jacob uint64_t __io speed : 20; /* speed in Mbps */ 672503b82deSJerin Jacob uint64_t __io an : 1; /* AN supported or not */ 673503b82deSJerin Jacob uint64_t __io fec : 2; /* FEC type if enabled else 0 */ 674503b82deSJerin Jacob uint64_t __io port : 8; 675503b82deSJerin Jacob #define LMACTYPE_STR_LEN 16 676503b82deSJerin Jacob char lmac_type[LMACTYPE_STR_LEN]; 677503b82deSJerin Jacob }; 678503b82deSJerin Jacob 679503b82deSJerin Jacob struct cgx_link_info_msg { 680503b82deSJerin Jacob struct mbox_msghdr hdr; 681503b82deSJerin Jacob struct cgx_link_user_info link_info; 682503b82deSJerin Jacob }; 683503b82deSJerin Jacob 684503b82deSJerin Jacob struct cgx_ptp_rx_info_msg { 685503b82deSJerin Jacob struct mbox_msghdr hdr; 686503b82deSJerin Jacob uint8_t __io ptp_en; 687503b82deSJerin Jacob }; 688503b82deSJerin Jacob 689503b82deSJerin Jacob struct cgx_pause_frm_cfg { 690503b82deSJerin Jacob struct mbox_msghdr hdr; 691503b82deSJerin Jacob uint8_t __io set; 692503b82deSJerin Jacob /* set = 1 if the request is to config pause frames */ 693503b82deSJerin Jacob /* set = 0 if the request is to fetch pause frames config */ 694503b82deSJerin Jacob uint8_t __io rx_pause; 695503b82deSJerin Jacob uint8_t __io tx_pause; 696503b82deSJerin Jacob }; 697503b82deSJerin Jacob 69820d02329SSunil Kumar Kori struct cgx_pfc_cfg { 69920d02329SSunil Kumar Kori struct mbox_msghdr hdr; 70020d02329SSunil Kumar Kori uint8_t __io rx_pause; 70120d02329SSunil Kumar Kori uint8_t __io tx_pause; 70220d02329SSunil Kumar Kori uint16_t __io pfc_en; /* bitmap indicating enabled traffic classes */ 70320d02329SSunil Kumar Kori }; 70420d02329SSunil Kumar Kori 70520d02329SSunil Kumar Kori struct cgx_pfc_rsp { 70620d02329SSunil Kumar Kori struct mbox_msghdr hdr; 70720d02329SSunil Kumar Kori uint8_t __io rx_pause; 70820d02329SSunil Kumar Kori uint8_t __io tx_pause; 70920d02329SSunil Kumar Kori }; 71020d02329SSunil Kumar Kori 711503b82deSJerin Jacob struct sfp_eeprom_s { 712503b82deSJerin Jacob #define SFP_EEPROM_SIZE 256 713503b82deSJerin Jacob uint16_t __io sff_id; 714503b82deSJerin Jacob uint8_t __io buf[SFP_EEPROM_SIZE]; 715503b82deSJerin Jacob uint64_t __io reserved; 716503b82deSJerin Jacob }; 717503b82deSJerin Jacob 718503b82deSJerin Jacob enum fec_type { 719503b82deSJerin Jacob ROC_FEC_NONE, 720503b82deSJerin Jacob ROC_FEC_BASER, 721503b82deSJerin Jacob ROC_FEC_RS, 722503b82deSJerin Jacob }; 723503b82deSJerin Jacob 724503b82deSJerin Jacob struct phy_s { 725503b82deSJerin Jacob uint64_t __io can_change_mod_type : 1; 726503b82deSJerin Jacob uint64_t __io mod_type : 1; 727503b82deSJerin Jacob }; 728503b82deSJerin Jacob 729503b82deSJerin Jacob struct cgx_lmac_fwdata_s { 730503b82deSJerin Jacob uint16_t __io rw_valid; 731503b82deSJerin Jacob uint64_t __io supported_fec; 732503b82deSJerin Jacob uint64_t __io supported_an; 733503b82deSJerin Jacob uint64_t __io supported_link_modes; 734503b82deSJerin Jacob /* Only applicable if AN is supported */ 735503b82deSJerin Jacob uint64_t __io advertised_fec; 736503b82deSJerin Jacob uint64_t __io advertised_link_modes; 737503b82deSJerin Jacob /* Only applicable if SFP/QSFP slot is present */ 738503b82deSJerin Jacob struct sfp_eeprom_s sfp_eeprom; 739503b82deSJerin Jacob struct phy_s phy; 740503b82deSJerin Jacob #define LMAC_FWDATA_RESERVED_MEM 1023 741503b82deSJerin Jacob uint64_t __io reserved[LMAC_FWDATA_RESERVED_MEM]; 742503b82deSJerin Jacob }; 743503b82deSJerin Jacob 744503b82deSJerin Jacob struct cgx_fw_data { 745503b82deSJerin Jacob struct mbox_msghdr hdr; 746503b82deSJerin Jacob struct cgx_lmac_fwdata_s fwdata; 747503b82deSJerin Jacob }; 748503b82deSJerin Jacob 749503b82deSJerin Jacob struct fec_mode { 750503b82deSJerin Jacob struct mbox_msghdr hdr; 751503b82deSJerin Jacob int __io fec; 752503b82deSJerin Jacob }; 753503b82deSJerin Jacob 754503b82deSJerin Jacob struct cgx_set_link_state_msg { 755503b82deSJerin Jacob struct mbox_msghdr hdr; 756503b82deSJerin Jacob uint8_t __io enable; 757503b82deSJerin Jacob }; 758503b82deSJerin Jacob 759503b82deSJerin Jacob struct cgx_phy_mod_type { 760503b82deSJerin Jacob struct mbox_msghdr hdr; 761503b82deSJerin Jacob int __io mod; 762503b82deSJerin Jacob }; 763503b82deSJerin Jacob 764503b82deSJerin Jacob struct cgx_set_link_mode_args { 765503b82deSJerin Jacob uint32_t __io speed; 766503b82deSJerin Jacob uint8_t __io duplex; 767503b82deSJerin Jacob uint8_t __io an; 768503b82deSJerin Jacob uint8_t __io ports; 769503b82deSJerin Jacob uint64_t __io mode; 770503b82deSJerin Jacob }; 771503b82deSJerin Jacob 772503b82deSJerin Jacob struct cgx_set_link_mode_req { 773503b82deSJerin Jacob struct mbox_msghdr hdr; 774503b82deSJerin Jacob struct cgx_set_link_mode_args args; 775503b82deSJerin Jacob }; 776503b82deSJerin Jacob 777503b82deSJerin Jacob struct cgx_set_link_mode_rsp { 778503b82deSJerin Jacob struct mbox_msghdr hdr; 779503b82deSJerin Jacob int __io status; 780503b82deSJerin Jacob }; 781503b82deSJerin Jacob 782f752780fSAkhil Goyal /* MCS mbox structures */ 783f752780fSAkhil Goyal enum mcs_direction { 784f752780fSAkhil Goyal MCS_RX, 785f752780fSAkhil Goyal MCS_TX, 786f752780fSAkhil Goyal }; 787f752780fSAkhil Goyal 788f752780fSAkhil Goyal enum mcs_rsrc_type { 789f752780fSAkhil Goyal MCS_RSRC_TYPE_FLOWID, 790f752780fSAkhil Goyal MCS_RSRC_TYPE_SECY, 791f752780fSAkhil Goyal MCS_RSRC_TYPE_SC, 792f752780fSAkhil Goyal MCS_RSRC_TYPE_SA, 793f752780fSAkhil Goyal }; 794f752780fSAkhil Goyal 795f752780fSAkhil Goyal struct mcs_alloc_rsrc_req { 796f752780fSAkhil Goyal struct mbox_msghdr hdr; 797f752780fSAkhil Goyal uint8_t __io rsrc_type; 798f752780fSAkhil Goyal uint8_t __io rsrc_cnt; /* Resources count */ 799f752780fSAkhil Goyal uint8_t __io mcs_id; /* MCS block ID */ 800f752780fSAkhil Goyal uint8_t __io dir; /* Macsec ingress or egress side */ 801f752780fSAkhil Goyal uint8_t __io all; /* Allocate all resource type one each */ 802f752780fSAkhil Goyal uint64_t __io rsvd; 803f752780fSAkhil Goyal }; 804f752780fSAkhil Goyal 805f752780fSAkhil Goyal struct mcs_alloc_rsrc_rsp { 806f752780fSAkhil Goyal struct mbox_msghdr hdr; 807f752780fSAkhil Goyal uint8_t __io flow_ids[128]; /* Index of reserved entries */ 808f752780fSAkhil Goyal uint8_t __io secy_ids[128]; 809f752780fSAkhil Goyal uint8_t __io sc_ids[128]; 810f752780fSAkhil Goyal uint8_t __io sa_ids[256]; 811f752780fSAkhil Goyal uint8_t __io rsrc_type; 812f752780fSAkhil Goyal uint8_t __io rsrc_cnt; /* No of entries reserved */ 813f752780fSAkhil Goyal uint8_t __io mcs_id; 814f752780fSAkhil Goyal uint8_t __io dir; 815f752780fSAkhil Goyal uint8_t __io all; 816f752780fSAkhil Goyal uint8_t __io rsvd[256]; 817f752780fSAkhil Goyal }; 818f752780fSAkhil Goyal 819f752780fSAkhil Goyal struct mcs_free_rsrc_req { 820f752780fSAkhil Goyal struct mbox_msghdr hdr; 821f752780fSAkhil Goyal uint8_t __io rsrc_id; /* Index of the entry to be freed */ 822f752780fSAkhil Goyal uint8_t __io rsrc_type; 823f752780fSAkhil Goyal uint8_t __io mcs_id; 824f752780fSAkhil Goyal uint8_t __io dir; 825f752780fSAkhil Goyal uint8_t __io all; /* Free all the cam resources */ 826f752780fSAkhil Goyal uint64_t __io rsvd; 827f752780fSAkhil Goyal }; 828f752780fSAkhil Goyal 829ee71a3b2SAkhil Goyal struct mcs_flowid_entry_write_req { 830ee71a3b2SAkhil Goyal struct mbox_msghdr hdr; 831ee71a3b2SAkhil Goyal uint64_t __io data[4]; 832ee71a3b2SAkhil Goyal uint64_t __io mask[4]; 833ee71a3b2SAkhil Goyal uint64_t __io sci; /* CNF10K-B for tx_secy_mem_map */ 834ee71a3b2SAkhil Goyal uint8_t __io flow_id; 835ee71a3b2SAkhil Goyal uint8_t __io secy_id; /* secyid for which flowid is mapped */ 836ee71a3b2SAkhil Goyal /* sc_id is Valid if dir = MCS_TX, SC_CAM id mapped to flowid */ 837ee71a3b2SAkhil Goyal uint8_t __io sc_id; 838ee71a3b2SAkhil Goyal uint8_t __io ena; /* Enable tcam entry */ 839ee71a3b2SAkhil Goyal uint8_t __io ctr_pkt; 840ee71a3b2SAkhil Goyal uint8_t __io mcs_id; 841ee71a3b2SAkhil Goyal uint8_t __io dir; 842ee71a3b2SAkhil Goyal uint64_t __io rsvd; 843ee71a3b2SAkhil Goyal }; 844ee71a3b2SAkhil Goyal 845ee71a3b2SAkhil Goyal struct mcs_secy_plcy_write_req { 846ee71a3b2SAkhil Goyal struct mbox_msghdr hdr; 847ee71a3b2SAkhil Goyal uint64_t __io plcy; 848ee71a3b2SAkhil Goyal uint8_t __io secy_id; 849ee71a3b2SAkhil Goyal uint8_t __io mcs_id; 850ee71a3b2SAkhil Goyal uint8_t __io dir; 851ee71a3b2SAkhil Goyal uint64_t __io rsvd; 852ee71a3b2SAkhil Goyal }; 853ee71a3b2SAkhil Goyal 854f4bf4780SAkhil Goyal /* RX SC_CAM mapping */ 855f4bf4780SAkhil Goyal struct mcs_rx_sc_cam_write_req { 856f4bf4780SAkhil Goyal struct mbox_msghdr hdr; 857f4bf4780SAkhil Goyal uint64_t __io sci; /* SCI */ 858f4bf4780SAkhil Goyal uint64_t __io secy_id; /* secy index mapped to SC */ 859f4bf4780SAkhil Goyal uint8_t __io sc_id; /* SC CAM entry index */ 860f4bf4780SAkhil Goyal uint8_t __io mcs_id; 861f4bf4780SAkhil Goyal uint64_t __io rsvd; 862f4bf4780SAkhil Goyal }; 863f4bf4780SAkhil Goyal 8642211ef84SAkhil Goyal struct mcs_sa_plcy_write_req { 8652211ef84SAkhil Goyal struct mbox_msghdr hdr; 8662211ef84SAkhil Goyal uint64_t __io plcy[2][9]; /* Support 2 SA policy */ 8672211ef84SAkhil Goyal uint8_t __io sa_index[2]; 8682211ef84SAkhil Goyal uint8_t __io sa_cnt; 8692211ef84SAkhil Goyal uint8_t __io mcs_id; 8702211ef84SAkhil Goyal uint8_t __io dir; 8712211ef84SAkhil Goyal uint64_t __io rsvd; 8722211ef84SAkhil Goyal }; 8732211ef84SAkhil Goyal 874f4bf4780SAkhil Goyal struct mcs_tx_sc_sa_map { 875f4bf4780SAkhil Goyal struct mbox_msghdr hdr; 876f4bf4780SAkhil Goyal uint8_t __io sa_index0; 877f4bf4780SAkhil Goyal uint8_t __io sa_index1; 878f4bf4780SAkhil Goyal uint8_t __io rekey_ena; 879f4bf4780SAkhil Goyal uint8_t __io sa_index0_vld; 880f4bf4780SAkhil Goyal uint8_t __io sa_index1_vld; 881f4bf4780SAkhil Goyal uint8_t __io tx_sa_active; 882f4bf4780SAkhil Goyal uint64_t __io sectag_sci; 883f4bf4780SAkhil Goyal uint8_t __io sc_id; /* used as index for SA_MEM_MAP */ 884f4bf4780SAkhil Goyal uint8_t __io mcs_id; 885f4bf4780SAkhil Goyal uint64_t __io rsvd; 886f4bf4780SAkhil Goyal }; 887f4bf4780SAkhil Goyal 888f4bf4780SAkhil Goyal struct mcs_rx_sc_sa_map { 889f4bf4780SAkhil Goyal struct mbox_msghdr hdr; 890f4bf4780SAkhil Goyal uint8_t __io sa_index; 891f4bf4780SAkhil Goyal uint8_t __io sa_in_use; 892f4bf4780SAkhil Goyal uint8_t __io sc_id; 893f4bf4780SAkhil Goyal /* an range is 0-3, sc_id + an used as index SA_MEM_MAP */ 894f4bf4780SAkhil Goyal uint8_t __io an; 895f4bf4780SAkhil Goyal uint8_t __io mcs_id; 896f4bf4780SAkhil Goyal uint64_t __io rsvd; 897f4bf4780SAkhil Goyal }; 8982211ef84SAkhil Goyal 899ee71a3b2SAkhil Goyal struct mcs_flowid_ena_dis_entry { 900ee71a3b2SAkhil Goyal struct mbox_msghdr hdr; 901ee71a3b2SAkhil Goyal uint8_t __io flow_id; 902ee71a3b2SAkhil Goyal uint8_t __io ena; 903ee71a3b2SAkhil Goyal uint8_t __io mcs_id; 904ee71a3b2SAkhil Goyal uint8_t __io dir; 905ee71a3b2SAkhil Goyal uint64_t __io rsvd; 906ee71a3b2SAkhil Goyal }; 907ee71a3b2SAkhil Goyal 908e4a6ea54SAkhil Goyal struct mcs_pn_table_write_req { 909e4a6ea54SAkhil Goyal struct mbox_msghdr hdr; 910e4a6ea54SAkhil Goyal uint64_t __io next_pn; 911e4a6ea54SAkhil Goyal uint8_t __io pn_id; 912e4a6ea54SAkhil Goyal uint8_t __io mcs_id; 913e4a6ea54SAkhil Goyal uint8_t __io dir; 914e4a6ea54SAkhil Goyal uint64_t __io rsvd; 915e4a6ea54SAkhil Goyal }; 916e4a6ea54SAkhil Goyal 917e4a6ea54SAkhil Goyal struct mcs_cam_entry_read_req { 918e4a6ea54SAkhil Goyal struct mbox_msghdr hdr; 919e4a6ea54SAkhil Goyal uint8_t __io rsrc_type; /* TCAM/SECY/SC/SA/PN */ 920e4a6ea54SAkhil Goyal uint8_t __io rsrc_id; 921e4a6ea54SAkhil Goyal uint8_t __io mcs_id; 922e4a6ea54SAkhil Goyal uint8_t __io dir; 923e4a6ea54SAkhil Goyal uint64_t __io rsvd; 924e4a6ea54SAkhil Goyal }; 925e4a6ea54SAkhil Goyal 926e4a6ea54SAkhil Goyal struct mcs_cam_entry_read_rsp { 927e4a6ea54SAkhil Goyal struct mbox_msghdr hdr; 928e4a6ea54SAkhil Goyal uint64_t __io reg_val[10]; 929e4a6ea54SAkhil Goyal uint8_t __io rsrc_type; 930e4a6ea54SAkhil Goyal uint8_t __io rsrc_id; 931e4a6ea54SAkhil Goyal uint8_t __io mcs_id; 932e4a6ea54SAkhil Goyal uint8_t __io dir; 933e4a6ea54SAkhil Goyal uint64_t __io rsvd; 934e4a6ea54SAkhil Goyal }; 935e4a6ea54SAkhil Goyal 936f752780fSAkhil Goyal struct mcs_hw_info { 937f752780fSAkhil Goyal struct mbox_msghdr hdr; 938f752780fSAkhil Goyal uint8_t __io num_mcs_blks; /* Number of MCS blocks */ 939f752780fSAkhil Goyal uint8_t __io tcam_entries; /* RX/TX Tcam entries per mcs block */ 940f752780fSAkhil Goyal uint8_t __io secy_entries; /* RX/TX SECY entries per mcs block */ 941f752780fSAkhil Goyal uint8_t __io sc_entries; /* RX/TX SC CAM entries per mcs block */ 942f752780fSAkhil Goyal uint16_t __io sa_entries; /* PN table entries = SA entries */ 943f752780fSAkhil Goyal uint64_t __io rsvd[16]; 944f752780fSAkhil Goyal }; 945f752780fSAkhil Goyal 946e4a6ea54SAkhil Goyal struct mcs_set_active_lmac { 947e4a6ea54SAkhil Goyal struct mbox_msghdr hdr; 948e4a6ea54SAkhil Goyal uint32_t __io lmac_bmap; /* bitmap of active lmac per mcs block */ 949e4a6ea54SAkhil Goyal uint8_t __io mcs_id; 950e4a6ea54SAkhil Goyal uint16_t __io channel_base; /* MCS channel base */ 951e4a6ea54SAkhil Goyal uint64_t __io rsvd; 952e4a6ea54SAkhil Goyal }; 953e4a6ea54SAkhil Goyal 954c26d94f2SAkhil Goyal #define MCS_CPM_RX_SECTAG_V_EQ1_INT BIT_ULL(0) 955c26d94f2SAkhil Goyal #define MCS_CPM_RX_SECTAG_E_EQ0_C_EQ1_INT BIT_ULL(1) 956c26d94f2SAkhil Goyal #define MCS_CPM_RX_SECTAG_SL_GTE48_INT BIT_ULL(2) 957c26d94f2SAkhil Goyal #define MCS_CPM_RX_SECTAG_ES_EQ1_SC_EQ1_INT BIT_ULL(3) 958c26d94f2SAkhil Goyal #define MCS_CPM_RX_SECTAG_SC_EQ1_SCB_EQ1_INT BIT_ULL(4) 959c26d94f2SAkhil Goyal #define MCS_CPM_RX_PACKET_XPN_EQ0_INT BIT_ULL(5) 960c26d94f2SAkhil Goyal #define MCS_CPM_RX_PN_THRESH_REACHED_INT BIT_ULL(6) 961c26d94f2SAkhil Goyal #define MCS_CPM_TX_PACKET_XPN_EQ0_INT BIT_ULL(7) 962c26d94f2SAkhil Goyal #define MCS_CPM_TX_PN_THRESH_REACHED_INT BIT_ULL(8) 963c26d94f2SAkhil Goyal #define MCS_CPM_TX_SA_NOT_VALID_INT BIT_ULL(9) 964c26d94f2SAkhil Goyal #define MCS_BBE_RX_DFIFO_OVERFLOW_INT BIT_ULL(10) 965c26d94f2SAkhil Goyal #define MCS_BBE_RX_PLFIFO_OVERFLOW_INT BIT_ULL(11) 966c26d94f2SAkhil Goyal #define MCS_BBE_TX_DFIFO_OVERFLOW_INT BIT_ULL(12) 967c26d94f2SAkhil Goyal #define MCS_BBE_TX_PLFIFO_OVERFLOW_INT BIT_ULL(13) 968c26d94f2SAkhil Goyal #define MCS_PAB_RX_CHAN_OVERFLOW_INT BIT_ULL(14) 969c26d94f2SAkhil Goyal #define MCS_PAB_TX_CHAN_OVERFLOW_INT BIT_ULL(15) 970c26d94f2SAkhil Goyal 971c26d94f2SAkhil Goyal struct mcs_intr_cfg { 972c26d94f2SAkhil Goyal struct mbox_msghdr hdr; 973c26d94f2SAkhil Goyal uint64_t __io intr_mask; /* Interrupt enable mask */ 974c26d94f2SAkhil Goyal uint8_t __io mcs_id; 975c26d94f2SAkhil Goyal }; 976c26d94f2SAkhil Goyal 977c26d94f2SAkhil Goyal struct mcs_intr_info { 978c26d94f2SAkhil Goyal struct mbox_msghdr hdr; 979c26d94f2SAkhil Goyal uint64_t __io intr_mask; 980c26d94f2SAkhil Goyal int __io sa_id; 981c26d94f2SAkhil Goyal uint8_t __io mcs_id; 982c26d94f2SAkhil Goyal uint8_t __io lmac_id; 983c26d94f2SAkhil Goyal uint64_t __io rsvd; 984c26d94f2SAkhil Goyal }; 985c26d94f2SAkhil Goyal 986e4a6ea54SAkhil Goyal struct mcs_set_lmac_mode { 987e4a6ea54SAkhil Goyal struct mbox_msghdr hdr; 988e4a6ea54SAkhil Goyal uint8_t __io mode; /* '1' for internal bypass mode (passthrough), '0' for MCS processing */ 989e4a6ea54SAkhil Goyal uint8_t __io lmac_id; 990e4a6ea54SAkhil Goyal uint8_t __io mcs_id; 991e4a6ea54SAkhil Goyal uint64_t __io rsvd; 992e4a6ea54SAkhil Goyal }; 993e4a6ea54SAkhil Goyal 994e4a6ea54SAkhil Goyal struct mcs_set_pn_threshold { 995e4a6ea54SAkhil Goyal struct mbox_msghdr hdr; 996e4a6ea54SAkhil Goyal uint64_t __io threshold; 997e4a6ea54SAkhil Goyal uint8_t __io xpn; /* '1' for setting xpn threshold */ 998e4a6ea54SAkhil Goyal uint8_t __io mcs_id; 999e4a6ea54SAkhil Goyal uint8_t __io dir; 1000e4a6ea54SAkhil Goyal uint64_t __io rsvd; 1001e4a6ea54SAkhil Goyal }; 1002f752780fSAkhil Goyal 10032b1dbc07SAkhil Goyal enum mcs_ctrl_pkt_rule_type { 10042b1dbc07SAkhil Goyal MCS_CTRL_PKT_RULE_TYPE_ETH, 10052b1dbc07SAkhil Goyal MCS_CTRL_PKT_RULE_TYPE_DA, 10062b1dbc07SAkhil Goyal MCS_CTRL_PKT_RULE_TYPE_RANGE, 10072b1dbc07SAkhil Goyal MCS_CTRL_PKT_RULE_TYPE_COMBO, 10082b1dbc07SAkhil Goyal MCS_CTRL_PKT_RULE_TYPE_MAC, 10092b1dbc07SAkhil Goyal }; 10102b1dbc07SAkhil Goyal 10112b1dbc07SAkhil Goyal struct mcs_alloc_ctrl_pkt_rule_req { 10122b1dbc07SAkhil Goyal struct mbox_msghdr hdr; 10132b1dbc07SAkhil Goyal uint8_t __io rule_type; 10142b1dbc07SAkhil Goyal uint8_t __io mcs_id; /* MCS block ID */ 10152b1dbc07SAkhil Goyal uint8_t __io dir; /* Macsec ingress or egress side */ 10162b1dbc07SAkhil Goyal uint64_t __io rsvd; 10172b1dbc07SAkhil Goyal }; 10182b1dbc07SAkhil Goyal 10192b1dbc07SAkhil Goyal struct mcs_alloc_ctrl_pkt_rule_rsp { 10202b1dbc07SAkhil Goyal struct mbox_msghdr hdr; 10212b1dbc07SAkhil Goyal uint8_t __io rule_idx; 10222b1dbc07SAkhil Goyal uint8_t __io rule_type; 10232b1dbc07SAkhil Goyal uint8_t __io mcs_id; 10242b1dbc07SAkhil Goyal uint8_t __io dir; 10252b1dbc07SAkhil Goyal uint64_t __io rsvd; 10262b1dbc07SAkhil Goyal }; 10272b1dbc07SAkhil Goyal 10282b1dbc07SAkhil Goyal struct mcs_free_ctrl_pkt_rule_req { 10292b1dbc07SAkhil Goyal struct mbox_msghdr hdr; 10302b1dbc07SAkhil Goyal uint8_t __io rule_idx; 10312b1dbc07SAkhil Goyal uint8_t __io rule_type; 10322b1dbc07SAkhil Goyal uint8_t __io mcs_id; 10332b1dbc07SAkhil Goyal uint8_t __io dir; 10342b1dbc07SAkhil Goyal uint8_t __io all; /* Free all the rule resources */ 10352b1dbc07SAkhil Goyal uint64_t __io rsvd; 10362b1dbc07SAkhil Goyal }; 10372b1dbc07SAkhil Goyal 10382b1dbc07SAkhil Goyal struct mcs_ctrl_pkt_rule_write_req { 10392b1dbc07SAkhil Goyal struct mbox_msghdr hdr; 10402b1dbc07SAkhil Goyal uint64_t __io data0; 10412b1dbc07SAkhil Goyal uint64_t __io data1; 10422b1dbc07SAkhil Goyal uint64_t __io data2; 10432b1dbc07SAkhil Goyal uint8_t __io rule_idx; 10442b1dbc07SAkhil Goyal uint8_t __io rule_type; 10452b1dbc07SAkhil Goyal uint8_t __io mcs_id; 10462b1dbc07SAkhil Goyal uint8_t __io dir; 10472b1dbc07SAkhil Goyal uint64_t __io rsvd; 10482b1dbc07SAkhil Goyal }; 10492b1dbc07SAkhil Goyal 1050f0a0d0ceSAkhil Goyal struct mcs_port_cfg_set_req { 1051f0a0d0ceSAkhil Goyal struct mbox_msghdr hdr; 1052f0a0d0ceSAkhil Goyal uint8_t __io cstm_tag_rel_mode_sel; 1053f0a0d0ceSAkhil Goyal uint8_t __io custom_hdr_enb; 1054f0a0d0ceSAkhil Goyal uint8_t __io fifo_skid; 1055f0a0d0ceSAkhil Goyal uint8_t __io lmac_mode; 1056f0a0d0ceSAkhil Goyal uint8_t __io lmac_id; 1057f0a0d0ceSAkhil Goyal uint8_t __io mcs_id; 1058f0a0d0ceSAkhil Goyal uint64_t __io rsvd; 1059f0a0d0ceSAkhil Goyal }; 1060f0a0d0ceSAkhil Goyal 1061f0a0d0ceSAkhil Goyal struct mcs_port_cfg_get_req { 1062f0a0d0ceSAkhil Goyal struct mbox_msghdr hdr; 1063f0a0d0ceSAkhil Goyal uint8_t __io lmac_id; 1064f0a0d0ceSAkhil Goyal uint8_t __io mcs_id; 1065f0a0d0ceSAkhil Goyal uint64_t __io rsvd; 1066f0a0d0ceSAkhil Goyal }; 1067f0a0d0ceSAkhil Goyal 1068f0a0d0ceSAkhil Goyal struct mcs_port_cfg_get_rsp { 1069f0a0d0ceSAkhil Goyal struct mbox_msghdr hdr; 1070f0a0d0ceSAkhil Goyal uint8_t __io cstm_tag_rel_mode_sel; 1071f0a0d0ceSAkhil Goyal uint8_t __io custom_hdr_enb; 1072f0a0d0ceSAkhil Goyal uint8_t __io fifo_skid; 1073f0a0d0ceSAkhil Goyal uint8_t __io lmac_mode; 1074f0a0d0ceSAkhil Goyal uint8_t __io lmac_id; 1075f0a0d0ceSAkhil Goyal uint8_t __io mcs_id; 1076f0a0d0ceSAkhil Goyal uint64_t __io rsvd; 1077f0a0d0ceSAkhil Goyal }; 1078f0a0d0ceSAkhil Goyal 10792b1dbc07SAkhil Goyal struct mcs_custom_tag_cfg_get_req { 10802b1dbc07SAkhil Goyal struct mbox_msghdr hdr; 10812b1dbc07SAkhil Goyal uint8_t __io mcs_id; 10822b1dbc07SAkhil Goyal uint8_t __io dir; 10832b1dbc07SAkhil Goyal uint64_t __io rsvd; 10842b1dbc07SAkhil Goyal }; 10852b1dbc07SAkhil Goyal 10862b1dbc07SAkhil Goyal struct mcs_custom_tag_cfg_get_rsp { 10872b1dbc07SAkhil Goyal struct mbox_msghdr hdr; 10882b1dbc07SAkhil Goyal uint16_t __io cstm_etype[8]; 10892b1dbc07SAkhil Goyal uint8_t __io cstm_indx[8]; 10902b1dbc07SAkhil Goyal uint8_t __io cstm_etype_en; 10912b1dbc07SAkhil Goyal uint8_t __io mcs_id; 10922b1dbc07SAkhil Goyal uint8_t __io dir; 10932b1dbc07SAkhil Goyal uint64_t __io rsvd; 10942b1dbc07SAkhil Goyal }; 10952b1dbc07SAkhil Goyal 1096f0a0d0ceSAkhil Goyal struct mcs_port_reset_req { 1097f0a0d0ceSAkhil Goyal struct mbox_msghdr hdr; 1098f0a0d0ceSAkhil Goyal uint8_t __io reset; 1099f0a0d0ceSAkhil Goyal uint8_t __io mcs_id; 1100f0a0d0ceSAkhil Goyal uint8_t __io lmac_id; 1101f0a0d0ceSAkhil Goyal uint64_t __io rsvd; 1102f0a0d0ceSAkhil Goyal }; 1103f0a0d0ceSAkhil Goyal 1104bd8d7755SAkhil Goyal struct mcs_stats_req { 1105bd8d7755SAkhil Goyal struct mbox_msghdr hdr; 1106bd8d7755SAkhil Goyal uint8_t __io id; 1107bd8d7755SAkhil Goyal uint8_t __io mcs_id; 1108bd8d7755SAkhil Goyal uint8_t __io dir; 1109bd8d7755SAkhil Goyal uint64_t __io rsvd; 1110bd8d7755SAkhil Goyal }; 1111bd8d7755SAkhil Goyal 1112bd8d7755SAkhil Goyal struct mcs_flowid_stats { 1113bd8d7755SAkhil Goyal struct mbox_msghdr hdr; 1114bd8d7755SAkhil Goyal uint64_t __io tcam_hit_cnt; 1115bd8d7755SAkhil Goyal uint64_t __io rsvd; 1116bd8d7755SAkhil Goyal }; 1117bd8d7755SAkhil Goyal 1118bd8d7755SAkhil Goyal struct mcs_secy_stats { 1119bd8d7755SAkhil Goyal struct mbox_msghdr hdr; 1120bd8d7755SAkhil Goyal uint64_t __io ctl_pkt_bcast_cnt; 1121bd8d7755SAkhil Goyal uint64_t __io ctl_pkt_mcast_cnt; 1122bd8d7755SAkhil Goyal uint64_t __io ctl_pkt_ucast_cnt; 1123bd8d7755SAkhil Goyal uint64_t __io ctl_octet_cnt; 1124bd8d7755SAkhil Goyal uint64_t __io unctl_pkt_bcast_cnt; 1125bd8d7755SAkhil Goyal uint64_t __io unctl_pkt_mcast_cnt; 1126bd8d7755SAkhil Goyal uint64_t __io unctl_pkt_ucast_cnt; 1127bd8d7755SAkhil Goyal uint64_t __io unctl_octet_cnt; 1128bd8d7755SAkhil Goyal /* Valid only for RX */ 1129bd8d7755SAkhil Goyal uint64_t __io octet_decrypted_cnt; 1130bd8d7755SAkhil Goyal uint64_t __io octet_validated_cnt; 1131bd8d7755SAkhil Goyal uint64_t __io pkt_port_disabled_cnt; 1132bd8d7755SAkhil Goyal uint64_t __io pkt_badtag_cnt; 1133bd8d7755SAkhil Goyal uint64_t __io pkt_nosa_cnt; 1134bd8d7755SAkhil Goyal uint64_t __io pkt_nosaerror_cnt; 1135bd8d7755SAkhil Goyal uint64_t __io pkt_tagged_ctl_cnt; 1136bd8d7755SAkhil Goyal uint64_t __io pkt_untaged_cnt; 1137bd8d7755SAkhil Goyal uint64_t __io pkt_ctl_cnt; /* CN10K-B */ 1138bd8d7755SAkhil Goyal uint64_t __io pkt_notag_cnt; /* CNF10K-B */ 1139bd8d7755SAkhil Goyal /* Valid only for TX */ 1140bd8d7755SAkhil Goyal uint64_t __io octet_encrypted_cnt; 1141bd8d7755SAkhil Goyal uint64_t __io octet_protected_cnt; 1142bd8d7755SAkhil Goyal uint64_t __io pkt_noactivesa_cnt; 1143bd8d7755SAkhil Goyal uint64_t __io pkt_toolong_cnt; 1144bd8d7755SAkhil Goyal uint64_t __io pkt_untagged_cnt; 1145bd8d7755SAkhil Goyal uint64_t __io rsvd[4]; 1146bd8d7755SAkhil Goyal }; 1147bd8d7755SAkhil Goyal 1148bd8d7755SAkhil Goyal struct mcs_port_stats { 1149bd8d7755SAkhil Goyal struct mbox_msghdr hdr; 1150bd8d7755SAkhil Goyal uint64_t __io tcam_miss_cnt; 1151bd8d7755SAkhil Goyal uint64_t __io parser_err_cnt; 1152bd8d7755SAkhil Goyal uint64_t __io preempt_err_cnt; /* CNF10K-B */ 1153bd8d7755SAkhil Goyal uint64_t __io sectag_insert_err_cnt; 1154bd8d7755SAkhil Goyal uint64_t __io rsvd[4]; 1155bd8d7755SAkhil Goyal }; 1156bd8d7755SAkhil Goyal 1157bd8d7755SAkhil Goyal struct mcs_sc_stats { 1158bd8d7755SAkhil Goyal struct mbox_msghdr hdr; 1159bd8d7755SAkhil Goyal /* RX */ 1160bd8d7755SAkhil Goyal uint64_t __io hit_cnt; 1161bd8d7755SAkhil Goyal uint64_t __io pkt_invalid_cnt; 1162bd8d7755SAkhil Goyal uint64_t __io pkt_late_cnt; 1163bd8d7755SAkhil Goyal uint64_t __io pkt_notvalid_cnt; 1164bd8d7755SAkhil Goyal uint64_t __io pkt_unchecked_cnt; 1165bd8d7755SAkhil Goyal uint64_t __io pkt_delay_cnt; /* CNF10K-B */ 1166bd8d7755SAkhil Goyal uint64_t __io pkt_ok_cnt; /* CNF10K-B */ 1167bd8d7755SAkhil Goyal uint64_t __io octet_decrypt_cnt; /* CN10K-B */ 1168bd8d7755SAkhil Goyal uint64_t __io octet_validate_cnt; /* CN10K-B */ 1169bd8d7755SAkhil Goyal /* TX */ 1170bd8d7755SAkhil Goyal uint64_t __io pkt_encrypt_cnt; 1171bd8d7755SAkhil Goyal uint64_t __io pkt_protected_cnt; 1172bd8d7755SAkhil Goyal uint64_t __io octet_encrypt_cnt; /* CN10K-B */ 1173bd8d7755SAkhil Goyal uint64_t __io octet_protected_cnt; /* CN10K-B */ 1174bd8d7755SAkhil Goyal uint64_t __io rsvd[4]; 1175bd8d7755SAkhil Goyal }; 1176bd8d7755SAkhil Goyal 1177bd8d7755SAkhil Goyal struct mcs_clear_stats { 1178bd8d7755SAkhil Goyal struct mbox_msghdr hdr; 1179bd8d7755SAkhil Goyal #define MCS_FLOWID_STATS 0 1180bd8d7755SAkhil Goyal #define MCS_SECY_STATS 1 1181bd8d7755SAkhil Goyal #define MCS_SC_STATS 2 1182bd8d7755SAkhil Goyal #define MCS_SA_STATS 3 1183bd8d7755SAkhil Goyal #define MCS_PORT_STATS 4 1184bd8d7755SAkhil Goyal uint8_t __io type; /* FLOWID, SECY, SC, SA, PORT */ 1185bd8d7755SAkhil Goyal /* type = PORT, If id = FF(invalid) port no is derived from pcifunc */ 1186bd8d7755SAkhil Goyal uint8_t __io id; 1187bd8d7755SAkhil Goyal uint8_t __io mcs_id; 1188bd8d7755SAkhil Goyal uint8_t __io dir; 1189bd8d7755SAkhil Goyal uint8_t __io all; /* All resources stats mapped to PF are cleared */ 1190bd8d7755SAkhil Goyal }; 1191bd8d7755SAkhil Goyal 1192df5ba910SAkhil Goyal struct mcs_fips_req { 1193df5ba910SAkhil Goyal struct mbox_msghdr hdr; 1194df5ba910SAkhil Goyal uint8_t __io mcs_id; 1195df5ba910SAkhil Goyal uint8_t __io dir; 1196df5ba910SAkhil Goyal }; 1197df5ba910SAkhil Goyal 1198df5ba910SAkhil Goyal struct mcs_fips_mode_req { 1199df5ba910SAkhil Goyal struct mbox_msghdr hdr; 1200df5ba910SAkhil Goyal uint64_t __io mode; 1201df5ba910SAkhil Goyal uint8_t __io mcs_id; 1202df5ba910SAkhil Goyal uint8_t __io dir; 1203df5ba910SAkhil Goyal }; 1204df5ba910SAkhil Goyal 1205df5ba910SAkhil Goyal struct mcs_fips_ctl_req { 1206df5ba910SAkhil Goyal struct mbox_msghdr hdr; 1207df5ba910SAkhil Goyal uint64_t __io ctl; 1208df5ba910SAkhil Goyal uint8_t __io mcs_id; 1209df5ba910SAkhil Goyal uint8_t __io dir; 1210df5ba910SAkhil Goyal }; 1211df5ba910SAkhil Goyal 1212df5ba910SAkhil Goyal struct mcs_fips_iv_req { 1213df5ba910SAkhil Goyal struct mbox_msghdr hdr; 1214df5ba910SAkhil Goyal uint32_t __io iv_bits95_64; 1215df5ba910SAkhil Goyal uint64_t __io iv_bits63_0; 1216df5ba910SAkhil Goyal uint8_t __io mcs_id; 1217df5ba910SAkhil Goyal uint8_t __io dir; 1218df5ba910SAkhil Goyal }; 1219df5ba910SAkhil Goyal 1220df5ba910SAkhil Goyal struct mcs_fips_ctr_req { 1221df5ba910SAkhil Goyal struct mbox_msghdr hdr; 1222df5ba910SAkhil Goyal uint32_t __io fips_ctr; 1223df5ba910SAkhil Goyal uint8_t __io mcs_id; 1224df5ba910SAkhil Goyal uint8_t __io dir; 1225df5ba910SAkhil Goyal }; 1226df5ba910SAkhil Goyal 1227df5ba910SAkhil Goyal struct mcs_fips_key_req { 1228df5ba910SAkhil Goyal struct mbox_msghdr hdr; 1229df5ba910SAkhil Goyal uint64_t __io sak_bits255_192; 1230df5ba910SAkhil Goyal uint64_t __io sak_bits191_128; 1231df5ba910SAkhil Goyal uint64_t __io sak_bits127_64; 1232df5ba910SAkhil Goyal uint64_t __io sak_bits63_0; 1233df5ba910SAkhil Goyal uint64_t __io hashkey_bits127_64; 1234df5ba910SAkhil Goyal uint64_t __io hashkey_bits63_0; 1235df5ba910SAkhil Goyal uint8_t __io sak_len; 1236df5ba910SAkhil Goyal uint8_t __io mcs_id; 1237df5ba910SAkhil Goyal uint8_t __io dir; 1238df5ba910SAkhil Goyal }; 1239df5ba910SAkhil Goyal 1240df5ba910SAkhil Goyal struct mcs_fips_block_req { 1241df5ba910SAkhil Goyal struct mbox_msghdr hdr; 1242df5ba910SAkhil Goyal uint64_t __io blk_bits127_64; 1243df5ba910SAkhil Goyal uint64_t __io blk_bits63_0; 1244df5ba910SAkhil Goyal uint8_t __io mcs_id; 1245df5ba910SAkhil Goyal uint8_t __io dir; 1246df5ba910SAkhil Goyal }; 1247df5ba910SAkhil Goyal 1248df5ba910SAkhil Goyal struct mcs_fips_result_rsp { 1249df5ba910SAkhil Goyal struct mbox_msghdr hdr; 1250df5ba910SAkhil Goyal uint64_t __io blk_bits127_64; 1251df5ba910SAkhil Goyal uint64_t __io blk_bits63_0; 1252df5ba910SAkhil Goyal uint64_t __io icv_bits127_64; 1253df5ba910SAkhil Goyal uint64_t __io icv_bits63_0; 1254df5ba910SAkhil Goyal uint8_t __io result_pass; 1255df5ba910SAkhil Goyal }; 1256df5ba910SAkhil Goyal 1257503b82deSJerin Jacob /* NPA mbox message formats */ 1258503b82deSJerin Jacob 1259503b82deSJerin Jacob /* NPA mailbox error codes 1260503b82deSJerin Jacob * Range 301 - 400. 1261503b82deSJerin Jacob */ 1262503b82deSJerin Jacob enum npa_af_status { 1263503b82deSJerin Jacob NPA_AF_ERR_PARAM = -301, 1264503b82deSJerin Jacob NPA_AF_ERR_AQ_FULL = -302, 1265503b82deSJerin Jacob NPA_AF_ERR_AQ_ENQUEUE = -303, 1266503b82deSJerin Jacob NPA_AF_ERR_AF_LF_INVALID = -304, 1267503b82deSJerin Jacob NPA_AF_ERR_AF_LF_ALLOC = -305, 1268503b82deSJerin Jacob NPA_AF_ERR_LF_RESET = -306, 1269503b82deSJerin Jacob }; 1270503b82deSJerin Jacob 1271503b82deSJerin Jacob #define NPA_AURA_SZ_0 0 1272503b82deSJerin Jacob #define NPA_AURA_SZ_128 1 1273503b82deSJerin Jacob #define NPA_AURA_SZ_256 2 1274503b82deSJerin Jacob #define NPA_AURA_SZ_512 3 1275503b82deSJerin Jacob #define NPA_AURA_SZ_1K 4 1276503b82deSJerin Jacob #define NPA_AURA_SZ_2K 5 1277503b82deSJerin Jacob #define NPA_AURA_SZ_4K 6 1278503b82deSJerin Jacob #define NPA_AURA_SZ_8K 7 1279503b82deSJerin Jacob #define NPA_AURA_SZ_16K 8 1280503b82deSJerin Jacob #define NPA_AURA_SZ_32K 9 1281503b82deSJerin Jacob #define NPA_AURA_SZ_64K 10 1282503b82deSJerin Jacob #define NPA_AURA_SZ_128K 11 1283503b82deSJerin Jacob #define NPA_AURA_SZ_256K 12 1284503b82deSJerin Jacob #define NPA_AURA_SZ_512K 13 1285503b82deSJerin Jacob #define NPA_AURA_SZ_1M 14 1286503b82deSJerin Jacob #define NPA_AURA_SZ_MAX 15 1287503b82deSJerin Jacob 1288503b82deSJerin Jacob /* For NPA LF context alloc and init */ 1289503b82deSJerin Jacob struct npa_lf_alloc_req { 1290503b82deSJerin Jacob struct mbox_msghdr hdr; 1291503b82deSJerin Jacob int __io node; 1292503b82deSJerin Jacob int __io aura_sz; /* No of auras. See NPA_AURA_SZ_* */ 1293503b82deSJerin Jacob uint32_t __io nr_pools; /* No of pools */ 1294503b82deSJerin Jacob uint64_t __io way_mask; 1295503b82deSJerin Jacob }; 1296503b82deSJerin Jacob 1297503b82deSJerin Jacob struct npa_lf_alloc_rsp { 1298503b82deSJerin Jacob struct mbox_msghdr hdr; 1299503b82deSJerin Jacob uint32_t __io stack_pg_ptrs; /* No of ptrs per stack page */ 1300503b82deSJerin Jacob uint32_t __io stack_pg_bytes; /* Size of stack page */ 1301503b82deSJerin Jacob uint16_t __io qints; /* NPA_AF_CONST::QINTS */ 1302503b82deSJerin Jacob uint8_t __io cache_lines; /* Batch Alloc DMA */ 1303503b82deSJerin Jacob }; 1304503b82deSJerin Jacob 1305503b82deSJerin Jacob /* NPA AQ enqueue msg */ 1306503b82deSJerin Jacob struct npa_aq_enq_req { 1307503b82deSJerin Jacob struct mbox_msghdr hdr; 1308503b82deSJerin Jacob uint32_t __io aura_id; 1309503b82deSJerin Jacob uint8_t __io ctype; 1310503b82deSJerin Jacob uint8_t __io op; 1311503b82deSJerin Jacob union { 1312503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == AURA. 1313503b82deSJerin Jacob * LF fills the pool_id in aura.pool_addr. AF will translate 1314503b82deSJerin Jacob * the pool_id to pool context pointer. 1315503b82deSJerin Jacob */ 1316503b82deSJerin Jacob __io struct npa_aura_s aura; 1317503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == POOL */ 1318503b82deSJerin Jacob __io struct npa_pool_s pool; 1319503b82deSJerin Jacob }; 1320503b82deSJerin Jacob /* Mask data when op == WRITE (1=write, 0=don't write) */ 1321503b82deSJerin Jacob union { 1322503b82deSJerin Jacob /* Valid when op == WRITE and ctype == AURA */ 1323503b82deSJerin Jacob __io struct npa_aura_s aura_mask; 1324503b82deSJerin Jacob /* Valid when op == WRITE and ctype == POOL */ 1325503b82deSJerin Jacob __io struct npa_pool_s pool_mask; 1326503b82deSJerin Jacob }; 1327503b82deSJerin Jacob }; 1328503b82deSJerin Jacob 1329503b82deSJerin Jacob struct npa_aq_enq_rsp { 1330503b82deSJerin Jacob struct mbox_msghdr hdr; 1331503b82deSJerin Jacob union { 1332503b82deSJerin Jacob /* Valid when op == READ and ctype == AURA */ 1333503b82deSJerin Jacob __io struct npa_aura_s aura; 1334503b82deSJerin Jacob /* Valid when op == READ and ctype == POOL */ 1335503b82deSJerin Jacob __io struct npa_pool_s pool; 1336503b82deSJerin Jacob }; 1337503b82deSJerin Jacob }; 1338503b82deSJerin Jacob 1339143a419eSAshwin Sekhar T K struct npa_cn20k_aq_enq_req { 1340143a419eSAshwin Sekhar T K struct mbox_msghdr hdr; 1341143a419eSAshwin Sekhar T K uint32_t __io aura_id; 1342143a419eSAshwin Sekhar T K uint8_t __io ctype; 1343143a419eSAshwin Sekhar T K uint8_t __io op; 1344143a419eSAshwin Sekhar T K union { 1345143a419eSAshwin Sekhar T K /* Valid when op == WRITE/INIT and ctype == AURA */ 1346143a419eSAshwin Sekhar T K __io struct npa_cn20k_aura_s aura; 1347143a419eSAshwin Sekhar T K /* Valid when op == WRITE/INIT and ctype == POOL */ 1348143a419eSAshwin Sekhar T K __io struct npa_cn20k_pool_s pool; 1349143a419eSAshwin Sekhar T K }; 1350143a419eSAshwin Sekhar T K /* Mask data when op == WRITE (1=write, 0=don't write) */ 1351143a419eSAshwin Sekhar T K union { 1352143a419eSAshwin Sekhar T K /* Valid when op == WRITE and ctype == AURA */ 1353143a419eSAshwin Sekhar T K __io struct npa_cn20k_aura_s aura_mask; 1354143a419eSAshwin Sekhar T K /* Valid when op == WRITE and ctype == POOL */ 1355143a419eSAshwin Sekhar T K __io struct npa_cn20k_pool_s pool_mask; 1356143a419eSAshwin Sekhar T K }; 1357143a419eSAshwin Sekhar T K }; 1358143a419eSAshwin Sekhar T K 1359143a419eSAshwin Sekhar T K struct npa_cn20k_aq_enq_rsp { 1360143a419eSAshwin Sekhar T K struct mbox_msghdr hdr; 1361143a419eSAshwin Sekhar T K union { 1362143a419eSAshwin Sekhar T K /* Valid when op == READ and ctype == AURA */ 1363143a419eSAshwin Sekhar T K __io struct npa_cn20k_aura_s aura; 1364143a419eSAshwin Sekhar T K /* Valid when op == READ and ctype == POOL */ 1365143a419eSAshwin Sekhar T K __io struct npa_cn20k_pool_s pool; 1366143a419eSAshwin Sekhar T K }; 1367143a419eSAshwin Sekhar T K }; 1368143a419eSAshwin Sekhar T K 1369503b82deSJerin Jacob /* Disable all contexts of type 'ctype' */ 1370503b82deSJerin Jacob struct hwctx_disable_req { 1371503b82deSJerin Jacob struct mbox_msghdr hdr; 1372503b82deSJerin Jacob uint8_t __io ctype; 1373503b82deSJerin Jacob }; 1374503b82deSJerin Jacob 1375503b82deSJerin Jacob /* NIX mbox message formats */ 1376503b82deSJerin Jacob 1377503b82deSJerin Jacob /* NIX mailbox error codes 1378503b82deSJerin Jacob * Range 401 - 500. 1379503b82deSJerin Jacob */ 1380503b82deSJerin Jacob enum nix_af_status { 1381503b82deSJerin Jacob NIX_AF_ERR_PARAM = -401, 1382503b82deSJerin Jacob NIX_AF_ERR_AQ_FULL = -402, 1383503b82deSJerin Jacob NIX_AF_ERR_AQ_ENQUEUE = -403, 1384503b82deSJerin Jacob NIX_AF_ERR_AF_LF_INVALID = -404, 1385503b82deSJerin Jacob NIX_AF_ERR_AF_LF_ALLOC = -405, 1386503b82deSJerin Jacob NIX_AF_ERR_TLX_ALLOC_FAIL = -406, 1387503b82deSJerin Jacob NIX_AF_ERR_TLX_INVALID = -407, 1388503b82deSJerin Jacob NIX_AF_ERR_RSS_SIZE_INVALID = -408, 1389503b82deSJerin Jacob NIX_AF_ERR_RSS_GRPS_INVALID = -409, 1390503b82deSJerin Jacob NIX_AF_ERR_FRS_INVALID = -410, 1391503b82deSJerin Jacob NIX_AF_ERR_RX_LINK_INVALID = -411, 1392503b82deSJerin Jacob NIX_AF_INVAL_TXSCHQ_CFG = -412, 1393503b82deSJerin Jacob NIX_AF_SMQ_FLUSH_FAILED = -413, 1394503b82deSJerin Jacob NIX_AF_ERR_LF_RESET = -414, 1395503b82deSJerin Jacob NIX_AF_ERR_RSS_NOSPC_FIELD = -415, 1396503b82deSJerin Jacob NIX_AF_ERR_RSS_NOSPC_ALGO = -416, 1397503b82deSJerin Jacob NIX_AF_ERR_MARK_CFG_FAIL = -417, 1398503b82deSJerin Jacob NIX_AF_ERR_LSO_CFG_FAIL = -418, 1399503b82deSJerin Jacob NIX_AF_INVAL_NPA_PF_FUNC = -419, 1400503b82deSJerin Jacob NIX_AF_INVAL_SSO_PF_FUNC = -420, 1401503b82deSJerin Jacob NIX_AF_ERR_TX_VTAG_NOSPC = -421, 1402503b82deSJerin Jacob NIX_AF_ERR_RX_VTAG_INUSE = -422, 1403503b82deSJerin Jacob NIX_AF_ERR_PTP_CONFIG_FAIL = -423, 1404503b82deSJerin Jacob }; 1405503b82deSJerin Jacob 1406503b82deSJerin Jacob /* For NIX LF context alloc and init */ 1407503b82deSJerin Jacob struct nix_lf_alloc_req { 1408503b82deSJerin Jacob struct mbox_msghdr hdr; 1409503b82deSJerin Jacob int __io node; 1410503b82deSJerin Jacob uint32_t __io rq_cnt; /* No of receive queues */ 1411503b82deSJerin Jacob uint32_t __io sq_cnt; /* No of send queues */ 1412503b82deSJerin Jacob uint32_t __io cq_cnt; /* No of completion queues */ 1413503b82deSJerin Jacob uint8_t __io xqe_sz; 1414503b82deSJerin Jacob uint16_t __io rss_sz; 1415503b82deSJerin Jacob uint8_t __io rss_grps; 1416503b82deSJerin Jacob uint16_t __io npa_func; 1417503b82deSJerin Jacob /* RVU_DEFAULT_PF_FUNC == default pf_func associated with lf */ 1418503b82deSJerin Jacob uint16_t __io sso_func; 1419503b82deSJerin Jacob uint64_t __io rx_cfg; /* See NIX_AF_LF(0..127)_RX_CFG */ 1420503b82deSJerin Jacob uint64_t __io way_mask; 1421503b82deSJerin Jacob #define NIX_LF_RSS_TAG_LSB_AS_ADDER BIT_ULL(0) 142270cf1c63SHarman Kalra #define NIX_LF_LBK_BLK_SEL BIT_ULL(1) 1423b2c5ff1bSNithin Dabilpuram uint64_t __io flags; 1424503b82deSJerin Jacob }; 1425503b82deSJerin Jacob 1426503b82deSJerin Jacob struct nix_lf_alloc_rsp { 1427503b82deSJerin Jacob struct mbox_msghdr hdr; 1428503b82deSJerin Jacob uint16_t __io sqb_size; 1429503b82deSJerin Jacob uint16_t __io rx_chan_base; 1430503b82deSJerin Jacob uint16_t __io tx_chan_base; 1431503b82deSJerin Jacob uint8_t __io rx_chan_cnt; /* Total number of RX channels */ 1432503b82deSJerin Jacob uint8_t __io tx_chan_cnt; /* Total number of TX channels */ 1433503b82deSJerin Jacob uint8_t __io lso_tsov4_idx; 1434503b82deSJerin Jacob uint8_t __io lso_tsov6_idx; 1435503b82deSJerin Jacob uint8_t __io mac_addr[PLT_ETHER_ADDR_LEN]; 1436503b82deSJerin Jacob uint8_t __io lf_rx_stats; /* NIX_AF_CONST1::LF_RX_STATS */ 1437503b82deSJerin Jacob uint8_t __io lf_tx_stats; /* NIX_AF_CONST1::LF_TX_STATS */ 1438503b82deSJerin Jacob uint16_t __io cints; /* NIX_AF_CONST2::CINTS */ 1439503b82deSJerin Jacob uint16_t __io qints; /* NIX_AF_CONST2::QINTS */ 1440503b82deSJerin Jacob uint8_t __io hw_rx_tstamp_en; /*set if rx timestamping enabled */ 1441503b82deSJerin Jacob uint8_t __io cgx_links; /* No. of CGX links present in HW */ 1442503b82deSJerin Jacob uint8_t __io lbk_links; /* No. of LBK links present in HW */ 1443503b82deSJerin Jacob uint8_t __io sdp_links; /* No. of SDP links present in HW */ 1444b2c5ff1bSNithin Dabilpuram uint8_t __io tx_link; /* Transmit channel link number */ 1445503b82deSJerin Jacob }; 1446503b82deSJerin Jacob 1447503b82deSJerin Jacob struct nix_lf_free_req { 1448503b82deSJerin Jacob struct mbox_msghdr hdr; 1449503b82deSJerin Jacob #define NIX_LF_DISABLE_FLOWS BIT_ULL(0) 1450503b82deSJerin Jacob #define NIX_LF_DONT_FREE_TX_VTAG BIT_ULL(1) 1451503b82deSJerin Jacob uint64_t __io flags; 1452503b82deSJerin Jacob }; 1453503b82deSJerin Jacob 14549a01217eSSatha Rao /* CN20x NIX AQ enqueue msg */ 14559a01217eSSatha Rao struct nix_cn20k_aq_enq_req { 14569a01217eSSatha Rao struct mbox_msghdr hdr; 14579a01217eSSatha Rao uint32_t __io qidx; 14589a01217eSSatha Rao uint8_t __io ctype; 14599a01217eSSatha Rao uint8_t __io op; 14609a01217eSSatha Rao union { 14619a01217eSSatha Rao /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_RQ */ 14629a01217eSSatha Rao __io struct nix_cn20k_rq_ctx_s rq; 14639a01217eSSatha Rao /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_SQ */ 14649a01217eSSatha Rao __io struct nix_cn20k_sq_ctx_s sq; 14659a01217eSSatha Rao /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_CQ */ 14669a01217eSSatha Rao __io struct nix_cn20k_cq_ctx_s cq; 14679a01217eSSatha Rao /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_RSS */ 14689a01217eSSatha Rao __io struct nix_rsse_s rss; 14699a01217eSSatha Rao /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_MCE */ 14709a01217eSSatha Rao __io struct nix_rx_mce_s mce; 14719a01217eSSatha Rao /* Valid when op == WRITE/INIT and 14729a01217eSSatha Rao * ctype == NIX_AQ_CTYPE_BAND_PROF 14739a01217eSSatha Rao */ 14749a01217eSSatha Rao __io struct nix_band_prof_s prof; 14759a01217eSSatha Rao }; 14769a01217eSSatha Rao /* Mask data when op == WRITE (1=write, 0=don't write) */ 14779a01217eSSatha Rao union { 14789a01217eSSatha Rao /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_RQ */ 14799a01217eSSatha Rao __io struct nix_cn20k_rq_ctx_s rq_mask; 14809a01217eSSatha Rao /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_SQ */ 14819a01217eSSatha Rao __io struct nix_cn20k_sq_ctx_s sq_mask; 14829a01217eSSatha Rao /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_CQ */ 14839a01217eSSatha Rao __io struct nix_cn20k_cq_ctx_s cq_mask; 14849a01217eSSatha Rao /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_RSS */ 14859a01217eSSatha Rao __io struct nix_rsse_s rss_mask; 14869a01217eSSatha Rao /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_MCE */ 14879a01217eSSatha Rao __io struct nix_rx_mce_s mce_mask; 14889a01217eSSatha Rao /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_BAND_PROF */ 14899a01217eSSatha Rao __io struct nix_band_prof_s prof_mask; 14909a01217eSSatha Rao }; 14919a01217eSSatha Rao }; 14929a01217eSSatha Rao 14939a01217eSSatha Rao struct nix_cn20k_aq_enq_rsp { 14949a01217eSSatha Rao struct mbox_msghdr hdr; 14959a01217eSSatha Rao union { 14969a01217eSSatha Rao __io struct nix_cn20k_rq_ctx_s rq; 14979a01217eSSatha Rao __io struct nix_cn20k_sq_ctx_s sq; 14989a01217eSSatha Rao __io struct nix_cn20k_cq_ctx_s cq; 14999a01217eSSatha Rao __io struct nix_rsse_s rss; 15009a01217eSSatha Rao __io struct nix_rx_mce_s mce; 15019a01217eSSatha Rao __io struct nix_band_prof_s prof; 15029a01217eSSatha Rao }; 15039a01217eSSatha Rao }; 15049a01217eSSatha Rao 1505503b82deSJerin Jacob /* CN10x NIX AQ enqueue msg */ 1506503b82deSJerin Jacob struct nix_cn10k_aq_enq_req { 1507503b82deSJerin Jacob struct mbox_msghdr hdr; 1508503b82deSJerin Jacob uint32_t __io qidx; 1509503b82deSJerin Jacob uint8_t __io ctype; 1510503b82deSJerin Jacob uint8_t __io op; 1511503b82deSJerin Jacob union { 1512503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_RQ */ 1513503b82deSJerin Jacob __io struct nix_cn10k_rq_ctx_s rq; 1514503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_SQ */ 1515503b82deSJerin Jacob __io struct nix_cn10k_sq_ctx_s sq; 1516503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_CQ */ 1517503b82deSJerin Jacob __io struct nix_cq_ctx_s cq; 1518503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_RSS */ 1519503b82deSJerin Jacob __io struct nix_rsse_s rss; 1520503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_MCE */ 1521503b82deSJerin Jacob __io struct nix_rx_mce_s mce; 1522cf8f6aa1SSunil Kumar Kori /* Valid when op == WRITE/INIT and 1523cf8f6aa1SSunil Kumar Kori * ctype == NIX_AQ_CTYPE_BAND_PROF 1524cf8f6aa1SSunil Kumar Kori */ 1525cf8f6aa1SSunil Kumar Kori __io struct nix_band_prof_s prof; 1526503b82deSJerin Jacob }; 1527503b82deSJerin Jacob /* Mask data when op == WRITE (1=write, 0=don't write) */ 1528503b82deSJerin Jacob union { 1529503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_RQ */ 1530503b82deSJerin Jacob __io struct nix_cn10k_rq_ctx_s rq_mask; 1531503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_SQ */ 1532503b82deSJerin Jacob __io struct nix_cn10k_sq_ctx_s sq_mask; 1533503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_CQ */ 1534503b82deSJerin Jacob __io struct nix_cq_ctx_s cq_mask; 1535503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_RSS */ 1536503b82deSJerin Jacob __io struct nix_rsse_s rss_mask; 1537503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_MCE */ 1538503b82deSJerin Jacob __io struct nix_rx_mce_s mce_mask; 1539cf8f6aa1SSunil Kumar Kori /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_BAND_PROF */ 1540cf8f6aa1SSunil Kumar Kori __io struct nix_band_prof_s prof_mask; 1541503b82deSJerin Jacob }; 1542503b82deSJerin Jacob }; 1543503b82deSJerin Jacob 1544503b82deSJerin Jacob struct nix_cn10k_aq_enq_rsp { 1545503b82deSJerin Jacob struct mbox_msghdr hdr; 1546503b82deSJerin Jacob union { 1547c9dca1c5SNithin Dabilpuram __io struct nix_cn10k_rq_ctx_s rq; 1548c9dca1c5SNithin Dabilpuram __io struct nix_cn10k_sq_ctx_s sq; 1549c9dca1c5SNithin Dabilpuram __io struct nix_cq_ctx_s cq; 1550c9dca1c5SNithin Dabilpuram __io struct nix_rsse_s rss; 1551c9dca1c5SNithin Dabilpuram __io struct nix_rx_mce_s mce; 1552c9dca1c5SNithin Dabilpuram __io struct nix_band_prof_s prof; 1553503b82deSJerin Jacob }; 1554503b82deSJerin Jacob }; 1555503b82deSJerin Jacob 1556503b82deSJerin Jacob /* NIX AQ enqueue msg */ 1557503b82deSJerin Jacob struct nix_aq_enq_req { 1558503b82deSJerin Jacob struct mbox_msghdr hdr; 1559503b82deSJerin Jacob uint32_t __io qidx; 1560503b82deSJerin Jacob uint8_t __io ctype; 1561503b82deSJerin Jacob uint8_t __io op; 1562503b82deSJerin Jacob union { 1563503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_RQ */ 1564503b82deSJerin Jacob __io struct nix_rq_ctx_s rq; 1565503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_SQ */ 1566503b82deSJerin Jacob __io struct nix_sq_ctx_s sq; 1567503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_CQ */ 1568503b82deSJerin Jacob __io struct nix_cq_ctx_s cq; 1569503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_RSS */ 1570503b82deSJerin Jacob __io struct nix_rsse_s rss; 1571503b82deSJerin Jacob /* Valid when op == WRITE/INIT and ctype == NIX_AQ_CTYPE_MCE */ 1572503b82deSJerin Jacob __io struct nix_rx_mce_s mce; 1573503b82deSJerin Jacob }; 1574503b82deSJerin Jacob /* Mask data when op == WRITE (1=write, 0=don't write) */ 1575503b82deSJerin Jacob union { 1576503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_RQ */ 1577503b82deSJerin Jacob __io struct nix_rq_ctx_s rq_mask; 1578503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_SQ */ 1579503b82deSJerin Jacob __io struct nix_sq_ctx_s sq_mask; 1580503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_CQ */ 1581503b82deSJerin Jacob __io struct nix_cq_ctx_s cq_mask; 1582503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_RSS */ 1583503b82deSJerin Jacob __io struct nix_rsse_s rss_mask; 1584503b82deSJerin Jacob /* Valid when op == WRITE and ctype == NIX_AQ_CTYPE_MCE */ 1585503b82deSJerin Jacob __io struct nix_rx_mce_s mce_mask; 1586503b82deSJerin Jacob }; 1587503b82deSJerin Jacob }; 1588503b82deSJerin Jacob 1589503b82deSJerin Jacob struct nix_aq_enq_rsp { 1590503b82deSJerin Jacob struct mbox_msghdr hdr; 1591503b82deSJerin Jacob union { 1592503b82deSJerin Jacob __io struct nix_rq_ctx_s rq; 1593503b82deSJerin Jacob __io struct nix_sq_ctx_s sq; 1594503b82deSJerin Jacob __io struct nix_cq_ctx_s cq; 1595503b82deSJerin Jacob __io struct nix_rsse_s rss; 1596503b82deSJerin Jacob __io struct nix_rx_mce_s mce; 1597503b82deSJerin Jacob }; 1598503b82deSJerin Jacob }; 1599503b82deSJerin Jacob 1600503b82deSJerin Jacob /* Tx scheduler/shaper mailbox messages */ 1601503b82deSJerin Jacob 1602503b82deSJerin Jacob #define MAX_TXSCHQ_PER_FUNC 128 1603503b82deSJerin Jacob 1604503b82deSJerin Jacob struct nix_txsch_alloc_req { 1605503b82deSJerin Jacob struct mbox_msghdr hdr; 1606503b82deSJerin Jacob /* Scheduler queue count request at each level */ 1607503b82deSJerin Jacob uint16_t __io schq_contig[NIX_TXSCH_LVL_CNT]; /* Contig. queues */ 1608503b82deSJerin Jacob uint16_t __io schq[NIX_TXSCH_LVL_CNT]; /* Non-Contig. queues */ 1609503b82deSJerin Jacob }; 1610503b82deSJerin Jacob 1611503b82deSJerin Jacob struct nix_txsch_alloc_rsp { 1612503b82deSJerin Jacob struct mbox_msghdr hdr; 1613503b82deSJerin Jacob /* Scheduler queue count allocated at each level */ 1614503b82deSJerin Jacob uint16_t __io schq_contig[NIX_TXSCH_LVL_CNT]; /* Contig. queues */ 1615503b82deSJerin Jacob uint16_t __io schq[NIX_TXSCH_LVL_CNT]; /* Non-Contig. queues */ 1616503b82deSJerin Jacob /* Scheduler queue list allocated at each level */ 1617503b82deSJerin Jacob uint16_t __io schq_contig_list[NIX_TXSCH_LVL_CNT][MAX_TXSCHQ_PER_FUNC]; 1618503b82deSJerin Jacob uint16_t __io schq_list[NIX_TXSCH_LVL_CNT][MAX_TXSCHQ_PER_FUNC]; 1619503b82deSJerin Jacob /* Traffic aggregation scheduler level */ 1620503b82deSJerin Jacob uint8_t __io aggr_level; 1621503b82deSJerin Jacob /* Aggregation lvl's RR_PRIO config */ 1622503b82deSJerin Jacob uint8_t __io aggr_lvl_rr_prio; 1623503b82deSJerin Jacob /* LINKX_CFG CSRs mapped to TL3 or TL2's index ? */ 1624503b82deSJerin Jacob uint8_t __io link_cfg_lvl; 1625503b82deSJerin Jacob }; 1626503b82deSJerin Jacob 1627503b82deSJerin Jacob struct nix_txsch_free_req { 1628503b82deSJerin Jacob struct mbox_msghdr hdr; 1629503b82deSJerin Jacob #define TXSCHQ_FREE_ALL BIT_ULL(0) 1630503b82deSJerin Jacob uint16_t __io flags; 1631503b82deSJerin Jacob /* Scheduler queue level to be freed */ 1632503b82deSJerin Jacob uint16_t __io schq_lvl; 1633503b82deSJerin Jacob /* List of scheduler queues to be freed */ 1634503b82deSJerin Jacob uint16_t __io schq; 1635503b82deSJerin Jacob }; 1636503b82deSJerin Jacob 1637503b82deSJerin Jacob struct nix_txschq_config { 1638503b82deSJerin Jacob struct mbox_msghdr hdr; 1639503b82deSJerin Jacob uint8_t __io lvl; /* SMQ/MDQ/TL4/TL3/TL2/TL1 */ 1640503b82deSJerin Jacob uint8_t __io read; 1641503b82deSJerin Jacob #define TXSCHQ_IDX_SHIFT 16 1642503b82deSJerin Jacob #define TXSCHQ_IDX_MASK (BIT_ULL(10) - 1) 1643503b82deSJerin Jacob #define TXSCHQ_IDX(reg, shift) (((reg) >> (shift)) & TXSCHQ_IDX_MASK) 1644503b82deSJerin Jacob uint8_t __io num_regs; 1645503b82deSJerin Jacob #define MAX_REGS_PER_MBOX_MSG 20 1646503b82deSJerin Jacob uint64_t __io reg[MAX_REGS_PER_MBOX_MSG]; 1647503b82deSJerin Jacob uint64_t __io regval[MAX_REGS_PER_MBOX_MSG]; 1648503b82deSJerin Jacob /* All 0's => overwrite with new value */ 1649503b82deSJerin Jacob uint64_t __io regval_mask[MAX_REGS_PER_MBOX_MSG]; 1650503b82deSJerin Jacob }; 1651503b82deSJerin Jacob 1652503b82deSJerin Jacob struct nix_vtag_config { 1653503b82deSJerin Jacob struct mbox_msghdr hdr; 1654503b82deSJerin Jacob /* '0' for 4 octet VTAG, '1' for 8 octet VTAG */ 1655503b82deSJerin Jacob uint8_t __io vtag_size; 1656503b82deSJerin Jacob /* cfg_type is '0' for tx vlan cfg 1657503b82deSJerin Jacob * cfg_type is '1' for rx vlan cfg 1658503b82deSJerin Jacob */ 1659503b82deSJerin Jacob uint8_t __io cfg_type; 1660503b82deSJerin Jacob union { 1661503b82deSJerin Jacob /* Valid when cfg_type is '0' */ 1662503b82deSJerin Jacob struct { 1663503b82deSJerin Jacob uint64_t __io vtag0; 1664503b82deSJerin Jacob uint64_t __io vtag1; 1665503b82deSJerin Jacob 1666503b82deSJerin Jacob /* cfg_vtag0 & cfg_vtag1 fields are valid 1667503b82deSJerin Jacob * when free_vtag0 & free_vtag1 are '0's. 1668503b82deSJerin Jacob */ 1669503b82deSJerin Jacob /* cfg_vtag0 = 1 to configure vtag0 */ 1670503b82deSJerin Jacob uint8_t __io cfg_vtag0 : 1; 1671503b82deSJerin Jacob /* cfg_vtag1 = 1 to configure vtag1 */ 1672503b82deSJerin Jacob uint8_t __io cfg_vtag1 : 1; 1673503b82deSJerin Jacob 1674503b82deSJerin Jacob /* vtag0_idx & vtag1_idx are only valid when 1675503b82deSJerin Jacob * both cfg_vtag0 & cfg_vtag1 are '0's, 1676503b82deSJerin Jacob * these fields are used along with free_vtag0 1677503b82deSJerin Jacob * & free_vtag1 to free the nix lf's tx_vlan 1678503b82deSJerin Jacob * configuration. 1679503b82deSJerin Jacob * 1680503b82deSJerin Jacob * Denotes the indices of tx_vtag def registers 1681503b82deSJerin Jacob * that needs to be cleared and freed. 1682503b82deSJerin Jacob */ 1683503b82deSJerin Jacob int __io vtag0_idx; 1684503b82deSJerin Jacob int __io vtag1_idx; 1685503b82deSJerin Jacob 1686503b82deSJerin Jacob /* Free_vtag0 & free_vtag1 fields are valid 1687503b82deSJerin Jacob * when cfg_vtag0 & cfg_vtag1 are '0's. 1688503b82deSJerin Jacob */ 1689503b82deSJerin Jacob /* Free_vtag0 = 1 clears vtag0 configuration 1690503b82deSJerin Jacob * vtag0_idx denotes the index to be cleared. 1691503b82deSJerin Jacob */ 1692503b82deSJerin Jacob uint8_t __io free_vtag0 : 1; 1693503b82deSJerin Jacob /* Free_vtag1 = 1 clears vtag1 configuration 1694503b82deSJerin Jacob * vtag1_idx denotes the index to be cleared. 1695503b82deSJerin Jacob */ 1696503b82deSJerin Jacob uint8_t __io free_vtag1 : 1; 1697503b82deSJerin Jacob } tx; 1698503b82deSJerin Jacob 1699503b82deSJerin Jacob /* Valid when cfg_type is '1' */ 1700503b82deSJerin Jacob struct { 1701503b82deSJerin Jacob /* Rx vtag type index, valid values are in 0..7 range */ 1702503b82deSJerin Jacob uint8_t __io vtag_type; 1703503b82deSJerin Jacob /* Rx vtag strip */ 1704503b82deSJerin Jacob uint8_t __io strip_vtag : 1; 1705503b82deSJerin Jacob /* Rx vtag capture */ 1706503b82deSJerin Jacob uint8_t __io capture_vtag : 1; 1707503b82deSJerin Jacob } rx; 1708503b82deSJerin Jacob }; 1709503b82deSJerin Jacob }; 1710503b82deSJerin Jacob 1711503b82deSJerin Jacob struct nix_vtag_config_rsp { 1712503b82deSJerin Jacob struct mbox_msghdr hdr; 1713503b82deSJerin Jacob /* Indices of tx_vtag def registers used to configure 1714503b82deSJerin Jacob * tx vtag0 & vtag1 headers, these indices are valid 1715503b82deSJerin Jacob * when nix_vtag_config mbox requested for vtag0 and/ 1716503b82deSJerin Jacob * or vtag1 configuration. 1717503b82deSJerin Jacob */ 1718503b82deSJerin Jacob int __io vtag0_idx; 1719503b82deSJerin Jacob int __io vtag1_idx; 1720503b82deSJerin Jacob }; 1721503b82deSJerin Jacob 1722503b82deSJerin Jacob struct nix_rss_flowkey_cfg { 1723503b82deSJerin Jacob struct mbox_msghdr hdr; 1724503b82deSJerin Jacob int __io mcam_index; /* MCAM entry index to modify */ 1725503b82deSJerin Jacob uint32_t __io flowkey_cfg; /* Flowkey types selected */ 1726503b82deSJerin Jacob #define FLOW_KEY_TYPE_PORT BIT(0) 1727503b82deSJerin Jacob #define FLOW_KEY_TYPE_IPV4 BIT(1) 1728503b82deSJerin Jacob #define FLOW_KEY_TYPE_IPV6 BIT(2) 1729503b82deSJerin Jacob #define FLOW_KEY_TYPE_TCP BIT(3) 1730503b82deSJerin Jacob #define FLOW_KEY_TYPE_UDP BIT(4) 1731503b82deSJerin Jacob #define FLOW_KEY_TYPE_SCTP BIT(5) 1732503b82deSJerin Jacob #define FLOW_KEY_TYPE_NVGRE BIT(6) 1733503b82deSJerin Jacob #define FLOW_KEY_TYPE_VXLAN BIT(7) 1734503b82deSJerin Jacob #define FLOW_KEY_TYPE_GENEVE BIT(8) 1735503b82deSJerin Jacob #define FLOW_KEY_TYPE_ETH_DMAC BIT(9) 1736503b82deSJerin Jacob #define FLOW_KEY_TYPE_IPV6_EXT BIT(10) 1737503b82deSJerin Jacob #define FLOW_KEY_TYPE_GTPU BIT(11) 1738503b82deSJerin Jacob #define FLOW_KEY_TYPE_INNR_IPV4 BIT(12) 1739503b82deSJerin Jacob #define FLOW_KEY_TYPE_INNR_IPV6 BIT(13) 1740503b82deSJerin Jacob #define FLOW_KEY_TYPE_INNR_TCP BIT(14) 1741503b82deSJerin Jacob #define FLOW_KEY_TYPE_INNR_UDP BIT(15) 1742503b82deSJerin Jacob #define FLOW_KEY_TYPE_INNR_SCTP BIT(16) 1743503b82deSJerin Jacob #define FLOW_KEY_TYPE_INNR_ETH_DMAC BIT(17) 1744503b82deSJerin Jacob #define FLOW_KEY_TYPE_CH_LEN_90B BIT(18) 1745503b82deSJerin Jacob #define FLOW_KEY_TYPE_CUSTOM0 BIT(19) 1746503b82deSJerin Jacob #define FLOW_KEY_TYPE_VLAN BIT(20) 1747503b82deSJerin Jacob #define FLOW_KEY_TYPE_L4_DST BIT(28) 1748503b82deSJerin Jacob #define FLOW_KEY_TYPE_L4_SRC BIT(29) 1749503b82deSJerin Jacob #define FLOW_KEY_TYPE_L3_DST BIT(30) 1750503b82deSJerin Jacob #define FLOW_KEY_TYPE_L3_SRC BIT(31) 1751503b82deSJerin Jacob uint8_t __io group; /* RSS context or group */ 1752503b82deSJerin Jacob }; 1753503b82deSJerin Jacob 1754503b82deSJerin Jacob struct nix_rss_flowkey_cfg_rsp { 1755503b82deSJerin Jacob struct mbox_msghdr hdr; 1756503b82deSJerin Jacob uint8_t __io alg_idx; /* Selected algo index */ 1757503b82deSJerin Jacob }; 1758503b82deSJerin Jacob 1759503b82deSJerin Jacob struct nix_set_mac_addr { 1760503b82deSJerin Jacob struct mbox_msghdr hdr; 1761503b82deSJerin Jacob uint8_t __io mac_addr[PLT_ETHER_ADDR_LEN]; 1762503b82deSJerin Jacob }; 1763503b82deSJerin Jacob 1764503b82deSJerin Jacob struct nix_get_mac_addr_rsp { 1765503b82deSJerin Jacob struct mbox_msghdr hdr; 1766503b82deSJerin Jacob uint8_t __io mac_addr[PLT_ETHER_ADDR_LEN]; 1767503b82deSJerin Jacob }; 1768503b82deSJerin Jacob 1769503b82deSJerin Jacob struct nix_mark_format_cfg { 1770503b82deSJerin Jacob struct mbox_msghdr hdr; 1771503b82deSJerin Jacob uint8_t __io offset; 1772503b82deSJerin Jacob uint8_t __io y_mask; 1773503b82deSJerin Jacob uint8_t __io y_val; 1774503b82deSJerin Jacob uint8_t __io r_mask; 1775503b82deSJerin Jacob uint8_t __io r_val; 1776503b82deSJerin Jacob }; 1777503b82deSJerin Jacob 1778503b82deSJerin Jacob struct nix_mark_format_cfg_rsp { 1779503b82deSJerin Jacob struct mbox_msghdr hdr; 1780503b82deSJerin Jacob uint8_t __io mark_format_idx; 1781503b82deSJerin Jacob }; 1782503b82deSJerin Jacob 1783ddf955d3SRakesh Kudurumalla struct nix_rq_cpt_field_mask_cfg_req { 1784ddf955d3SRakesh Kudurumalla struct mbox_msghdr hdr; 1785ddf955d3SRakesh Kudurumalla #define RQ_CTX_MASK_MAX 6 1786ddf955d3SRakesh Kudurumalla union { 1787ddf955d3SRakesh Kudurumalla uint64_t __io rq_ctx_word_set[RQ_CTX_MASK_MAX]; 1788c9dca1c5SNithin Dabilpuram __io struct nix_cn10k_rq_ctx_s rq_set; 1789ddf955d3SRakesh Kudurumalla }; 1790ddf955d3SRakesh Kudurumalla union { 1791ddf955d3SRakesh Kudurumalla uint64_t __io rq_ctx_word_mask[RQ_CTX_MASK_MAX]; 1792c9dca1c5SNithin Dabilpuram __io struct nix_cn10k_rq_ctx_s rq_mask; 1793ddf955d3SRakesh Kudurumalla }; 1794ddf955d3SRakesh Kudurumalla struct nix_lf_rx_ipec_cfg1_req { 1795ddf955d3SRakesh Kudurumalla uint32_t __io spb_cpt_aura; 1796ddf955d3SRakesh Kudurumalla uint8_t __io rq_mask_enable; 1797ddf955d3SRakesh Kudurumalla uint8_t __io spb_cpt_sizem1; 1798ddf955d3SRakesh Kudurumalla uint8_t __io spb_cpt_enable; 1799ddf955d3SRakesh Kudurumalla } ipsec_cfg1; 1800ddf955d3SRakesh Kudurumalla }; 1801ddf955d3SRakesh Kudurumalla 1802503b82deSJerin Jacob struct nix_lso_format_cfg { 1803503b82deSJerin Jacob struct mbox_msghdr hdr; 1804503b82deSJerin Jacob uint64_t __io field_mask; 1805503b82deSJerin Jacob uint64_t __io fields[NIX_LSO_FIELD_MAX]; 1806503b82deSJerin Jacob }; 1807503b82deSJerin Jacob 1808503b82deSJerin Jacob struct nix_lso_format_cfg_rsp { 1809503b82deSJerin Jacob struct mbox_msghdr hdr; 1810503b82deSJerin Jacob uint8_t __io lso_format_idx; 1811503b82deSJerin Jacob }; 1812503b82deSJerin Jacob 1813503b82deSJerin Jacob struct nix_rx_mode { 1814503b82deSJerin Jacob struct mbox_msghdr hdr; 1815503b82deSJerin Jacob #define NIX_RX_MODE_UCAST BIT(0) 1816503b82deSJerin Jacob #define NIX_RX_MODE_PROMISC BIT(1) 1817503b82deSJerin Jacob #define NIX_RX_MODE_ALLMULTI BIT(2) 1818503b82deSJerin Jacob uint16_t __io mode; 1819503b82deSJerin Jacob }; 1820503b82deSJerin Jacob 1821503b82deSJerin Jacob struct nix_rx_cfg { 1822503b82deSJerin Jacob struct mbox_msghdr hdr; 1823503b82deSJerin Jacob #define NIX_RX_OL3_VERIFY BIT(0) 1824503b82deSJerin Jacob #define NIX_RX_OL4_VERIFY BIT(1) 1825c89e976cSNithin Dabilpuram #define NIX_RX_DROP_RE BIT(2) 1826503b82deSJerin Jacob uint8_t __io len_verify; /* Outer L3/L4 len check */ 1827503b82deSJerin Jacob #define NIX_RX_CSUM_OL4_VERIFY BIT(0) 1828503b82deSJerin Jacob uint8_t __io csum_verify; /* Outer L4 checksum verification */ 1829503b82deSJerin Jacob }; 1830503b82deSJerin Jacob 1831503b82deSJerin Jacob struct nix_frs_cfg { 1832503b82deSJerin Jacob struct mbox_msghdr hdr; 1833503b82deSJerin Jacob uint8_t __io update_smq; /* Update SMQ's min/max lens */ 1834503b82deSJerin Jacob uint8_t __io update_minlen; /* Set minlen also */ 1835503b82deSJerin Jacob uint8_t __io sdp_link; /* Set SDP RX link */ 1836503b82deSJerin Jacob uint16_t __io maxlen; 1837503b82deSJerin Jacob uint16_t __io minlen; 1838503b82deSJerin Jacob }; 1839503b82deSJerin Jacob 1840503b82deSJerin Jacob struct nix_set_vlan_tpid { 1841503b82deSJerin Jacob struct mbox_msghdr hdr; 1842503b82deSJerin Jacob #define NIX_VLAN_TYPE_INNER 0 1843503b82deSJerin Jacob #define NIX_VLAN_TYPE_OUTER 1 1844503b82deSJerin Jacob uint8_t __io vlan_type; 1845503b82deSJerin Jacob uint16_t __io tpid; 1846503b82deSJerin Jacob }; 1847503b82deSJerin Jacob 1848503b82deSJerin Jacob struct nix_bp_cfg_req { 1849503b82deSJerin Jacob struct mbox_msghdr hdr; 1850503b82deSJerin Jacob uint16_t __io chan_base; /* Starting channel number */ 1851503b82deSJerin Jacob uint8_t __io chan_cnt; /* Number of channels */ 1852503b82deSJerin Jacob uint8_t __io bpid_per_chan; 1853503b82deSJerin Jacob /* bpid_per_chan = 0 assigns single bp id for range of channels */ 1854503b82deSJerin Jacob /* bpid_per_chan = 1 assigns separate bp id for each channel */ 1855503b82deSJerin Jacob }; 1856503b82deSJerin Jacob 185728b3ca7bSSunil Kumar Kori /* PF can be mapped to either CGX or LBK or SDP interface, 185828b3ca7bSSunil Kumar Kori * so maximum 256 channels are possible. 1859503b82deSJerin Jacob */ 186028b3ca7bSSunil Kumar Kori #define NIX_MAX_CHAN 256 1861869f5bc3SSunil Kumar Kori #define NIX_CGX_MAX_CHAN 8 186220d02329SSunil Kumar Kori #define NIX_LBK_MAX_CHAN 1 1863503b82deSJerin Jacob struct nix_bp_cfg_rsp { 1864503b82deSJerin Jacob struct mbox_msghdr hdr; 1865503b82deSJerin Jacob /* Channel and bpid mapping */ 1866503b82deSJerin Jacob uint16_t __io chan_bpid[NIX_MAX_CHAN]; 1867503b82deSJerin Jacob /* Number of channel for which bpids are assigned */ 1868503b82deSJerin Jacob uint8_t __io chan_cnt; 1869503b82deSJerin Jacob }; 1870503b82deSJerin Jacob 18714d00b8c6SSatha Rao struct nix_alloc_bpid_req { 18724d00b8c6SSatha Rao struct mbox_msghdr hdr; 18734d00b8c6SSatha Rao uint8_t __io bpid_cnt; 18744d00b8c6SSatha Rao uint8_t __io type; 18754d00b8c6SSatha Rao uint64_t __io rsvd; 18764d00b8c6SSatha Rao }; 18774d00b8c6SSatha Rao 18784d00b8c6SSatha Rao struct nix_bpids { 18794d00b8c6SSatha Rao #define ROC_NIX_MAX_BPID_CNT 8 18804d00b8c6SSatha Rao struct mbox_msghdr hdr; 18814d00b8c6SSatha Rao uint8_t __io bpid_cnt; 18824d00b8c6SSatha Rao uint16_t __io bpids[ROC_NIX_MAX_BPID_CNT]; 18834d00b8c6SSatha Rao uint64_t __io rsvd; 18844d00b8c6SSatha Rao }; 18854d00b8c6SSatha Rao 18864d00b8c6SSatha Rao struct nix_rx_chan_cfg { 18874d00b8c6SSatha Rao struct mbox_msghdr hdr; 18884d00b8c6SSatha Rao uint8_t __io type; /* Interface type(CGX/CPT/LBK) */ 18894d00b8c6SSatha Rao uint8_t __io read; 18904d00b8c6SSatha Rao uint16_t __io chan; /* RX channel to be configured */ 18914d00b8c6SSatha Rao uint64_t __io val; /* NIX_AF_RX_CHAN_CFG value */ 18924d00b8c6SSatha Rao uint64_t __io rsvd; 18934d00b8c6SSatha Rao }; 18944d00b8c6SSatha Rao 1895209188d1SSatheesh Paul struct nix_mcast_grp_create_req { 1896209188d1SSatheesh Paul struct mbox_msghdr hdr; 1897209188d1SSatheesh Paul #define NIX_MCAST_INGRESS 0 1898209188d1SSatheesh Paul #define NIX_MCAST_EGRESS 1 1899209188d1SSatheesh Paul uint8_t __io dir; 1900209188d1SSatheesh Paul uint8_t __io reserved[11]; 1901209188d1SSatheesh Paul /* Reserving few bytes for future requirement */ 1902209188d1SSatheesh Paul }; 1903209188d1SSatheesh Paul 1904209188d1SSatheesh Paul struct nix_mcast_grp_create_rsp { 1905209188d1SSatheesh Paul struct mbox_msghdr hdr; 1906209188d1SSatheesh Paul /* This mcast_grp_idx should be passed during MCAM 1907209188d1SSatheesh Paul * write entry for multicast. AF will identify the 1908209188d1SSatheesh Paul * corresponding multicast table index associated 1909209188d1SSatheesh Paul * with the group id and program the same to MCAM entry. 1910209188d1SSatheesh Paul * This group id is also needed during group delete 1911209188d1SSatheesh Paul * and update request. 1912209188d1SSatheesh Paul */ 1913209188d1SSatheesh Paul uint32_t __io mcast_grp_idx; 1914209188d1SSatheesh Paul }; 1915209188d1SSatheesh Paul struct nix_mcast_grp_destroy_req { 1916209188d1SSatheesh Paul struct mbox_msghdr hdr; 1917209188d1SSatheesh Paul /* Group id returned by nix_mcast_grp_create_rsp */ 1918209188d1SSatheesh Paul uint32_t __io mcast_grp_idx; 1919209188d1SSatheesh Paul }; 1920209188d1SSatheesh Paul 1921209188d1SSatheesh Paul struct nix_mcast_grp_update_req { 1922209188d1SSatheesh Paul struct mbox_msghdr hdr; 1923209188d1SSatheesh Paul /* Group id returned by nix_mcast_grp_create_rsp */ 1924209188d1SSatheesh Paul uint32_t __io mcast_grp_idx; 1925209188d1SSatheesh Paul /* Number of multicast/mirror entries requested */ 1926209188d1SSatheesh Paul uint32_t __io num_mce_entry; 1927209188d1SSatheesh Paul #define NIX_MCE_ENTRY_MAX 64 1928209188d1SSatheesh Paul #define NIX_RX_RQ 0 1929209188d1SSatheesh Paul #define NIX_RX_RSS 1 1930209188d1SSatheesh Paul /* Receive queue or RSS index within pf_func */ 1931209188d1SSatheesh Paul uint32_t __io rq_rss_index[NIX_MCE_ENTRY_MAX]; 1932209188d1SSatheesh Paul uint16_t __io pcifunc[NIX_MCE_ENTRY_MAX]; 1933209188d1SSatheesh Paul uint16_t __io channel[NIX_MCE_ENTRY_MAX]; 1934209188d1SSatheesh Paul #define NIX_MCAST_OP_ADD_ENTRY 0 1935209188d1SSatheesh Paul #define NIX_MCAST_OP_DEL_ENTRY 1 1936209188d1SSatheesh Paul /* Destination type. 0:Receive queue, 1:RSS*/ 1937209188d1SSatheesh Paul uint8_t __io dest_type[NIX_MCE_ENTRY_MAX]; 1938209188d1SSatheesh Paul uint8_t __io op; 1939209188d1SSatheesh Paul }; 1940209188d1SSatheesh Paul 1941209188d1SSatheesh Paul struct nix_mcast_grp_update_rsp { 1942209188d1SSatheesh Paul struct mbox_msghdr hdr; 1943209188d1SSatheesh Paul uint32_t __io mce_start_index; 1944209188d1SSatheesh Paul }; 1945209188d1SSatheesh Paul 1946d921b1bbSHarman Kalra struct nix_get_lf_stats_req { 1947d921b1bbSHarman Kalra struct mbox_msghdr hdr; 1948d921b1bbSHarman Kalra uint16_t __io pcifunc; 1949d921b1bbSHarman Kalra uint64_t __io rsvd; 1950d921b1bbSHarman Kalra }; 1951d921b1bbSHarman Kalra 1952d921b1bbSHarman Kalra struct nix_lf_stats_rsp { 1953d921b1bbSHarman Kalra struct mbox_msghdr hdr; 1954d921b1bbSHarman Kalra uint16_t __io pcifunc; 1955d921b1bbSHarman Kalra struct { 1956d921b1bbSHarman Kalra uint64_t __io octs; 1957d921b1bbSHarman Kalra uint64_t __io ucast; 1958d921b1bbSHarman Kalra uint64_t __io bcast; 1959d921b1bbSHarman Kalra uint64_t __io mcast; 1960d921b1bbSHarman Kalra uint64_t __io drop; 1961d921b1bbSHarman Kalra uint64_t __io drop_octs; 1962d921b1bbSHarman Kalra uint64_t __io drop_mcast; 1963d921b1bbSHarman Kalra uint64_t __io drop_bcast; 1964d921b1bbSHarman Kalra uint64_t __io err; 1965d921b1bbSHarman Kalra uint64_t __io rsvd[5]; 1966d921b1bbSHarman Kalra } rx; 1967d921b1bbSHarman Kalra struct { 1968d921b1bbSHarman Kalra uint64_t __io ucast; 1969d921b1bbSHarman Kalra uint64_t __io bcast; 1970d921b1bbSHarman Kalra uint64_t __io mcast; 1971d921b1bbSHarman Kalra uint64_t __io drop; 1972d921b1bbSHarman Kalra uint64_t __io octs; 1973d921b1bbSHarman Kalra } tx; 1974d921b1bbSHarman Kalra }; 1975d921b1bbSHarman Kalra 1976503b82deSJerin Jacob /* Global NIX inline IPSec configuration */ 1977503b82deSJerin Jacob struct nix_inline_ipsec_cfg { 1978503b82deSJerin Jacob struct mbox_msghdr hdr; 1979503b82deSJerin Jacob uint32_t __io cpt_credit; 1980503b82deSJerin Jacob struct { 1981503b82deSJerin Jacob uint8_t __io egrp; 198237da5850SSrujana Challa uint16_t __io opcode; 198337da5850SSrujana Challa uint16_t __io param1; 198437da5850SSrujana Challa uint16_t __io param2; 1985503b82deSJerin Jacob } gen_cfg; 1986503b82deSJerin Jacob struct { 1987503b82deSJerin Jacob uint16_t __io cpt_pf_func; 1988503b82deSJerin Jacob uint8_t __io cpt_slot; 1989503b82deSJerin Jacob } inst_qsel; 1990503b82deSJerin Jacob uint8_t __io enable; 1991779244b1SSrujana Challa uint16_t __io bpid; 1992779244b1SSrujana Challa uint32_t __io credit_th; 1993503b82deSJerin Jacob }; 1994503b82deSJerin Jacob 1995503b82deSJerin Jacob /* Per NIX LF inline IPSec configuration */ 1996503b82deSJerin Jacob struct nix_inline_ipsec_lf_cfg { 1997503b82deSJerin Jacob struct mbox_msghdr hdr; 1998503b82deSJerin Jacob uint64_t __io sa_base_addr; 1999503b82deSJerin Jacob struct { 2000503b82deSJerin Jacob uint32_t __io tag_const; 2001503b82deSJerin Jacob uint16_t __io lenm1_max; 2002503b82deSJerin Jacob uint8_t __io sa_pow2_size; 2003503b82deSJerin Jacob uint8_t __io tt; 2004503b82deSJerin Jacob } ipsec_cfg0; 2005503b82deSJerin Jacob struct { 2006503b82deSJerin Jacob uint32_t __io sa_idx_max; 2007503b82deSJerin Jacob uint8_t __io sa_idx_w; 2008503b82deSJerin Jacob } ipsec_cfg1; 2009503b82deSJerin Jacob uint8_t __io enable; 2010503b82deSJerin Jacob }; 2011503b82deSJerin Jacob 2012503b82deSJerin Jacob struct nix_hw_info { 2013503b82deSJerin Jacob struct mbox_msghdr hdr; 2014503b82deSJerin Jacob uint16_t __io vwqe_delay; 2015902a4c02SSatha Rao uint16_t __io max_mtu; 2016902a4c02SSatha Rao uint16_t __io min_mtu; 2017902a4c02SSatha Rao uint32_t __io rpm_dwrr_mtu; 2018902a4c02SSatha Rao uint32_t __io sdp_dwrr_mtu; 2019902a4c02SSatha Rao uint32_t __io lbk_dwrr_mtu; 2020902a4c02SSatha Rao uint32_t __io rsvd32[1]; 2021902a4c02SSatha Rao uint64_t __io rsvd[15]; /* Add reserved fields for future expansion */ 2022503b82deSJerin Jacob }; 2023503b82deSJerin Jacob 2024cf8f6aa1SSunil Kumar Kori struct nix_bandprof_alloc_req { 2025cf8f6aa1SSunil Kumar Kori struct mbox_msghdr hdr; 2026cf8f6aa1SSunil Kumar Kori /* Count of profiles needed per layer */ 2027cf8f6aa1SSunil Kumar Kori uint16_t __io prof_count[NIX_RX_BAND_PROF_LAYER_MAX]; 2028cf8f6aa1SSunil Kumar Kori }; 2029cf8f6aa1SSunil Kumar Kori 2030cf8f6aa1SSunil Kumar Kori struct nix_bandprof_alloc_rsp { 2031cf8f6aa1SSunil Kumar Kori struct mbox_msghdr hdr; 2032cf8f6aa1SSunil Kumar Kori uint16_t __io prof_count[NIX_RX_BAND_PROF_LAYER_MAX]; 2033cf8f6aa1SSunil Kumar Kori 2034cf8f6aa1SSunil Kumar Kori #define BANDPROF_PER_PFFUNC 64 2035cf8f6aa1SSunil Kumar Kori uint16_t __io prof_idx[NIX_RX_BAND_PROF_LAYER_MAX][BANDPROF_PER_PFFUNC]; 2036cf8f6aa1SSunil Kumar Kori }; 2037cf8f6aa1SSunil Kumar Kori 2038cf8f6aa1SSunil Kumar Kori struct nix_bandprof_free_req { 2039cf8f6aa1SSunil Kumar Kori struct mbox_msghdr hdr; 2040cf8f6aa1SSunil Kumar Kori uint8_t __io free_all; 2041cf8f6aa1SSunil Kumar Kori uint16_t __io prof_count[NIX_RX_BAND_PROF_LAYER_MAX]; 2042cf8f6aa1SSunil Kumar Kori uint16_t __io prof_idx[NIX_RX_BAND_PROF_LAYER_MAX][BANDPROF_PER_PFFUNC]; 2043cf8f6aa1SSunil Kumar Kori }; 2044cf8f6aa1SSunil Kumar Kori 204567e1cbf3SRakesh Kudurumalla struct nix_bandprof_get_hwinfo_rsp { 204667e1cbf3SRakesh Kudurumalla struct mbox_msghdr hdr; 204767e1cbf3SRakesh Kudurumalla uint16_t __io prof_count[NIX_RX_BAND_PROF_LAYER_MAX]; 204867e1cbf3SRakesh Kudurumalla uint32_t __io policer_timeunit; 204967e1cbf3SRakesh Kudurumalla }; 205067e1cbf3SRakesh Kudurumalla 2051503b82deSJerin Jacob /* SSO mailbox error codes 2052503b82deSJerin Jacob * Range 501 - 600. 2053503b82deSJerin Jacob */ 2054503b82deSJerin Jacob enum sso_af_status { 2055503b82deSJerin Jacob SSO_AF_ERR_PARAM = -501, 2056503b82deSJerin Jacob SSO_AF_ERR_LF_INVALID = -502, 2057503b82deSJerin Jacob SSO_AF_ERR_AF_LF_ALLOC = -503, 2058503b82deSJerin Jacob SSO_AF_ERR_GRP_EBUSY = -504, 2059503b82deSJerin Jacob SSO_AF_INVAL_NPA_PF_FUNC = -505, 2060503b82deSJerin Jacob }; 2061503b82deSJerin Jacob 2062503b82deSJerin Jacob struct sso_lf_alloc_req { 2063503b82deSJerin Jacob struct mbox_msghdr hdr; 2064503b82deSJerin Jacob int __io node; 2065503b82deSJerin Jacob uint16_t __io hwgrps; 2066503b82deSJerin Jacob }; 2067503b82deSJerin Jacob 2068503b82deSJerin Jacob struct sso_lf_alloc_rsp { 2069503b82deSJerin Jacob struct mbox_msghdr hdr; 2070503b82deSJerin Jacob uint32_t __io xaq_buf_size; 2071503b82deSJerin Jacob uint32_t __io xaq_wq_entries; 2072503b82deSJerin Jacob uint32_t __io in_unit_entries; 2073503b82deSJerin Jacob uint16_t __io hwgrps; 2074503b82deSJerin Jacob }; 2075503b82deSJerin Jacob 2076503b82deSJerin Jacob struct sso_lf_free_req { 2077503b82deSJerin Jacob struct mbox_msghdr hdr; 2078503b82deSJerin Jacob int __io node; 2079503b82deSJerin Jacob uint16_t __io hwgrps; 2080503b82deSJerin Jacob }; 2081503b82deSJerin Jacob 2082503b82deSJerin Jacob /* SSOW mailbox error codes 2083503b82deSJerin Jacob * Range 601 - 700. 2084503b82deSJerin Jacob */ 2085503b82deSJerin Jacob enum ssow_af_status { 2086503b82deSJerin Jacob SSOW_AF_ERR_PARAM = -601, 2087503b82deSJerin Jacob SSOW_AF_ERR_LF_INVALID = -602, 2088503b82deSJerin Jacob SSOW_AF_ERR_AF_LF_ALLOC = -603, 2089503b82deSJerin Jacob }; 2090503b82deSJerin Jacob 2091503b82deSJerin Jacob struct ssow_lf_alloc_req { 2092503b82deSJerin Jacob struct mbox_msghdr hdr; 2093503b82deSJerin Jacob int __io node; 2094503b82deSJerin Jacob uint16_t __io hws; 2095503b82deSJerin Jacob }; 2096503b82deSJerin Jacob 2097503b82deSJerin Jacob struct ssow_lf_free_req { 2098503b82deSJerin Jacob struct mbox_msghdr hdr; 2099503b82deSJerin Jacob int __io node; 2100503b82deSJerin Jacob uint16_t __io hws; 2101503b82deSJerin Jacob }; 2102503b82deSJerin Jacob 2103e746aec1SSatha Rao #define SSOW_INVAL_SELECTIVE_VER 0x1000 2104e746aec1SSatha Rao struct ssow_lf_inv_req { 2105e746aec1SSatha Rao struct mbox_msghdr hdr; 2106b2c5ff1bSNithin Dabilpuram uint16_t __io nb_hws; /* Number of HWS to invalidate*/ 2107b2c5ff1bSNithin Dabilpuram uint16_t __io hws[MAX_RVU_BLKLF_CNT]; /* Array of HWS */ 2108e746aec1SSatha Rao }; 2109e746aec1SSatha Rao 2110e746aec1SSatha Rao struct ssow_config_lsw { 2111e746aec1SSatha Rao struct mbox_msghdr hdr; 2112e746aec1SSatha Rao #define SSOW_LSW_DIS 0 2113e746aec1SSatha Rao #define SSOW_LSW_GW_WAIT 1 2114e746aec1SSatha Rao #define SSOW_LSW_GW_IMM 2 2115e746aec1SSatha Rao uint8_t __io lsw_mode; 2116e746aec1SSatha Rao #define SSOW_WQE_REL_LSW_WAIT 0 2117e746aec1SSatha Rao #define SSOW_WQE_REL_IMM 1 2118e746aec1SSatha Rao uint8_t __io wqe_release; 2119e746aec1SSatha Rao }; 2120e746aec1SSatha Rao 2121e746aec1SSatha Rao struct ssow_chng_mship { 2122e746aec1SSatha Rao struct mbox_msghdr hdr; 2123e746aec1SSatha Rao uint8_t __io set; /* Membership set to modify. */ 2124e746aec1SSatha Rao uint8_t __io enable; /* Enable/Disable the hwgrps. */ 2125e746aec1SSatha Rao uint8_t __io hws; /* HWS to modify. */ 2126e746aec1SSatha Rao uint16_t __io nb_hwgrps; /* Number of hwgrps in the array */ 2127e746aec1SSatha Rao uint16_t __io hwgrps[MAX_RVU_BLKLF_CNT]; /* Array of hwgrps. */ 2128e746aec1SSatha Rao }; 2129e746aec1SSatha Rao 213082526521SPavan Nikhilesh struct sso_feat_info { 213182526521SPavan Nikhilesh uint8_t __io hw_flr : 1; 213282526521SPavan Nikhilesh uint8_t __io hw_prefetch : 1; 213382526521SPavan Nikhilesh uint8_t __io sw_prefetch : 1; 213482526521SPavan Nikhilesh uint8_t __io lsw : 1; 213582526521SPavan Nikhilesh uint8_t __io fwd_grp : 1; 213682526521SPavan Nikhilesh uint8_t __io eva_present : 1; 213782526521SPavan Nikhilesh uint8_t __io no_nsched : 1; 213882526521SPavan Nikhilesh uint8_t __io tag_cfg : 1; 213982526521SPavan Nikhilesh uint8_t __io gwc_per_core; 214082526521SPavan Nikhilesh uint16_t __io hws; 214182526521SPavan Nikhilesh uint16_t __io hwgrps; 214282526521SPavan Nikhilesh uint16_t __io hwgrps_per_pf; 214382526521SPavan Nikhilesh uint16_t __io iue; 214482526521SPavan Nikhilesh uint16_t __io taq_lines; 214582526521SPavan Nikhilesh uint16_t __io taq_ent_per_line; 214682526521SPavan Nikhilesh uint16_t __io xaq_buf_size; 214782526521SPavan Nikhilesh uint16_t __io xaq_wq_entries; 214882526521SPavan Nikhilesh uint32_t __io eva_ctx_per_hwgrp; 214982526521SPavan Nikhilesh uint64_t __io rsvd[2]; 215082526521SPavan Nikhilesh }; 215182526521SPavan Nikhilesh 215282526521SPavan Nikhilesh struct sso_hw_info { 215382526521SPavan Nikhilesh struct mbox_msghdr hdr; 215482526521SPavan Nikhilesh struct sso_feat_info feat; 215582526521SPavan Nikhilesh }; 215682526521SPavan Nikhilesh 2157503b82deSJerin Jacob struct sso_hw_setconfig { 2158503b82deSJerin Jacob struct mbox_msghdr hdr; 2159503b82deSJerin Jacob uint32_t __io npa_aura_id; 2160503b82deSJerin Jacob uint16_t __io npa_pf_func; 2161503b82deSJerin Jacob uint16_t __io hwgrps; 2162503b82deSJerin Jacob }; 2163503b82deSJerin Jacob 2164503b82deSJerin Jacob struct sso_hw_xaq_release { 2165503b82deSJerin Jacob struct mbox_msghdr hdr; 2166503b82deSJerin Jacob uint16_t __io hwgrps; 2167503b82deSJerin Jacob }; 2168503b82deSJerin Jacob 2169503b82deSJerin Jacob struct sso_info_req { 2170503b82deSJerin Jacob struct mbox_msghdr hdr; 2171503b82deSJerin Jacob union { 2172503b82deSJerin Jacob uint16_t __io grp; 2173503b82deSJerin Jacob uint16_t __io hws; 2174503b82deSJerin Jacob }; 2175503b82deSJerin Jacob }; 2176503b82deSJerin Jacob 2177503b82deSJerin Jacob struct sso_grp_priority { 2178503b82deSJerin Jacob struct mbox_msghdr hdr; 2179503b82deSJerin Jacob uint16_t __io grp; 2180503b82deSJerin Jacob uint8_t __io priority; 2181503b82deSJerin Jacob uint8_t __io affinity; 2182503b82deSJerin Jacob uint8_t __io weight; 2183503b82deSJerin Jacob }; 2184503b82deSJerin Jacob 2185503b82deSJerin Jacob struct sso_grp_qos_cfg { 2186503b82deSJerin Jacob struct mbox_msghdr hdr; 2187503b82deSJerin Jacob uint16_t __io grp; 2188bd1cf511SShijith Thotton uint32_t __io rsvd; 2189503b82deSJerin Jacob uint16_t __io taq_thr; 2190503b82deSJerin Jacob uint16_t __io iaq_thr; 2191503b82deSJerin Jacob }; 2192503b82deSJerin Jacob 219320345cbdSPavan Nikhilesh struct sso_grp_stash_cfg { 219420345cbdSPavan Nikhilesh struct mbox_msghdr hdr; 219520345cbdSPavan Nikhilesh uint16_t __io grp; 219620345cbdSPavan Nikhilesh uint8_t __io ena; 219720345cbdSPavan Nikhilesh uint8_t __io offset : 4; 219820345cbdSPavan Nikhilesh uint8_t __io num_linesm1 : 4; 219920345cbdSPavan Nikhilesh }; 220020345cbdSPavan Nikhilesh 220162afdd8dSPavan Nikhilesh struct sso_aggr_setconfig { 220262afdd8dSPavan Nikhilesh struct mbox_msghdr hdr; 220362afdd8dSPavan Nikhilesh uint16_t __io npa_pf_func; 220462afdd8dSPavan Nikhilesh uint16_t __io hwgrp; 220562afdd8dSPavan Nikhilesh uint64_t __io rsvd[2]; 220662afdd8dSPavan Nikhilesh }; 220762afdd8dSPavan Nikhilesh 2208503b82deSJerin Jacob struct sso_grp_stats { 2209503b82deSJerin Jacob struct mbox_msghdr hdr; 2210503b82deSJerin Jacob uint16_t __io grp; 2211503b82deSJerin Jacob uint64_t __io ws_pc; 2212503b82deSJerin Jacob uint64_t __io ext_pc; 2213503b82deSJerin Jacob uint64_t __io wa_pc; 2214503b82deSJerin Jacob uint64_t __io ts_pc; 2215503b82deSJerin Jacob uint64_t __io ds_pc; 2216503b82deSJerin Jacob uint64_t __io dq_pc; 2217503b82deSJerin Jacob uint64_t __io aw_status; 2218503b82deSJerin Jacob uint64_t __io page_cnt; 2219503b82deSJerin Jacob }; 2220503b82deSJerin Jacob 2221503b82deSJerin Jacob struct sso_hws_stats { 2222503b82deSJerin Jacob struct mbox_msghdr hdr; 2223503b82deSJerin Jacob uint16_t __io hws; 2224503b82deSJerin Jacob uint64_t __io arbitration; 2225503b82deSJerin Jacob }; 2226503b82deSJerin Jacob 222762afdd8dSPavan Nikhilesh struct sso_aggr_stats { 222862afdd8dSPavan Nikhilesh struct mbox_msghdr hdr; 222962afdd8dSPavan Nikhilesh uint16_t __io grp; 223062afdd8dSPavan Nikhilesh uint64_t __io flushed; 223162afdd8dSPavan Nikhilesh uint64_t __io completed; 223262afdd8dSPavan Nikhilesh uint64_t __io npa_fail; 223362afdd8dSPavan Nikhilesh uint64_t __io timeout; 223462afdd8dSPavan Nikhilesh uint64_t __io rsvd[4]; 223562afdd8dSPavan Nikhilesh }; 223662afdd8dSPavan Nikhilesh 2237503b82deSJerin Jacob /* CPT mailbox error codes 2238503b82deSJerin Jacob * Range 901 - 1000. 2239503b82deSJerin Jacob */ 2240503b82deSJerin Jacob enum cpt_af_status { 2241503b82deSJerin Jacob CPT_AF_ERR_PARAM = -901, 2242503b82deSJerin Jacob CPT_AF_ERR_GRP_INVALID = -902, 2243503b82deSJerin Jacob CPT_AF_ERR_LF_INVALID = -903, 2244503b82deSJerin Jacob CPT_AF_ERR_ACCESS_DENIED = -904, 2245503b82deSJerin Jacob CPT_AF_ERR_SSO_PF_FUNC_INVALID = -905, 2246503b82deSJerin Jacob CPT_AF_ERR_NIX_PF_FUNC_INVALID = -906, 2247503b82deSJerin Jacob CPT_AF_ERR_INLINE_IPSEC_INB_ENA = -907, 2248503b82deSJerin Jacob CPT_AF_ERR_INLINE_IPSEC_OUT_ENA = -908 2249503b82deSJerin Jacob }; 2250503b82deSJerin Jacob 2251503b82deSJerin Jacob /* CPT mbox message formats */ 2252503b82deSJerin Jacob 2253503b82deSJerin Jacob struct cpt_rd_wr_reg_msg { 2254503b82deSJerin Jacob struct mbox_msghdr hdr; 2255503b82deSJerin Jacob uint64_t __io reg_offset; 2256503b82deSJerin Jacob uint64_t __io *ret_val; 2257503b82deSJerin Jacob uint64_t __io val; 2258503b82deSJerin Jacob uint8_t __io is_write; 2259503b82deSJerin Jacob }; 2260503b82deSJerin Jacob 2261503b82deSJerin Jacob struct cpt_set_crypto_grp_req_msg { 2262503b82deSJerin Jacob struct mbox_msghdr hdr; 2263503b82deSJerin Jacob uint8_t __io crypto_eng_grp; 2264503b82deSJerin Jacob }; 2265503b82deSJerin Jacob 2266503b82deSJerin Jacob struct cpt_lf_alloc_req_msg { 2267503b82deSJerin Jacob struct mbox_msghdr hdr; 2268503b82deSJerin Jacob uint16_t __io nix_pf_func; 2269503b82deSJerin Jacob uint16_t __io sso_pf_func; 2270503b82deSJerin Jacob uint16_t __io eng_grpmsk; 2271503b82deSJerin Jacob uint8_t __io blkaddr; 22729564023dSNithin Dabilpuram uint8_t __io ctx_ilen_valid : 1; 22739564023dSNithin Dabilpuram uint8_t __io ctx_ilen : 7; 2274d029f353SVidya Sagar Velumuri uint8_t __io rxc_ena : 1; 2275d029f353SVidya Sagar Velumuri uint8_t __io rxc_ena_lf_id : 7; 2276503b82deSJerin Jacob }; 2277503b82deSJerin Jacob 2278503b82deSJerin Jacob #define CPT_INLINE_INBOUND 0 2279503b82deSJerin Jacob #define CPT_INLINE_OUTBOUND 1 2280503b82deSJerin Jacob 2281503b82deSJerin Jacob struct cpt_inline_ipsec_cfg_msg { 2282503b82deSJerin Jacob struct mbox_msghdr hdr; 2283503b82deSJerin Jacob uint8_t __io enable; 2284503b82deSJerin Jacob uint8_t __io slot; 2285503b82deSJerin Jacob uint8_t __io dir; 2286503b82deSJerin Jacob uint8_t __io sso_pf_func_ovrd; 2287503b82deSJerin Jacob uint16_t __io sso_pf_func; /* Inbound path SSO_PF_FUNC */ 2288503b82deSJerin Jacob uint16_t __io nix_pf_func; /* Outbound path NIX_PF_FUNC */ 2289503b82deSJerin Jacob }; 2290503b82deSJerin Jacob 2291503b82deSJerin Jacob struct cpt_sts_req { 2292503b82deSJerin Jacob struct mbox_msghdr hdr; 2293503b82deSJerin Jacob uint8_t __io blkaddr; 2294503b82deSJerin Jacob }; 2295503b82deSJerin Jacob 2296503b82deSJerin Jacob struct cpt_sts_rsp { 2297503b82deSJerin Jacob struct mbox_msghdr hdr; 2298503b82deSJerin Jacob uint64_t __io inst_req_pc; 2299503b82deSJerin Jacob uint64_t __io inst_lat_pc; 2300503b82deSJerin Jacob uint64_t __io rd_req_pc; 2301503b82deSJerin Jacob uint64_t __io rd_lat_pc; 2302503b82deSJerin Jacob uint64_t __io rd_uc_pc; 2303503b82deSJerin Jacob uint64_t __io active_cycles_pc; 2304503b82deSJerin Jacob uint64_t __io ctx_mis_pc; 2305503b82deSJerin Jacob uint64_t __io ctx_hit_pc; 2306503b82deSJerin Jacob uint64_t __io ctx_aop_pc; 2307503b82deSJerin Jacob uint64_t __io ctx_aop_lat_pc; 2308503b82deSJerin Jacob uint64_t __io ctx_ifetch_pc; 2309503b82deSJerin Jacob uint64_t __io ctx_ifetch_lat_pc; 2310503b82deSJerin Jacob uint64_t __io ctx_ffetch_pc; 2311503b82deSJerin Jacob uint64_t __io ctx_ffetch_lat_pc; 2312503b82deSJerin Jacob uint64_t __io ctx_wback_pc; 2313503b82deSJerin Jacob uint64_t __io ctx_wback_lat_pc; 2314503b82deSJerin Jacob uint64_t __io ctx_psh_pc; 2315503b82deSJerin Jacob uint64_t __io ctx_psh_lat_pc; 2316503b82deSJerin Jacob uint64_t __io ctx_err; 2317503b82deSJerin Jacob uint64_t __io ctx_enc_id; 2318503b82deSJerin Jacob uint64_t __io ctx_flush_timer; 2319503b82deSJerin Jacob uint64_t __io rxc_time; 2320503b82deSJerin Jacob uint64_t __io rxc_time_cfg; 2321503b82deSJerin Jacob uint64_t __io rxc_active_sts; 2322503b82deSJerin Jacob uint64_t __io rxc_zombie_sts; 2323503b82deSJerin Jacob uint64_t __io busy_sts_ae; 2324503b82deSJerin Jacob uint64_t __io free_sts_ae; 2325503b82deSJerin Jacob uint64_t __io busy_sts_se; 2326503b82deSJerin Jacob uint64_t __io free_sts_se; 2327503b82deSJerin Jacob uint64_t __io busy_sts_ie; 2328503b82deSJerin Jacob uint64_t __io free_sts_ie; 2329503b82deSJerin Jacob uint64_t __io exe_err_info; 2330503b82deSJerin Jacob uint64_t __io cptclk_cnt; 2331503b82deSJerin Jacob uint64_t __io diag; 2332503b82deSJerin Jacob uint64_t __io rxc_dfrg; 2333503b82deSJerin Jacob uint64_t __io x2p_link_cfg0; 2334503b82deSJerin Jacob uint64_t __io x2p_link_cfg1; 2335503b82deSJerin Jacob }; 2336503b82deSJerin Jacob 2337503b82deSJerin Jacob struct cpt_rxc_time_cfg_req { 2338503b82deSJerin Jacob struct mbox_msghdr hdr; 2339503b82deSJerin Jacob int blkaddr; 2340b2c5ff1bSNithin Dabilpuram uint32_t __io step; 2341b2c5ff1bSNithin Dabilpuram uint16_t __io zombie_thres; 2342b2c5ff1bSNithin Dabilpuram uint16_t __io zombie_limit; 2343b2c5ff1bSNithin Dabilpuram uint16_t __io active_thres; 2344b2c5ff1bSNithin Dabilpuram uint16_t __io active_limit; 2345503b82deSJerin Jacob }; 2346503b82deSJerin Jacob 2347503b82deSJerin Jacob struct cpt_rx_inline_lf_cfg_msg { 2348503b82deSJerin Jacob struct mbox_msghdr hdr; 2349503b82deSJerin Jacob uint16_t __io sso_pf_func; 235039f3b812SSrujana Challa uint16_t __io param1; 235139f3b812SSrujana Challa uint16_t __io param2; 235237da5850SSrujana Challa uint16_t __io opcode; 235337da5850SSrujana Challa uint32_t __io credit; 2354779244b1SSrujana Challa uint32_t __io credit_th; 2355779244b1SSrujana Challa uint16_t __io bpid; 235637da5850SSrujana Challa uint32_t __io reserved; 23579564023dSNithin Dabilpuram uint8_t __io ctx_ilen_valid : 1; 23589564023dSNithin Dabilpuram uint8_t __io ctx_ilen : 7; 2359503b82deSJerin Jacob }; 2360503b82deSJerin Jacob 2361503b82deSJerin Jacob struct cpt_caps_rsp_msg { 2362503b82deSJerin Jacob struct mbox_msghdr hdr; 2363503b82deSJerin Jacob uint16_t __io cpt_pf_drv_version; 2364503b82deSJerin Jacob uint8_t __io cpt_revision; 2365503b82deSJerin Jacob union cpt_eng_caps eng_caps[CPT_MAX_ENG_TYPES]; 2366503b82deSJerin Jacob }; 2367503b82deSJerin Jacob 2368503b82deSJerin Jacob struct cpt_eng_grp_req { 2369503b82deSJerin Jacob struct mbox_msghdr hdr; 2370503b82deSJerin Jacob uint8_t __io eng_type; 2371503b82deSJerin Jacob }; 2372503b82deSJerin Jacob 2373503b82deSJerin Jacob struct cpt_eng_grp_rsp { 2374503b82deSJerin Jacob struct mbox_msghdr hdr; 2375503b82deSJerin Jacob uint8_t __io eng_type; 2376503b82deSJerin Jacob uint8_t __io eng_grp_num; 2377503b82deSJerin Jacob }; 2378503b82deSJerin Jacob 2379068d2647SSrujana Challa struct cpt_lf_rst_req { 2380068d2647SSrujana Challa struct mbox_msghdr hdr; 2381068d2647SSrujana Challa uint32_t __io slot; 2382068d2647SSrujana Challa }; 2383068d2647SSrujana Challa 2384d6655e14SLiron Himi /* REE mailbox error codes 2385d6655e14SLiron Himi * Range 1001 - 1100. 2386d6655e14SLiron Himi */ 2387d6655e14SLiron Himi enum ree_af_status { 2388d6655e14SLiron Himi REE_AF_ERR_RULE_UNKNOWN_VALUE = -1001, 2389d6655e14SLiron Himi REE_AF_ERR_LF_NO_MORE_RESOURCES = -1002, 2390d6655e14SLiron Himi REE_AF_ERR_LF_INVALID = -1003, 2391d6655e14SLiron Himi REE_AF_ERR_ACCESS_DENIED = -1004, 2392d6655e14SLiron Himi REE_AF_ERR_RULE_DB_PARTIAL = -1005, 2393d6655e14SLiron Himi REE_AF_ERR_RULE_DB_EQ_BAD_VALUE = -1006, 2394d6655e14SLiron Himi REE_AF_ERR_RULE_DB_BLOCK_ALLOC_FAILED = -1007, 2395d6655e14SLiron Himi REE_AF_ERR_BLOCK_NOT_IMPLEMENTED = -1008, 2396d6655e14SLiron Himi REE_AF_ERR_RULE_DB_INC_OFFSET_TOO_BIG = -1009, 2397d6655e14SLiron Himi REE_AF_ERR_RULE_DB_OFFSET_TOO_BIG = -1010, 2398d6655e14SLiron Himi REE_AF_ERR_Q_IS_GRACEFUL_DIS = -1011, 2399d6655e14SLiron Himi REE_AF_ERR_Q_NOT_GRACEFUL_DIS = -1012, 2400d6655e14SLiron Himi REE_AF_ERR_RULE_DB_ALLOC_FAILED = -1013, 2401d6655e14SLiron Himi REE_AF_ERR_RULE_DB_TOO_BIG = -1014, 2402d6655e14SLiron Himi REE_AF_ERR_RULE_DB_GEQ_BAD_VALUE = -1015, 2403d6655e14SLiron Himi REE_AF_ERR_RULE_DB_LEQ_BAD_VALUE = -1016, 2404d6655e14SLiron Himi REE_AF_ERR_RULE_DB_WRONG_LENGTH = -1017, 2405d6655e14SLiron Himi REE_AF_ERR_RULE_DB_WRONG_OFFSET = -1018, 2406d6655e14SLiron Himi REE_AF_ERR_RULE_DB_BLOCK_TOO_BIG = -1019, 2407d6655e14SLiron Himi REE_AF_ERR_RULE_DB_SHOULD_FILL_REQUEST = -1020, 2408d6655e14SLiron Himi REE_AF_ERR_RULE_DBI_ALLOC_FAILED = -1021, 2409d6655e14SLiron Himi REE_AF_ERR_LF_WRONG_PRIORITY = -1022, 2410d6655e14SLiron Himi REE_AF_ERR_LF_SIZE_TOO_BIG = -1023, 2411d6655e14SLiron Himi }; 2412d6655e14SLiron Himi 2413d6655e14SLiron Himi /* REE mbox message formats */ 2414d6655e14SLiron Himi 2415d6655e14SLiron Himi struct ree_req_msg { 2416d6655e14SLiron Himi struct mbox_msghdr hdr; 2417d6655e14SLiron Himi uint32_t __io blkaddr; 2418d6655e14SLiron Himi }; 2419d6655e14SLiron Himi 2420d6655e14SLiron Himi struct ree_lf_req_msg { 2421d6655e14SLiron Himi struct mbox_msghdr hdr; 2422d6655e14SLiron Himi uint32_t __io blkaddr; 2423d6655e14SLiron Himi uint32_t __io size; 2424d6655e14SLiron Himi uint8_t __io lf; 2425d6655e14SLiron Himi uint8_t __io pri; 2426d6655e14SLiron Himi }; 2427d6655e14SLiron Himi 2428d6655e14SLiron Himi struct ree_rule_db_prog_req_msg { 2429d6655e14SLiron Himi struct mbox_msghdr hdr; 2430d6655e14SLiron Himi #define REE_RULE_DB_REQ_BLOCK_SIZE ((64ULL * 1024ULL) >> 1) 2431d6655e14SLiron Himi uint8_t __io rule_db[REE_RULE_DB_REQ_BLOCK_SIZE]; 2432d6655e14SLiron Himi uint32_t __io blkaddr; /* REE0 or REE1 */ 2433d6655e14SLiron Himi uint32_t __io total_len; /* total len of rule db */ 2434d6655e14SLiron Himi uint32_t __io offset; /* offset of current rule db block */ 2435d6655e14SLiron Himi uint16_t __io len; /* length of rule db block */ 2436d6655e14SLiron Himi uint8_t __io is_last; /* is this the last block */ 2437d6655e14SLiron Himi uint8_t __io is_incremental; /* is incremental flow */ 2438d6655e14SLiron Himi uint8_t __io is_dbi; /* is rule db incremental */ 2439d6655e14SLiron Himi }; 2440d6655e14SLiron Himi 2441d6655e14SLiron Himi struct ree_rule_db_get_req_msg { 2442d6655e14SLiron Himi struct mbox_msghdr hdr; 2443d6655e14SLiron Himi uint32_t __io blkaddr; 2444d6655e14SLiron Himi uint32_t __io offset; /* retrieve db from this offset */ 2445d6655e14SLiron Himi uint8_t __io is_dbi; /* is request for rule db incremental */ 2446d6655e14SLiron Himi }; 2447d6655e14SLiron Himi 2448d6655e14SLiron Himi struct ree_rd_wr_reg_msg { 2449d6655e14SLiron Himi struct mbox_msghdr hdr; 2450d6655e14SLiron Himi uint64_t __io reg_offset; 2451d6655e14SLiron Himi uint64_t __io *ret_val; 2452d6655e14SLiron Himi uint64_t __io val; 2453d6655e14SLiron Himi uint32_t __io blkaddr; 2454d6655e14SLiron Himi uint8_t __io is_write; 2455d6655e14SLiron Himi }; 2456d6655e14SLiron Himi 2457d6655e14SLiron Himi struct ree_rule_db_len_rsp_msg { 2458d6655e14SLiron Himi struct mbox_msghdr hdr; 2459d6655e14SLiron Himi uint32_t __io blkaddr; 2460d6655e14SLiron Himi uint32_t __io len; 2461d6655e14SLiron Himi uint32_t __io inc_len; 2462d6655e14SLiron Himi }; 2463d6655e14SLiron Himi 2464d6655e14SLiron Himi struct ree_rule_db_get_rsp_msg { 2465d6655e14SLiron Himi struct mbox_msghdr hdr; 2466d6655e14SLiron Himi #define REE_RULE_DB_RSP_BLOCK_SIZE (15ULL * 1024ULL) 2467d6655e14SLiron Himi uint8_t __io rule_db[REE_RULE_DB_RSP_BLOCK_SIZE]; 2468d6655e14SLiron Himi uint32_t __io total_len; /* total len of rule db */ 2469d6655e14SLiron Himi uint32_t __io offset; /* offset of current rule db block */ 2470d6655e14SLiron Himi uint16_t __io len; /* length of rule db block */ 2471d6655e14SLiron Himi uint8_t __io is_last; /* is this the last block */ 2472d6655e14SLiron Himi }; 2473d6655e14SLiron Himi 2474503b82deSJerin Jacob /* NPC mbox message structs */ 2475503b82deSJerin Jacob 2476503b82deSJerin Jacob #define NPC_MCAM_ENTRY_INVALID 0xFFFF 2477503b82deSJerin Jacob #define NPC_MCAM_INVALID_MAP 0xFFFF 2478503b82deSJerin Jacob 2479503b82deSJerin Jacob /* NPC mailbox error codes 2480503b82deSJerin Jacob * Range 701 - 800. 2481503b82deSJerin Jacob */ 2482503b82deSJerin Jacob enum npc_af_status { 2483503b82deSJerin Jacob NPC_MCAM_INVALID_REQ = -701, 2484503b82deSJerin Jacob NPC_MCAM_ALLOC_DENIED = -702, 2485503b82deSJerin Jacob NPC_MCAM_ALLOC_FAILED = -703, 2486503b82deSJerin Jacob NPC_MCAM_PERM_DENIED = -704, 2487503b82deSJerin Jacob NPC_AF_ERR_HIGIG_CONFIG_FAIL = -705, 2488503b82deSJerin Jacob }; 2489503b82deSJerin Jacob 2490503b82deSJerin Jacob struct npc_mcam_alloc_entry_req { 2491503b82deSJerin Jacob struct mbox_msghdr hdr; 2492503b82deSJerin Jacob #define NPC_MAX_NONCONTIG_ENTRIES 256 2493503b82deSJerin Jacob uint8_t __io contig; /* Contiguous entries ? */ 2494503b82deSJerin Jacob #define NPC_MCAM_ANY_PRIO 0 2495503b82deSJerin Jacob #define NPC_MCAM_LOWER_PRIO 1 2496503b82deSJerin Jacob #define NPC_MCAM_HIGHER_PRIO 2 2497503b82deSJerin Jacob uint8_t __io priority; /* Lower or higher w.r.t ref_entry */ 2498503b82deSJerin Jacob uint16_t __io ref_entry; 2499503b82deSJerin Jacob uint16_t __io count; /* Number of entries requested */ 2500503b82deSJerin Jacob }; 2501503b82deSJerin Jacob 2502503b82deSJerin Jacob struct npc_mcam_alloc_entry_rsp { 2503503b82deSJerin Jacob struct mbox_msghdr hdr; 2504503b82deSJerin Jacob /* Entry alloc'ed or start index if contiguous. 2505503b82deSJerin Jacob * Invalid in case of non-contiguous. 2506503b82deSJerin Jacob */ 2507503b82deSJerin Jacob uint16_t __io entry; 2508503b82deSJerin Jacob uint16_t __io count; /* Number of entries allocated */ 2509503b82deSJerin Jacob uint16_t __io free_count; /* Number of entries available */ 2510503b82deSJerin Jacob uint16_t __io entry_list[NPC_MAX_NONCONTIG_ENTRIES]; 2511503b82deSJerin Jacob }; 2512503b82deSJerin Jacob 2513503b82deSJerin Jacob struct npc_mcam_free_entry_req { 2514503b82deSJerin Jacob struct mbox_msghdr hdr; 2515503b82deSJerin Jacob uint16_t __io entry; /* Entry index to be freed */ 2516503b82deSJerin Jacob uint8_t __io all; /* Free all entries alloc'ed to this PFVF */ 2517503b82deSJerin Jacob }; 2518503b82deSJerin Jacob 2519503b82deSJerin Jacob struct mcam_entry { 2520503b82deSJerin Jacob #define NPC_MAX_KWS_IN_KEY 7 /* Number of keywords in max key width */ 2521503b82deSJerin Jacob uint64_t __io kw[NPC_MAX_KWS_IN_KEY]; 2522503b82deSJerin Jacob uint64_t __io kw_mask[NPC_MAX_KWS_IN_KEY]; 2523503b82deSJerin Jacob uint64_t __io action; 2524503b82deSJerin Jacob uint64_t __io vtag_action; 2525503b82deSJerin Jacob }; 2526503b82deSJerin Jacob 2527503b82deSJerin Jacob struct npc_mcam_write_entry_req { 2528503b82deSJerin Jacob struct mbox_msghdr hdr; 2529503b82deSJerin Jacob struct mcam_entry entry_data; 2530503b82deSJerin Jacob uint16_t __io entry; /* MCAM entry to write this match key */ 2531503b82deSJerin Jacob uint16_t __io cntr; /* Counter for this MCAM entry */ 2532503b82deSJerin Jacob uint8_t __io intf; /* Rx or Tx interface */ 2533503b82deSJerin Jacob uint8_t __io enable_entry; /* Enable this MCAM entry ? */ 2534503b82deSJerin Jacob uint8_t __io set_cntr; /* Set counter for this entry ? */ 2535503b82deSJerin Jacob }; 2536503b82deSJerin Jacob 2537503b82deSJerin Jacob /* Enable/Disable a given entry */ 2538503b82deSJerin Jacob struct npc_mcam_ena_dis_entry_req { 2539503b82deSJerin Jacob struct mbox_msghdr hdr; 2540503b82deSJerin Jacob uint16_t __io entry; 2541503b82deSJerin Jacob }; 2542503b82deSJerin Jacob 2543503b82deSJerin Jacob struct npc_mcam_shift_entry_req { 2544503b82deSJerin Jacob struct mbox_msghdr hdr; 2545503b82deSJerin Jacob #define NPC_MCAM_MAX_SHIFTS 64 2546503b82deSJerin Jacob uint16_t __io curr_entry[NPC_MCAM_MAX_SHIFTS]; 2547503b82deSJerin Jacob uint16_t __io new_entry[NPC_MCAM_MAX_SHIFTS]; 2548503b82deSJerin Jacob uint16_t __io shift_count; /* Number of entries to shift */ 2549503b82deSJerin Jacob }; 2550503b82deSJerin Jacob 2551503b82deSJerin Jacob struct npc_mcam_shift_entry_rsp { 2552503b82deSJerin Jacob struct mbox_msghdr hdr; 2553503b82deSJerin Jacob /* Index in 'curr_entry', not entry itself */ 2554503b82deSJerin Jacob uint16_t __io failed_entry_idx; 2555503b82deSJerin Jacob }; 2556503b82deSJerin Jacob 2557503b82deSJerin Jacob struct npc_mcam_alloc_counter_req { 2558503b82deSJerin Jacob struct mbox_msghdr hdr; 2559503b82deSJerin Jacob uint8_t __io contig; /* Contiguous counters ? */ 2560503b82deSJerin Jacob #define NPC_MAX_NONCONTIG_COUNTERS 64 2561503b82deSJerin Jacob uint16_t __io count; /* Number of counters requested */ 2562503b82deSJerin Jacob }; 2563503b82deSJerin Jacob 2564503b82deSJerin Jacob struct npc_mcam_alloc_counter_rsp { 2565503b82deSJerin Jacob struct mbox_msghdr hdr; 2566503b82deSJerin Jacob /* Counter alloc'ed or start idx if contiguous. 2567503b82deSJerin Jacob * Invalid in case of non-contiguous. 2568503b82deSJerin Jacob */ 2569503b82deSJerin Jacob uint16_t __io cntr; 2570503b82deSJerin Jacob uint16_t __io count; /* Number of counters allocated */ 2571503b82deSJerin Jacob uint16_t __io cntr_list[NPC_MAX_NONCONTIG_COUNTERS]; 2572503b82deSJerin Jacob }; 2573503b82deSJerin Jacob 2574503b82deSJerin Jacob struct npc_mcam_oper_counter_req { 2575503b82deSJerin Jacob struct mbox_msghdr hdr; 2576503b82deSJerin Jacob uint16_t __io cntr; /* Free a counter or clear/fetch it's stats */ 2577503b82deSJerin Jacob }; 2578503b82deSJerin Jacob 2579503b82deSJerin Jacob struct npc_mcam_oper_counter_rsp { 2580503b82deSJerin Jacob struct mbox_msghdr hdr; 2581503b82deSJerin Jacob /* valid only while fetching counter's stats */ 2582503b82deSJerin Jacob uint64_t __io stat; 2583503b82deSJerin Jacob }; 2584503b82deSJerin Jacob 2585503b82deSJerin Jacob struct npc_mcam_unmap_counter_req { 2586503b82deSJerin Jacob struct mbox_msghdr hdr; 2587503b82deSJerin Jacob uint16_t __io cntr; 2588503b82deSJerin Jacob uint16_t __io entry; /* Entry and counter to be unmapped */ 2589503b82deSJerin Jacob uint8_t __io all; /* Unmap all entries using this counter ? */ 2590503b82deSJerin Jacob }; 2591503b82deSJerin Jacob 2592503b82deSJerin Jacob struct npc_mcam_alloc_and_write_entry_req { 2593503b82deSJerin Jacob struct mbox_msghdr hdr; 2594503b82deSJerin Jacob struct mcam_entry entry_data; 2595503b82deSJerin Jacob uint16_t __io ref_entry; 2596503b82deSJerin Jacob uint8_t __io priority; /* Lower or higher w.r.t ref_entry */ 2597503b82deSJerin Jacob uint8_t __io intf; /* Rx or Tx interface */ 2598503b82deSJerin Jacob uint8_t __io enable_entry; /* Enable this MCAM entry ? */ 2599503b82deSJerin Jacob uint8_t __io alloc_cntr; /* Allocate counter and map ? */ 2600503b82deSJerin Jacob }; 2601503b82deSJerin Jacob 2602503b82deSJerin Jacob struct npc_mcam_alloc_and_write_entry_rsp { 2603503b82deSJerin Jacob struct mbox_msghdr hdr; 2604503b82deSJerin Jacob uint16_t __io entry; 2605503b82deSJerin Jacob uint16_t __io cntr; 2606503b82deSJerin Jacob }; 2607503b82deSJerin Jacob 2608503b82deSJerin Jacob struct npc_get_kex_cfg_rsp { 2609503b82deSJerin Jacob struct mbox_msghdr hdr; 2610503b82deSJerin Jacob uint64_t __io rx_keyx_cfg; /* NPC_AF_INTF(0)_KEX_CFG */ 2611503b82deSJerin Jacob uint64_t __io tx_keyx_cfg; /* NPC_AF_INTF(1)_KEX_CFG */ 2612503b82deSJerin Jacob #define NPC_MAX_INTF 2 2613503b82deSJerin Jacob #define NPC_MAX_LID 8 2614503b82deSJerin Jacob #define NPC_MAX_LT 16 2615503b82deSJerin Jacob #define NPC_MAX_LD 2 2616503b82deSJerin Jacob #define NPC_MAX_LFL 16 2617503b82deSJerin Jacob /* NPC_AF_KEX_LDATA(0..1)_FLAGS_CFG */ 2618503b82deSJerin Jacob uint64_t __io kex_ld_flags[NPC_MAX_LD]; 2619503b82deSJerin Jacob /* NPC_AF_INTF(0..1)_LID(0..7)_LT(0..15)_LD(0..1)_CFG */ 2620503b82deSJerin Jacob uint64_t __io intf_lid_lt_ld[NPC_MAX_INTF][NPC_MAX_LID][NPC_MAX_LT] 2621503b82deSJerin Jacob [NPC_MAX_LD]; 2622503b82deSJerin Jacob /* NPC_AF_INTF(0..1)_LDATA(0..1)_FLAGS(0..15)_CFG */ 2623503b82deSJerin Jacob uint64_t __io intf_ld_flags[NPC_MAX_INTF][NPC_MAX_LD][NPC_MAX_LFL]; 2624503b82deSJerin Jacob #define MKEX_NAME_LEN 128 2625503b82deSJerin Jacob uint8_t __io mkex_pfl_name[MKEX_NAME_LEN]; 2626503b82deSJerin Jacob }; 2627503b82deSJerin Jacob 2628503b82deSJerin Jacob enum header_fields { 2629503b82deSJerin Jacob NPC_DMAC, 2630503b82deSJerin Jacob NPC_SMAC, 2631503b82deSJerin Jacob NPC_ETYPE, 2632df29c91cSHarman Kalra NPC_VLAN_ETYPE_CTAG, /* 0x8100 */ 2633df29c91cSHarman Kalra NPC_VLAN_ETYPE_STAG, /* 0x88A8 */ 2634503b82deSJerin Jacob NPC_OUTER_VID, 2635503b82deSJerin Jacob NPC_TOS, 2636503b82deSJerin Jacob NPC_SIP_IPV4, 2637503b82deSJerin Jacob NPC_DIP_IPV4, 2638503b82deSJerin Jacob NPC_SIP_IPV6, 2639503b82deSJerin Jacob NPC_DIP_IPV6, 2640503b82deSJerin Jacob NPC_SPORT_TCP, 2641503b82deSJerin Jacob NPC_DPORT_TCP, 2642503b82deSJerin Jacob NPC_SPORT_UDP, 2643503b82deSJerin Jacob NPC_DPORT_UDP, 2644503b82deSJerin Jacob NPC_FDSA_VAL, 2645503b82deSJerin Jacob NPC_HEADER_FIELDS_MAX, 2646503b82deSJerin Jacob }; 2647503b82deSJerin Jacob 2648503b82deSJerin Jacob struct flow_msg { 2649503b82deSJerin Jacob unsigned char __io dmac[6]; 2650503b82deSJerin Jacob unsigned char __io smac[6]; 2651503b82deSJerin Jacob uint16_t __io etype; 2652503b82deSJerin Jacob uint16_t __io vlan_etype; 2653503b82deSJerin Jacob uint16_t __io vlan_tci; 2654503b82deSJerin Jacob union { 2655503b82deSJerin Jacob uint32_t __io ip4src; 2656503b82deSJerin Jacob uint32_t __io ip6src[4]; 2657503b82deSJerin Jacob }; 2658503b82deSJerin Jacob union { 2659503b82deSJerin Jacob uint32_t __io ip4dst; 2660503b82deSJerin Jacob uint32_t __io ip6dst[4]; 2661503b82deSJerin Jacob }; 2662df29c91cSHarman Kalra union { 2663df29c91cSHarman Kalra uint32_t spi; 2664df29c91cSHarman Kalra }; 2665503b82deSJerin Jacob uint8_t __io tos; 2666503b82deSJerin Jacob uint8_t __io ip_ver; 2667503b82deSJerin Jacob uint8_t __io ip_proto; 2668503b82deSJerin Jacob uint8_t __io tc; 2669503b82deSJerin Jacob uint16_t __io sport; 2670503b82deSJerin Jacob uint16_t __io dport; 2671df29c91cSHarman Kalra union { 2672df29c91cSHarman Kalra uint8_t __io ip_flag; 2673df29c91cSHarman Kalra uint8_t __io next_header; 2674df29c91cSHarman Kalra }; 2675df29c91cSHarman Kalra uint16_t __io vlan_itci; 2676df29c91cSHarman Kalra uint8_t __io icmp_type; 2677df29c91cSHarman Kalra uint8_t __io icmp_code; 2678df29c91cSHarman Kalra uint16_t __io tcp_flags; 2679df29c91cSHarman Kalra uint32_t __io gtpu_teid; 2680df29c91cSHarman Kalra uint32_t __io gtpc_teid; 2681df29c91cSHarman Kalra uint32_t __io mpls_lse[4]; 2682df29c91cSHarman Kalra uint16_t __io sq_id; 2683503b82deSJerin Jacob }; 2684503b82deSJerin Jacob 2685503b82deSJerin Jacob struct npc_install_flow_req { 2686503b82deSJerin Jacob struct mbox_msghdr hdr; 2687503b82deSJerin Jacob struct flow_msg packet; 2688503b82deSJerin Jacob struct flow_msg mask; 2689503b82deSJerin Jacob uint64_t __io features; 2690503b82deSJerin Jacob uint16_t __io entry; 2691503b82deSJerin Jacob uint16_t __io channel; 2692df29c91cSHarman Kalra uint16_t __io chan_mask; 2693503b82deSJerin Jacob uint8_t __io intf; 2694503b82deSJerin Jacob uint8_t __io set_cntr; 2695503b82deSJerin Jacob uint8_t __io default_rule; 2696503b82deSJerin Jacob /* Overwrite(0) or append(1) flow to default rule? */ 2697503b82deSJerin Jacob uint8_t __io append; 2698503b82deSJerin Jacob uint16_t __io vf; 2699503b82deSJerin Jacob /* action */ 2700503b82deSJerin Jacob uint32_t __io index; 2701503b82deSJerin Jacob uint16_t __io match_id; 2702503b82deSJerin Jacob uint8_t __io flow_key_alg; 2703503b82deSJerin Jacob uint8_t __io op; 2704503b82deSJerin Jacob /* vtag action */ 2705503b82deSJerin Jacob uint8_t __io vtag0_type; 2706503b82deSJerin Jacob uint8_t __io vtag0_valid; 2707503b82deSJerin Jacob uint8_t __io vtag1_type; 2708503b82deSJerin Jacob uint8_t __io vtag1_valid; 2709503b82deSJerin Jacob 2710503b82deSJerin Jacob /* vtag tx action */ 2711503b82deSJerin Jacob uint16_t __io vtag0_def; 2712503b82deSJerin Jacob uint8_t __io vtag0_op; 2713503b82deSJerin Jacob uint16_t __io vtag1_def; 2714503b82deSJerin Jacob uint8_t __io vtag1_op; 2715df29c91cSHarman Kalra /* old counter value */ 2716df29c91cSHarman Kalra uint16_t __io cntr_val; 2717503b82deSJerin Jacob }; 2718503b82deSJerin Jacob 2719503b82deSJerin Jacob struct npc_install_flow_rsp { 2720503b82deSJerin Jacob struct mbox_msghdr hdr; 2721503b82deSJerin Jacob /* Negative if no counter else counter number */ 2722503b82deSJerin Jacob int __io counter; 2723503b82deSJerin Jacob }; 2724503b82deSJerin Jacob 2725503b82deSJerin Jacob struct npc_delete_flow_req { 2726503b82deSJerin Jacob struct mbox_msghdr hdr; 2727503b82deSJerin Jacob uint16_t __io entry; 2728503b82deSJerin Jacob uint16_t __io start; /*Disable range of entries */ 2729503b82deSJerin Jacob uint16_t __io end; 2730503b82deSJerin Jacob uint8_t __io all; /* PF + VFs */ 2731df29c91cSHarman Kalra uint16_t __io vf; /* Requesting VF */ 2732503b82deSJerin Jacob }; 2733503b82deSJerin Jacob 2734503b82deSJerin Jacob struct npc_mcam_read_entry_req { 2735503b82deSJerin Jacob struct mbox_msghdr hdr; 2736503b82deSJerin Jacob /* MCAM entry to read */ 2737503b82deSJerin Jacob uint16_t __io entry; 2738503b82deSJerin Jacob }; 2739503b82deSJerin Jacob 2740503b82deSJerin Jacob struct npc_mcam_read_entry_rsp { 2741503b82deSJerin Jacob struct mbox_msghdr hdr; 2742503b82deSJerin Jacob struct mcam_entry entry_data; 2743503b82deSJerin Jacob uint8_t __io intf; 2744503b82deSJerin Jacob uint8_t __io enable; 2745503b82deSJerin Jacob }; 2746503b82deSJerin Jacob 2747503b82deSJerin Jacob struct npc_mcam_read_base_rule_rsp { 2748503b82deSJerin Jacob struct mbox_msghdr hdr; 2749503b82deSJerin Jacob struct mcam_entry entry_data; 2750503b82deSJerin Jacob }; 2751503b82deSJerin Jacob 2752503b82deSJerin Jacob struct npc_mcam_get_stats_req { 2753503b82deSJerin Jacob struct mbox_msghdr hdr; 2754503b82deSJerin Jacob uint16_t __io entry; /* mcam entry */ 2755503b82deSJerin Jacob }; 2756503b82deSJerin Jacob 2757503b82deSJerin Jacob struct npc_mcam_get_stats_rsp { 2758503b82deSJerin Jacob struct mbox_msghdr hdr; 2759503b82deSJerin Jacob uint64_t __io stat; /* counter stats */ 2760503b82deSJerin Jacob uint8_t __io stat_ena; /* enabled */ 2761503b82deSJerin Jacob }; 2762503b82deSJerin Jacob 2763357f5ebcSAnkur Dwivedi #define MCAM_ARR_SIZE 256 2764357f5ebcSAnkur Dwivedi #define MCAM_ARR_ELEM_SZ 64 2765357f5ebcSAnkur Dwivedi 2766357f5ebcSAnkur Dwivedi struct npc_mcam_get_hit_status_req { 2767357f5ebcSAnkur Dwivedi struct mbox_msghdr hdr; 2768357f5ebcSAnkur Dwivedi /* If clear == true, then if the hit status bit for mcam id is set, 2769357f5ebcSAnkur Dwivedi * then needs to cleared by writing 1 back. 2770357f5ebcSAnkur Dwivedi * If clear == false, then leave the hit status bit as is. 2771357f5ebcSAnkur Dwivedi */ 2772357f5ebcSAnkur Dwivedi bool __io clear; 2773357f5ebcSAnkur Dwivedi uint8_t __io reserved[3]; 2774357f5ebcSAnkur Dwivedi /* Start range of mcam id */ 2775357f5ebcSAnkur Dwivedi uint32_t __io range_valid_mcam_ids_start; 2776357f5ebcSAnkur Dwivedi /* End range of mcam id */ 2777357f5ebcSAnkur Dwivedi uint32_t __io range_valid_mcam_ids_end; 2778357f5ebcSAnkur Dwivedi /* Bitmap of mcam ids for which the hit status needs to checked */ 2779357f5ebcSAnkur Dwivedi uint64_t __io mcam_ids[MCAM_ARR_SIZE]; 2780357f5ebcSAnkur Dwivedi }; 2781357f5ebcSAnkur Dwivedi 2782357f5ebcSAnkur Dwivedi struct npc_mcam_get_hit_status_rsp { 2783357f5ebcSAnkur Dwivedi struct mbox_msghdr hdr; 2784357f5ebcSAnkur Dwivedi /* Bitmap of mcam hit status, prior to clearing */ 2785357f5ebcSAnkur Dwivedi uint64_t __io mcam_hit_status[MCAM_ARR_SIZE]; 2786357f5ebcSAnkur Dwivedi }; 2787357f5ebcSAnkur Dwivedi 2788503b82deSJerin Jacob /* TIM mailbox error codes 2789503b82deSJerin Jacob * Range 801 - 900. 2790503b82deSJerin Jacob */ 2791503b82deSJerin Jacob enum tim_af_status { 2792503b82deSJerin Jacob TIM_AF_NO_RINGS_LEFT = -801, 2793503b82deSJerin Jacob TIM_AF_INVALID_NPA_PF_FUNC = -802, 2794503b82deSJerin Jacob TIM_AF_INVALID_SSO_PF_FUNC = -803, 2795503b82deSJerin Jacob TIM_AF_RING_STILL_RUNNING = -804, 2796503b82deSJerin Jacob TIM_AF_LF_INVALID = -805, 2797503b82deSJerin Jacob TIM_AF_CSIZE_NOT_ALIGNED = -806, 2798503b82deSJerin Jacob TIM_AF_CSIZE_TOO_SMALL = -807, 2799503b82deSJerin Jacob TIM_AF_CSIZE_TOO_BIG = -808, 2800503b82deSJerin Jacob TIM_AF_INTERVAL_TOO_SMALL = -809, 2801503b82deSJerin Jacob TIM_AF_INVALID_BIG_ENDIAN_VALUE = -810, 2802503b82deSJerin Jacob TIM_AF_INVALID_CLOCK_SOURCE = -811, 2803503b82deSJerin Jacob TIM_AF_GPIO_CLK_SRC_NOT_ENABLED = -812, 2804503b82deSJerin Jacob TIM_AF_INVALID_BSIZE = -813, 2805503b82deSJerin Jacob TIM_AF_INVALID_ENABLE_PERIODIC = -814, 2806503b82deSJerin Jacob TIM_AF_INVALID_ENABLE_DONTFREE = -815, 2807503b82deSJerin Jacob TIM_AF_ENA_DONTFRE_NSET_PERIODIC = -816, 2808503b82deSJerin Jacob TIM_AF_RING_ALREADY_DISABLED = -817, 2809*f3c7b607SPavan Nikhilesh TIM_AF_LF_START_SYNC_FAIL = -818, 2810503b82deSJerin Jacob }; 2811503b82deSJerin Jacob 2812503b82deSJerin Jacob enum tim_clk_srcs { 2813503b82deSJerin Jacob TIM_CLK_SRCS_TENNS = 0, 2814503b82deSJerin Jacob TIM_CLK_SRCS_GPIO = 1, 2815503b82deSJerin Jacob TIM_CLK_SRCS_GTI = 2, 2816503b82deSJerin Jacob TIM_CLK_SRCS_PTP = 3, 281737a94462SPavan Nikhilesh TIM_CLK_SRCS_SYNCE = 4, 281837a94462SPavan Nikhilesh TIM_CLK_SRCS_BTS = 5, 281937a94462SPavan Nikhilesh TIM_CLK_SRCS_EXT_MIO = 6, 282037a94462SPavan Nikhilesh TIM_CLK_SRCS_EXT_GTI = 7, 2821503b82deSJerin Jacob TIM_CLK_SRSC_INVALID, 2822503b82deSJerin Jacob }; 2823503b82deSJerin Jacob 2824503b82deSJerin Jacob enum tim_gpio_edge { 2825503b82deSJerin Jacob TIM_GPIO_NO_EDGE = 0, 2826503b82deSJerin Jacob TIM_GPIO_LTOH_TRANS = 1, 2827503b82deSJerin Jacob TIM_GPIO_HTOL_TRANS = 2, 2828503b82deSJerin Jacob TIM_GPIO_BOTH_TRANS = 3, 2829503b82deSJerin Jacob TIM_GPIO_INVALID, 2830503b82deSJerin Jacob }; 2831503b82deSJerin Jacob 2832e3315630SSatheesh Paul struct npc_get_field_hash_info_req { 2833e3315630SSatheesh Paul struct mbox_msghdr hdr; 2834e3315630SSatheesh Paul uint8_t intf; 2835e3315630SSatheesh Paul }; 2836e3315630SSatheesh Paul 2837e3315630SSatheesh Paul struct npc_get_field_hash_info_rsp { 2838e3315630SSatheesh Paul struct mbox_msghdr hdr; 2839e3315630SSatheesh Paul uint64_t __io secret_key[3]; 2840e3315630SSatheesh Paul #define NPC_MAX_HASH 2 2841e3315630SSatheesh Paul #define NPC_MAX_HASH_MASK 2 2842e3315630SSatheesh Paul /* NPC_AF_INTF(0..1)_HASH(0..1)_MASK(0..1) */ 2843e3315630SSatheesh Paul uint64_t __io hash_mask[NPC_MAX_INTF][NPC_MAX_HASH][NPC_MAX_HASH_MASK]; 2844e3315630SSatheesh Paul /* NPC_AF_INTF(0..1)_HASH(0..1)_RESULT_CTRL */ 2845e3315630SSatheesh Paul uint64_t __io hash_ctrl[NPC_MAX_INTF][NPC_MAX_HASH]; 2846e3315630SSatheesh Paul }; 2847e3315630SSatheesh Paul 2848503b82deSJerin Jacob enum ptp_op { 2849503b82deSJerin Jacob PTP_OP_ADJFINE = 0, /* adjfine(req.scaled_ppm); */ 2850503b82deSJerin Jacob PTP_OP_GET_CLOCK = 1, /* rsp.clk = get_clock() */ 2851503b82deSJerin Jacob }; 2852503b82deSJerin Jacob 2853503b82deSJerin Jacob struct ptp_req { 2854503b82deSJerin Jacob struct mbox_msghdr hdr; 2855503b82deSJerin Jacob uint8_t __io op; 2856503b82deSJerin Jacob int64_t __io scaled_ppm; 2857503b82deSJerin Jacob uint8_t __io is_pmu; 2858503b82deSJerin Jacob }; 2859503b82deSJerin Jacob 2860503b82deSJerin Jacob struct ptp_rsp { 2861503b82deSJerin Jacob struct mbox_msghdr hdr; 2862503b82deSJerin Jacob uint64_t __io clk; 2863503b82deSJerin Jacob uint64_t __io tsc; 2864503b82deSJerin Jacob }; 2865503b82deSJerin Jacob 2866503b82deSJerin Jacob struct get_hw_cap_rsp { 2867503b82deSJerin Jacob struct mbox_msghdr hdr; 2868503b82deSJerin Jacob /* Schq mapping fixed or flexible */ 2869503b82deSJerin Jacob uint8_t __io nix_fixed_txschq_mapping; 2870503b82deSJerin Jacob uint8_t __io nix_shaping; /* Is shaping and coloring supported */ 2871e3315630SSatheesh Paul uint8_t __io npc_hash_extract; /* Is hash extract supported */ 2872503b82deSJerin Jacob }; 2873503b82deSJerin Jacob 2874503b82deSJerin Jacob struct ndc_sync_op { 2875503b82deSJerin Jacob struct mbox_msghdr hdr; 2876503b82deSJerin Jacob uint8_t __io nix_lf_tx_sync; 2877503b82deSJerin Jacob uint8_t __io nix_lf_rx_sync; 2878503b82deSJerin Jacob uint8_t __io npa_lf_sync; 2879503b82deSJerin Jacob }; 2880503b82deSJerin Jacob 2881503b82deSJerin Jacob struct tim_lf_alloc_req { 2882503b82deSJerin Jacob struct mbox_msghdr hdr; 2883503b82deSJerin Jacob uint16_t __io ring; 2884503b82deSJerin Jacob uint16_t __io npa_pf_func; 2885503b82deSJerin Jacob uint16_t __io sso_pf_func; 2886503b82deSJerin Jacob }; 2887503b82deSJerin Jacob 2888503b82deSJerin Jacob struct tim_ring_req { 2889503b82deSJerin Jacob struct mbox_msghdr hdr; 2890503b82deSJerin Jacob uint16_t __io ring; 2891503b82deSJerin Jacob }; 2892503b82deSJerin Jacob 2893503b82deSJerin Jacob struct tim_config_req { 2894503b82deSJerin Jacob struct mbox_msghdr hdr; 2895503b82deSJerin Jacob uint16_t __io ring; 2896503b82deSJerin Jacob uint8_t __io bigendian; 2897503b82deSJerin Jacob uint8_t __io clocksource; 2898503b82deSJerin Jacob uint8_t __io enableperiodic; 2899503b82deSJerin Jacob uint8_t __io enabledontfreebuffer; 2900503b82deSJerin Jacob uint32_t __io bucketsize; 2901503b82deSJerin Jacob uint32_t __io chunksize; 2902*f3c7b607SPavan Nikhilesh uint32_t __io interval_lo; 2903503b82deSJerin Jacob uint8_t __io gpioedge; 2904*f3c7b607SPavan Nikhilesh uint8_t __io rsvd[3]; 2905*f3c7b607SPavan Nikhilesh uint32_t __io interval_hi; 290667e1cbf3SRakesh Kudurumalla uint64_t __io intervalns; 290767e1cbf3SRakesh Kudurumalla uint64_t __io clockfreq; 2908503b82deSJerin Jacob }; 2909503b82deSJerin Jacob 2910*f3c7b607SPavan Nikhilesh struct tim_cfg_hwwqe_req { 2911*f3c7b607SPavan Nikhilesh struct mbox_msghdr hdr; 2912*f3c7b607SPavan Nikhilesh uint16_t __io ring; 2913*f3c7b607SPavan Nikhilesh uint8_t __io grp_ena; 2914*f3c7b607SPavan Nikhilesh uint8_t __io hwwqe_ena; 2915*f3c7b607SPavan Nikhilesh uint8_t __io ins_min_gap; 2916*f3c7b607SPavan Nikhilesh uint8_t __io flw_ctrl_ena; 2917*f3c7b607SPavan Nikhilesh uint8_t __io wqe_rd_clr_ena; 2918*f3c7b607SPavan Nikhilesh uint16_t __io grp_tmo_cntr; 2919*f3c7b607SPavan Nikhilesh uint16_t __io npa_tmo_cntr; 2920*f3c7b607SPavan Nikhilesh uint16_t __io result_offset; 2921*f3c7b607SPavan Nikhilesh uint16_t __io event_count_offset; 2922*f3c7b607SPavan Nikhilesh uint64_t __io rsvd[2]; 2923*f3c7b607SPavan Nikhilesh }; 2924*f3c7b607SPavan Nikhilesh 2925*f3c7b607SPavan Nikhilesh struct tim_feat_info { 2926*f3c7b607SPavan Nikhilesh uint16_t __io rings; 2927*f3c7b607SPavan Nikhilesh uint8_t __io engines; 2928*f3c7b607SPavan Nikhilesh uint8_t __io hwwqe : 1; 2929*f3c7b607SPavan Nikhilesh uint8_t __io intvl_ext : 1; 2930*f3c7b607SPavan Nikhilesh uint8_t __io rsvd8[4]; 2931*f3c7b607SPavan Nikhilesh uint64_t __io rsvd[2]; 2932*f3c7b607SPavan Nikhilesh }; 2933*f3c7b607SPavan Nikhilesh 2934*f3c7b607SPavan Nikhilesh struct tim_hw_info { 2935*f3c7b607SPavan Nikhilesh struct mbox_msghdr hdr; 2936*f3c7b607SPavan Nikhilesh struct tim_feat_info feat; 2937*f3c7b607SPavan Nikhilesh }; 2938*f3c7b607SPavan Nikhilesh 2939503b82deSJerin Jacob struct tim_lf_alloc_rsp { 2940503b82deSJerin Jacob struct mbox_msghdr hdr; 2941503b82deSJerin Jacob uint64_t __io tenns_clk; 2942503b82deSJerin Jacob }; 2943503b82deSJerin Jacob 2944503b82deSJerin Jacob struct tim_enable_rsp { 2945503b82deSJerin Jacob struct mbox_msghdr hdr; 2946503b82deSJerin Jacob uint64_t __io timestarted; 2947503b82deSJerin Jacob uint32_t __io currentbucket; 2948503b82deSJerin Jacob }; 2949503b82deSJerin Jacob 295067e1cbf3SRakesh Kudurumalla struct tim_intvl_req { 295167e1cbf3SRakesh Kudurumalla struct mbox_msghdr hdr; 295267e1cbf3SRakesh Kudurumalla uint8_t __io clocksource; 295367e1cbf3SRakesh Kudurumalla uint64_t __io clockfreq; 295467e1cbf3SRakesh Kudurumalla }; 295567e1cbf3SRakesh Kudurumalla 295667e1cbf3SRakesh Kudurumalla struct tim_intvl_rsp { 295767e1cbf3SRakesh Kudurumalla struct mbox_msghdr hdr; 295867e1cbf3SRakesh Kudurumalla uint64_t __io intvl_cyc; 295967e1cbf3SRakesh Kudurumalla uint64_t __io intvl_ns; 296067e1cbf3SRakesh Kudurumalla }; 296167e1cbf3SRakesh Kudurumalla 296237a94462SPavan Nikhilesh struct tim_capture_rsp { 296337a94462SPavan Nikhilesh struct mbox_msghdr hdr; 296437a94462SPavan Nikhilesh uint64_t __io counters[TIM_CLK_SRSC_INVALID]; 296537a94462SPavan Nikhilesh }; 296637a94462SPavan Nikhilesh 2967503b82deSJerin Jacob struct sdp_node_info { 2968503b82deSJerin Jacob /* Node to which this PF belons to */ 2969503b82deSJerin Jacob uint8_t __io node_id; 2970503b82deSJerin Jacob uint8_t __io max_vfs; 2971503b82deSJerin Jacob uint8_t __io num_pf_rings; 2972503b82deSJerin Jacob uint8_t __io pf_srn; 2973503b82deSJerin Jacob #define SDP_MAX_VFS 128 2974503b82deSJerin Jacob uint8_t __io vf_rings[SDP_MAX_VFS]; 2975503b82deSJerin Jacob }; 2976503b82deSJerin Jacob 2977503b82deSJerin Jacob struct sdp_chan_info_msg { 2978503b82deSJerin Jacob struct mbox_msghdr hdr; 2979503b82deSJerin Jacob struct sdp_node_info info; 2980503b82deSJerin Jacob }; 2981503b82deSJerin Jacob 298204087b78SSatheesh Paul /* For SPI to SA index add */ 298304087b78SSatheesh Paul struct nix_spi_to_sa_add_req { 298404087b78SSatheesh Paul struct mbox_msghdr hdr; 298504087b78SSatheesh Paul uint32_t __io sa_index; 298604087b78SSatheesh Paul uint32_t __io spi_index; 298704087b78SSatheesh Paul uint16_t __io match_id; 298804087b78SSatheesh Paul bool __io valid; 298904087b78SSatheesh Paul }; 299004087b78SSatheesh Paul 299104087b78SSatheesh Paul struct nix_spi_to_sa_add_rsp { 299204087b78SSatheesh Paul struct mbox_msghdr hdr; 299304087b78SSatheesh Paul uint16_t __io hash_index; 299404087b78SSatheesh Paul uint8_t __io way; 299504087b78SSatheesh Paul uint8_t __io is_duplicate; 299604087b78SSatheesh Paul }; 299704087b78SSatheesh Paul 299804087b78SSatheesh Paul /* To free SPI to SA index */ 299904087b78SSatheesh Paul struct nix_spi_to_sa_delete_req { 300004087b78SSatheesh Paul struct mbox_msghdr hdr; 300104087b78SSatheesh Paul uint16_t __io hash_index; 300204087b78SSatheesh Paul uint8_t __io way; 300304087b78SSatheesh Paul }; 3004d85c80b4SHarman Kalra 3005e66a6e54SAnkur Dwivedi struct rep_evt_data { 3006e66a6e54SAnkur Dwivedi uint8_t __io port_state; 3007e66a6e54SAnkur Dwivedi uint8_t __io vf_state; 3008e66a6e54SAnkur Dwivedi uint16_t __io rx_mode; 3009e66a6e54SAnkur Dwivedi uint16_t __io rx_flags; 3010e66a6e54SAnkur Dwivedi uint16_t __io mtu; 3011e66a6e54SAnkur Dwivedi uint64_t __io rsvd[5]; 3012d85c80b4SHarman Kalra }; 3013d85c80b4SHarman Kalra 3014e66a6e54SAnkur Dwivedi struct rep_event { 3015d85c80b4SHarman Kalra struct mbox_msghdr hdr; 3016e66a6e54SAnkur Dwivedi uint16_t __io pcifunc; 3017e66a6e54SAnkur Dwivedi #define RVU_EVENT_PORT_STATE BIT_ULL(0) 3018e66a6e54SAnkur Dwivedi #define RVU_EVENT_PFVF_STATE BIT_ULL(1) 3019e66a6e54SAnkur Dwivedi #define RVU_EVENT_MTU_CHANGE BIT_ULL(2) 3020e66a6e54SAnkur Dwivedi #define RVU_EVENT_RX_MODE_CHANGE BIT_ULL(3) 3021e66a6e54SAnkur Dwivedi uint16_t __io event; 3022e66a6e54SAnkur Dwivedi struct rep_evt_data evt_data; 3023d85c80b4SHarman Kalra }; 3024e66a6e54SAnkur Dwivedi 3025503b82deSJerin Jacob #endif /* __ROC_MBOX_H__ */ 3026