Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3ec8bcc authored by Ganesh Goudar's avatar Ganesh Goudar Committed by David S. Miller
Browse files

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: default avatarGanesh Goudar <ganeshgr@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 992bea8e
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -114,6 +114,24 @@ void cxgb4_dcb_reset(struct net_device *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.
 */
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: {
		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) {
		case CXGB4_DCB_INPUT_FW_ENABLED: {
			/* we're alreaady in firmware DCB mode */
+4 −2
Original line number Diff line number Diff line
@@ -433,10 +433,12 @@ struct l2t_entry *cxgb4_l2t_get(struct l2t_data *d, struct neighbour *neigh,
	else
		lport = netdev2pinfo(physdev)->lport;

	if (is_vlan_dev(neigh->dev))
	if (is_vlan_dev(neigh->dev)) {
		vlan = vlan_dev_vlan_id(neigh->dev);
	else
		vlan |= vlan_dev_get_egress_qos_mask(neigh->dev, priority);
	} else {
		vlan = VLAN_NONE;
	}

	write_lock_bh(&d->lock);
	for (e = d->l2tab[hash].first; e; e = e->next)