0001
0002
0003
0004
0005
0006
0007
0008 #ifndef ARC_EMAC_H
0009 #define ARC_EMAC_H
0010
0011 #include <linux/device.h>
0012 #include <linux/dma-mapping.h>
0013 #include <linux/netdevice.h>
0014 #include <linux/phy.h>
0015 #include <linux/clk.h>
0016
0017
0018 #define TXINT_MASK (1 << 0)
0019 #define RXINT_MASK (1 << 1)
0020 #define ERR_MASK (1 << 2)
0021 #define TXCH_MASK (1 << 3)
0022 #define MSER_MASK (1 << 4)
0023 #define RXCR_MASK (1 << 8)
0024 #define RXFR_MASK (1 << 9)
0025 #define RXFL_MASK (1 << 10)
0026 #define MDIO_MASK (1 << 12)
0027 #define TXPL_MASK (1 << 31)
0028
0029
0030 #define EN_MASK (1 << 0)
0031 #define TXRN_MASK (1 << 3)
0032 #define RXRN_MASK (1 << 4)
0033 #define DSBC_MASK (1 << 8)
0034 #define ENFL_MASK (1 << 10)
0035 #define PROM_MASK (1 << 11)
0036
0037
0038 #define OWN_MASK (1 << 31)
0039 #define FIRST_MASK (1 << 16)
0040 #define LAST_MASK (1 << 17)
0041 #define LEN_MASK 0x000007FF
0042 #define CRLS (1 << 21)
0043 #define DEFR (1 << 22)
0044 #define DROP (1 << 23)
0045 #define RTRY (1 << 24)
0046 #define LTCL (1 << 28)
0047 #define UFLO (1 << 29)
0048
0049 #define FOR_EMAC OWN_MASK
0050 #define FOR_CPU 0
0051
0052
0053 enum {
0054 R_ID = 0,
0055 R_STATUS,
0056 R_ENABLE,
0057 R_CTRL,
0058 R_POLLRATE,
0059 R_RXERR,
0060 R_MISS,
0061 R_TX_RING,
0062 R_RX_RING,
0063 R_ADDRL,
0064 R_ADDRH,
0065 R_LAFL,
0066 R_LAFH,
0067 R_MDIO,
0068 };
0069
0070 #define TX_TIMEOUT (400 * HZ / 1000)
0071
0072 #define ARC_EMAC_NAPI_WEIGHT 40
0073
0074 #define EMAC_BUFFER_SIZE 1536
0075
0076
0077
0078
0079
0080
0081
0082 struct arc_emac_bd {
0083 __le32 info;
0084 dma_addr_t data;
0085 };
0086
0087
0088 #define RX_BD_NUM 128
0089 #define TX_BD_NUM 128
0090
0091 #define RX_RING_SZ (RX_BD_NUM * sizeof(struct arc_emac_bd))
0092 #define TX_RING_SZ (TX_BD_NUM * sizeof(struct arc_emac_bd))
0093
0094
0095
0096
0097
0098
0099
0100 struct buffer_state {
0101 struct sk_buff *skb;
0102 DEFINE_DMA_UNMAP_ADDR(addr);
0103 DEFINE_DMA_UNMAP_LEN(len);
0104 };
0105
0106 struct arc_emac_mdio_bus_data {
0107 struct gpio_desc *reset_gpio;
0108 int msec;
0109 };
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131 struct arc_emac_priv {
0132 const char *drv_name;
0133 void (*set_mac_speed)(void *priv, unsigned int speed);
0134
0135
0136 struct device *dev;
0137 struct mii_bus *bus;
0138 struct arc_emac_mdio_bus_data bus_data;
0139
0140 void __iomem *regs;
0141 struct clk *clk;
0142
0143 struct napi_struct napi;
0144
0145 struct arc_emac_bd *rxbd;
0146 struct arc_emac_bd *txbd;
0147
0148 dma_addr_t rxbd_dma;
0149 dma_addr_t txbd_dma;
0150
0151 struct buffer_state rx_buff[RX_BD_NUM];
0152 struct buffer_state tx_buff[TX_BD_NUM];
0153 unsigned int txbd_curr;
0154 unsigned int txbd_dirty;
0155
0156 unsigned int last_rx_bd;
0157
0158 unsigned int link;
0159 unsigned int duplex;
0160 unsigned int speed;
0161
0162 unsigned int rx_missed_errors;
0163 };
0164
0165
0166
0167
0168
0169
0170
0171 static inline void arc_reg_set(struct arc_emac_priv *priv, int reg, int value)
0172 {
0173 iowrite32(value, priv->regs + reg * sizeof(int));
0174 }
0175
0176
0177
0178
0179
0180
0181
0182
0183 static inline unsigned int arc_reg_get(struct arc_emac_priv *priv, int reg)
0184 {
0185 return ioread32(priv->regs + reg * sizeof(int));
0186 }
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197 static inline void arc_reg_or(struct arc_emac_priv *priv, int reg, int mask)
0198 {
0199 unsigned int value = arc_reg_get(priv, reg);
0200
0201 arc_reg_set(priv, reg, value | mask);
0202 }
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213 static inline void arc_reg_clr(struct arc_emac_priv *priv, int reg, int mask)
0214 {
0215 unsigned int value = arc_reg_get(priv, reg);
0216
0217 arc_reg_set(priv, reg, value & ~mask);
0218 }
0219
0220 int arc_mdio_probe(struct arc_emac_priv *priv);
0221 int arc_mdio_remove(struct arc_emac_priv *priv);
0222 int arc_emac_probe(struct net_device *ndev, int interface);
0223 int arc_emac_remove(struct net_device *ndev);
0224
0225 #endif