aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe/ixgbe_dcb_nl.c
diff options
context:
space:
mode:
authorJohn Fastabend <john.r.fastabend@intel.com>2011-02-23 00:58:14 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2011-03-12 07:12:35 -0500
commit3b97fd695453ced96f22bdf1a84453f6744d25cc (patch)
treeb14fae0ed8354fa673f8ca02d1b8578a13b46208 /drivers/net/ixgbe/ixgbe_dcb_nl.c
parent8187cd485b1a74b6ae258786b9ade3ecaafec318 (diff)
ixgbe: DCB, missed translation from 8021Qaz TSA to CEE link strict
The patch below allowed IEEE 802.1Qaz and CEE DCB hardware configurations to use common hardware set routines, commit 88eb696cc6a7af8f9272266965b1a4dd7d6a931b Author: John Fastabend <john.r.fastabend@intel.com> Date: Thu Feb 10 03:02:11 2011 -0800 ixgbe: DCB, abstract out dcb_config from DCB hardware configuration However the case when CEE link strict and group strict are set was missed and are currently being mapped incorrectly in some configurations. This patch resolves this. Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_dcb_nl.c')
-rw-r--r--drivers/net/ixgbe/ixgbe_dcb_nl.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/net/ixgbe/ixgbe_dcb_nl.c b/drivers/net/ixgbe/ixgbe_dcb_nl.c
index 91ff51c53b0..8abef8d588f 100644
--- a/drivers/net/ixgbe/ixgbe_dcb_nl.c
+++ b/drivers/net/ixgbe/ixgbe_dcb_nl.c
@@ -642,8 +642,9 @@ static int ixgbe_dcbnl_ieee_setets(struct net_device *dev,
642{ 642{
643 struct ixgbe_adapter *adapter = netdev_priv(dev); 643 struct ixgbe_adapter *adapter = netdev_priv(dev);
644 __u16 refill[IEEE_8021QAZ_MAX_TCS], max[IEEE_8021QAZ_MAX_TCS]; 644 __u16 refill[IEEE_8021QAZ_MAX_TCS], max[IEEE_8021QAZ_MAX_TCS];
645 __u8 prio_type[IEEE_8021QAZ_MAX_TCS];
645 int max_frame = dev->mtu + ETH_HLEN + ETH_FCS_LEN; 646 int max_frame = dev->mtu + ETH_HLEN + ETH_FCS_LEN;
646 int err; 647 int i, err;
647 /* naively give each TC a bwg to map onto CEE hardware */ 648 /* naively give each TC a bwg to map onto CEE hardware */
648 __u8 bwg_id[IEEE_8021QAZ_MAX_TCS] = {0, 1, 2, 3, 4, 5, 6, 7}; 649 __u8 bwg_id[IEEE_8021QAZ_MAX_TCS] = {0, 1, 2, 3, 4, 5, 6, 7};
649 650
@@ -659,9 +660,28 @@ static int ixgbe_dcbnl_ieee_setets(struct net_device *dev,
659 660
660 memcpy(adapter->ixgbe_ieee_ets, ets, sizeof(*adapter->ixgbe_ieee_ets)); 661 memcpy(adapter->ixgbe_ieee_ets, ets, sizeof(*adapter->ixgbe_ieee_ets));
661 662
663 /* Map TSA onto CEE prio type */
664 for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) {
665 switch (ets->tc_tsa[i]) {
666 case IEEE_8021QAZ_TSA_STRICT:
667 prio_type[i] = 2;
668 break;
669 case IEEE_8021QAZ_TSA_ETS:
670 prio_type[i] = 0;
671 break;
672 default:
673 /* Hardware only supports priority strict or
674 * ETS transmission selection algorithms if
675 * we receive some other value from dcbnl
676 * throw an error
677 */
678 return -EINVAL;
679 }
680 }
681
662 ixgbe_ieee_credits(ets->tc_tx_bw, refill, max, max_frame); 682 ixgbe_ieee_credits(ets->tc_tx_bw, refill, max, max_frame);
663 err = ixgbe_dcb_hw_ets_config(&adapter->hw, refill, max, 683 err = ixgbe_dcb_hw_ets_config(&adapter->hw, refill, max,
664 bwg_id, ets->tc_tsa); 684 bwg_id, prio_type);
665 return err; 685 return err;
666} 686}
667 687