~ubuntu-branches/ubuntu/trusty/linux-armadaxp/trusty

« back to all changes in this revision

Viewing changes to drivers/net/macb.h

  • Committer: Package Import Robot
  • Author(s): Michael Casadevall, Bryan Wu, Dann Frazier, Michael Casadeall
  • Date: 2012-03-10 15:00:54 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120310150054-flugb39zon8vvgwe
Tags: 3.2.0-1600.1
[ Bryan Wu ]
* UBUNTU: import debian/debian.env and debian.armadaxp

[ Dann Frazier ]
* ARM: Armada XP: remove trailing '/' in dirnames in mvRules.mk

[ Michael Casadeall ]
* tools: add some tools for Marvell Armada XP processor
* kernel: timer tick hacking from Marvell
* kernel: Sheeva Errata: add delay on Sheeva when powering down
* net: add Marvell NFP netfilter
* net: socket and skb modifications made by Marvell
* miscdevice: add minor IDs for some Marvell Armada drivers
* fs: introduce memory pool for splice()
* video: EDID detection updates from Marvell Armada XP patchset
* video: backlight: add Marvell Dove LCD backlight driver
* video: display: add THS8200 display driver
* video: framebuffer: add Marvell Dove and Armada XP processor onchip LCD controller driver
* usbtest: add Interrupt transfer testing by Marvell Armada XP code
* usb: ehci: add support for Marvell EHCI controler
* tty/serial: 8250: add support for Marvell Armada XP processor and DeviceTree work
* rtc: add support for Marvell Armada XP onchip RTC controller
* net: pppoe: add Marvell ethernet NFP hook in PPPoE networking driver
* mtd: nand: add support for Marvell Armada XP Nand Flash Controller
* mtd: maps: add Marvell Armada XP specific map driver
* mmc: add support for Marvell Armada XP MMC/SD host controller
* i2c: add support for Marvell Armada XP onchip i2c bus controller
* hwmon: add Kconfig option for Armada XP onchip thermal sensor driver
* dmaengine: add Net DMA support for splice and update Marvell XOR DMA engine driver
* ata: add support for Marvell Armada XP SATA controller and update some quirks
* ARM: add Marvell Armada XP machine to mach-types
* ARM: oprofile: add support for Marvell PJ4B core
* ARM: mm: more ARMv6 switches for Marvell Armada XP
* ARM: remove static declaration to allow compilation
* ARM: alignment access fault trick
* ARM: mm: skip some fault fixing when run on NONE SMP ARMv6 mode during early abort event
* ARM: mm: add Marvell Sheeva CPU Architecture for PJ4B
* ARM: introduce optimized copy operation for Marvell Armada XP
* ARM: SAUCE: hardware breakpoint trick for Marvell Armada XP
* ARM: big endian and little endian tricks for Marvell Armada XP
* ARM: SAUCE: Add Marvell Armada XP build rules to arch/arm/kernel/Makefile
* ARM: vfp: add special handling for Marvell Armada XP
* ARM: add support for Marvell U-Boot
* ARM: add mv_controller_num for ARM PCI drivers
* ARM: add support for local PMUs, general SMP tweaks and cache flushing
* ARM: add Marvell device identifies in glue-proc.h
* ARM: add IPC driver support for Marvell platforms
* ARM: add DMA mapping for Marvell platforms
* ARM: add Sheeva errata and PJ4B code for booting
* ARM: update Kconfig and Makefile to include Marvell Armada XP platforms
* ARM: Armada XP: import LSP from Marvell for Armada XP 3.2 kernel enablement

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Atmel MACB Ethernet Controller driver
3
 
 *
4
 
 * Copyright (C) 2004-2006 Atmel Corporation
5
 
 *
6
 
 * This program is free software; you can redistribute it and/or modify
7
 
 * it under the terms of the GNU General Public License version 2 as
8
 
 * published by the Free Software Foundation.
9
 
 */
10
 
#ifndef _MACB_H
11
 
#define _MACB_H
12
 
 
13
 
/* MACB register offsets */
14
 
#define MACB_NCR                                0x0000
15
 
