1d9ce1917SZiyang Xuan /* SPDX-License-Identifier: BSD-3-Clause 2d9ce1917SZiyang Xuan * Copyright(c) 2017 Huawei Technologies Co., Ltd 3d9ce1917SZiyang Xuan */ 4d9ce1917SZiyang Xuan 5d9ce1917SZiyang Xuan #ifndef _HINIC_PMD_CFG_H_ 6d9ce1917SZiyang Xuan #define _HINIC_PMD_CFG_H_ 7d9ce1917SZiyang Xuan 8d9ce1917SZiyang Xuan #define CFG_MAX_CMD_TIMEOUT 8000 /* ms */ 9d9ce1917SZiyang Xuan 10d9ce1917SZiyang Xuan #define IS_NIC_TYPE(dev) \ 11d9ce1917SZiyang Xuan ((dev)->cfg_mgmt->svc_cap.chip_svc_type & CFG_SVC_NIC_BIT0) 12d9ce1917SZiyang Xuan 13d9ce1917SZiyang Xuan struct host_shared_resource_cap { 14d9ce1917SZiyang Xuan u32 host_pctxs; /* Parent Context max 1M, IOE and FCoE max 8K flows */ 15d9ce1917SZiyang Xuan u32 host_cctxs; /* Child Context: max 8K */ 16d9ce1917SZiyang Xuan u32 host_scqs; /* shared CQ, chip interface module uses 1 SCQ 17d9ce1917SZiyang Xuan * TOE/IOE/FCoE each uses 1 SCQ 18d9ce1917SZiyang Xuan * RoCE/IWARP uses multiple SCQs 19d9ce1917SZiyang Xuan * So 6 SCQ least 20d9ce1917SZiyang Xuan */ 21d9ce1917SZiyang Xuan u32 host_srqs; /* SRQ number: 256K */ 22d9ce1917SZiyang Xuan u32 host_mpts; /* MR number:1M */ 23d9ce1917SZiyang Xuan }; 24d9ce1917SZiyang Xuan 25d9ce1917SZiyang Xuan struct nic_service_cap { 26d9ce1917SZiyang Xuan /* PF resources */ 27d9ce1917SZiyang Xuan u16 max_sqs; 28d9ce1917SZiyang Xuan u16 max_rqs; 29d9ce1917SZiyang Xuan 30d9ce1917SZiyang Xuan /* VF resources, VF obtain them through the MailBox mechanism from 31d9ce1917SZiyang Xuan * corresponding PF 32d9ce1917SZiyang Xuan */ 33d9ce1917SZiyang Xuan u16 vf_max_sqs; 34d9ce1917SZiyang Xuan u16 vf_max_rqs; 35d9ce1917SZiyang Xuan 36d9ce1917SZiyang Xuan bool lro_en; /* LRO feature enable bit */ 37d9ce1917SZiyang Xuan u8 lro_sz; /* LRO context space: n*16B */ 38d9ce1917SZiyang Xuan u8 tso_sz; /* TSO context space: n*16B */ 39d9ce1917SZiyang Xuan }; 40d9ce1917SZiyang Xuan 41d9ce1917SZiyang Xuan /* service type relates define */ 42d9ce1917SZiyang Xuan enum cfg_svc_type_en { 43d9ce1917SZiyang Xuan CFG_SVC_NIC_BIT0 = (1 << 0), 44d9ce1917SZiyang Xuan }; 45d9ce1917SZiyang Xuan 46d9ce1917SZiyang Xuan /* device capability */ 47d9ce1917SZiyang Xuan struct service_cap { 48d9ce1917SZiyang Xuan enum cfg_svc_type_en chip_svc_type; /* HW supported service type */ 49d9ce1917SZiyang Xuan 50d9ce1917SZiyang Xuan /* Host global resources */ 51d9ce1917SZiyang Xuan u16 host_total_function; 52d9ce1917SZiyang Xuan u8 host_oq_id_mask_val; 53d9ce1917SZiyang Xuan u8 host_id; 54d9ce1917SZiyang Xuan u8 ep_id; 55d9ce1917SZiyang Xuan u8 intr_chip_en; 56d9ce1917SZiyang Xuan u8 max_cos_id; /* PF/VF's max cos id */ 57*d4002360SXiaoyun Wang u8 valid_cos_bitmap; 58d9ce1917SZiyang Xuan u8 er_id; /* PF/VF's ER */ 59d9ce1917SZiyang Xuan u8 port_id; /* PF/VF's physical port */ 60d9ce1917SZiyang Xuan u8 max_vf; /* max VF number that PF supported */ 61d9ce1917SZiyang Xuan bool sf_en; /* stateful business status */ 62d9ce1917SZiyang Xuan u16 max_sqs; 63d9ce1917SZiyang Xuan u16 max_rqs; 64d9ce1917SZiyang Xuan 65d9ce1917SZiyang Xuan u32 pf_num; 66d9ce1917SZiyang Xuan u32 pf_id_start; 67d9ce1917SZiyang Xuan u32 vf_num; 68d9ce1917SZiyang Xuan u32 vf_id_start; 69d9ce1917SZiyang Xuan 70d9ce1917SZiyang Xuan struct host_shared_resource_cap shared_res_cap; /* shared capability */ 71d9ce1917SZiyang Xuan struct nic_service_cap nic_cap; /* NIC capability */ 72d9ce1917SZiyang Xuan }; 73d9ce1917SZiyang Xuan 74d9ce1917SZiyang Xuan struct cfg_mgmt_info { 75d9ce1917SZiyang Xuan struct hinic_hwdev *hwdev; 76d9ce1917SZiyang Xuan struct service_cap svc_cap; 77d9ce1917SZiyang Xuan }; 78d9ce1917SZiyang Xuan 79d9ce1917SZiyang Xuan struct hinic_dev_cap { 80d9ce1917SZiyang Xuan struct hinic_mgmt_msg_head mgmt_msg_head; 81d9ce1917SZiyang Xuan 82d9ce1917SZiyang Xuan /* Public resource */ 83d9ce1917SZiyang Xuan u8 sf_svc_attr; 84d9ce1917SZiyang Xuan u8 host_id; 85d9ce1917SZiyang Xuan u8 sf_en_pf; 86d9ce1917SZiyang Xuan u8 sf_en_vf; 87d9ce1917SZiyang Xuan 88d9ce1917SZiyang Xuan u8 ep_id; 89d9ce1917SZiyang Xuan u8 intr_type; 90d9ce1917SZiyang Xuan u8 max_cos_id; 91d9ce1917SZiyang Xuan u8 er_id; 92d9ce1917SZiyang Xuan u8 port_id; 93d9ce1917SZiyang Xuan u8 max_vf; 94d9ce1917SZiyang Xuan u16 svc_cap_en; 95d9ce1917SZiyang Xuan u16 host_total_func; 96d9ce1917SZiyang Xuan u8 host_oq_id_mask_val; 97d9ce1917SZiyang Xuan u8 max_vf_cos_id; 98d9ce1917SZiyang Xuan 99d9ce1917SZiyang Xuan u32 max_conn_num; 100d9ce1917SZiyang Xuan u16 max_stick2cache_num; 101d9ce1917SZiyang Xuan u16 max_bfilter_start_addr; 102d9ce1917SZiyang Xuan u16 bfilter_len; 103d9ce1917SZiyang Xuan u16 hash_bucket_num; 104d9ce1917SZiyang Xuan u8 cfg_file_ver; 105d9ce1917SZiyang Xuan u8 net_port_mode; 106d9ce1917SZiyang Xuan u8 valid_cos_bitmap; /* every bit indicate cos is valid */ 107d9ce1917SZiyang Xuan u8 rsvd1; 108d9ce1917SZiyang Xuan u32 pf_num; 109d9ce1917SZiyang Xuan u32 pf_id_start; 110d9ce1917SZiyang Xuan u32 vf_num; 111d9ce1917SZiyang Xuan u32 vf_id_start; 112d9ce1917SZiyang Xuan 113d9ce1917SZiyang Xuan /* shared resource */ 114d9ce1917SZiyang Xuan u32 host_pctx_num; 115d9ce1917SZiyang Xuan u8 host_sf_en; 116d9ce1917SZiyang Xuan u8 rsvd2[3]; 117d9ce1917SZiyang Xuan u32 host_ccxt_num; 118d9ce1917SZiyang Xuan u32 host_scq_num; 119d9ce1917SZiyang Xuan u32 host_srq_num; 120d9ce1917SZiyang Xuan u32 host_mpt_num; 121d9ce1917SZiyang Xuan 122d9ce1917SZiyang Xuan /* l2nic */ 123d9ce1917SZiyang Xuan u16 nic_max_sq; 124d9ce1917SZiyang Xuan u16 nic_max_rq; 125d9ce1917SZiyang Xuan u16 nic_vf_max_sq; 126d9ce1917SZiyang Xuan u16 nic_vf_max_rq; 127d9ce1917SZiyang Xuan u8 nic_lro_en; 128d9ce1917SZiyang Xuan u8 nic_lro_sz; 129d9ce1917SZiyang Xuan u8 nic_tso_sz; 130d9ce1917SZiyang Xuan u8 rsvd3; 131d9ce1917SZiyang Xuan 132d9ce1917SZiyang Xuan u32 rsvd4[50]; 133d9ce1917SZiyang Xuan }; 134d9ce1917SZiyang Xuan 135d9ce1917SZiyang Xuan /* Obtain service_cap.nic_cap.dev_nic_cap.max_sqs */ 136d9ce1917SZiyang Xuan u16 hinic_func_max_qnum(void *hwdev); 137d9ce1917SZiyang Xuan 138d9ce1917SZiyang Xuan int init_cfg_mgmt(struct hinic_hwdev *hwdev); 139d9ce1917SZiyang Xuan 140d9ce1917SZiyang Xuan void free_cfg_mgmt(struct hinic_hwdev *hwdev); 141d9ce1917SZiyang Xuan 142d9ce1917SZiyang Xuan int hinic_init_capability(struct hinic_hwdev *hwdev); 143d9ce1917SZiyang Xuan 144d9ce1917SZiyang Xuan bool hinic_support_nic(struct hinic_hwdev *hwdev, struct nic_service_cap *cap); 145d9ce1917SZiyang Xuan 146d9ce1917SZiyang Xuan #endif /* _HINIC_PMD_CFG_H_ */ 147