X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fbase%2Fice_acl_ctrl.c;h=27aa6b62d4dc87e88b5022e9a26b0c8795b702e8;hb=8e9091f57e9cda8256cfc86f2db101fa38c78111;hp=02a1dd34f1564f85dac33fa24d4bd2be6df8eaa8;hpb=54d86ca5870748b29f1b2416a03ad48227264112;p=dpdk.git diff --git a/drivers/net/ice/base/ice_acl_ctrl.c b/drivers/net/ice/base/ice_acl_ctrl.c index 02a1dd34f1..27aa6b62d4 100644 --- a/drivers/net/ice/base/ice_acl_ctrl.c +++ b/drivers/net/ice/base/ice_acl_ctrl.c @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright(c) 2001-2020 Intel Corporation + * Copyright(c) 2001-2021 Intel Corporation */ #include "ice_acl.h" @@ -25,19 +25,21 @@ static void ice_acl_init_entry(struct ice_acl_scen *scen) * normal priority: start from the highest index, 50% of total entries * high priority: start from the lowest index, 25% of total entries */ - scen->first_idx[ICE_LOW] = scen->num_entry - 1; - scen->first_idx[ICE_NORMAL] = scen->num_entry - scen->num_entry / 4 - 1; - scen->first_idx[ICE_HIGH] = 0; - - scen->last_idx[ICE_LOW] = scen->num_entry - scen->num_entry / 4; - scen->last_idx[ICE_NORMAL] = scen->num_entry / 4; - scen->last_idx[ICE_HIGH] = scen->num_entry / 4 - 1; + scen->first_idx[ICE_ACL_PRIO_LOW] = scen->num_entry - 1; + scen->first_idx[ICE_ACL_PRIO_NORMAL] = scen->num_entry - + scen->num_entry / 4 - 1; + scen->first_idx[ICE_ACL_PRIO_HIGH] = 0; + + scen->last_idx[ICE_ACL_PRIO_LOW] = scen->num_entry - + scen->num_entry / 4; + scen->last_idx[ICE_ACL_PRIO_NORMAL] = scen->num_entry / 4; + scen->last_idx[ICE_ACL_PRIO_HIGH] = scen->num_entry / 4 - 1; } /** * ice_acl_scen_assign_entry_idx * @scen: pointer to the scenario struct - * @prior: the priority of the flow entry being allocated + * @prio: the priority of the flow entry being allocated * * To find the index of an available entry in scenario * @@ -46,16 +48,16 @@ static void ice_acl_init_entry(struct ice_acl_scen *scen) */ static u16 ice_acl_scen_assign_entry_idx(struct ice_acl_scen *scen, - enum ice_acl_entry_prior prior) + enum ice_acl_entry_prio prio) { u16 first_idx, last_idx, i; s8 step; - if (prior >= ICE_MAX_PRIOR) + if (prio >= ICE_ACL_MAX_PRIO) return ICE_ACL_SCEN_ENTRY_INVAL; - first_idx = scen->first_idx[prior]; - last_idx = scen->last_idx[prior]; + first_idx = scen->first_idx[prio]; + last_idx = scen->last_idx[prio]; step = first_idx <= last_idx ? 1 : -1; for (i = first_idx; i != last_idx + step; i += step) @@ -149,10 +151,8 @@ static enum ice_status ice_acl_init_tbl(struct ice_hw *hw) u16 idx; tbl = hw->acl_tbl; - if (!tbl) { - status = ICE_ERR_CFG; - return status; - } + if (!tbl) + return ICE_ERR_CFG; ice_memset(&buf, 0, sizeof(buf), ICE_NONDMA_MEM); ice_memset(&act_buf, 0, sizeof(act_buf), ICE_NONDMA_MEM); @@ -526,7 +526,7 @@ ice_acl_alloc_partition(struct ice_hw *hw, struct ice_acl_scen *req) break; } - row = (dir > 0) ? (row + width) : (row - width); + row = dir > 0 ? row + width : row - width; if (row > hw->acl_tbl->last_tcam || row < hw->acl_tbl->first_tcam) { /* All rows have been checked. Increment 'off' that @@ -668,8 +668,7 @@ static void ice_acl_assign_act_mem_for_scen(struct ice_acl_tbl *tbl, struct ice_acl_scen *scen, struct ice_aqc_acl_scen *scen_buf, - u8 current_tcam_idx, - u8 target_tcam_idx) + u8 current_tcam_idx, u8 target_tcam_idx) { u8 i; @@ -761,10 +760,8 @@ ice_acl_create_scen(struct ice_hw *hw, u16 match_width, u16 num_entries, scen->num_entry = num_entries; status = ice_acl_alloc_partition(hw, scen); - if (status) { - ice_free(hw, scen); - return status; - } + if (status) + goto out; ice_memset(&scen_buf, 0, sizeof(scen_buf), ICE_NONDMA_MEM); @@ -829,8 +826,7 @@ ice_acl_create_scen(struct ice_hw *hw, u16 match_width, u16 num_entries, if (status) { ice_debug(hw, ICE_DBG_ACL, "AQ allocation of ACL scenario failed. status: %d\n", status); - ice_free(hw, scen); - return status; + goto out; } scen->id = *scen_id; @@ -838,6 +834,10 @@ ice_acl_create_scen(struct ice_hw *hw, u16 match_width, u16 num_entries, ice_acl_init_entry(scen); LIST_ADD(&scen->list_entry, &hw->acl_tbl->scens); +out: + if (status) + ice_free(hw, scen); + return status; } @@ -955,7 +955,7 @@ enum ice_status ice_acl_destroy_tbl(struct ice_hw *hw) * ice_acl_add_entry - Add a flow entry to an ACL scenario * @hw: pointer to the HW struct * @scen: scenario to add the entry to - * @prior: priority level of the entry being added + * @prio: priority level of the entry being added * @keys: buffer of the value of the key to be programmed to the ACL entry * @inverts: buffer of the value of the key inverts to be programmed * @acts: pointer to a buffer containing formatted actions @@ -969,7 +969,7 @@ enum ice_status ice_acl_destroy_tbl(struct ice_hw *hw) */ enum ice_status ice_acl_add_entry(struct ice_hw *hw, struct ice_acl_scen *scen, - enum ice_acl_entry_prior prior, u8 *keys, u8 *inverts, + enum ice_acl_entry_prio prio, u8 *keys, u8 *inverts, struct ice_acl_act_entry *acts, u8 acts_cnt, u16 *entry_idx) { u8 i, entry_tcam, num_cscd, offset; @@ -980,7 +980,7 @@ ice_acl_add_entry(struct ice_hw *hw, struct ice_acl_scen *scen, if (!scen) return ICE_ERR_DOES_NOT_EXIST; - *entry_idx = ice_acl_scen_assign_entry_idx(scen, prior); + *entry_idx = ice_acl_scen_assign_entry_idx(scen, prio); if (*entry_idx >= scen->num_entry) { *entry_idx = 0; return ICE_ERR_MAX_LIMIT;