1*14b24e2bSVaishali Kulkarni /*
2*14b24e2bSVaishali Kulkarni * CDDL HEADER START
3*14b24e2bSVaishali Kulkarni *
4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the
5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1,  (the "License").
6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
7*14b24e2bSVaishali Kulkarni *
8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0.
10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions
11*14b24e2bSVaishali Kulkarni * and limitations under the License.
12*14b24e2bSVaishali Kulkarni *
13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each
14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the
16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying
17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner]
18*14b24e2bSVaishali Kulkarni *
19*14b24e2bSVaishali Kulkarni * CDDL HEADER END
20*14b24e2bSVaishali Kulkarni */
21*14b24e2bSVaishali Kulkarni 
22*14b24e2bSVaishali Kulkarni /*
23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc.
24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development
25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1,  (the "License").
26*14b24e2bSVaishali Kulkarni 
27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License.
28*14b24e2bSVaishali Kulkarni 
29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available
30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0
31*14b24e2bSVaishali Kulkarni 
32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and
33*14b24e2bSVaishali Kulkarni * limitations under the License.
34*14b24e2bSVaishali Kulkarni */
35*14b24e2bSVaishali Kulkarni 
36*14b24e2bSVaishali Kulkarni #ifndef __ECORE_FCOE_API_H__
37*14b24e2bSVaishali Kulkarni #define __ECORE_FCOE_API_H__
38*14b24e2bSVaishali Kulkarni 
39*14b24e2bSVaishali Kulkarni #include "ecore_sp_api.h"
40*14b24e2bSVaishali Kulkarni 
41*14b24e2bSVaishali Kulkarni struct ecore_fcoe_conn {
42*14b24e2bSVaishali Kulkarni 	osal_list_entry_t	list_entry;
43*14b24e2bSVaishali Kulkarni 	bool			free_on_delete;
44*14b24e2bSVaishali Kulkarni 
45*14b24e2bSVaishali Kulkarni 	u16			conn_id;
46*14b24e2bSVaishali Kulkarni 	u32			icid;
47*14b24e2bSVaishali Kulkarni 	u32			fw_cid;
48*14b24e2bSVaishali Kulkarni 	u8			layer_code;
49*14b24e2bSVaishali Kulkarni 
50*14b24e2bSVaishali Kulkarni 	dma_addr_t		sq_pbl_addr;
51*14b24e2bSVaishali Kulkarni 	dma_addr_t		sq_curr_page_addr;
52*14b24e2bSVaishali Kulkarni 	dma_addr_t		sq_next_page_addr;
53*14b24e2bSVaishali Kulkarni 	dma_addr_t		xferq_pbl_addr;
54*14b24e2bSVaishali Kulkarni 	void			*xferq_pbl_addr_virt_addr;
55*14b24e2bSVaishali Kulkarni 	dma_addr_t		xferq_addr[4];
56*14b24e2bSVaishali Kulkarni 	void			*xferq_addr_virt_addr[4];
57*14b24e2bSVaishali Kulkarni 	dma_addr_t		confq_pbl_addr;
58*14b24e2bSVaishali Kulkarni 	void			*confq_pbl_addr_virt_addr;
59*14b24e2bSVaishali Kulkarni 	dma_addr_t		confq_addr[2];
60*14b24e2bSVaishali Kulkarni 	void			*confq_addr_virt_addr[2];
61*14b24e2bSVaishali Kulkarni 
62*14b24e2bSVaishali Kulkarni 	dma_addr_t		terminate_params;
63*14b24e2bSVaishali Kulkarni 
64*14b24e2bSVaishali Kulkarni 	u16			dst_mac_addr_lo;
65*14b24e2bSVaishali Kulkarni 	u16			dst_mac_addr_mid;
66*14b24e2bSVaishali Kulkarni 	u16			dst_mac_addr_hi;
67*14b24e2bSVaishali Kulkarni 	u16			src_mac_addr_lo;
68*14b24e2bSVaishali Kulkarni 	u16			src_mac_addr_mid;
69*14b24e2bSVaishali Kulkarni 	u16			src_mac_addr_hi;
70*14b24e2bSVaishali Kulkarni 
71*14b24e2bSVaishali Kulkarni 	u16			tx_max_fc_pay_len;
72*14b24e2bSVaishali Kulkarni 	u16			e_d_tov_timer_val;
73*14b24e2bSVaishali Kulkarni 	u16			rec_tov_timer_val;
74*14b24e2bSVaishali Kulkarni 	u16			rx_max_fc_pay_len;
75*14b24e2bSVaishali Kulkarni 	u16			vlan_tag;
76*14b24e2bSVaishali Kulkarni 	u16			physical_q0;
77*14b24e2bSVaishali Kulkarni 
78*14b24e2bSVaishali Kulkarni 	struct fc_addr_nw	s_id;
79*14b24e2bSVaishali Kulkarni 	u8 max_conc_seqs_c3;
80*14b24e2bSVaishali Kulkarni 	struct fc_addr_nw	d_id;
81*14b24e2bSVaishali Kulkarni 	u8			flags;
82*14b24e2bSVaishali Kulkarni 	u8			def_q_idx;
83*14b24e2bSVaishali Kulkarni };
84*14b24e2bSVaishali Kulkarni 
85*14b24e2bSVaishali Kulkarni #ifndef __EXTRACT__LINUX__
86*14b24e2bSVaishali Kulkarni struct ecore_fcoe_stats {
87*14b24e2bSVaishali Kulkarni 	u64	fcoe_rx_byte_cnt;
88*14b24e2bSVaishali Kulkarni 	u64	fcoe_rx_data_pkt_cnt;
89*14b24e2bSVaishali Kulkarni 	u64	fcoe_rx_xfer_pkt_cnt;
90*14b24e2bSVaishali Kulkarni 	u64	fcoe_rx_other_pkt_cnt;
91*14b24e2bSVaishali Kulkarni 	u32	fcoe_silent_drop_pkt_cmdq_full_cnt;
92*14b24e2bSVaishali Kulkarni 	u32	fcoe_silent_drop_pkt_rq_full_cnt;
93*14b24e2bSVaishali Kulkarni 	u32	fcoe_silent_drop_pkt_crc_error_cnt;
94*14b24e2bSVaishali Kulkarni 	u32	fcoe_silent_drop_pkt_task_invalid_cnt;
95*14b24e2bSVaishali Kulkarni 	u32	fcoe_silent_drop_total_pkt_cnt;
96*14b24e2bSVaishali Kulkarni 
97*14b24e2bSVaishali Kulkarni 	u64	fcoe_tx_byte_cnt;
98*14b24e2bSVaishali Kulkarni 	u64	fcoe_tx_data_pkt_cnt;
99*14b24e2bSVaishali Kulkarni 	u64	fcoe_tx_xfer_pkt_cnt;
100*14b24e2bSVaishali Kulkarni 	u64	fcoe_tx_other_pkt_cnt;
101*14b24e2bSVaishali Kulkarni };
102*14b24e2bSVaishali Kulkarni #endif
103*14b24e2bSVaishali Kulkarni 
104*14b24e2bSVaishali Kulkarni enum _ecore_status_t
105*14b24e2bSVaishali Kulkarni ecore_fcoe_acquire_connection(struct ecore_hwfn *p_hwfn,
106*14b24e2bSVaishali Kulkarni 			      struct ecore_fcoe_conn *p_in_conn,
107*14b24e2bSVaishali Kulkarni 			      struct ecore_fcoe_conn **p_out_conn);
108*14b24e2bSVaishali Kulkarni 
109*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_fcoe_get_db_addr(struct ecore_hwfn *p_hwfn,
110*14b24e2bSVaishali Kulkarni 					u32 cid);
111*14b24e2bSVaishali Kulkarni 
112*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_fcoe_get_global_cmdq_cons(struct ecore_hwfn *p_hwfn,
113*14b24e2bSVaishali Kulkarni 						 u8 relative_q_id);
114*14b24e2bSVaishali Kulkarni 
115*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_fcoe_get_primary_bdq_prod(struct ecore_hwfn *p_hwfn,
116*14b24e2bSVaishali Kulkarni 						  u8 bdq_id);
117*14b24e2bSVaishali Kulkarni 
118*14b24e2bSVaishali Kulkarni void OSAL_IOMEM *ecore_fcoe_get_secondary_bdq_prod(struct ecore_hwfn *p_hwfn,
119*14b24e2bSVaishali Kulkarni 						    u8 bdq_id);
120*14b24e2bSVaishali Kulkarni 
121*14b24e2bSVaishali Kulkarni enum _ecore_status_t
122*14b24e2bSVaishali Kulkarni ecore_fcoe_offload_connection(struct ecore_hwfn	*p_hwfn,
123*14b24e2bSVaishali Kulkarni 			      struct ecore_fcoe_conn *p_conn);
124*14b24e2bSVaishali Kulkarni 
125*14b24e2bSVaishali Kulkarni enum _ecore_status_t
126*14b24e2bSVaishali Kulkarni ecore_fcoe_terminate_connection(struct ecore_hwfn *p_hwfn,
127*14b24e2bSVaishali Kulkarni 				struct ecore_fcoe_conn *p_conn);
128*14b24e2bSVaishali Kulkarni 
129*14b24e2bSVaishali Kulkarni void ecore_fcoe_release_connection(struct ecore_hwfn *p_hwfn,
130*14b24e2bSVaishali Kulkarni 				   struct ecore_fcoe_conn *p_conn);
131*14b24e2bSVaishali Kulkarni 
132*14b24e2bSVaishali Kulkarni enum _ecore_status_t
133*14b24e2bSVaishali Kulkarni ecore_sp_fcoe_func_start(struct ecore_hwfn *p_hwfn,
134*14b24e2bSVaishali Kulkarni 			 enum spq_mode comp_mode,
135*14b24e2bSVaishali Kulkarni 			 struct ecore_spq_comp_cb *p_comp_addr);
136*14b24e2bSVaishali Kulkarni 
137*14b24e2bSVaishali Kulkarni enum _ecore_status_t
138*14b24e2bSVaishali Kulkarni ecore_sp_fcoe_func_stop(struct ecore_hwfn *p_hwfn,
139*14b24e2bSVaishali Kulkarni 			enum spq_mode comp_mode,
140*14b24e2bSVaishali Kulkarni 			struct ecore_spq_comp_cb *p_comp_addr);
141*14b24e2bSVaishali Kulkarni 
142*14b24e2bSVaishali Kulkarni enum _ecore_status_t
143*14b24e2bSVaishali Kulkarni ecore_fcoe_get_stats(struct ecore_hwfn *p_hwfn,
144*14b24e2bSVaishali Kulkarni 		     struct ecore_fcoe_stats *stats);
145*14b24e2bSVaishali Kulkarni 
146*14b24e2bSVaishali Kulkarni #endif
147