17 #ifndef __NET_TULIP_H__ 18 #define __NET_TULIP_H__ 20 #include <linux/kernel.h> 21 #include <linux/types.h> 22 #include <linux/spinlock.h> 23 #include <linux/netdevice.h> 24 #include <linux/timer.h> 25 #include <linux/delay.h> 29 #include <rtnet_port.h> 37 #ifdef CONFIG_TULIP_MMIO 45 struct tulip_chip_table {
55 HAS_MEDIA_TABLE = 0x0002,
56 CSR12_IN_SROM = 0x0004,
57 ALWAYS_CHECK_MII = 0x0008,
59 MC_HASH_ONLY = 0x0020,
60 HAS_PNICNWAY = 0x0080,
62 HAS_INTR_MITIGATION = 0x0100,
65 COMET_MAC_ADDR = 0x0800,
77 DC21142 = 3, DC21143 = 3,
122 enum pci_cfg_driver_reg {
124 CFDD_Sleep = (1 << 31),
125 CFDD_Snooze = (1 << 30),
135 NormalIntr = 0x10000,
136 AbnormalIntr = 0x8000,
141 TxFIFOUnderflow = 0x20,
149 enum tulip_mode_bits {
150 TxThreshold = (1 << 22),
151 FullDuplex = (1 << 9),
153 AcceptBroadcast = 0x0100,
154 AcceptAllMulticast = 0x0080,
155 AcceptAllPhys = 0x0040,
158 RxTx = (TxOn | RxOn),
162 enum tulip_busconfig_bits {
172 struct tulip_rx_desc {
180 struct tulip_tx_desc {
188 enum desc_status_bits {
189 DescOwned = 0x80000000,
190 RxDescFatalErr = 0x8000,
195 enum t21041_csr13_bits {
196 csr13_eng = (0xEF0<<4),
201 csr13_mask_auibnc = (csr13_eng | csr13_aui | csr13_srl),
202 csr13_mask_10bt = (csr13_eng | csr13_srl),
205 enum t21143_csr6_bits {
208 csr6_ign_dest_msb = (1<<26),
236 csr6_om_int_loop = (1<<10),
237 csr6_om_ext_loop = (1<<11),
248 csr6_mask_capture = (csr6_sc | csr6_ca),
249 csr6_mask_defstate = (csr6_mask_capture | csr6_mbo),
250 csr6_mask_hdcap = (csr6_mask_defstate | csr6_hbd | csr6_ps),
251 csr6_mask_hdcaptt = (csr6_mask_hdcap | csr6_trh | csr6_trl),
252 csr6_mask_fullcap = (csr6_mask_hdcaptt | csr6_fd),
253 csr6_mask_fullpromisc = (csr6_pr | csr6_pm),
254 csr6_mask_filters = (csr6_hp | csr6_ho | csr6_if),
255 csr6_mask_100bt = (csr6_scr | csr6_pcs | csr6_hbd),
263 #define TX_RING_SIZE 16 264 #define RX_RING_SIZE 8 266 #define MEDIA_MASK 31 268 #define PKT_BUF_SZ 1536 270 #define TULIP_MIN_CACHE_LINE 8 272 #if defined(__sparc__) || defined(__hppa__) 277 #define TULIP_MAX_CACHE_LINE 16 279 #define TULIP_MAX_CACHE_LINE 32 291 #define DESC_RING_WRAP 0x02000000 294 #define EEPROM_SIZE 128 297 #define RUN_AT(x) (jiffies + (x)) 299 #if defined(__i386__) 300 #define get_u16(ptr) (*(u16 *)(ptr)) 302 #define get_u16(ptr) (((u8*)(ptr))[0] + (((u8*)(ptr))[1]<<8)) 308 unsigned char *leafdata;
317 unsigned has_nonmii:1;
318 unsigned has_reset:6;
321 struct medialeaf mleaf[0];
326 struct mediainfo *next;
338 struct tulip_private {
339 const char *product_name;
340 struct rtnet_device *next_module;
341 struct tulip_rx_desc *rx_ring;
342 struct tulip_tx_desc *tx_ring;
343 dma_addr_t rx_ring_dma;
344 dma_addr_t tx_ring_dma;
346 struct ring_info tx_buffers[TX_RING_SIZE];
348 struct ring_info rx_buffers[RX_RING_SIZE];
353 struct net_device_stats stats;
357 unsigned int cur_rx, cur_tx;
358 unsigned int dirty_rx, dirty_tx;
360 #ifdef CONFIG_NET_HW_FLOWCONTROL 361 #define RX_A_NBF_STOP 0xffffff3f 366 unsigned int full_duplex:1;
367 unsigned int full_duplex_lock:1;
368 unsigned int fake_addr:1;
369 unsigned int default_port:4;
370 unsigned int media2:4;
371 unsigned int medialock:1;
372 unsigned int mediasense:1;
373 unsigned int nway:1, nwayset:1;
376 unsigned char eeprom[EEPROM_SIZE];
377 void (*link_change) (
struct rtnet_device *rtdev,
int csr5);
378 u16 sym_advertise, mii_advertise;
381 signed char phys[4], mii_cnt;
382 struct mediatable *mtable;
385 struct pci_dev *pdev;
389 unsigned long base_addr;
391 rtdm_irq_t irq_handle;
395 struct eeprom_fixup {
405 extern u16 t21142_csr14[];
406 void t21142_start_nway(
struct rtnet_device *rtdev);
407 void t21142_lnk_change(
struct rtnet_device *rtdev,
int csr5);
411 void pnic2_lnk_change(
struct rtnet_device *rtdev,
int csr5);
412 void pnic2_start_nway(
struct rtnet_device *rtdev);
413 void pnic2_lnk_change(
struct rtnet_device *rtdev,
int csr5);
416 void tulip_parse_eeprom(
struct rtnet_device *rtdev);
417 int tulip_read_eeprom(
long ioaddr,
int location,
int addr_len);
420 extern unsigned int tulip_max_interrupt_work;
421 extern int tulip_rx_copybreak;
422 int tulip_interrupt(rtdm_irq_t *irq_handle);
423 int tulip_refill_rx(
struct rtnet_device *rtdev);
426 int tulip_mdio_read(
struct rtnet_device *dev,
int phy_id,
int location);
427 void tulip_mdio_write(
struct rtnet_device *dev,
int phy_id,
int location,
int value);
428 void tulip_select_media(
struct rtnet_device *dev,
int startup);
429 int tulip_check_duplex(
struct rtnet_device *dev);
430 void tulip_find_mii (
struct rtnet_device *dev,
int board_idx);
433 void pnic_do_nway(
struct rtnet_device *rtdev);
434 void pnic_lnk_change(
struct rtnet_device *rtdev,
int csr5);
437 extern int tulip_debug;
438 extern const char *
const medianame[];
439 extern const char tulip_media_cap[];
440 extern struct tulip_chip_table tulip_tbl[];
441 extern u8 t21040_csr13[];
442 extern u16 t21041_csr13[];
443 extern u16 t21041_csr14[];
444 extern u16 t21041_csr15[];
453 #define inb(addr) readb((void*)(addr)) 454 #define inw(addr) readw((void*)(addr)) 455 #define inl(addr) readl((void*)(addr)) 456 #define outb(val,addr) writeb((val), (void*)(addr)) 457 #define outw(val,addr) writew((val), (void*)(addr)) 458 #define outl(val,addr) writel((val), (void*)(addr)) 463 static inline void tulip_start_rxtx(
struct tulip_private *tp)
465 long ioaddr = tp->base_addr;
466 outl(tp->csr6 | RxTx, ioaddr + CSR6);
468 (void) inl(ioaddr + CSR6);
471 static inline void tulip_stop_rxtx(
struct tulip_private *tp)
473 long ioaddr = tp->base_addr;
474 u32 csr6 = inl(ioaddr + CSR6);
477 outl(csr6 & ~RxTx, ioaddr + CSR6);
479 (void) inl(ioaddr + CSR6);
483 static inline void tulip_restart_rxtx(
struct tulip_private *tp)
487 tulip_start_rxtx(tp);
void rtdm_task_busy_sleep(nanosecs_rel_t delay)
Busy-wait a specified amount of time
Definition: drvlib.c:502
ipipe_spinlock_t rtdm_lock_t
Lock variable.
Definition: driver.h:551