WIP FPC-III support
[linux/fpc-iii.git] / drivers / net / ethernet / dec / tulip / tulip.h
blob815907259048b696ef1afca02dfa83ef35d2a7fb
1 /*
2 drivers/net/ethernet/dec/tulip/tulip.h
4 Copyright 2000,2001 The Linux Kernel Team
5 Written/copyright 1994-2001 by Donald Becker.
7 This software may be used and distributed according to the terms
8 of the GNU General Public License, incorporated herein by reference.
10 Please submit bugs to http://bugzilla.kernel.org/ .
13 #ifndef __NET_TULIP_H__
14 #define __NET_TULIP_H__
16 #include <linux/kernel.h>
17 #include <linux/types.h>
18 #include <linux/spinlock.h>
19 #include <linux/netdevice.h>
20 #include <linux/ethtool.h>
21 #include <linux/timer.h>
22 #include <linux/delay.h>
23 #include <linux/pci.h>
24 #include <asm/io.h>
25 #include <asm/irq.h>
26 #include <asm/unaligned.h>
30 /* undefine, or define to various debugging levels (>4 == obscene levels) */
31 #define TULIP_DEBUG 1
33 #ifdef CONFIG_TULIP_MMIO
34 #define TULIP_BAR 1 /* CBMA */
35 #else
36 #define TULIP_BAR 0 /* CBIO */
37 #endif
41 struct tulip_chip_table {
42 char *chip_name;
43 int io_size;
44 int valid_intrs; /* CSR7 interrupt enable settings */
45 int flags;
46 void (*media_timer) (struct timer_list *);
47 work_func_t media_task;
51 enum tbl_flag {
52 HAS_MII = 0x00001,
53 HAS_MEDIA_TABLE = 0x00002,
54 CSR12_IN_SROM = 0x00004,
55 ALWAYS_CHECK_MII = 0x00008,
56 HAS_ACPI = 0x00010,
57 MC_HASH_ONLY = 0x00020, /* Hash-only multicast filter. */
58 HAS_PNICNWAY = 0x00080,
59 HAS_NWAY = 0x00040, /* Uses internal NWay xcvr. */
60 HAS_INTR_MITIGATION = 0x00100,
61 IS_ASIX = 0x00200,
62 HAS_8023X = 0x00400,
63 COMET_MAC_ADDR = 0x00800,
64 HAS_PCI_MWI = 0x01000,
65 HAS_PHY_IRQ = 0x02000,
66 HAS_SWAPPED_SEEPROM = 0x04000,
67 NEEDS_FAKE_MEDIA_TABLE = 0x08000,
68 COMET_PM = 0x10000,
72 /* chip types. careful! order is VERY IMPORTANT here, as these
73 * are used throughout the driver as indices into arrays */
74 /* Note 21142 == 21143. */
75 enum chips {
76 DC21040 = 0,
77 DC21041 = 1,
78 DC21140 = 2,
79 DC21142 = 3, DC21143 = 3,
80 LC82C168,
81 MX98713,
82 MX98715,
83 MX98725,
84 AX88140,
85 PNIC2,
86 COMET,
87 COMPEX9881,
88 I21145,
89 DM910X,
90 CONEXANT,
94 enum MediaIs {
95 MediaIsFD = 1,
96 MediaAlwaysFD = 2,
97 MediaIsMII = 4,
98 MediaIsFx = 8,
99 MediaIs100 = 16
103 /* Offsets to the Command and Status Registers, "CSRs". All accesses
104 must be longword instructions and quadword aligned. */
105 enum tulip_offsets {
106 CSR0 = 0,
107 CSR1 = 0x08,
108 CSR2 = 0x10,
109 CSR3 = 0x18,
110 CSR4 = 0x20,
111 CSR5 = 0x28,
112 CSR6 = 0x30,
113 CSR7 = 0x38,
114 CSR8 = 0x40,
115 CSR9 = 0x48,
116 CSR10 = 0x50,
117 CSR11 = 0x58,
118 CSR12 = 0x60,
119 CSR13 = 0x68,
120 CSR14 = 0x70,
121 CSR15 = 0x78,
122 CSR18 = 0x88,
123 CSR19 = 0x8c,
124 CSR20 = 0x90,
125 CSR27 = 0xAC,
126 CSR28 = 0xB0,
129 /* register offset and bits for CFDD PCI config reg */
130 enum pci_cfg_driver_reg {
131 CFDD = 0x40,
132 CFDD_Sleep = (1 << 31),
133 CFDD_Snooze = (1 << 30),
136 #define RxPollInt (RxIntr|RxNoBuf|RxDied|RxJabber)
138 /* The bits in the CSR5 status registers, mostly interrupt sources. */
139 enum status_bits {
140 TimerInt = 0x800,
141 SystemError = 0x2000,
142 TPLnkFail = 0x1000,
143 TPLnkPass = 0x10,
144 NormalIntr = 0x10000,
145 AbnormalIntr = 0x8000,
146 RxJabber = 0x200,
147 RxDied = 0x100,
148 RxNoBuf = 0x80,
149 RxIntr = 0x40,
150 TxFIFOUnderflow = 0x20,
151 RxErrIntr = 0x10,
152 TxJabber = 0x08,
153 TxNoBuf = 0x04,
154 TxDied = 0x02,
155 TxIntr = 0x01,
158 /* bit mask for CSR5 TX/RX process state */
159 #define CSR5_TS 0x00700000
160 #define CSR5_RS 0x000e0000
162 enum tulip_mode_bits {
163 TxThreshold = (1 << 22),
164 FullDuplex = (1 << 9),
165 TxOn = 0x2000,
166 AcceptBroadcast = 0x0100,
167 AcceptAllMulticast = 0x0080,
168 AcceptAllPhys = 0x0040,
169 AcceptRunt = 0x0008,
170 RxOn = 0x0002,
171 RxTx = (TxOn | RxOn),
175 enum tulip_busconfig_bits {
176 MWI = (1 << 24),
177 MRL = (1 << 23),
178 MRM = (1 << 21),
179 CALShift = 14,
180 BurstLenShift = 8,
184 /* The Tulip Rx and Tx buffer descriptors. */
185 struct tulip_rx_desc {
186 __le32 status;
187 __le32 length;
188 __le32 buffer1;
189 __le32 buffer2;
193 struct tulip_tx_desc {
194 __le32 status;
195 __le32 length;
196 __le32 buffer1;
197 __le32 buffer2; /* We use only buffer 1. */
201 enum desc_status_bits {
202 DescOwned = 0x80000000,
203 DescWholePkt = 0x60000000,
204 DescEndPkt = 0x40000000,
205 DescStartPkt = 0x20000000,
206 DescEndRing = 0x02000000,
207 DescUseLink = 0x01000000,
210 * Error summary flag is logical or of 'CRC Error', 'Collision Seen',
211 * 'Frame Too Long', 'Runt' and 'Descriptor Error' flags generated
212 * within tulip chip.
214 RxDescErrorSummary = 0x8000,
215 RxDescCRCError = 0x0002,
216 RxDescCollisionSeen = 0x0040,
219 * 'Frame Too Long' flag is set if packet length including CRC exceeds
220 * 1518. However, a full sized VLAN tagged frame is 1522 bytes
221 * including CRC.
223 * The tulip chip does not block oversized frames, and if this flag is
224 * set on a receive descriptor it does not indicate the frame has been
225 * truncated. The receive descriptor also includes the actual length.
226 * Therefore we can safety ignore this flag and check the length
227 * ourselves.
229 RxDescFrameTooLong = 0x0080,
230 RxDescRunt = 0x0800,
231 RxDescDescErr = 0x4000,
232 RxWholePkt = 0x00000300,
234 * Top three bits of 14 bit frame length (status bits 27-29) should
235 * never be set as that would make frame over 2047 bytes. The Receive
236 * Watchdog flag (bit 4) may indicate the length is over 2048 and the
237 * length field is invalid.
239 RxLengthOver2047 = 0x38000010
243 enum t21143_csr6_bits {
244 csr6_sc = (1<<31),
245 csr6_ra = (1<<30),
246 csr6_ign_dest_msb = (1<<26),
247 csr6_mbo = (1<<25),
248 csr6_scr = (1<<24), /* scramble mode flag: can't be set */
249 csr6_pcs = (1<<23), /* Enables PCS functions (symbol mode requires csr6_ps be set) default is set */
250 csr6_ttm = (1<<22), /* Transmit Threshold Mode, set for 10baseT, 0 for 100BaseTX */
251 csr6_sf = (1<<21), /* Store and forward. If set ignores TR bits */
252 csr6_hbd = (1<<19), /* Heart beat disable. Disables SQE function in 10baseT */
253 csr6_ps = (1<<18), /* Port Select. 0 (defualt) = 10baseT, 1 = 100baseTX: can't be set */
254 csr6_ca = (1<<17), /* Collision Offset Enable. If set uses special algorithm in low collision situations */
255 csr6_trh = (1<<15), /* Transmit Threshold high bit */
256 csr6_trl = (1<<14), /* Transmit Threshold low bit */
258 /***************************************************************
259 * This table shows transmit threshold values based on media *
260 * and these two registers (from PNIC1 & 2 docs) Note: this is *
261 * all meaningless if sf is set. *
262 ***************************************************************/
264 /***********************************
265 * (trh,trl) * 100BaseTX * 10BaseT *
266 ***********************************
267 * (0,0) * 128 * 72 *
268 * (0,1) * 256 * 96 *
269 * (1,0) * 512 * 128 *
270 * (1,1) * 1024 * 160 *
271 ***********************************/
273 csr6_fc = (1<<12), /* Forces a collision in next transmission (for testing in loopback mode) */
274 csr6_om_int_loop = (1<<10), /* internal (FIFO) loopback flag */
275 csr6_om_ext_loop = (1<<11), /* external (PMD) loopback flag */
276 /* set both and you get (PHY) loopback */
277 csr6_fd = (1<<9), /* Full duplex mode, disables hearbeat, no loopback */
278 csr6_pm = (1<<7), /* Pass All Multicast */
279 csr6_pr = (1<<6), /* Promiscuous mode */
280 csr6_sb = (1<<5), /* Start(1)/Stop(0) backoff counter */
281 csr6_if = (1<<4), /* Inverse Filtering, rejects only addresses in address table: can't be set */
282 csr6_pb = (1<<3), /* Pass Bad Frames, (1) causes even bad frames to be passed on */
283 csr6_ho = (1<<2), /* Hash-only filtering mode: can't be set */
284 csr6_hp = (1<<0), /* Hash/Perfect Receive Filtering Mode: can't be set */
286 csr6_mask_capture = (csr6_sc | csr6_ca),
287 csr6_mask_defstate = (csr6_mask_capture | csr6_mbo),
288 csr6_mask_hdcap = (csr6_mask_defstate | csr6_hbd | csr6_ps),
289 csr6_mask_hdcaptt = (csr6_mask_hdcap | csr6_trh | csr6_trl),
290 csr6_mask_fullcap = (csr6_mask_hdcaptt | csr6_fd),
291 csr6_mask_fullpromisc = (csr6_pr | csr6_pm),
292 csr6_mask_filters = (csr6_hp | csr6_ho | csr6_if),
293 csr6_mask_100bt = (csr6_scr | csr6_pcs | csr6_hbd),
296 enum tulip_comet_csr13_bits {
297 /* The LINKOFFE and LINKONE work in conjunction with LSCE, i.e. they
298 * determine which link status transition wakes up if LSCE is
299 * enabled */
300 comet_csr13_linkoffe = (1 << 17),
301 comet_csr13_linkone = (1 << 16),
302 comet_csr13_wfre = (1 << 10),
303 comet_csr13_mpre = (1 << 9),
304 comet_csr13_lsce = (1 << 8),
305 comet_csr13_wfr = (1 << 2),
306 comet_csr13_mpr = (1 << 1),
307 comet_csr13_lsc = (1 << 0),
310 enum tulip_comet_csr18_bits {
311 comet_csr18_pmes_sticky = (1 << 24),
312 comet_csr18_pm_mode = (1 << 19),
313 comet_csr18_apm_mode = (1 << 18),
314 comet_csr18_d3a = (1 << 7)
317 enum tulip_comet_csr20_bits {
318 comet_csr20_pmes = (1 << 15),
321 /* Keep the ring sizes a power of two for efficiency.
322 Making the Tx ring too large decreases the effectiveness of channel
323 bonding and packet priority.
324 There are no ill effects from too-large receive rings. */
326 #define TX_RING_SIZE 32
327 #define RX_RING_SIZE 128
328 #define MEDIA_MASK 31
330 /* The receiver on the DC21143 rev 65 can fail to close the last
331 * receive descriptor in certain circumstances (see errata) when
332 * using MWI. This can only occur if the receive buffer ends on
333 * a cache line boundary, so the "+ 4" below ensures it doesn't.
335 #define PKT_BUF_SZ (1536 + 4) /* Size of each temporary Rx buffer. */
337 #define TULIP_MIN_CACHE_LINE 8 /* in units of 32-bit words */
339 #if defined(__sparc__) || defined(__hppa__)
340 /* The UltraSparc PCI controllers will disconnect at every 64-byte
341 * crossing anyways so it makes no sense to tell Tulip to burst
342 * any more than that.
344 #define TULIP_MAX_CACHE_LINE 16 /* in units of 32-bit words */
345 #else
346 #define TULIP_MAX_CACHE_LINE 32 /* in units of 32-bit words */
347 #endif
350 /* Ring-wrap flag in length field, use for last ring entry.
351 0x01000000 means chain on buffer2 address,
352 0x02000000 means use the ring start address in CSR2/3.
353 Note: Some work-alike chips do not function correctly in chained mode.
354 The ASIX chip works only in chained mode.
355 Thus we indicates ring mode, but always write the 'next' field for
356 chained mode as well.
358 #define DESC_RING_WRAP 0x02000000
361 #define EEPROM_SIZE 512 /* 2 << EEPROM_ADDRLEN */
364 #define RUN_AT(x) (jiffies + (x))
366 #define get_u16(ptr) get_unaligned_le16((ptr))
368 struct medialeaf {
369 u8 type;
370 u8 media;
371 unsigned char *leafdata;
375 struct mediatable {
376 u16 defaultmedia;
377 u8 leafcount;
378 u8 csr12dir; /* General purpose pin directions. */
379 unsigned has_mii:1;
380 unsigned has_nonmii:1;
381 unsigned has_reset:6;
382 u32 csr15dir;
383 u32 csr15val; /* 21143 NWay setting. */
384 struct medialeaf mleaf[];
388 struct mediainfo {
389 struct mediainfo *next;
390 int info_type;
391 int index;
392 unsigned char *info;
395 struct ring_info {
396 struct sk_buff *skb;
397 dma_addr_t mapping;
401 struct tulip_private {
402 const char *product_name;
403 struct net_device *next_module;
404 struct tulip_rx_desc *rx_ring;
405 struct tulip_tx_desc *tx_ring;
406 dma_addr_t rx_ring_dma;
407 dma_addr_t tx_ring_dma;
408 /* The saved address of a sent-in-place packet/buffer, for skfree(). */
409 struct ring_info tx_buffers[TX_RING_SIZE];
410 /* The addresses of receive-in-place skbuffs. */
411 struct ring_info rx_buffers[RX_RING_SIZE];
412 u16 setup_frame[96]; /* Pseudo-Tx frame to init address table. */
413 int chip_id;
414 int revision;
415 int flags;
416 struct napi_struct napi;
417 struct timer_list timer; /* Media selection timer. */
418 struct timer_list oom_timer; /* Out of memory timer. */
419 u32 mc_filter[2];
420 spinlock_t lock;
421 spinlock_t mii_lock;
422 unsigned int cur_rx, cur_tx; /* The next free ring entry */
423 unsigned int dirty_rx, dirty_tx; /* The ring entries to be free()ed. */
425 #ifdef CONFIG_TULIP_NAPI_HW_MITIGATION
426 int mit_on;
427 #endif
428 unsigned int full_duplex:1; /* Full-duplex operation requested. */
429 unsigned int full_duplex_lock:1;
430 unsigned int fake_addr:1; /* Multiport board faked address. */
431 unsigned int default_port:4; /* Last dev->if_port value. */
432 unsigned int media2:4; /* Secondary monitored media port. */
433 unsigned int medialock:1; /* Don't sense media type. */
434 unsigned int mediasense:1; /* Media sensing in progress. */
435 unsigned int nway:1, nwayset:1; /* 21143 internal NWay. */
436 unsigned int timeout_recovery:1;
437 unsigned int csr0; /* CSR0 setting. */
438 unsigned int csr6; /* Current CSR6 control settings. */
439 unsigned char eeprom[EEPROM_SIZE]; /* Serial EEPROM contents. */
440 void (*link_change) (struct net_device * dev, int csr5);
441 struct ethtool_wolinfo wolinfo; /* WOL settings */
442 u16 sym_advertise, mii_advertise; /* NWay capabilities advertised. */
443 u16 lpar; /* 21143 Link partner ability. */
444 u16 advertising[4];
445 signed char phys[4], mii_cnt; /* MII device addresses. */
446 struct mediatable *mtable;
447 int cur_index; /* Current media index. */
448 int saved_if_port;
449 struct pci_dev *pdev;
450 int ttimer;
451 int susp_rx;
452 unsigned long nir;
453 void __iomem *base_addr;
454 int csr12_shadow;
455 int pad0; /* Used for 8-byte alignment */
456 struct work_struct media_work;
457 struct net_device *dev;
461 struct eeprom_fixup {
462 char *name;
463 unsigned char addr0;
464 unsigned char addr1;
465 unsigned char addr2;
466 u16 newtable[32]; /* Max length below. */
470 /* 21142.c */
471 extern u16 t21142_csr14[];
472 void t21142_media_task(struct work_struct *work);
473 void t21142_start_nway(struct net_device *dev);
474 void t21142_lnk_change(struct net_device *dev, int csr5);
477 /* PNIC2.c */
478 void pnic2_lnk_change(struct net_device *dev, int csr5);
479 void pnic2_timer(struct timer_list *t);
480 void pnic2_start_nway(struct net_device *dev);
481 void pnic2_lnk_change(struct net_device *dev, int csr5);
483 /* eeprom.c */
484 void tulip_parse_eeprom(struct net_device *dev);
485 int tulip_read_eeprom(struct net_device *dev, int location, int addr_len);
487 /* interrupt.c */
488 extern unsigned int tulip_max_interrupt_work;
489 extern int tulip_rx_copybreak;
490 irqreturn_t tulip_interrupt(int irq, void *dev_instance);
491 int tulip_refill_rx(struct net_device *dev);
492 #ifdef CONFIG_TULIP_NAPI
493 int tulip_poll(struct napi_struct *napi, int budget);
494 #endif
497 /* media.c */
498 int tulip_mdio_read(struct net_device *dev, int phy_id, int location);
499 void tulip_mdio_write(struct net_device *dev, int phy_id, int location, int value);
500 void tulip_select_media(struct net_device *dev, int startup);
501 int tulip_check_duplex(struct net_device *dev);
502 void tulip_find_mii (struct net_device *dev, int board_idx);
504 /* pnic.c */
505 void pnic_do_nway(struct net_device *dev);
506 void pnic_lnk_change(struct net_device *dev, int csr5);
507 void pnic_timer(struct timer_list *t);
509 /* timer.c */
510 void tulip_media_task(struct work_struct *work);
511 void mxic_timer(struct timer_list *t);
512 void comet_timer(struct timer_list *t);
514 /* tulip_core.c */
515 extern int tulip_debug;
516 extern const char * const medianame[];
517 extern const char tulip_media_cap[];
518 extern const struct tulip_chip_table tulip_tbl[];
519 void oom_timer(struct timer_list *t);
520 extern u8 t21040_csr13[];
522 static inline void tulip_start_rxtx(struct tulip_private *tp)
524 void __iomem *ioaddr = tp->base_addr;
525 iowrite32(tp->csr6 | RxTx, ioaddr + CSR6);
526 barrier();
527 (void) ioread32(ioaddr + CSR6); /* mmio sync */
530 static inline void tulip_stop_rxtx(struct tulip_private *tp)
532 void __iomem *ioaddr = tp->base_addr;
533 u32 csr6 = ioread32(ioaddr + CSR6);
535 if (csr6 & RxTx) {
536 unsigned i=1300/10;
537 iowrite32(csr6 & ~RxTx, ioaddr + CSR6);
538 barrier();
539 /* wait until in-flight frame completes.
540 * Max time @ 10BT: 1500*8b/10Mbps == 1200us (+ 100us margin)
541 * Typically expect this loop to end in < 50 us on 100BT.
543 while (--i && (ioread32(ioaddr + CSR5) & (CSR5_TS|CSR5_RS)))
544 udelay(10);
546 if (!i)
547 netdev_dbg(tp->dev, "tulip_stop_rxtx() failed (CSR5 0x%x CSR6 0x%x)\n",
548 ioread32(ioaddr + CSR5),
549 ioread32(ioaddr + CSR6));
553 static inline void tulip_restart_rxtx(struct tulip_private *tp)
555 tulip_stop_rxtx(tp);
556 udelay(5);
557 tulip_start_rxtx(tp);
560 static inline void tulip_tx_timeout_complete(struct tulip_private *tp, void __iomem *ioaddr)
562 /* Stop and restart the chip's Tx processes. */
563 tulip_restart_rxtx(tp);
564 /* Trigger an immediate transmit demand. */
565 iowrite32(0, ioaddr + CSR1);
567 tp->dev->stats.tx_errors++;
570 #endif /* __NET_TULIP_H__ */