1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2017 Cavium, Inc 3 */ 4 5 #ifndef __OCTEONTX_BGX_H__ 6 #define __OCTEONTX_BGX_H__ 7 8 #include <stdbool.h> 9 #include <stddef.h> 10 #include <stdint.h> 11 12 #include <octeontx_mbox.h> 13 14 #define OCTEONTX_BGX_RSVD_RX_FIFOBYTES 0x40 15 16 #define OCTEONTX_BGX_COPROC 6 17 18 /* BGX messages */ 19 #define MBOX_BGX_PORT_OPEN 0 20 #define MBOX_BGX_PORT_CLOSE 1 21 #define MBOX_BGX_PORT_START 2 22 #define MBOX_BGX_PORT_STOP 3 23 #define MBOX_BGX_PORT_GET_CONFIG 4 24 #define MBOX_BGX_PORT_GET_STATUS 5 25 #define MBOX_BGX_PORT_GET_STATS 6 26 #define MBOX_BGX_PORT_CLR_STATS 7 27 #define MBOX_BGX_PORT_GET_LINK_STATUS 8 28 #define MBOX_BGX_PORT_SET_PROMISC 9 29 #define MBOX_BGX_PORT_SET_MACADDR 10 30 #define MBOX_BGX_PORT_SET_BP 11 31 #define MBOX_BGX_PORT_SET_BCAST 12 32 #define MBOX_BGX_PORT_SET_MCAST 13 33 #define MBOX_BGX_PORT_SET_MTU 14 34 #define MBOX_BGX_PORT_ADD_MACADDR 15 35 #define MBOX_BGX_PORT_DEL_MACADDR 16 36 #define MBOX_BGX_PORT_GET_MACADDR_ENTRIES 17 37 #define MBOX_BGX_PORT_GET_FIFO_CFG 18 38 #define MBOX_BGX_PORT_FLOW_CTRL_CFG 19 39 #define MBOX_BGX_PORT_SET_LINK_STATE 20 40 #define MBOX_BGX_PORT_CHANGE_MODE 21 41 42 /* BGX port configuration parameters: */ 43 typedef struct octeontx_mbox_bgx_port_conf { 44 uint8_t enable; 45 uint8_t promisc; 46 uint8_t bpen; 47 uint8_t macaddr[6]; /* MAC address.*/ 48 uint8_t fcs_strip; 49 uint8_t bcast_mode; 50 uint8_t mcast_mode; 51 uint8_t node; /* CPU node */ 52 uint16_t base_chan; 53 uint16_t num_chans; 54 uint16_t mtu; 55 uint8_t bgx; 56 uint8_t lmac; 57 uint8_t mode; 58 uint8_t pkind; 59 } octeontx_mbox_bgx_port_conf_t; 60 61 /* BGX port status: */ 62 typedef struct octeontx_mbox_bgx_port_status { 63 uint8_t link_up; 64 uint8_t bp; 65 uint8_t duplex; 66 uint32_t speed; 67 } octeontx_mbox_bgx_port_status_t; 68 69 /* BGX port statistics: */ 70 typedef struct octeontx_mbox_bgx_port_stats { 71 uint64_t rx_packets; 72 uint64_t tx_packets; 73 uint64_t rx_bytes; 74 uint64_t tx_bytes; 75 uint64_t rx_errors; 76 uint64_t tx_errors; 77 uint64_t rx_dropped; 78 uint64_t tx_dropped; 79 uint64_t multicast; 80 uint64_t collisions; 81 82 uint64_t rx_length_errors; 83 uint64_t rx_over_errors; 84 uint64_t rx_crc_errors; 85 uint64_t rx_frame_errors; 86 uint64_t rx_fifo_errors; 87 uint64_t rx_missed_errors; 88 89 /* Detailed transmit errors. */ 90 uint64_t tx_aborted_errors; 91 uint64_t tx_carrier_errors; 92 uint64_t tx_fifo_errors; 93 uint64_t tx_heartbeat_errors; 94 uint64_t tx_window_errors; 95 96 /* Extended statistics based on RFC2819. */ 97 uint64_t rx_1_to_64_packets; 98 uint64_t rx_65_to_127_packets; 99 uint64_t rx_128_to_255_packets; 100 uint64_t rx_256_to_511_packets; 101 uint64_t rx_512_to_1023_packets; 102 uint64_t rx_1024_to_1522_packets; 103 uint64_t rx_1523_to_max_packets; 104 105 uint64_t tx_1_to_64_packets; 106 uint64_t tx_65_to_127_packets; 107 uint64_t tx_128_to_255_packets; 108 uint64_t tx_256_to_511_packets; 109 uint64_t tx_512_to_1023_packets; 110 uint64_t tx_1024_to_1522_packets; 111 uint64_t tx_1523_to_max_packets; 112 113 uint64_t tx_multicast_packets; 114 uint64_t rx_broadcast_packets; 115 uint64_t tx_broadcast_packets; 116 uint64_t rx_undersized_errors; 117 uint64_t rx_oversize_errors; 118 uint64_t rx_fragmented_errors; 119 uint64_t rx_jabber_errors; 120 uint64_t rx_pause_packets; 121 uint64_t tx_pause_packets; 122 } octeontx_mbox_bgx_port_stats_t; 123 124 struct octeontx_mbox_bgx_port_mac_filter { 125 uint8_t mac_addr[6]; 126 int index; 127 }; 128 129 /* BGX port fifo config: */ 130 typedef struct octeontx_mbox_bgx_port_fifo_cfg { 131 uint32_t rx_fifosz; /* in Bytes */ 132 } octeontx_mbox_bgx_port_fifo_cfg_t; 133 134 typedef enum { 135 BGX_PORT_FC_CFG_GET = 0, 136 BGX_PORT_FC_CFG_SET = 1 137 } bgx_port_fc_t; 138 139 /* BGX port flow control config: */ 140 typedef struct octeontx_mbox_bgx_port_fc_cfg { 141 /* BP on/off threshold levels in Bytes, must be a multiple of 16 */ 142 uint16_t high_water; 143 uint16_t low_water; 144 uint8_t rx_pause; /* rx_pause = 1/0 to enable/disable fc on Tx */ 145 uint8_t tx_pause; /* tx_pause = 1/0 to enable/disable fc on Rx */ 146 bgx_port_fc_t fc_cfg; 147 } octeontx_mbox_bgx_port_fc_cfg_t; 148 149 /* BGX change mode */ 150 typedef struct octeontx_mbox_bgx_port_change_mode { 151 uint16_t padding; 152 uint8_t qlm_mode; 153 bool autoneg; 154 uint8_t duplex; 155 uint32_t speed; 156 } octeontx_mbox_bgx_port_change_mode_t; 157 158 int octeontx_bgx_port_open(int port, octeontx_mbox_bgx_port_conf_t *conf); 159 int octeontx_bgx_port_close(int port); 160 int octeontx_bgx_port_start(int port); 161 int octeontx_bgx_port_stop(int port); 162 int octeontx_bgx_port_get_config(int port, octeontx_mbox_bgx_port_conf_t *conf); 163 int octeontx_bgx_port_status(int port, octeontx_mbox_bgx_port_status_t *stat); 164 int octeontx_bgx_port_stats(int port, octeontx_mbox_bgx_port_stats_t *stats); 165 int octeontx_bgx_port_stats_clr(int port); 166 int octeontx_bgx_port_xstats(int port, octeontx_mbox_bgx_port_stats_t *stats); 167 int octeontx_bgx_port_link_status(int port); 168 int octeontx_bgx_port_promisc_set(int port, int en); 169 int octeontx_bgx_port_multicast_set(int port, int en); 170 int octeontx_bgx_port_mac_set(int port, uint8_t *mac_addr); 171 int octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr, int index); 172 int octeontx_bgx_port_mac_del(int port, uint32_t index); 173 int octeontx_bgx_port_mac_entries_get(int port); 174 int octeontx_bgx_port_mtu_set(int port, int mtu); 175 int octeontx_bgx_port_set_link_state(int port, bool en); 176 int octeontx_bgx_port_get_fifo_cfg(int port, 177 octeontx_mbox_bgx_port_fifo_cfg_t *cfg); 178 int octeontx_bgx_port_flow_ctrl_cfg(int port, 179 octeontx_mbox_bgx_port_fc_cfg_t *cfg); 180 int octeontx_bgx_port_change_mode(int port, 181 octeontx_mbox_bgx_port_change_mode_t *cfg); 182 183 #endif /* __OCTEONTX_BGX_H__ */ 184 185