openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

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 */