#define MACB_NCFGR                              0x0004
16
 
#define MACB_NSR                                0x0008
17
 
#define MACB_TSR                                0x0014
18
 
#define MACB_RBQP                               0x0018
19
 
#define MACB_TBQP                               0x001c
20
 
#define MACB_RSR                                0x0020
21
 
#define MACB_ISR                                0x0024
22
 
#define MACB_IER                                0x0028
23
 
#define MACB_IDR                                0x002c
24
 
#define MACB_IMR                                0x0030
25
 
#define MACB_MAN                                0x0034
26
 
#define MACB_PTR                                0x0038
27
 
#define MACB_PFR                                0x003c
28
 
#define MACB_FTO                                0x0040
29
 
#define MACB_SCF                                0x0044
30
 
#define MACB_MCF                                0x0048
31
 
#define MACB_FRO                                0x004c
32
 
#define MACB_FCSE                               0x0050
33
 
#define MACB_ALE                                0x0054
34
 
#define MACB_DTF                                0x0058
35
 
#define MACB_LCOL                               0x005c
36
 
#define MACB_EXCOL                              0x0060
37
 
#define MACB_TUND                               0x0064
38
 
#define MACB_CSE                                0x0068
39
 
#define MACB_RRE                                0x006c
40
 
#define MACB_ROVR                               0x0070
41
 
#define MACB_RSE                                0x0074
42
 
#define MACB_ELE                                0x0078
43
 
#define MACB_RJA                                0x007c
44
 
#define MACB_USF                                0x0080
45
 
#define MACB_STE                                0x0084
46
 
#define MACB_RLE                                0x0088
47
 
#define MACB_TPF                                0x008c
48
 
#define MACB_HRB                                0x0090
49
 
#define MACB_HRT                                0x0094
50
 
#define MACB_SA1B                               0x0098
51
 
#define MACB_SA1T                               0x009c
52
 
#define MACB_SA2B                               0x00a0
53
 
#define MACB_SA2T                               0x00a4
54
 
#define MACB_SA3B                               0x00a8
55
 
#define MACB_SA3T                               0x00ac
56
 
#define MACB_SA4B                               0x00b0
57
 
#define MACB_SA4T                               0x00b4
58
 
#define MACB_TID                                0x00b8
59
 
#define MACB_TPQ                                0x00bc
60
 
#define MACB_USRIO                              0x00c0
61
 
#define MACB_WOL                                0x00c4
62
 
 
63
 
/* Bitfields in NCR */
64
 
#define MACB_LB_OFFSET                          0
65
 
#define MACB_LB_SIZE                            1
66
 
#define MACB_LLB_OFFSET                         1
67
 
#define MACB_LLB_SIZE                           1
68
 
#define MACB_RE_OFFSET                          2
69
 
#define MACB_RE_SIZE                            1
70
 
#define MACB_TE_OFFSET                          3
71
 
#define MACB_TE_SIZE                            1
72
 
#define MACB_MPE_OFFSET                         4
73
 
#define MACB_MPE_SIZE                           1
74
 
#define MACB_CLRSTAT_OFFSET                     5
75
 
#define MACB_CLRSTAT_SIZE                       1
76
 
#define MACB_INCSTAT_OFFSET                     6
77
 
#define MACB_INCSTAT_SIZE                       1
78
 
#define MACB_WESTAT_OFFSET                      7
79
 
#define MACB_WESTAT_SIZE                        1
80
 
#define MACB_BP_OFFSET                          8
81
 
#define MACB_BP_SIZE                            1
82
 
#define MACB_TSTART_OFFSET                      9
83
 
#define MACB_TSTART_SIZE                        1
84
 
#define MACB_THALT_OFFSET                       10
85
 
#define MACB_THALT_SIZE                         1
86
 
#define MACB_NCR_TPF_OFFSET                     11
87
 
#define MACB_NCR_TPF_SIZE                       1
88
 
#define MACB_TZQ_OFFSET                         12
89
 
#define MACB_TZQ_SIZE                           1
90
 
 
91
 
/* Bitfields in NCFGR */
92
 
