#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
+#define ROC_NIX_MTR_ID_INVALID UINT32_MAX
+
enum roc_nix_rss_reta_sz {
ROC_NIX_RSS_RETA_SZ_64 = 64,
ROC_NIX_RSS_RETA_SZ_128 = 128,
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 {
};
struct roc_nix_fc_cfg {
- bool cq_cfg_valid;
+#define ROC_NIX_FC_RXCHAN_CFG 0
+#define ROC_NIX_FC_CQ_CFG 1
+#define ROC_NIX_FC_TM_CFG 2
+ uint8_t type;
union {
struct {
bool enable;
struct {
uint32_t rq;
+ uint16_t tc;
uint16_t cq_drop;
bool enable;
} cq_cfg;
+
+ struct {
+ uint32_t sq;
+ uint16_t tc;
+ bool enable;
+ } tm_cfg;
};
};
+struct roc_nix_pfc_cfg {
+ enum roc_nix_fc_mode mode;
+ /* For SET, tc must be [0, 15].
+ * For GET, TC will represent bitmap
+ */
+ uint16_t tc;
+};
+
struct roc_nix_eeprom_info {
#define ROC_NIX_EEPROM_SIZE 256
uint16_t sff_id;
struct roc_nix_rq {
/* Input parameters */
uint16_t qid;
+ uint16_t bpf_id;
uint64_t aura_handle;
bool ipsech_ena;
uint16_t first_skip;
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);
+int __roc_api roc_nix_rx_drop_re_set(struct roc_nix *roc_nix, bool ena);
/* Debug */
int __roc_api roc_nix_lf_get_reg_count(struct roc_nix *roc_nix);
enum roc_nix_tm_tree {
ROC_NIX_TM_DEFAULT = 0,
ROC_NIX_TM_RLIMIT,
+ ROC_NIX_TM_PFC,
ROC_NIX_TM_USER,
ROC_NIX_TM_TREE_MAX,
};
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);
+int __roc_api roc_nix_tm_pfc_prepare_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_timeunit_get(struct roc_nix *roc_nix,
+ uint32_t *time_unit);
+
+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);
int __roc_api roc_nix_mac_link_event_start_stop(struct roc_nix *roc_nix,
/* Ops */
int __roc_api roc_nix_switch_hdr_set(struct roc_nix *roc_nix,
- uint64_t switch_header_type);
+ uint64_t switch_header_type,
+ uint8_t pre_l2_size_offset,
+ uint8_t pre_l2_size_offset_mask,
+ uint8_t pre_l2_size_shift_dir);
int __roc_api roc_nix_lso_fmt_setup(struct roc_nix *roc_nix);
int __roc_api roc_nix_lso_fmt_get(struct roc_nix *roc_nix,
uint8_t udp_tun[ROC_NIX_LSO_TUN_MAX],
int __roc_api roc_nix_fc_mode_set(struct roc_nix *roc_nix,
enum roc_nix_fc_mode mode);
+int __roc_api roc_nix_pfc_mode_set(struct roc_nix *roc_nix,
+ struct roc_nix_pfc_cfg *pfc_cfg);
+
+int __roc_api roc_nix_pfc_mode_get(struct roc_nix *roc_nix,
+ struct roc_nix_pfc_cfg *pfc_cfg);
+
+uint16_t __roc_api roc_nix_chan_count_get(struct roc_nix *roc_nix);
+
enum roc_nix_fc_mode __roc_api roc_nix_fc_mode_get(struct roc_nix *roc_nix);
void __roc_api rox_nix_fc_npa_bp_cfg(struct roc_nix *roc_nix, uint64_t pool_id,
int __roc_api roc_nix_rq_fini(struct roc_nix_rq *rq);
int __roc_api roc_nix_cq_init(struct roc_nix *roc_nix, struct roc_nix_cq *cq);
int __roc_api roc_nix_cq_fini(struct roc_nix_cq *cq);
+void __roc_api roc_nix_cq_head_tail_get(struct roc_nix *roc_nix, uint16_t qid,
+ uint32_t *head, uint32_t *tail);
int __roc_api roc_nix_sq_init(struct roc_nix *roc_nix, struct roc_nix_sq *sq);
int __roc_api roc_nix_sq_fini(struct roc_nix_sq *sq);
+void __roc_api roc_nix_sq_head_tail_get(struct roc_nix *roc_nix, uint16_t qid,
+ uint32_t *head, uint32_t *tail);
/* PTP */
int __roc_api roc_nix_ptp_rx_ena_dis(struct roc_nix *roc_nix, int enable);