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