From: Ajit Khaparde Date: Wed, 2 Oct 2019 23:25:47 +0000 (-0700) Subject: net/bnxt: parse priority attribute for flow creation X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=749ba50d346f5c785d093b37674138d7a3c03570 net/bnxt: parse priority attribute for flow creation 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 Reviewed-by: Lance Richardson Signed-off-by: Ajit Khaparde --- diff --git a/drivers/net/bnxt/bnxt_filter.h b/drivers/net/bnxt/bnxt_filter.h index 8bd9d35329..6bcdc258b7 100644 --- a/drivers/net/bnxt/bnxt_filter.h +++ b/drivers/net/bnxt/bnxt_filter.h @@ -68,6 +68,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); diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c index 9a3f7ab96d..9e0ce5621e 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c @@ -227,6 +227,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)) { @@ -712,15 +715,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; } @@ -802,13 +796,16 @@ bnxt_create_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 |