cxgb4: update supported DCB version
- In CXGB4_DCB_STATE_FW_INCOMPLETE state check if the dcb version is changed and update the dcb supported version. - Also, fill the priority code point value for priority based flow control. Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
992bea8e40
commit
c3ec8bcceb
@ -114,6 +114,24 @@ void cxgb4_dcb_reset(struct net_device *dev)
|
|||||||
cxgb4_dcb_state_init(dev);
|
cxgb4_dcb_state_init(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* update the dcb port support, if version is IEEE then set it to
|
||||||
|
* FW_PORT_DCB_VER_IEEE and if DCB_CAP_DCBX_VER_CEE is already set then
|
||||||
|
* clear that. and if it is set to CEE then set dcb supported to
|
||||||
|
* DCB_CAP_DCBX_VER_CEE & if DCB_CAP_DCBX_VER_IEEE is set, clear it
|
||||||
|
*/
|
||||||
|
static inline void cxgb4_dcb_update_support(struct port_dcb_info *dcb)
|
||||||
|
{
|
||||||
|
if (dcb->dcb_version == FW_PORT_DCB_VER_IEEE) {
|
||||||
|
if (dcb->supported & DCB_CAP_DCBX_VER_CEE)
|
||||||
|
dcb->supported &= ~DCB_CAP_DCBX_VER_CEE;
|
||||||
|
dcb->supported |= DCB_CAP_DCBX_VER_IEEE;
|
||||||
|
} else if (dcb->dcb_version == FW_PORT_DCB_VER_CEE1D01) {
|
||||||
|
if (dcb->supported & DCB_CAP_DCBX_VER_IEEE)
|
||||||
|
dcb->supported &= ~DCB_CAP_DCBX_VER_IEEE;
|
||||||
|
dcb->supported |= DCB_CAP_DCBX_VER_CEE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Finite State machine for Data Center Bridging.
|
/* Finite State machine for Data Center Bridging.
|
||||||
*/
|
*/
|
||||||
void cxgb4_dcb_state_fsm(struct net_device *dev,
|
void cxgb4_dcb_state_fsm(struct net_device *dev,
|
||||||
@ -165,6 +183,15 @@ void cxgb4_dcb_state_fsm(struct net_device *dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case CXGB4_DCB_STATE_FW_INCOMPLETE: {
|
case CXGB4_DCB_STATE_FW_INCOMPLETE: {
|
||||||
|
if (transition_to != CXGB4_DCB_INPUT_FW_DISABLED) {
|
||||||
|
/* during this CXGB4_DCB_STATE_FW_INCOMPLETE state,
|
||||||
|
* check if the dcb version is changed (there can be
|
||||||
|
* mismatch in default config & the negotiated switch
|
||||||
|
* configuration at FW, so update the dcb support
|
||||||
|
* accordingly.
|
||||||
|
*/
|
||||||
|
cxgb4_dcb_update_support(dcb);
|
||||||
|
}
|
||||||
switch (transition_to) {
|
switch (transition_to) {
|
||||||
case CXGB4_DCB_INPUT_FW_ENABLED: {
|
case CXGB4_DCB_INPUT_FW_ENABLED: {
|
||||||
/* we're alreaady in firmware DCB mode */
|
/* we're alreaady in firmware DCB mode */
|
||||||
|
@ -433,10 +433,12 @@ struct l2t_entry *cxgb4_l2t_get(struct l2t_data *d, struct neighbour *neigh,
|
|||||||
else
|
else
|
||||||
lport = netdev2pinfo(physdev)->lport;
|
lport = netdev2pinfo(physdev)->lport;
|
||||||
|
|
||||||
if (is_vlan_dev(neigh->dev))
|
if (is_vlan_dev(neigh->dev)) {
|
||||||
vlan = vlan_dev_vlan_id(neigh->dev);
|
vlan = vlan_dev_vlan_id(neigh->dev);
|
||||||
else
|
vlan |= vlan_dev_get_egress_qos_mask(neigh->dev, priority);
|
||||||
|
} else {
|
||||||
vlan = VLAN_NONE;
|
vlan = VLAN_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
write_lock_bh(&d->lock);
|
write_lock_bh(&d->lock);
|
||||||
for (e = d->l2tab[hash].first; e; e = e->next)
|
for (e = d->l2tab[hash].first; e; e = e->next)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user