Deleted Added
full compact
ixgbe_vf.c (302408) ixgbe_vf.c (320897)
1/******************************************************************************
2
1/******************************************************************************
2
3 Copyright (c) 2001-2015, Intel Corporation
3 Copyright (c) 2001-2017, Intel Corporation
4 All rights reserved.
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
7 modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
8
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
10 this list of conditions and the following disclaimer.
11
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
11
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
14 documentation and/or other materials provided with the distribution.
15
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
15
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
18 this software without specific prior written permission.
19
19
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
33/*$FreeBSD: stable/11/sys/dev/ixgbe/ixgbe_vf.c 292674 2015-12-23 22:45:17Z sbruno $*/
33/*$FreeBSD: stable/11/sys/dev/ixgbe/ixgbe_vf.c 320897 2017-07-11 21:25:07Z erj $*/
34
35
34
35
36#include "ixgbe_api.h"
37#include "ixgbe_type.h"
38#include "ixgbe_vf.h"
36#include "ixgbe.h"
39
40#ifndef IXGBE_VFWRITE_REG
41#define IXGBE_VFWRITE_REG IXGBE_WRITE_REG
42#endif
43#ifndef IXGBE_VFREAD_REG
44#define IXGBE_VFREAD_REG IXGBE_READ_REG
45#endif
46

--- 13 unchanged lines hidden (view full) ---

60 hw->mac.ops.reset_hw = ixgbe_reset_hw_vf;
61 hw->mac.ops.start_hw = ixgbe_start_hw_vf;
62 /* Cannot clear stats on VF */
63 hw->mac.ops.clear_hw_cntrs = NULL;
64 hw->mac.ops.get_media_type = NULL;
65 hw->mac.ops.get_mac_addr = ixgbe_get_mac_addr_vf;
66 hw->mac.ops.stop_adapter = ixgbe_stop_adapter_vf;
67 hw->mac.ops.get_bus_info = NULL;
37
38#ifndef IXGBE_VFWRITE_REG
39#define IXGBE_VFWRITE_REG IXGBE_WRITE_REG
40#endif
41#ifndef IXGBE_VFREAD_REG
42#define IXGBE_VFREAD_REG IXGBE_READ_REG
43#endif
44

--- 13 unchanged lines hidden (view full) ---

58 hw->mac.ops.reset_hw = ixgbe_reset_hw_vf;
59 hw->mac.ops.start_hw = ixgbe_start_hw_vf;
60 /* Cannot clear stats on VF */
61 hw->mac.ops.clear_hw_cntrs = NULL;
62 hw->mac.ops.get_media_type = NULL;
63 hw->mac.ops.get_mac_addr = ixgbe_get_mac_addr_vf;
64 hw->mac.ops.stop_adapter = ixgbe_stop_adapter_vf;
65 hw->mac.ops.get_bus_info = NULL;
66 hw->mac.ops.negotiate_api_version = ixgbevf_negotiate_api_version;
68
69 /* Link */
70 hw->mac.ops.setup_link = ixgbe_setup_mac_link_vf;
71 hw->mac.ops.check_link = ixgbe_check_mac_link_vf;
72 hw->mac.ops.get_link_capabilities = NULL;
73
74 /* RAR, Multicast, VLAN */
75 hw->mac.ops.set_rar = ixgbe_set_rar_vf;
76 hw->mac.ops.set_uc_addr = ixgbevf_set_uc_addr_vf;
77 hw->mac.ops.init_rx_addrs = NULL;
78 hw->mac.ops.update_mc_addr_list = ixgbe_update_mc_addr_list_vf;
67
68 /* Link */
69 hw->mac.ops.setup_link = ixgbe_setup_mac_link_vf;
70 hw->mac.ops.check_link = ixgbe_check_mac_link_vf;
71 hw->mac.ops.get_link_capabilities = NULL;
72
73 /* RAR, Multicast, VLAN */
74 hw->mac.ops.set_rar = ixgbe_set_rar_vf;
75 hw->mac.ops.set_uc_addr = ixgbevf_set_uc_addr_vf;
76 hw->mac.ops.init_rx_addrs = NULL;
77 hw->mac.ops.update_mc_addr_list = ixgbe_update_mc_addr_list_vf;
78 hw->mac.ops.update_xcast_mode = ixgbevf_update_xcast_mode;
79 hw->mac.ops.enable_mc = NULL;
80 hw->mac.ops.disable_mc = NULL;
81 hw->mac.ops.clear_vfta = NULL;
82 hw->mac.ops.set_vfta = ixgbe_set_vfta_vf;
79 hw->mac.ops.enable_mc = NULL;
80 hw->mac.ops.disable_mc = NULL;
81 hw->mac.ops.clear_vfta = NULL;
82 hw->mac.ops.set_vfta = ixgbe_set_vfta_vf;
83 hw->mac.ops.set_rlpml = ixgbevf_rlpml_set_vf;
83
84 hw->mac.max_tx_queues = 1;
85 hw->mac.max_rx_queues = 1;
86
87 hw->mbx.ops.init_params = ixgbe_init_mbx_params_vf;
88
89 return IXGBE_SUCCESS;
90}

