dpdk/drivers/common/cnxk/roc_nix.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(C) 2021 Marvell.
   3 */
   4
   5#ifndef _ROC_NIX_H_
   6#define _ROC_NIX_H_
   7
   8/* Constants */
   9enum roc_nix_rss_reta_sz {
  10        ROC_NIX_RSS_RETA_SZ_64 = 64,
  11        ROC_NIX_RSS_RETA_SZ_128 = 128,
  12        ROC_NIX_RSS_RETA_SZ_256 = 256,
  13};
  14
  15enum roc_nix_sq_max_sqe_sz {
  16        roc_nix_maxsqesz_w16 = NIX_MAXSQESZ_W16,
  17        roc_nix_maxsqesz_w8 = NIX_MAXSQESZ_W8,
  18};
  19
  20enum roc_nix_fc_mode {
  21        ROC_NIX_FC_NONE = 0,
  22        ROC_NIX_FC_RX,
  23        ROC_NIX_FC_TX,
  24        ROC_NIX_FC_FULL
  25};
  26
  27enum roc_nix_vlan_type {
  28        ROC_NIX_VLAN_TYPE_INNER = 0x01,
  29        ROC_NIX_VLAN_TYPE_OUTER = 0x02,
  30};
  31
  32struct roc_nix_vlan_config {
  33        uint32_t type;
  34        union {
  35                struct {
  36                        uint32_t vtag_inner;
  37                        uint32_t vtag_outer;
  38                } vlan;
  39
  40                struct {
  41                        int idx_inner;
  42                        int idx_outer;
  43                } mcam;
  44        };
  45};
  46
  47struct roc_nix_fc_cfg {
  48        bool cq_cfg_valid;
  49        union {
  50                struct {
  51                        bool enable;
  52                } rxchan_cfg;
  53
  54                struct {
  55                        uint32_t rq;
  56                        uint16_t cq_drop;
  57                        bool enable;
  58                } cq_cfg;
  59        };
  60};
  61
  62struct roc_nix_eeprom_info {
  63#define ROC_NIX_EEPROM_SIZE 256
  64        uint16_t sff_id;
  65        uint8_t buf[ROC_NIX_EEPROM_SIZE];
  66};
  67
  68/* Range to adjust PTP frequency. Valid range is
  69 * (-ROC_NIX_PTP_FREQ_ADJUST, ROC_NIX_PTP_FREQ_ADJUST)
  70 */
  71#define ROC_NIX_PTP_FREQ_ADJUST (1 << 9)
  72
  73/* NIX LF RX offload configuration flags.
  74 * These are input flags to roc_nix_lf_alloc:rx_cfg
  75 */
  76#define ROC_NIX_LF_RX_CFG_DROP_RE     BIT_ULL(32)
  77#define ROC_NIX_LF_RX_CFG_L2_LEN_ERR  BIT_ULL(33)
  78#define ROC_NIX_LF_RX_CFG_IP6_UDP_OPT BIT_ULL(34)
  79#define ROC_NIX_LF_RX_CFG_DIS_APAD    BIT_ULL(35)
  80#define ROC_NIX_LF_RX_CFG_CSUM_IL4    BIT_ULL(36)
  81#define ROC_NIX_LF_RX_CFG_CSUM_OL4    BIT_ULL(37)
  82#define ROC_NIX_LF_RX_CFG_LEN_IL4     BIT_ULL(38)
  83#define ROC_NIX_LF_RX_CFG_LEN_IL3     BIT_ULL(39)
  84#define ROC_NIX_LF_RX_CFG_LEN_OL4     BIT_ULL(40)
  85#define ROC_NIX_LF_RX_CFG_LEN_OL3     BIT_ULL(41)
  86
  87/* Group 0 will be used for RSS, 1 -7 will be used for npc_flow RSS action*/
  88#define ROC_NIX_RSS_GROUP_DEFAULT 0
  89#define ROC_NIX_RSS_GRPS          8
  90#define ROC_NIX_RSS_RETA_MAX      ROC_NIX_RSS_RETA_SZ_256
  91#define ROC_NIX_RSS_KEY_LEN       48 /* 352 Bits */
  92
  93#define ROC_NIX_DEFAULT_HW_FRS 1514
  94
  95#define ROC_NIX_VWQE_MAX_SIZE_LOG2 11
  96#define ROC_NIX_VWQE_MIN_SIZE_LOG2 2
  97
  98struct roc_nix_stats {
  99        /* Rx */
 100        uint64_t rx_octs;
 101        uint64_t rx_ucast;
 102        uint64_t rx_bcast;
 103        uint64_t rx_mcast;
 104        uint64_t rx_drop;
 105        uint64_t rx_drop_octs;
 106        uint64_t rx_fcs;
 107        uint64_t rx_err;
 108        uint64_t rx_drop_bcast;
 109        uint64_t rx_drop_mcast;
 110        uint64_t rx_drop_l3_bcast;
 111        uint64_t rx_drop_l3_mcast;
 112        /* Tx */
 113        uint64_t tx_ucast;
 114        uint64_t tx_bcast;
 115        uint64_t tx_mcast;
 116        uint64_t tx_drop;
 117        uint64_t tx_octs;
 118};
 119
 120struct roc_nix_stats_queue {
 121        PLT_STD_C11
 122        union {
 123                struct {
 124                        /* Rx */
 125                        uint64_t rx_pkts;
 126                        uint64_t rx_octs;
 127                        uint64_t rx_drop_pkts;
 128                        uint64_t rx_drop_octs;
 129                        uint64_t rx_error_pkts;
 130                };
 131                struct {
 132                        /* Tx */
 133                        uint64_t tx_pkts;
 134                        uint64_t tx_octs;
 135                        uint64_t tx_drop_pkts;
 136                        uint64_t tx_drop_octs;
 137                };
 138        };
 139};
 140
 141struct roc_nix_rq {
 142        /* Input parameters */
 143        uint16_t qid;
 144        uint64_t aura_handle;
 145        bool ipsech_ena;
 146        uint16_t first_skip;
 147        uint16_t later_skip;
 148        uint16_t wqe_skip;
 149        uint16_t lpb_size;
 150        uint32_t tag_mask;
 151        uint32_t flow_tag_width;
 152        uint8_t tt;     /* Valid when SSO is enabled */
 153        uint16_t hwgrp; /* Valid when SSO is enabled */
 154        bool sso_ena;
 155        bool vwqe_ena;
 156        uint64_t spb_aura_handle; /* Valid when SPB is enabled */
 157        uint16_t spb_size;        /* Valid when SPB is enabled */
 158        bool spb_ena;
 159        uint8_t vwqe_first_skip;
 160        uint32_t vwqe_max_sz_exp;
 161        uint64_t vwqe_wait_tmo;
 162        uint64_t vwqe_aura_handle;
 163        /* End of Input parameters */
 164        struct roc_nix *roc_nix;
 165};
 166
 167struct roc_nix_cq {
 168        /* Input parameters */
 169        uint16_t qid;
 170        uint16_t nb_desc;
 171        /* End of Input parameters */
 172        uint16_t drop_thresh;
 173        struct roc_nix *roc_nix;
 174        uintptr_t door;
 175        int64_t *status;
 176        uint64_t wdata;
 177        void *desc_base;
 178        uint32_t qmask;
 179        uint32_t head;
 180};
 181
 182struct roc_nix_sq {
 183        /* Input parameters */
 184        enum roc_nix_sq_max_sqe_sz max_sqe_sz;
 185        uint32_t nb_desc;
 186        uint16_t qid;
 187        /* End of Input parameters */
 188        uint16_t sqes_per_sqb_log2;
 189        struct roc_nix *roc_nix;
 190        uint64_t aura_handle;
 191        int16_t nb_sqb_bufs_adj;
 192        uint16_t nb_sqb_bufs;
 193        plt_iova_t io_addr;
 194        void *lmt_addr;
 195        void *sqe_mem;
 196        void *fc;
 197};
 198
 199struct roc_nix_link_info {
 200        uint64_t status : 1;
 201        uint64_t full_duplex : 1;
 202        uint64_t lmac_type_id : 4;
 203        uint64_t speed : 20;
 204        uint64_t autoneg : 1;
 205        uint64_t fec : 2;
 206        uint64_t port : 8;
 207};
 208
 209/** Maximum name length for extended statistics counters */
 210#define ROC_NIX_XSTATS_NAME_SIZE 64
 211
 212struct roc_nix_xstat {
 213        uint64_t id;    /**< The index in xstats name array. */
 214        uint64_t value; /**< The statistic counter value. */
 215};
 216
 217struct roc_nix_xstat_name {
 218        char name[ROC_NIX_XSTATS_NAME_SIZE];
 219};
 220
 221struct roc_nix_ipsec_cfg {
 222        uint32_t sa_size;
 223        uint32_t tag_const;
 224        plt_iova_t iova;
 225        uint16_t max_sa;
 226        uint8_t tt;
 227};
 228
 229/* Link status update callback */
 230typedef void (*link_status_t)(struct roc_nix *roc_nix,
 231                              struct roc_nix_link_info *link);
 232
 233/* PTP info update callback */
 234typedef int (*ptp_info_update_t)(struct roc_nix *roc_nix, bool enable);
 235
 236struct roc_nix {
 237        /* Input parameters */
 238        struct plt_pci_device *pci_dev;
 239        uint16_t port_id;
 240        bool rss_tag_as_xor;
 241        uint16_t max_sqb_count;
 242        enum roc_nix_rss_reta_sz reta_sz;
 243        bool enable_loop;
 244        /* End of input parameters */
 245        /* LMT line base for "Per Core Tx LMT line" mode*/
 246        uintptr_t lmt_base;
 247        bool io_enabled;
 248        bool rx_ptp_ena;
 249        uint16_t cints;
 250
 251#define ROC_NIX_MEM_SZ (6 * 1024)
 252        uint8_t reserved[ROC_NIX_MEM_SZ] __plt_cache_aligned;
 253} __plt_cache_aligned;
 254
 255enum roc_nix_lso_tun_type {
 256        ROC_NIX_LSO_TUN_V4V4,
 257        ROC_NIX_LSO_TUN_V4V6,
 258        ROC_NIX_LSO_TUN_V6V4,
 259        ROC_NIX_LSO_TUN_V6V6,
 260        ROC_NIX_LSO_TUN_MAX,
 261};
 262
 263/* Dev */
 264int __roc_api roc_nix_dev_init(struct roc_nix *roc_nix);
 265int __roc_api roc_nix_dev_fini(struct roc_nix *roc_nix);
 266
 267/* Type */
 268bool __roc_api roc_nix_is_lbk(struct roc_nix *roc_nix);
 269bool __roc_api roc_nix_is_sdp(struct roc_nix *roc_nix);
 270bool __roc_api roc_nix_is_pf(struct roc_nix *roc_nix);
 271bool __roc_api roc_nix_is_vf_or_sdp(struct roc_nix *roc_nix);
 272int __roc_api roc_nix_get_base_chan(struct roc_nix *roc_nix);
 273int __roc_api roc_nix_get_pf(struct roc_nix *roc_nix);
 274int __roc_api roc_nix_get_vf(struct roc_nix *roc_nix);
 275uint16_t __roc_api roc_nix_get_pf_func(struct roc_nix *roc_nix);
 276uint16_t __roc_api roc_nix_get_vwqe_interval(struct roc_nix *roc_nix);
 277int __roc_api roc_nix_max_pkt_len(struct roc_nix *roc_nix);
 278
 279/* LF ops */
 280int __roc_api roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq,
 281                               uint32_t nb_txq, uint64_t rx_cfg);
 282int __roc_api roc_nix_lf_free(struct roc_nix *roc_nix);
 283int __roc_api roc_nix_lf_inl_ipsec_cfg(struct roc_nix *roc_nix,
 284                                       struct roc_nix_ipsec_cfg *cfg, bool enb);
 285
 286/* Debug */
 287int __roc_api roc_nix_lf_get_reg_count(struct roc_nix *roc_nix);
 288int __roc_api roc_nix_lf_reg_dump(struct roc_nix *roc_nix, uint64_t *data);
 289int __roc_api roc_nix_queues_ctx_dump(struct roc_nix *roc_nix);
 290void __roc_api roc_nix_cqe_dump(const struct nix_cqe_hdr_s *cq);
 291void __roc_api roc_nix_rq_dump(struct roc_nix_rq *rq);
 292void __roc_api roc_nix_cq_dump(struct roc_nix_cq *cq);
 293void __roc_api roc_nix_sq_dump(struct roc_nix_sq *sq);
 294void __roc_api roc_nix_tm_dump(struct roc_nix *roc_nix);
 295void __roc_api roc_nix_dump(struct roc_nix *roc_nix);
 296
 297/* IRQ */
 298void __roc_api roc_nix_rx_queue_intr_enable(struct roc_nix *roc_nix,
 299                                            uint16_t rxq_id);
 300void __roc_api roc_nix_rx_queue_intr_disable(struct roc_nix *roc_nix,
 301                                             uint16_t rxq_id);
 302void __roc_api roc_nix_err_intr_ena_dis(struct roc_nix *roc_nix, bool enb);
 303void __roc_api roc_nix_ras_intr_ena_dis(struct roc_nix *roc_nix, bool enb);
 304int __roc_api roc_nix_register_queue_irqs(struct roc_nix *roc_nix);
 305void __roc_api roc_nix_unregister_queue_irqs(struct roc_nix *roc_nix);
 306int __roc_api roc_nix_register_cq_irqs(struct roc_nix *roc_nix);
 307void __roc_api roc_nix_unregister_cq_irqs(struct roc_nix *roc_nix);
 308
 309/* Traffic Management */
 310#define ROC_NIX_TM_MAX_SCHED_WT        ((uint8_t)~0)
 311#define ROC_NIX_TM_SHAPER_PROFILE_NONE UINT32_MAX
 312#define ROC_NIX_TM_NODE_ID_INVALID     UINT32_MAX
 313
 314enum roc_nix_tm_tree {
 315        ROC_NIX_TM_DEFAULT = 0,
 316        ROC_NIX_TM_RLIMIT,
 317        ROC_NIX_TM_USER,
 318        ROC_NIX_TM_TREE_MAX,
 319};
 320
 321enum roc_tm_node_level {
 322        ROC_TM_LVL_ROOT = 0,
 323        ROC_TM_LVL_SCH1,
 324        ROC_TM_LVL_SCH2,
 325        ROC_TM_LVL_SCH3,
 326        ROC_TM_LVL_SCH4,
 327        ROC_TM_LVL_QUEUE,
 328        ROC_TM_LVL_MAX,
 329};
 330
 331/*
 332 * TM runtime hierarchy init API.
 333 */
 334int __roc_api roc_nix_tm_init(struct roc_nix *roc_nix);
 335void __roc_api roc_nix_tm_fini(struct roc_nix *roc_nix);
 336int __roc_api roc_nix_tm_sq_aura_fc(struct roc_nix_sq *sq, bool enable);
 337int __roc_api roc_nix_tm_sq_flush_spin(struct roc_nix_sq *sq);
 338
 339/*
 340 * TM User hierarchy API.
 341 */
 342
 343struct roc_nix_tm_node {
 344#define ROC_NIX_TM_NODE_SZ (128)
 345        uint8_t reserved[ROC_NIX_TM_NODE_SZ];
 346
 347        uint32_t id;
 348        uint32_t parent_id;
 349        uint32_t priority;
 350        uint32_t weight;
 351        uint32_t shaper_profile_id;
 352        uint16_t lvl;
 353        bool pkt_mode;
 354        bool pkt_mode_set;
 355        /* Function to free this memory */
 356        void (*free_fn)(void *node);
 357};
 358
 359struct roc_nix_tm_shaper_profile {
 360#define ROC_NIX_TM_SHAPER_PROFILE_SZ (128)
 361        uint8_t reserved[ROC_NIX_TM_SHAPER_PROFILE_SZ];
 362
 363        uint32_t id;
 364        uint64_t commit_rate;
 365        uint64_t commit_sz;
 366        uint64_t peak_rate;
 367        uint64_t peak_sz;
 368        int32_t pkt_len_adj;
 369        bool pkt_mode;
 370        /* Function to free this memory */
 371        void (*free_fn)(void *profile);
 372};
 373
 374int __roc_api roc_nix_tm_node_add(struct roc_nix *roc_nix,
 375                                  struct roc_nix_tm_node *roc_node);
 376int __roc_api roc_nix_tm_node_delete(struct roc_nix *roc_nix, uint32_t node_id,
 377                                     bool free);
 378int __roc_api roc_nix_tm_free_resources(struct roc_nix *roc_nix, bool hw_only);
 379int __roc_api roc_nix_tm_node_suspend_resume(struct roc_nix *roc_nix,
 380                                             uint32_t node_id, bool suspend);
 381int __roc_api roc_nix_tm_node_parent_update(struct roc_nix *roc_nix,
 382                                            uint32_t node_id,
 383                                            uint32_t new_parent_id,
 384                                            uint32_t priority, uint32_t weight);
 385int __roc_api roc_nix_tm_node_shaper_update(struct roc_nix *roc_nix,
 386                                            uint32_t node_id,
 387                                            uint32_t profile_id,
 388                                            bool force_update);
 389int __roc_api roc_nix_tm_node_pkt_mode_update(struct roc_nix *roc_nix,
 390                                              uint32_t node_id, bool pkt_mode);
 391int __roc_api roc_nix_tm_shaper_profile_add(
 392        struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *profile);
 393int __roc_api roc_nix_tm_shaper_profile_update(
 394        struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *profile);
 395int __roc_api roc_nix_tm_shaper_profile_delete(struct roc_nix *roc_nix,
 396                                               uint32_t id);
 397
 398int __roc_api roc_nix_tm_prealloc_res(struct roc_nix *roc_nix, uint8_t lvl,
 399                                      uint16_t discontig, uint16_t contig);
 400uint16_t __roc_api roc_nix_tm_leaf_cnt(struct roc_nix *roc_nix);
 401
 402struct roc_nix_tm_node *__roc_api roc_nix_tm_node_get(struct roc_nix *roc_nix,
 403                                                      uint32_t node_id);
 404struct roc_nix_tm_node *__roc_api
 405roc_nix_tm_node_next(struct roc_nix *roc_nix, struct roc_nix_tm_node *__prev);
 406struct roc_nix_tm_shaper_profile *__roc_api
 407roc_nix_tm_shaper_profile_get(struct roc_nix *roc_nix, uint32_t profile_id);
 408struct roc_nix_tm_shaper_profile *__roc_api roc_nix_tm_shaper_profile_next(
 409        struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *__prev);
 410
 411/*
 412 * TM ratelimit tree API.
 413 */
 414int __roc_api roc_nix_tm_rlimit_sq(struct roc_nix *roc_nix, uint16_t qid,
 415                                   uint64_t rate);
 416/*
 417 * TM hierarchy enable/disable API.
 418 */
 419int __roc_api roc_nix_tm_hierarchy_disable(struct roc_nix *roc_nix);
 420int __roc_api roc_nix_tm_hierarchy_enable(struct roc_nix *roc_nix,
 421                                          enum roc_nix_tm_tree tree,
 422                                          bool xmit_enable);
 423
 424/*
 425 * TM utilities API.
 426 */
 427int __roc_api roc_nix_tm_node_lvl(struct roc_nix *roc_nix, uint32_t node_id);
 428bool __roc_api roc_nix_tm_root_has_sp(struct roc_nix *roc_nix);
 429void __roc_api roc_nix_tm_rsrc_max(bool pf, uint16_t schq[ROC_TM_LVL_MAX]);
 430int __roc_api roc_nix_tm_rsrc_count(struct roc_nix *roc_nix,
 431                                    uint16_t schq[ROC_TM_LVL_MAX]);
 432int __roc_api roc_nix_tm_node_name_get(struct roc_nix *roc_nix,
 433                                       uint32_t node_id, char *buf,
 434                                       size_t buflen);
 435
 436/* MAC */
 437int __roc_api roc_nix_mac_rxtx_start_stop(struct roc_nix *roc_nix, bool start);
 438int __roc_api roc_nix_mac_link_event_start_stop(struct roc_nix *roc_nix,
 439                                                bool start);
 440int __roc_api roc_nix_mac_loopback_enable(struct roc_nix *roc_nix, bool enable);
 441int __roc_api roc_nix_mac_addr_set(struct roc_nix *roc_nix,
 442                                   const uint8_t addr[]);
 443int __roc_api roc_nix_mac_max_entries_get(struct roc_nix *roc_nix);
 444int __roc_api roc_nix_mac_addr_add(struct roc_nix *roc_nix, uint8_t addr[]);
 445int __roc_api roc_nix_mac_addr_del(struct roc_nix *roc_nix, uint32_t index);
 446int __roc_api roc_nix_mac_promisc_mode_enable(struct roc_nix *roc_nix,
 447                                              int enable);
 448int __roc_api roc_nix_mac_link_state_set(struct roc_nix *roc_nix, uint8_t up);
 449int __roc_api roc_nix_mac_link_info_set(struct roc_nix *roc_nix,
 450                                        struct roc_nix_link_info *link_info);
 451int __roc_api roc_nix_mac_link_info_get(struct roc_nix *roc_nix,
 452                                        struct roc_nix_link_info *link_info);
 453int __roc_api roc_nix_mac_mtu_set(struct roc_nix *roc_nix, uint16_t mtu);
 454int __roc_api roc_nix_mac_max_rx_len_set(struct roc_nix *roc_nix,
 455                                         uint16_t maxlen);
 456int __roc_api roc_nix_mac_link_cb_register(struct roc_nix *roc_nix,
 457                                           link_status_t link_update);
 458void __roc_api roc_nix_mac_link_cb_unregister(struct roc_nix *roc_nix);
 459
 460/* Ops */
 461int __roc_api roc_nix_switch_hdr_set(struct roc_nix *roc_nix,
 462                                     uint64_t switch_header_type);
 463int __roc_api roc_nix_lso_fmt_setup(struct roc_nix *roc_nix);
 464int __roc_api roc_nix_lso_fmt_get(struct roc_nix *roc_nix,
 465                                  uint8_t udp_tun[ROC_NIX_LSO_TUN_MAX],
 466                                  uint8_t tun[ROC_NIX_LSO_TUN_MAX]);
 467int __roc_api roc_nix_lso_custom_fmt_setup(struct roc_nix *roc_nix,
 468                                           struct nix_lso_format *fields,
 469                                           uint16_t nb_fields);
 470
 471int __roc_api roc_nix_eeprom_info_get(struct roc_nix *roc_nix,
 472                                      struct roc_nix_eeprom_info *info);
 473
 474/* Flow control */
 475int __roc_api roc_nix_fc_config_set(struct roc_nix *roc_nix,
 476                                    struct roc_nix_fc_cfg *fc_cfg);
 477
 478int __roc_api roc_nix_fc_config_get(struct roc_nix *roc_nix,
 479                                    struct roc_nix_fc_cfg *fc_cfg);
 480
 481int __roc_api roc_nix_fc_mode_set(struct roc_nix *roc_nix,
 482                                  enum roc_nix_fc_mode mode);
 483
 484enum roc_nix_fc_mode __roc_api roc_nix_fc_mode_get(struct roc_nix *roc_nix);
 485
 486/* NPC */
 487int __roc_api roc_nix_npc_promisc_ena_dis(struct roc_nix *roc_nix, int enable);
 488
 489int __roc_api roc_nix_npc_mac_addr_set(struct roc_nix *roc_nix, uint8_t addr[]);
 490
 491int __roc_api roc_nix_npc_mac_addr_get(struct roc_nix *roc_nix, uint8_t *addr);
 492
 493int __roc_api roc_nix_npc_rx_ena_dis(struct roc_nix *roc_nix, bool enable);
 494
 495int __roc_api roc_nix_npc_mcast_config(struct roc_nix *roc_nix,
 496                                       bool mcast_enable, bool prom_enable);
 497
 498/* RSS */
 499void __roc_api roc_nix_rss_key_default_fill(struct roc_nix *roc_nix,
 500                                            uint8_t key[ROC_NIX_RSS_KEY_LEN]);
 501void __roc_api roc_nix_rss_key_set(struct roc_nix *roc_nix,
 502                                   const uint8_t key[ROC_NIX_RSS_KEY_LEN]);
 503void __roc_api roc_nix_rss_key_get(struct roc_nix *roc_nix,
 504                                   uint8_t key[ROC_NIX_RSS_KEY_LEN]);
 505int __roc_api roc_nix_rss_reta_set(struct roc_nix *roc_nix, uint8_t group,
 506                                   uint16_t reta[ROC_NIX_RSS_RETA_MAX]);
 507int __roc_api roc_nix_rss_reta_get(struct roc_nix *roc_nix, uint8_t group,
 508                                   uint16_t reta[ROC_NIX_RSS_RETA_MAX]);
 509int __roc_api roc_nix_rss_flowkey_set(struct roc_nix *roc_nix, uint8_t *alg_idx,
 510                                      uint32_t flowkey, uint8_t group,
 511                                      int mcam_index);
 512int __roc_api roc_nix_rss_default_setup(struct roc_nix *roc_nix,
 513                                        uint32_t flowkey);
 514
 515/* Stats */
 516int __roc_api roc_nix_stats_get(struct roc_nix *roc_nix,
 517                                struct roc_nix_stats *stats);
 518int __roc_api roc_nix_stats_reset(struct roc_nix *roc_nix);
 519int __roc_api roc_nix_stats_queue_get(struct roc_nix *roc_nix, uint16_t qid,
 520                                      bool is_rx,
 521                                      struct roc_nix_stats_queue *qstats);
 522int __roc_api roc_nix_stats_queue_reset(struct roc_nix *roc_nix, uint16_t qid,
 523                                        bool is_rx);
 524int __roc_api roc_nix_num_xstats_get(struct roc_nix *roc_nix);
 525int __roc_api roc_nix_xstats_get(struct roc_nix *roc_nix,
 526                                 struct roc_nix_xstat *xstats, unsigned int n);
 527int __roc_api roc_nix_xstats_names_get(struct roc_nix *roc_nix,
 528                                       struct roc_nix_xstat_name *xstats_names,
 529                                       unsigned int limit);
 530
 531/* Queue */
 532int __roc_api roc_nix_rq_init(struct roc_nix *roc_nix, struct roc_nix_rq *rq,
 533                              bool ena);
 534int __roc_api roc_nix_rq_modify(struct roc_nix *roc_nix, struct roc_nix_rq *rq,
 535                                bool ena);
 536int __roc_api roc_nix_rq_ena_dis(struct roc_nix_rq *rq, bool enable);
 537int __roc_api roc_nix_rq_fini(struct roc_nix_rq *rq);
 538int __roc_api roc_nix_cq_init(struct roc_nix *roc_nix, struct roc_nix_cq *cq);
 539int __roc_api roc_nix_cq_fini(struct roc_nix_cq *cq);
 540int __roc_api roc_nix_sq_init(struct roc_nix *roc_nix, struct roc_nix_sq *sq);
 541int __roc_api roc_nix_sq_fini(struct roc_nix_sq *sq);
 542
 543/* PTP */
 544int __roc_api roc_nix_ptp_rx_ena_dis(struct roc_nix *roc_nix, int enable);
 545int __roc_api roc_nix_ptp_tx_ena_dis(struct roc_nix *roc_nix, int enable);
 546int __roc_api roc_nix_ptp_clock_read(struct roc_nix *roc_nix, uint64_t *clock,
 547                                     uint64_t *tsc, uint8_t is_pmu);
 548int __roc_api roc_nix_ptp_sync_time_adjust(struct roc_nix *roc_nix,
 549                                           int64_t delta);
 550int __roc_api roc_nix_ptp_info_cb_register(struct roc_nix *roc_nix,
 551                                           ptp_info_update_t ptp_update);
 552void __roc_api roc_nix_ptp_info_cb_unregister(struct roc_nix *roc_nix);
 553
 554/* VLAN */
 555int __roc_api
 556roc_nix_vlan_mcam_entry_read(struct roc_nix *roc_nix, uint32_t index,
 557                             struct npc_mcam_read_entry_rsp **rsp);
 558int __roc_api roc_nix_vlan_mcam_entry_write(struct roc_nix *roc_nix,
 559                                            uint32_t index,
 560                                            struct mcam_entry *entry,
 561                                            uint8_t intf, uint8_t enable);
 562int __roc_api roc_nix_vlan_mcam_entry_alloc_and_write(struct roc_nix *roc_nix,
 563                                                      struct mcam_entry *entry,
 564                                                      uint8_t intf,
 565                                                      uint8_t priority,
 566                                                      uint8_t ref_entry);
 567int __roc_api roc_nix_vlan_mcam_entry_free(struct roc_nix *roc_nix,
 568                                           uint32_t index);
 569int __roc_api roc_nix_vlan_mcam_entry_ena_dis(struct roc_nix *roc_nix,
 570                                              uint32_t index, const int enable);
 571int __roc_api roc_nix_vlan_strip_vtag_ena_dis(struct roc_nix *roc_nix,
 572                                              bool enable);
 573int __roc_api roc_nix_vlan_insert_ena_dis(struct roc_nix *roc_nix,
 574                                          struct roc_nix_vlan_config *vlan_cfg,
 575                                          uint64_t *mcam_index, bool enable);
 576int __roc_api roc_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t type,
 577                                    uint16_t tpid);
 578
 579/* MCAST*/
 580int __roc_api roc_nix_mcast_mcam_entry_alloc(struct roc_nix *roc_nix,
 581                                             uint16_t nb_entries,
 582                                             uint8_t priority,
 583                                             uint16_t index[]);
 584int __roc_api roc_nix_mcast_mcam_entry_free(struct roc_nix *roc_nix,
 585                                            uint32_t index);
 586int __roc_api roc_nix_mcast_mcam_entry_write(struct roc_nix *roc_nix,
 587                                             struct mcam_entry *entry,
 588                                             uint32_t index, uint8_t intf,
 589                                             uint64_t action);
 590int __roc_api roc_nix_mcast_mcam_entry_ena_dis(struct roc_nix *roc_nix,
 591                                               uint32_t index, bool enable);
 592#endif /* _ROC_NIX_H_ */
 593