#define MACB_SPD_OFFSET                         0
93
 
#define MACB_SPD_SIZE                           1
94
 
#define MACB_FD_OFFSET                          1
95
 
#define MACB_FD_SIZE                            1
96
 
#define MACB_BIT_RATE_OFFSET                    2
97
 
#define MACB_BIT_RATE_SIZE                      1
98
 
#define MACB_JFRAME_OFFSET                      3
99
 
#define MACB_JFRAME_SIZE                        1
100
 
#define MACB_CAF_OFFSET                         4
101
 
#define MACB_CAF_SIZE                           1
102
 
#define MACB_NBC_OFFSET                         5
103
 
#define MACB_NBC_SIZE                           1
104
 
#define MACB_NCFGR_MTI_OFFSET                   6
105
 
#define MACB_NCFGR_MTI_SIZE                     1
106
 
#define MACB_UNI_OFFSET                         7
107
 
#define MACB_UNI_SIZE                           1
108
 
#define MACB_BIG_OFFSET                         8
109
 
#define MACB_BIG_SIZE                           1
110
 
#define MACB_EAE_OFFSET                         9
111
 
#define MACB_EAE_SIZE                           1
112
 
#define MACB_CLK_OFFSET                         10
113
 
#define MACB_CLK_SIZE                           2
114
 
#define MACB_RTY_OFFSET                         12
115
 
#define MACB_RTY_SIZE                           1
116
 
#define MACB_PAE_OFFSET                         13
117
 
#define MACB_PAE_SIZE                           1
118
 
#define MACB_RBOF_OFFSET                        14
119
 
#define MACB_RBOF_SIZE                          2
120
 
#define MACB_RLCE_OFFSET                        16
121
 
#define MACB_RLCE_SIZE                          1
122
 
#define MACB_DRFCS_OFFSET                       17
123
 
#define MACB_DRFCS_SIZE                         1
124
 
#define MACB_EFRHD_OFFSET                       18
125
 
#define MACB_EFRHD_SIZE                         1
126
 
#define MACB_IRXFCS_OFFSET                      19
127
 
#define MACB_IRXFCS_SIZE                        1
128
 
 
129
 
/* Bitfields in NSR */
130
 
#define MACB_NSR_LINK_OFFSET                    0
131
 
#define MACB_NSR_LINK_SIZE                      1
132
 
#define MACB_MDIO_OFFSET                        1
133
 
#define MACB_MDIO_SIZE                          1
134
 
#define MACB_IDLE_OFFSET                        2
135
 
#define MACB_IDLE_SIZE                          1
136
 
 
137
 
/* Bitfields in TSR */
138
 
#define MACB_UBR_OFFSET                         0
139
 
#define MACB_UBR_SIZE                           1
140
 
#define MACB_COL_OFFSET                         1
141
 
#define MACB_COL_SIZE                           1
142
 
#define MACB_TSR_RLE_OFFSET                     2
143
 
#define MACB_TSR_RLE_SIZE                       1
144
 
#define MACB_TGO_OFFSET                         3
145
 
#define MACB_TGO_SIZE                           1
146
 
#define MACB_BEX_OFFSET                         4
147
 
#define MACB_BEX_SIZE                           1
148
 
#define MACB_COMP_OFFSET                        5
149
 
#define MACB_COMP_SIZE                          1
150
 
#define MACB_UND_OFFSET                         6
151
 
#define MACB_UND_SIZE                           1
152
 
 
153
 
/* Bitfields in RSR */
154
 
#define MACB_BNA_OFFSET                         0
155
 
#define MACB_BNA_SIZE                           1
156
 
#define MACB_REC_OFFSET                         1
157
 
#define MACB_REC_SIZE                           1
158
 
#define MACB_OVR_OFFSET                         2
159
 
#define MACB_OVR_SIZE                           1
160
 
 
161
 
/* Bitfields in ISR/IER/IDR/IMR */
162
 
#define MACB_MFD_OFFSET                         0
163
 
#define MACB_MFD_SIZE                           1
164
 
#define MACB_RCOMP_OFFSET                       1
165
 
