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

bcm_xmod_api.h (11996B)


      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:       bcm_xmod_api.h
      8  */
      9 
     10 #ifndef _BCM_XMOD_API_H_
     11 #define _BCM_XMOD_API_H_
     12 
     13 #include "types.h"
     14 
     15 /* XMOD API parameter types */
     16 #define IN          /* SDK to FW */
     17 #define OUT         /* FW to SDK */
     18 #define INOUT       /* SDK to FW to SDK */
     19 
     20 #define XMOD_BUFFER_MAX_LEN                         256
     21 
     22 #ifndef COMPILER_ATTRIBUTE
     23 #define COMPILER_ATTRIBUTE(_a)    __attribute__ (_a)
     24 #endif /* COMPILER_ATTRIBUTE */
     25 
     26 typedef enum {
     27     XMOD_E_NONE_PROCESSING  = 1,
     28     XMOD_E_NONE             = 0,
     29     XMOD_E_INTERNAL         = -1,
     30     XMOD_E_MEMORY           = -2,
     31     XMOD_E_IO               = -3,
     32     XMOD_E_PARAM            = -4,
     33     XMOD_E_CORE             = -5,
     34     XMOD_E_PHY              = -6,
     35     XMOD_E_BUSY             = -7,
     36     XMOD_E_FAIL             = -8,
     37     XMOD_E_TIMEOUT          = -9,
     38     XMOD_E_RESOURCE         = -10,
     39     XMOD_E_CONFIG           = -11,
     40     XMOD_E_UNAVAIL          = -12,
     41     XMOD_E_INIT             = -13,
     42     XMOD_E_LIMIT            = -14           /* Must come last */
     43 } xmod_error_t;
     44 
     45 #define XMOD_ETHERNET_CMDS                  1
     46 #define XMOD_PHY_FIRMWARE_LANE_CONFIG_GET           0x00
     47 #define XMOD_PHY_FIRMWARE_LANE_CONFIG_SET           0x01
     48 #define XMOD_PHY_INIT                               0x03
     49 #define XMOD_PHY_RX_RESTART                         0x05
     50 #define XMOD_PHY_POLARITY_GET                       0x06
     51 #define XMOD_PHY_POLARITY_SET                       0x07
     52 #define XMOD_PHY_TX_GET                             0x08
     53 #define XMOD_PHY_TX_SET                             0x09
     54 #define XMOD_PHY_MEDIA_TYPE_TX_GET                  0x0A
     55 #define XMOD_PHY_TX_OVERRIDE_GET                    0x0C
     56 #define XMOD_PHY_TX_OVERRIDE_SET                    0x0D
     57 #define XMOD_PHY_RX_GET                             0x10
     58 #define XMOD_PHY_RX_SET                             0x11
     59 #define XMOD_PHY_RESET_GET                          0x12
     60 #define XMOD_PHY_RESET_SET                          0x13
     61 #define XMOD_PHY_POWER_GET                          0x14
     62 #define XMOD_PHY_POWER_SET                          0x15
     63 #define XMOD_PHY_TX_LANE_CONTROL_GET                0x16
     64 #define XMOD_PHY_TX_LANE_CONTROL_SET                0x17
     65 #define XMOD_PHY_RX_LANE_CONTROL_GET                0x18
     66 #define XMOD_PHY_RX_LANE_CONTROL_SET                0x19
     67 #define XMOD_PHY_FEC_ENABLE_GET                     0x1A
     68 #define XMOD_PHY_FEC_ENABLE_SET                     0x1B
     69 #define XMOD_PHY_INTERFACE_CONFIG_GET               0x1C
     70 #define XMOD_PHY_INTERFACE_CONFIG_SET               0x1D
     71 #define XMOD_PHY_CL72_GET                           0x1E
     72 #define XMOD_PHY_CL72_SET                           0x1F
     73 #define XMOD_PHY_CL72_STATUS_GET                    0x20
     74 #define XMOD_PHY_AUTONEG_ABILITY_GET                0x22
     75 #define XMOD_PHY_AUTONEG_ABILITY_SET                0x23
     76 #define XMOD_PHY_AUTONEG_REMOTE_ABILITY_GET         0x24
     77 #define XMOD_PHY_AUTONEG_GET                        0x26
     78 #define XMOD_PHY_AUTONEG_SET                        0x27
     79 #define XMOD_PHY_AUTONEG_STATUS_GET                 0x28
     80 #define XMOD_PHY_LOOPBACK_GET                       0x2A
     81 #define XMOD_PHY_LOOPBACK_SET                       0x2B
     82 #define XMOD_PHY_RX_PMD_LOCKED_GET                  0x2C
     83 #define XMOD_PHY_LINK_STATUS_GET                    0x2E
     84 #define XMOD_PHY_STATUS_DUMP                        0x30
     85 #define XMOD_PHY_PCS_USERSPEED_GET                  0x32
     86 #define XMOD_PHY_PCS_USERSPEED_SET                  0x33
     87 #define XMOD_PORT_INIT                              0x35
     88 #define XMOD_PHY_AN_TRY_ENABLE                      0x37
     89 #define XMOD_PE_INIT                                0x39
     90 #define XMOD_PE_STATUS_GET                          0x3a
     91 #define XMOD_PE_PORT_STATS_GET                      0x3c
     92 #define XMOD_PE_TAGID_SET                           0x3f
     93 #define XMOD_PE_FW_VER_GET                          0x40
     94 #define XMOD_ETHERNET_CMDS_COUNT                    0x42    /* LAST ENTRY */
     95 
     96 
     97 #define WRITE_XMOD_ARG_BUFF(_xmodbuf, _argbuff, _arglen) \
     98     { \
     99 	bcm_memcpy((void*)_xmodbuf, (void*)_argbuff, _arglen); \
    100 	_xmodbuf+=_arglen; \
    101     }
    102 #define READ_XMOD_ARG_BUFF(_xmodbuf, _argbuff, _arglen) \
    103     { \
    104 	bcm_memcpy((void*)_argbuff, (void*)_xmodbuf, _arglen); \
    105 	_xmodbuf+=_arglen; \
    106     }
    107 #define XMOD_ARG_BUFF_ADJUST(_xmodbuf, _arglen) \
    108     { \
    109 	_xmodbuf+=_arglen; \
    110     }
    111 
    112 #define XMOD_CMD_MODE_CORE(cmd)  (cmd)
    113 #define XMOD_CMD_MODE_ETH(cmd)   (0x100 | cmd)
    114 
    115 
    116 /*!
    117  * @enum xmod_pe_mode_e
    118  * @brief port extender mode types
    119  */
    120 typedef enum xmod_pe_mode_e {
    121     XMOD_PE_MODE_4_PORTS = 1,
    122     XMOD_PE_MODE_2_PORTS = 2,
    123 } xmod_pe_mode_td;
    124 typedef uint8 xmod_pe_mode_t;
    125 
    126 /*!
    127  * @enum xmod_pe_tag_e
    128  * @brief port extender tag types
    129  */
    130 typedef enum xmod_pe_tag_e {
    131     XMOD_PE_TAG_BR      = 1,
    132     XMOD_PE_TAG_VLAN    = 2,
    133 } xmod_pe_tag_td;
    134 typedef uint8 xmod_pe_tag_t;
    135 
    136 /*!
    137  * @enum xmod_port_if_e
    138  * @brief port media type
    139  */
    140 typedef enum xmod_port_if_e {
    141     XMOD_PORT_IF_NOCXN, /* No physical connection */
    142     XMOD_PORT_IF_NULL,  /* Pass-through connection without PHY */
    143     XMOD_PORT_IF_MII,
    144     XMOD_PORT_IF_GMII,
    145     XMOD_PORT_IF_SGMII,
    146     XMOD_PORT_IF_TBI,
    147     XMOD_PORT_IF_XGMII,
    148     XMOD_PORT_IF_RGMII,
    149     XMOD_PORT_IF_RvMII,
    150     XMOD_PORT_IF_SFI,
    151     XMOD_PORT_IF_XFI,
    152     XMOD_PORT_IF_KR,
    153     XMOD_PORT_IF_KR4,
    154     XMOD_PORT_IF_CR,
    155     XMOD_PORT_IF_CR4,
    156     XMOD_PORT_IF_XLAUI,
    157     XMOD_PORT_IF_SR,
    158     XMOD_PORT_IF_RXAUI,
    159     XMOD_PORT_IF_XAUI,
    160     XMOD_PORT_IF_SPAUI,
    161     XMOD_PORT_IF_QSGMII,
    162     XMOD_PORT_IF_ILKN,
    163     XMOD_PORT_IF_RCY,
    164     XMOD_PORT_IF_FAT_PIPE,
    165     XMOD_PORT_IF_CGMII,
    166     XMOD_PORT_IF_CAUI,
    167     XMOD_PORT_IF_LR,
    168     XMOD_PORT_IF_LR4,
    169     XMOD_PORT_IF_SR4,
    170     XMOD_PORT_IF_KX,
    171     XMOD_PORT_IF_ZR,
    172     XMOD_PORT_IF_SR10,
    173     XMOD_PORT_IF_OTL,
    174     XMOD_PORT_IF_CPU,
    175     XMOD_PORT_IF_OLP,
    176     XMOD_PORT_IF_OAMP,
    177     XMOD_PORT_IF_ERP,
    178     XMOD_PORT_IF_TM_INTERNAL_PKT,   
    179     XMOD_PORT_IF_SR2,
    180     XMOD_PORT_IF_KR2,
    181     XMOD_PORT_IF_CR2,
    182     XMOD_PORT_IF_XFI2,
    183     XMOD_PORT_IF_XLAUI2,
    184     XMOD_PORT_IF_COUNT /* last, please */
    185 } xmod_port_if_td;
    186 typedef uint8 xmod_port_if_t;
    187 
    188 /*!
    189  * @struct xmod_pe_config_s
    190  * @brief PE initial configuration information
    191  */
    192 typedef struct xmod_pe_config_s {
    193     xmod_pe_mode_t      mode;
    194     xmod_pe_tag_t       tag;
    195     uint8               pfc;
    196     uint8               line10g;
    197     uint16              tagid[4];
    198     uint8               lt_up_port;     /* link training */
    199     uint8               res0[3];
    200     uint8               lt_pe_port[4];  /* link training */
    201 } COMPILER_ATTRIBUTE((packed)) xmod_pe_config_t;
    202 
    203 /*!
    204  * @struct xmod_pe_port_status_s
    205  * @brief PE port status information
    206  */
    207 typedef struct xmod_pe_port_status_s {
    208     uint8             res;			  /* reserved */
    209     uint8             link_up;        /* link_up */
    210 } COMPILER_ATTRIBUTE((packed)) xmod_pe_port_status_t;
    211 
    212 /*!
    213  * @struct xmod_pe_status_s
    214  * @brief PE port status information
    215  */
    216 typedef struct xmod_pe_status_s {
    217     xmod_pe_port_status_t       up_port;        /* up stream port */
    218     xmod_pe_port_status_t       pe_port0;       /* port 0 extender */
    219     xmod_pe_port_status_t       pe_port1;       /* port 1 extender */
    220     xmod_pe_port_status_t       pe_port2;       /* port 2 extender */
    221     xmod_pe_port_status_t       pe_port3;       /* port 3 extender */
    222     xmod_port_if_t              up_port_mod;    /* up stream port module type */
    223 } COMPILER_ATTRIBUTE((packed)) xmod_pe_status_t;
    224 
    225 /*!
    226  * @struct xmod_pe_port_stats_s
    227  * @brief PE port statistics information
    228  */
    229 typedef struct xmod_pe_port_stats_s {
    230     uint32            port_dn_cnt;        /* port down counter */
    231 
    232     uint64            rpkt;               /* Receive frame/packet Counter */
    233     uint64            rbyt;               /* Receive Byte Counter */
    234     uint64            tpkt;               /* Transmit Packet/Frame Counter */
    235     uint64            tbyt;               /* Transmit Byte Counter */
    236 
    237     uint64            rfcs;               /* Receive FCS Error Frame Counter */
    238     uint64            rfrg;               /* Receive Fragment Counter */
    239     uint64            rjbr;               /* Receive Jabber Frame Counter */
    240     uint64            rovr;               /* Receive Oversized Frame Counter */
    241     uint64            rrpkt;              /* Receive RUNT Frame Counter */
    242     uint64            raln;               /* Receive Alignment Error Frame Counter */
    243     uint64            rerpkt;             /* Receive Code Error Frame Counter */
    244     uint64            rmtue;              /* Receive MTU Check Error Frame Counter */
    245     uint64            rprm;               /* Receive Promiscuous Frame Counter */
    246     uint64            rschcrc;            /* Receive SCH CRC Error */
    247     uint64            rtrfu;              /* Receive Truncated Frame Counter (due to RX FIFO full) */
    248     uint64            rfcr;               /* Receive False Carrier Counter */
    249     uint64            rxpf;               /* Receive PAUSE Frame Counter */
    250     uint64            rflr;               /* Receive Length Out of Range Frame Counter */
    251 
    252     uint64            tfcs;               /* Transmit FCS Error Counter */
    253     uint64            tfrg;               /* Transmit Fragment Counter */
    254     uint64            tjbr;               /* Transmit Jabber Counter */
    255     uint64            tncl;               /* Transmit Total Collision Counter */
    256     uint64            tovr;               /* Transmit Oversize Packet Counter */
    257     uint64            trpkt;              /* Transmit RUNT Frame Counter */
    258     uint64            txpf;               /* Transmit Pause Control Frame Counter */
    259 
    260 } COMPILER_ATTRIBUTE((packed)) xmod_pe_port_stats_t;
    261 
    262 /*!
    263  * @struct xmod_pe_tagid_s
    264  * @brief PE port E-channel ID information
    265  */
    266 typedef struct xmod_pe_tagid_s {
    267     uint16            tagid0;    /* port 0 extender channel id */
    268     uint16            tagid1;    /* port 1 extender channel id */
    269     uint16            tagid2;    /* port 2 extender channel id */
    270     uint16            tagid3;    /* port 3 extender channel id */
    271 } COMPILER_ATTRIBUTE((packed)) xmod_pe_tagid_t;
    272 
    273 /*!
    274  * @struct xmod_pe_fw_ver_s
    275  * @brief FW ver information
    276  */
    277 typedef struct xmod_pe_fw_ver_s {
    278     uint16            major;    /* major version */
    279     uint16            minor;    /* minor version */
    280     uint16            build;    /* build version */
    281 } COMPILER_ATTRIBUTE((packed)) xmod_pe_fw_ver_t;
    282 
    283 /* XMOD_ETHERNET_CMDS & LENGTHS */
    284 /* XMOD_PHY_FIRMWARE_LANE_CONFIG_GET */
    285 /* XMOD_PE_INIT */
    286 extern int xmod_pe_init(IN xmod_pe_config_t config);
    287 #define XMOD_PE_INIT_IN_LEN   (sizeof(xmod_pe_config_t))
    288 #define XMOD_PE_INIT_OUT_LEN  (0)
    289 /* XMOD_PE_STATUS_GET */
    290 extern int xmod_pe_status_get(OUT xmod_pe_status_t status);
    291 #define XMOD_PE_STATUS_GET_IN_LEN   (0)
    292 #define XMOD_PE_STATUS_GET_OUT_LEN  (sizeof(xmod_pe_status_t))
    293 /* XMOD_PE_PORT_STATS_GET */
    294 extern int xmod_pe_port_stats_get(IN uint8 port, OUT xmod_pe_port_stats_t stats, IN uint8 reset);
    295 #define XMOD_PE_PORT_STATS_GET_IN_LEN   (sizeof(uint8)+sizeof(uint8))
    296 #define XMOD_PE_PORT_STATS_GET_OUT_LEN  (sizeof(xmod_pe_port_stats_t))
    297 /* XMOD_PE_TAGID_SET */
    298 extern int xmod_pe_tagid_set(IN xmod_pe_tagid_t tagid);
    299 #define XMOD_PE_TAGID_SET_IN_LEN   (sizeof(xmod_pe_tagid_t))
    300 #define XMOD_PE_TAGID_SET_OUT_LEN  (0)
    301 /* XMOD_PE_FW_VER_GET */
    302 extern int xmod_pe_fw_ver_get(OUT xmod_pe_fw_ver_t fw_ver);
    303 #define XMOD_PE_FW_VER_GET_IN_LEN   (0)
    304 #define XMOD_PE_FW_VER_GET_OUT_LEN  (sizeof(xmod_pe_fw_ver_t))
    305 
    306 typedef struct xmod_api_length_s
    307 {
    308   int in_len;
    309   int out_len;
    310 } xmod_api_length_t;
    311 
    312 extern const xmod_api_length_t bcm_xmod_ethernet_cmds_arg_len_tbl[];
    313 #define GET_XMOD_ETHERNET_CMD_IN_LEN(idx)   (bcm_xmod_ethernet_cmds_arg_len_tbl[idx].in_len)
    314 #define GET_XMOD_ETHERNET_CMD_OUT_LEN(idx)  (bcm_xmod_ethernet_cmds_arg_len_tbl[idx].out_len)
    315 
    316 #define GET_XMOD_BUF_WORD_LEN(len)   ((len+3)>>2)
    317 
    318 #endif /* _BCM_XMOD_API_H_ */