Skip to content

Commit 9456ac7

Browse files
wulong2022ferruhy
authored andcommitted
net/nfp: implement the device packet type set interface
Using the Rx packet offload flag rather than the device capability to control the packet type offload configuration. Also implement the device packet type set interface to let application can set the Rx packet offload flag. Signed-off-by: Long Wu <[email protected]> Reviewed-by: Chaoyong He <[email protected]>
1 parent f4fe779 commit 9456ac7

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

doc/guides/nics/features/nfp.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ QinQ offload = Y
2222
FEC = Y
2323
L3 checksum offload = Y
2424
L4 checksum offload = Y
25+
Packet type parsing = Y
2526
Basic stats = Y
2627
Stats per queue = Y
2728
Linux = Y

drivers/net/nfp/nfp_ethdev.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,7 @@ static const struct eth_dev_ops nfp_net_eth_dev_ops = {
932932
.xstats_get_names_by_id = nfp_net_xstats_get_names_by_id,
933933
.dev_infos_get = nfp_net_infos_get,
934934
.dev_supported_ptypes_get = nfp_net_supported_ptypes_get,
935+
.dev_ptypes_set = nfp_net_ptypes_set,
935936
.mtu_set = nfp_net_dev_mtu_set,
936937
.mac_addr_set = nfp_net_set_mac_addr,
937938
.vlan_offload_set = nfp_net_vlan_offload_set,

drivers/net/nfp/nfp_net_common.c

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1459,13 +1459,53 @@ nfp_net_supported_ptypes_get(struct rte_eth_dev *dev, size_t *no_of_elements)
14591459
return NULL;
14601460

14611461
net_hw = dev->data->dev_private;
1462-
if ((net_hw->super.ctrl_ext & NFP_NET_CFG_CTRL_PKT_TYPE) == 0)
1462+
if ((net_hw->super.cap_ext & NFP_NET_CFG_CTRL_PKT_TYPE) == 0)
14631463
return NULL;
14641464

14651465
*no_of_elements = RTE_DIM(ptypes);
14661466
return ptypes;
14671467
}
14681468

1469+
int
1470+
nfp_net_ptypes_set(struct rte_eth_dev *dev,
1471+
uint32_t ptype_mask)
1472+
{
1473+
int ret;
1474+
uint32_t update;
1475+
uint32_t ctrl_ext;
1476+
struct nfp_hw *hw;
1477+
struct nfp_net_hw *net_hw;
1478+
1479+
net_hw = dev->data->dev_private;
1480+
hw = &net_hw->super;
1481+
1482+
if ((hw->cap_ext & NFP_NET_CFG_CTRL_PKT_TYPE) == 0)
1483+
return -ENOTSUP;
1484+
1485+
ctrl_ext = hw->ctrl_ext;
1486+
if (ptype_mask == 0) {
1487+
if ((ctrl_ext & NFP_NET_CFG_CTRL_PKT_TYPE) == 0)
1488+
return 0;
1489+
1490+
ctrl_ext &= ~NFP_NET_CFG_CTRL_PKT_TYPE;
1491+
} else {
1492+
if ((ctrl_ext & NFP_NET_CFG_CTRL_PKT_TYPE) != 0)
1493+
return 0;
1494+
1495+
ctrl_ext |= NFP_NET_CFG_CTRL_PKT_TYPE;
1496+
}
1497+
1498+
update = NFP_NET_CFG_UPDATE_GEN;
1499+
1500+
ret = nfp_ext_reconfig(hw, ctrl_ext, update);
1501+
if (ret != 0)
1502+
return ret;
1503+
1504+
hw->ctrl_ext = ctrl_ext;
1505+
1506+
return 0;
1507+
}
1508+
14691509
int
14701510
nfp_rx_queue_intr_enable(struct rte_eth_dev *dev,
14711511
uint16_t queue_id)

drivers/net/nfp/nfp_net_common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ int nfp_net_infos_get(struct rte_eth_dev *dev,
315315
struct rte_eth_dev_info *dev_info);
316316
const uint32_t *nfp_net_supported_ptypes_get(struct rte_eth_dev *dev,
317317
size_t *no_of_elements);
318+
int nfp_net_ptypes_set(struct rte_eth_dev *dev, uint32_t ptype_mask);
318319
int nfp_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t queue_id);
319320
int nfp_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id);
320321
void nfp_net_params_setup(struct nfp_net_hw *hw);

0 commit comments

Comments
 (0)