xref: /f-stack/dpdk/drivers/net/ice/ice_dcf.h (revision 2d9fd380)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2020 Intel Corporation
3  */
4 
5 #ifndef _ICE_DCF_H_
6 #define _ICE_DCF_H_
7 
8 #include <rte_ethdev_driver.h>
9 
10 #include <iavf_prototype.h>
11 #include <iavf_adminq_cmd.h>
12 #include <iavf_type.h>
13 
14 #include "base/ice_type.h"
15 #include "ice_logs.h"
16 
17 struct dcf_virtchnl_cmd {
18 	TAILQ_ENTRY(dcf_virtchnl_cmd) next;
19 
20 	enum virtchnl_ops v_op;
21 	enum iavf_status v_ret;
22 
23 	uint16_t req_msglen;
24 	uint8_t *req_msg;
25 
26 	uint16_t rsp_msglen;
27 	uint16_t rsp_buflen;
28 	uint8_t *rsp_msgbuf;
29 
30 	volatile int pending;
31 };
32 
33 struct ice_dcf_hw {
34 	struct iavf_hw avf;
35 
36 	rte_spinlock_t vc_cmd_send_lock;
37 	rte_spinlock_t vc_cmd_queue_lock;
38 	TAILQ_HEAD(, dcf_virtchnl_cmd) vc_cmd_queue;
39 	void (*vc_event_msg_cb)(struct ice_dcf_hw *dcf_hw,
40 				uint8_t *msg, uint16_t msglen);
41 
42 	uint8_t *arq_buf;
43 
44 	uint16_t num_vfs;
45 	uint16_t *vf_vsi_map;
46 	uint16_t pf_vsi_id;
47 
48 	struct virtchnl_version_info virtchnl_version;
49 	struct virtchnl_vf_resource *vf_res; /* VF resource */
50 	struct virtchnl_vsi_resource *vsi_res; /* LAN VSI */
51 	uint16_t vsi_id;
52 
53 	struct rte_eth_dev *eth_dev;
54 	uint8_t *rss_lut;
55 	uint8_t *rss_key;
56 	uint64_t supported_rxdid;
57 	uint16_t num_queue_pairs;
58 
59 	uint16_t msix_base;
60 	uint16_t nb_msix;
61 	uint16_t rxq_map[16];
62 	struct virtchnl_eth_stats eth_stats_offset;
63 };
64 
65 int ice_dcf_execute_virtchnl_cmd(struct ice_dcf_hw *hw,
66 				 struct dcf_virtchnl_cmd *cmd);
67 int ice_dcf_send_aq_cmd(void *dcf_hw, struct ice_aq_desc *desc,
68 			void *buf, uint16_t buf_size);
69 int ice_dcf_handle_vsi_update_event(struct ice_dcf_hw *hw);
70 int ice_dcf_init_hw(struct rte_eth_dev *eth_dev, struct ice_dcf_hw *hw);
71 void ice_dcf_uninit_hw(struct rte_eth_dev *eth_dev, struct ice_dcf_hw *hw);
72 int ice_dcf_init_rss(struct ice_dcf_hw *hw);
73 int ice_dcf_configure_queues(struct ice_dcf_hw *hw);
74 int ice_dcf_config_irq_map(struct ice_dcf_hw *hw);
75 int ice_dcf_switch_queue(struct ice_dcf_hw *hw, uint16_t qid, bool rx, bool on);
76 int ice_dcf_disable_queues(struct ice_dcf_hw *hw);
77 int ice_dcf_query_stats(struct ice_dcf_hw *hw,
78 			struct virtchnl_eth_stats *pstats);
79 int ice_dcf_add_del_all_mac_addr(struct ice_dcf_hw *hw, bool add);
80 
81 #endif /* _ICE_DCF_H_ */
82