1d5edd333SMustafa Ismail /* SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB */ 2d5edd333SMustafa Ismail /* Copyright (c) 2015 - 2024 Intel Corporation */ 3d5edd333SMustafa Ismail #ifndef IRDMA_VIRTCHNL_H 4d5edd333SMustafa Ismail #define IRDMA_VIRTCHNL_H 5d5edd333SMustafa Ismail 6d5edd333SMustafa Ismail #include "hmc.h" 7d5edd333SMustafa Ismail #include "irdma.h" 8d5edd333SMustafa Ismail 9d5edd333SMustafa Ismail /* IRDMA_VCHNL_CHNL_VER_V0 is for legacy hw, no longer supported. */ 10d5edd333SMustafa Ismail #define IRDMA_VCHNL_CHNL_VER_V2 2 11d5edd333SMustafa Ismail #define IRDMA_VCHNL_CHNL_VER_MIN IRDMA_VCHNL_CHNL_VER_V2 12d5edd333SMustafa Ismail #define IRDMA_VCHNL_CHNL_VER_MAX IRDMA_VCHNL_CHNL_VER_V2 13d5edd333SMustafa Ismail #define IRDMA_VCHNL_OP_GET_HMC_FCN_V0 0 14d5edd333SMustafa Ismail #define IRDMA_VCHNL_OP_GET_HMC_FCN_V1 1 15d5edd333SMustafa Ismail #define IRDMA_VCHNL_OP_GET_HMC_FCN_V2 2 16d5edd333SMustafa Ismail #define IRDMA_VCHNL_OP_PUT_HMC_FCN_V0 0 177d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_OP_GET_REG_LAYOUT_V0 0 18b800e82fSShiraz Saleem #define IRDMA_VCHNL_OP_QUEUE_VECTOR_MAP_V0 0 19b800e82fSShiraz Saleem #define IRDMA_VCHNL_OP_QUEUE_VECTOR_UNMAP_V0 0 20*d6ed4b69SShiraz Saleem #define IRDMA_VCHNL_OP_ADD_VPORT_V0 0 21*d6ed4b69SShiraz Saleem #define IRDMA_VCHNL_OP_DEL_VPORT_V0 0 22d5edd333SMustafa Ismail #define IRDMA_VCHNL_OP_GET_RDMA_CAPS_V0 0 23d5edd333SMustafa Ismail #define IRDMA_VCHNL_OP_GET_RDMA_CAPS_MIN_SIZE 1 24d5edd333SMustafa Ismail 257d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CQPTAIL 0 267d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CQPDB 1 277d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CCQPSTATUS 2 287d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CCQPHIGH 3 297d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CCQPLOW 4 307d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CQARM 5 317d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CQACK 6 327d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_AEQALLOC 7 337d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CQPERRCODES 8 347d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_WQEALLOC 9 357d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_IPCONFIG0 10 367d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_DB_ADDR_OFFSET 11 377d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_DYN_CTL 12 387d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_AEQITRMASK 13 397d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_ID_CEQITRMASK 14 407d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_INV_ID 0xFFFF 417d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REG_PAGE_REL 0x8000 427d5a7cc7SChristopher Bednarz 437d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REGFLD_ID_CCQPSTATUS_CQP_OP_ERR 2 447d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REGFLD_ID_CCQPSTATUS_CCQP_DONE 5 457d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REGFLD_ID_CQPSQ_STAG_PDID 6 467d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REGFLD_ID_CQPSQ_CQ_CEQID 7 477d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REGFLD_ID_CQPSQ_CQ_CQID 8 487d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REGFLD_ID_COMMIT_FPM_CQCNT 9 497d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REGFLD_ID_UPESD_HMCN_ID 10 507d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_REGFLD_INV_ID 0xFFFF 517d5a7cc7SChristopher Bednarz 527d5a7cc7SChristopher Bednarz #define IRDMA_VCHNL_RESP_MIN_SIZE (sizeof(struct irdma_vchnl_resp_buf)) 537d5a7cc7SChristopher Bednarz 54d5edd333SMustafa Ismail enum irdma_vchnl_ops { 55d5edd333SMustafa Ismail IRDMA_VCHNL_OP_GET_VER = 0, 56d5edd333SMustafa Ismail IRDMA_VCHNL_OP_GET_HMC_FCN = 1, 57d5edd333SMustafa Ismail IRDMA_VCHNL_OP_PUT_HMC_FCN = 2, 587d5a7cc7SChristopher Bednarz IRDMA_VCHNL_OP_GET_REG_LAYOUT = 11, 59d5edd333SMustafa Ismail IRDMA_VCHNL_OP_GET_RDMA_CAPS = 13, 60b800e82fSShiraz Saleem IRDMA_VCHNL_OP_QUEUE_VECTOR_MAP = 14, 61b800e82fSShiraz Saleem IRDMA_VCHNL_OP_QUEUE_VECTOR_UNMAP = 15, 62*d6ed4b69SShiraz Saleem IRDMA_VCHNL_OP_ADD_VPORT = 16, 63*d6ed4b69SShiraz Saleem IRDMA_VCHNL_OP_DEL_VPORT = 17, 64d5edd333SMustafa Ismail }; 65d5edd333SMustafa Ismail 66d5edd333SMustafa Ismail struct irdma_vchnl_req_hmc_info { 67d5edd333SMustafa Ismail u8 protocol_used; 68d5edd333SMustafa Ismail u8 disable_qos; 69d5edd333SMustafa Ismail } __packed; 70d5edd333SMustafa Ismail 71d5edd333SMustafa Ismail struct irdma_vchnl_resp_hmc_info { 72d5edd333SMustafa Ismail u16 hmc_func; 73d5edd333SMustafa Ismail u16 qs_handle[IRDMA_MAX_USER_PRIORITY]; 74d5edd333SMustafa Ismail } __packed; 75d5edd333SMustafa Ismail 76b800e82fSShiraz Saleem struct irdma_vchnl_qv_info { 77b800e82fSShiraz Saleem u32 v_idx; 78b800e82fSShiraz Saleem u16 ceq_idx; 79b800e82fSShiraz Saleem u16 aeq_idx; 80b800e82fSShiraz Saleem u8 itr_idx; 81b800e82fSShiraz Saleem }; 82b800e82fSShiraz Saleem 83b800e82fSShiraz Saleem struct irdma_vchnl_qvlist_info { 84b800e82fSShiraz Saleem u32 num_vectors; 85b800e82fSShiraz Saleem struct irdma_vchnl_qv_info qv_info[]; 86b800e82fSShiraz Saleem }; 87b800e82fSShiraz Saleem 88*d6ed4b69SShiraz Saleem struct irdma_vchnl_req_vport_info { 89*d6ed4b69SShiraz Saleem u16 vport_id; 90*d6ed4b69SShiraz Saleem u32 qp1_id; 91*d6ed4b69SShiraz Saleem }; 92*d6ed4b69SShiraz Saleem 93*d6ed4b69SShiraz Saleem struct irdma_vchnl_resp_vport_info { 94*d6ed4b69SShiraz Saleem u16 qs_handle[IRDMA_MAX_USER_PRIORITY]; 95*d6ed4b69SShiraz Saleem }; 96*d6ed4b69SShiraz Saleem 97d5edd333SMustafa Ismail struct irdma_vchnl_op_buf { 98d5edd333SMustafa Ismail u16 op_code; 99d5edd333SMustafa Ismail u16 op_ver; 100d5edd333SMustafa Ismail u16 buf_len; 101d5edd333SMustafa Ismail u16 rsvd; 102d5edd333SMustafa Ismail u64 op_ctx; 103d5edd333SMustafa Ismail u8 buf[]; 104d5edd333SMustafa Ismail } __packed; 105d5edd333SMustafa Ismail 106d5edd333SMustafa Ismail struct irdma_vchnl_resp_buf { 107d5edd333SMustafa Ismail u64 op_ctx; 108d5edd333SMustafa Ismail u16 buf_len; 109d5edd333SMustafa Ismail s16 op_ret; 110d5edd333SMustafa Ismail u16 rsvd[2]; 111d5edd333SMustafa Ismail u8 buf[]; 112d5edd333SMustafa Ismail } __packed; 113d5edd333SMustafa Ismail 114d5edd333SMustafa Ismail struct irdma_vchnl_rdma_caps { 115d5edd333SMustafa Ismail u8 hw_rev; 116d5edd333SMustafa Ismail u16 cqp_timeout_s; 117d5edd333SMustafa Ismail u16 cqp_def_timeout_s; 118d5edd333SMustafa Ismail u16 max_hw_push_len; 119d5edd333SMustafa Ismail } __packed; 120d5edd333SMustafa Ismail 121d5edd333SMustafa Ismail struct irdma_vchnl_init_info { 122d5edd333SMustafa Ismail struct workqueue_struct *vchnl_wq; 123d5edd333SMustafa Ismail enum irdma_vers hw_rev; 124d5edd333SMustafa Ismail bool privileged; 125d5edd333SMustafa Ismail bool is_pf; 126d5edd333SMustafa Ismail }; 127d5edd333SMustafa Ismail 1287d5a7cc7SChristopher Bednarz struct irdma_vchnl_reg_info { 1297d5a7cc7SChristopher Bednarz u32 reg_offset; 1307d5a7cc7SChristopher Bednarz u16 field_cnt; 1317d5a7cc7SChristopher Bednarz u16 reg_id; /* High bit of reg_id: bar or page relative */ 1327d5a7cc7SChristopher Bednarz }; 1337d5a7cc7SChristopher Bednarz 1347d5a7cc7SChristopher Bednarz struct irdma_vchnl_reg_field_info { 1357d5a7cc7SChristopher Bednarz u8 fld_shift; 1367d5a7cc7SChristopher Bednarz u8 fld_bits; 1377d5a7cc7SChristopher Bednarz u16 fld_id; 1387d5a7cc7SChristopher Bednarz }; 1397d5a7cc7SChristopher Bednarz 140d5edd333SMustafa Ismail struct irdma_vchnl_req { 141d5edd333SMustafa Ismail struct irdma_vchnl_op_buf *vchnl_msg; 142d5edd333SMustafa Ismail void *parm; 143d5edd333SMustafa Ismail u32 vf_id; 144d5edd333SMustafa Ismail u16 parm_len; 145d5edd333SMustafa Ismail u16 resp_len; 146d5edd333SMustafa Ismail }; 147d5edd333SMustafa Ismail 148d5edd333SMustafa Ismail struct irdma_vchnl_req_init_info { 149d5edd333SMustafa Ismail void *req_parm; 150d5edd333SMustafa Ismail void *resp_parm; 151d5edd333SMustafa Ismail u16 req_parm_len; 152d5edd333SMustafa Ismail u16 resp_parm_len; 153d5edd333SMustafa Ismail u16 op_code; 154d5edd333SMustafa Ismail u16 op_ver; 155d5edd333SMustafa Ismail } __packed; 156d5edd333SMustafa Ismail 157*d6ed4b69SShiraz Saleem struct irdma_qos; 158*d6ed4b69SShiraz Saleem 159d5edd333SMustafa Ismail int irdma_sc_vchnl_init(struct irdma_sc_dev *dev, 160d5edd333SMustafa Ismail struct irdma_vchnl_init_info *info); 161d5edd333SMustafa Ismail int irdma_vchnl_req_get_ver(struct irdma_sc_dev *dev, u16 ver_req, 162d5edd333SMustafa Ismail u32 *ver_res); 163d5edd333SMustafa Ismail int irdma_vchnl_req_get_hmc_fcn(struct irdma_sc_dev *dev); 164d5edd333SMustafa Ismail int irdma_vchnl_req_put_hmc_fcn(struct irdma_sc_dev *dev); 165d5edd333SMustafa Ismail int irdma_vchnl_req_get_caps(struct irdma_sc_dev *dev); 166d5edd333SMustafa Ismail int irdma_vchnl_req_get_resp(struct irdma_sc_dev *dev, 167d5edd333SMustafa Ismail struct irdma_vchnl_req *vc_req); 1687d5a7cc7SChristopher Bednarz int irdma_vchnl_req_get_reg_layout(struct irdma_sc_dev *dev); 169b800e82fSShiraz Saleem int irdma_vchnl_req_aeq_vec_map(struct irdma_sc_dev *dev, u32 v_idx); 170b800e82fSShiraz Saleem int irdma_vchnl_req_ceq_vec_map(struct irdma_sc_dev *dev, u16 ceq_id, 171b800e82fSShiraz Saleem u32 v_idx); 172*d6ed4b69SShiraz Saleem int irdma_vchnl_req_add_vport(struct irdma_sc_dev *dev, u16 vport_id, 173*d6ed4b69SShiraz Saleem u32 qp1_id, struct irdma_qos *qos); 174*d6ed4b69SShiraz Saleem int irdma_vchnl_req_del_vport(struct irdma_sc_dev *dev, u16 vport_id, 175*d6ed4b69SShiraz Saleem u32 qp1_id); 176d5edd333SMustafa Ismail #endif /* IRDMA_VIRTCHNL_H */ 177