--- 133 unchanged lines hidden (view full) ---

224 IXGBE_VF_PERMADDR_MSG_LEN, 0);
225 if (ret_val)
226 return ret_val;
227
228 if (msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK) &&
229 msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_NACK))
230 return IXGBE_ERR_INVALID_MAC_ADDR;
231
84
85 hw->mac.max_tx_queues = 1;
86 hw->mac.max_rx_queues = 1;
87
88 hw->mbx.ops.init_params = ixgbe_init_mbx_params_vf;
89
90 return IXGBE_SUCCESS;
91}

--- 133 unchanged lines hidden (view full) ---

225 IXGBE_VF_PERMADDR_MSG_LEN, 0);
226 if (ret_val)
227 return ret_val;
228
229 if (msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK) &&
230 msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_NACK))
231 return IXGBE_ERR_INVALID_MAC_ADDR;
232
232 memcpy(hw->mac.perm_addr, addr, IXGBE_ETH_LENGTH_OF_ADDRESS);
233 if (msgbuf[0] == (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK))
234 memcpy(hw->mac.perm_addr, addr, IXGBE_ETH_LENGTH_OF_ADDRESS);
235
233 hw->mac.mc_filter_type = msgbuf[IXGBE_VF_MC_TYPE_WORD];
234
235 return ret_val;
236}
237
238/**
239 * ixgbe_stop_adapter_vf - Generic stop Tx/Rx units
240 * @hw: pointer to hardware structure

--- 75 unchanged lines hidden (view full) ---

316 break;
317 }
318
319 /* vector can only be 12-bits or boundary will be exceeded */
320 vector &= 0xFFF;
321 return vector;
322}
323
236 hw->mac.mc_filter_type = msgbuf[IXGBE_VF_MC_TYPE_WORD];
237
238 return ret_val;
239}
240
241/**
242 * ixgbe_stop_adapter_vf - Generic stop Tx/Rx units
243 * @hw: pointer to hardware structure

--- 75 unchanged lines hidden (view full) ---

319 break;
320 }
321
322 /* vector can only be 12-bits or boundary will be exceeded */
323 vector &= 0xFFF;
324 return vector;
325}
326
324static void ixgbevf_write_msg_read_ack(struct ixgbe_hw *hw,
325 u32 *msg, u16 size)
327static s32 ixgbevf_write_msg_read_ack(struct ixgbe_hw *hw, u32 *msg,
328 u32 *retmsg, u16 size)
326{
327 struct ixgbe_mbx_info *mbx = &hw->mbx;
329{
330 struct ixgbe_mbx_info *mbx = &hw->mbx;
328 u32 retmsg[IXGBE_VFMAILBOX_SIZE];
329 s32 retval = mbx->ops.write_posted(hw, msg, size, 0);
330
331 s32 retval = mbx->ops.write_posted(hw, msg, size, 0);
332
331 if (!retval)
332 mbx->ops.read_posted(hw, retmsg, size, 0);
333 if (retval)
334 return retval;
335
336 return mbx->ops.read_posted(hw, retmsg, size, 0);
333}
334
335/**
336 * ixgbe_set_rar_vf - set device MAC address
337 * @hw: pointer to hardware structure
338 * @index: Receive address register to write
339 * @addr: Address to put into receive address register
340 * @vmdq: VMDq "set" or "pool" index
341 * @enable_addr: set flag that address is active
342 **/
343s32 ixgbe_set_rar_vf(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
344 u32 enable_addr)
345{
337}
338
339/**
340 * ixgbe_set_rar_vf - set device MAC address
341 * @hw: pointer to hardware structure
342 * @index: Receive address register to write
343 * @addr: Address to put into receive address register
344 * @vmdq: VMDq "set" or "pool" index
345 * @enable_addr: set flag that address is active
346 **/
347s32 ixgbe_set_rar_vf(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
348 u32 enable_addr)
349{
346 struct ixgbe_mbx_info *mbx = &hw->mbx;
347 u32 msgbuf[3];
348 u8 *msg_addr = (u8 *)(&msgbuf[1]);
349 s32 ret_val;
350 UNREFERENCED_3PARAMETER(vmdq, enable_addr, index);
351
352 memset(msgbuf, 0, 12);
353 msgbuf[0] = IXGBE_VF_SET_MAC_ADDR;
354 memcpy(msg_addr, addr, 6);
350 u32 msgbuf[3];
351 u8 *msg_addr = (u8 *)(&msgbuf[1]);
352 s32 ret_val;
353 UNREFERENCED_3PARAMETER(vmdq, enable_addr, index);
354
355 memset(msgbuf, 0, 12);
356 msgbuf[0] = IXGBE_VF_SET_MAC_ADDR;
357 memcpy(msg_addr, addr, 6);
355 ret_val = mbx->ops.write_posted(hw, msgbuf, 3, 0);
358 ret_val = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf, 3);
356
359
357 if (!ret_val)
358 ret_val = mbx->ops.read_posted(hw, msgbuf, 3, 0);
359
360 msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
361
362 /* if nacked the address was rejected, use "perm_addr" */
363 if (!ret_val &&
360 msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
361
362 /* if nacked the address was rejected, use "perm_addr" */
363 if (!ret_val &&
364 (msgbuf[0] == (IXGBE_VF_SET_MAC_ADDR | IXGBE_VT_MSGTYPE_NACK)))
364 (msgbuf[0] == (IXGBE_VF_SET_MAC_ADDR | IXGBE_VT_MSGTYPE_NACK))) {
365 ixgbe_get_mac_addr_vf(hw, hw->mac.addr);
365 ixgbe_get_mac_addr_vf(hw, hw->mac.addr);
366 return IXGBE_ERR_MBX;
367 }
366
367 return ret_val;
368}
369
370/**
371 * ixgbe_update_mc_addr_list_vf - Update Multicast addresses
372 * @hw: pointer to the HW structure
373 * @mc_addr_list: array of multicast addresses to program

--- 37 unchanged lines hidden (view full) ---

411 DEBUGOUT1("Hash value = 0x%03X\n", vector);
412 vector_list[i] = (u16)vector;
413 }
414
415 return mbx->ops.write_posted(hw, msgbuf, IXGBE_VFMAILBOX_SIZE, 0);
416}
417
418/**
368
369 return ret_val;
370}
371
372/**
373 * ixgbe_update_mc_addr_list_vf - Update Multicast addresses
374 * @hw: pointer to the HW structure
375 * @mc_addr_list: array of multicast addresses to program

--- 37 unchanged lines hidden (view full) ---

413 DEBUGOUT1("Hash value = 0x%03X\n", vector);
414 vector_list[i] = (u16)vector;
415 }
416
417 return mbx->ops.write_posted(hw, msgbuf, IXGBE_VFMAILBOX_SIZE, 0);
418}
419
420/**
421 * ixgbevf_update_xcast_mode - Update Multicast mode
422 * @hw: pointer to the HW structure
423 * @xcast_mode: new multicast mode
424 *
425 * Updates the Multicast Mode of VF.
426 **/
427s32 ixgbevf_update_xcast_mode(struct ixgbe_hw *hw, int xcast_mode)
428{
429 u32 msgbuf[2];
430 s32 err;
431
432 switch (hw->api_version) {
433 case ixgbe_mbox_api_12:
434 /* New modes were introduced in 1.3 version */
435 if (xcast_mode > IXGBEVF_XCAST_MODE_ALLMULTI)
436 return IXGBE_ERR_FEATURE_NOT_SUPPORTED;
437 /* Fall through */
438 case ixgbe_mbox_api_13:
439 break;
440 default:
441 return IXGBE_ERR_FEATURE_NOT_SUPPORTED;
442 }
443
444 msgbuf[0] = IXGBE_VF_UPDATE_XCAST_MODE;
445 msgbuf[1] = xcast_mode;
446
447 err = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf, 2);
448 if (err)
449 return err;
450
451 msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
452 if (msgbuf[0] == (IXGBE_VF_UPDATE_XCAST_MODE | IXGBE_VT_MSGTYPE_NACK))
453 return IXGBE_ERR_FEATURE_NOT_SUPPORTED;
454 return IXGBE_SUCCESS;
455}
456
457/**
419 * ixgbe_set_vfta_vf - Set/Unset vlan filter table address
420 * @hw: pointer to the HW structure
421 * @vlan: 12 bit VLAN ID
422 * @vind: unused by VF drivers
423 * @vlan_on: if TRUE then set bit, else clear bit
458 * ixgbe_set_vfta_vf - Set/Unset vlan filter table address
459 * @hw: pointer to the HW structure
460 * @vlan: 12 bit VLAN ID
461 * @vind: unused by VF drivers
462 * @vlan_on: if TRUE then set bit, else clear bit
463 * @vlvf_bypass: boolean flag indicating updating default pool is okay
464 *
465 * Turn on/off specified VLAN in the VLAN filter table.
424 **/
466 **/
425s32 ixgbe_set_vfta_vf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on)
467s32 ixgbe_set_vfta_vf(struct ixgbe_hw *hw, u32 vlan, u32 vind,
468 bool vlan_on, bool vlvf_bypass)
426{
469{
427 struct ixgbe_mbx_info *mbx = &hw->mbx;
428 u32 msgbuf[2];
429 s32 ret_val;
470 u32 msgbuf[2];
471 s32 ret_val;
430 UNREFERENCED_1PARAMETER(vind);
472 UNREFERENCED_2PARAMETER(vind, vlvf_bypass);
431
432 msgbuf[0] = IXGBE_VF_SET_VLAN;
433 msgbuf[1] = vlan;
434 /* Setting the 8 bit field MSG INFO to TRUE indicates "add" */
435 msgbuf[0] |= vlan_on << IXGBE_VT_MSGINFO_SHIFT;
436
473
474 msgbuf[0] = IXGBE_VF_SET_VLAN;
475 msgbuf[1] = vlan;
476 /* Setting the 8 bit field MSG INFO to TRUE indicates "add" */
477 msgbuf[0] |= vlan_on << IXGBE_VT_MSGINFO_SHIFT;
478
437 ret_val = mbx->ops.write_posted(hw, msgbuf, 2, 0);
438 if (!ret_val)
439 ret_val = mbx->ops.read_posted(hw, msgbuf, 1, 0);
440
479 ret_val = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf, 2);
441 if (!ret_val && (msgbuf[0] & IXGBE_VT_MSGTYPE_ACK))
442 return IXGBE_SUCCESS;
443
444 return ret_val | (msgbuf[0] & IXGBE_VT_MSGTYPE_NACK);
445}
446
447/**
448 * ixgbe_get_num_of_tx_queues_vf - Get number of TX queues

--- 30 unchanged lines hidden (view full) ---

479 for (i = 0; i < IXGBE_ETH_LENGTH_OF_ADDRESS; i++)
480 mac_addr[i] = hw->mac.perm_addr[i];
481
482 return IXGBE_SUCCESS;
483}
484
485s32 ixgbevf_set_uc_addr_vf(struct ixgbe_hw *hw, u32 index, u8 *addr)
486{
480 if (!ret_val && (msgbuf[0] & IXGBE_VT_MSGTYPE_ACK))
481 return IXGBE_SUCCESS;
482
483 return ret_val | (msgbuf[0] & IXGBE_VT_MSGTYPE_NACK);
484}
485
486/**
487 * ixgbe_get_num_of_tx_queues_vf - Get number of TX queues

--- 30 unchanged lines hidden (view full) ---

518 for (i = 0; i < IXGBE_ETH_LENGTH_OF_ADDRESS; i++)
519 mac_addr[i] = hw->mac.perm_addr[i];
520
521 return IXGBE_SUCCESS;
522}
523
524s32 ixgbevf_set_uc_addr_vf(struct ixgbe_hw *hw, u32 index, u8 *addr)
525{
487 struct ixgbe_mbx_info *mbx = &hw->mbx;
488 u32 msgbuf[3];
526 u32 msgbuf[3], msgbuf_chk;
489 u8 *msg_addr = (u8 *)(&msgbuf[1]);
490 s32 ret_val;
491
492 memset(msgbuf, 0, sizeof(msgbuf));
493 /*
494 * If index is one then this is the start of a new list and needs
495 * indication to the PF so it can do it's own list management.
496 * If it is zero then that tells the PF to just clear all of
497 * this VF's macvlans and there is no new list.
498 */
499 msgbuf[0] |= index << IXGBE_VT_MSGINFO_SHIFT;
500 msgbuf[0] |= IXGBE_VF_SET_MACVLAN;
527 u8 *msg_addr = (u8 *)(&msgbuf[1]);
528 s32 ret_val;
529
530 memset(msgbuf, 0, sizeof(msgbuf));
531 /*
532 * If index is one then this is the start of a new list and needs
533 * indication to the PF so it can do it's own list management.
534 * If it is zero then that tells the PF to just clear all of
535 * this VF's macvlans and there is no new list.
536 */
537 msgbuf[0] |= index << IXGBE_VT_MSGINFO_SHIFT;
538 msgbuf[0] |= IXGBE_VF_SET_MACVLAN;
539 msgbuf_chk = msgbuf[0];
501 if (addr)
502 memcpy(msg_addr, addr, 6);
540 if (addr)
541 memcpy(msg_addr, addr, 6);
503 ret_val = mbx->ops.write_posted(hw, msgbuf, 3, 0);
504
542
505 if (!ret_val)
506 ret_val = mbx->ops.read_posted(hw, msgbuf, 3, 0);
543 ret_val = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf, 3);
544 if (!ret_val) {
545 msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
507
546
508 msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
547 if (msgbuf[0] == (msgbuf_chk | IXGBE_VT_MSGTYPE_NACK))
548 return IXGBE_ERR_OUT_OF_MEM;
549 }
509
550
510 if (!ret_val)
511 if (msgbuf[0] == (IXGBE_VF_SET_MACVLAN | IXGBE_VT_MSGTYPE_NACK))
512 ret_val = IXGBE_ERR_OUT_OF_MEM;
513
514 return ret_val;
515}
516
517/**
518 * ixgbe_setup_mac_link_vf - Setup MAC link settings
519 * @hw: pointer to hardware structure
520 * @speed: new link speed
521 * @autoneg: TRUE if autonegotiation enabled

--- 52 unchanged lines hidden (view full) ---

574 if (!(links_reg & IXGBE_LINKS_UP))
575 goto out;
576 }
577 }
578
579 switch (links_reg & IXGBE_LINKS_SPEED_82599) {
580 case IXGBE_LINKS_SPEED_10G_82599:
581 *speed = IXGBE_LINK_SPEED_10GB_FULL;
551 return ret_val;
552}
553
554/**
555 * ixgbe_setup_mac_link_vf - Setup MAC link settings
556 * @hw: pointer to hardware structure
557 * @speed: new link speed
558 * @autoneg: TRUE if autonegotiation enabled

--- 52 unchanged lines hidden (view full) ---

611 if (!(links_reg & IXGBE_LINKS_UP))
612 goto out;
613 }
614 }
615
616 switch (links_reg & IXGBE_LINKS_SPEED_82599) {
617 case IXGBE_LINKS_SPEED_10G_82599:
618 *speed = IXGBE_LINK_SPEED_10GB_FULL;
619 if (hw->mac.type >= ixgbe_mac_X550) {
620 if (links_reg & IXGBE_LINKS_SPEED_NON_STD)
621 *speed = IXGBE_LINK_SPEED_2_5GB_FULL;
622 }
582 break;
583 case IXGBE_LINKS_SPEED_1G_82599:
584 *speed = IXGBE_LINK_SPEED_1GB_FULL;
585 break;
586 case IXGBE_LINKS_SPEED_100_82599:
587 *speed = IXGBE_LINK_SPEED_100_FULL;
623 break;
624 case IXGBE_LINKS_SPEED_1G_82599:
625 *speed = IXGBE_LINK_SPEED_1GB_FULL;
626 break;
627 case IXGBE_LINKS_SPEED_100_82599:
628 *speed = IXGBE_LINK_SPEED_100_FULL;
629 if (hw->mac.type == ixgbe_mac_X550) {
630 if (links_reg & IXGBE_LINKS_SPEED_NON_STD)
631 *speed = IXGBE_LINK_SPEED_5GB_FULL;
632 }
588 break;
633 break;
634 case IXGBE_LINKS_SPEED_10_X550EM_A:
635 *speed = IXGBE_LINK_SPEED_UNKNOWN;
636 /* Since Reserved in older MAC's */
637 if (hw->mac.type >= ixgbe_mac_X550)
638 *speed = IXGBE_LINK_SPEED_10_FULL;
639 break;
640 default:
641 *speed = IXGBE_LINK_SPEED_UNKNOWN;
589 }
590
591 /* if the read failed it could just be a mailbox collision, best wait
592 * until we are called again and don't report an error
593 */
594 if (mbx->ops.read(hw, &in_msg, 1, 0))
595 goto out;
596

