|
@@ -499,6 +499,10 @@ void ixgbe_configure_fcoe(struct ixgbe_adapter *adapter)
|
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
struct ixgbe_fcoe *fcoe = &adapter->fcoe;
|
|
|
struct ixgbe_ring_feature *f = &adapter->ring_feature[RING_F_FCOE];
|
|
|
+#ifdef CONFIG_IXGBE_DCB
|
|
|
+ u8 tc;
|
|
|
+ u32 up2tc;
|
|
|
+#endif
|
|
|
|
|
|
/* create the pool for ddp if not created yet */
|
|
|
if (!fcoe->pool) {
|
|
@@ -540,6 +544,17 @@ void ixgbe_configure_fcoe(struct ixgbe_adapter *adapter)
|
|
|
IXGBE_FCRXCTRL_FCOELLI |
|
|
|
IXGBE_FCRXCTRL_FCCRCBO |
|
|
|
(FC_FCOE_VER << IXGBE_FCRXCTRL_FCOEVER_SHIFT));
|
|
|
+#ifdef CONFIG_IXGBE_DCB
|
|
|
+ up2tc = IXGBE_READ_REG(&adapter->hw, IXGBE_RTTUP2TC);
|
|
|
+ for (i = 0; i < MAX_USER_PRIORITY; i++) {
|
|
|
+ tc = (u8)(up2tc >> (i * IXGBE_RTTUP2TC_UP_SHIFT));
|
|
|
+ tc &= (MAX_TRAFFIC_CLASS - 1);
|
|
|
+ if (fcoe->tc == tc) {
|
|
|
+ fcoe->up = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -671,19 +686,7 @@ out_disable:
|
|
|
*/
|
|
|
u8 ixgbe_fcoe_getapp(struct ixgbe_adapter *adapter)
|
|
|
{
|
|
|
- int i;
|
|
|
- u8 tc;
|
|
|
- u32 up2tc;
|
|
|
-
|
|
|
- up2tc = IXGBE_READ_REG(&adapter->hw, IXGBE_RTTUP2TC);
|
|
|
- for (i = 0; i < MAX_USER_PRIORITY; i++) {
|
|
|
- tc = (u8)(up2tc >> (i * IXGBE_RTTUP2TC_UP_SHIFT));
|
|
|
- tc &= (MAX_TRAFFIC_CLASS - 1);
|
|
|
- if (adapter->fcoe.tc == tc)
|
|
|
- return 1 << i;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return 1 << adapter->fcoe.up;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -710,6 +713,7 @@ u8 ixgbe_fcoe_setapp(struct ixgbe_adapter *adapter, u8 up)
|
|
|
up2tc >>= (i * IXGBE_RTTUP2TC_UP_SHIFT);
|
|
|
up2tc &= (MAX_TRAFFIC_CLASS - 1);
|
|
|
adapter->fcoe.tc = (u8)up2tc;
|
|
|
+ adapter->fcoe.up = i;
|
|
|
return 0;
|
|
|
}
|
|
|
}
|