xref: /OK3568_Linux_fs/kernel/include/linux/qed/qed_fcoe_if.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2*4882a593Smuzhiyun /* Copyright (c) 2019-2020 Marvell International Ltd. */
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef _QED_FCOE_IF_H
5*4882a593Smuzhiyun #define _QED_FCOE_IF_H
6*4882a593Smuzhiyun #include <linux/types.h>
7*4882a593Smuzhiyun #include <linux/qed/qed_if.h>
8*4882a593Smuzhiyun struct qed_fcoe_stats {
9*4882a593Smuzhiyun 	u64 fcoe_rx_byte_cnt;
10*4882a593Smuzhiyun 	u64 fcoe_rx_data_pkt_cnt;
11*4882a593Smuzhiyun 	u64 fcoe_rx_xfer_pkt_cnt;
12*4882a593Smuzhiyun 	u64 fcoe_rx_other_pkt_cnt;
13*4882a593Smuzhiyun 	u32 fcoe_silent_drop_pkt_cmdq_full_cnt;
14*4882a593Smuzhiyun 	u32 fcoe_silent_drop_pkt_rq_full_cnt;
15*4882a593Smuzhiyun 	u32 fcoe_silent_drop_pkt_crc_error_cnt;
16*4882a593Smuzhiyun 	u32 fcoe_silent_drop_pkt_task_invalid_cnt;
17*4882a593Smuzhiyun 	u32 fcoe_silent_drop_total_pkt_cnt;
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun 	u64 fcoe_tx_byte_cnt;
20*4882a593Smuzhiyun 	u64 fcoe_tx_data_pkt_cnt;
21*4882a593Smuzhiyun 	u64 fcoe_tx_xfer_pkt_cnt;
22*4882a593Smuzhiyun 	u64 fcoe_tx_other_pkt_cnt;
23*4882a593Smuzhiyun };
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun struct qed_dev_fcoe_info {
26*4882a593Smuzhiyun 	struct qed_dev_info common;
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 	void __iomem *primary_dbq_rq_addr;
29*4882a593Smuzhiyun 	void __iomem *secondary_bdq_rq_addr;
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun 	u64 wwpn;
32*4882a593Smuzhiyun 	u64 wwnn;
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun 	u8 num_cqs;
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun struct qed_fcoe_params_offload {
38*4882a593Smuzhiyun 	dma_addr_t sq_pbl_addr;
39*4882a593Smuzhiyun 	dma_addr_t sq_curr_page_addr;
40*4882a593Smuzhiyun 	dma_addr_t sq_next_page_addr;
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun 	u8 src_mac[ETH_ALEN];
43*4882a593Smuzhiyun 	u8 dst_mac[ETH_ALEN];
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun 	u16 tx_max_fc_pay_len;
46*4882a593Smuzhiyun 	u16 e_d_tov_timer_val;
47*4882a593Smuzhiyun 	u16 rec_tov_timer_val;
48*4882a593Smuzhiyun 	u16 rx_max_fc_pay_len;
49*4882a593Smuzhiyun 	u16 vlan_tag;
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 	struct fc_addr_nw s_id;
52*4882a593Smuzhiyun 	u8 max_conc_seqs_c3;
53*4882a593Smuzhiyun 	struct fc_addr_nw d_id;
54*4882a593Smuzhiyun 	u8 flags;
55*4882a593Smuzhiyun 	u8 def_q_idx;
56*4882a593Smuzhiyun };
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #define MAX_TID_BLOCKS_FCOE (512)
59*4882a593Smuzhiyun struct qed_fcoe_tid {
60*4882a593Smuzhiyun 	u32 size;		/* In bytes per task */
61*4882a593Smuzhiyun 	u32 num_tids_per_block;
62*4882a593Smuzhiyun 	u8 *blocks[MAX_TID_BLOCKS_FCOE];
63*4882a593Smuzhiyun };
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun struct qed_fcoe_cb_ops {
66*4882a593Smuzhiyun 	struct qed_common_cb_ops common;
67*4882a593Smuzhiyun 	 u32 (*get_login_failures)(void *cookie);
68*4882a593Smuzhiyun };
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun void qed_fcoe_set_pf_params(struct qed_dev *cdev,
71*4882a593Smuzhiyun 			    struct qed_fcoe_pf_params *params);
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /**
74*4882a593Smuzhiyun  * struct qed_fcoe_ops - qed FCoE operations.
75*4882a593Smuzhiyun  * @common:		common operations pointer
76*4882a593Smuzhiyun  * @fill_dev_info:	fills FCoE specific information
77*4882a593Smuzhiyun  *			@param cdev
78*4882a593Smuzhiyun  *			@param info
79*4882a593Smuzhiyun  *			@return 0 on sucesss, otherwise error value.
80*4882a593Smuzhiyun  * @register_ops:	register FCoE operations
81*4882a593Smuzhiyun  *			@param cdev
82*4882a593Smuzhiyun  *			@param ops - specified using qed_iscsi_cb_ops
83*4882a593Smuzhiyun  *			@param cookie - driver private
84*4882a593Smuzhiyun  * @ll2:		light L2 operations pointer
85*4882a593Smuzhiyun  * @start:		fcoe in FW
86*4882a593Smuzhiyun  *			@param cdev
87*4882a593Smuzhiyun  *			@param tasks - qed will fill information about tasks
88*4882a593Smuzhiyun  *			return 0 on success, otherwise error value.
89*4882a593Smuzhiyun  * @stop:		stops fcoe in FW
90*4882a593Smuzhiyun  *			@param cdev
91*4882a593Smuzhiyun  *			return 0 on success, otherwise error value.
92*4882a593Smuzhiyun  * @acquire_conn:	acquire a new fcoe connection
93*4882a593Smuzhiyun  *			@param cdev
94*4882a593Smuzhiyun  *			@param handle - qed will fill handle that should be
95*4882a593Smuzhiyun  *				used henceforth as identifier of the
96*4882a593Smuzhiyun  *				connection.
97*4882a593Smuzhiyun  *			@param p_doorbell - qed will fill the address of the
98*4882a593Smuzhiyun  *				doorbell.
99*4882a593Smuzhiyun  *			return 0 on sucesss, otherwise error value.
100*4882a593Smuzhiyun  * @release_conn:	release a previously acquired fcoe connection
101*4882a593Smuzhiyun  *			@param cdev
102*4882a593Smuzhiyun  *			@param handle - the connection handle.
103*4882a593Smuzhiyun  *			return 0 on success, otherwise error value.
104*4882a593Smuzhiyun  * @offload_conn:	configures an offloaded connection
105*4882a593Smuzhiyun  *			@param cdev
106*4882a593Smuzhiyun  *			@param handle - the connection handle.
107*4882a593Smuzhiyun  *			@param conn_info - the configuration to use for the
108*4882a593Smuzhiyun  *				offload.
109*4882a593Smuzhiyun  *			return 0 on success, otherwise error value.
110*4882a593Smuzhiyun  * @destroy_conn:	stops an offloaded connection
111*4882a593Smuzhiyun  *			@param cdev
112*4882a593Smuzhiyun  *			@param handle - the connection handle.
113*4882a593Smuzhiyun  *			@param terminate_params
114*4882a593Smuzhiyun  *			return 0 on success, otherwise error value.
115*4882a593Smuzhiyun  * @get_stats:		gets FCoE related statistics
116*4882a593Smuzhiyun  *			@param cdev
117*4882a593Smuzhiyun  *			@param stats - pointer to struck that would be filled
118*4882a593Smuzhiyun  *				we stats
119*4882a593Smuzhiyun  *			return 0 on success, error otherwise.
120*4882a593Smuzhiyun  */
121*4882a593Smuzhiyun struct qed_fcoe_ops {
122*4882a593Smuzhiyun 	const struct qed_common_ops *common;
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun 	int (*fill_dev_info)(struct qed_dev *cdev,
125*4882a593Smuzhiyun 			     struct qed_dev_fcoe_info *info);
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun 	void (*register_ops)(struct qed_dev *cdev,
128*4882a593Smuzhiyun 			     struct qed_fcoe_cb_ops *ops, void *cookie);
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun 	const struct qed_ll2_ops *ll2;
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun 	int (*start)(struct qed_dev *cdev, struct qed_fcoe_tid *tasks);
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun 	int (*stop)(struct qed_dev *cdev);
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun 	int (*acquire_conn)(struct qed_dev *cdev,
137*4882a593Smuzhiyun 			    u32 *handle,
138*4882a593Smuzhiyun 			    u32 *fw_cid, void __iomem **p_doorbell);
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun 	int (*release_conn)(struct qed_dev *cdev, u32 handle);
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun 	int (*offload_conn)(struct qed_dev *cdev,
143*4882a593Smuzhiyun 			    u32 handle,
144*4882a593Smuzhiyun 			    struct qed_fcoe_params_offload *conn_info);
145*4882a593Smuzhiyun 	int (*destroy_conn)(struct qed_dev *cdev,
146*4882a593Smuzhiyun 			    u32 handle, dma_addr_t terminate_params);
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun 	int (*get_stats)(struct qed_dev *cdev, struct qed_fcoe_stats *stats);
149*4882a593Smuzhiyun };
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun const struct qed_fcoe_ops *qed_get_fcoe_ops(void);
152*4882a593Smuzhiyun void qed_put_fcoe_ops(void);
153*4882a593Smuzhiyun #endif
154