1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
8 #define NIX_MAX_BPF_COUNT_LEAF_LAYER 64
9 #define NIX_MAX_BPF_COUNT_MID_LAYER 8
10 #define NIX_MAX_BPF_COUNT_TOP_LAYER 1
12 #define NIX_BPF_LEVEL_F_MASK \
13 (ROC_NIX_BPF_LEVEL_F_LEAF | ROC_NIX_BPF_LEVEL_F_MID | \
14 ROC_NIX_BPF_LEVEL_F_TOP)
17 roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag level_f)
21 if (level_f & ROC_NIX_BPF_LEVEL_F_LEAF)
23 else if (level_f & ROC_NIX_BPF_LEVEL_F_MID)
25 else if (level_f & ROC_NIX_BPF_LEVEL_F_TOP)
28 idx = ROC_NIX_BPF_LEVEL_IDX_INVALID;
33 roc_nix_bpf_count_get(struct roc_nix *roc_nix, uint8_t lvl_mask,
34 uint16_t count[ROC_NIX_BPF_LEVEL_MAX])
36 uint8_t mask = lvl_mask & NIX_BPF_LEVEL_F_MASK;
37 uint8_t leaf_idx, mid_idx, top_idx;
39 PLT_SET_USED(roc_nix);
41 if (roc_model_is_cn9k())
42 return NIX_ERR_HW_NOTSUP;
47 /* Currently No MBOX interface is available to get number
48 * of bandwidth profiles. So numbers per level are hard coded,
49 * considering 3 RPM blocks and each block has 4 LMAC's.
50 * So total 12 physical interfaces are in system. Each interface
51 * supports following bandwidth profiles.
54 leaf_idx = roc_nix_bpf_level_to_idx(mask & ROC_NIX_BPF_LEVEL_F_LEAF);
55 mid_idx = roc_nix_bpf_level_to_idx(mask & ROC_NIX_BPF_LEVEL_F_MID);
56 top_idx = roc_nix_bpf_level_to_idx(mask & ROC_NIX_BPF_LEVEL_F_TOP);
58 if (leaf_idx != ROC_NIX_BPF_LEVEL_IDX_INVALID)
59 count[leaf_idx] = NIX_MAX_BPF_COUNT_LEAF_LAYER;
61 if (mid_idx != ROC_NIX_BPF_LEVEL_IDX_INVALID)
62 count[mid_idx] = NIX_MAX_BPF_COUNT_MID_LAYER;
64 if (top_idx != ROC_NIX_BPF_LEVEL_IDX_INVALID)
65 count[top_idx] = NIX_MAX_BPF_COUNT_TOP_LAYER;