xref: /dpdk/drivers/net/hinic/base/hinic_pmd_cfg.h (revision d40023605420ca35b027036c134a43ca41c8e74f)
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