2 * QLogic qlcnic NIC Driver
3 * Copyright (c) 2009-2013 QLogic Corporation
5 * See LICENSE.qlcnic for copyright and licensing details.
8 #include <linux/types.h>
10 #include "qlcnic_sriov.h"
13 #define QLCNIC_SRIOV_VF_MAX_MAC 7
14 #define QLC_VF_MIN_TX_RATE 100
15 #define QLC_VF_MAX_TX_RATE 9999
16 #define QLC_MAC_OPCODE_MASK 0x7
17 #define QLC_VF_FLOOD_BIT BIT_16
18 #define QLC_FLOOD_MODE 0x5
19 #define QLC_SRIOV_ALLOW_VLAN0 BIT_19
20 #define QLC_INTR_COAL_TYPE_MASK 0x7
22 static int qlcnic_sriov_pf_get_vport_handle(struct qlcnic_adapter
*, u8
);
24 struct qlcnic_sriov_cmd_handler
{
25 int (*fn
) (struct qlcnic_bc_trans
*, struct qlcnic_cmd_args
*);
28 struct qlcnic_sriov_fw_cmd_handler
{
30 int (*fn
) (struct qlcnic_bc_trans
*, struct qlcnic_cmd_args
*);
33 static int qlcnic_sriov_pf_set_vport_info(struct qlcnic_adapter
*adapter
,
34 struct qlcnic_info
*npar_info
,
37 struct qlcnic_cmd_args cmd
;
40 if (qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_SET_NIC_INFO
))
43 cmd
.req
.arg
[1] = (vport_id
<< 16) | 0x1;
44 cmd
.req
.arg
[2] = npar_info
->bit_offsets
;
45 cmd
.req
.arg
[2] |= npar_info
->min_tx_bw
<< 16;
46 cmd
.req
.arg
[3] = npar_info
->max_tx_bw
| (npar_info
->max_tx_ques
<< 16);
47 cmd
.req
.arg
[4] = npar_info
->max_tx_mac_filters
;
48 cmd
.req
.arg
[4] |= npar_info
->max_rx_mcast_mac_filters
<< 16;
49 cmd
.req
.arg
[5] = npar_info
->max_rx_ucast_mac_filters
|
50 (npar_info
->max_rx_ip_addr
<< 16);
51 cmd
.req
.arg
[6] = npar_info
->max_rx_lro_flow
|
52 (npar_info
->max_rx_status_rings
<< 16);
53 cmd
.req
.arg
[7] = npar_info
->max_rx_buf_rings
|
54 (npar_info
->max_rx_ques
<< 16);
55 cmd
.req
.arg
[8] = npar_info
->max_tx_vlan_keys
;
56 cmd
.req
.arg
[8] |= npar_info
->max_local_ipv6_addrs
<< 16;
57 cmd
.req
.arg
[9] = npar_info
->max_remote_ipv6_addrs
;
59 err
= qlcnic_issue_cmd(adapter
, &cmd
);
61 dev_err(&adapter
->pdev
->dev
,
62 "Failed to set vport info, err=%d\n", err
);
64 qlcnic_free_mbx_args(&cmd
);
68 static int qlcnic_sriov_pf_cal_res_limit(struct qlcnic_adapter
*adapter
,
69 struct qlcnic_info
*info
, u16 func
)
71 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
72 struct qlcnic_resources
*res
= &sriov
->ff_max
;
73 u16 num_macs
= sriov
->num_allowed_vlans
+ 1;
74 int ret
= -EIO
, vpid
, id
;
75 struct qlcnic_vport
*vp
;
76 u32 num_vfs
, max
, temp
;
78 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
, func
);
82 num_vfs
= sriov
->num_vfs
;
84 info
->bit_offsets
= 0xffff;
85 info
->max_tx_ques
= res
->num_tx_queues
/ max
;
87 if (qlcnic_83xx_pf_check(adapter
))
88 num_macs
= QLCNIC_83XX_SRIOV_VF_MAX_MAC
;
90 info
->max_rx_mcast_mac_filters
= res
->num_rx_mcast_mac_filters
;
92 if (adapter
->ahw
->pci_func
== func
) {
94 info
->max_tx_bw
= MAX_BW
;
96 temp
= res
->num_rx_ucast_mac_filters
- num_macs
* num_vfs
;
97 info
->max_rx_ucast_mac_filters
= temp
;
98 temp
= res
->num_tx_mac_filters
- num_macs
* num_vfs
;
99 info
->max_tx_mac_filters
= temp
;
100 temp
= num_macs
* num_vfs
* QLCNIC_SRIOV_VF_MAX_MAC
;
101 temp
= res
->num_rx_mcast_mac_filters
- temp
;
102 info
->max_rx_mcast_mac_filters
= temp
;
104 info
->max_tx_ques
= res
->num_tx_queues
- sriov
->num_vfs
;
106 id
= qlcnic_sriov_func_to_index(adapter
, func
);
109 vp
= sriov
->vf_info
[id
].vp
;
110 info
->min_tx_bw
= vp
->min_tx_bw
;
111 info
->max_tx_bw
= vp
->max_tx_bw
;
113 info
->max_rx_ucast_mac_filters
= num_macs
;
114 info
->max_tx_mac_filters
= num_macs
;
115 temp
= num_macs
* QLCNIC_SRIOV_VF_MAX_MAC
;
116 info
->max_rx_mcast_mac_filters
= temp
;
118 info
->max_tx_ques
= QLCNIC_SINGLE_RING
;
121 info
->max_rx_ip_addr
= res
->num_destip
/ max
;
122 info
->max_rx_status_rings
= res
->num_rx_status_rings
/ max
;
123 info
->max_rx_buf_rings
= res
->num_rx_buf_rings
/ max
;
124 info
->max_rx_ques
= res
->num_rx_queues
/ max
;
125 info
->max_rx_lro_flow
= res
->num_lro_flows_supported
/ max
;
126 info
->max_tx_vlan_keys
= res
->num_txvlan_keys
;
127 info
->max_local_ipv6_addrs
= res
->max_local_ipv6_addrs
;
128 info
->max_remote_ipv6_addrs
= res
->max_remote_ipv6_addrs
;
130 ret
= qlcnic_sriov_pf_set_vport_info(adapter
, info
, vpid
);
137 static void qlcnic_sriov_pf_set_ff_max_res(struct qlcnic_adapter
*adapter
,
138 struct qlcnic_info
*info
)
140 struct qlcnic_resources
*ff_max
= &adapter
->ahw
->sriov
->ff_max
;
142 ff_max
->num_tx_mac_filters
= info
->max_tx_mac_filters
;
143 ff_max
->num_rx_ucast_mac_filters
= info
->max_rx_ucast_mac_filters
;
144 ff_max
->num_rx_mcast_mac_filters
= info
->max_rx_mcast_mac_filters
;
145 ff_max
->num_txvlan_keys
= info
->max_tx_vlan_keys
;
146 ff_max
->num_rx_queues
= info
->max_rx_ques
;
147 ff_max
->num_tx_queues
= info
->max_tx_ques
;
148 ff_max
->num_lro_flows_supported
= info
->max_rx_lro_flow
;
149 ff_max
->num_destip
= info
->max_rx_ip_addr
;
150 ff_max
->num_rx_buf_rings
= info
->max_rx_buf_rings
;
151 ff_max
->num_rx_status_rings
= info
->max_rx_status_rings
;
152 ff_max
->max_remote_ipv6_addrs
= info
->max_remote_ipv6_addrs
;
153 ff_max
->max_local_ipv6_addrs
= info
->max_local_ipv6_addrs
;
156 static void qlcnic_sriov_set_vf_max_vlan(struct qlcnic_adapter
*adapter
,
157 struct qlcnic_info
*npar_info
)
159 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
162 temp
= npar_info
->max_rx_mcast_mac_filters
;
163 total_fn
= sriov
->num_vfs
+ 1;
165 temp
= temp
/ (QLCNIC_SRIOV_VF_MAX_MAC
* total_fn
);
166 sriov
->num_allowed_vlans
= temp
- 1;
168 if (qlcnic_83xx_pf_check(adapter
))
169 sriov
->num_allowed_vlans
= 1;
171 netdev_info(adapter
->netdev
, "Max Guest VLANs supported per VF = %d\n",
172 sriov
->num_allowed_vlans
);
175 static int qlcnic_sriov_get_pf_info(struct qlcnic_adapter
*adapter
,
176 struct qlcnic_info
*npar_info
)
179 struct qlcnic_cmd_args cmd
;
181 if (qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_GET_NIC_INFO
))
184 cmd
.req
.arg
[1] = 0x2;
185 err
= qlcnic_issue_cmd(adapter
, &cmd
);
187 dev_err(&adapter
->pdev
->dev
,
188 "Failed to get PF info, err=%d\n", err
);
192 npar_info
->total_pf
= cmd
.rsp
.arg
[2] & 0xff;
193 npar_info
->total_rss_engines
= (cmd
.rsp
.arg
[2] >> 8) & 0xff;
194 npar_info
->max_vports
= MSW(cmd
.rsp
.arg
[2]);
195 npar_info
->max_tx_ques
= LSW(cmd
.rsp
.arg
[3]);
196 npar_info
->max_tx_mac_filters
= MSW(cmd
.rsp
.arg
[3]);
197 npar_info
->max_rx_mcast_mac_filters
= LSW(cmd
.rsp
.arg
[4]);
198 npar_info
->max_rx_ucast_mac_filters
= MSW(cmd
.rsp
.arg
[4]);
199 npar_info
->max_rx_ip_addr
= LSW(cmd
.rsp
.arg
[5]);
200 npar_info
->max_rx_lro_flow
= MSW(cmd
.rsp
.arg
[5]);
201 npar_info
->max_rx_status_rings
= LSW(cmd
.rsp
.arg
[6]);
202 npar_info
->max_rx_buf_rings
= MSW(cmd
.rsp
.arg
[6]);
203 npar_info
->max_rx_ques
= LSW(cmd
.rsp
.arg
[7]);
204 npar_info
->max_tx_vlan_keys
= MSW(cmd
.rsp
.arg
[7]);
205 npar_info
->max_local_ipv6_addrs
= LSW(cmd
.rsp
.arg
[8]);
206 npar_info
->max_remote_ipv6_addrs
= MSW(cmd
.rsp
.arg
[8]);
208 qlcnic_sriov_set_vf_max_vlan(adapter
, npar_info
);
209 qlcnic_sriov_pf_set_ff_max_res(adapter
, npar_info
);
210 dev_info(&adapter
->pdev
->dev
,
211 "\n\ttotal_pf: %d,\n"
212 "\n\ttotal_rss_engines: %d max_vports: %d max_tx_ques %d,\n"
213 "\tmax_tx_mac_filters: %d max_rx_mcast_mac_filters: %d,\n"
214 "\tmax_rx_ucast_mac_filters: 0x%x, max_rx_ip_addr: %d,\n"
215 "\tmax_rx_lro_flow: %d max_rx_status_rings: %d,\n"
216 "\tmax_rx_buf_rings: %d, max_rx_ques: %d, max_tx_vlan_keys %d\n"
217 "\tmax_local_ipv6_addrs: %d, max_remote_ipv6_addrs: %d\n",
218 npar_info
->total_pf
, npar_info
->total_rss_engines
,
219 npar_info
->max_vports
, npar_info
->max_tx_ques
,
220 npar_info
->max_tx_mac_filters
,
221 npar_info
->max_rx_mcast_mac_filters
,
222 npar_info
->max_rx_ucast_mac_filters
, npar_info
->max_rx_ip_addr
,
223 npar_info
->max_rx_lro_flow
, npar_info
->max_rx_status_rings
,
224 npar_info
->max_rx_buf_rings
, npar_info
->max_rx_ques
,
225 npar_info
->max_tx_vlan_keys
, npar_info
->max_local_ipv6_addrs
,
226 npar_info
->max_remote_ipv6_addrs
);
229 qlcnic_free_mbx_args(&cmd
);
233 static void qlcnic_sriov_pf_reset_vport_handle(struct qlcnic_adapter
*adapter
,
236 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
237 struct qlcnic_vport
*vp
;
240 if (adapter
->ahw
->pci_func
== func
) {
241 sriov
->vp_handle
= 0;
243 index
= qlcnic_sriov_func_to_index(adapter
, func
);
246 vp
= sriov
->vf_info
[index
].vp
;
251 static void qlcnic_sriov_pf_set_vport_handle(struct qlcnic_adapter
*adapter
,
252 u16 vport_handle
, u8 func
)
254 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
255 struct qlcnic_vport
*vp
;
258 if (adapter
->ahw
->pci_func
== func
) {
259 sriov
->vp_handle
= vport_handle
;
261 index
= qlcnic_sriov_func_to_index(adapter
, func
);
264 vp
= sriov
->vf_info
[index
].vp
;
265 vp
->handle
= vport_handle
;
269 static int qlcnic_sriov_pf_get_vport_handle(struct qlcnic_adapter
*adapter
,
272 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
273 struct qlcnic_vf_info
*vf_info
;
276 if (adapter
->ahw
->pci_func
== func
) {
277 return sriov
->vp_handle
;
279 index
= qlcnic_sriov_func_to_index(adapter
, func
);
281 vf_info
= &sriov
->vf_info
[index
];
282 return vf_info
->vp
->handle
;
289 static int qlcnic_sriov_pf_config_vport(struct qlcnic_adapter
*adapter
,
292 struct qlcnic_cmd_args cmd
;
296 if (qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_CONFIG_VPORT
))
300 cmd
.req
.arg
[3] = func
<< 8;
302 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
, func
);
307 cmd
.req
.arg
[3] = ((vpid
& 0xffff) << 8) | 1;
310 ret
= qlcnic_issue_cmd(adapter
, &cmd
);
312 dev_err(&adapter
->pdev
->dev
,
313 "Failed %s vport, err %d for func 0x%x\n",
314 (flag
? "enable" : "disable"), ret
, func
);
319 vpid
= cmd
.rsp
.arg
[2] & 0xffff;
320 qlcnic_sriov_pf_set_vport_handle(adapter
, vpid
, func
);
322 qlcnic_sriov_pf_reset_vport_handle(adapter
, func
);
326 qlcnic_free_mbx_args(&cmd
);
330 static int qlcnic_sriov_pf_cfg_vlan_filtering(struct qlcnic_adapter
*adapter
,
333 struct qlcnic_cmd_args cmd
;
336 err
= qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_SET_NIC_INFO
);
340 cmd
.req
.arg
[1] = 0x4;
342 adapter
->flags
|= QLCNIC_VLAN_FILTERING
;
343 cmd
.req
.arg
[1] |= BIT_16
;
344 if (qlcnic_84xx_check(adapter
))
345 cmd
.req
.arg
[1] |= QLC_SRIOV_ALLOW_VLAN0
;
347 adapter
->flags
&= ~QLCNIC_VLAN_FILTERING
;
350 err
= qlcnic_issue_cmd(adapter
, &cmd
);
352 dev_err(&adapter
->pdev
->dev
,
353 "Failed to configure VLAN filtering, err=%d\n", err
);
355 qlcnic_free_mbx_args(&cmd
);
359 /* On configuring VF flood bit, PFD will receive traffic from all VFs */
360 static int qlcnic_sriov_pf_cfg_flood(struct qlcnic_adapter
*adapter
)
362 struct qlcnic_cmd_args cmd
;
365 err
= qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_SET_NIC_INFO
);
369 cmd
.req
.arg
[1] = QLC_FLOOD_MODE
| QLC_VF_FLOOD_BIT
;
371 err
= qlcnic_issue_cmd(adapter
, &cmd
);
373 dev_err(&adapter
->pdev
->dev
,
374 "Failed to configure VF Flood bit on PF, err=%d\n",
377 qlcnic_free_mbx_args(&cmd
);
381 static int qlcnic_sriov_pf_cfg_eswitch(struct qlcnic_adapter
*adapter
,
384 struct qlcnic_cmd_args cmd
;
387 if (qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_TOGGLE_ESWITCH
))
390 cmd
.req
.arg
[0] |= (3 << 29);
391 cmd
.req
.arg
[1] = ((func
& 0xf) << 2) | BIT_6
| BIT_1
;
393 cmd
.req
.arg
[1] |= BIT_0
;
395 err
= qlcnic_issue_cmd(adapter
, &cmd
);
397 if (err
!= QLCNIC_RCODE_SUCCESS
) {
398 dev_err(&adapter
->pdev
->dev
,
399 "Failed to enable sriov eswitch%d\n", err
);
403 qlcnic_free_mbx_args(&cmd
);
407 static void qlcnic_sriov_pf_del_flr_queue(struct qlcnic_adapter
*adapter
)
409 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
410 struct qlcnic_back_channel
*bc
= &sriov
->bc
;
413 for (i
= 0; i
< sriov
->num_vfs
; i
++)
414 cancel_work_sync(&sriov
->vf_info
[i
].flr_work
);
416 destroy_workqueue(bc
->bc_flr_wq
);
419 static int qlcnic_sriov_pf_create_flr_queue(struct qlcnic_adapter
*adapter
)
421 struct qlcnic_back_channel
*bc
= &adapter
->ahw
->sriov
->bc
;
422 struct workqueue_struct
*wq
;
424 wq
= create_singlethread_workqueue("qlcnic-flr");
426 dev_err(&adapter
->pdev
->dev
, "Cannot create FLR workqueue\n");
434 void qlcnic_sriov_pf_cleanup(struct qlcnic_adapter
*adapter
)
436 u8 func
= adapter
->ahw
->pci_func
;
438 if (!qlcnic_sriov_enable_check(adapter
))
441 qlcnic_sriov_pf_del_flr_queue(adapter
);
442 qlcnic_sriov_cfg_bc_intr(adapter
, 0);
443 qlcnic_sriov_pf_config_vport(adapter
, 0, func
);
444 qlcnic_sriov_pf_cfg_eswitch(adapter
, func
, 0);
445 qlcnic_sriov_pf_cfg_vlan_filtering(adapter
, 0);
446 __qlcnic_sriov_cleanup(adapter
);
447 adapter
->ahw
->op_mode
= QLCNIC_MGMT_FUNC
;
448 clear_bit(__QLCNIC_SRIOV_ENABLE
, &adapter
->state
);
451 void qlcnic_sriov_pf_disable(struct qlcnic_adapter
*adapter
)
453 if (!qlcnic_sriov_pf_check(adapter
))
456 if (!qlcnic_sriov_enable_check(adapter
))
459 pci_disable_sriov(adapter
->pdev
);
460 netdev_info(adapter
->netdev
,
461 "SR-IOV is disabled successfully on port %d\n",
465 static int qlcnic_pci_sriov_disable(struct qlcnic_adapter
*adapter
)
467 struct net_device
*netdev
= adapter
->netdev
;
469 if (pci_vfs_assigned(adapter
->pdev
)) {
470 netdev_err(adapter
->netdev
,
471 "SR-IOV VFs belonging to port %d are assigned to VMs. SR-IOV can not be disabled on this port\n",
473 netdev_info(adapter
->netdev
,
474 "Please detach SR-IOV VFs belonging to port %d from VMs, and then try to disable SR-IOV on this port\n",
479 qlcnic_sriov_pf_disable(adapter
);
482 if (netif_running(netdev
))
483 __qlcnic_down(adapter
, netdev
);
485 qlcnic_sriov_free_vlans(adapter
);
487 qlcnic_sriov_pf_cleanup(adapter
);
489 /* After disabling SRIOV re-init the driver in default mode
490 configure opmode based on op_mode of function
492 if (qlcnic_83xx_configure_opmode(adapter
)) {
497 if (netif_running(netdev
))
498 __qlcnic_up(adapter
, netdev
);
504 static int qlcnic_sriov_pf_init(struct qlcnic_adapter
*adapter
)
506 struct qlcnic_hardware_context
*ahw
= adapter
->ahw
;
507 struct qlcnic_info nic_info
, pf_info
, vp_info
;
509 u8 func
= ahw
->pci_func
;
511 if (!qlcnic_sriov_enable_check(adapter
))
514 err
= qlcnic_sriov_pf_cfg_vlan_filtering(adapter
, 1);
518 if (qlcnic_84xx_check(adapter
)) {
519 err
= qlcnic_sriov_pf_cfg_flood(adapter
);
521 goto disable_vlan_filtering
;
524 err
= qlcnic_sriov_pf_cfg_eswitch(adapter
, func
, 1);
526 goto disable_vlan_filtering
;
528 err
= qlcnic_sriov_pf_config_vport(adapter
, 1, func
);
530 goto disable_eswitch
;
532 err
= qlcnic_sriov_get_pf_info(adapter
, &pf_info
);
536 err
= qlcnic_get_nic_info(adapter
, &nic_info
, func
);
540 err
= qlcnic_sriov_pf_cal_res_limit(adapter
, &vp_info
, func
);
544 err
= qlcnic_sriov_cfg_bc_intr(adapter
, 1);
548 ahw
->physical_port
= (u8
) nic_info
.phys_port
;
549 ahw
->switch_mode
= nic_info
.switch_mode
;
550 ahw
->max_mtu
= nic_info
.max_mtu
;
551 ahw
->capabilities
= nic_info
.capabilities
;
552 ahw
->nic_mode
= QLC_83XX_SRIOV_MODE
;
556 qlcnic_sriov_pf_config_vport(adapter
, 0, func
);
559 qlcnic_sriov_pf_cfg_eswitch(adapter
, func
, 0);
561 disable_vlan_filtering
:
562 qlcnic_sriov_pf_cfg_vlan_filtering(adapter
, 0);
567 static int qlcnic_sriov_pf_enable(struct qlcnic_adapter
*adapter
, int num_vfs
)
571 if (!qlcnic_sriov_enable_check(adapter
))
574 err
= pci_enable_sriov(adapter
->pdev
, num_vfs
);
576 qlcnic_sriov_pf_cleanup(adapter
);
581 static int __qlcnic_pci_sriov_enable(struct qlcnic_adapter
*adapter
,
586 set_bit(__QLCNIC_SRIOV_ENABLE
, &adapter
->state
);
587 adapter
->ahw
->op_mode
= QLCNIC_SRIOV_PF_FUNC
;
589 err
= qlcnic_sriov_init(adapter
, num_vfs
);
593 err
= qlcnic_sriov_pf_create_flr_queue(adapter
);
597 err
= qlcnic_sriov_pf_init(adapter
);
601 qlcnic_sriov_alloc_vlans(adapter
);
606 qlcnic_sriov_pf_del_flr_queue(adapter
);
609 __qlcnic_sriov_cleanup(adapter
);
612 clear_bit(__QLCNIC_SRIOV_ENABLE
, &adapter
->state
);
613 adapter
->ahw
->op_mode
= QLCNIC_MGMT_FUNC
;
617 static int qlcnic_pci_sriov_enable(struct qlcnic_adapter
*adapter
, int num_vfs
)
619 struct net_device
*netdev
= adapter
->netdev
;
622 if (!(adapter
->flags
& QLCNIC_MSIX_ENABLED
)) {
624 "SR-IOV cannot be enabled, when legacy interrupts are enabled\n");
629 if (netif_running(netdev
))
630 __qlcnic_down(adapter
, netdev
);
632 err
= __qlcnic_pci_sriov_enable(adapter
, num_vfs
);
636 if (netif_running(netdev
))
637 __qlcnic_up(adapter
, netdev
);
640 err
= qlcnic_sriov_pf_enable(adapter
, num_vfs
);
643 "SR-IOV is enabled successfully on port %d\n",
645 /* Return number of vfs enabled */
650 if (netif_running(netdev
))
651 __qlcnic_down(adapter
, netdev
);
654 if (!qlcnic_83xx_configure_opmode(adapter
)) {
655 if (netif_running(netdev
))
656 __qlcnic_up(adapter
, netdev
);
660 netdev_info(netdev
, "Failed to enable SR-IOV on port %d\n",
666 int qlcnic_pci_sriov_configure(struct pci_dev
*dev
, int num_vfs
)
668 struct qlcnic_adapter
*adapter
= pci_get_drvdata(dev
);
671 if (test_and_set_bit(__QLCNIC_RESETTING
, &adapter
->state
))
675 err
= qlcnic_pci_sriov_disable(adapter
);
677 err
= qlcnic_pci_sriov_enable(adapter
, num_vfs
);
679 clear_bit(__QLCNIC_RESETTING
, &adapter
->state
);
683 static int qlcnic_sriov_set_vf_acl(struct qlcnic_adapter
*adapter
, u8 func
)
685 struct qlcnic_cmd_args cmd
;
686 struct qlcnic_vport
*vp
;
690 id
= qlcnic_sriov_func_to_index(adapter
, func
);
694 vp
= adapter
->ahw
->sriov
->vf_info
[id
].vp
;
695 err
= qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_SET_NIC_INFO
);
699 cmd
.req
.arg
[1] = 0x3 | func
<< 16;
700 if (vp
->spoofchk
== true) {
702 cmd
.req
.arg
[2] |= BIT_1
| BIT_3
| BIT_8
;
703 cmd
.req
.arg
[4] = mac
[5] | mac
[4] << 8 | mac
[3] << 16 |
705 cmd
.req
.arg
[5] = mac
[1] | mac
[0] << 8;
708 if (vp
->vlan_mode
== QLC_PVID_MODE
) {
709 cmd
.req
.arg
[2] |= BIT_6
;
710 cmd
.req
.arg
[3] |= vp
->pvid
<< 8;
713 err
= qlcnic_issue_cmd(adapter
, &cmd
);
715 dev_err(&adapter
->pdev
->dev
, "Failed to set ACL, err=%d\n",
718 qlcnic_free_mbx_args(&cmd
);
722 static int qlcnic_sriov_set_vf_vport_info(struct qlcnic_adapter
*adapter
,
725 struct qlcnic_info defvp_info
;
728 err
= qlcnic_sriov_pf_cal_res_limit(adapter
, &defvp_info
, func
);
732 err
= qlcnic_sriov_set_vf_acl(adapter
, func
);
739 static int qlcnic_sriov_pf_channel_cfg_cmd(struct qlcnic_bc_trans
*trans
,
740 struct qlcnic_cmd_args
*cmd
)
742 struct qlcnic_vf_info
*vf
= trans
->vf
;
743 struct qlcnic_vport
*vp
= vf
->vp
;
744 struct qlcnic_adapter
*adapter
;
745 struct qlcnic_sriov
*sriov
;
746 u16 func
= vf
->pci_func
;
750 adapter
= vf
->adapter
;
751 sriov
= adapter
->ahw
->sriov
;
753 if (trans
->req_hdr
->cmd_op
== QLCNIC_BC_CMD_CHANNEL_INIT
) {
754 err
= qlcnic_sriov_pf_config_vport(adapter
, 1, func
);
756 err
= qlcnic_sriov_set_vf_vport_info(adapter
, func
);
758 qlcnic_sriov_pf_config_vport(adapter
, 0, func
);
761 if (vp
->vlan_mode
== QLC_GUEST_VLAN_MODE
) {
762 size
= sizeof(*vf
->sriov_vlans
);
763 size
= size
* sriov
->num_allowed_vlans
;
764 memset(vf
->sriov_vlans
, 0, size
);
767 err
= qlcnic_sriov_pf_config_vport(adapter
, 0, func
);
773 cmd
->rsp
.arg
[0] |= (1 << 25);
775 if (trans
->req_hdr
->cmd_op
== QLCNIC_BC_CMD_CHANNEL_INIT
)
776 set_bit(QLC_BC_VF_STATE
, &vf
->state
);
778 clear_bit(QLC_BC_VF_STATE
, &vf
->state
);
783 cmd
->rsp
.arg
[0] |= (2 << 25);
787 static int qlcnic_sriov_cfg_vf_def_mac(struct qlcnic_adapter
*adapter
,
788 struct qlcnic_vf_info
*vf
,
791 struct qlcnic_cmd_args
*cmd
;
792 struct qlcnic_macvlan_mbx mv
;
793 struct qlcnic_vport
*vp
;
801 cmd
= kzalloc(sizeof(*cmd
), GFP_ATOMIC
);
805 err
= qlcnic_alloc_mbx_args(cmd
, adapter
, QLCNIC_CMD_CONFIG_MAC_VLAN
);
809 cmd
->type
= QLC_83XX_MBX_CMD_NO_WAIT
;
810 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
, vf
->pci_func
);
817 op
= ((op
== QLCNIC_MAC_ADD
|| op
== QLCNIC_MAC_VLAN_ADD
) ?
818 QLCNIC_MAC_VLAN_ADD
: QLCNIC_MAC_VLAN_DEL
);
820 cmd
->req
.arg
[1] = op
| (1 << 8) | (3 << 6);
821 cmd
->req
.arg
[1] |= ((vpid
& 0xffff) << 16) | BIT_31
;
825 mv
.mac_addr0
= addr
[0];
826 mv
.mac_addr1
= addr
[1];
827 mv
.mac_addr2
= addr
[2];
828 mv
.mac_addr3
= addr
[3];
829 mv
.mac_addr4
= addr
[4];
830 mv
.mac_addr5
= addr
[5];
831 buf
= &cmd
->req
.arg
[2];
832 memcpy(buf
, &mv
, sizeof(struct qlcnic_macvlan_mbx
));
834 err
= qlcnic_issue_cmd(adapter
, cmd
);
840 qlcnic_free_mbx_args(cmd
);
846 static int qlcnic_sriov_validate_create_rx_ctx(struct qlcnic_cmd_args
*cmd
)
848 if ((cmd
->req
.arg
[0] >> 29) != 0x3)
854 static void qlcnic_83xx_cfg_default_mac_vlan(struct qlcnic_adapter
*adapter
,
855 struct qlcnic_vf_info
*vf
,
858 struct qlcnic_sriov
*sriov
;
862 sriov
= adapter
->ahw
->sriov
;
864 spin_lock_bh(&vf
->vlan_list_lock
);
866 for (i
= 0; i
< sriov
->num_allowed_vlans
; i
++) {
867 vlan
= vf
->sriov_vlans
[i
];
869 qlcnic_sriov_cfg_vf_def_mac(adapter
, vf
, vlan
,
873 spin_unlock_bh(&vf
->vlan_list_lock
);
875 if (vf
->vp
->vlan_mode
!= QLC_PVID_MODE
) {
876 if (qlcnic_83xx_pf_check(adapter
) &&
877 qlcnic_sriov_check_any_vlan(vf
))
879 qlcnic_sriov_cfg_vf_def_mac(adapter
, vf
, 0, opcode
);
883 static int qlcnic_sriov_pf_create_rx_ctx_cmd(struct qlcnic_bc_trans
*tran
,
884 struct qlcnic_cmd_args
*cmd
)
886 struct qlcnic_vf_info
*vf
= tran
->vf
;
887 struct qlcnic_adapter
*adapter
= vf
->adapter
;
888 struct qlcnic_rcv_mbx_out
*mbx_out
;
891 err
= qlcnic_sriov_validate_create_rx_ctx(cmd
);
893 cmd
->rsp
.arg
[0] |= (0x6 << 25);
897 cmd
->req
.arg
[6] = vf
->vp
->handle
;
898 err
= qlcnic_issue_cmd(adapter
, cmd
);
901 mbx_out
= (struct qlcnic_rcv_mbx_out
*)&cmd
->rsp
.arg
[1];
902 vf
->rx_ctx_id
= mbx_out
->ctx_id
;
903 qlcnic_83xx_cfg_default_mac_vlan(adapter
, vf
, QLCNIC_MAC_ADD
);
911 static int qlcnic_sriov_pf_mac_address_cmd(struct qlcnic_bc_trans
*trans
,
912 struct qlcnic_cmd_args
*cmd
)
914 struct qlcnic_vf_info
*vf
= trans
->vf
;
917 type
= cmd
->req
.arg
[1];
919 case QLCNIC_SET_STATION_MAC
:
920 case QLCNIC_SET_FAC_DEF_MAC
:
921 cmd
->rsp
.arg
[0] = (2 << 25);
923 case QLCNIC_GET_CURRENT_MAC
:
924 cmd
->rsp
.arg
[0] = (1 << 25);
926 cmd
->rsp
.arg
[2] = mac
[1] | ((mac
[0] << 8) & 0xff00);
927 cmd
->rsp
.arg
[1] = mac
[5] | ((mac
[4] << 8) & 0xff00) |
928 ((mac
[3]) << 16 & 0xff0000) |
929 ((mac
[2]) << 24 & 0xff000000);
935 static int qlcnic_sriov_validate_create_tx_ctx(struct qlcnic_cmd_args
*cmd
)
937 if ((cmd
->req
.arg
[0] >> 29) != 0x3)
943 static int qlcnic_sriov_pf_create_tx_ctx_cmd(struct qlcnic_bc_trans
*trans
,
944 struct qlcnic_cmd_args
*cmd
)
946 struct qlcnic_vf_info
*vf
= trans
->vf
;
947 struct qlcnic_adapter
*adapter
= vf
->adapter
;
948 struct qlcnic_tx_mbx_out
*mbx_out
;
951 err
= qlcnic_sriov_validate_create_tx_ctx(cmd
);
953 cmd
->rsp
.arg
[0] |= (0x6 << 25);
957 cmd
->req
.arg
[5] |= vf
->vp
->handle
<< 16;
958 err
= qlcnic_issue_cmd(adapter
, cmd
);
960 mbx_out
= (struct qlcnic_tx_mbx_out
*)&cmd
->rsp
.arg
[2];
961 vf
->tx_ctx_id
= mbx_out
->ctx_id
;
969 static int qlcnic_sriov_validate_del_rx_ctx(struct qlcnic_vf_info
*vf
,
970 struct qlcnic_cmd_args
*cmd
)
972 if ((cmd
->req
.arg
[0] >> 29) != 0x3)
975 if ((cmd
->req
.arg
[1] & 0xffff) != vf
->rx_ctx_id
)
981 static int qlcnic_sriov_pf_del_rx_ctx_cmd(struct qlcnic_bc_trans
*trans
,
982 struct qlcnic_cmd_args
*cmd
)
984 struct qlcnic_vf_info
*vf
= trans
->vf
;
985 struct qlcnic_adapter
*adapter
= vf
->adapter
;
988 err
= qlcnic_sriov_validate_del_rx_ctx(vf
, cmd
);
990 cmd
->rsp
.arg
[0] |= (0x6 << 25);
994 qlcnic_83xx_cfg_default_mac_vlan(adapter
, vf
, QLCNIC_MAC_DEL
);
995 cmd
->req
.arg
[1] |= vf
->vp
->handle
<< 16;
996 err
= qlcnic_issue_cmd(adapter
, cmd
);
1004 static int qlcnic_sriov_validate_del_tx_ctx(struct qlcnic_vf_info
*vf
,
1005 struct qlcnic_cmd_args
*cmd
)
1007 if ((cmd
->req
.arg
[0] >> 29) != 0x3)
1010 if ((cmd
->req
.arg
[1] & 0xffff) != vf
->tx_ctx_id
)
1016 static int qlcnic_sriov_pf_del_tx_ctx_cmd(struct qlcnic_bc_trans
*trans
,
1017 struct qlcnic_cmd_args
*cmd
)
1019 struct qlcnic_vf_info
*vf
= trans
->vf
;
1020 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1023 err
= qlcnic_sriov_validate_del_tx_ctx(vf
, cmd
);
1025 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1029 cmd
->req
.arg
[1] |= vf
->vp
->handle
<< 16;
1030 err
= qlcnic_issue_cmd(adapter
, cmd
);
1038 static int qlcnic_sriov_validate_cfg_lro(struct qlcnic_vf_info
*vf
,
1039 struct qlcnic_cmd_args
*cmd
)
1041 if ((cmd
->req
.arg
[1] >> 16) != vf
->rx_ctx_id
)
1047 static int qlcnic_sriov_pf_cfg_lro_cmd(struct qlcnic_bc_trans
*trans
,
1048 struct qlcnic_cmd_args
*cmd
)
1050 struct qlcnic_vf_info
*vf
= trans
->vf
;
1051 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1054 err
= qlcnic_sriov_validate_cfg_lro(vf
, cmd
);
1056 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1060 err
= qlcnic_issue_cmd(adapter
, cmd
);
1064 static int qlcnic_sriov_pf_cfg_ip_cmd(struct qlcnic_bc_trans
*trans
,
1065 struct qlcnic_cmd_args
*cmd
)
1067 struct qlcnic_vf_info
*vf
= trans
->vf
;
1068 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1072 op
= cmd
->req
.arg
[1] & 0xff;
1074 cmd
->req
.arg
[1] |= vf
->vp
->handle
<< 16;
1075 cmd
->req
.arg
[1] |= BIT_31
;
1077 err
= qlcnic_issue_cmd(adapter
, cmd
);
1081 static int qlcnic_sriov_validate_cfg_intrpt(struct qlcnic_vf_info
*vf
,
1082 struct qlcnic_cmd_args
*cmd
)
1084 if (((cmd
->req
.arg
[1] >> 8) & 0xff) != vf
->pci_func
)
1087 if (!(cmd
->req
.arg
[1] & BIT_16
))
1090 if ((cmd
->req
.arg
[1] & 0xff) != 0x1)
1096 static int qlcnic_sriov_pf_cfg_intrpt_cmd(struct qlcnic_bc_trans
*trans
,
1097 struct qlcnic_cmd_args
*cmd
)
1099 struct qlcnic_vf_info
*vf
= trans
->vf
;
1100 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1103 err
= qlcnic_sriov_validate_cfg_intrpt(vf
, cmd
);
1105 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1107 err
= qlcnic_issue_cmd(adapter
, cmd
);
1112 static int qlcnic_sriov_validate_mtu(struct qlcnic_adapter
*adapter
,
1113 struct qlcnic_vf_info
*vf
,
1114 struct qlcnic_cmd_args
*cmd
)
1116 if (cmd
->req
.arg
[1] != vf
->rx_ctx_id
)
1119 if (cmd
->req
.arg
[2] > adapter
->ahw
->max_mtu
)
1125 static int qlcnic_sriov_pf_set_mtu_cmd(struct qlcnic_bc_trans
*trans
,
1126 struct qlcnic_cmd_args
*cmd
)
1128 struct qlcnic_vf_info
*vf
= trans
->vf
;
1129 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1132 err
= qlcnic_sriov_validate_mtu(adapter
, vf
, cmd
);
1134 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1136 err
= qlcnic_issue_cmd(adapter
, cmd
);
1141 static int qlcnic_sriov_validate_get_nic_info(struct qlcnic_vf_info
*vf
,
1142 struct qlcnic_cmd_args
*cmd
)
1144 if (cmd
->req
.arg
[1] & BIT_31
) {
1145 if (((cmd
->req
.arg
[1] >> 16) & 0x7fff) != vf
->pci_func
)
1148 cmd
->req
.arg
[1] |= vf
->vp
->handle
<< 16;
1154 static int qlcnic_sriov_pf_get_nic_info_cmd(struct qlcnic_bc_trans
*trans
,
1155 struct qlcnic_cmd_args
*cmd
)
1157 struct qlcnic_vf_info
*vf
= trans
->vf
;
1158 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1161 err
= qlcnic_sriov_validate_get_nic_info(vf
, cmd
);
1163 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1167 err
= qlcnic_issue_cmd(adapter
, cmd
);
1171 static int qlcnic_sriov_validate_cfg_rss(struct qlcnic_vf_info
*vf
,
1172 struct qlcnic_cmd_args
*cmd
)
1174 if (cmd
->req
.arg
[1] != vf
->rx_ctx_id
)
1180 static int qlcnic_sriov_pf_cfg_rss_cmd(struct qlcnic_bc_trans
*trans
,
1181 struct qlcnic_cmd_args
*cmd
)
1183 struct qlcnic_vf_info
*vf
= trans
->vf
;
1184 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1187 err
= qlcnic_sriov_validate_cfg_rss(vf
, cmd
);
1189 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1191 err
= qlcnic_issue_cmd(adapter
, cmd
);
1196 static int qlcnic_sriov_validate_cfg_intrcoal(struct qlcnic_adapter
*adapter
,
1197 struct qlcnic_vf_info
*vf
,
1198 struct qlcnic_cmd_args
*cmd
)
1200 struct qlcnic_nic_intr_coalesce
*coal
= &adapter
->ahw
->coal
;
1201 u16 ctx_id
, pkts
, time
;
1205 type
= cmd
->req
.arg
[1] & QLC_INTR_COAL_TYPE_MASK
;
1206 ctx_id
= cmd
->req
.arg
[1] >> 16;
1207 pkts
= cmd
->req
.arg
[2] & 0xffff;
1208 time
= cmd
->req
.arg
[2] >> 16;
1211 case QLCNIC_INTR_COAL_TYPE_RX
:
1212 if (ctx_id
!= vf
->rx_ctx_id
|| pkts
> coal
->rx_packets
||
1213 time
< coal
->rx_time_us
)
1216 case QLCNIC_INTR_COAL_TYPE_TX
:
1217 if (ctx_id
!= vf
->tx_ctx_id
|| pkts
> coal
->tx_packets
||
1218 time
< coal
->tx_time_us
)
1222 netdev_err(adapter
->netdev
, "Invalid coalescing type 0x%x received\n",
1230 netdev_err(adapter
->netdev
, "Expected: rx_ctx_id 0x%x rx_packets 0x%x rx_time_us 0x%x tx_ctx_id 0x%x tx_packets 0x%x tx_time_us 0x%x\n",
1231 vf
->rx_ctx_id
, coal
->rx_packets
, coal
->rx_time_us
,
1232 vf
->tx_ctx_id
, coal
->tx_packets
, coal
->tx_time_us
);
1233 netdev_err(adapter
->netdev
, "Received: ctx_id 0x%x packets 0x%x time_us 0x%x type 0x%x\n",
1234 ctx_id
, pkts
, time
, type
);
1239 static int qlcnic_sriov_pf_cfg_intrcoal_cmd(struct qlcnic_bc_trans
*tran
,
1240 struct qlcnic_cmd_args
*cmd
)
1242 struct qlcnic_vf_info
*vf
= tran
->vf
;
1243 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1246 err
= qlcnic_sriov_validate_cfg_intrcoal(adapter
, vf
, cmd
);
1248 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1252 err
= qlcnic_issue_cmd(adapter
, cmd
);
1256 static int qlcnic_sriov_validate_cfg_macvlan(struct qlcnic_adapter
*adapter
,
1257 struct qlcnic_vf_info
*vf
,
1258 struct qlcnic_cmd_args
*cmd
)
1260 struct qlcnic_vport
*vp
= vf
->vp
;
1263 if (!(cmd
->req
.arg
[1] & BIT_8
))
1266 cmd
->req
.arg
[1] |= (vf
->vp
->handle
<< 16);
1267 cmd
->req
.arg
[1] |= BIT_31
;
1269 if (vp
->vlan_mode
== QLC_PVID_MODE
) {
1270 op
= cmd
->req
.arg
[1] & 0x7;
1271 cmd
->req
.arg
[1] &= ~0x7;
1272 new_op
= (op
== QLCNIC_MAC_ADD
|| op
== QLCNIC_MAC_VLAN_ADD
) ?
1273 QLCNIC_MAC_VLAN_ADD
: QLCNIC_MAC_VLAN_DEL
;
1274 cmd
->req
.arg
[3] |= vp
->pvid
<< 16;
1275 cmd
->req
.arg
[1] |= new_op
;
1281 static int qlcnic_sriov_pf_cfg_macvlan_cmd(struct qlcnic_bc_trans
*trans
,
1282 struct qlcnic_cmd_args
*cmd
)
1284 struct qlcnic_vf_info
*vf
= trans
->vf
;
1285 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1288 err
= qlcnic_sriov_validate_cfg_macvlan(adapter
, vf
, cmd
);
1290 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1294 err
= qlcnic_issue_cmd(adapter
, cmd
);
1298 static int qlcnic_sriov_validate_linkevent(struct qlcnic_vf_info
*vf
,
1299 struct qlcnic_cmd_args
*cmd
)
1301 if ((cmd
->req
.arg
[1] >> 16) != vf
->rx_ctx_id
)
1307 static int qlcnic_sriov_pf_linkevent_cmd(struct qlcnic_bc_trans
*trans
,
1308 struct qlcnic_cmd_args
*cmd
)
1310 struct qlcnic_vf_info
*vf
= trans
->vf
;
1311 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1314 err
= qlcnic_sriov_validate_linkevent(vf
, cmd
);
1316 cmd
->rsp
.arg
[0] |= (0x6 << 25);
1320 err
= qlcnic_issue_cmd(adapter
, cmd
);
1324 static int qlcnic_sriov_pf_cfg_promisc_cmd(struct qlcnic_bc_trans
*trans
,
1325 struct qlcnic_cmd_args
*cmd
)
1327 struct qlcnic_vf_info
*vf
= trans
->vf
;
1328 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1331 cmd
->req
.arg
[1] |= vf
->vp
->handle
<< 16;
1332 cmd
->req
.arg
[1] |= BIT_31
;
1333 err
= qlcnic_issue_cmd(adapter
, cmd
);
1337 static int qlcnic_sriov_pf_get_acl_cmd(struct qlcnic_bc_trans
*trans
,
1338 struct qlcnic_cmd_args
*cmd
)
1340 struct qlcnic_vf_info
*vf
= trans
->vf
;
1341 struct qlcnic_vport
*vp
= vf
->vp
;
1342 u8 cmd_op
, mode
= vp
->vlan_mode
;
1343 struct qlcnic_adapter
*adapter
;
1344 struct qlcnic_sriov
*sriov
;
1346 adapter
= vf
->adapter
;
1347 sriov
= adapter
->ahw
->sriov
;
1349 cmd_op
= trans
->req_hdr
->cmd_op
;
1350 cmd
->rsp
.arg
[0] |= 1 << 25;
1352 /* For 84xx adapter in case of PVID , PFD should send vlan mode as
1353 * QLC_NO_VLAN_MODE to VFD which is zero in mailbox response
1355 if (qlcnic_84xx_check(adapter
) && mode
== QLC_PVID_MODE
)
1359 case QLC_GUEST_VLAN_MODE
:
1360 cmd
->rsp
.arg
[1] = mode
| 1 << 8;
1361 cmd
->rsp
.arg
[2] = sriov
->num_allowed_vlans
<< 16;
1364 cmd
->rsp
.arg
[1] = mode
| 1 << 8 | vp
->pvid
<< 16;
1371 static int qlcnic_sriov_pf_del_guest_vlan(struct qlcnic_adapter
*adapter
,
1372 struct qlcnic_vf_info
*vf
,
1373 struct qlcnic_cmd_args
*cmd
)
1375 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
1378 if (!qlcnic_sriov_check_any_vlan(vf
))
1381 vlan
= cmd
->req
.arg
[1] >> 16;
1382 if (!vf
->rx_ctx_id
) {
1383 qlcnic_sriov_del_vlan_id(sriov
, vf
, vlan
);
1387 qlcnic_sriov_cfg_vf_def_mac(adapter
, vf
, vlan
, QLCNIC_MAC_DEL
);
1388 qlcnic_sriov_del_vlan_id(sriov
, vf
, vlan
);
1390 if (qlcnic_83xx_pf_check(adapter
))
1391 qlcnic_sriov_cfg_vf_def_mac(adapter
, vf
,
1396 static int qlcnic_sriov_pf_add_guest_vlan(struct qlcnic_adapter
*adapter
,
1397 struct qlcnic_vf_info
*vf
,
1398 struct qlcnic_cmd_args
*cmd
)
1400 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
1404 if (qlcnic_83xx_pf_check(adapter
) && qlcnic_sriov_check_any_vlan(vf
))
1407 vlan
= cmd
->req
.arg
[1] >> 16;
1409 if (!vf
->rx_ctx_id
) {
1410 qlcnic_sriov_add_vlan_id(sriov
, vf
, vlan
);
1414 if (qlcnic_83xx_pf_check(adapter
)) {
1415 err
= qlcnic_sriov_cfg_vf_def_mac(adapter
, vf
, 0,
1421 err
= qlcnic_sriov_cfg_vf_def_mac(adapter
, vf
, vlan
, QLCNIC_MAC_ADD
);
1424 if (qlcnic_83xx_pf_check(adapter
))
1425 qlcnic_sriov_cfg_vf_def_mac(adapter
, vf
, 0,
1430 qlcnic_sriov_add_vlan_id(sriov
, vf
, vlan
);
1434 static int qlcnic_sriov_pf_cfg_guest_vlan_cmd(struct qlcnic_bc_trans
*tran
,
1435 struct qlcnic_cmd_args
*cmd
)
1437 struct qlcnic_vf_info
*vf
= tran
->vf
;
1438 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1439 struct qlcnic_vport
*vp
= vf
->vp
;
1443 if (vp
->vlan_mode
!= QLC_GUEST_VLAN_MODE
) {
1444 cmd
->rsp
.arg
[0] |= 2 << 25;
1448 op
= cmd
->req
.arg
[1] & 0xf;
1451 err
= qlcnic_sriov_pf_add_guest_vlan(adapter
, vf
, cmd
);
1453 err
= qlcnic_sriov_pf_del_guest_vlan(adapter
, vf
, cmd
);
1455 cmd
->rsp
.arg
[0] |= err
? 2 << 25 : 1 << 25;
1459 static const int qlcnic_pf_passthru_supp_cmds
[] = {
1460 QLCNIC_CMD_GET_STATISTICS
,
1461 QLCNIC_CMD_GET_PORT_CONFIG
,
1462 QLCNIC_CMD_GET_LINK_STATUS
,
1463 QLCNIC_CMD_INIT_NIC_FUNC
,
1464 QLCNIC_CMD_STOP_NIC_FUNC
,
1467 static const struct qlcnic_sriov_cmd_handler qlcnic_pf_bc_cmd_hdlr
[] = {
1468 [QLCNIC_BC_CMD_CHANNEL_INIT
] = {&qlcnic_sriov_pf_channel_cfg_cmd
},
1469 [QLCNIC_BC_CMD_CHANNEL_TERM
] = {&qlcnic_sriov_pf_channel_cfg_cmd
},
1470 [QLCNIC_BC_CMD_GET_ACL
] = {&qlcnic_sriov_pf_get_acl_cmd
},
1471 [QLCNIC_BC_CMD_CFG_GUEST_VLAN
] = {&qlcnic_sriov_pf_cfg_guest_vlan_cmd
},
1474 static const struct qlcnic_sriov_fw_cmd_handler qlcnic_pf_fw_cmd_hdlr
[] = {
1475 {QLCNIC_CMD_CREATE_RX_CTX
, qlcnic_sriov_pf_create_rx_ctx_cmd
},
1476 {QLCNIC_CMD_CREATE_TX_CTX
, qlcnic_sriov_pf_create_tx_ctx_cmd
},
1477 {QLCNIC_CMD_MAC_ADDRESS
, qlcnic_sriov_pf_mac_address_cmd
},
1478 {QLCNIC_CMD_DESTROY_RX_CTX
, qlcnic_sriov_pf_del_rx_ctx_cmd
},
1479 {QLCNIC_CMD_DESTROY_TX_CTX
, qlcnic_sriov_pf_del_tx_ctx_cmd
},
1480 {QLCNIC_CMD_CONFIGURE_HW_LRO
, qlcnic_sriov_pf_cfg_lro_cmd
},
1481 {QLCNIC_CMD_CONFIGURE_IP_ADDR
, qlcnic_sriov_pf_cfg_ip_cmd
},
1482 {QLCNIC_CMD_CONFIG_INTRPT
, qlcnic_sriov_pf_cfg_intrpt_cmd
},
1483 {QLCNIC_CMD_SET_MTU
, qlcnic_sriov_pf_set_mtu_cmd
},
1484 {QLCNIC_CMD_GET_NIC_INFO
, qlcnic_sriov_pf_get_nic_info_cmd
},
1485 {QLCNIC_CMD_CONFIGURE_RSS
, qlcnic_sriov_pf_cfg_rss_cmd
},
1486 {QLCNIC_CMD_CONFIG_INTR_COAL
, qlcnic_sriov_pf_cfg_intrcoal_cmd
},
1487 {QLCNIC_CMD_CONFIG_MAC_VLAN
, qlcnic_sriov_pf_cfg_macvlan_cmd
},
1488 {QLCNIC_CMD_GET_LINK_EVENT
, qlcnic_sriov_pf_linkevent_cmd
},
1489 {QLCNIC_CMD_CONFIGURE_MAC_RX_MODE
, qlcnic_sriov_pf_cfg_promisc_cmd
},
1492 void qlcnic_sriov_pf_process_bc_cmd(struct qlcnic_adapter
*adapter
,
1493 struct qlcnic_bc_trans
*trans
,
1494 struct qlcnic_cmd_args
*cmd
)
1498 cmd_op
= trans
->req_hdr
->cmd_op
;
1500 if (trans
->req_hdr
->op_type
== QLC_BC_CMD
) {
1501 size
= ARRAY_SIZE(qlcnic_pf_bc_cmd_hdlr
);
1502 if (cmd_op
< size
) {
1503 qlcnic_pf_bc_cmd_hdlr
[cmd_op
].fn(trans
, cmd
);
1508 size
= ARRAY_SIZE(qlcnic_pf_fw_cmd_hdlr
);
1509 for (i
= 0; i
< size
; i
++) {
1510 if (cmd_op
== qlcnic_pf_fw_cmd_hdlr
[i
].cmd
) {
1511 qlcnic_pf_fw_cmd_hdlr
[i
].fn(trans
, cmd
);
1516 size
= ARRAY_SIZE(qlcnic_pf_passthru_supp_cmds
);
1517 for (i
= 0; i
< size
; i
++) {
1518 if (cmd_op
== qlcnic_pf_passthru_supp_cmds
[i
]) {
1519 qlcnic_issue_cmd(adapter
, cmd
);
1525 cmd
->rsp
.arg
[0] |= (0x9 << 25);
1528 void qlcnic_pf_set_interface_id_create_rx_ctx(struct qlcnic_adapter
*adapter
,
1533 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
,
1534 adapter
->ahw
->pci_func
);
1538 void qlcnic_pf_set_interface_id_del_rx_ctx(struct qlcnic_adapter
*adapter
,
1543 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
,
1544 adapter
->ahw
->pci_func
);
1545 *int_id
|= vpid
<< 16;
1548 void qlcnic_pf_set_interface_id_create_tx_ctx(struct qlcnic_adapter
*adapter
,
1553 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
,
1554 adapter
->ahw
->pci_func
);
1555 *int_id
|= vpid
<< 16;
1558 void qlcnic_pf_set_interface_id_del_tx_ctx(struct qlcnic_adapter
*adapter
,
1563 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
,
1564 adapter
->ahw
->pci_func
);
1565 *int_id
|= vpid
<< 16;
1568 void qlcnic_pf_set_interface_id_promisc(struct qlcnic_adapter
*adapter
,
1573 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
,
1574 adapter
->ahw
->pci_func
);
1575 *int_id
|= (vpid
<< 16) | BIT_31
;
1578 void qlcnic_pf_set_interface_id_ipaddr(struct qlcnic_adapter
*adapter
,
1583 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
,
1584 adapter
->ahw
->pci_func
);
1585 *int_id
|= (vpid
<< 16) | BIT_31
;
1588 void qlcnic_pf_set_interface_id_macaddr(struct qlcnic_adapter
*adapter
,
1593 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
,
1594 adapter
->ahw
->pci_func
);
1595 *int_id
|= (vpid
<< 16) | BIT_31
;
1598 static void qlcnic_sriov_del_rx_ctx(struct qlcnic_adapter
*adapter
,
1599 struct qlcnic_vf_info
*vf
)
1601 struct qlcnic_cmd_args cmd
;
1607 if (qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_DESTROY_RX_CTX
))
1610 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
, vf
->pci_func
);
1612 cmd
.req
.arg
[1] = vf
->rx_ctx_id
| (vpid
& 0xffff) << 16;
1613 if (qlcnic_issue_cmd(adapter
, &cmd
))
1614 dev_err(&adapter
->pdev
->dev
,
1615 "Failed to delete Tx ctx in firmware for func 0x%x\n",
1621 qlcnic_free_mbx_args(&cmd
);
1624 static void qlcnic_sriov_del_tx_ctx(struct qlcnic_adapter
*adapter
,
1625 struct qlcnic_vf_info
*vf
)
1627 struct qlcnic_cmd_args cmd
;
1633 if (qlcnic_alloc_mbx_args(&cmd
, adapter
, QLCNIC_CMD_DESTROY_TX_CTX
))
1636 vpid
= qlcnic_sriov_pf_get_vport_handle(adapter
, vf
->pci_func
);
1638 cmd
.req
.arg
[1] |= vf
->tx_ctx_id
| (vpid
& 0xffff) << 16;
1639 if (qlcnic_issue_cmd(adapter
, &cmd
))
1640 dev_err(&adapter
->pdev
->dev
,
1641 "Failed to delete Tx ctx in firmware for func 0x%x\n",
1647 qlcnic_free_mbx_args(&cmd
);
1650 static int qlcnic_sriov_add_act_list_irqsave(struct qlcnic_sriov
*sriov
,
1651 struct qlcnic_vf_info
*vf
,
1652 struct qlcnic_bc_trans
*trans
)
1654 struct qlcnic_trans_list
*t_list
= &vf
->rcv_act
;
1657 spin_lock_irqsave(&t_list
->lock
, flag
);
1659 __qlcnic_sriov_add_act_list(sriov
, vf
, trans
);
1661 spin_unlock_irqrestore(&t_list
->lock
, flag
);
1665 static void __qlcnic_sriov_process_flr(struct qlcnic_vf_info
*vf
)
1667 struct qlcnic_adapter
*adapter
= vf
->adapter
;
1669 qlcnic_sriov_cleanup_list(&vf
->rcv_pend
);
1670 cancel_work_sync(&vf
->trans_work
);
1671 qlcnic_sriov_cleanup_list(&vf
->rcv_act
);
1673 if (test_bit(QLC_BC_VF_SOFT_FLR
, &vf
->state
)) {
1674 qlcnic_sriov_del_tx_ctx(adapter
, vf
);
1675 qlcnic_sriov_del_rx_ctx(adapter
, vf
);
1678 qlcnic_sriov_pf_config_vport(adapter
, 0, vf
->pci_func
);
1680 clear_bit(QLC_BC_VF_FLR
, &vf
->state
);
1681 if (test_bit(QLC_BC_VF_SOFT_FLR
, &vf
->state
)) {
1682 qlcnic_sriov_add_act_list_irqsave(adapter
->ahw
->sriov
, vf
,
1684 clear_bit(QLC_BC_VF_SOFT_FLR
, &vf
->state
);
1685 vf
->flr_trans
= NULL
;
1689 static void qlcnic_sriov_pf_process_flr(struct work_struct
*work
)
1691 struct qlcnic_vf_info
*vf
;
1693 vf
= container_of(work
, struct qlcnic_vf_info
, flr_work
);
1694 __qlcnic_sriov_process_flr(vf
);
1698 static void qlcnic_sriov_schedule_flr(struct qlcnic_sriov
*sriov
,
1699 struct qlcnic_vf_info
*vf
,
1702 if (test_bit(__QLCNIC_RESETTING
, &vf
->adapter
->state
))
1705 INIT_WORK(&vf
->flr_work
, func
);
1706 queue_work(sriov
->bc
.bc_flr_wq
, &vf
->flr_work
);
1709 static void qlcnic_sriov_handle_soft_flr(struct qlcnic_adapter
*adapter
,
1710 struct qlcnic_bc_trans
*trans
,
1711 struct qlcnic_vf_info
*vf
)
1713 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
1715 set_bit(QLC_BC_VF_FLR
, &vf
->state
);
1716 clear_bit(QLC_BC_VF_STATE
, &vf
->state
);
1717 set_bit(QLC_BC_VF_SOFT_FLR
, &vf
->state
);
1718 vf
->flr_trans
= trans
;
1719 qlcnic_sriov_schedule_flr(sriov
, vf
, qlcnic_sriov_pf_process_flr
);
1720 netdev_info(adapter
->netdev
, "Software FLR for PCI func %d\n",
1724 bool qlcnic_sriov_soft_flr_check(struct qlcnic_adapter
*adapter
,
1725 struct qlcnic_bc_trans
*trans
,
1726 struct qlcnic_vf_info
*vf
)
1728 struct qlcnic_bc_hdr
*hdr
= trans
->req_hdr
;
1730 if ((hdr
->cmd_op
== QLCNIC_BC_CMD_CHANNEL_INIT
) &&
1731 (hdr
->op_type
== QLC_BC_CMD
) &&
1732 test_bit(QLC_BC_VF_STATE
, &vf
->state
)) {
1733 qlcnic_sriov_handle_soft_flr(adapter
, trans
, vf
);
1740 void qlcnic_sriov_pf_handle_flr(struct qlcnic_sriov
*sriov
,
1741 struct qlcnic_vf_info
*vf
)
1743 struct net_device
*dev
= vf
->adapter
->netdev
;
1744 struct qlcnic_vport
*vp
= vf
->vp
;
1746 if (!test_and_clear_bit(QLC_BC_VF_STATE
, &vf
->state
)) {
1747 clear_bit(QLC_BC_VF_FLR
, &vf
->state
);
1751 if (test_and_set_bit(QLC_BC_VF_FLR
, &vf
->state
)) {
1752 netdev_info(dev
, "FLR for PCI func %d in progress\n",
1757 if (vp
->vlan_mode
== QLC_GUEST_VLAN_MODE
)
1758 memset(vf
->sriov_vlans
, 0,
1759 sizeof(*vf
->sriov_vlans
) * sriov
->num_allowed_vlans
);
1761 qlcnic_sriov_schedule_flr(sriov
, vf
, qlcnic_sriov_pf_process_flr
);
1762 netdev_info(dev
, "FLR received for PCI func %d\n", vf
->pci_func
);
1765 void qlcnic_sriov_pf_reset(struct qlcnic_adapter
*adapter
)
1767 struct qlcnic_hardware_context
*ahw
= adapter
->ahw
;
1768 struct qlcnic_sriov
*sriov
= ahw
->sriov
;
1769 struct qlcnic_vf_info
*vf
;
1770 u16 num_vfs
= sriov
->num_vfs
;
1773 for (i
= 0; i
< num_vfs
; i
++) {
1774 vf
= &sriov
->vf_info
[i
];
1777 cancel_work_sync(&vf
->flr_work
);
1778 __qlcnic_sriov_process_flr(vf
);
1779 clear_bit(QLC_BC_VF_STATE
, &vf
->state
);
1782 qlcnic_sriov_pf_reset_vport_handle(adapter
, ahw
->pci_func
);
1783 QLCWRX(ahw
, QLCNIC_MBX_INTR_ENBL
, (ahw
->num_msix
- 1) << 8);
1786 int qlcnic_sriov_pf_reinit(struct qlcnic_adapter
*adapter
)
1788 struct qlcnic_hardware_context
*ahw
= adapter
->ahw
;
1791 if (!qlcnic_sriov_enable_check(adapter
))
1794 ahw
->op_mode
= QLCNIC_SRIOV_PF_FUNC
;
1796 err
= qlcnic_sriov_pf_init(adapter
);
1800 dev_info(&adapter
->pdev
->dev
, "%s: op_mode %d\n",
1801 __func__
, ahw
->op_mode
);
1805 int qlcnic_sriov_set_vf_mac(struct net_device
*netdev
, int vf
, u8
*mac
)
1807 struct qlcnic_adapter
*adapter
= netdev_priv(netdev
);
1808 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
1810 struct qlcnic_vf_info
*vf_info
;
1813 if (!qlcnic_sriov_pf_check(adapter
))
1816 num_vfs
= sriov
->num_vfs
;
1818 if (!is_valid_ether_addr(mac
) || vf
>= num_vfs
)
1821 if (ether_addr_equal(adapter
->mac_addr
, mac
)) {
1822 netdev_err(netdev
, "MAC address is already in use by the PF\n");
1826 for (i
= 0; i
< num_vfs
; i
++) {
1827 vf_info
= &sriov
->vf_info
[i
];
1828 if (ether_addr_equal(vf_info
->vp
->mac
, mac
)) {
1830 "MAC address is already in use by VF %d\n",
1836 vf_info
= &sriov
->vf_info
[vf
];
1837 curr_mac
= vf_info
->vp
->mac
;
1839 if (test_bit(QLC_BC_VF_STATE
, &vf_info
->state
)) {
1841 "MAC address change failed for VF %d, as VF driver is loaded. Please unload VF driver and retry the operation\n",
1846 memcpy(curr_mac
, mac
, netdev
->addr_len
);
1847 netdev_info(netdev
, "MAC Address %pM is configured for VF %d\n",
1852 int qlcnic_sriov_set_vf_tx_rate(struct net_device
*netdev
, int vf
,
1853 int min_tx_rate
, int max_tx_rate
)
1855 struct qlcnic_adapter
*adapter
= netdev_priv(netdev
);
1856 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
1857 struct qlcnic_vf_info
*vf_info
;
1858 struct qlcnic_info nic_info
;
1859 struct qlcnic_vport
*vp
;
1862 if (!qlcnic_sriov_pf_check(adapter
))
1865 if (vf
>= sriov
->num_vfs
)
1868 vf_info
= &sriov
->vf_info
[vf
];
1873 min_tx_rate
= QLC_VF_MIN_TX_RATE
;
1876 (max_tx_rate
>= 10000 || max_tx_rate
< min_tx_rate
)) {
1878 "Invalid max Tx rate, allowed range is [%d - %d]",
1879 min_tx_rate
, QLC_VF_MAX_TX_RATE
);
1884 max_tx_rate
= 10000;
1887 (min_tx_rate
> max_tx_rate
|| min_tx_rate
< QLC_VF_MIN_TX_RATE
)) {
1889 "Invalid min Tx rate, allowed range is [%d - %d]",
1890 QLC_VF_MIN_TX_RATE
, max_tx_rate
);
1894 if (test_bit(QLC_BC_VF_STATE
, &vf_info
->state
)) {
1895 if (qlcnic_sriov_get_vf_vport_info(adapter
, &nic_info
, vpid
))
1898 nic_info
.max_tx_bw
= max_tx_rate
/ 100;
1899 nic_info
.min_tx_bw
= min_tx_rate
/ 100;
1900 nic_info
.bit_offsets
= BIT_0
;
1902 if (qlcnic_sriov_pf_set_vport_info(adapter
, &nic_info
, vpid
))
1906 vp
->max_tx_bw
= max_tx_rate
/ 100;
1908 "Setting Max Tx rate %d (Mbps), %d %% of PF bandwidth, for VF %d\n",
1909 max_tx_rate
, vp
->max_tx_bw
, vf
);
1910 vp
->min_tx_bw
= min_tx_rate
/ 100;
1912 "Setting Min Tx rate %d (Mbps), %d %% of PF bandwidth, for VF %d\n",
1913 min_tx_rate
, vp
->min_tx_bw
, vf
);
1917 int qlcnic_sriov_set_vf_vlan(struct net_device
*netdev
, int vf
,
1918 u16 vlan
, u8 qos
, __be16 vlan_proto
)
1920 struct qlcnic_adapter
*adapter
= netdev_priv(netdev
);
1921 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
1922 struct qlcnic_vf_info
*vf_info
;
1923 struct qlcnic_vport
*vp
;
1925 if (!qlcnic_sriov_pf_check(adapter
))
1928 if (vf
>= sriov
->num_vfs
|| qos
> 7)
1931 if (vlan_proto
!= htons(ETH_P_8021Q
))
1932 return -EPROTONOSUPPORT
;
1934 if (vlan
> MAX_VLAN_ID
) {
1936 "Invalid VLAN ID, allowed range is [0 - %d]\n",
1941 vf_info
= &sriov
->vf_info
[vf
];
1943 if (test_bit(QLC_BC_VF_STATE
, &vf_info
->state
)) {
1945 "VLAN change failed for VF %d, as VF driver is loaded. Please unload VF driver and retry the operation\n",
1950 memset(vf_info
->sriov_vlans
, 0,
1951 sizeof(*vf_info
->sriov_vlans
) * sriov
->num_allowed_vlans
);
1955 vp
->vlan_mode
= QLC_GUEST_VLAN_MODE
;
1958 vp
->vlan_mode
= QLC_NO_VLAN_MODE
;
1962 vp
->vlan_mode
= QLC_PVID_MODE
;
1963 qlcnic_sriov_add_vlan_id(sriov
, vf_info
, vlan
);
1968 netdev_info(netdev
, "Setting VLAN %d, QoS %d, for VF %d\n",
1973 static __u32
qlcnic_sriov_get_vf_vlan(struct qlcnic_adapter
*adapter
,
1974 struct qlcnic_vport
*vp
, int vf
)
1978 switch (vp
->vlan_mode
) {
1982 case QLC_GUEST_VLAN_MODE
:
1985 case QLC_NO_VLAN_MODE
:
1989 netdev_info(adapter
->netdev
, "Invalid VLAN mode = %d for VF %d\n",
1996 int qlcnic_sriov_get_vf_config(struct net_device
*netdev
,
1997 int vf
, struct ifla_vf_info
*ivi
)
1999 struct qlcnic_adapter
*adapter
= netdev_priv(netdev
);
2000 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
2001 struct qlcnic_vport
*vp
;
2003 if (!qlcnic_sriov_pf_check(adapter
))
2006 if (vf
>= sriov
->num_vfs
)
2009 vp
= sriov
->vf_info
[vf
].vp
;
2010 memcpy(&ivi
->mac
, vp
->mac
, ETH_ALEN
);
2011 ivi
->vlan
= qlcnic_sriov_get_vf_vlan(adapter
, vp
, vf
);
2013 ivi
->spoofchk
= vp
->spoofchk
;
2014 if (vp
->max_tx_bw
== MAX_BW
)
2015 ivi
->max_tx_rate
= 0;
2017 ivi
->max_tx_rate
= vp
->max_tx_bw
* 100;
2018 if (vp
->min_tx_bw
== MIN_BW
)
2019 ivi
->min_tx_rate
= 0;
2021 ivi
->min_tx_rate
= vp
->min_tx_bw
* 100;
2027 int qlcnic_sriov_set_vf_spoofchk(struct net_device
*netdev
, int vf
, bool chk
)
2029 struct qlcnic_adapter
*adapter
= netdev_priv(netdev
);
2030 struct qlcnic_sriov
*sriov
= adapter
->ahw
->sriov
;
2031 struct qlcnic_vf_info
*vf_info
;
2032 struct qlcnic_vport
*vp
;
2034 if (!qlcnic_sriov_pf_check(adapter
))
2037 if (vf
>= sriov
->num_vfs
)
2040 vf_info
= &sriov
->vf_info
[vf
];
2042 if (test_bit(QLC_BC_VF_STATE
, &vf_info
->state
)) {
2044 "Spoof check change failed for VF %d, as VF driver is loaded. Please unload VF driver and retry the operation\n",