#define MACB_RCOMP_SIZE                         1
166
 
#define MACB_RXUBR_OFFSET                       2
167
 
#define MACB_RXUBR_SIZE                         1
168
 
#define MACB_TXUBR_OFFSET                       3
169
 
#define MACB_TXUBR_SIZE                         1
170
 
#define MACB_ISR_TUND_OFFSET                    4
171
 
#define MACB_ISR_TUND_SIZE                      1
172
 
#define MACB_ISR_RLE_OFFSET                     5
173
 
#define MACB_ISR_RLE_SIZE                       1
174
 
#define MACB_TXERR_OFFSET                       6
175
 
#define MACB_TXERR_SIZE                         1
176
 
#define MACB_TCOMP_OFFSET                       7
177
 
#define MACB_TCOMP_SIZE                         1
178
 
#define MACB_ISR_LINK_OFFSET                    9
179
 
#define MACB_ISR_LINK_SIZE                      1
180
 
#define MACB_ISR_ROVR_OFFSET                    10
181
 
#define MACB_ISR_ROVR_SIZE                      1
182
 
#define MACB_HRESP_OFFSET                       11
183
 
#define MACB_HRESP_SIZE                         1
184
 
#define MACB_PFR_OFFSET                         12
185
 
#define MACB_PFR_SIZE                           1
186
 
#define MACB_PTZ_OFFSET                         13
187
 
#define MACB_PTZ_SIZE                           1
188
 
 
189
 
/* Bitfields in MAN */
190
 
#define MACB_DATA_OFFSET                        0
191
 
#define MACB_DATA_SIZE                          16
192
 
#define MACB_CODE_OFFSET                        16
193
 
#define MACB_CODE_SIZE                          2
194
 
#define MACB_REGA_OFFSET                        18
195
 
#define MACB_REGA_SIZE                          5
196
 
#define MACB_PHYA_OFFSET                        23
197
 
#define MACB_PHYA_SIZE                          5
198
 
#define MACB_RW_OFFSET                          28
199
 
#define MACB_RW_SIZE                            2
200
 
#define MACB_SOF_OFFSET                         30
201
 
#define MACB_SOF_SIZE                           2
202
 
 
203
 
/* Bitfields in USRIO (AVR32) */
204
 
#define MACB_MII_OFFSET                         0
205
 
#define MACB_MII_SIZE                           1
206
 
#define MACB_EAM_OFFSET                         1
207
 
#define MACB_EAM_SIZE                           1
208
 
#define MACB_TX_PAUSE_OFFSET                    2
209
 
#define MACB_TX_PAUSE_SIZE                      1
210
 
#define MACB_TX_PAUSE_ZERO_OFFSET               3
211
 
#define MACB_TX_PAUSE_ZERO_SIZE                 1
212
 
 
213
 
/* Bitfields in USRIO (AT91) */
214
 
#define MACB_RMII_OFFSET                        0
215
 
#define MACB_RMII_SIZE                          1
216
 
#define MACB_CLKEN_OFFSET                       1
217
 
#define MACB_CLKEN_SIZE                         1
218
 
 
219
 
/* Bitfields in WOL */
220
 
#define MACB_IP_OFFSET                          0
221
 
#define MACB_IP_SIZE                            16
222
 
#define MACB_MAG_OFFSET                         16
223
 
#define MACB_MAG_SIZE                           1
224
 
#define MACB_ARP_OFFSET                         17
225
 
#define MACB_ARP_SIZE                           1
226
 
#define MACB_SA1_OFFSET                         18
227
 
#define MACB_SA1_SIZE                           1
228
 
#define MACB_WOL_MTI_OFFSET                     19
229
 
#define MACB_WOL_MTI_SIZE                       1
230
 
 
231
 
/* Constants for CLK */
232
 
#define MACB_CLK_DIV8                           0
233
 
#define MACB_CLK_DIV16                          1
234
 
#define MACB_CLK_DIV32                          2
235
 
#define MACB_CLK_DIV64                          3
236
 
 
237
 
/* Constants for MAN register */
238
 
