xref: /linux/drivers/net/ethernet/broadcom/bcm63xx_enet.h (revision 0d456bad36d42d16022be045c8a53ddbb59ee478)
1 #ifndef BCM63XX_ENET_H_
2 #define BCM63XX_ENET_H_
3 
4 #include <linux/types.h>
5 #include <linux/mii.h>
6 #include <linux/mutex.h>
7 #include <linux/phy.h>
8 #include <linux/platform_device.h>
9 
10 #include <bcm63xx_regs.h>
11 #include <bcm63xx_irq.h>
12 #include <bcm63xx_io.h>
13 #include <bcm63xx_iudma.h>
14 
15 /* default number of descriptor */
16 #define BCMENET_DEF_RX_DESC	64
17 #define BCMENET_DEF_TX_DESC	32
18 
19 /* maximum burst len for dma (4 bytes unit) */
20 #define BCMENET_DMA_MAXBURST	16
21 
22 /* tx transmit threshold (4 bytes unit), fifo is 256 bytes, the value
23  * must be low enough so that a DMA transfer of above burst length can
24  * not overflow the fifo  */
25 #define BCMENET_TX_FIFO_TRESH	32
26 
27 /*
28  * hardware maximum rx/tx packet size including FCS, max mtu is
29  * actually 2047, but if we set max rx size register to 2047 we won't
30  * get overflow information if packet size is 2048 or above
31  */
32 #define BCMENET_MAX_MTU		2046
33 
34 /*
35  * MIB Counters register definitions
36 */
37 #define ETH_MIB_TX_GD_OCTETS			0
38 #define ETH_MIB_TX_GD_PKTS			1
39 #define ETH_MIB_TX_ALL_OCTETS			2
40 #define ETH_MIB_TX_ALL_PKTS			3
41 #define ETH_MIB_TX_BRDCAST			4
42 #define ETH_MIB_TX_MULT				5
43 #define ETH_MIB_TX_64				6
44 #define ETH_MIB_TX_65_127			7
45 #define ETH_MIB_TX_128_255			8
46 #define ETH_MIB_TX_256_511			9
47 #define ETH_MIB_TX_512_1023			10
48 #define ETH_MIB_TX_1024_MAX			11
49 #define ETH_MIB_TX_JAB				12
50 #define ETH_MIB_TX_OVR				13
51 #define ETH_MIB_TX_FRAG				14
52 #define ETH_MIB_TX_UNDERRUN			15
53 #define ETH_MIB_TX_COL				16
54 #define ETH_MIB_TX_1_COL			17
55 #define ETH_MIB_TX_M_COL			18
56 #define ETH_MIB_TX_EX_COL			19
57 #define ETH_MIB_TX_LATE				20
58 #define ETH_MIB_TX_DEF				21
59 #define ETH_MIB_TX_CRS				22
60 #define ETH_MIB_TX_PAUSE			23
61 
62 #define ETH_MIB_RX_GD_OCTETS			32
63 #define ETH_MIB_RX_GD_PKTS			33
64 #define ETH_MIB_RX_ALL_OCTETS			34
65 #define ETH_MIB_RX_ALL_PKTS			35
66 #define ETH_MIB_RX_BRDCAST			36
67 #define ETH_MIB_RX_MULT				37
68 #define ETH_MIB_RX_64				38
69 #define ETH_MIB_RX_65_127			39
70 #define ETH_MIB_RX_128_255			40
71 #define ETH_MIB_RX_256_511			41
72 #define ETH_MIB_RX_512_1023			42
73 #define ETH_MIB_RX_1024_MAX			43
74 #define ETH_MIB_RX_JAB				44
75 #define ETH_MIB_RX_OVR				45
76 #define ETH_MIB_RX_FRAG				46
77 #define ETH_MIB_RX_DROP				47
78 #define ETH_MIB_RX_CRC_ALIGN			48
79 #define ETH_MIB_RX_UND				49
80 #define ETH_MIB_RX_CRC				50
81 #define ETH_MIB_RX_ALIGN			51
82 #define ETH_MIB_RX_SYM				52
83 #define ETH_MIB_RX_PAUSE			53
84 #define ETH_MIB_RX_CNTRL			54
85 
86 
87 struct bcm_enet_mib_counters {
88 	u64 tx_gd_octets;
89 	u32 tx_gd_pkts;
90 	u32 tx_all_octets;
91 	u32 tx_all_pkts;
92 	u32 tx_brdcast;
93 	u32 tx_mult;
94 	u32 tx_64;
95 	u32 tx_65_127;
96 	u32 tx_128_255;
97 	u32 tx_256_511;
98 	u32 tx_512_1023;
99 	u32 tx_1024_max;
100 	u32 tx_jab;
101 	u32 tx_ovr;
102 	u32 tx_frag;
103 	u32 tx_underrun;
104 	u32 tx_col;
105 	u32 tx_1_col;
106 	u32 tx_m_col;
107 	u32 tx_ex_col;
108 	u32 tx_late;
109 	u32 tx_def;
110 	u32 tx_crs;
111 	u32 tx_pause;
112 	u64 rx_gd_octets;
113 	u32 rx_gd_pkts;
114 	u32 rx_all_octets;
115 	u32 rx_all_pkts;
116 	u32 rx_brdcast;
117 	u32 rx_mult;
118 	u32 rx_64;
119 	u32 rx_65_127;
120 	u32 rx_128_255;
121 	u32 rx_256_511;
122 	u32 rx_512_1023;
123 	u32 rx_1024_max;
124 	u32 rx_jab;
125 	u32 rx_ovr;
126 	u32 rx_frag;
127 	u32 rx_drop;
128 	u32 rx_crc_align;
129 	u32 rx_und;
130 	u32 rx_crc;
131 	u32 rx_align;
132 	u32 rx_sym;
133 	u32 rx_pause;
134 	u32 rx_cntrl;
135 };
136 
137 
138 struct bcm_enet_priv {
139 
140 	/* mac id (from platform device id) */
141 	int mac_id;
142 
143 	/* base remapped address of device */
144 	void __iomem *base;
145 
146 	/* mac irq, rx_dma irq, tx_dma irq */
147 	int irq;
148 	int irq_rx;
149 	int irq_tx;
150 
151 	/* hw view of rx & tx dma ring */
152 	dma_addr_t rx_desc_dma;
153 	dma_addr_t tx_desc_dma;
154 
155 	/* allocated size (in bytes) for rx & tx dma ring */
156 	unsigned int rx_desc_alloc_size;
157 	unsigned int tx_desc_alloc_size;
158 
159 
160 	struct napi_struct napi;
161 
162 	/* dma channel id for rx */
163 	int rx_chan;
164 
165 	/* number of dma desc in rx ring */
166 	int rx_ring_size;
167 
168 	/* cpu view of rx dma ring */
169 	struct bcm_enet_desc *rx_desc_cpu;
170 
171 	/* current number of armed descriptor given to hardware for rx */
172 	int rx_desc_count;
173 
174 	/* next rx descriptor to fetch from hardware */
175 	int rx_curr_desc;
176 
177 	/* next dirty rx descriptor to refill */
178 	int rx_dirty_desc;
179 
180 	/* size of allocated rx skbs */
181 	unsigned int rx_skb_size;
182 
183 	/* list of skb given to hw for rx */
184 	struct sk_buff **rx_skb;
185 
186 	/* used when rx skb allocation failed, so we defer rx queue
187 	 * refill */
188 	struct timer_list rx_timeout;
189 
190 	/* lock rx_timeout against rx normal operation */
191 	spinlock_t rx_lock;
192 
193 
194 	/* dma channel id for tx */
195 	int tx_chan;
196 
197 	/* number of dma desc in tx ring */
198 	int tx_ring_size;
199 
200 	/* cpu view of rx dma ring */
201 	struct bcm_enet_desc *tx_desc_cpu;
202 
203 	/* number of available descriptor for tx */
204 	int tx_desc_count;
205 
206 	/* next tx descriptor avaiable */
207 	int tx_curr_desc;
208 
209 	/* next dirty tx descriptor to reclaim */
210 	int tx_dirty_desc;
211 
212 	/* list of skb given to hw for tx */
213 	struct sk_buff **tx_skb;
214 
215 	/* lock used by tx reclaim and xmit */
216 	spinlock_t tx_lock;
217 
218 
219 	/* set if internal phy is ignored and external mii interface
220 	 * is selected */
221 	int use_external_mii;
222 
223 	/* set if a phy is connected, phy address must be known,
224 	 * probing is not possible */
225 	int has_phy;
226 	int phy_id;
227 
228 	/* set if connected phy has an associated irq */
229 	int has_phy_interrupt;
230 	int phy_interrupt;
231 
232 	/* used when a phy is connected (phylib used) */
233 	struct mii_bus *mii_bus;
234 	struct phy_device *phydev;
235 	int old_link;
236 	int old_duplex;
237 	int old_pause;
238 
239 	/* used when no phy is connected */
240 	int force_speed_100;
241 	int force_duplex_full;
242 
243 	/* pause parameters */
244 	int pause_auto;
245 	int pause_rx;
246 	int pause_tx;
247 
248 	/* stats */
249 	struct bcm_enet_mib_counters mib;
250 
251 	/* after mib interrupt, mib registers update is done in this
252 	 * work queue */
253 	struct work_struct mib_update_task;
254 
255 	/* lock mib update between userspace request and workqueue */
256 	struct mutex mib_update_lock;
257 
258 	/* mac clock */
259 	struct clk *mac_clk;
260 
261 	/* phy clock if internal phy is used */
262 	struct clk *phy_clk;
263 
264 	/* network device reference */
265 	struct net_device *net_dev;
266 
267 	/* platform device reference */
268 	struct platform_device *pdev;
269 
270 	/* maximum hardware transmit/receive size */
271 	unsigned int hw_mtu;
272 };
273 
274 #endif /* ! BCM63XX_ENET_H_ */
275