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

Function ngbe_dev_rss_reta_update

dpdk/drivers/net/ngbe/ngbe_ethdev.c:2504–2550  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2502}
2503
2504int
2505ngbe_dev_rss_reta_update(struct rte_eth_dev *dev,
2506 struct rte_eth_rss_reta_entry64 *reta_conf,
2507 uint16_t reta_size)
2508{
2509 uint8_t i, j, mask;
2510 uint32_t reta;
2511 uint16_t idx, shift;
2512 struct ngbe_adapter *adapter = ngbe_dev_adapter(dev);
2513 struct ngbe_hw *hw = ngbe_dev_hw(dev);
2514
2515 PMD_INIT_FUNC_TRACE();
2516
2517 if (!hw->is_pf) {
2518 PMD_DRV_LOG(ERR, "RSS reta update is not supported on this "
2519 "NIC.");
2520 return -ENOTSUP;
2521 }
2522
2523 if (reta_size != RTE_ETH_RSS_RETA_SIZE_128) {
2524 PMD_DRV_LOG(ERR, "The size of hash lookup table configured "
2525 "(%d) doesn't match the number hardware can supported "
2526 "(%d)", reta_size, RTE_ETH_RSS_RETA_SIZE_128);
2527 return -EINVAL;
2528 }
2529
2530 for (i = 0; i < reta_size; i += 4) {
2531 idx = i / RTE_ETH_RETA_GROUP_SIZE;
2532 shift = i % RTE_ETH_RETA_GROUP_SIZE;
2533 mask = (uint8_t)RS64(reta_conf[idx].mask, shift, 0xF);
2534 if (!mask)
2535 continue;
2536
2537 reta = rd32a(hw, NGBE_REG_RSSTBL, i >> 2);
2538 for (j = 0; j < 4; j++) {
2539 if (RS8(mask, j, 0x1)) {
2540 reta &= ~(MS32(8 * j, 0xFF));
2541 reta |= LS32(reta_conf[idx].reta[shift + j],
2542 8 * j, 0xFF);
2543 }
2544 }
2545 wr32a(hw, NGBE_REG_RSSTBL, i >> 2, reta);
2546 }
2547 adapter->rss_reta_updated = 1;
2548
2549 return 0;
2550}
2551
2552int
2553ngbe_dev_rss_reta_query(struct rte_eth_dev *dev,

Callers

nothing calls this directly

Calls 2

ngbe_dev_adapterFunction · 0.85
ngbe_dev_hwFunction · 0.85

Tested by

no test coverage detected