18dcdf319SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 28dcdf319SJerin Jacob * Copyright(C) 2021 Marvell. 38dcdf319SJerin Jacob */ 48dcdf319SJerin Jacob 58dcdf319SJerin Jacob #ifndef _ROC_NIX_H_ 68dcdf319SJerin Jacob #define _ROC_NIX_H_ 78dcdf319SJerin Jacob 88dcdf319SJerin Jacob /* Constants */ 97a63d75eSSunil Kumar Kori #define ROC_NIX_BPF_PER_PFFUNC 64 10b609507bSSunil Kumar Kori #define ROC_NIX_BPF_ID_INVALID 0xFFFF 11b7cb2203SSunil Kumar Kori #define ROC_NIX_BPF_LEVEL_IDX_INVALID 0xFF 1205a944feSSunil Kumar Kori #define ROC_NIX_BPF_LEVEL_MAX 3 13c8881e6eSSunil Kumar Kori #define ROC_NIX_BPF_STATS_MAX 12 1467e1cbf3SRakesh Kudurumalla #define ROC_NIX_MTR_ID_INVALID UINT32_MAX 15cc90e35bSHarman Kalra #define ROC_NIX_PFC_CLASS_INVALID UINT8_MAX 16641e1024SSatha Rao #define ROC_NIX_SQB_THRESH 30U 171134d758SPavan Nikhilesh #define ROC_NIX_SQB_SLACK 12U 183742b8d5SSunil Kumar Kori #define ROC_NIX_AURA_THRESH 95U 19b7cb2203SSunil Kumar Kori 204d00b8c6SSatha Rao /* Reserved interface types for BPID allocation */ 214d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_CGX 0 224d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_LBK 1 234d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_SDP 2 244d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_CPT 3 254d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_RSVD 4 264d00b8c6SSatha Rao 274d00b8c6SSatha Rao /* Application based types for BPID allocation, start from end (255 unused rsvd) */ 284d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_CPT_NIX 254 294d00b8c6SSatha Rao #define ROC_NIX_INTF_TYPE_SSO 253 304d00b8c6SSatha Rao 318dcdf319SJerin Jacob enum roc_nix_rss_reta_sz { 328dcdf319SJerin Jacob ROC_NIX_RSS_RETA_SZ_64 = 64, 338dcdf319SJerin Jacob ROC_NIX_RSS_RETA_SZ_128 = 128, 348dcdf319SJerin Jacob ROC_NIX_RSS_RETA_SZ_256 = 256, 358dcdf319SJerin Jacob }; 368dcdf319SJerin Jacob 378dcdf319SJerin Jacob enum roc_nix_sq_max_sqe_sz { 388dcdf319SJerin Jacob roc_nix_maxsqesz_w16 = NIX_MAXSQESZ_W16, 398dcdf319SJerin Jacob roc_nix_maxsqesz_w8 = NIX_MAXSQESZ_W8, 408dcdf319SJerin Jacob }; 418dcdf319SJerin Jacob 42da57d458SSunil Kumar Kori enum roc_nix_fc_mode { 43da57d458SSunil Kumar Kori ROC_NIX_FC_NONE = 0, 44da57d458SSunil Kumar Kori ROC_NIX_FC_RX, 45da57d458SSunil Kumar Kori ROC_NIX_FC_TX, 46da57d458SSunil Kumar Kori ROC_NIX_FC_FULL 47da57d458SSunil Kumar Kori }; 48da57d458SSunil Kumar Kori 4962240569SSunil Kumar Kori enum roc_nix_vlan_type { 5062240569SSunil Kumar Kori ROC_NIX_VLAN_TYPE_INNER = 0x01, 5162240569SSunil Kumar Kori ROC_NIX_VLAN_TYPE_OUTER = 0x02, 5262240569SSunil Kumar Kori }; 5362240569SSunil Kumar Kori 54b7cb2203SSunil Kumar Kori enum roc_nix_bpf_level_flag { 55b7cb2203SSunil Kumar Kori ROC_NIX_BPF_LEVEL_F_LEAF = BIT(0), 56b7cb2203SSunil Kumar Kori ROC_NIX_BPF_LEVEL_F_MID = BIT(1), 57b7cb2203SSunil Kumar Kori ROC_NIX_BPF_LEVEL_F_TOP = BIT(2), 58b7cb2203SSunil Kumar Kori }; 59b7cb2203SSunil Kumar Kori 60ac35d4bfSSunil Kumar Kori enum roc_nix_bpf_precolor_tbl_size { 61ac35d4bfSSunil Kumar Kori ROC_NIX_BPF_PRECOLOR_TBL_SIZE_GEN = 16, 62ac35d4bfSSunil Kumar Kori ROC_NIX_BPF_PRECOLOR_TBL_SIZE_VLAN = 16, 63ac35d4bfSSunil Kumar Kori ROC_NIX_BPF_PRECOLOR_TBL_SIZE_DSCP = 64, 64ac35d4bfSSunil Kumar Kori }; 65ac35d4bfSSunil Kumar Kori 664ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_pc_mode { 674ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_PC_MODE_VLAN_INNER, 684ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_PC_MODE_VLAN_OUTER, 694ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_PC_MODE_DSCP_INNER, 704ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_PC_MODE_DSCP_OUTER, 714ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_PC_MODE_GEN_INNER, 724ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_PC_MODE_GEN_OUTER 734ad8bc2fSSunil Kumar Kori }; 744ad8bc2fSSunil Kumar Kori 754ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_color { 764ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_COLOR_GREEN, 774ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_COLOR_YELLOW, 784ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_COLOR_RED, 794ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_COLOR_MAX 804ad8bc2fSSunil Kumar Kori }; 814ad8bc2fSSunil Kumar Kori 824ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_algo { 834ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_ALGO_NONE, 844ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_ALGO_2698, 854ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_ALGO_4115, 864ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_ALGO_2697 874ad8bc2fSSunil Kumar Kori }; 884ad8bc2fSSunil Kumar Kori 894ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_lmode { ROC_NIX_BPF_LMODE_BYTE, ROC_NIX_BPF_LMODE_PACKET }; 904ad8bc2fSSunil Kumar Kori 914ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_action { 924ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_ACTION_PASS, 934ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_ACTION_DROP, 944ad8bc2fSSunil Kumar Kori ROC_NIX_BPF_ACTION_RED 954ad8bc2fSSunil Kumar Kori }; 964ad8bc2fSSunil Kumar Kori 97c8881e6eSSunil Kumar Kori enum roc_nix_bpf_stats { 98c8881e6eSSunil Kumar Kori ROC_NIX_BPF_GREEN_PKT_F_PASS = BIT_ULL(0), 99c8881e6eSSunil Kumar Kori ROC_NIX_BPF_GREEN_OCTS_F_PASS = BIT_ULL(1), 100c8881e6eSSunil Kumar Kori ROC_NIX_BPF_GREEN_PKT_F_DROP = BIT_ULL(2), 101c8881e6eSSunil Kumar Kori ROC_NIX_BPF_GREEN_OCTS_F_DROP = BIT_ULL(3), 102c8881e6eSSunil Kumar Kori ROC_NIX_BPF_YELLOW_PKT_F_PASS = BIT_ULL(4), 103c8881e6eSSunil Kumar Kori ROC_NIX_BPF_YELLOW_OCTS_F_PASS = BIT_ULL(5), 104c8881e6eSSunil Kumar Kori ROC_NIX_BPF_YELLOW_PKT_F_DROP = BIT_ULL(6), 105c8881e6eSSunil Kumar Kori ROC_NIX_BPF_YELLOW_OCTS_F_DROP = BIT_ULL(7), 106c8881e6eSSunil Kumar Kori ROC_NIX_BPF_RED_PKT_F_PASS = BIT_ULL(8), 107c8881e6eSSunil Kumar Kori ROC_NIX_BPF_RED_OCTS_F_PASS = BIT_ULL(9), 108c8881e6eSSunil Kumar Kori ROC_NIX_BPF_RED_PKT_F_DROP = BIT_ULL(10), 109c8881e6eSSunil Kumar Kori ROC_NIX_BPF_RED_OCTS_F_DROP = BIT_ULL(11), 110c8881e6eSSunil Kumar Kori }; 111c8881e6eSSunil Kumar Kori 1124ad8bc2fSSunil Kumar Kori struct roc_nix_bpf_cfg { 1134ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_algo alg; 1144ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_lmode lmode; 1154ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_color icolor; 1164ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_pc_mode pc_mode; 1174ad8bc2fSSunil Kumar Kori bool tnl_ena; 1184ad8bc2fSSunil Kumar Kori union { 1194ad8bc2fSSunil Kumar Kori /* Valid when *alg* is set to ROC_NIX_BPF_ALGO_2697. */ 1204ad8bc2fSSunil Kumar Kori struct { 1214ad8bc2fSSunil Kumar Kori uint64_t cir; 1224ad8bc2fSSunil Kumar Kori uint64_t cbs; 1234ad8bc2fSSunil Kumar Kori uint64_t ebs; 1244ad8bc2fSSunil Kumar Kori } algo2697; 1254ad8bc2fSSunil Kumar Kori 1264ad8bc2fSSunil Kumar Kori /* Valid when *alg* is set to ROC_NIX_BPF_ALGO_2698. */ 1274ad8bc2fSSunil Kumar Kori struct { 1284ad8bc2fSSunil Kumar Kori uint64_t cir; 1294ad8bc2fSSunil Kumar Kori uint64_t pir; 1304ad8bc2fSSunil Kumar Kori uint64_t cbs; 1314ad8bc2fSSunil Kumar Kori uint64_t pbs; 1324ad8bc2fSSunil Kumar Kori } algo2698; 1334ad8bc2fSSunil Kumar Kori 1344ad8bc2fSSunil Kumar Kori /* Valid when *alg* is set to ROC_NIX_BPF_ALGO_4115. */ 1354ad8bc2fSSunil Kumar Kori struct { 1364ad8bc2fSSunil Kumar Kori uint64_t cir; 1374ad8bc2fSSunil Kumar Kori uint64_t eir; 1384ad8bc2fSSunil Kumar Kori uint64_t cbs; 1394ad8bc2fSSunil Kumar Kori uint64_t ebs; 1404ad8bc2fSSunil Kumar Kori } algo4115; 1414ad8bc2fSSunil Kumar Kori }; 1424ad8bc2fSSunil Kumar Kori 1434ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_action action[ROC_NIX_BPF_COLOR_MAX]; 1444ad8bc2fSSunil Kumar Kori 1454ad8bc2fSSunil Kumar Kori /* Reserved for future config*/ 1464ad8bc2fSSunil Kumar Kori uint32_t rsvd[3]; 1474ad8bc2fSSunil Kumar Kori }; 1484ad8bc2fSSunil Kumar Kori 1497a63d75eSSunil Kumar Kori struct roc_nix_bpf_objs { 1507a63d75eSSunil Kumar Kori uint16_t level; 1517a63d75eSSunil Kumar Kori uint16_t count; 1527a63d75eSSunil Kumar Kori uint16_t ids[ROC_NIX_BPF_PER_PFFUNC]; 1537a63d75eSSunil Kumar Kori }; 1547a63d75eSSunil Kumar Kori 15533961101SSunil Kumar Kori struct roc_nix_bpf_precolor { 15633961101SSunil Kumar Kori #define ROC_NIX_BPF_PRE_COLOR_MAX 64 15733961101SSunil Kumar Kori uint8_t count; 15833961101SSunil Kumar Kori enum roc_nix_bpf_pc_mode mode; 15933961101SSunil Kumar Kori enum roc_nix_bpf_color color[ROC_NIX_BPF_PRE_COLOR_MAX]; 16033961101SSunil Kumar Kori }; 16133961101SSunil Kumar Kori 16262240569SSunil Kumar Kori struct roc_nix_vlan_config { 16362240569SSunil Kumar Kori uint32_t type; 16462240569SSunil Kumar Kori union { 16562240569SSunil Kumar Kori struct { 16662240569SSunil Kumar Kori uint32_t vtag_inner; 16762240569SSunil Kumar Kori uint32_t vtag_outer; 16862240569SSunil Kumar Kori } vlan; 16962240569SSunil Kumar Kori 17062240569SSunil Kumar Kori struct { 17162240569SSunil Kumar Kori int idx_inner; 17262240569SSunil Kumar Kori int idx_outer; 17362240569SSunil Kumar Kori } mcam; 17462240569SSunil Kumar Kori }; 17562240569SSunil Kumar Kori }; 17662240569SSunil Kumar Kori 177da57d458SSunil Kumar Kori struct roc_nix_fc_cfg { 17858debb81SNithin Dabilpuram #define ROC_NIX_FC_RXCHAN_CFG 0 17958debb81SNithin Dabilpuram #define ROC_NIX_FC_CQ_CFG 1 18058debb81SNithin Dabilpuram #define ROC_NIX_FC_TM_CFG 2 181174f2f35SSunil Kumar Kori #define ROC_NIX_FC_RQ_CFG 3 18258debb81SNithin Dabilpuram uint8_t type; 183da57d458SSunil Kumar Kori union { 184da57d458SSunil Kumar Kori struct { 185da57d458SSunil Kumar Kori bool enable; 186da57d458SSunil Kumar Kori } rxchan_cfg; 187da57d458SSunil Kumar Kori 188da57d458SSunil Kumar Kori struct { 189da57d458SSunil Kumar Kori uint32_t rq; 19020d02329SSunil Kumar Kori uint16_t tc; 191da57d458SSunil Kumar Kori uint16_t cq_drop; 192da57d458SSunil Kumar Kori bool enable; 193da57d458SSunil Kumar Kori } cq_cfg; 19458debb81SNithin Dabilpuram 19558debb81SNithin Dabilpuram struct { 196174f2f35SSunil Kumar Kori uint32_t rq; 197174f2f35SSunil Kumar Kori uint16_t tc; 198174f2f35SSunil Kumar Kori uint16_t cq_drop; 199174f2f35SSunil Kumar Kori uint64_t pool; 200a6fd3855SSunil Kumar Kori uint64_t spb_pool; 2013742b8d5SSunil Kumar Kori uint64_t pool_drop_pct; 20254f14e04SSunil Kumar Kori uint64_t spb_pool_drop_pct; 20354f14e04SSunil Kumar Kori bool enable; 204174f2f35SSunil Kumar Kori } rq_cfg; 205174f2f35SSunil Kumar Kori 206174f2f35SSunil Kumar Kori struct { 20720d02329SSunil Kumar Kori uint32_t sq; 20820d02329SSunil Kumar Kori uint16_t tc; 20958debb81SNithin Dabilpuram bool enable; 21058debb81SNithin Dabilpuram } tm_cfg; 211da57d458SSunil Kumar Kori }; 212da57d458SSunil Kumar Kori }; 213da57d458SSunil Kumar Kori 21420d02329SSunil Kumar Kori struct roc_nix_pfc_cfg { 21520d02329SSunil Kumar Kori enum roc_nix_fc_mode mode; 21620d02329SSunil Kumar Kori /* For SET, tc must be [0, 15]. 21720d02329SSunil Kumar Kori * For GET, TC will represent bitmap 21820d02329SSunil Kumar Kori */ 21920d02329SSunil Kumar Kori uint16_t tc; 22020d02329SSunil Kumar Kori }; 22120d02329SSunil Kumar Kori 222dfa267ecSSunil Kumar Kori struct roc_nix_eeprom_info { 223dfa267ecSSunil Kumar Kori #define ROC_NIX_EEPROM_SIZE 256 224dfa267ecSSunil Kumar Kori uint16_t sff_id; 225dfa267ecSSunil Kumar Kori uint8_t buf[ROC_NIX_EEPROM_SIZE]; 226dfa267ecSSunil Kumar Kori }; 227dfa267ecSSunil Kumar Kori 228c443e0d3SSunil Kumar Kori /* Range to adjust PTP frequency. Valid range is 229c443e0d3SSunil Kumar Kori * (-ROC_NIX_PTP_FREQ_ADJUST, ROC_NIX_PTP_FREQ_ADJUST) 230c443e0d3SSunil Kumar Kori */ 231c443e0d3SSunil Kumar Kori #define ROC_NIX_PTP_FREQ_ADJUST (1 << 9) 232c443e0d3SSunil Kumar Kori 2338dcdf319SJerin Jacob /* NIX LF RX offload configuration flags. 2348dcdf319SJerin Jacob * These are input flags to roc_nix_lf_alloc:rx_cfg 2358dcdf319SJerin Jacob */ 2368dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_DROP_RE BIT_ULL(32) 2378dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_L2_LEN_ERR BIT_ULL(33) 2388dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_IP6_UDP_OPT BIT_ULL(34) 2398dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_DIS_APAD BIT_ULL(35) 2408dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_CSUM_IL4 BIT_ULL(36) 2418dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_CSUM_OL4 BIT_ULL(37) 2428dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_LEN_IL4 BIT_ULL(38) 2438dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_LEN_IL3 BIT_ULL(39) 2448dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_LEN_OL4 BIT_ULL(40) 2458dcdf319SJerin Jacob #define ROC_NIX_LF_RX_CFG_LEN_OL3 BIT_ULL(41) 2468dcdf319SJerin Jacob 24790870a66SRakesh Kudurumalla #define ROC_NIX_LF_RX_CFG_RX_ERROR_MASK 0xFFFFFFFFFFF80000 24890870a66SRakesh Kudurumalla #define ROC_NIX_RE_PARTIAL BIT_ULL(1) 24990870a66SRakesh Kudurumalla #define ROC_NIX_RE_JABBER BIT_ULL(2) 25090870a66SRakesh Kudurumalla #define ROC_NIX_RE_CRC8_PCH BIT_ULL(5) 25190870a66SRakesh Kudurumalla #define ROC_NIX_RE_CNC_INV BIT_ULL(6) 25290870a66SRakesh Kudurumalla #define ROC_NIX_RE_FCS BIT_ULL(7) 25390870a66SRakesh Kudurumalla #define ROC_NIX_RE_FCS_RCV BIT_ULL(8) 25490870a66SRakesh Kudurumalla #define ROC_NIX_RE_TERMINATE BIT_ULL(9) 25590870a66SRakesh Kudurumalla #define ROC_NIX_RE_MACSEC BIT_ULL(10) 25690870a66SRakesh Kudurumalla #define ROC_NIX_RE_RX_CTL BIT_ULL(11) 25790870a66SRakesh Kudurumalla #define ROC_NIX_RE_SKIP BIT_ULL(12) 25890870a66SRakesh Kudurumalla #define ROC_NIX_RE_DMAPKT BIT_ULL(15) 25990870a66SRakesh Kudurumalla #define ROC_NIX_RE_UNDERSIZE BIT_ULL(16) 26090870a66SRakesh Kudurumalla #define ROC_NIX_RE_OVERSIZE BIT_ULL(17) 26190870a66SRakesh Kudurumalla #define ROC_NIX_RE_OL2_LENMISM BIT_ULL(18) 26290870a66SRakesh Kudurumalla 2638dcdf319SJerin Jacob /* Group 0 will be used for RSS, 1 -7 will be used for npc_flow RSS action*/ 2648dcdf319SJerin Jacob #define ROC_NIX_RSS_GROUP_DEFAULT 0 2658dcdf319SJerin Jacob #define ROC_NIX_RSS_GRPS 8 2668dcdf319SJerin Jacob #define ROC_NIX_RSS_RETA_MAX ROC_NIX_RSS_RETA_SZ_256 2678dcdf319SJerin Jacob #define ROC_NIX_RSS_KEY_LEN 48 /* 352 Bits */ 2686b7fcb7aSSatha Rao #define ROC_NIX_RSS_MCAM_IDX_DEFAULT (-1) 2698dcdf319SJerin Jacob 2708dcdf319SJerin Jacob #define ROC_NIX_VWQE_MAX_SIZE_LOG2 11 2718dcdf319SJerin Jacob #define ROC_NIX_VWQE_MIN_SIZE_LOG2 2 27219a2b549SJerin Jacob 273218d022eSJerin Jacob struct roc_nix_stats { 274218d022eSJerin Jacob /* Rx */ 275218d022eSJerin Jacob uint64_t rx_octs; 276218d022eSJerin Jacob uint64_t rx_ucast; 277218d022eSJerin Jacob uint64_t rx_bcast; 278218d022eSJerin Jacob uint64_t rx_mcast; 279218d022eSJerin Jacob uint64_t rx_drop; 280218d022eSJerin Jacob uint64_t rx_drop_octs; 281218d022eSJerin Jacob uint64_t rx_fcs; 282218d022eSJerin Jacob uint64_t rx_err; 283218d022eSJerin Jacob uint64_t rx_drop_bcast; 284218d022eSJerin Jacob uint64_t rx_drop_mcast; 285218d022eSJerin Jacob uint64_t rx_drop_l3_bcast; 286218d022eSJerin Jacob uint64_t rx_drop_l3_mcast; 287218d022eSJerin Jacob /* Tx */ 288218d022eSJerin Jacob uint64_t tx_ucast; 289218d022eSJerin Jacob uint64_t tx_bcast; 290218d022eSJerin Jacob uint64_t tx_mcast; 291218d022eSJerin Jacob uint64_t tx_drop; 292218d022eSJerin Jacob uint64_t tx_octs; 293218d022eSJerin Jacob }; 294218d022eSJerin Jacob 295218d022eSJerin Jacob struct roc_nix_stats_queue { 296218d022eSJerin Jacob union { 297218d022eSJerin Jacob struct { 298218d022eSJerin Jacob /* Rx */ 299218d022eSJerin Jacob uint64_t rx_pkts; 300218d022eSJerin Jacob uint64_t rx_octs; 301218d022eSJerin Jacob uint64_t rx_drop_pkts; 302218d022eSJerin Jacob uint64_t rx_drop_octs; 303218d022eSJerin Jacob uint64_t rx_error_pkts; 304218d022eSJerin Jacob }; 305218d022eSJerin Jacob struct { 306218d022eSJerin Jacob /* Tx */ 307218d022eSJerin Jacob uint64_t tx_pkts; 308218d022eSJerin Jacob uint64_t tx_octs; 309218d022eSJerin Jacob uint64_t tx_drop_pkts; 310218d022eSJerin Jacob uint64_t tx_drop_octs; 3113ae7a30eSSatha Rao uint64_t tx_age_drop_pkts; 3123ae7a30eSSatha Rao uint64_t tx_age_drop_octs; 313218d022eSJerin Jacob }; 314218d022eSJerin Jacob }; 315218d022eSJerin Jacob }; 316218d022eSJerin Jacob 31719a2b549SJerin Jacob struct roc_nix_rq { 31819a2b549SJerin Jacob /* Input parameters */ 31919a2b549SJerin Jacob uint16_t qid; 320b059bbb8SKommula Shiva Shankar uint16_t cqid; /* Not valid when SSO is enabled */ 32152511cd2SSunil Kumar Kori uint16_t bpf_id; 32219a2b549SJerin Jacob uint64_t aura_handle; 32319a2b549SJerin Jacob bool ipsech_ena; 32419a2b549SJerin Jacob uint16_t first_skip; 32519a2b549SJerin Jacob uint16_t later_skip; 32619a2b549SJerin Jacob uint16_t wqe_skip; 32719a2b549SJerin Jacob uint16_t lpb_size; 32819a2b549SJerin Jacob uint32_t tag_mask; 32919a2b549SJerin Jacob uint32_t flow_tag_width; 33019a2b549SJerin Jacob uint8_t tt; /* Valid when SSO is enabled */ 33119a2b549SJerin Jacob uint16_t hwgrp; /* Valid when SSO is enabled */ 33219a2b549SJerin Jacob bool sso_ena; 33319a2b549SJerin Jacob bool vwqe_ena; 33419a2b549SJerin Jacob uint64_t spb_aura_handle; /* Valid when SPB is enabled */ 33519a2b549SJerin Jacob uint16_t spb_size; /* Valid when SPB is enabled */ 33619a2b549SJerin Jacob bool spb_ena; 33719a2b549SJerin Jacob uint8_t vwqe_first_skip; 33819a2b549SJerin Jacob uint32_t vwqe_max_sz_exp; 33919a2b549SJerin Jacob uint64_t vwqe_wait_tmo; 34019a2b549SJerin Jacob uint64_t vwqe_aura_handle; 34195bec117SSatha Rao /* Average LPB aura level drop threshold for RED */ 34295bec117SSatha Rao uint8_t red_drop; 34395bec117SSatha Rao /* Average LPB aura level pass threshold for RED */ 34495bec117SSatha Rao uint8_t red_pass; 34595bec117SSatha Rao /* Average SPB aura level drop threshold for RED */ 34695bec117SSatha Rao uint8_t spb_red_drop; 34795bec117SSatha Rao /* Average SPB aura level pass threshold for RED */ 3485df46167SSunil Kumar Kori uint8_t xqe_red_pass; 3495df46167SSunil Kumar Kori /* Average xqe level drop threshold for RED */ 3505df46167SSunil Kumar Kori uint8_t xqe_red_drop; 3515df46167SSunil Kumar Kori /* Average xqe level pass threshold for RED */ 35295bec117SSatha Rao uint8_t spb_red_pass; 353c8c967e1SNithin Dabilpuram /* LPB aura drop enable */ 354c8c967e1SNithin Dabilpuram bool lpb_drop_ena; 355c8c967e1SNithin Dabilpuram /* SPB aura drop enable */ 356c8c967e1SNithin Dabilpuram bool spb_drop_ena; 35719a2b549SJerin Jacob /* End of Input parameters */ 35819a2b549SJerin Jacob struct roc_nix *roc_nix; 3590f3f3ad8SNithin Dabilpuram uint64_t meta_aura_handle; 3603c100e0eSNithin Dabilpuram uint16_t inl_dev_refs; 36178fb5efeSNithin Dabilpuram uint8_t tc; 36219a2b549SJerin Jacob }; 36319a2b549SJerin Jacob 36419a2b549SJerin Jacob struct roc_nix_cq { 36519a2b549SJerin Jacob /* Input parameters */ 36619a2b549SJerin Jacob uint16_t qid; 3679f8f1803SNithin Dabilpuram uint32_t nb_desc; 368e07ca13fSKommula Shiva Shankar uint8_t stash_thresh; 36919a2b549SJerin Jacob /* End of Input parameters */ 37019a2b549SJerin Jacob uint16_t drop_thresh; 37119a2b549SJerin Jacob struct roc_nix *roc_nix; 37219a2b549SJerin Jacob uintptr_t door; 37319a2b549SJerin Jacob int64_t *status; 37419a2b549SJerin Jacob uint64_t wdata; 37519a2b549SJerin Jacob void *desc_base; 37619a2b549SJerin Jacob uint32_t qmask; 37719a2b549SJerin Jacob uint32_t head; 37819a2b549SJerin Jacob }; 37919a2b549SJerin Jacob 380ae060709SJerin Jacob struct roc_nix_sq { 381ae060709SJerin Jacob /* Input parameters */ 382ae060709SJerin Jacob enum roc_nix_sq_max_sqe_sz max_sqe_sz; 383ae060709SJerin Jacob uint32_t nb_desc; 384ae060709SJerin Jacob uint16_t qid; 38587254db8SKommula Shiva Shankar uint16_t cqid; 386ba6855a0SKommula Shiva Shankar uint16_t cq_drop_thresh; 3876b7fcb7aSSatha Rao bool sso_ena; 38887254db8SKommula Shiva Shankar bool cq_ena; 389b714421eSSatha Rao uint8_t fc_hyst_bits; 390ae060709SJerin Jacob /* End of Input parameters */ 391ae060709SJerin Jacob uint16_t sqes_per_sqb_log2; 392ae060709SJerin Jacob struct roc_nix *roc_nix; 393ae060709SJerin Jacob uint64_t aura_handle; 394ae060709SJerin Jacob int16_t nb_sqb_bufs_adj; 395ae060709SJerin Jacob uint16_t nb_sqb_bufs; 396097835ecSPavan Nikhilesh uint16_t aura_sqb_bufs; 397ae060709SJerin Jacob plt_iova_t io_addr; 398ae060709SJerin Jacob void *lmt_addr; 399ae060709SJerin Jacob void *sqe_mem; 400ae060709SJerin Jacob void *fc; 401cc90e35bSHarman Kalra uint8_t tc; 402f6e0d835SRakesh Kudurumalla bool enable; 403ae060709SJerin Jacob }; 404ae060709SJerin Jacob 405313cc418SSunil Kumar Kori struct roc_nix_link_info { 406313cc418SSunil Kumar Kori uint64_t status : 1; 407313cc418SSunil Kumar Kori uint64_t full_duplex : 1; 408313cc418SSunil Kumar Kori uint64_t lmac_type_id : 4; 409313cc418SSunil Kumar Kori uint64_t speed : 20; 410313cc418SSunil Kumar Kori uint64_t autoneg : 1; 411313cc418SSunil Kumar Kori uint64_t fec : 2; 412313cc418SSunil Kumar Kori uint64_t port : 8; 413313cc418SSunil Kumar Kori }; 414313cc418SSunil Kumar Kori 4154efa6e82SSatha Rao /** Maximum name length for extended statistics counters */ 4164efa6e82SSatha Rao #define ROC_NIX_XSTATS_NAME_SIZE 64 4174efa6e82SSatha Rao 4184efa6e82SSatha Rao struct roc_nix_xstat { 4194efa6e82SSatha Rao uint64_t id; /**< The index in xstats name array. */ 4204efa6e82SSatha Rao uint64_t value; /**< The statistic counter value. */ 4214efa6e82SSatha Rao }; 4224efa6e82SSatha Rao 4234efa6e82SSatha Rao struct roc_nix_xstat_name { 4244efa6e82SSatha Rao char name[ROC_NIX_XSTATS_NAME_SIZE]; 4254efa6e82SSatha Rao }; 4264efa6e82SSatha Rao 427bd02fe78SVidya Sagar Velumuri struct roc_nix_ipsec_cfg { 428bd02fe78SVidya Sagar Velumuri uint32_t sa_size; 429bd02fe78SVidya Sagar Velumuri uint32_t tag_const; 430bd02fe78SVidya Sagar Velumuri plt_iova_t iova; 431bd02fe78SVidya Sagar Velumuri uint16_t max_sa; 432bd02fe78SVidya Sagar Velumuri uint8_t tt; 433bd02fe78SVidya Sagar Velumuri }; 434bd02fe78SVidya Sagar Velumuri 435313cc418SSunil Kumar Kori /* Link status update callback */ 436313cc418SSunil Kumar Kori typedef void (*link_status_t)(struct roc_nix *roc_nix, 437313cc418SSunil Kumar Kori struct roc_nix_link_info *link); 438313cc418SSunil Kumar Kori 439313cc418SSunil Kumar Kori /* PTP info update callback */ 440313cc418SSunil Kumar Kori typedef int (*ptp_info_update_t)(struct roc_nix *roc_nix, bool enable); 441313cc418SSunil Kumar Kori 442b7c31b6dSSatha Rao /* Queue Error get callback */ 443b7c31b6dSSatha Rao typedef void (*q_err_get_t)(struct roc_nix *roc_nix, void *data); 444b7c31b6dSSatha Rao 44502719901SHarman Kalra /* Link status get callback */ 44602719901SHarman Kalra typedef void (*link_info_get_t)(struct roc_nix *roc_nix, 44702719901SHarman Kalra struct roc_nix_link_info *link); 44802719901SHarman Kalra 449ec7c2f5aSShijith Thotton TAILQ_HEAD(roc_nix_list, roc_nix); 450ec7c2f5aSShijith Thotton 4518dcdf319SJerin Jacob struct roc_nix { 4528dcdf319SJerin Jacob /* Input parameters */ 4538dcdf319SJerin Jacob struct plt_pci_device *pci_dev; 4548dcdf319SJerin Jacob uint16_t port_id; 4558dcdf319SJerin Jacob bool rss_tag_as_xor; 4568dcdf319SJerin Jacob uint16_t max_sqb_count; 4578dcdf319SJerin Jacob enum roc_nix_rss_reta_sz reta_sz; 4588dcdf319SJerin Jacob bool enable_loop; 459b059bbb8SKommula Shiva Shankar bool tx_compl_ena; 4606b7fcb7aSSatha Rao bool hw_vlan_ins; 4616b7fcb7aSSatha Rao uint8_t lock_rx_ctx; 4621134d758SPavan Nikhilesh uint16_t sqb_slack; 463ee48f711SNithin Dabilpuram uint16_t outb_nb_crypto_qs; 4641134d758SPavan Nikhilesh uint32_t outb_nb_desc; 465fe5846bcSNithin Dabilpuram uint32_t ipsec_in_min_spi; 466fe5846bcSNithin Dabilpuram uint32_t ipsec_in_max_spi; 467fe5846bcSNithin Dabilpuram uint32_t ipsec_out_max_sa; 468902a4c02SSatha Rao uint32_t dwrr_mtu; 469a9207715SNithin Dabilpuram bool ipsec_out_sso_pffunc; 4701134d758SPavan Nikhilesh bool custom_sa_action; 4714fb24a62SRahul Bhansali bool local_meta_aura_ena; 4724fb24a62SRahul Bhansali uint32_t meta_buf_sz; 473747cd5e9SNithin Dabilpuram bool force_rx_aura_bp; 4747ea18718SRahul Bhansali bool custom_meta_aura_ena; 4754b8eb5bdSRahul Bhansali bool rx_inj_ena; 476*03b15238SSrujana Challa bool custom_inb_sa; 477eac95048SSatha Rao uint32_t root_sched_weight; 478*03b15238SSrujana Challa uint16_t inb_cfg_param1; 479*03b15238SSrujana Challa uint16_t inb_cfg_param2; 4808dcdf319SJerin Jacob /* End of input parameters */ 4818dcdf319SJerin Jacob /* LMT line base for "Per Core Tx LMT line" mode*/ 4828dcdf319SJerin Jacob uintptr_t lmt_base; 4838dcdf319SJerin Jacob bool io_enabled; 4848dcdf319SJerin Jacob bool rx_ptp_ena; 4858dcdf319SJerin Jacob uint16_t cints; 4864fb24a62SRahul Bhansali uint32_t buf_sz; 4874fb24a62SRahul Bhansali uint64_t meta_aura_handle; 4884fb24a62SRahul Bhansali uintptr_t meta_mempool; 489162c77c1SHarman Kalra uint16_t rep_cnt; 490162c77c1SHarman Kalra uint16_t rep_pfvf_map[MAX_PFVF_REP]; 491ec7c2f5aSShijith Thotton TAILQ_ENTRY(roc_nix) next; 4928dcdf319SJerin Jacob 4931c7a4d37SHarman Kalra #define ROC_NIX_MEM_SZ (6 * 1070) 4948dcdf319SJerin Jacob uint8_t reserved[ROC_NIX_MEM_SZ] __plt_cache_aligned; 4958dcdf319SJerin Jacob } __plt_cache_aligned; 4968dcdf319SJerin Jacob 497dfa267ecSSunil Kumar Kori enum roc_nix_lso_tun_type { 498dfa267ecSSunil Kumar Kori ROC_NIX_LSO_TUN_V4V4, 499dfa267ecSSunil Kumar Kori ROC_NIX_LSO_TUN_V4V6, 500dfa267ecSSunil Kumar Kori ROC_NIX_LSO_TUN_V6V4, 501dfa267ecSSunil Kumar Kori ROC_NIX_LSO_TUN_V6V6, 502dfa267ecSSunil Kumar Kori ROC_NIX_LSO_TUN_MAX, 503dfa267ecSSunil Kumar Kori }; 504dfa267ecSSunil Kumar Kori 5056fe49f10SNithin Dabilpuram /* Restrict CN9K sched weight to have a minimum quantum */ 5066fe49f10SNithin Dabilpuram #define ROC_NIX_CN9K_TM_RR_WEIGHT_MAX 255u 5076fe49f10SNithin Dabilpuram 5086fe49f10SNithin Dabilpuram /* NIX TM Inlines */ 5096fe49f10SNithin Dabilpuram static inline uint64_t 5106fe49f10SNithin Dabilpuram roc_nix_tm_max_sched_wt_get(void) 5116fe49f10SNithin Dabilpuram { 5126fe49f10SNithin Dabilpuram if (roc_model_is_cn9k()) 5136fe49f10SNithin Dabilpuram return ROC_NIX_CN9K_TM_RR_WEIGHT_MAX; 5146fe49f10SNithin Dabilpuram else 5156fe49f10SNithin Dabilpuram return NIX_TM_RR_WEIGHT_MAX; 5166fe49f10SNithin Dabilpuram } 5176fe49f10SNithin Dabilpuram 5186fe49f10SNithin Dabilpuram static inline uint64_t 5196fe49f10SNithin Dabilpuram roc_nix_tm_max_shaper_burst_get(void) 5206fe49f10SNithin Dabilpuram { 5216fe49f10SNithin Dabilpuram if (roc_model_is_cn9k()) 5226fe49f10SNithin Dabilpuram return NIX_CN9K_TM_MAX_SHAPER_BURST; 5236fe49f10SNithin Dabilpuram else 5246fe49f10SNithin Dabilpuram return NIX_TM_MAX_SHAPER_BURST; 5256fe49f10SNithin Dabilpuram } 5266fe49f10SNithin Dabilpuram 5278dcdf319SJerin Jacob /* Dev */ 5288dcdf319SJerin Jacob int __roc_api roc_nix_dev_init(struct roc_nix *roc_nix); 5298dcdf319SJerin Jacob int __roc_api roc_nix_dev_fini(struct roc_nix *roc_nix); 5308dcdf319SJerin Jacob 5318dcdf319SJerin Jacob /* Type */ 5328dcdf319SJerin Jacob bool __roc_api roc_nix_is_lbk(struct roc_nix *roc_nix); 53354ec7c87SHarman Kalra bool __roc_api roc_nix_is_esw(struct roc_nix *roc_nix); 5348dcdf319SJerin Jacob bool __roc_api roc_nix_is_sdp(struct roc_nix *roc_nix); 5358dcdf319SJerin Jacob bool __roc_api roc_nix_is_pf(struct roc_nix *roc_nix); 5368dcdf319SJerin Jacob bool __roc_api roc_nix_is_vf_or_sdp(struct roc_nix *roc_nix); 5378dcdf319SJerin Jacob int __roc_api roc_nix_get_base_chan(struct roc_nix *roc_nix); 538607a1546SRahul Bhansali uint8_t __roc_api roc_nix_get_rx_chan_cnt(struct roc_nix *roc_nix); 5398dcdf319SJerin Jacob int __roc_api roc_nix_get_pf(struct roc_nix *roc_nix); 5408dcdf319SJerin Jacob int __roc_api roc_nix_get_vf(struct roc_nix *roc_nix); 5418dcdf319SJerin Jacob uint16_t __roc_api roc_nix_get_pf_func(struct roc_nix *roc_nix); 5428dcdf319SJerin Jacob uint16_t __roc_api roc_nix_get_vwqe_interval(struct roc_nix *roc_nix); 5438dcdf319SJerin Jacob int __roc_api roc_nix_max_pkt_len(struct roc_nix *roc_nix); 5448dcdf319SJerin Jacob 5458dcdf319SJerin Jacob /* LF ops */ 5468dcdf319SJerin Jacob int __roc_api roc_nix_lf_alloc(struct roc_nix *roc_nix, uint32_t nb_rxq, 5478dcdf319SJerin Jacob uint32_t nb_txq, uint64_t rx_cfg); 5488dcdf319SJerin Jacob int __roc_api roc_nix_lf_free(struct roc_nix *roc_nix); 549bd02fe78SVidya Sagar Velumuri int __roc_api roc_nix_lf_inl_ipsec_cfg(struct roc_nix *roc_nix, 550bd02fe78SVidya Sagar Velumuri struct roc_nix_ipsec_cfg *cfg, bool enb); 5512635c25dSSrujana Challa int __roc_api roc_nix_cpt_ctx_cache_sync(struct roc_nix *roc_nix); 552c89e976cSNithin Dabilpuram int __roc_api roc_nix_rx_drop_re_set(struct roc_nix *roc_nix, bool ena); 5538dcdf319SJerin Jacob 5545aef7fbdSJerin Jacob /* Debug */ 5555aef7fbdSJerin Jacob int __roc_api roc_nix_lf_get_reg_count(struct roc_nix *roc_nix); 5565aef7fbdSJerin Jacob int __roc_api roc_nix_lf_reg_dump(struct roc_nix *roc_nix, uint64_t *data); 5574006ac1fSRakesh Kudurumalla int __roc_api roc_nix_queues_ctx_dump(struct roc_nix *roc_nix, FILE *file); 558c758279fSRakesh Kudurumalla void __roc_api roc_nix_cqe_dump(FILE *file, const struct nix_cqe_hdr_s *cq); 5594006ac1fSRakesh Kudurumalla void __roc_api roc_nix_rq_dump(struct roc_nix_rq *rq, FILE *file); 5604006ac1fSRakesh Kudurumalla void __roc_api roc_nix_cq_dump(struct roc_nix_cq *cq, FILE *file); 5614006ac1fSRakesh Kudurumalla void __roc_api roc_nix_sq_dump(struct roc_nix_sq *sq, FILE *file); 562656bb5a3SSatha Rao int __roc_api roc_nix_sq_desc_dump(struct roc_nix *roc_nix, uint16_t q, uint16_t offset, 563656bb5a3SSatha Rao uint16_t num, FILE *file); 5644006ac1fSRakesh Kudurumalla void __roc_api roc_nix_tm_dump(struct roc_nix *roc_nix, FILE *file); 5654006ac1fSRakesh Kudurumalla void __roc_api roc_nix_dump(struct roc_nix *roc_nix, FILE *file); 5665aef7fbdSJerin Jacob 567f6d567b0SJerin Jacob /* IRQ */ 568f6d567b0SJerin Jacob void __roc_api roc_nix_rx_queue_intr_enable(struct roc_nix *roc_nix, 569f6d567b0SJerin Jacob uint16_t rxq_id); 570f6d567b0SJerin Jacob void __roc_api roc_nix_rx_queue_intr_disable(struct roc_nix *roc_nix, 571f6d567b0SJerin Jacob uint16_t rxq_id); 572f6d567b0SJerin Jacob void __roc_api roc_nix_err_intr_ena_dis(struct roc_nix *roc_nix, bool enb); 573f6d567b0SJerin Jacob void __roc_api roc_nix_ras_intr_ena_dis(struct roc_nix *roc_nix, bool enb); 574f6d567b0SJerin Jacob int __roc_api roc_nix_register_queue_irqs(struct roc_nix *roc_nix); 575f6d567b0SJerin Jacob void __roc_api roc_nix_unregister_queue_irqs(struct roc_nix *roc_nix); 576f6d567b0SJerin Jacob int __roc_api roc_nix_register_cq_irqs(struct roc_nix *roc_nix); 577f6d567b0SJerin Jacob void __roc_api roc_nix_unregister_cq_irqs(struct roc_nix *roc_nix); 578f6d567b0SJerin Jacob 57905d727e8SNithin Dabilpuram /* Traffic Management */ 580be3009e7SNithin Dabilpuram #define ROC_NIX_TM_SHAPER_PROFILE_NONE UINT32_MAX 581be3009e7SNithin Dabilpuram #define ROC_NIX_TM_NODE_ID_INVALID UINT32_MAX 58205d727e8SNithin Dabilpuram 58305d727e8SNithin Dabilpuram enum roc_nix_tm_tree { 58405d727e8SNithin Dabilpuram ROC_NIX_TM_DEFAULT = 0, 58505d727e8SNithin Dabilpuram ROC_NIX_TM_RLIMIT, 58620d02329SSunil Kumar Kori ROC_NIX_TM_PFC, 58705d727e8SNithin Dabilpuram ROC_NIX_TM_USER, 58805d727e8SNithin Dabilpuram ROC_NIX_TM_TREE_MAX, 58905d727e8SNithin Dabilpuram }; 59005d727e8SNithin Dabilpuram 59105d727e8SNithin Dabilpuram enum roc_tm_node_level { 59205d727e8SNithin Dabilpuram ROC_TM_LVL_ROOT = 0, 59305d727e8SNithin Dabilpuram ROC_TM_LVL_SCH1, 59405d727e8SNithin Dabilpuram ROC_TM_LVL_SCH2, 59505d727e8SNithin Dabilpuram ROC_TM_LVL_SCH3, 59605d727e8SNithin Dabilpuram ROC_TM_LVL_SCH4, 59705d727e8SNithin Dabilpuram ROC_TM_LVL_QUEUE, 59805d727e8SNithin Dabilpuram ROC_TM_LVL_MAX, 59905d727e8SNithin Dabilpuram }; 60005d727e8SNithin Dabilpuram 60105d727e8SNithin Dabilpuram /* 60205d727e8SNithin Dabilpuram * TM runtime hierarchy init API. 60305d727e8SNithin Dabilpuram */ 6045a960e26SNithin Dabilpuram int __roc_api roc_nix_tm_init(struct roc_nix *roc_nix); 6055a960e26SNithin Dabilpuram void __roc_api roc_nix_tm_fini(struct roc_nix *roc_nix); 60605d727e8SNithin Dabilpuram int __roc_api roc_nix_tm_sq_aura_fc(struct roc_nix_sq *sq, bool enable); 60705d727e8SNithin Dabilpuram int __roc_api roc_nix_tm_sq_flush_spin(struct roc_nix_sq *sq); 60805d727e8SNithin Dabilpuram 609be3009e7SNithin Dabilpuram /* 610be3009e7SNithin Dabilpuram * TM User hierarchy API. 611be3009e7SNithin Dabilpuram */ 612be3009e7SNithin Dabilpuram 613be3009e7SNithin Dabilpuram struct roc_nix_tm_node { 614be3009e7SNithin Dabilpuram #define ROC_NIX_TM_NODE_SZ (128) 615be3009e7SNithin Dabilpuram uint8_t reserved[ROC_NIX_TM_NODE_SZ]; 616be3009e7SNithin Dabilpuram 617be3009e7SNithin Dabilpuram uint32_t id; 618be3009e7SNithin Dabilpuram uint32_t parent_id; 619be3009e7SNithin Dabilpuram uint32_t priority; 620be3009e7SNithin Dabilpuram uint32_t weight; 621be3009e7SNithin Dabilpuram uint32_t shaper_profile_id; 622be3009e7SNithin Dabilpuram uint16_t lvl; 623be3009e7SNithin Dabilpuram bool pkt_mode; 624be3009e7SNithin Dabilpuram bool pkt_mode_set; 625be3009e7SNithin Dabilpuram /* Function to free this memory */ 626be3009e7SNithin Dabilpuram void (*free_fn)(void *node); 627be3009e7SNithin Dabilpuram }; 628be3009e7SNithin Dabilpuram 629c2460d14SSatha Rao struct roc_nix_tm_shaper_profile { 630c2460d14SSatha Rao #define ROC_NIX_TM_SHAPER_PROFILE_SZ (128) 631c2460d14SSatha Rao uint8_t reserved[ROC_NIX_TM_SHAPER_PROFILE_SZ]; 632c2460d14SSatha Rao 633c2460d14SSatha Rao uint32_t id; 634c2460d14SSatha Rao uint64_t commit_rate; 635c2460d14SSatha Rao uint64_t commit_sz; 636c2460d14SSatha Rao uint64_t peak_rate; 637c2460d14SSatha Rao uint64_t peak_sz; 638c2460d14SSatha Rao int32_t pkt_len_adj; 639c2460d14SSatha Rao bool pkt_mode; 64002bf1662SSatha Rao int8_t accuracy; 64180053371SSatha Rao uint8_t red_algo; 642c2460d14SSatha Rao /* Function to free this memory */ 643c2460d14SSatha Rao void (*free_fn)(void *profile); 644c2460d14SSatha Rao }; 645c2460d14SSatha Rao 6466b7fcb7aSSatha Rao enum roc_nix_tm_node_stats_type { 6476b7fcb7aSSatha Rao ROC_NIX_TM_NODE_PKTS_DROPPED, 6486b7fcb7aSSatha Rao ROC_NIX_TM_NODE_BYTES_DROPPED, 6496b7fcb7aSSatha Rao ROC_NIX_TM_NODE_GREEN_PKTS, 6506b7fcb7aSSatha Rao ROC_NIX_TM_NODE_GREEN_BYTES, 6516b7fcb7aSSatha Rao ROC_NIX_TM_NODE_YELLOW_PKTS, 6526b7fcb7aSSatha Rao ROC_NIX_TM_NODE_YELLOW_BYTES, 6536b7fcb7aSSatha Rao ROC_NIX_TM_NODE_RED_PKTS, 6546b7fcb7aSSatha Rao ROC_NIX_TM_NODE_RED_BYTES, 6556b7fcb7aSSatha Rao ROC_NIX_TM_NODE_STATS_MAX, 6566b7fcb7aSSatha Rao }; 6576b7fcb7aSSatha Rao 6586b7fcb7aSSatha Rao struct roc_nix_tm_node_stats { 6596b7fcb7aSSatha Rao uint64_t stats[ROC_NIX_TM_NODE_STATS_MAX]; 6606b7fcb7aSSatha Rao }; 6616b7fcb7aSSatha Rao 6620b7e667eSSatha Rao enum roc_nix_tm_mark { 6630b7e667eSSatha Rao ROC_NIX_TM_MARK_VLAN_DEI, 6640b7e667eSSatha Rao ROC_NIX_TM_MARK_IPV4_DSCP, 6650b7e667eSSatha Rao ROC_NIX_TM_MARK_IPV4_ECN, 6660b7e667eSSatha Rao ROC_NIX_TM_MARK_IPV6_DSCP, 6670b7e667eSSatha Rao ROC_NIX_TM_MARK_IPV6_ECN, 6680b7e667eSSatha Rao ROC_NIX_TM_MARK_MAX 6690b7e667eSSatha Rao }; 6700b7e667eSSatha Rao 6710b7e667eSSatha Rao enum roc_nix_tm_mark_color { 6720b7e667eSSatha Rao ROC_NIX_TM_MARK_COLOR_Y, 6730b7e667eSSatha Rao ROC_NIX_TM_MARK_COLOR_R, 6740b7e667eSSatha Rao ROC_NIX_TM_MARK_COLOR_Y_R, 6750b7e667eSSatha Rao ROC_NIX_TM_MARK_COLOR_MAX 6760b7e667eSSatha Rao }; 6770b7e667eSSatha Rao 678be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_add(struct roc_nix *roc_nix, 679be3009e7SNithin Dabilpuram struct roc_nix_tm_node *roc_node); 680be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_delete(struct roc_nix *roc_nix, uint32_t node_id, 681be3009e7SNithin Dabilpuram bool free); 682df405df9SNithin Dabilpuram int __roc_api roc_nix_tm_free_resources(struct roc_nix *roc_nix, bool hw_only); 683464c9f91SNithin Dabilpuram int __roc_api roc_nix_tm_node_suspend_resume(struct roc_nix *roc_nix, 684464c9f91SNithin Dabilpuram uint32_t node_id, bool suspend); 685464c9f91SNithin Dabilpuram int __roc_api roc_nix_tm_node_parent_update(struct roc_nix *roc_nix, 686464c9f91SNithin Dabilpuram uint32_t node_id, 687464c9f91SNithin Dabilpuram uint32_t new_parent_id, 688464c9f91SNithin Dabilpuram uint32_t priority, uint32_t weight); 689464c9f91SNithin Dabilpuram int __roc_api roc_nix_tm_node_shaper_update(struct roc_nix *roc_nix, 690464c9f91SNithin Dabilpuram uint32_t node_id, 691464c9f91SNithin Dabilpuram uint32_t profile_id, 692464c9f91SNithin Dabilpuram bool force_update); 693be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_pkt_mode_update(struct roc_nix *roc_nix, 694be3009e7SNithin Dabilpuram uint32_t node_id, bool pkt_mode); 695c2460d14SSatha Rao int __roc_api roc_nix_tm_shaper_profile_add( 696c2460d14SSatha Rao struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *profile); 697c2460d14SSatha Rao int __roc_api roc_nix_tm_shaper_profile_update( 698c2460d14SSatha Rao struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *profile); 699c2460d14SSatha Rao int __roc_api roc_nix_tm_shaper_profile_delete(struct roc_nix *roc_nix, 700c2460d14SSatha Rao uint32_t id); 701be3009e7SNithin Dabilpuram 702fcdef46bSNithin Dabilpuram int __roc_api roc_nix_tm_prealloc_res(struct roc_nix *roc_nix, uint8_t lvl, 703fcdef46bSNithin Dabilpuram uint16_t discontig, uint16_t contig); 704fcdef46bSNithin Dabilpuram uint16_t __roc_api roc_nix_tm_leaf_cnt(struct roc_nix *roc_nix); 705fcdef46bSNithin Dabilpuram 706be3009e7SNithin Dabilpuram struct roc_nix_tm_node *__roc_api roc_nix_tm_node_get(struct roc_nix *roc_nix, 707be3009e7SNithin Dabilpuram uint32_t node_id); 708be3009e7SNithin Dabilpuram struct roc_nix_tm_node *__roc_api 709be3009e7SNithin Dabilpuram roc_nix_tm_node_next(struct roc_nix *roc_nix, struct roc_nix_tm_node *__prev); 710c2460d14SSatha Rao struct roc_nix_tm_shaper_profile *__roc_api 711c2460d14SSatha Rao roc_nix_tm_shaper_profile_get(struct roc_nix *roc_nix, uint32_t profile_id); 712c2460d14SSatha Rao struct roc_nix_tm_shaper_profile *__roc_api roc_nix_tm_shaper_profile_next( 713c2460d14SSatha Rao struct roc_nix *roc_nix, struct roc_nix_tm_shaper_profile *__prev); 714be3009e7SNithin Dabilpuram 7156b7fcb7aSSatha Rao int __roc_api roc_nix_tm_node_stats_get(struct roc_nix *roc_nix, 7166b7fcb7aSSatha Rao uint32_t node_id, bool clear, 7176b7fcb7aSSatha Rao struct roc_nix_tm_node_stats *stats); 718be3009e7SNithin Dabilpuram /* 7195a960e26SNithin Dabilpuram * TM ratelimit tree API. 7205a960e26SNithin Dabilpuram */ 7213b416343SSatha Rao int __roc_api roc_nix_tm_rlimit_sq(struct roc_nix *roc_nix, uint16_t qid, uint64_t rate); 7223b416343SSatha Rao 7233b416343SSatha Rao /* 7243b416343SSatha Rao * TM PFC tree ratelimit API. 7253b416343SSatha Rao */ 7263b416343SSatha Rao int __roc_api roc_nix_tm_pfc_rlimit_sq(struct roc_nix *roc_nix, uint16_t qid, uint64_t rate); 7273b416343SSatha Rao 7285a960e26SNithin Dabilpuram /* 7290885429cSNithin Dabilpuram * TM hierarchy enable/disable API. 7300885429cSNithin Dabilpuram */ 7310885429cSNithin Dabilpuram int __roc_api roc_nix_tm_hierarchy_disable(struct roc_nix *roc_nix); 7320885429cSNithin Dabilpuram int __roc_api roc_nix_tm_hierarchy_enable(struct roc_nix *roc_nix, 7330885429cSNithin Dabilpuram enum roc_nix_tm_tree tree, 7340885429cSNithin Dabilpuram bool xmit_enable); 73590a903ffSSatha Rao int __roc_api roc_nix_tm_hierarchy_xmit_enable(struct roc_nix *roc_nix, enum roc_nix_tm_tree tree); 73690a903ffSSatha Rao 7370885429cSNithin Dabilpuram 7380885429cSNithin Dabilpuram /* 739be3009e7SNithin Dabilpuram * TM utilities API. 740be3009e7SNithin Dabilpuram */ 741be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_lvl(struct roc_nix *roc_nix, uint32_t node_id); 742fcdef46bSNithin Dabilpuram bool __roc_api roc_nix_tm_root_has_sp(struct roc_nix *roc_nix); 743fcdef46bSNithin Dabilpuram void __roc_api roc_nix_tm_rsrc_max(bool pf, uint16_t schq[ROC_TM_LVL_MAX]); 744fcdef46bSNithin Dabilpuram int __roc_api roc_nix_tm_rsrc_count(struct roc_nix *roc_nix, 745fcdef46bSNithin Dabilpuram uint16_t schq[ROC_TM_LVL_MAX]); 746be3009e7SNithin Dabilpuram int __roc_api roc_nix_tm_node_name_get(struct roc_nix *roc_nix, 747be3009e7SNithin Dabilpuram uint32_t node_id, char *buf, 748be3009e7SNithin Dabilpuram size_t buflen); 7498cfde95dSSatha Rao int __roc_api roc_nix_smq_flush(struct roc_nix *roc_nix); 750f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_max_prio(struct roc_nix *roc_nix, int lvl); 751f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_lvl_is_leaf(struct roc_nix *roc_nix, int lvl); 752f9dbd4a5SSatha Rao void __roc_api 753f9dbd4a5SSatha Rao roc_nix_tm_shaper_default_red_algo(struct roc_nix_tm_node *node, 754f9dbd4a5SSatha Rao struct roc_nix_tm_shaper_profile *profile); 755f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_lvl_cnt_get(struct roc_nix *roc_nix); 756f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_lvl_have_link_access(struct roc_nix *roc_nix, int lvl); 757f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_prepare_rate_limited_tree(struct roc_nix *roc_nix); 75820d02329SSunil Kumar Kori int __roc_api roc_nix_tm_pfc_prepare_tree(struct roc_nix *roc_nix); 759f9dbd4a5SSatha Rao bool __roc_api roc_nix_tm_is_user_hierarchy_enabled(struct roc_nix *nix); 760f9dbd4a5SSatha Rao int __roc_api roc_nix_tm_tree_type_get(struct roc_nix *nix); 7610b7e667eSSatha Rao int __roc_api roc_nix_tm_mark_config(struct roc_nix *roc_nix, 7620b7e667eSSatha Rao enum roc_nix_tm_mark type, int mark_yellow, 7630b7e667eSSatha Rao int mark_red); 7640b7e667eSSatha Rao uint64_t __roc_api roc_nix_tm_mark_format_get(struct roc_nix *roc_nix, 7650b7e667eSSatha Rao uint64_t *flags); 76631525923SSatha Rao int __roc_api roc_nix_tm_egress_link_cfg_set(struct roc_nix *roc_nix, uint64_t dst_pf_func, 76731525923SSatha Rao bool enable); 768be3009e7SNithin Dabilpuram 769b7cb2203SSunil Kumar Kori /* Ingress Policer API */ 77067e1cbf3SRakesh Kudurumalla int __roc_api roc_nix_bpf_timeunit_get(struct roc_nix *roc_nix, 77167e1cbf3SRakesh Kudurumalla uint32_t *time_unit); 77267e1cbf3SRakesh Kudurumalla 77305a944feSSunil Kumar Kori int __roc_api 77405a944feSSunil Kumar Kori roc_nix_bpf_count_get(struct roc_nix *roc_nix, uint8_t lvl_mask, 77505a944feSSunil Kumar Kori uint16_t count[ROC_NIX_BPF_LEVEL_MAX] /* Out */); 77605a944feSSunil Kumar Kori 7777a63d75eSSunil Kumar Kori int __roc_api roc_nix_bpf_alloc(struct roc_nix *roc_nix, uint8_t lvl_mask, 7787a63d75eSSunil Kumar Kori uint16_t per_lvl_cnt[ROC_NIX_BPF_LEVEL_MAX], 7797a63d75eSSunil Kumar Kori struct roc_nix_bpf_objs *profs /* Out */); 7807a63d75eSSunil Kumar Kori 781bf7290c6SSunil Kumar Kori int __roc_api roc_nix_bpf_free(struct roc_nix *roc_nix, 782bf7290c6SSunil Kumar Kori struct roc_nix_bpf_objs *profs, 783bf7290c6SSunil Kumar Kori uint8_t num_prof); 784bf7290c6SSunil Kumar Kori 785bf7290c6SSunil Kumar Kori int __roc_api roc_nix_bpf_free_all(struct roc_nix *roc_nix); 786bf7290c6SSunil Kumar Kori 7874ad8bc2fSSunil Kumar Kori int __roc_api roc_nix_bpf_config(struct roc_nix *roc_nix, uint16_t id, 7884ad8bc2fSSunil Kumar Kori enum roc_nix_bpf_level_flag lvl_flag, 7894ad8bc2fSSunil Kumar Kori struct roc_nix_bpf_cfg *cfg); 7904ad8bc2fSSunil Kumar Kori 79152511cd2SSunil Kumar Kori int __roc_api roc_nix_bpf_ena_dis(struct roc_nix *roc_nix, uint16_t id, 79252511cd2SSunil Kumar Kori struct roc_nix_rq *rq, bool enable); 79352511cd2SSunil Kumar Kori 794ab706fa8SSunil Kumar Kori int __roc_api roc_nix_bpf_dump(struct roc_nix *roc_nix, uint16_t id, 795ab706fa8SSunil Kumar Kori enum roc_nix_bpf_level_flag lvl_flag); 796ab706fa8SSunil Kumar Kori 79733961101SSunil Kumar Kori int __roc_api roc_nix_bpf_pre_color_tbl_setup( 79833961101SSunil Kumar Kori struct roc_nix *roc_nix, uint16_t id, 79933961101SSunil Kumar Kori enum roc_nix_bpf_level_flag lvl_flag, struct roc_nix_bpf_precolor *tbl); 80033961101SSunil Kumar Kori 801b609507bSSunil Kumar Kori /* Use ROC_NIX_BPF_ID_INVALID as dst_id to disconnect */ 802b609507bSSunil Kumar Kori int __roc_api roc_nix_bpf_connect(struct roc_nix *roc_nix, 803b609507bSSunil Kumar Kori enum roc_nix_bpf_level_flag lvl_flag, 804b609507bSSunil Kumar Kori uint16_t src_id, uint16_t dst_id); 805b609507bSSunil Kumar Kori 8060fa36bc2SSunil Kumar Kori int __roc_api 8070fa36bc2SSunil Kumar Kori roc_nix_bpf_stats_read(struct roc_nix *roc_nix, uint16_t id, uint64_t mask, 8080fa36bc2SSunil Kumar Kori enum roc_nix_bpf_level_flag lvl_flag, 8090fa36bc2SSunil Kumar Kori uint64_t stats[ROC_NIX_BPF_STATS_MAX] /* Out */); 8100fa36bc2SSunil Kumar Kori 811bea4a81bSSunil Kumar Kori int __roc_api roc_nix_bpf_stats_reset(struct roc_nix *roc_nix, uint16_t id, 812bea4a81bSSunil Kumar Kori uint64_t mask, 813bea4a81bSSunil Kumar Kori enum roc_nix_bpf_level_flag lvl_flag); 814bea4a81bSSunil Kumar Kori 8150fa36bc2SSunil Kumar Kori int __roc_api 8160fa36bc2SSunil Kumar Kori roc_nix_bpf_lf_stats_read(struct roc_nix *roc_nix, uint64_t mask, 8170fa36bc2SSunil Kumar Kori uint64_t stats[ROC_NIX_BPF_STATS_MAX] /* Out */); 8180fa36bc2SSunil Kumar Kori 819bea4a81bSSunil Kumar Kori int __roc_api roc_nix_bpf_lf_stats_reset(struct roc_nix *roc_nix, 820bea4a81bSSunil Kumar Kori uint64_t mask); 821bea4a81bSSunil Kumar Kori 822b7cb2203SSunil Kumar Kori uint8_t __roc_api 823b7cb2203SSunil Kumar Kori roc_nix_bpf_level_to_idx(enum roc_nix_bpf_level_flag lvl_flag); 824b7cb2203SSunil Kumar Kori 825c8881e6eSSunil Kumar Kori uint8_t __roc_api roc_nix_bpf_stats_to_idx(enum roc_nix_bpf_stats lvl_flag); 826c8881e6eSSunil Kumar Kori 827313cc418SSunil Kumar Kori /* MAC */ 828313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_rxtx_start_stop(struct roc_nix *roc_nix, bool start); 829313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_event_start_stop(struct roc_nix *roc_nix, 830313cc418SSunil Kumar Kori bool start); 831313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_loopback_enable(struct roc_nix *roc_nix, bool enable); 832313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_addr_set(struct roc_nix *roc_nix, 833313cc418SSunil Kumar Kori const uint8_t addr[]); 834313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_max_entries_get(struct roc_nix *roc_nix); 835313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_addr_add(struct roc_nix *roc_nix, uint8_t addr[]); 836313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_addr_del(struct roc_nix *roc_nix, uint32_t index); 837313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_promisc_mode_enable(struct roc_nix *roc_nix, 838313cc418SSunil Kumar Kori int enable); 839313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_state_set(struct roc_nix *roc_nix, uint8_t up); 840313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_info_set(struct roc_nix *roc_nix, 841313cc418SSunil Kumar Kori struct roc_nix_link_info *link_info); 842313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_info_get(struct roc_nix *roc_nix, 843313cc418SSunil Kumar Kori struct roc_nix_link_info *link_info); 844313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_mtu_set(struct roc_nix *roc_nix, uint16_t mtu); 845313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_max_rx_len_set(struct roc_nix *roc_nix, 846313cc418SSunil Kumar Kori uint16_t maxlen); 847313cc418SSunil Kumar Kori int __roc_api roc_nix_mac_link_cb_register(struct roc_nix *roc_nix, 848313cc418SSunil Kumar Kori link_status_t link_update); 849313cc418SSunil Kumar Kori void __roc_api roc_nix_mac_link_cb_unregister(struct roc_nix *roc_nix); 85002719901SHarman Kalra int __roc_api roc_nix_mac_link_info_get_cb_register( 85102719901SHarman Kalra struct roc_nix *roc_nix, link_info_get_t link_info_get); 85202719901SHarman Kalra void __roc_api roc_nix_mac_link_info_get_cb_unregister(struct roc_nix *roc_nix); 853b7c31b6dSSatha Rao int __roc_api roc_nix_q_err_cb_register(struct roc_nix *roc_nix, q_err_get_t sq_err_handle); 854b7c31b6dSSatha Rao void __roc_api roc_nix_q_err_cb_unregister(struct roc_nix *roc_nix); 855e8306c6cSSunil Kumar Kori int __roc_api roc_nix_mac_stats_reset(struct roc_nix *roc_nix); 856313cc418SSunil Kumar Kori 857dfa267ecSSunil Kumar Kori /* Ops */ 858dfa267ecSSunil Kumar Kori int __roc_api roc_nix_switch_hdr_set(struct roc_nix *roc_nix, 8595bffab53SKiran Kumar K uint64_t switch_header_type, 8605bffab53SKiran Kumar K uint8_t pre_l2_size_offset, 8615bffab53SKiran Kumar K uint8_t pre_l2_size_offset_mask, 8625bffab53SKiran Kumar K uint8_t pre_l2_size_shift_dir); 863dfa267ecSSunil Kumar Kori int __roc_api roc_nix_lso_fmt_setup(struct roc_nix *roc_nix); 864dfa267ecSSunil Kumar Kori int __roc_api roc_nix_lso_fmt_get(struct roc_nix *roc_nix, 865dfa267ecSSunil Kumar Kori uint8_t udp_tun[ROC_NIX_LSO_TUN_MAX], 866dfa267ecSSunil Kumar Kori uint8_t tun[ROC_NIX_LSO_TUN_MAX]); 867dfa267ecSSunil Kumar Kori int __roc_api roc_nix_lso_custom_fmt_setup(struct roc_nix *roc_nix, 868dfa267ecSSunil Kumar Kori struct nix_lso_format *fields, 869dfa267ecSSunil Kumar Kori uint16_t nb_fields); 870dfa267ecSSunil Kumar Kori 871dfa267ecSSunil Kumar Kori int __roc_api roc_nix_eeprom_info_get(struct roc_nix *roc_nix, 872dfa267ecSSunil Kumar Kori struct roc_nix_eeprom_info *info); 873dfa267ecSSunil Kumar Kori 874da57d458SSunil Kumar Kori /* Flow control */ 875da57d458SSunil Kumar Kori int __roc_api roc_nix_fc_config_set(struct roc_nix *roc_nix, 876da57d458SSunil Kumar Kori struct roc_nix_fc_cfg *fc_cfg); 877da57d458SSunil Kumar Kori 878da57d458SSunil Kumar Kori int __roc_api roc_nix_fc_config_get(struct roc_nix *roc_nix, 879da57d458SSunil Kumar Kori struct roc_nix_fc_cfg *fc_cfg); 880da57d458SSunil Kumar Kori 881da57d458SSunil Kumar Kori int __roc_api roc_nix_fc_mode_set(struct roc_nix *roc_nix, 882da57d458SSunil Kumar Kori enum roc_nix_fc_mode mode); 883da57d458SSunil Kumar Kori 88420d02329SSunil Kumar Kori int __roc_api roc_nix_pfc_mode_set(struct roc_nix *roc_nix, 88520d02329SSunil Kumar Kori struct roc_nix_pfc_cfg *pfc_cfg); 88620d02329SSunil Kumar Kori 88720d02329SSunil Kumar Kori int __roc_api roc_nix_pfc_mode_get(struct roc_nix *roc_nix, 88820d02329SSunil Kumar Kori struct roc_nix_pfc_cfg *pfc_cfg); 88920d02329SSunil Kumar Kori 89020d02329SSunil Kumar Kori uint16_t __roc_api roc_nix_chan_count_get(struct roc_nix *roc_nix); 89120d02329SSunil Kumar Kori 892da57d458SSunil Kumar Kori enum roc_nix_fc_mode __roc_api roc_nix_fc_mode_get(struct roc_nix *roc_nix); 893da57d458SSunil Kumar Kori 8943742b8d5SSunil Kumar Kori void __roc_api roc_nix_fc_npa_bp_cfg(struct roc_nix *roc_nix, uint64_t pool_id, uint8_t ena, 8953742b8d5SSunil Kumar Kori uint8_t force, uint8_t tc, uint64_t drop_percent); 8964d00b8c6SSatha Rao int __roc_api roc_nix_bpids_alloc(struct roc_nix *roc_nix, uint8_t type, 8974d00b8c6SSatha Rao uint8_t bp_cnt, uint16_t *bpids); 8984d00b8c6SSatha Rao int __roc_api roc_nix_bpids_free(struct roc_nix *roc_nix, uint8_t bp_cnt, 8994d00b8c6SSatha Rao uint16_t *bpids); 9004d00b8c6SSatha Rao int __roc_api roc_nix_rx_chan_cfg_get(struct roc_nix *roc_nix, uint16_t chan, 9014d00b8c6SSatha Rao bool is_cpt, uint64_t *cfg); 9024d00b8c6SSatha Rao int __roc_api roc_nix_rx_chan_cfg_set(struct roc_nix *roc_nix, uint16_t chan, 9034d00b8c6SSatha Rao bool is_cpt, uint64_t val); 9044d00b8c6SSatha Rao int __roc_api roc_nix_chan_bpid_set(struct roc_nix *roc_nix, uint16_t chan, 9054d00b8c6SSatha Rao uint64_t bpid, int ena, bool cpt_chan); 906cb4bfd6eSPavan Nikhilesh 9071c518ee1SSunil Kumar Kori /* NPC */ 9081c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_promisc_ena_dis(struct roc_nix *roc_nix, int enable); 9091c518ee1SSunil Kumar Kori 9101c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_mac_addr_set(struct roc_nix *roc_nix, uint8_t addr[]); 9111c518ee1SSunil Kumar Kori 9121c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_mac_addr_get(struct roc_nix *roc_nix, uint8_t *addr); 9131c518ee1SSunil Kumar Kori 9141c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_rx_ena_dis(struct roc_nix *roc_nix, bool enable); 9151c518ee1SSunil Kumar Kori 9161c518ee1SSunil Kumar Kori int __roc_api roc_nix_npc_mcast_config(struct roc_nix *roc_nix, 9171c518ee1SSunil Kumar Kori bool mcast_enable, bool prom_enable); 9181c518ee1SSunil Kumar Kori 9191bf6746eSJerin Jacob /* RSS */ 9201bf6746eSJerin Jacob void __roc_api roc_nix_rss_key_default_fill(struct roc_nix *roc_nix, 9211bf6746eSJerin Jacob uint8_t key[ROC_NIX_RSS_KEY_LEN]); 9221bf6746eSJerin Jacob void __roc_api roc_nix_rss_key_set(struct roc_nix *roc_nix, 9231bf6746eSJerin Jacob const uint8_t key[ROC_NIX_RSS_KEY_LEN]); 9241bf6746eSJerin Jacob void __roc_api roc_nix_rss_key_get(struct roc_nix *roc_nix, 9251bf6746eSJerin Jacob uint8_t key[ROC_NIX_RSS_KEY_LEN]); 9261bf6746eSJerin Jacob int __roc_api roc_nix_rss_reta_set(struct roc_nix *roc_nix, uint8_t group, 9271bf6746eSJerin Jacob uint16_t reta[ROC_NIX_RSS_RETA_MAX]); 9281bf6746eSJerin Jacob int __roc_api roc_nix_rss_reta_get(struct roc_nix *roc_nix, uint8_t group, 9291bf6746eSJerin Jacob uint16_t reta[ROC_NIX_RSS_RETA_MAX]); 9301bf6746eSJerin Jacob int __roc_api roc_nix_rss_flowkey_set(struct roc_nix *roc_nix, uint8_t *alg_idx, 9311bf6746eSJerin Jacob uint32_t flowkey, uint8_t group, 9321bf6746eSJerin Jacob int mcam_index); 9331bf6746eSJerin Jacob int __roc_api roc_nix_rss_default_setup(struct roc_nix *roc_nix, 9341bf6746eSJerin Jacob uint32_t flowkey); 9351bf6746eSJerin Jacob 936218d022eSJerin Jacob /* Stats */ 937218d022eSJerin Jacob int __roc_api roc_nix_stats_get(struct roc_nix *roc_nix, 938218d022eSJerin Jacob struct roc_nix_stats *stats); 939218d022eSJerin Jacob int __roc_api roc_nix_stats_reset(struct roc_nix *roc_nix); 940218d022eSJerin Jacob int __roc_api roc_nix_stats_queue_get(struct roc_nix *roc_nix, uint16_t qid, 941218d022eSJerin Jacob bool is_rx, 942218d022eSJerin Jacob struct roc_nix_stats_queue *qstats); 943218d022eSJerin Jacob int __roc_api roc_nix_stats_queue_reset(struct roc_nix *roc_nix, uint16_t qid, 944218d022eSJerin Jacob bool is_rx); 9454efa6e82SSatha Rao int __roc_api roc_nix_num_xstats_get(struct roc_nix *roc_nix); 9464efa6e82SSatha Rao int __roc_api roc_nix_xstats_get(struct roc_nix *roc_nix, 9474efa6e82SSatha Rao struct roc_nix_xstat *xstats, unsigned int n); 9484efa6e82SSatha Rao int __roc_api roc_nix_xstats_names_get(struct roc_nix *roc_nix, 9494efa6e82SSatha Rao struct roc_nix_xstat_name *xstats_names, 9504efa6e82SSatha Rao unsigned int limit); 951218d022eSJerin Jacob 95219a2b549SJerin Jacob /* Queue */ 95319a2b549SJerin Jacob int __roc_api roc_nix_rq_init(struct roc_nix *roc_nix, struct roc_nix_rq *rq, 95419a2b549SJerin Jacob bool ena); 95519a2b549SJerin Jacob int __roc_api roc_nix_rq_modify(struct roc_nix *roc_nix, struct roc_nix_rq *rq, 95619a2b549SJerin Jacob bool ena); 9575df46167SSunil Kumar Kori int __roc_api roc_nix_rq_cman_config(struct roc_nix *roc_nix, struct roc_nix_rq *rq); 95819a2b549SJerin Jacob int __roc_api roc_nix_rq_ena_dis(struct roc_nix_rq *rq, bool enable); 959174f2f35SSunil Kumar Kori int __roc_api roc_nix_rq_is_sso_enable(struct roc_nix *roc_nix, uint32_t qid); 96019a2b549SJerin Jacob int __roc_api roc_nix_rq_fini(struct roc_nix_rq *rq); 96119a2b549SJerin Jacob int __roc_api roc_nix_cq_init(struct roc_nix *roc_nix, struct roc_nix_cq *cq); 96219a2b549SJerin Jacob int __roc_api roc_nix_cq_fini(struct roc_nix_cq *cq); 96309e1df73SRahul Bhansali void __roc_api roc_nix_cq_head_tail_get(struct roc_nix *roc_nix, uint16_t qid, 96409e1df73SRahul Bhansali uint32_t *head, uint32_t *tail); 965ae060709SJerin Jacob int __roc_api roc_nix_sq_init(struct roc_nix *roc_nix, struct roc_nix_sq *sq); 966ae060709SJerin Jacob int __roc_api roc_nix_sq_fini(struct roc_nix_sq *sq); 967f6e0d835SRakesh Kudurumalla int __roc_api roc_nix_sq_ena_dis(struct roc_nix_sq *sq, bool enable); 96809e1df73SRahul Bhansali void __roc_api roc_nix_sq_head_tail_get(struct roc_nix *roc_nix, uint16_t qid, 96909e1df73SRahul Bhansali uint32_t *head, uint32_t *tail); 97019a2b549SJerin Jacob 971c443e0d3SSunil Kumar Kori /* PTP */ 972c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_rx_ena_dis(struct roc_nix *roc_nix, int enable); 973c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_tx_ena_dis(struct roc_nix *roc_nix, int enable); 974c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_clock_read(struct roc_nix *roc_nix, uint64_t *clock, 975c443e0d3SSunil Kumar Kori uint64_t *tsc, uint8_t is_pmu); 976c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_sync_time_adjust(struct roc_nix *roc_nix, 977c443e0d3SSunil Kumar Kori int64_t delta); 978c443e0d3SSunil Kumar Kori int __roc_api roc_nix_ptp_info_cb_register(struct roc_nix *roc_nix, 979c443e0d3SSunil Kumar Kori ptp_info_update_t ptp_update); 980c443e0d3SSunil Kumar Kori void __roc_api roc_nix_ptp_info_cb_unregister(struct roc_nix *roc_nix); 9818f98e3ecSHarman Kalra bool __roc_api roc_nix_ptp_is_enable(struct roc_nix *roc_nix); 982c443e0d3SSunil Kumar Kori 98362240569SSunil Kumar Kori /* VLAN */ 98462240569SSunil Kumar Kori int __roc_api 98562240569SSunil Kumar Kori roc_nix_vlan_mcam_entry_read(struct roc_nix *roc_nix, uint32_t index, 98662240569SSunil Kumar Kori struct npc_mcam_read_entry_rsp **rsp); 98762240569SSunil Kumar Kori int __roc_api roc_nix_vlan_mcam_entry_write(struct roc_nix *roc_nix, 98862240569SSunil Kumar Kori uint32_t index, 98962240569SSunil Kumar Kori struct mcam_entry *entry, 99062240569SSunil Kumar Kori uint8_t intf, uint8_t enable); 99162240569SSunil Kumar Kori int __roc_api roc_nix_vlan_mcam_entry_alloc_and_write(struct roc_nix *roc_nix, 99262240569SSunil Kumar Kori struct mcam_entry *entry, 99362240569SSunil Kumar Kori uint8_t intf, 99462240569SSunil Kumar Kori uint8_t priority, 99562240569SSunil Kumar Kori uint8_t ref_entry); 99662240569SSunil Kumar Kori int __roc_api roc_nix_vlan_mcam_entry_free(struct roc_nix *roc_nix, 99762240569SSunil Kumar Kori uint32_t index); 99862240569SSunil Kumar Kori int __roc_api roc_nix_vlan_mcam_entry_ena_dis(struct roc_nix *roc_nix, 99962240569SSunil Kumar Kori uint32_t index, const int enable); 100062240569SSunil Kumar Kori int __roc_api roc_nix_vlan_strip_vtag_ena_dis(struct roc_nix *roc_nix, 100162240569SSunil Kumar Kori bool enable); 100262240569SSunil Kumar Kori int __roc_api roc_nix_vlan_insert_ena_dis(struct roc_nix *roc_nix, 100362240569SSunil Kumar Kori struct roc_nix_vlan_config *vlan_cfg, 100462240569SSunil Kumar Kori uint64_t *mcam_index, bool enable); 100562240569SSunil Kumar Kori int __roc_api roc_nix_vlan_tpid_set(struct roc_nix *roc_nix, uint32_t type, 100662240569SSunil Kumar Kori uint16_t tpid); 100762240569SSunil Kumar Kori 10081c518ee1SSunil Kumar Kori /* MCAST*/ 10091c518ee1SSunil Kumar Kori int __roc_api roc_nix_mcast_mcam_entry_alloc(struct roc_nix *roc_nix, 10101c518ee1SSunil Kumar Kori uint16_t nb_entries, 10111c518ee1SSunil Kumar Kori uint8_t priority, 10121c518ee1SSunil Kumar Kori uint16_t index[]); 10131c518ee1SSunil Kumar Kori int __roc_api roc_nix_mcast_mcam_entry_free(struct roc_nix *roc_nix, 10141c518ee1SSunil Kumar Kori uint32_t index); 10151c518ee1SSunil Kumar Kori int __roc_api roc_nix_mcast_mcam_entry_write(struct roc_nix *roc_nix, 10161c518ee1SSunil Kumar Kori struct mcam_entry *entry, 10171c518ee1SSunil Kumar Kori uint32_t index, uint8_t intf, 10181c518ee1SSunil Kumar Kori uint64_t action); 1019209188d1SSatheesh Paul int __roc_api roc_nix_mcast_mcam_entry_ena_dis(struct roc_nix *roc_nix, uint32_t index, 1020209188d1SSatheesh Paul bool enable); 1021209188d1SSatheesh Paul int __roc_api roc_nix_mcast_list_setup(struct mbox *mbox, uint8_t intf, int nb_entries, 1022209188d1SSatheesh Paul uint16_t *pf_funcs, uint16_t *channels, uint32_t *rqs, 1023209188d1SSatheesh Paul uint32_t *grp_index, uint32_t *start_index); 1024209188d1SSatheesh Paul int __roc_api roc_nix_mcast_list_free(struct mbox *mbox, uint32_t mcast_grp_index); 1025162c77c1SHarman Kalra int __roc_api roc_nix_max_rep_count(struct roc_nix *roc_nix); 10268dcdf319SJerin Jacob #endif /* _ROC_NIX_H_ */ 1027