aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe/ixgbe_dcb_82599.c
diff options
context:
space:
mode:
authorJohn Fastabend <john.r.fastabend@intel.com>2011-02-23 00:58:19 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2011-03-12 07:12:54 -0500
commit17049d30c2dec6f26d6165cc135578f9e41d53d3 (patch)
treeb58a6c005d89c15a58213cc2e62e9d4de81d8c37 /drivers/net/ixgbe/ixgbe_dcb_82599.c
parent3b97fd695453ced96f22bdf1a84453f6744d25cc (diff)
ixgbe: IEEE 802.1Qaz, implement priority assignment table
This patch adds support to use the priority assignment table in the ieee_ets structure to map priorities to traffic classes. Previously ixgbe only supported a 1:1 mapping. Now we can enable and disable hardware DCB support when multiple traffic classes are actually being used. This allows the default case all priorities mapped to traffic class 0 to work in normal hardware mode and utilize the full packet buffer. This patch does not address putting the hardware in 4TC mode so packet buffer space may be underutilized in this case. A follow up patch can address this optimization. But at least we have the hooks to do this now. Also CEE will behave as it always has and map priorities 1:1 with traffic classes. 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_82599.c')
-rw-r--r--drivers/net/ixgbe/ixgbe_dcb_82599.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/net/ixgbe/ixgbe_dcb_82599.c b/drivers/net/ixgbe/ixgbe_dcb_82599.c
index beaa1c1c1e67..0a482bbf1bd2 100644
--- a/drivers/net/ixgbe/ixgbe_dcb_82599.c
+++ b/drivers/net/ixgbe/ixgbe_dcb_82599.c
@@ -85,7 +85,8 @@ s32 ixgbe_dcb_config_rx_arbiter_82599(struct ixgbe_hw *hw,
85 u16 *refill, 85 u16 *refill,
86 u16 *max, 86 u16 *max,
87 u8 *bwg_id, 87 u8 *bwg_id,
88 u8 *prio_type) 88 u8 *prio_type,
89 u8 *prio_tc)
89{ 90{
90 u32 reg = 0; 91 u32 reg = 0;
91 u32 credit_refill = 0; 92 u32 credit_refill = 0;
@@ -102,7 +103,7 @@ s32 ixgbe_dcb_config_rx_arbiter_82599(struct ixgbe_hw *hw,
102 /* Map all traffic classes to their UP, 1 to 1 */ 103 /* Map all traffic classes to their UP, 1 to 1 */
103 reg = 0; 104 reg = 0;
104 for (i = 0; i < MAX_TRAFFIC_CLASS; i++) 105 for (i = 0; i < MAX_TRAFFIC_CLASS; i++)
105 reg |= (i << (i * IXGBE_RTRUP2TC_UP_SHIFT)); 106 reg |= (prio_tc[i] << (i * IXGBE_RTRUP2TC_UP_SHIFT));
106 IXGBE_WRITE_REG(hw, IXGBE_RTRUP2TC, reg); 107 IXGBE_WRITE_REG(hw, IXGBE_RTRUP2TC, reg);
107 108
108 /* Configure traffic class credits and priority */ 109 /* Configure traffic class credits and priority */
@@ -194,7 +195,8 @@ s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
194 u16 *refill, 195 u16 *refill,
195 u16 *max, 196 u16 *max,
196 u8 *bwg_id, 197 u8 *bwg_id,
197 u8 *prio_type) 198 u8 *prio_type,
199 u8 *prio_tc)
198{ 200{
199 u32 reg; 201 u32 reg;
200 u8 i; 202 u8 i;
@@ -211,7 +213,7 @@ s32 ixgbe_dcb_config_tx_data_arbiter_82599(struct ixgbe_hw *hw,
211 /* Map all traffic classes to their UP, 1 to 1 */ 213 /* Map all traffic classes to their UP, 1 to 1 */
212 reg = 0; 214 reg = 0;
213 for (i = 0; i < MAX_TRAFFIC_CLASS; i++) 215 for (i = 0; i < MAX_TRAFFIC_CLASS; i++)
214 reg |= (i << (i * IXGBE_RTTUP2TC_UP_SHIFT)); 216 reg |= (prio_tc[i] << (i * IXGBE_RTTUP2TC_UP_SHIFT));
215 IXGBE_WRITE_REG(hw, IXGBE_RTTUP2TC, reg); 217 IXGBE_WRITE_REG(hw, IXGBE_RTTUP2TC, reg);
216 218
217 /* Configure traffic class credits and priority */ 219 /* Configure traffic class credits and priority */
@@ -424,15 +426,16 @@ static s32 ixgbe_dcb_config_82599(struct ixgbe_hw *hw)
424 */ 426 */
425s32 ixgbe_dcb_hw_config_82599(struct ixgbe_hw *hw, 427s32 ixgbe_dcb_hw_config_82599(struct ixgbe_hw *hw,
426 u8 rx_pba, u8 pfc_en, u16 *refill, 428 u8 rx_pba, u8 pfc_en, u16 *refill,
427 u16 *max, u8 *bwg_id, u8 *prio_type) 429 u16 *max, u8 *bwg_id, u8 *prio_type, u8 *prio_tc)
428{ 430{
429 ixgbe_dcb_config_packet_buffers_82599(hw, rx_pba); 431 ixgbe_dcb_config_packet_buffers_82599(hw, rx_pba);
430 ixgbe_dcb_config_82599(hw); 432 ixgbe_dcb_config_82599(hw);
431 ixgbe_dcb_config_rx_arbiter_82599(hw, refill, max, bwg_id, prio_type); 433 ixgbe_dcb_config_rx_arbiter_82599(hw, refill, max, bwg_id,
434 prio_type, prio_tc);
432 ixgbe_dcb_config_tx_desc_arbiter_82599(hw, refill, max, 435 ixgbe_dcb_config_tx_desc_arbiter_82599(hw, refill, max,
433 bwg_id, prio_type); 436 bwg_id, prio_type);
434 ixgbe_dcb_config_tx_data_arbiter_82599(hw, refill, max, 437 ixgbe_dcb_config_tx_data_arbiter_82599(hw, refill, max,
435 bwg_id, prio_type); 438 bwg_id, prio_type, prio_tc);
436 ixgbe_dcb_config_pfc_82599(hw, pfc_en); 439 ixgbe_dcb_config_pfc_82599(hw, pfc_en);
437 ixgbe_dcb_config_tc_stats_82599(hw); 440 ixgbe_dcb_config_tc_stats_82599(hw);
438 441