dcb.h (18844B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2019 Broadcom Inc. All rights reserved. 6 * 7 * File: soc/dcb.h 8 * Purpose: Define dma control block (DCB) operations 9 * A uniform set of operations is defined here and loaded 10 * into SOC_CONTROL during initialization. 11 */ 12 13 #ifndef _SOC_DCB_H 14 #define _SOC_DCB_H 15 16 #include <soc/types.h> 17 #include <soc/rx.h> 18 19 typedef void dcb_t; 20 struct dv_s; /* in soc/dma.h, but we have recursive problems */ 21 22 #ifdef INCLUDE_KNET 23 /* 24 * On XGS devices bit 15 fo the Transferred Bytes field in 25 * the DCBs is used to indicate that kernel processing is 26 * complete. Using this bit reduces the theoretically maximum 27 * supported packet size from 64K to 32K, but this is still 28 * adequate for 16K jumbo packets. 29 */ 30 #define SOC_DCB_KNET_DONE 0x8000 31 32 #endif 33 34 /* 35 * DCB Operations 36 */ 37 38 typedef struct dcb_op_s { 39 int dcbtype; 40 int dcbsize; 41 soc_rx_reason_t **rx_reason_maps; 42 soc_rx_reason_t * (*rx_reason_map_get)(struct dcb_op_s *dcb_op, dcb_t *dcb); 43 void (*rx_reasons_get)(struct dcb_op_s *dcb_op, dcb_t *dcb, 44 soc_rx_reasons_t *reasons); 45 void (*init)(dcb_t *dcb); 46 /* composite helper functions */ 47 int (*addtx)(struct dv_s *dv, sal_vaddr_t addr, uint32 count, 48 pbmp_t l2pbm, pbmp_t utpbm, pbmp_t l3pbm, 49 uint32 flags, uint32 *hgh); 50 int (*addrx)(struct dv_s *dv, sal_vaddr_t addr, uint32 count, 51 uint32 flags); 52 uint32 (*intrinfo)(int unit, dcb_t *dcb, int tx, uint32 *count); 53 /* basic dcb values */ 54 void (*reqcount_set)(dcb_t *dcb, uint32 count); 55 uint32 (*reqcount_get)(dcb_t *dcb); 56 uint32 (*xfercount_get)(dcb_t *dcb); 57 void (*addr_set)(int unit, dcb_t *dcb, sal_vaddr_t addr); 58 sal_vaddr_t (*addr_get)(int unit, dcb_t *dcb); 59 sal_paddr_t (*paddr_get)(dcb_t *dcb); 60 void (*done_set)(dcb_t *dcb, int val); 61 uint32 (*done_get)(dcb_t *dcb); 62 void (*sg_set)(dcb_t *dcb, int val); 63 uint32 (*sg_get)(dcb_t *dcb); 64 void (*chain_set)(dcb_t *dcb, int val); 65 uint32 (*chain_get)(dcb_t *dcb); 66 void (*reload_set)(dcb_t *dcb, int val); 67 uint32 (*reload_get)(dcb_t *dcb); 68 void (*desc_intr_set)(dcb_t *dcb, int val); 69 uint32 (*desc_intr_get)(dcb_t *dcb); 70 /* transmit dcb controls */ 71 void (*tx_l2pbm_set)(dcb_t *dcb, pbmp_t pbm); 72 void (*tx_utpbm_set)(dcb_t *dcb, pbmp_t pbm); 73 void (*tx_l3pbm_set)(dcb_t *dcb, pbmp_t pbm); 74 void (*tx_crc_set)(dcb_t *dcb, int crc); 75 void (*tx_cos_set)(dcb_t *dcb, int cos); 76 void (*tx_destmod_set)(dcb_t *dcb, uint32 modid); 77 void (*tx_destport_set)(dcb_t *dcb, uint32 port); 78 void (*tx_opcode_set)(dcb_t *dcb, uint32 opcode); 79 void (*tx_srcmod_set)(dcb_t *dcb, uint32 modid); 80 void (*tx_srcport_set)(dcb_t *dcb, uint32 port); 81 void (*tx_prio_set)(dcb_t *dcb, uint32 prio); 82 void (*tx_pfm_set)(dcb_t *dcb, uint32 pfm); 83 84 /* receive dcb controls */ 85 uint32 (*rx_untagged_get)(dcb_t *dcb, int dt_mode, int ingport_is_hg); 86 uint32 (*rx_crc_get)(dcb_t *dcb); 87 uint32 (*rx_cos_get)(dcb_t *dcb); 88 uint32 (*rx_destmod_get)(dcb_t *dcb); 89 uint32 (*rx_destport_get)(dcb_t *dcb); 90 uint32 (*rx_opcode_get)(dcb_t *dcb); 91 uint32 (*rx_classtag_get)(dcb_t *dcb); 92 uint32 (*rx_matchrule_get)(dcb_t *dcb); 93 uint32 (*rx_start_get)(dcb_t *dcb); 94 uint32 (*rx_end_get)(dcb_t *dcb); 95 uint32 (*rx_error_get)(dcb_t *dcb); 96 uint32 (*rx_prio_get)(dcb_t *dcb); 97 uint32 (*rx_reason_get)(dcb_t *dcb); 98 uint32 (*rx_reason_hi_get)(dcb_t *dcb); 99 uint32 (*rx_ingport_get)(dcb_t *dcb); 100 uint32 (*rx_srcport_get)(dcb_t *dcb); 101 uint32 (*rx_srcmod_get)(dcb_t *dcb); 102 uint32 (*rx_mcast_get)(dcb_t *dcb); 103 uint32 (*rx_vclabel_get)(dcb_t *dcb); 104 uint32 (*rx_mirror_get)(dcb_t *dcb); 105 uint32 (*rx_timestamp_get)(dcb_t *dcb); 106 uint32 (*rx_timestamp_upper_get)(dcb_t *dcb); 107 void (*hg_set)(dcb_t *dcb, uint32 hg); 108 uint32 (*hg_get)(dcb_t *dcb); 109 void (*stat_set)(dcb_t *dcb, uint32 stat); 110 uint32 (*stat_get)(dcb_t *dcb); 111 void (*purge_set)(dcb_t *dcb, uint32 purge); 112 uint32 (*purge_get)(dcb_t *dcb); 113 uint32 * (*mhp_get)(dcb_t *dcb); 114 uint32 (*rx_outer_vid_get)(dcb_t *dcb); 115 uint32 (*rx_outer_pri_get)(dcb_t *dcb); 116 uint32 (*rx_outer_cfi_get)(dcb_t *dcb); 117 uint32 (*rx_outer_tag_action_get)(dcb_t *dcb); 118 uint32 (*rx_inner_vid_get)(dcb_t *dcb); 119 uint32 (*rx_inner_pri_get)(dcb_t *dcb); 120 uint32 (*rx_inner_cfi_get)(dcb_t *dcb); 121 uint32 (*rx_inner_tag_action_get)(dcb_t *dcb); 122 uint32 (*rx_bpdu_get)(dcb_t *dcb); 123 uint32 (*rx_l3_intf_get)(dcb_t *dcb); 124 uint32 (*rx_decap_tunnel_get)(dcb_t *dcb); 125 uint32 (*rx_switch_drop_get)(dcb_t *dcb); 126 uint32 (*olp_encap_oam_pkt_get)(dcb_t *dcb); 127 uint32 (*read_ecc_error_get)(dcb_t *dcb); 128 uint32 (*desc_remaining_get)(dcb_t *dcb); 129 uint32 (*desc_remaining_set)(dcb_t *dcb, uint32 val); 130 uint32 (*desc_status_get)(dcb_t *dcb); 131 uint32 (*desc_status_set)(dcb_t *dcb, uint32 val); 132 uint32 (*match_id_lo_get)(dcb_t *dcb); 133 uint32 (*match_id_hi_get)(dcb_t *dcb); 134 uint32 (*forwarding_type_get)(dcb_t *dcb); 135 uint32 (*forwarding_zone_id_get)(dcb_t *dcb); 136 #ifdef BROADCOM_DEBUG 137 /* miscellaneous debug helpers */ 138 uint32 (*tx_l2pbm_get)(dcb_t *dcb); 139 uint32 (*tx_utpbm_get)(dcb_t *dcb); 140 uint32 (*tx_l3pbm_get)(dcb_t *dcb); 141 uint32 (*tx_crc_get)(dcb_t *dcb); 142 uint32 (*tx_cos_get)(dcb_t *dcb); 143 uint32 (*tx_destmod_get)(dcb_t *dcb); 144 uint32 (*tx_destport_get)(dcb_t *dcb); 145 uint32 (*tx_opcode_get)(dcb_t *dcb); 146 uint32 (*tx_srcmod_get)(dcb_t *dcb); 147 uint32 (*tx_srcport_get)(dcb_t *dcb); 148 uint32 (*tx_prio_get)(dcb_t *dcb); 149 uint32 (*tx_pfm_get)(dcb_t *dcb); 150 151 void (*dump)(int unit, dcb_t *dcb, char *prefix, int tx); 152 void (*reason_dump)(int unit, dcb_t *dcb, char *prefix); 153 #endif /* BROADCOM_DEBUG */ 154 #ifdef PLISIM 155 /* used by pcid only */ 156 void (*status_init)(dcb_t *dcb); 157 void (*xfercount_set)(dcb_t *dcb, uint32 count); 158 void (*rx_start_set)(dcb_t *dcb, int val); 159 void (*rx_end_set)(dcb_t *dcb, int val); 160 void (*rx_error_set)(dcb_t *dcb, int val); 161 void (*rx_crc_set)(dcb_t *dcb, int val); 162 void (*rx_ingport_set)(dcb_t *dcb, int val); 163 #endif /* PLISIM */ 164 uint32 (*rx_hg2_ext_eh_type_get)(dcb_t *dcb); 165 } dcb_op_t; 166 167 #define SOC_DCB(_u) SOC_CONTROL(_u)->dcb_op 168 169 #define SOC_DCB_TYPE(_u) SOC_DCB(_u)->dcbtype 170 #define SOC_DCB_SIZE(_u) SOC_DCB(_u)->dcbsize 171 172 #define SOC_DCB_RX_REASON_MAPS( _u) SOC_DCB(_u)->rx_reason_maps 173 174 #define SOC_DCB_INIT(_u, _dcb) SOC_DCB(_u)->init(_dcb) 175 #define SOC_DCB_ADDTX(_u, _dv, _addr, _count, _l2pbm, _utpbm, _l3pbm, _f, _hgh) \ 176 SOC_DCB(_u)->addtx(_dv, _addr, _count, _l2pbm, _utpbm, _l3pbm, _f, _hgh) 177 #define SOC_DCB_ADDRX(_u, _dv, _addr, _count, _f) \ 178 SOC_DCB(_u)->addrx(_dv, _addr, _count, _f) 179 #define SOC_DCB_INTRINFO(_u, _dcb, _tx, _countp) \ 180 SOC_DCB(_u)->intrinfo(_u, _dcb, _tx, _countp) 181 182 /* flags returned from INTRINFO */ 183 #define SOC_DCB_INFO_DONE 0x02 184 #define SOC_DCB_INFO_PKTEND 0x01 185 186 #define SOC_DCB_REQCOUNT_SET(_u, _dcb, _count) \ 187 SOC_DCB(_u)->reqcount_set(_dcb, _count) 188 #define SOC_DCB_REQCOUNT_GET(_u, _dcb) \ 189 SOC_DCB(_u)->reqcount_get(_dcb) 190 #ifdef INCLUDE_KNET 191 /* Mask off indicator for kernel processing done */ 192 #define SOC_DCB_XFERCOUNT_GET(_u, _dcb) \ 193 (SOC_DCB(_u)->xfercount_get(_dcb) & ~SOC_DCB_KNET_DONE) 194 #else 195 #define SOC_DCB_XFERCOUNT_GET(_u, _dcb) \ 196 SOC_DCB(_u)->xfercount_get(_dcb) 197 #endif 198 #define SOC_DCB_ADDR_SET(_u, _dcb, _addr) \ 199 SOC_DCB(_u)->addr_set(_u, _dcb, _addr) 200 #define SOC_DCB_ADDR_GET(_u, _dcb) \ 201 SOC_DCB(_u)->addr_get(_u, _dcb) 202 #define SOC_DCB_PADDR_GET(_u, _dcb) \ 203 SOC_DCB(_u)->paddr_get(_dcb) 204 #define SOC_DCB_DONE_SET(_u, _dcb, _val) \ 205 SOC_DCB(_u)->done_set(_dcb, _val) 206 #define SOC_DCB_DONE_GET(_u, _dcb) \ 207 SOC_DCB(_u)->done_get(_dcb) 208 #define SOC_DCB_SG_SET(_u, _dcb, _val) \ 209 SOC_DCB(_u)->sg_set(_dcb, _val) 210 #define SOC_DCB_SG_GET(_u, _dcb) \ 211 SOC_DCB(_u)->sg_get(_dcb) 212 #define SOC_DCB_CHAIN_SET(_u, _dcb, _val) \ 213 SOC_DCB(_u)->chain_set(_dcb, _val) 214 #define SOC_DCB_CHAIN_GET(_u, _dcb) \ 215 SOC_DCB(_u)->chain_get(_dcb) 216 #define SOC_DCB_RELOAD_SET(_u, _dcb, _val) \ 217 SOC_DCB(_u)->reload_set(_dcb, _val) 218 #define SOC_DCB_RELOAD_GET(_u, _dcb) \ 219 SOC_DCB(_u)->reload_get(_dcb) 220 221 #define SOC_DCB_ALL_DESC_INTR 0x1 222 #define SOC_DCB_CNTLD_DESC_INTR 0x2 223 224 #define SOC_DCB_DESC_INTR_SET(_u, _dcb, _val) \ 225 SOC_DCB(_u)->desc_intr_set(_dcb, _val) 226 #define SOC_DCB_DESC_INTR_GET(_u, _dcb) \ 227 SOC_DCB(_u)->desc_intr_get(_dcb) 228 229 #define SOC_DCB_TX_L2PBM_SET(_u, _dcb, _pbm) \ 230 SOC_DCB(_u)->tx_l2pbm_set(_dcb, _pbm) 231 #define SOC_DCB_TX_UTPBM_SET(_u, _dcb, _pbm) \ 232 SOC_DCB(_u)->tx_utpbm_set(_dcb, _pbm) 233 #define SOC_DCB_TX_L3PBM_SET(_u, _dcb, _pbm) \ 234 SOC_DCB(_u)->tx_l3pbm_set(_dcb, _pbm) 235 #define SOC_DCB_TX_CRC_SET(_u, _dcb, _val) \ 236 SOC_DCB(_u)->tx_crc_set(_dcb, _val) 237 #define SOC_DCB_TX_COS_SET(_u, _dcb, _val) \ 238 SOC_DCB(_u)->tx_cos_set(_dcb, _val) 239 #define SOC_DCB_TX_DESTMOD_SET(_u, _dcb, _val) \ 240 SOC_DCB(_u)->tx_destmod_set(_dcb, _val) 241 #define SOC_DCB_TX_DESTPORT_SET(_u, _dcb, _val) \ 242 SOC_DCB(_u)->tx_destport_set(_dcb, _val) 243 #define SOC_DCB_TX_OPCODE_SET(_u, _dcb, _val) \ 244 SOC_DCB(_u)->tx_opcode_set(_dcb, _val) 245 #define SOC_DCB_TX_SRCMOD_SET(_u, _dcb, _val) \ 246 SOC_DCB(_u)->tx_srcmod_set(_dcb, _val) 247 #define SOC_DCB_TX_SRCPORT_SET(_u, _dcb, _val) \ 248 SOC_DCB(_u)->tx_srcport_set(_dcb, _val) 249 #define SOC_DCB_TX_PRIO_SET(_u, _dcb, _val) \ 250 SOC_DCB(_u)->tx_prio_set(_dcb, _val) 251 #define SOC_DCB_TX_PFM_SET(_u, _dcb, _val) \ 252 SOC_DCB(_u)->tx_pfm_set(_dcb, _val) 253 254 #define SOC_DCB_RX_UNTAGGED_GET(_u, _dcb) \ 255 SOC_DCB(_u)->rx_untagged_get(_dcb, \ 256 SOC_DT_MODE(_u), \ 257 (IS_HG_PORT(_u, SOC_DCB_RX_INGPORT_GET(_u, _dcb)) | \ 258 IS_HL_PORT(_u, SOC_DCB_RX_INGPORT_GET(_u, _dcb)))) 259 #define SOC_DCB_RX_CRC_GET(_u, _dcb) \ 260 SOC_DCB(_u)->rx_crc_get(_dcb) 261 #define SOC_DCB_RX_COS_GET(_u, _dcb) \ 262 SOC_DCB(_u)->rx_cos_get(_dcb) 263 #define SOC_DCB_RX_DESTMOD_GET(_u, _dcb) \ 264 SOC_DCB(_u)->rx_destmod_get(_dcb) 265 #define SOC_DCB_RX_DESTPORT_GET(_u, _dcb) \ 266 SOC_DCB(_u)->rx_destport_get(_dcb) 267 #define SOC_DCB_RX_OPCODE_GET(_u, _dcb) \ 268 SOC_DCB(_u)->rx_opcode_get(_dcb) 269 #define SOC_DCB_RX_CLASSTAG_GET(_u, _dcb) \ 270 SOC_DCB(_u)->rx_classtag_get(_dcb) 271 #define SOC_DCB_RX_MATCHRULE_GET(_u, _dcb) \ 272 SOC_DCB(_u)->rx_matchrule_get(_dcb) 273 #define SOC_DCB_OLP_ENCAP_OAM_PKT_GET(_u, _dcb) \ 274 SOC_DCB(_u)->olp_encap_oam_pkt_get(_dcb) 275 #define SOC_DCB_READ_ECC_ERROR_GET(_u, _dcb) \ 276 SOC_DCB(_u)->read_ecc_error_get(_dcb) 277 #define SOC_DCB_DESC_REMAINING_GET(_u, _dcb) \ 278 SOC_DCB(_u)->desc_remaining_get(_dcb) 279 #define SOC_DCB_DESC_REMAINING_SET(_u, _dcb, _val) \ 280 SOC_DCB(_u)->desc_remaining_set(_dcb, _val) 281 #define SOC_DCB_DESC_STATUS_GET(_u, _dcb) \ 282 SOC_DCB(_u)->desc_status_get(_dcb) 283 #define SOC_DCB_DESC_STATUS_SET(_u, _dcb) \ 284 SOC_DCB(_u)->desc_status_set(_dcb) 285 #define SOC_DCB_MATCH_ID_LO_GET(_u, _dcb) \ 286 SOC_DCB(_u)->match_id_lo_get(_dcb) 287 #define SOC_DCB_MATCH_ID_HI_GET(_u, _dcb) \ 288 SOC_DCB(_u)->match_id_hi_get(_dcb) 289 #define SOC_DCB_FORWARDING_TYPE_GET(_u, _dcb) \ 290 SOC_DCB(_u)->forwarding_type_get(_dcb) 291 #define SOC_DCB_FORWARDING_ZONE_ID_GET(_u, _dcb) \ 292 SOC_DCB(_u)->forwarding_zone_id_get(_dcb) 293 #define SOC_DCB_RX_START_GET(_u, _dcb) \ 294 SOC_DCB(_u)->rx_start_get(_dcb) 295 #define SOC_DCB_RX_END_GET(_u, _dcb) \ 296 SOC_DCB(_u)->rx_end_get(_dcb) 297 #define SOC_DCB_RX_ERROR_GET(_u, _dcb) \ 298 SOC_DCB(_u)->rx_error_get(_dcb) 299 #define SOC_DCB_RX_PRIO_GET(_u, _dcb) \ 300 SOC_DCB(_u)->rx_prio_get(_dcb) 301 #define SOC_DCB_RX_REASON_GET(_u, _dcb) \ 302 SOC_DCB(_u)->rx_reason_get(_dcb) 303 #define SOC_DCB_RX_REASON_HI_GET(_u, _dcb) \ 304 SOC_DCB(_u)->rx_reason_hi_get(_dcb) 305 #define SOC_DCB_RX_REASONS_GET(_u, _dcb, _reasons) \ 306 SOC_DCB(_u)->rx_reasons_get(SOC_DCB(_u), _dcb, _reasons) 307 #define SOC_DCB_RX_INGPORT_GET(_u, _dcb) \ 308 SOC_DCB(_u)->rx_ingport_get(_dcb) 309 #define SOC_DCB_RX_SRCPORT_GET(_u, _dcb) \ 310 SOC_DCB(_u)->rx_srcport_get(_dcb) 311 #define SOC_DCB_RX_SRCMOD_GET(_u, _dcb) \ 312 SOC_DCB(_u)->rx_srcmod_get(_dcb) 313 #define SOC_DCB_RX_MCAST_GET(_u, _dcb) \ 314 SOC_DCB(_u)->rx_mcast_get(_dcb) 315 #define SOC_DCB_RX_VCLABEL_GET(_u, _dcb) \ 316 SOC_DCB(_u)->rx_vclabel_get(_dcb) 317 #define SOC_DCB_RX_MIRROR_GET(_u, _dcb) \ 318 SOC_DCB(_u)->rx_mirror_get(_dcb) 319 #define SOC_DCB_RX_TIMESTAMP_GET(_u, _dcb) \ 320 SOC_DCB(_u)->rx_timestamp_get(_dcb) 321 #define SOC_DCB_RX_TIMESTAMP_UPPER_GET(_u, _dcb) \ 322 SOC_DCB(_u)->rx_timestamp_upper_get(_dcb) 323 324 #define SOC_DCB_HG_SET(_u, _dcb, _val) \ 325 SOC_DCB(_u)->hg_set(_dcb, _val) 326 #define SOC_DCB_HG_GET(_u, _dcb) \ 327 SOC_DCB(_u)->hg_get(_dcb) 328 #define SOC_DCB_STAT_SET(_u, _dcb, _val) \ 329 SOC_DCB(_u)->stat_set(_dcb, _val) 330 #define SOC_DCB_STAT_GET(_u, _dcb) \ 331 SOC_DCB(_u)->stat_get(_dcb) 332 #define SOC_DCB_PURGE_SET(_u, _dcb, _val) \ 333 SOC_DCB(_u)->purge_set(_dcb, _val) 334 #define SOC_DCB_PURGE_GET(_u, _dcb) \ 335 SOC_DCB(_u)->purge_get(_dcb) 336 337 #define SOC_DCB_MHP_GET(_u, _dcb) \ 338 SOC_DCB(_u)->mhp_get(_dcb) 339 #define SOC_DCB_RX_OUTER_VID_GET(_u, _dcb) \ 340 SOC_DCB(_u)->rx_outer_vid_get(_dcb) 341 #define SOC_DCB_RX_OUTER_PRI_GET(_u, _dcb) \ 342 SOC_DCB(_u)->rx_outer_pri_get(_dcb) 343 #define SOC_DCB_RX_OUTER_CFI_GET(_u, _dcb) \ 344 SOC_DCB(_u)->rx_outer_cfi_get(_dcb) 345 #define SOC_DCB_RX_OUTER_TAG_ACTION_GET(_u, _dcb) \ 346 SOC_DCB(_u)->rx_outer_tag_action_get(_dcb) 347 #define SOC_DCB_RX_INNER_VID_GET(_u, _dcb) \ 348 SOC_DCB(_u)->rx_inner_vid_get(_dcb) 349 #define SOC_DCB_RX_INNER_PRI_GET(_u, _dcb) \ 350 SOC_DCB(_u)->rx_inner_pri_get(_dcb) 351 #define SOC_DCB_RX_INNER_CFI_GET(_u, _dcb) \ 352 SOC_DCB(_u)->rx_inner_cfi_get(_dcb) 353 #define SOC_DCB_RX_INNER_TAG_ACTION_GET(_u, _dcb) \ 354 SOC_DCB(_u)->rx_inner_tag_action_get(_dcb) 355 #define SOC_DCB_RX_BPDU_GET(_u, _dcb) \ 356 SOC_DCB(_u)->rx_bpdu_get(_dcb) 357 #define SOC_DCB_RX_L3_INTF_GET(_u, _dcb) \ 358 SOC_DCB(_u)->rx_l3_intf_get(_dcb) 359 #define SOC_DCB_RX_DECAP_TUNNEL_GET(_u, _dcb) \ 360 SOC_DCB(_u)->rx_decap_tunnel_get(_dcb) 361 #define SOC_DCB_RX_SWITCH_DROP_GET(_u, _dcb) \ 362 SOC_DCB(_u)->rx_switch_drop_get(_dcb) 363 364 #ifdef BROADCOM_DEBUG 365 #define SOC_DCB_TX_L2PBM_GET(_u, _dcb) \ 366 SOC_DCB(_u)->tx_l2pbm_get(_dcb) 367 #define SOC_DCB_TX_UTPBM_GET(_u, _dcb) \ 368 SOC_DCB(_u)->tx_utpbm_get(_dcb) 369 #define SOC_DCB_TX_L3PBM_GET(_u, _dcb) \ 370 SOC_DCB(_u)->tx_l3pbm_get(_dcb) 371 #define SOC_DCB_TX_CRC_GET(_u, _dcb) \ 372 SOC_DCB(_u)->tx_crc_get(_dcb) 373 #define SOC_DCB_TX_COS_GET(_u, _dcb) \ 374 SOC_DCB(_u)->tx_cos_get(_dcb) 375 #define SOC_DCB_TX_DESTMOD_GET(_u, _dcb) \ 376 SOC_DCB(_u)->tx_destmod_get(_dcb) 377 #define SOC_DCB_TX_DESTPORT_GET(_u, _dcb) \ 378 SOC_DCB(_u)->tx_destport_get(_dcb) 379 #define SOC_DCB_TX_OPCODE_GET(_u, _dcb) \ 380 SOC_DCB(_u)->tx_opcode_get(_dcb) 381 #define SOC_DCB_TX_SRCMOD_GET(_u, _dcb) \ 382 SOC_DCB(_u)->tx_srcmod_get(_dcb) 383 #define SOC_DCB_TX_SRCPORT_GET(_u, _dcb) \ 384 SOC_DCB(_u)->tx_srcport_get(_dcb) 385 #define SOC_DCB_TX_PRIO_GET(_u, _dcb) \ 386 SOC_DCB(_u)->tx_prio_get(_dcb) 387 #define SOC_DCB_TX_PFM_GET(_u, _dcb) \ 388 SOC_DCB(_u)->tx_pfm_get(_dcb) 389 390 #define SOC_DCB_DUMP(_u, _dcb, _pfx, _tx) \ 391 SOC_DCB(_u)->dump(_u, _dcb, _pfx, _tx) 392 #define SOC_DCB_REASON_DUMP(_u, _dcb, _pfx) \ 393 SOC_DCB(_u)->reason_dump(_u, _dcb, _pfx) 394 #else /* BROADCOM_DEBUG */ 395 /* NOP if debug is not enabled */ 396 #define SOC_DCB_TX_L2PBM_GET(_u, _dcb) 397 #define SOC_DCB_TX_UTPBM_GET(_u, _dcb) 398 #define SOC_DCB_TX_L3PBM_GET(_u, _dcb) 399 #define SOC_DCB_TX_CRC_GET(_u, _dcb) 400 #define SOC_DCB_TX_COS_GET(_u, _dcb) 401 #define SOC_DCB_TX_DESTMOD_GET(_u, _dcb) 402 #define SOC_DCB_TX_DESTPORT_GET(_u, _dcb) 403 #define SOC_DCB_TX_OPCODE_GET(_u, _dcb) 404 #define SOC_DCB_TX_SRCMOD_GET(_u, _dcb) 405 #define SOC_DCB_TX_SRCPORT_GET(_u, _dcb) 406 #define SOC_DCB_TX_PRIO_GET(_u, _dcb) 407 #define SOC_DCB_TX_PFM_GET(_u, _dcb) 408 #define SOC_DCB_DUMP(_u, _dcb, _pfx, _tx) 409 #define SOC_DCB_REASON_DUMP(_u, _dcb, _pfx) 410 #endif /* BROADCOM_DEBUG */ 411 #ifdef PLISIM /* used by pcid only */ 412 #define SOC_DCB_STATUS_INIT(_u, _dcb) \ 413 SOC_DCB(_u)->status_init(_dcb) 414 #define SOC_DCB_XFERCOUNT_SET(_u, _dcb, _count) \ 415 SOC_DCB(_u)->xfercount_set(_dcb, _count) 416 #define SOC_DCB_RX_START_SET(_u, _dcb, _val) \ 417 SOC_DCB(_u)->rx_start_set(_dcb, _val) 418 #define SOC_DCB_RX_END_SET(_u, _dcb, _val) \ 419 SOC_DCB(_u)->rx_end_set(_dcb, _val) 420 #define SOC_DCB_RX_ERROR_SET(_u, _dcb, _val) \ 421 SOC_DCB(_u)->rx_error_set(_dcb, _val) 422 #define SOC_DCB_RX_CRC_SET(_u, _dcb, _val) \ 423 SOC_DCB(_u)->rx_crc_set(_dcb, _val) 424 #define SOC_DCB_RX_INGPORT_SET(_u, _dcb, _val) \ 425 SOC_DCB(_u)->rx_ingport_set(_dcb, _val) 426 #endif /* PLISIM */ 427 #define SOC_DCB_RX_HG2_EXT_EH_TYPE_GET(_u, _dcb) \ 428 SOC_DCB(_u)->rx_hg2_ext_eh_type_get(_dcb) 429 430 #define SOC_DCB_IDX2PTR(_u, _dcb, _i) \ 431 (dcb_t *)((char *)_dcb + (SOC_DCB_SIZE(_u) * (_i))) 432 #define SOC_DCB_PTR2IDX(_u, _dcb1, _dcb2) \ 433 (int)(((char *)_dcb1 - (char *)_dcb2) / SOC_DCB_SIZE(_u)) 434 435 extern void soc_dcb_unit_init(int unit); 436 437 #endif /* _SOC_DCB_H */