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;
|
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,
|
int rte_pmd_i40e_add_vf_mac_addr(uint8_t port, uint16_t vf_id,
|
||||||
struct ether_addr *mac_addr);
|
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_ */
|
#endif /* _PMD_I40E_H_ */
|
||||||
|
@ -50,5 +50,8 @@ DPDK_17.11 {
|
|||||||
global:
|
global:
|
||||||
|
|
||||||
rte_pmd_i40e_add_vf_mac_addr;
|
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;
|
} DPDK_17.08;
|
||||||
|
Loading…
Reference in New Issue
Block a user