142 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef GRETH_H3#define GRETH_H4 5#include <linux/phy.h>6 7/* Register bits and masks */8#define GRETH_RESET 0x409#define GRETH_MII_BUSY 0x810#define GRETH_MII_NVALID 0x1011 12#define GRETH_CTRL_FD 0x1013#define GRETH_CTRL_PR 0x2014#define GRETH_CTRL_SP 0x8015#define GRETH_CTRL_GB 0x10016#define GRETH_CTRL_PSTATIEN 0x40017#define GRETH_CTRL_MCEN 0x80018#define GRETH_CTRL_DISDUPLEX 0x100019#define GRETH_STATUS_PHYSTAT 0x10020 21#define GRETH_BD_EN 0x80022#define GRETH_BD_WR 0x100023#define GRETH_BD_IE 0x200024#define GRETH_BD_LEN 0x7FF25 26#define GRETH_TXEN 0x127#define GRETH_INT_TE 0x228#define GRETH_INT_TX 0x829#define GRETH_TXI 0x430#define GRETH_TXBD_STATUS 0x0001C00031#define GRETH_TXBD_MORE 0x2000032#define GRETH_TXBD_IPCS 0x4000033#define GRETH_TXBD_TCPCS 0x8000034#define GRETH_TXBD_UDPCS 0x10000035#define GRETH_TXBD_CSALL (GRETH_TXBD_IPCS | GRETH_TXBD_TCPCS | GRETH_TXBD_UDPCS)36#define GRETH_TXBD_ERR_LC 0x1000037#define GRETH_TXBD_ERR_UE 0x400038#define GRETH_TXBD_ERR_AL 0x800039 40#define GRETH_INT_RE 0x141#define GRETH_INT_RX 0x442#define GRETH_RXEN 0x243#define GRETH_RXI 0x844#define GRETH_RXBD_STATUS 0xFFFFC00045#define GRETH_RXBD_ERR_AE 0x400046#define GRETH_RXBD_ERR_FT 0x800047#define GRETH_RXBD_ERR_CRC 0x1000048#define GRETH_RXBD_ERR_OE 0x2000049#define GRETH_RXBD_ERR_LE 0x4000050#define GRETH_RXBD_IP 0x8000051#define GRETH_RXBD_IP_CSERR 0x10000052#define GRETH_RXBD_UDP 0x20000053#define GRETH_RXBD_UDP_CSERR 0x40000054#define GRETH_RXBD_TCP 0x80000055#define GRETH_RXBD_TCP_CSERR 0x100000056#define GRETH_RXBD_IP_FRAG 0x200000057#define GRETH_RXBD_MCAST 0x400000058 59/* Descriptor parameters */60#define GRETH_TXBD_NUM 12861#define GRETH_TXBD_NUM_MASK (GRETH_TXBD_NUM-1)62#define GRETH_TX_BUF_SIZE 204863#define GRETH_RXBD_NUM 12864#define GRETH_RXBD_NUM_MASK (GRETH_RXBD_NUM-1)65#define GRETH_RX_BUF_SIZE 204866 67/* Buffers per page */68#define GRETH_RX_BUF_PPGAE (PAGE_SIZE/GRETH_RX_BUF_SIZE)69#define GRETH_TX_BUF_PPGAE (PAGE_SIZE/GRETH_TX_BUF_SIZE)70 71/* How many pages are needed for buffers */72#define GRETH_RX_BUF_PAGE_NUM (GRETH_RXBD_NUM/GRETH_RX_BUF_PPGAE)73#define GRETH_TX_BUF_PAGE_NUM (GRETH_TXBD_NUM/GRETH_TX_BUF_PPGAE)74 75/* Buffer size.76 * Gbit MAC uses tagged maximum frame size which is 1518 excluding CRC.77 * Set to 1520 to make all buffers word aligned for non-gbit MAC.78 */79#define MAX_FRAME_SIZE 152080 81/* GRETH APB registers */82struct greth_regs {83 u32 control;84 u32 status;85 u32 esa_msb;86 u32 esa_lsb;87 u32 mdio;88 u32 tx_desc_p;89 u32 rx_desc_p;90 u32 edclip;91 u32 hash_msb;92 u32 hash_lsb;93};94 95/* GRETH buffer descriptor */96struct greth_bd {97 u32 stat;98 u32 addr;99};100 101struct greth_private {102 struct sk_buff *rx_skbuff[GRETH_RXBD_NUM];103 struct sk_buff *tx_skbuff[GRETH_TXBD_NUM];104 105 unsigned char *tx_bufs[GRETH_TXBD_NUM];106 unsigned char *rx_bufs[GRETH_RXBD_NUM];107 u16 tx_bufs_length[GRETH_TXBD_NUM];108 109 u16 tx_next;110 u16 tx_last;111 u16 tx_free; /* only used on 10/100Mbit */112 u16 rx_cur;113 114 struct greth_regs *regs; /* Address of controller registers. */115 struct greth_bd *rx_bd_base; /* Address of Rx BDs. */116 struct greth_bd *tx_bd_base; /* Address of Tx BDs. */117 dma_addr_t rx_bd_base_phys;118 dma_addr_t tx_bd_base_phys;119 120 int irq;121 122 struct device *dev; /* Pointer to platform_device->dev */123 struct net_device *netdev;124 struct napi_struct napi;125 spinlock_t devlock;126 127 struct mii_bus *mdio;128 unsigned int link;129 unsigned int speed;130 unsigned int duplex;131 132 u32 msg_enable;133 134 u8 phyaddr;135 u8 multicast;136 u8 gbit_mac;137 u8 mdio_int_en;138 u8 edcl;139};140 141#endif142