xref: /freebsd/sys/dev/qlnx/qlnxe/qlnx_rdma.c (revision 9370f49ad1c4625cd73c4d84d3e42ed3e20fabbf)
1fa790ea9SDavid C Somayajulu /*
2fa790ea9SDavid C Somayajulu  * Copyright (c) 2018-2019 Cavium, Inc.
3fa790ea9SDavid C Somayajulu  * All rights reserved.
4fa790ea9SDavid C Somayajulu  *
5fa790ea9SDavid C Somayajulu  *  Redistribution and use in source and binary forms, with or without
6fa790ea9SDavid C Somayajulu  *  modification, are permitted provided that the following conditions
7fa790ea9SDavid C Somayajulu  *  are met:
8fa790ea9SDavid C Somayajulu  *
9fa790ea9SDavid C Somayajulu  *  1. Redistributions of source code must retain the above copyright
10fa790ea9SDavid C Somayajulu  *     notice, this list of conditions and the following disclaimer.
11fa790ea9SDavid C Somayajulu  *  2. Redistributions in binary form must reproduce the above copyright
12fa790ea9SDavid C Somayajulu  *     notice, this list of conditions and the following disclaimer in the
13fa790ea9SDavid C Somayajulu  *     documentation and/or other materials provided with the distribution.
14fa790ea9SDavid C Somayajulu  *
15fa790ea9SDavid C Somayajulu  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16fa790ea9SDavid C Somayajulu  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17fa790ea9SDavid C Somayajulu  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18fa790ea9SDavid C Somayajulu  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19fa790ea9SDavid C Somayajulu  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20fa790ea9SDavid C Somayajulu  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21fa790ea9SDavid C Somayajulu  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22fa790ea9SDavid C Somayajulu  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23fa790ea9SDavid C Somayajulu  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24fa790ea9SDavid C Somayajulu  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25fa790ea9SDavid C Somayajulu  *  POSSIBILITY OF SUCH DAMAGE.
26fa790ea9SDavid C Somayajulu  */
27fa790ea9SDavid C Somayajulu 
28fa790ea9SDavid C Somayajulu /*
29fa790ea9SDavid C Somayajulu  * File : qlnx_rdma.c
30fa790ea9SDavid C Somayajulu  * Author: David C Somayajulu
31fa790ea9SDavid C Somayajulu  */
32fa790ea9SDavid C Somayajulu #include <sys/cdefs.h>
33fa790ea9SDavid C Somayajulu #include "qlnx_os.h"
34fa790ea9SDavid C Somayajulu #include "bcm_osal.h"
35fa790ea9SDavid C Somayajulu 
36fa790ea9SDavid C Somayajulu #include "reg_addr.h"
37fa790ea9SDavid C Somayajulu #include "ecore_gtt_reg_addr.h"
38fa790ea9SDavid C Somayajulu #include "ecore.h"
39fa790ea9SDavid C Somayajulu #include "ecore_chain.h"
40fa790ea9SDavid C Somayajulu #include "ecore_status.h"
41fa790ea9SDavid C Somayajulu #include "ecore_hw.h"
42fa790ea9SDavid C Somayajulu #include "ecore_rt_defs.h"
43fa790ea9SDavid C Somayajulu #include "ecore_init_ops.h"
44fa790ea9SDavid C Somayajulu #include "ecore_int.h"
45fa790ea9SDavid C Somayajulu #include "ecore_cxt.h"
46fa790ea9SDavid C Somayajulu #include "ecore_spq.h"
47fa790ea9SDavid C Somayajulu #include "ecore_init_fw_funcs.h"
48fa790ea9SDavid C Somayajulu #include "ecore_sp_commands.h"
49fa790ea9SDavid C Somayajulu #include "ecore_dev_api.h"
50fa790ea9SDavid C Somayajulu #include "ecore_l2_api.h"
51fa790ea9SDavid C Somayajulu #ifdef CONFIG_ECORE_SRIOV
52fa790ea9SDavid C Somayajulu #include "ecore_sriov.h"
53fa790ea9SDavid C Somayajulu #include "ecore_vf.h"
54fa790ea9SDavid C Somayajulu #endif
55fa790ea9SDavid C Somayajulu #ifdef CONFIG_ECORE_LL2
56fa790ea9SDavid C Somayajulu #include "ecore_ll2.h"
57fa790ea9SDavid C Somayajulu #endif
58fa790ea9SDavid C Somayajulu #ifdef CONFIG_ECORE_FCOE
59fa790ea9SDavid C Somayajulu #include "ecore_fcoe.h"
60fa790ea9SDavid C Somayajulu #endif
61fa790ea9SDavid C Somayajulu #ifdef CONFIG_ECORE_ISCSI
62fa790ea9SDavid C Somayajulu #include "ecore_iscsi.h"
63fa790ea9SDavid C Somayajulu #endif
64fa790ea9SDavid C Somayajulu #include "ecore_mcp.h"
65fa790ea9SDavid C Somayajulu #include "ecore_hw_defs.h"
66fa790ea9SDavid C Somayajulu #include "mcp_public.h"
67fa790ea9SDavid C Somayajulu 
68fa790ea9SDavid C Somayajulu #ifdef CONFIG_ECORE_RDMA
69fa790ea9SDavid C Somayajulu #include "ecore_rdma.h"
70fa790ea9SDavid C Somayajulu #endif
71fa790ea9SDavid C Somayajulu 
72fa790ea9SDavid C Somayajulu #ifdef CONFIG_ECORE_ROCE
73fa790ea9SDavid C Somayajulu #include "ecore_roce.h"
74fa790ea9SDavid C Somayajulu #endif
75fa790ea9SDavid C Somayajulu 
76fa790ea9SDavid C Somayajulu #ifdef CONFIG_ECORE_IWARP
77fa790ea9SDavid C Somayajulu #include "ecore_iwarp.h"
78fa790ea9SDavid C Somayajulu #endif
79fa790ea9SDavid C Somayajulu 
80fa790ea9SDavid C Somayajulu #include "ecore_iro.h"
81fa790ea9SDavid C Somayajulu #include "nvm_cfg.h"
82fa790ea9SDavid C Somayajulu #include "ecore_dev_api.h"
83fa790ea9SDavid C Somayajulu #include "ecore_dbg_fw_funcs.h"
84fa790ea9SDavid C Somayajulu 
85fa790ea9SDavid C Somayajulu #include "qlnx_ioctl.h"
86fa790ea9SDavid C Somayajulu #include "qlnx_def.h"
87fa790ea9SDavid C Somayajulu #include "qlnx_rdma.h"
88fa790ea9SDavid C Somayajulu #include "qlnx_ver.h"
89fa790ea9SDavid C Somayajulu #include <sys/smp.h>
90fa790ea9SDavid C Somayajulu 
91fa790ea9SDavid C Somayajulu struct mtx qlnx_rdma_dev_lock;
92fa790ea9SDavid C Somayajulu struct qlnx_rdma_if *qlnx_rdma_if = NULL;
93fa790ea9SDavid C Somayajulu 
94fa790ea9SDavid C Somayajulu qlnx_host_t *qlnx_host_list = NULL;
95fa790ea9SDavid C Somayajulu 
96fa790ea9SDavid C Somayajulu void
qlnx_rdma_init(void)97fa790ea9SDavid C Somayajulu qlnx_rdma_init(void)
98fa790ea9SDavid C Somayajulu {
99fa790ea9SDavid C Somayajulu 	if (!mtx_initialized(&qlnx_rdma_dev_lock)) {
100fa790ea9SDavid C Somayajulu 		mtx_init(&qlnx_rdma_dev_lock, "qlnx_rdma_dev_lock", NULL, MTX_DEF);
101fa790ea9SDavid C Somayajulu 	}
102fa790ea9SDavid C Somayajulu 	return;
103fa790ea9SDavid C Somayajulu }
104fa790ea9SDavid C Somayajulu 
105fa790ea9SDavid C Somayajulu void
qlnx_rdma_deinit(void)106fa790ea9SDavid C Somayajulu qlnx_rdma_deinit(void)
107fa790ea9SDavid C Somayajulu {
108fa790ea9SDavid C Somayajulu 	if (mtx_initialized(&qlnx_rdma_dev_lock) && (qlnx_host_list == NULL)) {
109fa790ea9SDavid C Somayajulu 		mtx_destroy(&qlnx_rdma_dev_lock);
110fa790ea9SDavid C Somayajulu 	}
111fa790ea9SDavid C Somayajulu 	return;
112fa790ea9SDavid C Somayajulu }
113fa790ea9SDavid C Somayajulu 
114fa790ea9SDavid C Somayajulu static void
_qlnx_rdma_dev_add(struct qlnx_host * ha)115fa790ea9SDavid C Somayajulu _qlnx_rdma_dev_add(struct qlnx_host *ha)
116fa790ea9SDavid C Somayajulu {
117fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "enter ha = %p qlnx_rdma_if = %p\n", ha, qlnx_rdma_if);
118fa790ea9SDavid C Somayajulu 
119fa790ea9SDavid C Somayajulu 	if (qlnx_rdma_if == NULL)
120fa790ea9SDavid C Somayajulu 		return;
121fa790ea9SDavid C Somayajulu 
122fa790ea9SDavid C Somayajulu 	if (ha->personality != ECORE_PCI_ETH_IWARP &&
123fa790ea9SDavid C Somayajulu 		ha->personality != ECORE_PCI_ETH_ROCE)
124fa790ea9SDavid C Somayajulu 		return;
125fa790ea9SDavid C Somayajulu 
126fa790ea9SDavid C Somayajulu 	ha->qlnx_rdma = qlnx_rdma_if->add(ha);
127fa790ea9SDavid C Somayajulu 
128fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "exit (ha = %p, qlnx_rdma = %p)\n", ha, ha->qlnx_rdma);
129fa790ea9SDavid C Somayajulu 	return;
130fa790ea9SDavid C Somayajulu }
131fa790ea9SDavid C Somayajulu 
132fa790ea9SDavid C Somayajulu void
qlnx_rdma_dev_add(struct qlnx_host * ha)133fa790ea9SDavid C Somayajulu qlnx_rdma_dev_add(struct qlnx_host *ha)
134fa790ea9SDavid C Somayajulu {
135fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "enter ha = %p\n", ha);
136fa790ea9SDavid C Somayajulu 
137fa790ea9SDavid C Somayajulu 	if (ha->personality != ECORE_PCI_ETH_IWARP &&
138fa790ea9SDavid C Somayajulu 			ha->personality != ECORE_PCI_ETH_ROCE)
139fa790ea9SDavid C Somayajulu 		return;
140fa790ea9SDavid C Somayajulu 
141fa790ea9SDavid C Somayajulu 	mtx_lock(&qlnx_rdma_dev_lock);
142fa790ea9SDavid C Somayajulu 
143fa790ea9SDavid C Somayajulu 	if (qlnx_host_list == NULL) {
144fa790ea9SDavid C Somayajulu 		qlnx_host_list = ha;
145fa790ea9SDavid C Somayajulu 		ha->next = NULL;
146fa790ea9SDavid C Somayajulu 	} else {
147fa790ea9SDavid C Somayajulu 		ha->next = qlnx_host_list;
148fa790ea9SDavid C Somayajulu 		qlnx_host_list = ha;
149fa790ea9SDavid C Somayajulu 	}
150fa790ea9SDavid C Somayajulu 
151fa790ea9SDavid C Somayajulu 	mtx_unlock(&qlnx_rdma_dev_lock);
152fa790ea9SDavid C Somayajulu 
153fa790ea9SDavid C Somayajulu 	_qlnx_rdma_dev_add(ha);
154fa790ea9SDavid C Somayajulu 
155fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "exit (%p)\n", ha);
156fa790ea9SDavid C Somayajulu 
157fa790ea9SDavid C Somayajulu 	return;
158fa790ea9SDavid C Somayajulu }
159fa790ea9SDavid C Somayajulu 
160fa790ea9SDavid C Somayajulu static int
_qlnx_rdma_dev_remove(struct qlnx_host * ha)161fa790ea9SDavid C Somayajulu _qlnx_rdma_dev_remove(struct qlnx_host *ha)
162fa790ea9SDavid C Somayajulu {
163fa790ea9SDavid C Somayajulu 	int ret = 0;
164fa790ea9SDavid C Somayajulu 
165fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "enter ha = %p qlnx_rdma_if = %p\n", ha, qlnx_rdma_if);
166fa790ea9SDavid C Somayajulu 
167fa790ea9SDavid C Somayajulu 	if (qlnx_rdma_if == NULL)
168fa790ea9SDavid C Somayajulu 		return (ret);
169fa790ea9SDavid C Somayajulu 
170fa790ea9SDavid C Somayajulu 	if (ha->personality != ECORE_PCI_ETH_IWARP &&
171fa790ea9SDavid C Somayajulu 		ha->personality != ECORE_PCI_ETH_ROCE)
172fa790ea9SDavid C Somayajulu 		return (ret);
173fa790ea9SDavid C Somayajulu 
174fa790ea9SDavid C Somayajulu 	ret = qlnx_rdma_if->remove(ha, ha->qlnx_rdma);
175fa790ea9SDavid C Somayajulu 
176fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "exit ha = %p qlnx_rdma_if = %p\n", ha, qlnx_rdma_if);
177fa790ea9SDavid C Somayajulu 	return (ret);
178fa790ea9SDavid C Somayajulu }
179fa790ea9SDavid C Somayajulu 
180fa790ea9SDavid C Somayajulu int
qlnx_rdma_dev_remove(struct qlnx_host * ha)181fa790ea9SDavid C Somayajulu qlnx_rdma_dev_remove(struct qlnx_host *ha)
182fa790ea9SDavid C Somayajulu {
183fa790ea9SDavid C Somayajulu 	int ret = 0;
184fa790ea9SDavid C Somayajulu 	qlnx_host_t *ha_cur;
185fa790ea9SDavid C Somayajulu 
186fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "enter ha = %p\n", ha);
187fa790ea9SDavid C Somayajulu 
188fa790ea9SDavid C Somayajulu 	if ((qlnx_host_list == NULL) || (ha == NULL))
189fa790ea9SDavid C Somayajulu 		return (ret);
190fa790ea9SDavid C Somayajulu 
191fa790ea9SDavid C Somayajulu 	if (ha->personality != ECORE_PCI_ETH_IWARP &&
192fa790ea9SDavid C Somayajulu 		ha->personality != ECORE_PCI_ETH_ROCE)
193fa790ea9SDavid C Somayajulu 		return (ret);
194fa790ea9SDavid C Somayajulu 
195fa790ea9SDavid C Somayajulu 	ret = _qlnx_rdma_dev_remove(ha);
196fa790ea9SDavid C Somayajulu 
197fa790ea9SDavid C Somayajulu 	if (ret)
198fa790ea9SDavid C Somayajulu 		return (ret);
199fa790ea9SDavid C Somayajulu 
200fa790ea9SDavid C Somayajulu 	mtx_lock(&qlnx_rdma_dev_lock);
201fa790ea9SDavid C Somayajulu 
202fa790ea9SDavid C Somayajulu 	if (qlnx_host_list == ha) {
203fa790ea9SDavid C Somayajulu 		qlnx_host_list = ha->next;
204fa790ea9SDavid C Somayajulu 		ha->next = NULL;
205fa790ea9SDavid C Somayajulu 		mtx_unlock(&qlnx_rdma_dev_lock);
206fa790ea9SDavid C Somayajulu 		QL_DPRINT12(ha, "exit0 ha = %p\n", ha);
207fa790ea9SDavid C Somayajulu 		return (ret);
208fa790ea9SDavid C Somayajulu 	}
209fa790ea9SDavid C Somayajulu 
21091aa93ebSJohn Baldwin 	ha_cur = qlnx_host_list;
211fa790ea9SDavid C Somayajulu 
212fa790ea9SDavid C Somayajulu 	while ((ha_cur != ha) && (ha_cur != NULL)) {
213fa790ea9SDavid C Somayajulu 		ha_cur = ha_cur->next;
214fa790ea9SDavid C Somayajulu 	}
215fa790ea9SDavid C Somayajulu 
216fa790ea9SDavid C Somayajulu 	if (ha_cur == ha) {
217fa790ea9SDavid C Somayajulu 		ha->next = NULL;
218fa790ea9SDavid C Somayajulu 	}
219fa790ea9SDavid C Somayajulu 
220fa790ea9SDavid C Somayajulu 	mtx_unlock(&qlnx_rdma_dev_lock);
221fa790ea9SDavid C Somayajulu 
222fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "exit1 ha = %p\n", ha);
223fa790ea9SDavid C Somayajulu 	return (ret);
224fa790ea9SDavid C Somayajulu }
225fa790ea9SDavid C Somayajulu 
226fa790ea9SDavid C Somayajulu int
qlnx_rdma_register_if(qlnx_rdma_if_t * rdma_if)227fa790ea9SDavid C Somayajulu qlnx_rdma_register_if(qlnx_rdma_if_t *rdma_if)
228fa790ea9SDavid C Somayajulu {
229fa790ea9SDavid C Somayajulu 	qlnx_host_t *ha;
230fa790ea9SDavid C Somayajulu 
231fa790ea9SDavid C Somayajulu 	if (mtx_initialized(&qlnx_rdma_dev_lock)) {
232fa790ea9SDavid C Somayajulu 		mtx_lock(&qlnx_rdma_dev_lock);
233fa790ea9SDavid C Somayajulu 		qlnx_rdma_if = rdma_if;
234fa790ea9SDavid C Somayajulu 
235fa790ea9SDavid C Somayajulu 		ha = qlnx_host_list;
236fa790ea9SDavid C Somayajulu 
237fa790ea9SDavid C Somayajulu 		while (ha != NULL) {
238fa790ea9SDavid C Somayajulu 			_qlnx_rdma_dev_add(ha);
239fa790ea9SDavid C Somayajulu 			ha = ha->next;
240fa790ea9SDavid C Somayajulu 		}
241fa790ea9SDavid C Somayajulu 
242fa790ea9SDavid C Somayajulu 		mtx_unlock(&qlnx_rdma_dev_lock);
243fa790ea9SDavid C Somayajulu 
244fa790ea9SDavid C Somayajulu 		return (0);
245fa790ea9SDavid C Somayajulu 	}
246fa790ea9SDavid C Somayajulu 
247*ee07d712SJohn Baldwin 	return (ENXIO);
248fa790ea9SDavid C Somayajulu }
249fa790ea9SDavid C Somayajulu 
250fa790ea9SDavid C Somayajulu int
qlnx_rdma_deregister_if(qlnx_rdma_if_t * rdma_if)251fa790ea9SDavid C Somayajulu qlnx_rdma_deregister_if(qlnx_rdma_if_t *rdma_if)
252fa790ea9SDavid C Somayajulu {
253fa790ea9SDavid C Somayajulu 	int ret = 0;
254fa790ea9SDavid C Somayajulu 	qlnx_host_t *ha;
255fa790ea9SDavid C Somayajulu 
256fa790ea9SDavid C Somayajulu         if (mtx_initialized(&qlnx_rdma_dev_lock)) {
257fa790ea9SDavid C Somayajulu                 mtx_lock(&qlnx_rdma_dev_lock);
258fa790ea9SDavid C Somayajulu 
259fa790ea9SDavid C Somayajulu 		ha = qlnx_host_list;
260fa790ea9SDavid C Somayajulu 
261fa790ea9SDavid C Somayajulu 		while (ha != NULL) {
262fa790ea9SDavid C Somayajulu                 	mtx_unlock(&qlnx_rdma_dev_lock);
263fa790ea9SDavid C Somayajulu 
264fa790ea9SDavid C Somayajulu 			if (ha->dbg_level & 0xF000)
265fa790ea9SDavid C Somayajulu 				ret = EBUSY;
266fa790ea9SDavid C Somayajulu 			else
267fa790ea9SDavid C Somayajulu 				ret = _qlnx_rdma_dev_remove(ha);
268fa790ea9SDavid C Somayajulu 
269fa790ea9SDavid C Somayajulu         		device_printf(ha->pci_dev, "%s [%d]: ret = 0x%x\n",
270fa790ea9SDavid C Somayajulu 				__func__, __LINE__, ret);
271fa790ea9SDavid C Somayajulu 			if (ret)
272fa790ea9SDavid C Somayajulu 				return (ret);
273fa790ea9SDavid C Somayajulu 
274fa790ea9SDavid C Somayajulu                 	mtx_lock(&qlnx_rdma_dev_lock);
275fa790ea9SDavid C Somayajulu 
276fa790ea9SDavid C Somayajulu 			ha->qlnx_rdma = NULL;
277fa790ea9SDavid C Somayajulu 
278fa790ea9SDavid C Somayajulu 			ha = ha->next;
279fa790ea9SDavid C Somayajulu 		}
280fa790ea9SDavid C Somayajulu 
281fa790ea9SDavid C Somayajulu 		if (!ret)
282fa790ea9SDavid C Somayajulu 			qlnx_rdma_if = NULL;
283fa790ea9SDavid C Somayajulu 
284fa790ea9SDavid C Somayajulu                 mtx_unlock(&qlnx_rdma_dev_lock);
285fa790ea9SDavid C Somayajulu         }
286fa790ea9SDavid C Somayajulu 
287fa790ea9SDavid C Somayajulu         return (ret);
288fa790ea9SDavid C Somayajulu }
289fa790ea9SDavid C Somayajulu 
290fa790ea9SDavid C Somayajulu void
qlnx_rdma_dev_open(struct qlnx_host * ha)291fa790ea9SDavid C Somayajulu qlnx_rdma_dev_open(struct qlnx_host *ha)
292fa790ea9SDavid C Somayajulu {
293fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "enter ha = %p qlnx_rdma_if = %p\n", ha, qlnx_rdma_if);
294fa790ea9SDavid C Somayajulu 
295fa790ea9SDavid C Somayajulu 	if (qlnx_rdma_if == NULL)
296fa790ea9SDavid C Somayajulu 		return;
297fa790ea9SDavid C Somayajulu 
298fa790ea9SDavid C Somayajulu 	if (ha->personality != ECORE_PCI_ETH_IWARP &&
299fa790ea9SDavid C Somayajulu 		ha->personality != ECORE_PCI_ETH_ROCE)
300fa790ea9SDavid C Somayajulu 		return;
301fa790ea9SDavid C Somayajulu 
302fa790ea9SDavid C Somayajulu 	qlnx_rdma_if->notify(ha, ha->qlnx_rdma, QLNX_ETHDEV_UP);
303fa790ea9SDavid C Somayajulu 
304fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "exit ha = %p qlnx_rdma_if = %p\n", ha, qlnx_rdma_if);
305fa790ea9SDavid C Somayajulu 	return;
306fa790ea9SDavid C Somayajulu }
307fa790ea9SDavid C Somayajulu 
308fa790ea9SDavid C Somayajulu void
qlnx_rdma_dev_close(struct qlnx_host * ha)309fa790ea9SDavid C Somayajulu qlnx_rdma_dev_close(struct qlnx_host *ha)
310fa790ea9SDavid C Somayajulu {
311fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "enter ha = %p qlnx_rdma_if = %p\n", ha, qlnx_rdma_if);
312fa790ea9SDavid C Somayajulu 
313fa790ea9SDavid C Somayajulu 	if (qlnx_rdma_if == NULL)
314fa790ea9SDavid C Somayajulu 		return;
315fa790ea9SDavid C Somayajulu 
316fa790ea9SDavid C Somayajulu 	if (ha->personality != ECORE_PCI_ETH_IWARP &&
317fa790ea9SDavid C Somayajulu 		ha->personality != ECORE_PCI_ETH_ROCE)
318fa790ea9SDavid C Somayajulu 		return;
319fa790ea9SDavid C Somayajulu 
320fa790ea9SDavid C Somayajulu 	qlnx_rdma_if->notify(ha, ha->qlnx_rdma, QLNX_ETHDEV_DOWN);
321fa790ea9SDavid C Somayajulu 
322fa790ea9SDavid C Somayajulu 	QL_DPRINT12(ha, "exit ha = %p qlnx_rdma_if = %p\n", ha, qlnx_rdma_if);
323fa790ea9SDavid C Somayajulu 	return;
324fa790ea9SDavid C Somayajulu }
325fa790ea9SDavid C Somayajulu 
326fa790ea9SDavid C Somayajulu int
qlnx_rdma_get_num_irqs(struct qlnx_host * ha)327fa790ea9SDavid C Somayajulu qlnx_rdma_get_num_irqs(struct qlnx_host *ha)
328fa790ea9SDavid C Somayajulu {
329fa790ea9SDavid C Somayajulu         return (QLNX_NUM_CNQ + ecore_rdma_get_sb_id(&ha->cdev.hwfns[0], 0) + 2);
330fa790ea9SDavid C Somayajulu }
331