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