1799e125cSJiandong Zheng /* 2*5c624b9eSSuji Velupillai * Copyright 2014-2017 Broadcom. 3799e125cSJiandong Zheng * 4799e125cSJiandong Zheng * SPDX-License-Identifier: GPL-2.0+ 5799e125cSJiandong Zheng */ 6799e125cSJiandong Zheng 7799e125cSJiandong Zheng #ifndef _BCM_SF2_ETH_H_ 8799e125cSJiandong Zheng #define _BCM_SF2_ETH_H_ 9799e125cSJiandong Zheng 10799e125cSJiandong Zheng #include <phy.h> 11799e125cSJiandong Zheng 12799e125cSJiandong Zheng #define RX_BUF_SIZE 2048 13799e125cSJiandong Zheng /* RX_BUF_NUM must be power of 2 */ 14799e125cSJiandong Zheng #define RX_BUF_NUM 32 15799e125cSJiandong Zheng 16799e125cSJiandong Zheng #define TX_BUF_SIZE 2048 17799e125cSJiandong Zheng /* TX_BUF_NUM must be power of 2 */ 18799e125cSJiandong Zheng #define TX_BUF_NUM 2 19799e125cSJiandong Zheng 20799e125cSJiandong Zheng /* Support 2 Ethernet ports now */ 21799e125cSJiandong Zheng #define BCM_ETH_MAX_PORT_NUM 2 22799e125cSJiandong Zheng 23799e125cSJiandong Zheng enum { 24799e125cSJiandong Zheng MAC_DMA_TX = 1, 25799e125cSJiandong Zheng MAC_DMA_RX = 2 26799e125cSJiandong Zheng }; 27799e125cSJiandong Zheng 28799e125cSJiandong Zheng struct eth_dma { 29799e125cSJiandong Zheng void *tx_desc_aligned; 30799e125cSJiandong Zheng void *rx_desc_aligned; 31799e125cSJiandong Zheng 32799e125cSJiandong Zheng uint8_t *tx_buf; 33799e125cSJiandong Zheng uint8_t *rx_buf; 34799e125cSJiandong Zheng 35799e125cSJiandong Zheng int cur_tx_index; 36799e125cSJiandong Zheng int cur_rx_index; 37799e125cSJiandong Zheng 38799e125cSJiandong Zheng int (*tx_packet)(struct eth_dma *dma, void *packet, int length); 39799e125cSJiandong Zheng bool (*check_tx_done)(struct eth_dma *dma); 40799e125cSJiandong Zheng 41799e125cSJiandong Zheng int (*check_rx_done)(struct eth_dma *dma, uint8_t *buf); 42799e125cSJiandong Zheng 43799e125cSJiandong Zheng int (*enable_dma)(struct eth_dma *dma, int dir); 44799e125cSJiandong Zheng int (*disable_dma)(struct eth_dma *dma, int dir); 45799e125cSJiandong Zheng }; 46799e125cSJiandong Zheng 47799e125cSJiandong Zheng struct eth_info { 48799e125cSJiandong Zheng struct eth_dma dma; 49799e125cSJiandong Zheng phy_interface_t phy_interface; 50799e125cSJiandong Zheng struct phy_device *port[BCM_ETH_MAX_PORT_NUM]; 51799e125cSJiandong Zheng int port_num; 52799e125cSJiandong Zheng 53dfcc496eSJoe Hershberger int (*miiphy_read)(struct mii_dev *bus, int phyaddr, int devad, 54dfcc496eSJoe Hershberger int reg); 55dfcc496eSJoe Hershberger int (*miiphy_write)(struct mii_dev *bus, int phyaddr, int devad, 56dfcc496eSJoe Hershberger int reg, u16 value); 57799e125cSJiandong Zheng 58799e125cSJiandong Zheng int (*mac_init)(struct eth_device *dev); 59799e125cSJiandong Zheng int (*enable_mac)(void); 60799e125cSJiandong Zheng int (*disable_mac)(void); 61799e125cSJiandong Zheng int (*set_mac_addr)(unsigned char *mac); 62799e125cSJiandong Zheng int (*set_mac_speed)(int speed, int duplex); 63799e125cSJiandong Zheng 64799e125cSJiandong Zheng }; 65799e125cSJiandong Zheng 66799e125cSJiandong Zheng #endif /* _BCM_SF2_ETH_H_ */ 67