1aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2aaf4363eSJerin Jacob * Copyright(c) 2017 Cavium, Inc 34d027880SJerin Jacob */ 44d027880SJerin Jacob 54d027880SJerin Jacob #ifndef __OCTEONTX_BGX_H__ 64d027880SJerin Jacob #define __OCTEONTX_BGX_H__ 74d027880SJerin Jacob 88b42b07eSHarman Kalra #include <stdbool.h> 94d027880SJerin Jacob #include <stddef.h> 104d027880SJerin Jacob #include <stdint.h> 114d027880SJerin Jacob 1289ee1e94SSantosh Shukla #include <octeontx_mbox.h> 134d027880SJerin Jacob 14241a6500SVamsi Attunuru #define OCTEONTX_BGX_RSVD_RX_FIFOBYTES 0x40 15241a6500SVamsi Attunuru 164d027880SJerin Jacob #define OCTEONTX_BGX_COPROC 6 174d027880SJerin Jacob 184d027880SJerin Jacob /* BGX messages */ 194d027880SJerin Jacob #define MBOX_BGX_PORT_OPEN 0 204d027880SJerin Jacob #define MBOX_BGX_PORT_CLOSE 1 214d027880SJerin Jacob #define MBOX_BGX_PORT_START 2 224d027880SJerin Jacob #define MBOX_BGX_PORT_STOP 3 23e242dd1cSJerin Jacob #define MBOX_BGX_PORT_GET_CONFIG 4 24e242dd1cSJerin Jacob #define MBOX_BGX_PORT_GET_STATUS 5 25e242dd1cSJerin Jacob #define MBOX_BGX_PORT_GET_STATS 6 26e242dd1cSJerin Jacob #define MBOX_BGX_PORT_CLR_STATS 7 27e242dd1cSJerin Jacob #define MBOX_BGX_PORT_GET_LINK_STATUS 8 28e242dd1cSJerin Jacob #define MBOX_BGX_PORT_SET_PROMISC 9 29e242dd1cSJerin Jacob #define MBOX_BGX_PORT_SET_MACADDR 10 30e242dd1cSJerin Jacob #define MBOX_BGX_PORT_SET_BP 11 31e242dd1cSJerin Jacob #define MBOX_BGX_PORT_SET_BCAST 12 32e242dd1cSJerin Jacob #define MBOX_BGX_PORT_SET_MCAST 13 33b4134b2dSPavan Nikhilesh #define MBOX_BGX_PORT_SET_MTU 14 34e4373bf1SSunil Kumar Kori #define MBOX_BGX_PORT_ADD_MACADDR 15 35e4373bf1SSunil Kumar Kori #define MBOX_BGX_PORT_DEL_MACADDR 16 36e4373bf1SSunil Kumar Kori #define MBOX_BGX_PORT_GET_MACADDR_ENTRIES 17 37241a6500SVamsi Attunuru #define MBOX_BGX_PORT_GET_FIFO_CFG 18 38241a6500SVamsi Attunuru #define MBOX_BGX_PORT_FLOW_CTRL_CFG 19 398b42b07eSHarman Kalra #define MBOX_BGX_PORT_SET_LINK_STATE 20 40a84ff1d9SHarman Kalra #define MBOX_BGX_PORT_CHANGE_MODE 21 414d027880SJerin Jacob 424d027880SJerin Jacob /* BGX port configuration parameters: */ 434d027880SJerin Jacob typedef struct octeontx_mbox_bgx_port_conf { 444d027880SJerin Jacob uint8_t enable; 454d027880SJerin Jacob uint8_t promisc; 464d027880SJerin Jacob uint8_t bpen; 474d027880SJerin Jacob uint8_t macaddr[6]; /* MAC address.*/ 484d027880SJerin Jacob uint8_t fcs_strip; 494d027880SJerin Jacob uint8_t bcast_mode; 504d027880SJerin Jacob uint8_t mcast_mode; 514d027880SJerin Jacob uint8_t node; /* CPU node */ 524d027880SJerin Jacob uint16_t base_chan; 534d027880SJerin Jacob uint16_t num_chans; 544d027880SJerin Jacob uint16_t mtu; 554d027880SJerin Jacob uint8_t bgx; 564d027880SJerin Jacob uint8_t lmac; 574d027880SJerin Jacob uint8_t mode; 584d027880SJerin Jacob uint8_t pkind; 594d027880SJerin Jacob } octeontx_mbox_bgx_port_conf_t; 604d027880SJerin Jacob 61e242dd1cSJerin Jacob /* BGX port status: */ 62e242dd1cSJerin Jacob typedef struct octeontx_mbox_bgx_port_status { 63e242dd1cSJerin Jacob uint8_t link_up; 64e242dd1cSJerin Jacob uint8_t bp; 65b4134b2dSPavan Nikhilesh uint8_t duplex; 66b4134b2dSPavan Nikhilesh uint32_t speed; 67e242dd1cSJerin Jacob } octeontx_mbox_bgx_port_status_t; 68e242dd1cSJerin Jacob 69e242dd1cSJerin Jacob /* BGX port statistics: */ 70e242dd1cSJerin Jacob typedef struct octeontx_mbox_bgx_port_stats { 71e242dd1cSJerin Jacob uint64_t rx_packets; 72e242dd1cSJerin Jacob uint64_t tx_packets; 73e242dd1cSJerin Jacob uint64_t rx_bytes; 74e242dd1cSJerin Jacob uint64_t tx_bytes; 75e242dd1cSJerin Jacob uint64_t rx_errors; 76e242dd1cSJerin Jacob uint64_t tx_errors; 77e242dd1cSJerin Jacob uint64_t rx_dropped; 78e242dd1cSJerin Jacob uint64_t tx_dropped; 79e242dd1cSJerin Jacob uint64_t multicast; 80e242dd1cSJerin Jacob uint64_t collisions; 81e242dd1cSJerin Jacob 82e242dd1cSJerin Jacob uint64_t rx_length_errors; 83e242dd1cSJerin Jacob uint64_t rx_over_errors; 84e242dd1cSJerin Jacob uint64_t rx_crc_errors; 85e242dd1cSJerin Jacob uint64_t rx_frame_errors; 86e242dd1cSJerin Jacob uint64_t rx_fifo_errors; 87e242dd1cSJerin Jacob uint64_t rx_missed_errors; 88e242dd1cSJerin Jacob 89e242dd1cSJerin Jacob /* Detailed transmit errors. */ 90e242dd1cSJerin Jacob uint64_t tx_aborted_errors; 91e242dd1cSJerin Jacob uint64_t tx_carrier_errors; 92e242dd1cSJerin Jacob uint64_t tx_fifo_errors; 93e242dd1cSJerin Jacob uint64_t tx_heartbeat_errors; 94e242dd1cSJerin Jacob uint64_t tx_window_errors; 95e242dd1cSJerin Jacob 96e242dd1cSJerin Jacob /* Extended statistics based on RFC2819. */ 97e242dd1cSJerin Jacob uint64_t rx_1_to_64_packets; 98e242dd1cSJerin Jacob uint64_t rx_65_to_127_packets; 99e242dd1cSJerin Jacob uint64_t rx_128_to_255_packets; 100e242dd1cSJerin Jacob uint64_t rx_256_to_511_packets; 101e242dd1cSJerin Jacob uint64_t rx_512_to_1023_packets; 102e242dd1cSJerin Jacob uint64_t rx_1024_to_1522_packets; 103e242dd1cSJerin Jacob uint64_t rx_1523_to_max_packets; 104e242dd1cSJerin Jacob 105e242dd1cSJerin Jacob uint64_t tx_1_to_64_packets; 106e242dd1cSJerin Jacob uint64_t tx_65_to_127_packets; 107e242dd1cSJerin Jacob uint64_t tx_128_to_255_packets; 108e242dd1cSJerin Jacob uint64_t tx_256_to_511_packets; 109e242dd1cSJerin Jacob uint64_t tx_512_to_1023_packets; 110e242dd1cSJerin Jacob uint64_t tx_1024_to_1522_packets; 111e242dd1cSJerin Jacob uint64_t tx_1523_to_max_packets; 112e242dd1cSJerin Jacob 113e242dd1cSJerin Jacob uint64_t tx_multicast_packets; 114e242dd1cSJerin Jacob uint64_t rx_broadcast_packets; 115e242dd1cSJerin Jacob uint64_t tx_broadcast_packets; 116e242dd1cSJerin Jacob uint64_t rx_undersized_errors; 117e242dd1cSJerin Jacob uint64_t rx_oversize_errors; 118e242dd1cSJerin Jacob uint64_t rx_fragmented_errors; 119e242dd1cSJerin Jacob uint64_t rx_jabber_errors; 120c6b97d67SHarman Kalra uint64_t rx_pause_packets; 121c6b97d67SHarman Kalra uint64_t tx_pause_packets; 122e242dd1cSJerin Jacob } octeontx_mbox_bgx_port_stats_t; 123e242dd1cSJerin Jacob 1249614459bSSunil Kumar Kori struct octeontx_mbox_bgx_port_mac_filter { 1259614459bSSunil Kumar Kori uint8_t mac_addr[6]; 1269614459bSSunil Kumar Kori int index; 1279614459bSSunil Kumar Kori }; 1289614459bSSunil Kumar Kori 129241a6500SVamsi Attunuru /* BGX port fifo config: */ 130241a6500SVamsi Attunuru typedef struct octeontx_mbox_bgx_port_fifo_cfg { 131241a6500SVamsi Attunuru uint32_t rx_fifosz; /* in Bytes */ 132241a6500SVamsi Attunuru } octeontx_mbox_bgx_port_fifo_cfg_t; 133241a6500SVamsi Attunuru 134241a6500SVamsi Attunuru typedef enum { 135241a6500SVamsi Attunuru BGX_PORT_FC_CFG_GET = 0, 136241a6500SVamsi Attunuru BGX_PORT_FC_CFG_SET = 1 137241a6500SVamsi Attunuru } bgx_port_fc_t; 138241a6500SVamsi Attunuru 139241a6500SVamsi Attunuru /* BGX port flow control config: */ 140241a6500SVamsi Attunuru typedef struct octeontx_mbox_bgx_port_fc_cfg { 141241a6500SVamsi Attunuru /* BP on/off threshold levels in Bytes, must be a multiple of 16 */ 142241a6500SVamsi Attunuru uint16_t high_water; 143241a6500SVamsi Attunuru uint16_t low_water; 144241a6500SVamsi Attunuru uint8_t rx_pause; /* rx_pause = 1/0 to enable/disable fc on Tx */ 145241a6500SVamsi Attunuru uint8_t tx_pause; /* tx_pause = 1/0 to enable/disable fc on Rx */ 146241a6500SVamsi Attunuru bgx_port_fc_t fc_cfg; 147241a6500SVamsi Attunuru } octeontx_mbox_bgx_port_fc_cfg_t; 148241a6500SVamsi Attunuru 149a84ff1d9SHarman Kalra /* BGX change mode */ 150a84ff1d9SHarman Kalra typedef struct octeontx_mbox_bgx_port_change_mode { 151a84ff1d9SHarman Kalra uint16_t padding; 152a84ff1d9SHarman Kalra uint8_t qlm_mode; 153a84ff1d9SHarman Kalra bool autoneg; 154a84ff1d9SHarman Kalra uint8_t duplex; 155a84ff1d9SHarman Kalra uint32_t speed; 156a84ff1d9SHarman Kalra } octeontx_mbox_bgx_port_change_mode_t; 157a84ff1d9SHarman Kalra 1584d027880SJerin Jacob int octeontx_bgx_port_open(int port, octeontx_mbox_bgx_port_conf_t *conf); 1594d027880SJerin Jacob int octeontx_bgx_port_close(int port); 1604d027880SJerin Jacob int octeontx_bgx_port_start(int port); 1614d027880SJerin Jacob int octeontx_bgx_port_stop(int port); 162e242dd1cSJerin Jacob int octeontx_bgx_port_get_config(int port, octeontx_mbox_bgx_port_conf_t *conf); 163e242dd1cSJerin Jacob int octeontx_bgx_port_status(int port, octeontx_mbox_bgx_port_status_t *stat); 164e242dd1cSJerin Jacob int octeontx_bgx_port_stats(int port, octeontx_mbox_bgx_port_stats_t *stats); 165e242dd1cSJerin Jacob int octeontx_bgx_port_stats_clr(int port); 166c6b97d67SHarman Kalra int octeontx_bgx_port_xstats(int port, octeontx_mbox_bgx_port_stats_t *stats); 167e242dd1cSJerin Jacob int octeontx_bgx_port_link_status(int port); 168e242dd1cSJerin Jacob int octeontx_bgx_port_promisc_set(int port, int en); 169*2f69bbd8SHarman Kalra int octeontx_bgx_port_multicast_set(int port, int en); 170e242dd1cSJerin Jacob int octeontx_bgx_port_mac_set(int port, uint8_t *mac_addr); 1719614459bSSunil Kumar Kori int octeontx_bgx_port_mac_add(int port, uint8_t *mac_addr, int index); 172e4373bf1SSunil Kumar Kori int octeontx_bgx_port_mac_del(int port, uint32_t index); 173e4373bf1SSunil Kumar Kori int octeontx_bgx_port_mac_entries_get(int port); 1743151e6a6SHarman Kalra int octeontx_bgx_port_mtu_set(int port, int mtu); 1758b42b07eSHarman Kalra int octeontx_bgx_port_set_link_state(int port, bool en); 176241a6500SVamsi Attunuru int octeontx_bgx_port_get_fifo_cfg(int port, 177241a6500SVamsi Attunuru octeontx_mbox_bgx_port_fifo_cfg_t *cfg); 178241a6500SVamsi Attunuru int octeontx_bgx_port_flow_ctrl_cfg(int port, 179241a6500SVamsi Attunuru octeontx_mbox_bgx_port_fc_cfg_t *cfg); 180a84ff1d9SHarman Kalra int octeontx_bgx_port_change_mode(int port, 181a84ff1d9SHarman Kalra octeontx_mbox_bgx_port_change_mode_t *cfg); 1824d027880SJerin Jacob 1834d027880SJerin Jacob #endif /* __OCTEONTX_BGX_H__ */ 1844d027880SJerin Jacob 185