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