net/i40e: support updating pctype mapping table
Add new functions which allow modify, return or reset to default the contents of flow type to pctype dynamic mapping table. Signed-off-by: Kirill Rybalchenko <kirill.rybalchenko@intel.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
a286ebeb07
commit
350861b35c
@ -2332,3 +2332,97 @@ rte_pmd_i40e_add_vf_mac_addr(uint8_t port, uint16_t vf_id,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rte_pmd_i40e_flow_type_mapping_reset(uint8_t port)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
|
||||
|
||||
dev = &rte_eth_devices[port];
|
||||
|
||||
if (!is_i40e_supported(dev))
|
||||
return -ENOTSUP;
|
||||
|
||||
i40e_set_default_pctype_table(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rte_pmd_i40e_flow_type_mapping_get(
|
||||
uint8_t port,
|
||||
struct rte_pmd_i40e_flow_type_mapping *mapping_items)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
struct i40e_adapter *ad;
|
||||
uint16_t i;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
|
||||
|
||||
dev = &rte_eth_devices[port];
|
||||
|
||||
if (!is_i40e_supported(dev))
|
||||
return -ENOTSUP;
|
||||
|
||||
ad = I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
|
||||
|
||||
for (i = 0; i < I40E_FLOW_TYPE_MAX; i++) {
|
||||
mapping_items[i].flow_type = i;
|
||||
mapping_items[i].pctype = ad->pctypes_tbl[i];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
rte_pmd_i40e_flow_type_mapping_update(
|
||||
uint8_t port,
|
||||
struct rte_pmd_i40e_flow_type_mapping *mapping_items,
|
||||
uint16_t count,
|
||||
uint8_t exclusive)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
struct i40e_adapter *ad;
|
||||
int i;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
|
||||
|
||||
dev = &rte_eth_devices[port];
|
||||
|
||||
if (!is_i40e_supported(dev))
|
||||
return -ENOTSUP;
|
||||
|
||||
if (count > I40E_FLOW_TYPE_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
if (mapping_items[i].flow_type >= I40E_FLOW_TYPE_MAX ||
|
||||
mapping_items[i].flow_type == RTE_ETH_FLOW_UNKNOWN ||
|
||||
(mapping_items[i].pctype &
|
||||
(1ULL << I40E_FILTER_PCTYPE_INVALID)))
|
||||
return -EINVAL;
|
||||
|
||||
ad = I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
|
||||
|
||||
if (exclusive) {
|
||||
for (i = 0; i < I40E_FLOW_TYPE_MAX; i++)
|
||||
ad->pctypes_tbl[i] = 0ULL;
|
||||
ad->flow_types_mask = 0ULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
ad->pctypes_tbl[mapping_items[i].flow_type] =
|
||||
mapping_items[i].pctype;
|
||||
if (mapping_items[i].pctype)
|
||||
ad->flow_types_mask |=
|
||||
(1ULL << mapping_items[i].flow_type);
|
||||
else
|
||||
ad->flow_types_mask &=
|
||||
~(1ULL << mapping_items[i].flow_type);
|
||||
}
|
||||
|
||||
for (i = 0, ad->pctypes_mask = 0ULL; i < I40E_FLOW_TYPE_MAX; i++)
|
||||
ad->pctypes_mask |= ad->pctypes_tbl[i];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -682,4 +682,59 @@ int rte_pmd_i40e_ptype_mapping_replace(uint8_t port,
|
||||
int rte_pmd_i40e_add_vf_mac_addr(uint8_t port, uint16_t vf_id,
|
||||
struct ether_addr *mac_addr);
|
||||
|
||||
#define RTE_PMD_I40E_PCTYPE_MAX 64
|
||||
#define RTE_PMD_I40E_FLOW_TYPE_MAX 64
|
||||
|
||||
struct rte_pmd_i40e_flow_type_mapping {
|
||||
uint16_t flow_type; /**< software defined flow type*/
|
||||
uint64_t pctype; /**< hardware defined pctype */
|
||||
};
|
||||
|
||||
/**
|
||||
* Update hardware defined pctype to software defined flow type
|
||||
* mapping table.
|
||||
*
|
||||
* @param port
|
||||
* pointer to port identifier of the device.
|
||||
* @param mapping_items
|
||||
* the base address of the mapping items array.
|
||||
* @param count
|
||||
* number of mapping items.
|
||||
* @param exclusive
|
||||
* the flag indicate different pctype mapping update method.
|
||||
* -(0) only overwrite referred PCTYPE mapping,
|
||||
* keep other PCTYPEs mapping unchanged.
|
||||
* -(!0) overwrite referred PCTYPE mapping,
|
||||
* set other PCTYPEs maps to PCTYPE_INVALID.
|
||||
*/
|
||||
int rte_pmd_i40e_flow_type_mapping_update(
|
||||
uint8_t port,
|
||||
struct rte_pmd_i40e_flow_type_mapping *mapping_items,
|
||||
uint16_t count,
|
||||
uint8_t exclusive);
|
||||
|
||||
/**
|
||||
* Get software defined flow type to hardware defined pctype
|
||||
* mapping items.
|
||||
*
|
||||
* @param port
|
||||
* pointer to port identifier of the device.
|
||||
* @param mapping_items
|
||||
* the base address of the array to store returned items.
|
||||
* array should be allocated by caller with minimum size of
|
||||
* RTE_PMD_I40E_FLOW_TYPE_MAX items
|
||||
*/
|
||||
int rte_pmd_i40e_flow_type_mapping_get(
|
||||
uint8_t port,
|
||||
struct rte_pmd_i40e_flow_type_mapping *mapping_items);
|
||||
|
||||
/**
|
||||
* Reset hardware defined pctype to software defined flow type
|
||||
* mapping table to default.
|
||||
*
|
||||
* @param port
|
||||
* pointer to port identifier of the device
|
||||
*/
|
||||
int rte_pmd_i40e_flow_type_mapping_reset(uint8_t port);
|
||||
|
||||
#endif /* _PMD_I40E_H_ */
|
||||
|
@ -50,5 +50,8 @@ DPDK_17.11 {
|
||||
global:
|
||||
|
||||
rte_pmd_i40e_add_vf_mac_addr;
|
||||
rte_pmd_i40e_flow_type_mapping_update;
|
||||
rte_pmd_i40e_flow_type_mapping_get;
|
||||
rte_pmd_i40e_flow_type_mapping_reset;
|
||||
|
||||
} DPDK_17.08;
|
||||
|
Loading…
Reference in New Issue
Block a user