diff options
Diffstat (limited to 'drivers/net/tulip/tulip.h')
-rw-r--r-- | drivers/net/tulip/tulip.h | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/drivers/net/tulip/tulip.h b/drivers/net/tulip/tulip.h index 3bcfbf3d23e..25668ddb1f7 100644 --- a/drivers/net/tulip/tulip.h +++ b/drivers/net/tulip/tulip.h | |||
@@ -30,11 +30,10 @@ | |||
30 | /* undefine, or define to various debugging levels (>4 == obscene levels) */ | 30 | /* undefine, or define to various debugging levels (>4 == obscene levels) */ |
31 | #define TULIP_DEBUG 1 | 31 | #define TULIP_DEBUG 1 |
32 | 32 | ||
33 | /* undefine USE_IO_OPS for MMIO, define for PIO */ | ||
34 | #ifdef CONFIG_TULIP_MMIO | 33 | #ifdef CONFIG_TULIP_MMIO |
35 | # undef USE_IO_OPS | 34 | #define TULIP_BAR 1 /* CBMA */ |
36 | #else | 35 | #else |
37 | # define USE_IO_OPS 1 | 36 | #define TULIP_BAR 0 /* CBIO */ |
38 | #endif | 37 | #endif |
39 | 38 | ||
40 | 39 | ||
@@ -44,7 +43,8 @@ struct tulip_chip_table { | |||
44 | int io_size; | 43 | int io_size; |
45 | int valid_intrs; /* CSR7 interrupt enable settings */ | 44 | int valid_intrs; /* CSR7 interrupt enable settings */ |
46 | int flags; | 45 | int flags; |
47 | void (*media_timer) (unsigned long data); | 46 | void (*media_timer) (unsigned long); |
47 | void (*media_task) (void *); | ||
48 | }; | 48 | }; |
49 | 49 | ||
50 | 50 | ||
@@ -142,6 +142,7 @@ enum status_bits { | |||
142 | RxNoBuf = 0x80, | 142 | RxNoBuf = 0x80, |
143 | RxIntr = 0x40, | 143 | RxIntr = 0x40, |
144 | TxFIFOUnderflow = 0x20, | 144 | TxFIFOUnderflow = 0x20, |
145 | RxErrIntr = 0x10, | ||
145 | TxJabber = 0x08, | 146 | TxJabber = 0x08, |
146 | TxNoBuf = 0x04, | 147 | TxNoBuf = 0x04, |
147 | TxDied = 0x02, | 148 | TxDied = 0x02, |
@@ -192,9 +193,14 @@ struct tulip_tx_desc { | |||
192 | 193 | ||
193 | 194 | ||
194 | enum desc_status_bits { | 195 | enum desc_status_bits { |
195 | DescOwned = 0x80000000, | 196 | DescOwned = 0x80000000, |
196 | RxDescFatalErr = 0x8000, | 197 | DescWholePkt = 0x60000000, |
197 | RxWholePkt = 0x0300, | 198 | DescEndPkt = 0x40000000, |
199 | DescStartPkt = 0x20000000, | ||
200 | DescEndRing = 0x02000000, | ||
201 | DescUseLink = 0x01000000, | ||
202 | RxDescFatalErr = 0x008000, | ||
203 | RxWholePkt = 0x00000300, | ||
198 | }; | 204 | }; |
199 | 205 | ||
200 | 206 | ||
@@ -366,6 +372,7 @@ struct tulip_private { | |||
366 | unsigned int medialock:1; /* Don't sense media type. */ | 372 | unsigned int medialock:1; /* Don't sense media type. */ |
367 | unsigned int mediasense:1; /* Media sensing in progress. */ | 373 | unsigned int mediasense:1; /* Media sensing in progress. */ |
368 | unsigned int nway:1, nwayset:1; /* 21143 internal NWay. */ | 374 | unsigned int nway:1, nwayset:1; /* 21143 internal NWay. */ |
375 | unsigned int timeout_recovery:1; | ||
369 | unsigned int csr0; /* CSR0 setting. */ | 376 | unsigned int csr0; /* CSR0 setting. */ |
370 | unsigned int csr6; /* Current CSR6 control settings. */ | 377 | unsigned int csr6; /* Current CSR6 control settings. */ |
371 | unsigned char eeprom[EEPROM_SIZE]; /* Serial EEPROM contents. */ | 378 | unsigned char eeprom[EEPROM_SIZE]; /* Serial EEPROM contents. */ |
@@ -384,6 +391,7 @@ struct tulip_private { | |||
384 | void __iomem *base_addr; | 391 | void __iomem *base_addr; |
385 | int csr12_shadow; | 392 | int csr12_shadow; |
386 | int pad0; /* Used for 8-byte alignment */ | 393 | int pad0; /* Used for 8-byte alignment */ |
394 | struct work_struct media_work; | ||
387 | }; | 395 | }; |
388 | 396 | ||
389 | 397 | ||
@@ -398,7 +406,7 @@ struct eeprom_fixup { | |||
398 | 406 | ||
399 | /* 21142.c */ | 407 | /* 21142.c */ |
400 | extern u16 t21142_csr14[]; | 408 | extern u16 t21142_csr14[]; |
401 | void t21142_timer(unsigned long data); | 409 | void t21142_media_task(void *data); |
402 | void t21142_start_nway(struct net_device *dev); | 410 | void t21142_start_nway(struct net_device *dev); |
403 | void t21142_lnk_change(struct net_device *dev, int csr5); | 411 | void t21142_lnk_change(struct net_device *dev, int csr5); |
404 | 412 | ||
@@ -436,7 +444,7 @@ void pnic_lnk_change(struct net_device *dev, int csr5); | |||
436 | void pnic_timer(unsigned long data); | 444 | void pnic_timer(unsigned long data); |
437 | 445 | ||
438 | /* timer.c */ | 446 | /* timer.c */ |
439 | void tulip_timer(unsigned long data); | 447 | void tulip_media_task(void *data); |
440 | void mxic_timer(unsigned long data); | 448 | void mxic_timer(unsigned long data); |
441 | void comet_timer(unsigned long data); | 449 | void comet_timer(unsigned long data); |
442 | 450 | ||
@@ -485,4 +493,14 @@ static inline void tulip_restart_rxtx(struct tulip_private *tp) | |||
485 | tulip_start_rxtx(tp); | 493 | tulip_start_rxtx(tp); |
486 | } | 494 | } |
487 | 495 | ||
496 | static inline void tulip_tx_timeout_complete(struct tulip_private *tp, void __iomem *ioaddr) | ||
497 | { | ||
498 | /* Stop and restart the chip's Tx processes. */ | ||
499 | tulip_restart_rxtx(tp); | ||
500 | /* Trigger an immediate transmit demand. */ | ||
501 | iowrite32(0, ioaddr + CSR1); | ||
502 | |||
503 | tp->stats.tx_errors++; | ||
504 | } | ||
505 | |||
488 | #endif /* __NET_TULIP_H__ */ | 506 | #endif /* __NET_TULIP_H__ */ |