summaryrefslogtreecommitdiffstats
path: root/uClinux-2.4.20-uc1/drivers/net/s3c4510.h
blob: d6abb36ebb3d8aa7901048e7c01eb375b5d25e6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#ifndef __S3C4510_H
#define __S3C4510_H

#define RX_FRAME_SIZE 10
#define TX_FRAME_SIZE 5

struct FrameDesc {
	unsigned long FrameDataPtr;		// [31] Ownership 0=CPU, 1=BDMA
	unsigned long Reserved;
	unsigned long StatusAndFrameLength;	// [31:16] Rx Status, [15:0] Frame Length
	unsigned long NextFrameDescriptor;
};

struct ethframe {
	unsigned char dst[ETH_ALEN];
	unsigned char src[ETH_ALEN];
	unsigned short proto;
	unsigned char data[ETH_DATA_LEN+22];
};

struct s3c4510_mac_init_block {
	unsigned short mode;
	unsigned char phys_addr[6];
//	unsigned filter[2];

	unsigned long tx_ptr;
	unsigned long gtx_ptr;
	unsigned long rx_ptr;

	struct FrameDesc rx_fd[RX_FRAME_SIZE];
	struct FrameDesc tx_fd[TX_FRAME_SIZE];

	struct ethframe rx_buf[RX_FRAME_SIZE];
	struct ethframe tx_buf[TX_FRAME_SIZE];
};

/* ----------------------------------------- *
 * Definitions of Samsung 4510 MAC registers *
 * ----------------------------------------- */

#define MaxRxFrameSize	(1520)

/* -------------------------------------- *
 * Buffered DMA Transmit Control Register *
 * -------------------------------------- */
#define BTxBRST		(0x0000F) /* [4:0] */
#define BTxSTSKO	(0x00020)
#define BTxCCPIE	(0x00080)
#define BTxNLIE		(0x00100)
#define BTxNOIE		(0x00200)
#define BTxEmpty	(0x00400)
//#define BTxMSL		/* [13:11] */
#define BTxMSL000	(0x00000)
#define BTxMSL001	(0x00800)
#define BTxMSL010	(0x01000)
#define BTxMSL011	(0x01800)
#define BTxMSL100	(0x02000)
#define BTxMSL101	(0x02800)
#define BTxMSL110	(0x03000)
#define BTxMSL111	(0x03800)
#define BTxEn		(0x04000)
#define BTxRS		(0x08000)

/* ------------------------------------- *
 * Buffered DMA Receive Control Register *
 * ------------------------------------- */
#define BRxBRST		(0x0000F) /* [4:0] */
#define BRxSTSKO	(0x00020)
#define BRxMAINC	(0x00040)
#define BRxDIE		(0x00080)
#define BRxNLIE		(0x00100)
#define BRxNOIE		(0x00200)
#define BRxMSOIE	(0x00400)
#define BRxLittle	(0x00800)
//#define BRxWA		/* [13:12] */
#define BRxWA01		(0x01000)
#define BRxWA10		(0x02000)
#define BRxWA11		(0x03000)
#define BRxEn		(0x04000)
#define BRxRS		(0x08000)
#define BRxEmpty	(0x10000)
#define BRxEarly	(0x20000)

/* -------------------- *
 * BDMA Status Register *
 * -------------------- */
#define S_BRxRDF	(0x00001)
#define S_BRxNL		(0x00002)
#define S_BRxNO		(0x00004)
#define S_BRxMSO	(0x00008)
#define S_BRxEmpty	(0x00010)
#define S_BRxSEarly	(0x00020)
#define S_BRxFRF	(0x00080)
#define S_BRxNFR	(0x00080)
#define S_BTxCCP	(0x10000)
#define S_BTxNL		(0x20000)
#define S_BTxNO		(0x40000)
#define S_BTxEmpty	(0x100000)

/* -------------------- *
 * MAC Control Register *
 * -------------------- */
#define HaltReq		(0x00001)
#define HaltImm		(0x00002)
#define Reset		(0x00004)
#define FullDup		(0x00008)
#define MACLoop		(0x00010)
#define MIIOFF		(0x00040)
#define Loop10		(0x00080)
#define MissRoll	(0x00400)
#define MDCOFF		(0x01000)
#define EnMissRoll	(0x02000)
#define Link10		(0x08000)

/* ----------------------------- *
 * MAC Transmit Control Register *
 * ----------------------------- */
#define TxEn		(0x0001)
#define TxHalt		(0x0002)
#define NoPad		(0x0004)
#define NoCRC		(0x0008)
#define FBack		(0x0010)
#define NoDef		(0x0020)
#define SdPause		(0x0040)
#define SQEn		(0x0080)
#define EnUnder		(0x0100)
#define EnDefer		(0x0200)
#define EnNCarr		(0x0400)
#define EnExColl	(0x0800)
#define EnLateColl	(0x1000)
#define EnTxPar		(0x2000)
#define EnComp		(0x4000)

/* ---------------------------- *
 * MAC Receive Control Register *
 * ---------------------------- */
#define RxEn		(0x0001)
#define RxHalt		(0x0002)
#define LongEn		(0x0004)
#define ShortEn		(0x0008)
#define StripCRC	(0x0010)
#define PassCtl		(0x0020)
#define IgnoreCRC	(0x0040)
//#define 		(0x0080)
#define EnAlign		(0x0100)
#define EnCRCErr	(0x0200)
#define EnOver		(0x0400)
#define EnLongErr	(0x0800)
//#define 		(0x1000)
#define EnRxPar		(0x2000)
#define EnGood		(0x4000)

/* -------------------- *
 * CAM Control Register *
 * -------------------- */
#define StationAcc	(0x0001)
#define GroupAcc	(0x0002)
#define BroadAcc	(0x0004)
#define NegCAM		(0x0008)
#define CompEn		(0x0010)

/* Tx & Rx Frame Descriptor Ownership bit[31](O) */ 
#define BDMA_owner	0x80000000 /* BDMA */
#define CPU_owner	0x7fffffff /* CPU  */

/* ------------------------------- *
 * Tx Frame Descriptor Description *
 * ------------------------------- */
#define Padding		(0x00)
#define NoPadding	(0x01)
#define CRCMode		(0x00)
#define NoCRCMode	(0x02)
#define MACTxIntEn	(0x04)
#define MACTxIntDis	(0x00)
#define LittleEndian	(0x08)
#define BigEndian	(0x00)
#define FrameDataPtrInc	(0x10)
#define FrameDataPtrDec	(0x00)
#define WA00		(0x00)
#define WA01		(0x20)
#define WA10		(0x40)
#define WA11		(0x60)

/* --------- *
 * Tx Status *
 * --------- */
#define TxCollCntMask	(0x000F)
#define ExColl		(0x0010)
#define TxDefer		(0x0020)
#define Paused		(0x0040)
#define IntTx		(0x0080)
#define Under		(0x0100)
#define Defer		(0x0200)
#define NCarr		(0x0400)
#define SQErr		(0x0800)
#define LateColl	(0x1000)
#define TxPar		(0x2000)
#define Comp		(0x4000)
#define TxHalted	(0x8000)

/* --------- *
 * Rx Status *
 * --------- */
#define OvMax		(0x0004)
#define CtlRcv		(0x0020)
#define IntRx		(0x0040)
#define Rx10stat	(0x0080)
#define AlignErr	(0x0100)
#define CRCErr		(0x0200)
#define Overflow	(0x0400)
#define LongErr		(0x0800)
#define RxPar		(0x2000)
#define Good		(0x4000)
#define RxHalted	(0x8000)

/* ------------- *
 * MII Registers *
 * ------------- */
#define MiiBusy		(1<<11)
#define PHYREGWRITE	(1<<10)

enum {
	gMACCON = FullDup,
	gMACTXCON = EnComp | TxEn,
	gMACRXCON = RxEn,
	gBDMATXCON = BTxBRST | BTxMSL110 | BTxSTSKO | BTxEn,
	gBDMARXCON = BRxDIE | BRxEn | BRxLittle | BRxMAINC | BRxBRST | BRxNLIE | BRxNOIE | BRxSTSKO | BRxWA10,
	gCAMCON = CompEn | BroadAcc
};
#endif /* __S3C4510_H */