2 * Macro definitions for Davicom DM9601 USB to fast ethernet controler
3 * based on Davicom DM9601E data sheet
4 * This file is public domain. Coded by M.Murayama (KHF04453@nifty.com)
13 #define NCR 0x00U /* network control register */
14 #define NSR 0x01U /* network status register */
15 #define TCR 0x02U /* tx control register */
16 #define TSR1 0x03U /* tx status register 1 */
17 #define TSR2 0x04U /* tx status register 2 */
18 #define RCR 0x05U /* rx control register */
19 #define RSR 0x06U /* rx status register */
20 #define ROCR 0x07U /* rx overflow counter register */
21 #define BPTR 0x08U /* back pressure threshold regster */
22 #define FCTR 0x09U /* flow control threshold regster */
23 #define FCR 0x0aU /* flow control threshold regster */
24 #define EPCR 0x0bU /* eeprom & phy control register */
25 #define EPAR 0x0cU /* eeprom & phy address register */
26 #define EPDR 0x0dU /* eeprom & phy data register (2byte) */
27 #define WCR 0x0fU /* wake up control register */
28 #define PAR 0x10U /* physical address register (6byte) */
29 #define MAR 0x16U /* multicast address register (8byte) */
30 #define GPCR 0x1eU /* general purpose control register */
31 #define GPR 0x1fU /* general purpose register */
32 #define VID 0x28U /* vendor ID (2byte) */
33 #define PID 0x2aU /* product ID (2byte) */
34 #define CHIPR 0x2cU /* chip revision */
35 #define USBDA 0xf0U /* usb device address register */
36 #define RXC 0xf1U /* received packet counter register */
37 #define TUSC 0xf2U /* tx packet counter/usb status register */
38 #define USBC 0xf4U /* usb control register */
41 * register definitions
43 /* network control register */
44 #define NCR_EXT_PHY 0x80U /* 1: select external phy */
45 #define NCR_WAKEEN 0x40U /* 1: wake up event enable */
46 #define NCR_FCOL 0x10U /* force collision mode for test */
47 #define NCR_FDX 0x08U /* 1: full duplex mode (for external phy) */
49 #define NCR_LBK_SHIFT 1
50 #define NCR_LBK_NORMAL (0U << NCR_LBK_SHIFT)
51 #define NCR_LBK_MAC (1U << NCR_LBK_SHIFT)
52 #define NCR_LBK_PHY_D (2U << NCR_LBK_SHIFT)
53 #define NCR_LBK_PHY_A (3U << NCR_LBK_SHIFT)
54 #define NCR_RST 0x01U /* 1: reset, auto clear */
64 /* network status register */
65 #define NSR_SPEED 0x80U /* 1:10M 0:100M */
66 #define NSR_LINKST 0x40U /* 1:ok 0:fail */
67 #define NSR_WAKEST 0x20U /* 1:enabled */
68 #define NSR_TXFULL 0x10U /* 1:tx fifo full */
69 #define NSR_TX2END 0x08U /* tx packet2 complete status */
70 #define NSR_TX1END 0x04U /* tx packet1 complete status */
71 #define NSR_RXOV 0x02U /* rx fifo overflow */
72 #define NSR_RXRDY 0x01U /* rx packet ready */
85 /* tx control register */
86 #define TCR_TJDIS 0x40U /* tx jitter control */
87 #define TCR_EXCEDM 0x20U /* excessive collision mode */
88 #define TCR_PAD_DIS2 0x10U /* PAD appends disable for pkt2 */
89 #define TCR_CRC_DIS2 0x08U /* CRC appends disable for pkt2 */
90 #define TCR_PAD_DIS1 0x04U /* PAD appends disable for pkt1 */
91 #define TCR_CRC_DIS1 0x02U /* CRC appends disable for pkt1 */
102 /* tx status register (ro) */
103 #define TSR_TJTO 0x80U /* tx jabber time out */
104 #define TSR_LC 0x40U /* loss of carrier */
105 #define TSR_NC 0x20U /* no carrier */
106 #define TSR_LATEC 0x10U /* late collision */
107 #define TSR_COL 0x08U /* late collision */
108 #define TSR_EL 0x04U /* excessive collision */
119 /* rx control register */
120 #define RCR_WTDIS 0x40U /* watch dog timer disable */
121 #define RCR_DIS_LONG 0x20U /* discard longer packets than 1522 */
122 #define RCR_DIS_CRC 0x10U /* discard crc error packets */
123 #define RCR_ALL 0x08U /* pass all multicast */
124 #define RCR_RUNT 0x04U /* pass runt packets */
125 #define RCR_PRMSC 0x02U /* promiscuous mode */
126 #define RCR_RXEN 0x01U /* rx enable */
138 /* rx status register */
139 #define RSR_RF 0x80U /* runt frame */
140 #define RSR_MF 0x40U /* multicast frame */
141 #define RSR_LCS 0x20U /* late collision seen */
142 #define RSR_RWTO 0x10U /* receive watchdog timeout */
143 #define RSR_PLE 0x08U /* physical layer error */
144 #define RSR_AE 0x04U /* alignment error */
145 #define RSR_CE 0x02U /* crc error */
146 #define RSR_FOE 0x01U /* fifo overflow error */
159 /* receive overflow counter register */
160 #define ROCR_RXFU 0x80U /* receive overflow counter overflow */
161 #define ROCR_ROC 0x7fU /* receive overflow counter */
167 /* back pressure threshold register */
168 #define BPTR_BPHW 0xf0U /* high water overflow threshold */
169 #define BPTR_BPHW_SHIFT 4
170 #define BPTR_BPHW_UNIT 1024U
171 #define BPTR_BPHW_DEFAULT (3 << BPTR_BPHW_SHIFT) /* 3k */
172 #define BPTR_JPT 0x0fU /* jam pattern time */
173 #define BPTR_JPT_SHIFT 0
174 #define BPTR_JPT_5us (0U << BPTR_JPT_SHIFT)
175 #define BPTR_JPT_10us (1U << BPTR_JPT_SHIFT)
176 #define BPTR_JPT_15us (2U << BPTR_JPT_SHIFT)
177 #define BPTR_JPT_25us (3U << BPTR_JPT_SHIFT)
178 #define BPTR_JPT_50us (4U << BPTR_JPT_SHIFT)
179 #define BPTR_JPT_100us (5U << BPTR_JPT_SHIFT)
180 #define BPTR_JPT_150us (6U << BPTR_JPT_SHIFT)
181 #define BPTR_JPT_200us (7U << BPTR_JPT_SHIFT)
182 #define BPTR_JPT_250us (8U << BPTR_JPT_SHIFT)
183 #define BPTR_JPT_300us (9U << BPTR_JPT_SHIFT)
184 #define BPTR_JPT_350us (10U << BPTR_JPT_SHIFT)
185 #define BPTR_JPT_400us (11U << BPTR_JPT_SHIFT)
186 #define BPTR_JPT_450us (12U << BPTR_JPT_SHIFT)
187 #define BPTR_JPT_500us (13U << BPTR_JPT_SHIFT)
188 #define BPTR_JPT_550us (14U << BPTR_JPT_SHIFT)
189 #define BPTR_JPT_600us (15U << BPTR_JPT_SHIFT)
191 /* flow control threshold register */
192 #define FCTR_HWOT 0xf0U /* rx fifo high water overflow threshold */
193 #define FCTR_HWOT_SHIFT 4
194 #define FCTR_HWOT_UNIT 1024U
195 #define FCTR_LWOT 0x0fU /* rx fifo low water overflow threshold */
196 #define FCTR_LWOT_SHIFT 0
197 #define FCTR_LWOT_UNIT 1024U
199 /* rx/tx flow control register */
200 #define FCR_TXPO 0x80U /* tx pause packet */
201 #define FCR_TXPF 0x40U /* tx pause packet */
202 #define FCR_TXPEN 0x20U /* tx pause packet */
203 #define FCR_BKPA 0x10U /* back pressure mode */
204 #define FCR_BKPM 0x08U /* back pressure mode */
205 #define FCR_BKPS 0x04U /* rx pause packet current status (r/c) */
206 #define FCR_RXPCS 0x02U /* rx pause packet current status (ro) */
207 #define FCR_FLCE 0x01U /* flow control enbale */
220 /* EEPROM & PHY control register (0x0b) */
221 #define EPCR_REEP 0x20U /* reload eeprom */
222 #define EPCR_WEP 0x10U /* write eeprom enable */
223 #define EPCR_EPOS 0x08U /* select device, 0:eeprom, 1:phy */
224 #define EPCR_ERPRR 0x04U /* read command */
225 #define EPCR_ERPRW 0x02U /* write command */
226 #define EPCR_ERRE 0x01U /* eeprom/phy access in progress (ro) */
237 /* EEPROM & PHY access register (0x0c) */
238 #define EPAR_PHYADR 0xc0U /* phy address, internal phy(1) or external */
239 #define EPAR_PHYADR_SHIFT 6
240 #define EPAR_EROA 0x3fU /* eeprom word addr or phy register addr */
241 #define EPAR_EROA_SHIFT 0
243 /* EEPROM & PHY data register (0x0d(low)-0x0e(hi)) */
245 /* wake up control register (0x0f) */
246 #define WCR_LINKEN 0x20U /* enable link status event */
247 #define WCR_SAMPLEEN 0x10U /* enable sample frame event */
248 #define WCR_MAGICEN 0x08U /* enable magic pkt event */
249 #define WCR_LINKST 0x04U /* link status change occur ro */
250 #define WCR_SAMPLEST 0x02U /* sample frame rx occur ro */
251 #define WCR_MAGICST 0x01U /* magic pkt rx occur ro */
262 /* physical address register (0x10-0x15) */
263 /* multicast address register (0x16-0x1c) */
264 /* general purpose control register (0x1e) */
265 #define GPCR_GEPCTRL 0x7f
266 #define GPCR_OUT(n) (1U << (n))
277 /* general purpose register (0x1f) */
278 #define GPR_GEPIO5 0x20U
279 #define GPR_GEPIO4 0x10U
280 #define GPR_GEPIO3 0x08U
281 #define GPR_GEPIO2 0x04U
282 #define GPR_GEPIO1 0x02U
283 #define GPR_GEPIO0 0x01U
294 /* vendor id register (0x28-0x29) */
295 /* product id register (0x2a-0x2b) */
296 /* chip revision register (0x2c) */
298 /* usb device address register (0xf0) */
299 #define USBDA_USBFA 0x3fU /* usb device address */
300 #define USBDA_USBFA_SHIFT 0
302 /* receive packet counter register (0xf1) */
304 /* transmitpacket counter/usb status register (0xf2) */
305 #define TUSR_RXFAULT 0x80U /* indicate rx has unexpected condition */
306 #define TUSR_SUSFLAG 0x40U /* indicate device has suspended condition */
307 #define TUSR_EP1RDY 0x20U /* ready for read from ep1 pipe */
308 #define TUSR_SRAM 0x18U /* sram size 0:32K, 1:48K, 2:16K, 3:64K */
309 #define TUSR_SRAM_SHIFT 3
310 #define TUSR_SRAM_32K (0U << TUSR_SRAM_SHIFT)
311 #define TUSR_SRAM_48K (1U << TUSR_SRAM_SHIFT)
312 #define TUSR_SRAM_16K (2U << TUSR_SRAM_SHIFT)
313 #define TUSR_SRAM_64K (3U << TUSR_SRAM_SHIFT)
314 #define TUSR_TXC2 0x04U /* two or more packets in tx buffer */
315 #define TUSR_TXC1 0x02U /* one packet in tx buffer */
316 #define TUSR_TXC0 0x01U /* no packet in tx buffer */
327 /* usb control register (0xf4) */
328 #define USBC_EP3ACK 0x20U /* ep3 will alway return 8byte data if NAK=0 */
329 #define USBC_EP3NACK 0x10U /* ep3 will alway return NAK */
330 #define USBC_MEMTST 0x01U
332 /* bulk message format */
333 #define TX_HEADER_SIZE 2
334 #define RX_HEADER_SIZE 3
336 /* interrupt msg format */
347 #endif /* __DM9601_H__ */