[06/17] net/bnxt: parse priority attribute for flow creation
Checks
Commit Message
Parse priority attribute during flow creation.
This information will be used to give a hint to the FW to
place the flow rule accordingly in the CFA tables.
Reviewed-by: Rahul Gupta <rahul.gupta@broadcom.com>
Reviewed-by: Lance Richardson <lance.richardson@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
drivers/net/bnxt/bnxt_filter.h | 1 +
drivers/net/bnxt/bnxt_flow.c | 25 +++++++++++--------------
2 files changed, 12 insertions(+), 14 deletions(-)
@@ -66,6 +66,7 @@ struct bnxt_filter_info {
uint16_t ip_protocol;
uint16_t ip_addr_type;
uint16_t ethertype;
+ uint32_t priority;
};
struct bnxt_filter_info *bnxt_alloc_filter(struct bnxt *bp);
@@ -225,6 +225,9 @@ bnxt_validate_and_parse_flow_type(struct bnxt *bp,
valid_flags |= inner ?
BNXT_FLOW_L2_INNER_DST_VALID_FLAG :
BNXT_FLOW_L2_DST_VALID_FLAG;
+ filter->priority = attr->priority;
+ PMD_DRV_LOG(DEBUG,
+ "Creating a priority flow\n");
}
if (rte_is_broadcast_ether_addr(ð_mask->src)) {
@@ -710,15 +713,6 @@ bnxt_flow_parse_attr(const struct rte_flow_attr *attr,
return -rte_errno;
}
- /* Not supported */
- if (attr->priority) {
- rte_flow_error_set(error,
- EINVAL,
- RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY,
- attr,
- "No support for priority.");
- return -rte_errno;
- }
return 0;
}
@@ -764,13 +758,16 @@ bnxt_get_l2_filter(struct bnxt *bp, struct bnxt_filter_info *nf,
memcpy(filter1->l2_addr, nf->dst_macaddr, RTE_ETHER_ADDR_LEN);
}
- if (nf->valid_flags & BNXT_FLOW_L2_DST_VALID_FLAG ||
- nf->valid_flags & BNXT_FLOW_L2_INNER_DST_VALID_FLAG) {
+ if (nf->priority &&
+ (nf->valid_flags & BNXT_FLOW_L2_DST_VALID_FLAG ||
+ nf->valid_flags & BNXT_FLOW_L2_INNER_DST_VALID_FLAG)) {
/* Tell the FW where to place the filter in the table. */
- filter1->pri_hint =
+ if (nf->priority > 65535) {
+ filter1->pri_hint =
HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER;
- /* This will place the filter in TCAM */
- filter1->l2_filter_id_hint = (uint64_t)-1;
+ /* This will place the filter in TCAM */
+ filter1->l2_filter_id_hint = (uint64_t)-1;
+ }
}
filter1->enables = HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR |