GNU Linux-libre 4.19.264-gnu1
[releases.git] / drivers / net / ethernet / stmicro / stmmac / dwmac100.h
1 /*******************************************************************************
2   MAC 10/100 Header File
3
4   Copyright (C) 2007-2009  STMicroelectronics Ltd
5
6   This program is free software; you can redistribute it and/or modify it
7   under the terms and conditions of the GNU General Public License,
8   version 2, as published by the Free Software Foundation.
9
10   This program is distributed in the hope it will be useful, but WITHOUT
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13   more details.
14
15   The full GNU General Public License is included in this distribution in
16   the file called "COPYING".
17
18   Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
19 *******************************************************************************/
20
21 #ifndef __DWMAC100_H__
22 #define __DWMAC100_H__
23
24 #include <linux/phy.h>
25 #include "common.h"
26
27 /*----------------------------------------------------------------------------
28  *                              MAC BLOCK defines
29  *---------------------------------------------------------------------------*/
30 /* MAC CSR offset */
31 #define MAC_CONTROL     0x00000000      /* MAC Control */
32 #define MAC_ADDR_HIGH   0x00000004      /* MAC Address High */
33 #define MAC_ADDR_LOW    0x00000008      /* MAC Address Low */
34 #define MAC_HASH_HIGH   0x0000000c      /* Multicast Hash Table High */
35 #define MAC_HASH_LOW    0x00000010      /* Multicast Hash Table Low */
36 #define MAC_MII_ADDR    0x00000014      /* MII Address */
37 #define MAC_MII_DATA    0x00000018      /* MII Data */
38 #define MAC_FLOW_CTRL   0x0000001c      /* Flow Control */
39 #define MAC_VLAN1       0x00000020      /* VLAN1 Tag */
40 #define MAC_VLAN2       0x00000024      /* VLAN2 Tag */
41
42 /* MAC CTRL defines */
43 #define MAC_CONTROL_RA  0x80000000      /* Receive All Mode */
44 #define MAC_CONTROL_BLE 0x40000000      /* Endian Mode */
45 #define MAC_CONTROL_HBD 0x10000000      /* Heartbeat Disable */
46 #define MAC_CONTROL_PS  0x08000000      /* Port Select */
47 #define MAC_CONTROL_DRO 0x00800000      /* Disable Receive Own */
48 #define MAC_CONTROL_EXT_LOOPBACK 0x00400000     /* Reserved (ext loopback?) */
49 #define MAC_CONTROL_OM  0x00200000      /* Loopback Operating Mode */
50 #define MAC_CONTROL_F   0x00100000      /* Full Duplex Mode */
51 #define MAC_CONTROL_PM  0x00080000      /* Pass All Multicast */
52 #define MAC_CONTROL_PR  0x00040000      /* Promiscuous Mode */
53 #define MAC_CONTROL_IF  0x00020000      /* Inverse Filtering */
54 #define MAC_CONTROL_PB  0x00010000      /* Pass Bad Frames */
55 #define MAC_CONTROL_HO  0x00008000      /* Hash Only Filtering Mode */
56 #define MAC_CONTROL_HP  0x00002000      /* Hash/Perfect Filtering Mode */
57 #define MAC_CONTROL_LCC 0x00001000      /* Late Collision Control */
58 #define MAC_CONTROL_DBF 0x00000800      /* Disable Broadcast Frames */
59 #define MAC_CONTROL_DRTY        0x00000400      /* Disable Retry */
60 #define MAC_CONTROL_ASTP        0x00000100      /* Automatic Pad Stripping */
61 #define MAC_CONTROL_BOLMT_10    0x00000000      /* Back Off Limit 10 */
62 #define MAC_CONTROL_BOLMT_8     0x00000040      /* Back Off Limit 8 */
63 #define MAC_CONTROL_BOLMT_4     0x00000080      /* Back Off Limit 4 */
64 #define MAC_CONTROL_BOLMT_1     0x000000c0      /* Back Off Limit 1 */
65 #define MAC_CONTROL_DC          0x00000020      /* Deferral Check */
66 #define MAC_CONTROL_TE          0x00000008      /* Transmitter Enable */
67 #define MAC_CONTROL_RE          0x00000004      /* Receiver Enable */
68
69 #define MAC_CORE_INIT (MAC_CONTROL_HBD | MAC_CONTROL_ASTP)
70
71 /* MAC FLOW CTRL defines */
72 #define MAC_FLOW_CTRL_PT_MASK   0xffff0000      /* Pause Time Mask */
73 #define MAC_FLOW_CTRL_PT_SHIFT  16
74 #define MAC_FLOW_CTRL_PASS      0x00000004      /* Pass Control Frames */
75 #define MAC_FLOW_CTRL_ENABLE    0x00000002      /* Flow Control Enable */
76 #define MAC_FLOW_CTRL_PAUSE     0x00000001      /* Flow Control Busy ... */
77
78 /* MII ADDR  defines */
79 #define MAC_MII_ADDR_WRITE      0x00000002      /* MII Write */
80 #define MAC_MII_ADDR_BUSY       0x00000001      /* MII Busy */
81
82 /*----------------------------------------------------------------------------
83  *                              DMA BLOCK defines
84  *---------------------------------------------------------------------------*/
85
86 /* DMA Bus Mode register defines */
87 #define DMA_BUS_MODE_DBO        0x00100000      /* Descriptor Byte Ordering */
88 #define DMA_BUS_MODE_BLE        0x00000080      /* Big Endian/Little Endian */
89 #define DMA_BUS_MODE_PBL_MASK   0x00003f00      /* Programmable Burst Len */
90 #define DMA_BUS_MODE_PBL_SHIFT  8
91 #define DMA_BUS_MODE_DSL_MASK   0x0000007c      /* Descriptor Skip Length */
92 #define DMA_BUS_MODE_DSL_SHIFT  2       /*   (in DWORDS)      */
93 #define DMA_BUS_MODE_BAR_BUS    0x00000002      /* Bar-Bus Arbitration */
94 #define DMA_BUS_MODE_DEFAULT    0x00000000
95
96 /* DMA Control register defines */
97 #define DMA_CONTROL_SF          0x00200000      /* Store And Forward */
98
99 /* Transmit Threshold Control */
100 enum ttc_control {
101         DMA_CONTROL_TTC_DEFAULT = 0x00000000,   /* Threshold is 32 DWORDS */
102         DMA_CONTROL_TTC_64 = 0x00004000,        /* Threshold is 64 DWORDS */
103         DMA_CONTROL_TTC_128 = 0x00008000,       /* Threshold is 128 DWORDS */
104         DMA_CONTROL_TTC_256 = 0x0000c000,       /* Threshold is 256 DWORDS */
105         DMA_CONTROL_TTC_18 = 0x00400000,        /* Threshold is 18 DWORDS */
106         DMA_CONTROL_TTC_24 = 0x00404000,        /* Threshold is 24 DWORDS */
107         DMA_CONTROL_TTC_32 = 0x00408000,        /* Threshold is 32 DWORDS */
108         DMA_CONTROL_TTC_40 = 0x0040c000,        /* Threshold is 40 DWORDS */
109         DMA_CONTROL_SE = 0x00000008,    /* Stop On Empty */
110         DMA_CONTROL_OSF = 0x00000004,   /* Operate On 2nd Frame */
111 };
112
113 /* STMAC110 DMA Missed Frame Counter register defines */
114 #define DMA_MISSED_FRAME_OVE    0x10000000      /* FIFO Overflow Overflow */
115 #define DMA_MISSED_FRAME_OVE_CNTR 0x0ffe0000    /* Overflow Frame Counter */
116 #define DMA_MISSED_FRAME_OVE_M  0x00010000      /* Missed Frame Overflow */
117 #define DMA_MISSED_FRAME_M_CNTR 0x0000ffff      /* Missed Frame Couinter */
118
119 extern const struct stmmac_dma_ops dwmac100_dma_ops;
120
121 #endif /* __DWMAC100_H__ */