#define MACB_MAN_SOF                            1
239
 
#define MACB_MAN_WRITE                          1
240
 
#define MACB_MAN_READ                           2
241
 
#define MACB_MAN_CODE                           2
242
 
 
243
 
/* Bit manipulation macros */
244
 
#define MACB_BIT(name)                                  \
245
 
        (1 << MACB_##name##_OFFSET)
246
 
#define MACB_BF(name,value)                             \
247
 
        (((value) & ((1 << MACB_##name##_SIZE) - 1))    \
248
 
         << MACB_##name##_OFFSET)
249
 
#define MACB_BFEXT(name,value)\
250
 
        (((value) >> MACB_##name##_OFFSET)              \
251
 
         & ((1 << MACB_##name##_SIZE) - 1))
252
 
#define MACB_BFINS(name,value,old)                      \
253
 
        (((old) & ~(((1 << MACB_##name##_SIZE) - 1)     \
254
 
                    << MACB_##name##_OFFSET))           \
255
 
         | MACB_BF(name,value))
256
 
 
257
 
/* Register access macros */
258
 
#define macb_readl(port,reg)                            \
259
 
        __raw_readl((port)->regs + MACB_##reg)
260
 
#define macb_writel(port,reg,value)                     \
261
 
        __raw_writel((value), (port)->regs + MACB_##reg)
262
 
 
263
 
struct dma_desc {
264
 
        u32     addr;
265
 
        u32     ctrl;
266
 
};
267
 
 
268
 
/* DMA descriptor bitfields */
269
 
#define MACB_RX_USED_OFFSET                     0
270
 
#define MACB_RX_USED_SIZE                       1
271
 
#define MACB_RX_WRAP_OFFSET                     1
272
 
#define MACB_RX_WRAP_SIZE                       1
273
 
#define MACB_RX_WADDR_OFFSET                    2
274
 
#define MACB_RX_WADDR_SIZE                      30
275
 
 
276
 
#define MACB_RX_FRMLEN_OFFSET                   0
277
 
#define MACB_RX_FRMLEN_SIZE                     12
278
 
#define MACB_RX_OFFSET_OFFSET                   12
279
 
#define MACB_RX_OFFSET_SIZE                     2
280
 
#define MACB_RX_SOF_OFFSET                      14
281
 
#define MACB_RX_SOF_SIZE                        1
282
 
#define MACB_RX_EOF_OFFSET                      15
283
 
#define MACB_RX_EOF_SIZE                        1
284
 
#define MACB_RX_CFI_OFFSET                      16
285
 
#define MACB_RX_CFI_SIZE                        1
286
 
#define MACB_RX_VLAN_PRI_OFFSET                 17
287
 
#define MACB_RX_VLAN_PRI_SIZE                   3
288
 
#define MACB_RX_PRI_TAG_OFFSET                  20
289
 
#define MACB_RX_PRI_TAG_SIZE                    1
290
 
#define MACB_RX_VLAN_TAG_OFFSET                 21
291
 
#define MACB_RX_VLAN_TAG_SIZE                   1
292
 
#define MACB_RX_TYPEID_MATCH_OFFSET             22
293
 
#define MACB_RX_TYPEID_MATCH_SIZE               1
294
 
#define MACB_RX_SA4_MATCH_OFFSET                23
295
 
#define MACB_RX_SA4_MATCH_SIZE                  1
296
 
#define MACB_RX_SA3_MATCH_OFFSET                24
297
 
#define MACB_RX_SA3_MATCH_SIZE                  1
298
 
#define MACB_RX_SA2_MATCH_OFFSET                25
299
 
#define MACB_RX_SA2_MATCH_SIZE                  1
300
 
#define MACB_RX_SA1_MATCH_OFFSET                26
301
 
#define MACB_RX_SA1_MATCH_SIZE                  1
302
 
#define MACB_RX_EXT_MATCH_OFFSET                28
303
 
#define MACB_RX_EXT_MATCH_SIZE                  1
304
 
#define MACB_RX_UHASH_MATCH_OFFSET              29
305
 
#define MACB_RX_UHASH_MATCH_SIZE                1
306
 
#define MACB_RX_MHASH_MATCH_OFFSET              30
307
 
#define MACB_RX_MHASH_MATCH_SIZE                1
308
 
#define MACB_RX_BROADCAST_OFFSET                31
309
 
#define MACB_RX_BROADCAST_SIZE                  1
310
 
 
311
 
#define MACB_TX_FRMLEN_OFFSET                   0
312
 
#define MACB_TX_FRMLEN_SIZE                     11
313
 
#define MACB_TX_LAST_OFFSET                     15
314
 
#define MACB_TX_LAST_SIZE                       1
315
 
#define MACB_TX_NOCRC_OFFSET                    16
316
 
#define MACB_TX_NOCRC_SIZE                      1
317
 
#define MACB_TX_BUF_EXHAUSTED_OFFSET            27
318
 
#define MACB_TX_BUF_EXHAUSTED_SIZE              1
319
 
#define MACB_TX_UNDERRUN_OFFSET                 28
320
 
#define MACB_TX_UNDERRUN_SIZE                   1
321
 
#define MACB_TX_ERROR_OFFSET                    29
322
 
#define MACB_TX_ERROR_SIZE                      1
323
 
#define MACB_TX_WRAP_OFFSET                     30
324
 
#define MACB_TX_WRAP_SIZE                       1
325
 
#define MACB_TX_USED_OFFSET                     31
326
 
#define MACB_TX_USED_SIZE                       1
327
 
 
328
 
struct ring_info {
329
 
        struct sk_buff          *skb;
330
 
        dma_addr_t              mapping;
331
 
};
332
 
 
333
 
/*
334
 
 * Hardware-collected statistics. Used when updating the network
335
 
 * device stats by a periodic timer.
336
 
 */
337
 
struct macb_stats {
338
 
        u32     rx_pause_frames;
339
 
        u32     tx_ok;
340
 
        u32     tx_single_cols;
341
 
        u32     tx_multiple_cols;
342
 
        u32     rx_ok;
343
 
        u32     rx_fcs_errors;
344
 
        u32     rx_align_errors;
345
 
        u32     tx_deferred;
346
 
        u32     tx_late_cols;
347
 
        u32     tx_excessive_cols;
348
 
        u32     tx_underruns;
349
 
        u32     tx_carrier_errors;
350
 
        u32     rx_resource_errors;
351
 
        u32     rx_overruns;
352
 
        u32     rx_symbol_errors;
353
 
        u32     rx_oversize_pkts;
354
 
        u32     rx_jabbers;
355
 
        u32     rx_undersize_pkts;
356
 
        u32     sqe_test_errors;
357
 
        u32     rx_length_mismatch;
358
 
        u32     tx_pause_frames;
359
 
};
360
 
 
361
 
struct macb {
362
 
        void __iomem            *regs;
363
 
 
364
 
        unsigned int            rx_tail;
365
 
        struct dma_desc         *rx_ring;
366
 
        void                    *rx_buffers;
367
 
 
368
 
        unsigned int            tx_head, tx_tail;
369
 
        struct dma_desc         *tx_ring;
370
 
        struct ring_info        *tx_skb;
371
 
 
372
 
        spinlock_t              lock;
373
 
        struct platform_device  *pdev;
374
 
        struct clk              *pclk;
375
 
        struct clk              *hclk;
376
 
        struct net_device       *dev;
377
 
        struct napi_struct      napi;
378
 
        struct net_device_stats stats;
379
 
        struct macb_stats       hw_stats;
380
 
 
381
 
        dma_addr_t              rx_ring_dma;
382
 
        dma_addr_t              tx_ring_dma;
383
 
        dma_addr_t              rx_buffers_dma;
384
 
 
385
 
        unsigned int            rx_pending, tx_pending;
386
 
 
387
 
        struct mii_bus          *mii_bus;
388
 
        struct phy_device       *phy_dev;
389
 
        unsigned int            link;
390
 
        unsigned int            speed;
391
 
        unsigned int            duplex;
392
 
};
393
 
 
394
 
#endif /* _MACB_H */