MCPcopy Create free account
hub / github.com/F-Stack/f-stack / txgbe_set_rsc

Function txgbe_set_rsc

dpdk/drivers/net/txgbe/txgbe_rxtx.c:4118–4225  ·  view source on GitHub ↗

* txgbe_set_rsc - configure RSC related port HW registers * * Configures the port's RSC related registers. * * @dev port handle * * Returns 0 in case of success or a non-zero error code */

Source from the content-addressed store, hash-verified

4116 * Returns 0 in case of success or a non-zero error code
4117 */
4118static int
4119txgbe_set_rsc(struct rte_eth_dev *dev)
4120{
4121 struct rte_eth_rxmode *rx_conf = &dev->data->dev_conf.rxmode;
4122 struct txgbe_hw *hw = TXGBE_DEV_HW(dev);
4123 struct rte_eth_dev_info dev_info = { 0 };
4124 bool rsc_capable = false;
4125 uint16_t i;
4126 uint32_t rdrxctl;
4127 uint32_t rfctl;
4128
4129 /* Sanity check */
4130 dev->dev_ops->dev_infos_get(dev, &dev_info);
4131 if (dev_info.rx_offload_capa & RTE_ETH_RX_OFFLOAD_TCP_LRO)
4132 rsc_capable = true;
4133
4134 if (!rsc_capable && (rx_conf->offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO)) {
4135 PMD_INIT_LOG(CRIT, "LRO is requested on HW that doesn't "
4136 "support it");
4137 return -EINVAL;
4138 }
4139
4140 /* RSC global configuration */
4141
4142 if ((rx_conf->offloads & RTE_ETH_RX_OFFLOAD_KEEP_CRC) &&
4143 (rx_conf->offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO)) {
4144 PMD_INIT_LOG(CRIT, "LRO can't be enabled when HW CRC "
4145 "is disabled");
4146 return -EINVAL;
4147 }
4148
4149 rfctl = rd32(hw, TXGBE_PSRCTL);
4150 if (rsc_capable && (rx_conf->offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO))
4151 rfctl &= ~TXGBE_PSRCTL_RSCDIA;
4152 else
4153 rfctl |= TXGBE_PSRCTL_RSCDIA;
4154 wr32(hw, TXGBE_PSRCTL, rfctl);
4155
4156 /* If LRO hasn't been requested - we are done here. */
4157 if (!(rx_conf->offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO))
4158 return 0;
4159
4160 /* Set PSRCTL.RSCACK bit */
4161 rdrxctl = rd32(hw, TXGBE_PSRCTL);
4162 rdrxctl |= TXGBE_PSRCTL_RSCACK;
4163 wr32(hw, TXGBE_PSRCTL, rdrxctl);
4164
4165 /* Per-queue RSC configuration */
4166 for (i = 0; i < dev->data->nb_rx_queues; i++) {
4167 struct txgbe_rx_queue *rxq = dev->data->rx_queues[i];
4168 uint32_t srrctl =
4169 rd32(hw, TXGBE_RXCFG(rxq->reg_idx));
4170 uint32_t psrtype =
4171 rd32(hw, TXGBE_POOLRSS(rxq->reg_idx));
4172 uint32_t eitr =
4173 rd32(hw, TXGBE_ITR(rxq->reg_idx));
4174
4175 /*

Callers 1

txgbe_dev_rx_initFunction · 0.85

Calls 4

txgbe_get_rscctl_maxdescFunction · 0.85
txgbe_set_ivar_mapFunction · 0.85
rd32Function · 0.50
wr32Function · 0.50

Tested by

no test coverage detected