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