/* add q_vector eims value to global eims_enable_mask */
wx->eims_enable_mask |= BIT(v_idx);
wx_write_eitr_vf(q_vector);
}
wx_set_ivar_vf(wx, -1, 1, v_idx);
/* setup eims_other and add value to global eims_enable_mask */
wx->eims_other = BIT(v_idx);
wx->eims_enable_mask |= wx->eims_other;
}
int wx_write_uc_addr_list_vf(struct net_device *netdev)
{ struct wx *wx = netdev_priv(netdev); int count = 0;
if (!netdev_uc_empty(netdev)) { struct netdev_hw_addr *ha;
netdev_for_each_uc_addr(ha, netdev)
wx_set_uc_addr_vf(wx, ++count, ha->addr);
} else { /* * If the list is empty then send message to PF driver to * clear all macvlans on this VF.
*/
wx_set_uc_addr_vf(wx, 0, NULL);
}
return count;
}
/** * wx_configure_tx_ring_vf - Configure Tx ring after Reset * @wx: board private structure * @ring: structure containing ring specific data * * Configure the Tx descriptor ring after a reset.
**/ staticvoid wx_configure_tx_ring_vf(struct wx *wx, struct wx_ring *ring)
{
u8 reg_idx = ring->reg_idx;
u64 tdba = ring->dma;
u32 txdctl = 0; int ret;
/* disable queue to avoid issues while updating state */
wr32(wx, WX_VXTXDCTL(reg_idx), WX_VXTXDCTL_FLUSH);
wr32(wx, WX_VXTDBAL(reg_idx), tdba & DMA_BIT_MASK(32));
wr32(wx, WX_VXTDBAH(reg_idx), tdba >> 32);
wr32(wx, WX_VXTXDCTL(reg_idx), txdctl); /* poll to verify queue is enabled */
ret = read_poll_timeout(rd32, txdctl, txdctl & WX_VXTXDCTL_ENABLE,
1000, 10000, true, wx, WX_VXTXDCTL(reg_idx)); if (ret == -ETIMEDOUT)
wx_err(wx, "Could not enable Tx Queue %d\n", reg_idx);
}
/** * wx_configure_tx_vf - Configure Transmit Unit after Reset * @wx: board private structure * * Configure the Tx unit of the MAC after a reset.
**/ void wx_configure_tx_vf(struct wx *wx)
{
u32 i;
/* Setup the HW Tx Head and Tail descriptor pointers */ for (i = 0; i < wx->num_tx_queues; i++)
wx_configure_tx_ring_vf(wx, wx->tx_ring[i]);
}
/* Fill out hash function seeds */
netdev_rss_key_fill(wx->rss_key, WX_RSS_KEY_SIZE); for (i = 0; i < WX_RSS_KEY_SIZE / 4; i++)
wr32(wx, WX_VXRSSRK(i), wx->rss_key[i]);
for (i = 0, j = 0; i < WX_MAX_RETA_ENTRIES; i++, j++) { if (j == rss_i)
j = 0;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.