--- 20 unchanged lines hidden (view full) ---

617 return ret_val;
618}
619
620/**
621 * ixgbevf_rlpml_set_vf - Set the maximum receive packet length
622 * @hw: pointer to the HW structure
623 * @max_size: value to assign to max frame size
624 **/
642 }
643
644 /* if the read failed it could just be a mailbox collision, best wait
645 * until we are called again and don't report an error
646 */
647 if (mbx->ops.read(hw, &in_msg, 1, 0))
648 goto out;
649

--- 20 unchanged lines hidden (view full) ---

670 return ret_val;
671}
672
673/**
674 * ixgbevf_rlpml_set_vf - Set the maximum receive packet length
675 * @hw: pointer to the HW structure
676 * @max_size: value to assign to max frame size
677 **/
625void ixgbevf_rlpml_set_vf(struct ixgbe_hw *hw, u16 max_size)
678s32 ixgbevf_rlpml_set_vf(struct ixgbe_hw *hw, u16 max_size)
626{
627 u32 msgbuf[2];
679{
680 u32 msgbuf[2];
681 s32 retval;
628
629 msgbuf[0] = IXGBE_VF_SET_LPE;
630 msgbuf[1] = max_size;
682
683 msgbuf[0] = IXGBE_VF_SET_LPE;
684 msgbuf[1] = max_size;
631 ixgbevf_write_msg_read_ack(hw, msgbuf, 2);
685
686 retval = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf, 2);
687 if (retval)
688 return retval;
689 if ((msgbuf[0] & IXGBE_VF_SET_LPE) &&
690 (msgbuf[0] & IXGBE_VT_MSGTYPE_NACK))
691 return IXGBE_ERR_MBX;
692
693 return 0;
632}
633
634/**
635 * ixgbevf_negotiate_api_version - Negotiate supported API version
636 * @hw: pointer to the HW structure
637 * @api: integer containing requested API version
638 **/
639int ixgbevf_negotiate_api_version(struct ixgbe_hw *hw, int api)
640{
641 int err;
642 u32 msg[3];
643
644 /* Negotiate the mailbox API version */
645 msg[0] = IXGBE_VF_API_NEGOTIATE;
646 msg[1] = api;
647 msg[2] = 0;
694}
695
696/**
697 * ixgbevf_negotiate_api_version - Negotiate supported API version
698 * @hw: pointer to the HW structure
699 * @api: integer containing requested API version
700 **/
701int ixgbevf_negotiate_api_version(struct ixgbe_hw *hw, int api)
702{
703 int err;
704 u32 msg[3];
705
706 /* Negotiate the mailbox API version */
707 msg[0] = IXGBE_VF_API_NEGOTIATE;
708 msg[1] = api;
709 msg[2] = 0;
648 err = hw->mbx.ops.write_posted(hw, msg, 3, 0);
649
710
650 if (!err)
651 err = hw->mbx.ops.read_posted(hw, msg, 3, 0);
652
711 err = ixgbevf_write_msg_read_ack(hw, msg, msg, 3);
653 if (!err) {
654 msg[0] &= ~IXGBE_VT_MSGTYPE_CTS;
655
656 /* Store value and return 0 on success */
657 if (msg[0] == (IXGBE_VF_API_NEGOTIATE | IXGBE_VT_MSGTYPE_ACK)) {
658 hw->api_version = api;
659 return 0;
660 }

--- 8 unchanged lines hidden (view full) ---

669 unsigned int *default_tc)
670{
671 int err;
672 u32 msg[5];
673
674 /* do nothing if API doesn't support ixgbevf_get_queues */
675 switch (hw->api_version) {
676 case ixgbe_mbox_api_11:
712 if (!err) {
713 msg[0] &= ~IXGBE_VT_MSGTYPE_CTS;
714
715 /* Store value and return 0 on success */
716 if (msg[0] == (IXGBE_VF_API_NEGOTIATE | IXGBE_VT_MSGTYPE_ACK)) {
717 hw->api_version = api;
718 return 0;
719 }

--- 8 unchanged lines hidden (view full) ---

728 unsigned int *default_tc)
729{
730 int err;
731 u32 msg[5];
732
733 /* do nothing if API doesn't support ixgbevf_get_queues */
734 switch (hw->api_version) {
735 case ixgbe_mbox_api_11:
736 case ixgbe_mbox_api_12:
737 case ixgbe_mbox_api_13:
677 break;
678 default:
679 return 0;
680 }
681
682 /* Fetch queue configuration from the PF */
683 msg[0] = IXGBE_VF_GET_QUEUES;
684 msg[1] = msg[2] = msg[3] = msg[4] = 0;
738 break;
739 default:
740 return 0;
741 }
742
743 /* Fetch queue configuration from the PF */
744 msg[0] = IXGBE_VF_GET_QUEUES;
745 msg[1] = msg[2] = msg[3] = msg[4] = 0;
685 err = hw->mbx.ops.write_posted(hw, msg, 5, 0);
686
746
687 if (!err)
688 err = hw->mbx.ops.read_posted(hw, msg, 5, 0);
689
747 err = ixgbevf_write_msg_read_ack(hw, msg, msg, 5);
690 if (!err) {
691 msg[0] &= ~IXGBE_VT_MSGTYPE_CTS;
692
693 /*
694 * if we we didn't get an ACK there must have been
695 * some sort of mailbox error so we should treat it
696 * as such
697 */

--- 27 unchanged lines hidden ---
748 if (!err) {
749 msg[0] &= ~IXGBE_VT_MSGTYPE_CTS;
750
751 /*
752 * if we we didn't get an ACK there must have been
753 * some sort of mailbox error so we should treat it
754 * as such
755 */

--- 27 unchanged lines hidden ---