]> git.sur5r.net Git - u-boot/blob - drivers/net/sh_eth.h
efi_driver: EFI block driver
[u-boot] / drivers / net / sh_eth.h
1 /*
2  * sh_eth.h - Driver for Renesas SuperH ethernet controller.
3  *
4  * Copyright (C) 2008 - 2012 Renesas Solutions Corp.
5  * Copyright (c) 2008 - 2012 Nobuhiro Iwamatsu
6  * Copyright (c) 2007 Carlos Munoz <carlos@kenati.com>
7  *
8  * SPDX-License-Identifier:     GPL-2.0+
9  */
10
11 #include <netdev.h>
12 #include <asm/types.h>
13
14 #define SHETHER_NAME "sh_eth"
15
16 #if defined(CONFIG_SH)
17 /* Malloc returns addresses in the P1 area (cacheable). However we need to
18    use area P2 (non-cacheable) */
19 #define ADDR_TO_P2(addr)        ((((int)(addr) & ~0xe0000000) | 0xa0000000))
20
21 /* The ethernet controller needs to use physical addresses */
22 #if defined(CONFIG_SH_32BIT)
23 #define ADDR_TO_PHY(addr)       ((((int)(addr) & ~0xe0000000) | 0x40000000))
24 #else
25 #define ADDR_TO_PHY(addr)       ((int)(addr) & ~0xe0000000)
26 #endif
27 #elif defined(CONFIG_ARM)
28 #ifndef inl
29 #define inl     readl
30 #define outl    writel
31 #endif
32 #define ADDR_TO_PHY(addr)       ((int)(addr))
33 #define ADDR_TO_P2(addr)        (addr)
34 #endif /* defined(CONFIG_SH) */
35
36 /* base padding size is 16 */
37 #ifndef CONFIG_SH_ETHER_ALIGNE_SIZE
38 #define CONFIG_SH_ETHER_ALIGNE_SIZE 16
39 #endif
40
41 /* Number of supported ports */
42 #define MAX_PORT_NUM    2
43
44 /* Buffers must be big enough to hold the largest ethernet frame. Also, rx
45    buffers must be a multiple of 32 bytes */
46 #define MAX_BUF_SIZE    (48 * 32)
47
48 /* The number of tx descriptors must be large enough to point to 5 or more
49    frames. If each frame uses 2 descriptors, at least 10 descriptors are needed.
50    We use one descriptor per frame */
51 #define NUM_TX_DESC             8
52
53 /* The size of the tx descriptor is determined by how much padding is used.
54    4, 20, or 52 bytes of padding can be used */
55 #define TX_DESC_PADDING (CONFIG_SH_ETHER_ALIGNE_SIZE - 12)
56
57 /* Tx descriptor. We always use 3 bytes of padding */
58 struct tx_desc_s {
59         volatile u32 td0;
60         u32 td1;
61         u32 td2;                /* Buffer start */
62         u8 padding[TX_DESC_PADDING];    /* aligned cache line size */
63 };
64
65 /* There is no limitation in the number of rx descriptors */
66 #define NUM_RX_DESC     8
67
68 /* The size of the rx descriptor is determined by how much padding is used.
69    4, 20, or 52 bytes of padding can be used */
70 #define RX_DESC_PADDING (CONFIG_SH_ETHER_ALIGNE_SIZE - 12)
71 /* aligned cache line size */
72 #define RX_BUF_ALIGNE_SIZE      (CONFIG_SH_ETHER_ALIGNE_SIZE > 32 ? 64 : 32)
73
74 /* Rx descriptor. We always use 4 bytes of padding */
75 struct rx_desc_s {
76         volatile u32 rd0;
77         volatile u32 rd1;
78         u32 rd2;                /* Buffer start */
79         u8 padding[TX_DESC_PADDING];    /* aligned cache line size */
80 };
81
82 struct sh_eth_info {
83         struct tx_desc_s *tx_desc_alloc;
84         struct tx_desc_s *tx_desc_base;
85         struct tx_desc_s *tx_desc_cur;
86         struct rx_desc_s *rx_desc_alloc;
87         struct rx_desc_s *rx_desc_base;
88         struct rx_desc_s *rx_desc_cur;
89         u8 *rx_buf_alloc;
90         u8 *rx_buf_base;
91         u8 mac_addr[6];
92         u8 phy_addr;
93         struct eth_device *dev;
94         struct phy_device *phydev;
95         void __iomem *iobase;
96 };
97
98 struct sh_eth_dev {
99         int port;
100         struct sh_eth_info port_info[MAX_PORT_NUM];
101 };
102
103 /* from linux/drivers/net/ethernet/renesas/sh_eth.h */
104 enum {
105         /* E-DMAC registers */
106         EDSR = 0,
107         EDMR,
108         EDTRR,
109         EDRRR,
110         EESR,
111         EESIPR,
112         TDLAR,
113         TDFAR,
114         TDFXR,
115         TDFFR,
116         RDLAR,
117         RDFAR,
118         RDFXR,
119         RDFFR,
120         TRSCER,
121         RMFCR,
122         TFTR,
123         FDR,
124         RMCR,
125         EDOCR,
126         TFUCR,
127         RFOCR,
128         FCFTR,
129         RPADIR,
130         TRIMD,
131         RBWAR,
132         TBRAR,
133
134         /* Ether registers */
135         ECMR,
136         ECSR,
137         ECSIPR,
138         PIR,
139         PSR,
140         RDMLR,
141         PIPR,
142         RFLR,
143         IPGR,
144         APR,
145         MPR,
146         PFTCR,
147         PFRCR,
148         RFCR,
149         RFCF,
150         TPAUSER,
151         TPAUSECR,
152         BCFR,
153         BCFRR,
154         GECMR,
155         BCULR,
156         MAHR,
157         MALR,
158         TROCR,
159         CDCR,
160         LCCR,
161         CNDCR,
162         CEFCR,
163         FRECR,
164         TSFRCR,
165         TLFRCR,
166         CERCR,
167         CEECR,
168         RMIIMR, /* R8A7790 */
169         MAFCR,
170         RTRATE,
171         CSMR,
172         RMII_MII,
173
174         /* This value must be written at last. */
175         SH_ETH_MAX_REGISTER_OFFSET,
176 };
177
178 static const u16 sh_eth_offset_gigabit[SH_ETH_MAX_REGISTER_OFFSET] = {
179         [EDSR]  = 0x0000,
180         [EDMR]  = 0x0400,
181         [EDTRR] = 0x0408,
182         [EDRRR] = 0x0410,
183         [EESR]  = 0x0428,
184         [EESIPR]        = 0x0430,
185         [TDLAR] = 0x0010,
186         [TDFAR] = 0x0014,
187         [TDFXR] = 0x0018,
188         [TDFFR] = 0x001c,
189         [RDLAR] = 0x0030,
190         [RDFAR] = 0x0034,
191         [RDFXR] = 0x0038,
192         [RDFFR] = 0x003c,
193         [TRSCER]        = 0x0438,
194         [RMFCR] = 0x0440,
195         [TFTR]  = 0x0448,
196         [FDR]   = 0x0450,
197         [RMCR]  = 0x0458,
198         [RPADIR]        = 0x0460,
199         [FCFTR] = 0x0468,
200         [CSMR] = 0x04E4,
201
202         [ECMR]  = 0x0500,
203         [ECSR]  = 0x0510,
204         [ECSIPR]        = 0x0518,
205         [PIR]   = 0x0520,
206         [PSR]   = 0x0528,
207         [PIPR]  = 0x052c,
208         [RFLR]  = 0x0508,
209         [APR]   = 0x0554,
210         [MPR]   = 0x0558,
211         [PFTCR] = 0x055c,
212         [PFRCR] = 0x0560,
213         [TPAUSER]       = 0x0564,
214         [GECMR] = 0x05b0,
215         [BCULR] = 0x05b4,
216         [MAHR]  = 0x05c0,
217         [MALR]  = 0x05c8,
218         [TROCR] = 0x0700,
219         [CDCR]  = 0x0708,
220         [LCCR]  = 0x0710,
221         [CEFCR] = 0x0740,
222         [FRECR] = 0x0748,
223         [TSFRCR]        = 0x0750,
224         [TLFRCR]        = 0x0758,
225         [RFCR]  = 0x0760,
226         [CERCR] = 0x0768,
227         [CEECR] = 0x0770,
228         [MAFCR] = 0x0778,
229         [RMII_MII] =  0x0790,
230 };
231
232 static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = {
233         [ECMR]  = 0x0100,
234         [RFLR]  = 0x0108,
235         [ECSR]  = 0x0110,
236         [ECSIPR]        = 0x0118,
237         [PIR]   = 0x0120,
238         [PSR]   = 0x0128,
239         [RDMLR] = 0x0140,
240         [IPGR]  = 0x0150,
241         [APR]   = 0x0154,
242         [MPR]   = 0x0158,
243         [TPAUSER]       = 0x0164,
244         [RFCF]  = 0x0160,
245         [TPAUSECR]      = 0x0168,
246         [BCFRR] = 0x016c,
247         [MAHR]  = 0x01c0,
248         [MALR]  = 0x01c8,
249         [TROCR] = 0x01d0,
250         [CDCR]  = 0x01d4,
251         [LCCR]  = 0x01d8,
252         [CNDCR] = 0x01dc,
253         [CEFCR] = 0x01e4,
254         [FRECR] = 0x01e8,
255         [TSFRCR]        = 0x01ec,
256         [TLFRCR]        = 0x01f0,
257         [RFCR]  = 0x01f4,
258         [MAFCR] = 0x01f8,
259         [RTRATE]        = 0x01fc,
260
261         [EDMR]  = 0x0000,
262         [EDTRR] = 0x0008,
263         [EDRRR] = 0x0010,
264         [TDLAR] = 0x0018,
265         [RDLAR] = 0x0020,
266         [EESR]  = 0x0028,
267         [EESIPR]        = 0x0030,
268         [TRSCER]        = 0x0038,
269         [RMFCR] = 0x0040,
270         [TFTR]  = 0x0048,
271         [FDR]   = 0x0050,
272         [RMCR]  = 0x0058,
273         [TFUCR] = 0x0064,
274         [RFOCR] = 0x0068,
275         [RMIIMR] = 0x006C,
276         [FCFTR] = 0x0070,
277         [RPADIR]        = 0x0078,
278         [TRIMD] = 0x007c,
279         [RBWAR] = 0x00c8,
280         [RDFAR] = 0x00cc,
281         [TBRAR] = 0x00d4,
282         [TDFAR] = 0x00d8,
283 };
284
285 /* Register Address */
286 #if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
287 #define SH_ETH_TYPE_GETHER
288 #define BASE_IO_ADDR    0xfee00000
289 #elif defined(CONFIG_CPU_SH7757) || \
290         defined(CONFIG_CPU_SH7752) || \
291         defined(CONFIG_CPU_SH7753)
292 #if defined(CONFIG_SH_ETHER_USE_GETHER)
293 #define SH_ETH_TYPE_GETHER
294 #define BASE_IO_ADDR    0xfee00000
295 #else
296 #define SH_ETH_TYPE_ETHER
297 #define BASE_IO_ADDR    0xfef00000
298 #endif
299 #elif defined(CONFIG_CPU_SH7724)
300 #define SH_ETH_TYPE_ETHER
301 #define BASE_IO_ADDR    0xA4600000
302 #elif defined(CONFIG_R8A7740)
303 #define SH_ETH_TYPE_GETHER
304 #define BASE_IO_ADDR    0xE9A00000
305 #elif defined(CONFIG_R8A7790) || defined(CONFIG_R8A7791) || \
306         defined(CONFIG_R8A7793) || defined(CONFIG_R8A7794)
307 #define SH_ETH_TYPE_ETHER
308 #define BASE_IO_ADDR    0xEE700200
309 #elif defined(CONFIG_R7S72100)
310 #define SH_ETH_TYPE_RZ
311 #define BASE_IO_ADDR    0xE8203000
312 #endif
313
314 /*
315  * Register's bits
316  * Copy from Linux driver source code
317  */
318 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
319 /* EDSR */
320 enum EDSR_BIT {
321         EDSR_ENT = 0x01, EDSR_ENR = 0x02,
322 };
323 #define EDSR_ENALL (EDSR_ENT|EDSR_ENR)
324 #endif
325
326 /* EDMR */
327 enum DMAC_M_BIT {
328         EDMR_DL1 = 0x20, EDMR_DL0 = 0x10,
329 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
330         EDMR_SRST       = 0x03, /* Receive/Send reset */
331         EMDR_DESC_R     = 0x30, /* Descriptor reserve size */
332         EDMR_EL         = 0x40, /* Litte endian */
333 #elif defined(SH_ETH_TYPE_ETHER)
334         EDMR_SRST       = 0x01,
335         EMDR_DESC_R     = 0x30, /* Descriptor reserve size */
336         EDMR_EL         = 0x40, /* Litte endian */
337 #else
338         EDMR_SRST = 0x01,
339 #endif
340 };
341
342 #if CONFIG_SH_ETHER_ALIGNE_SIZE == 64
343 # define EMDR_DESC EDMR_DL1
344 #elif CONFIG_SH_ETHER_ALIGNE_SIZE == 32
345 # define EMDR_DESC EDMR_DL0
346 #elif CONFIG_SH_ETHER_ALIGNE_SIZE == 16 /* Default */
347 # define EMDR_DESC 0
348 #endif
349
350 /* RFLR */
351 #define RFLR_RFL_MIN    0x05EE  /* Recv Frame length 1518 byte */
352
353 /* EDTRR */
354 enum DMAC_T_BIT {
355 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
356         EDTRR_TRNS = 0x03,
357 #else
358         EDTRR_TRNS = 0x01,
359 #endif
360 };
361
362 /* GECMR */
363 enum GECMR_BIT {
364 #if defined(CONFIG_CPU_SH7757) || \
365         defined(CONFIG_CPU_SH7752) || \
366         defined(CONFIG_CPU_SH7753)
367         GECMR_1000B = 0x20, GECMR_100B = 0x01, GECMR_10B = 0x00,
368 #else
369         GECMR_1000B = 0x01, GECMR_100B = 0x04, GECMR_10B = 0x00,
370 #endif
371 };
372
373 /* EDRRR*/
374 enum EDRRR_R_BIT {
375         EDRRR_R = 0x01,
376 };
377
378 /* TPAUSER */
379 enum TPAUSER_BIT {
380         TPAUSER_TPAUSE = 0x0000ffff,
381         TPAUSER_UNLIMITED = 0,
382 };
383
384 /* BCFR */
385 enum BCFR_BIT {
386         BCFR_RPAUSE = 0x0000ffff,
387         BCFR_UNLIMITED = 0,
388 };
389
390 /* PIR */
391 enum PIR_BIT {
392         PIR_MDI = 0x08, PIR_MDO = 0x04, PIR_MMD = 0x02, PIR_MDC = 0x01,
393 };
394
395 /* PSR */
396 enum PHY_STATUS_BIT { PHY_ST_LINK = 0x01, };
397
398 /* EESR */
399 enum EESR_BIT {
400 #if defined(SH_ETH_TYPE_ETHER)
401         EESR_TWB  = 0x40000000,
402 #else
403         EESR_TWB  = 0xC0000000,
404         EESR_TC1  = 0x20000000,
405         EESR_TUC  = 0x10000000,
406         EESR_ROC  = 0x80000000,
407 #endif
408         EESR_TABT = 0x04000000,
409         EESR_RABT = 0x02000000, EESR_RFRMER = 0x01000000,
410 #if defined(SH_ETH_TYPE_ETHER)
411         EESR_ADE  = 0x00800000,
412 #endif
413         EESR_ECI  = 0x00400000,
414         EESR_FTC  = 0x00200000, EESR_TDE  = 0x00100000,
415         EESR_TFE  = 0x00080000, EESR_FRC  = 0x00040000,
416         EESR_RDE  = 0x00020000, EESR_RFE  = 0x00010000,
417 #if defined(SH_ETH_TYPE_ETHER)
418         EESR_CND  = 0x00000800,
419 #endif
420         EESR_DLC  = 0x00000400,
421         EESR_CD   = 0x00000200, EESR_RTO  = 0x00000100,
422         EESR_RMAF = 0x00000080, EESR_CEEF = 0x00000040,
423         EESR_CELF = 0x00000020, EESR_RRF  = 0x00000010,
424         EESR_RTLF = 0x00000008, EESR_RTSF = 0x00000004,
425         EESR_PRE  = 0x00000002, EESR_CERF = 0x00000001,
426 };
427
428
429 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
430 # define TX_CHECK (EESR_TC1 | EESR_FTC)
431 # define EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
432                 | EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI)
433 # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_TDE | EESR_TFE)
434
435 #else
436 # define TX_CHECK (EESR_FTC | EESR_CND | EESR_DLC | EESR_CD | EESR_RTO)
437 # define EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
438                 | EESR_RFRMER | EESR_ADE | EESR_TFE | EESR_TDE | EESR_ECI)
439 # define TX_ERROR_CEHCK (EESR_TWB | EESR_TABT | EESR_ADE | EESR_TDE | EESR_TFE)
440 #endif
441
442 /* EESIPR */
443 enum DMAC_IM_BIT {
444         DMAC_M_TWB = 0x40000000, DMAC_M_TABT = 0x04000000,
445         DMAC_M_RABT = 0x02000000,
446         DMAC_M_RFRMER = 0x01000000, DMAC_M_ADF = 0x00800000,
447         DMAC_M_ECI = 0x00400000, DMAC_M_FTC = 0x00200000,
448         DMAC_M_TDE = 0x00100000, DMAC_M_TFE = 0x00080000,
449         DMAC_M_FRC = 0x00040000, DMAC_M_RDE = 0x00020000,
450         DMAC_M_RFE = 0x00010000, DMAC_M_TINT4 = 0x00000800,
451         DMAC_M_TINT3 = 0x00000400, DMAC_M_TINT2 = 0x00000200,
452         DMAC_M_TINT1 = 0x00000100, DMAC_M_RINT8 = 0x00000080,
453         DMAC_M_RINT5 = 0x00000010, DMAC_M_RINT4 = 0x00000008,
454         DMAC_M_RINT3 = 0x00000004, DMAC_M_RINT2 = 0x00000002,
455         DMAC_M_RINT1 = 0x00000001,
456 };
457
458 /* Receive descriptor bit */
459 enum RD_STS_BIT {
460         RD_RACT = 0x80000000, RD_RDLE = 0x40000000,
461         RD_RFP1 = 0x20000000, RD_RFP0 = 0x10000000,
462         RD_RFE = 0x08000000, RD_RFS10 = 0x00000200,
463         RD_RFS9 = 0x00000100, RD_RFS8 = 0x00000080,
464         RD_RFS7 = 0x00000040, RD_RFS6 = 0x00000020,
465         RD_RFS5 = 0x00000010, RD_RFS4 = 0x00000008,
466         RD_RFS3 = 0x00000004, RD_RFS2 = 0x00000002,
467         RD_RFS1 = 0x00000001,
468 };
469 #define RDF1ST  RD_RFP1
470 #define RDFEND  RD_RFP0
471 #define RD_RFP  (RD_RFP1|RD_RFP0)
472
473 /* RDFFR*/
474 enum RDFFR_BIT {
475         RDFFR_RDLF = 0x01,
476 };
477
478 /* FCFTR */
479 enum FCFTR_BIT {
480         FCFTR_RFF2 = 0x00040000, FCFTR_RFF1 = 0x00020000,
481         FCFTR_RFF0 = 0x00010000, FCFTR_RFD2 = 0x00000004,
482         FCFTR_RFD1 = 0x00000002, FCFTR_RFD0 = 0x00000001,
483 };
484 #define FIFO_F_D_RFF    (FCFTR_RFF2|FCFTR_RFF1|FCFTR_RFF0)
485 #define FIFO_F_D_RFD    (FCFTR_RFD2|FCFTR_RFD1|FCFTR_RFD0)
486
487 /* Transfer descriptor bit */
488 enum TD_STS_BIT {
489 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_ETHER) || \
490         defined(SH_ETH_TYPE_RZ)
491         TD_TACT = 0x80000000,
492 #else
493         TD_TACT = 0x7fffffff,
494 #endif
495         TD_TDLE = 0x40000000, TD_TFP1 = 0x20000000,
496         TD_TFP0 = 0x10000000,
497 };
498 #define TDF1ST  TD_TFP1
499 #define TDFEND  TD_TFP0
500 #define TD_TFP  (TD_TFP1|TD_TFP0)
501
502 /* RMCR */
503 enum RECV_RST_BIT { RMCR_RST = 0x01, };
504 /* ECMR */
505 enum FELIC_MODE_BIT {
506 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
507         ECMR_TRCCM = 0x04000000, ECMR_RCSC = 0x00800000,
508         ECMR_DPAD = 0x00200000, ECMR_RZPF = 0x00100000,
509 #endif
510         ECMR_ZPF = 0x00080000, ECMR_PFR = 0x00040000, ECMR_RXF = 0x00020000,
511         ECMR_TXF = 0x00010000, ECMR_MCT = 0x00002000, ECMR_PRCEF = 0x00001000,
512         ECMR_PMDE = 0x00000200, ECMR_RE = 0x00000040, ECMR_TE = 0x00000020,
513         ECMR_ILB = 0x00000008, ECMR_ELB = 0x00000004, ECMR_DM = 0x00000002,
514         ECMR_PRM = 0x00000001,
515 #ifdef CONFIG_CPU_SH7724
516         ECMR_RTM = 0x00000010,
517 #elif defined(CONFIG_R8A7790) || defined(CONFIG_R8A7791) || \
518         defined(CONFIG_R8A7793) || defined(CONFIG_R8A7794)
519         ECMR_RTM = 0x00000004,
520 #endif
521
522 };
523
524 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
525 #define ECMR_CHG_DM (ECMR_TRCCM | ECMR_RZPF | ECMR_ZPF | ECMR_PFR | \
526                         ECMR_RXF | ECMR_TXF | ECMR_MCT)
527 #elif defined(SH_ETH_TYPE_ETHER)
528 #define ECMR_CHG_DM (ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF)
529 #else
530 #define ECMR_CHG_DM     (ECMR_ZPF | ECMR_PFR | ECMR_RXF | ECMR_TXF | ECMR_MCT)
531 #endif
532
533 /* ECSR */
534 enum ECSR_STATUS_BIT {
535 #if defined(SH_ETH_TYPE_ETHER)
536         ECSR_BRCRX = 0x20, ECSR_PSRTO = 0x10,
537 #endif
538         ECSR_LCHNG = 0x04,
539         ECSR_MPD = 0x02, ECSR_ICD = 0x01,
540 };
541
542 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
543 # define ECSR_INIT (ECSR_ICD | ECSIPR_MPDIP)
544 #else
545 # define ECSR_INIT (ECSR_BRCRX | ECSR_PSRTO | \
546                         ECSR_LCHNG | ECSR_ICD | ECSIPR_MPDIP)
547 #endif
548
549 /* ECSIPR */
550 enum ECSIPR_STATUS_MASK_BIT {
551 #if defined(SH_ETH_TYPE_ETHER)
552         ECSIPR_BRCRXIP = 0x20,
553         ECSIPR_PSRTOIP = 0x10,
554 #elif defined(SH_ETY_TYPE_GETHER)
555         ECSIPR_PSRTOIP = 0x10,
556         ECSIPR_PHYIP = 0x08,
557 #endif
558         ECSIPR_LCHNGIP = 0x04,
559         ECSIPR_MPDIP = 0x02,
560         ECSIPR_ICDIP = 0x01,
561 };
562
563 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
564 # define ECSIPR_INIT (ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP)
565 #else
566 # define ECSIPR_INIT (ECSIPR_BRCRXIP | ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | \
567                                 ECSIPR_ICDIP | ECSIPR_MPDIP)
568 #endif
569
570 /* APR */
571 enum APR_BIT {
572         APR_AP = 0x00000004,
573 };
574
575 /* MPR */
576 enum MPR_BIT {
577         MPR_MP = 0x00000006,
578 };
579
580 /* TRSCER */
581 enum DESC_I_BIT {
582         DESC_I_TINT4 = 0x0800, DESC_I_TINT3 = 0x0400, DESC_I_TINT2 = 0x0200,
583         DESC_I_TINT1 = 0x0100, DESC_I_RINT8 = 0x0080, DESC_I_RINT5 = 0x0010,
584         DESC_I_RINT4 = 0x0008, DESC_I_RINT3 = 0x0004, DESC_I_RINT2 = 0x0002,
585         DESC_I_RINT1 = 0x0001,
586 };
587
588 /* RPADIR */
589 enum RPADIR_BIT {
590         RPADIR_PADS1 = 0x20000, RPADIR_PADS0 = 0x10000,
591         RPADIR_PADR = 0x0003f,
592 };
593
594 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
595 # define RPADIR_INIT (0x00)
596 #else
597 # define RPADIR_INIT (RPADIR_PADS1)
598 #endif
599
600 /* FDR */
601 enum FIFO_SIZE_BIT {
602         FIFO_SIZE_T = 0x00000700, FIFO_SIZE_R = 0x00000007,
603 };
604
605 static inline unsigned long sh_eth_reg_addr(struct sh_eth_info *port,
606                                             int enum_index)
607 {
608 #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
609         const u16 *reg_offset = sh_eth_offset_gigabit;
610 #elif defined(SH_ETH_TYPE_ETHER)
611         const u16 *reg_offset = sh_eth_offset_fast_sh4;
612 #else
613 #error
614 #endif
615         return (unsigned long)port->iobase + reg_offset[enum_index];
616 }
617
618 static inline void sh_eth_write(struct sh_eth_info *port, unsigned long data,
619                                 int enum_index)
620 {
621         outl(data, sh_eth_reg_addr(port, enum_index));
622 }
623
624 static inline unsigned long sh_eth_read(struct sh_eth_info *port,
625                                         int enum_index)
626 {
627         return inl(sh_eth_reg_addr(port, enum_index));
628 }