1*799e125cSJiandong Zheng /* 2*799e125cSJiandong Zheng * Copyright 2014 Broadcom Corporation. 3*799e125cSJiandong Zheng * 4*799e125cSJiandong Zheng * SPDX-License-Identifier: GPL-2.0+ 5*799e125cSJiandong Zheng */ 6*799e125cSJiandong Zheng 7*799e125cSJiandong Zheng #ifndef _BCM_SF2_ETH_H_ 8*799e125cSJiandong Zheng #define _BCM_SF2_ETH_H_ 9*799e125cSJiandong Zheng 10*799e125cSJiandong Zheng #include <phy.h> 11*799e125cSJiandong Zheng 12*799e125cSJiandong Zheng #define RX_BUF_SIZE 2048 13*799e125cSJiandong Zheng /* RX_BUF_NUM must be power of 2 */ 14*799e125cSJiandong Zheng #define RX_BUF_NUM 32 15*799e125cSJiandong Zheng 16*799e125cSJiandong Zheng #define TX_BUF_SIZE 2048 17*799e125cSJiandong Zheng /* TX_BUF_NUM must be power of 2 */ 18*799e125cSJiandong Zheng #define TX_BUF_NUM 2 19*799e125cSJiandong Zheng 20*799e125cSJiandong Zheng /* Support 2 Ethernet ports now */ 21*799e125cSJiandong Zheng #define BCM_ETH_MAX_PORT_NUM 2 22*799e125cSJiandong Zheng 23*799e125cSJiandong Zheng #define CONFIG_BCM_SF2_ETH_DEFAULT_PORT 0 24*799e125cSJiandong Zheng 25*799e125cSJiandong Zheng enum { 26*799e125cSJiandong Zheng MAC_DMA_TX = 1, 27*799e125cSJiandong Zheng MAC_DMA_RX = 2 28*799e125cSJiandong Zheng }; 29*799e125cSJiandong Zheng 30*799e125cSJiandong Zheng struct eth_dma { 31*799e125cSJiandong Zheng void *tx_desc_aligned; 32*799e125cSJiandong Zheng void *rx_desc_aligned; 33*799e125cSJiandong Zheng void *tx_desc; 34*799e125cSJiandong Zheng void *rx_desc; 35*799e125cSJiandong Zheng 36*799e125cSJiandong Zheng uint8_t *tx_buf; 37*799e125cSJiandong Zheng uint8_t *rx_buf; 38*799e125cSJiandong Zheng 39*799e125cSJiandong Zheng int cur_tx_index; 40*799e125cSJiandong Zheng int cur_rx_index; 41*799e125cSJiandong Zheng 42*799e125cSJiandong Zheng int (*tx_packet)(struct eth_dma *dma, void *packet, int length); 43*799e125cSJiandong Zheng bool (*check_tx_done)(struct eth_dma *dma); 44*799e125cSJiandong Zheng 45*799e125cSJiandong Zheng int (*check_rx_done)(struct eth_dma *dma, uint8_t *buf); 46*799e125cSJiandong Zheng 47*799e125cSJiandong Zheng int (*enable_dma)(struct eth_dma *dma, int dir); 48*799e125cSJiandong Zheng int (*disable_dma)(struct eth_dma *dma, int dir); 49*799e125cSJiandong Zheng }; 50*799e125cSJiandong Zheng 51*799e125cSJiandong Zheng struct eth_info { 52*799e125cSJiandong Zheng struct eth_dma dma; 53*799e125cSJiandong Zheng phy_interface_t phy_interface; 54*799e125cSJiandong Zheng struct phy_device *port[BCM_ETH_MAX_PORT_NUM]; 55*799e125cSJiandong Zheng int port_num; 56*799e125cSJiandong Zheng 57*799e125cSJiandong Zheng int (*miiphy_read)(const char *devname, unsigned char phyaddr, 58*799e125cSJiandong Zheng unsigned char reg, unsigned short *value); 59*799e125cSJiandong Zheng int (*miiphy_write)(const char *devname, unsigned char phyaddr, 60*799e125cSJiandong Zheng unsigned char reg, unsigned short value); 61*799e125cSJiandong Zheng 62*799e125cSJiandong Zheng int (*mac_init)(struct eth_device *dev); 63*799e125cSJiandong Zheng int (*enable_mac)(void); 64*799e125cSJiandong Zheng int (*disable_mac)(void); 65*799e125cSJiandong Zheng int (*set_mac_addr)(unsigned char *mac); 66*799e125cSJiandong Zheng int (*set_mac_speed)(int speed, int duplex); 67*799e125cSJiandong Zheng 68*799e125cSJiandong Zheng }; 69*799e125cSJiandong Zheng 70*799e125cSJiandong Zheng #endif /* _BCM_SF2_ETH_H_ */ 71