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 --- |