X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fcommon%2Fcnxk%2Froc_nix.h;h=d83a9b5bce638aa5dd8864c82ef6f1fc7bd571a1;hb=2635c25d93b5c955ecfd6f194f416aaab2aa46c7;hp=90dc413a04e0b617f20e86b02752f1f08aa2de78;hpb=6fe49f1097445f60c01f5675760105cda6fbd1bd;p=dpdk.git diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h index 90dc413a04..d83a9b5bce 100644 --- a/drivers/common/cnxk/roc_nix.h +++ b/drivers/common/cnxk/roc_nix.h @@ -6,6 +6,12 @@ #define _ROC_NIX_H_ /* Constants */ +#define ROC_NIX_BPF_PER_PFFUNC 64 +#define ROC_NIX_BPF_ID_INVALID 0xFFFF +#define ROC_NIX_BPF_LEVEL_IDX_INVALID 0xFF +#define ROC_NIX_BPF_LEVEL_MAX 3 +#define ROC_NIX_BPF_STATS_MAX 12 + enum roc_nix_rss_reta_sz { ROC_NIX_RSS_RETA_SZ_64 = 64, ROC_NIX_RSS_RETA_SZ_128 = 128, @@ -29,6 +35,108 @@ enum roc_nix_vlan_type { ROC_NIX_VLAN_TYPE_OUTER = 0x02, }; +enum roc_nix_bpf_level_flag { + ROC_NIX_BPF_LEVEL_F_LEAF = BIT(0), + ROC_NIX_BPF_LEVEL_F_MID = BIT(1), + ROC_NIX_BPF_LEVEL_F_TOP = BIT(2), +}; + +enum roc_nix_bpf_pc_mode { + ROC_NIX_BPF_PC_MODE_VLAN_INNER, + ROC_NIX_BPF_PC_MODE_VLAN_OUTER, + ROC_NIX_BPF_PC_MODE_DSCP_INNER, + ROC_NIX_BPF_PC_MODE_DSCP_OUTER, + ROC_NIX_BPF_PC_MODE_GEN_INNER, + ROC_NIX_BPF_PC_MODE_GEN_OUTER +}; + +enum roc_nix_bpf_color { + ROC_NIX_BPF_COLOR_GREEN, + ROC_NIX_BPF_COLOR_YELLOW, + ROC_NIX_BPF_COLOR_RED, + ROC_NIX_BPF_COLOR_MAX +}; + +enum roc_nix_bpf_algo { + ROC_NIX_BPF_ALGO_NONE, + ROC_NIX_BPF_ALGO_2698, + ROC_NIX_BPF_ALGO_4115, + ROC_NIX_BPF_ALGO_2697 +}; + +enum roc_nix_bpf_lmode { ROC_NIX_BPF_LMODE_BYTE, ROC_NIX_BPF_LMODE_PACKET }; + +enum roc_nix_bpf_action { + ROC_NIX_BPF_ACTION_PASS, + ROC_NIX_BPF_ACTION_DROP, + ROC_NIX_BPF_ACTION_RED +}; + +enum roc_nix_bpf_stats { + ROC_NIX_BPF_GREEN_PKT_F_PASS = BIT_ULL(0), + ROC_NIX_BPF_GREEN_OCTS_F_PASS = BIT_ULL(1), + ROC_NIX_BPF_GREEN_PKT_F_DROP = BIT_ULL(2), + ROC_NIX_BPF_GREEN_OCTS_F_DROP = BIT_ULL(3), + ROC_NIX_BPF_YELLOW_PKT_F_PASS = BIT_ULL(4), + ROC_NIX_BPF_YELLOW_OCTS_F_PASS = BIT_ULL(5), + ROC_NIX_BPF_YELLOW_PKT_F_DROP = BIT_ULL(6), + ROC_NIX_BPF_YELLOW_OCTS_F_DROP = BIT_ULL(7), + ROC_NIX_BPF_RED_PKT_F_PASS = BIT_ULL(8), + ROC_NIX_BPF_RED_OCTS_F_PASS = BIT_ULL(9), + ROC_NIX_BPF_RED_PKT_F_DROP = BIT_ULL(10), + ROC_NIX_BPF_RED_OCTS_F_DROP = BIT_ULL(11), +}; + +struct roc_nix_bpf_cfg { + enum roc_nix_bpf_algo alg; + enum roc_nix_bpf_lmode lmode; + enum roc_nix_bpf_color icolor; + enum roc_nix_bpf_pc_mode pc_mode; + bool tnl_ena; + union { + /* Valid when *alg* is set to ROC_NIX_BPF_ALGO_2697. */ + struct { + uint64_t cir; + uint64_t cbs; + uint64_t ebs; + } algo2697; + + /* Valid when *alg* is set to ROC_NIX_BPF_ALGO_2698. */ + struct { + uint64_t cir; + uint64_t pir; + uint64_t cbs; + uint64_t pbs; + } algo2698; + + /* Valid when *alg* is set to ROC_NIX_BPF_ALGO_4115. */ + struct { + uint64_t cir; + uint64_t eir; + uint64_t cbs; + uint64_t ebs; + } algo4115; + }; + + enum roc_nix_bpf_action action[ROC_NIX_BPF_COLOR_MAX]; + + /* Reserved for future config*/ + uint32_t rsvd[3]; +}; + +struct roc_nix_bpf_objs { + uint16_t level; + uint16_t count; + uint16_t ids[ROC_NIX_BPF_PER_PFFUNC]; +}; + +struct roc_nix_bpf_precolor { +#define ROC_NIX_BPF_PRE_COLOR_MAX 64 + uint8_t count; + enum roc_nix_bpf_pc_mode mode; + enum roc_nix_bpf_color color[ROC_NIX_BPF_PRE_COLOR_MAX]; +}; + struct roc_nix_vlan_config { uint32_t type; union { @@ -142,6 +250,7 @@ struct roc_nix_stats_queue { struct roc_nix_rq { /* Input parameters */ uint16_t qid; + uint16_t bpf_id; uint64_t aura_handle; bool ipsech_ena; uint16_t first_skip; @@ -171,6 +280,7 @@ struct roc_nix_rq { uint8_t spb_red_pass; /* End of Input parameters */ struct roc_nix *roc_nix; + bool inl_dev_ref; }; struct roc_nix_cq { @@ -193,7 +303,9 @@ struct roc_nix_sq { enum roc_nix_sq_max_sqe_sz max_sqe_sz; uint32_t nb_desc; uint16_t qid; + uint16_t cqid; bool sso_ena; + bool cq_ena; /* End of Input parameters */ uint16_t sqes_per_sqb_log2; struct roc_nix *roc_nix; @@ -258,6 +370,10 @@ struct roc_nix { bool enable_loop; bool hw_vlan_ins; uint8_t lock_rx_ctx; + uint32_t outb_nb_desc; + uint16_t outb_nb_crypto_qs; + uint16_t ipsec_in_max_spi; + uint16_t ipsec_out_max_sa; /* End of input parameters */ /* LMT line base for "Per Core Tx LMT line" mode*/ uintptr_t lmt_base; @@ -321,6 +437,7 @@ int __roc_api roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq, int __roc_api roc_nix_lf_free(struct roc_nix *roc_nix); int __roc_api roc_nix_lf_inl_ipsec_cfg(struct roc_nix *roc_nix, struct roc_nix_ipsec_cfg *cfg, bool enb); +int __roc_api roc_nix_cpt_ctx_cache_sync(struct roc_nix *roc_nix); /* Debug */ int __roc_api roc_nix_lf_get_reg_count(struct roc_nix *roc_nix); @@ -490,6 +607,71 @@ int __roc_api roc_nix_tm_node_name_get(struct roc_nix *roc_nix, uint32_t node_id, char *buf, size_t buflen); int __roc_api roc_nix_smq_flush(struct roc_nix *roc_nix); +int __roc_api roc_nix_tm_max_prio(struct roc_nix *roc_nix, int lvl); +int __roc_api roc_nix_tm_lvl_is_leaf(struct roc_nix *roc_nix, int lvl); +void __roc_api +roc_nix_tm_shaper_default_red_algo(struct roc_nix_tm_node *node, + struct roc_nix_tm_shaper_profile *profile); +int __roc_api roc_nix_tm_lvl_cnt_get(struct roc_nix *roc_nix); +int __roc_api roc_nix_tm_lvl_have_link_access(struct roc_nix *roc_nix, int lvl); +int __roc_api roc_nix_tm_prepare_rate_limited_tree(struct roc_nix *roc_nix); +bool __roc_api roc_nix_tm_is_user_hierarchy_enabled(struct roc_nix *nix); +int __roc_api roc_nix_tm_tree_type_get(struct roc_nix *nix); + +/* Ingress Policer API */ +int __roc_api +roc_nix_bpf_count_get(struct roc_nix *roc_nix, uint8_t lvl_mask, + uint16_t count[ROC_NIX_BPF_LEVEL_MAX] /* Out */); + +int __roc_api roc_nix_bpf_alloc(struct roc_nix *roc_nix, uint8_t lvl_mask, + uint16_t per_lvl_cnt[ROC_NIX_BPF_LEVEL_MAX], + struct roc_nix_bpf_objs *profs /* Out */); + +int __roc_api roc_nix_bpf_free(struct roc_nix *roc_nix, + struct roc_nix_bpf_objs *profs, + uint8_t num_prof); + +int __roc_api roc_nix_bpf_free_all(struct roc_nix *roc_nix); + +int __roc_api roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id, + enum roc_nix_bpf_level_flag lvl_flag, + struct roc_nix_bpf_cfg *cfg); + +int __roc_api roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id, + struct roc_nix_rq *rq, bool enable); + +int __roc_api roc_nix_bpf_dump(struct roc_nix *roc_nix, uint16_t id, + enum roc_nix_bpf_level_flag lvl_flag); + +int __roc_api roc_nix_bpf_pre_color_tbl_setup( + struct roc_nix *roc_nix, uint16_t id, + enum roc_nix_bpf_level_flag lvl_flag, struct roc_nix_bpf_precolor *tbl); + +/* Use ROC_NIX_BPF_ID_INVALID as dst_id to disconnect */ +int __roc_api roc_nix_bpf_connect(struct roc_nix *roc_nix, + enum roc_nix_bpf_level_flag lvl_flag, + uint16_t src_id, uint16_t dst_id); + +int __roc_api +roc_nix_bpf_stats_read(struct roc_nix *roc_nix, uint16_t id, uint64_t mask, + enum roc_nix_bpf_level_flag lvl_flag, + uint64_t stats[ROC_NIX_BPF_STATS_MAX] /* Out */); + +int __roc_api roc_nix_bpf_stats_reset(struct roc_nix *roc_nix, uint16_t id, + uint64_t mask, + enum roc_nix_bpf_level_flag lvl_flag); + +int __roc_api +roc_nix_bpf_lf_stats_read(struct roc_nix *roc_nix, uint64_t mask, + uint64_t stats[ROC_NIX_BPF_STATS_MAX] /* Out */); + +int __roc_api roc_nix_bpf_lf_stats_reset(struct roc_nix *roc_nix, + uint64_t mask); + +uint8_t __roc_api +roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag); + +uint8_t __roc_api roc_nix_bpf_stats_to_idx(enum roc_nix_bpf_stats lvl_flag); /* MAC */ int __roc_api roc_nix_mac_rxtx_start_stop(struct roc_nix *roc_nix, bool start);