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
45struct 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,
122enum pci_cfg_driver_reg {
124 CFDD_Sleep = (1 << 31),
125 CFDD_Snooze = (1 << 30),
135 NormalIntr = 0x10000,
136 AbnormalIntr = 0x8000,
141 TxFIFOUnderflow = 0x20,
149enum tulip_mode_bits {
150 TxThreshold = (1 << 22),
151 FullDuplex = (1 << 9),
153 AcceptBroadcast = 0x0100,
154 AcceptAllMulticast = 0x0080,
155 AcceptAllPhys = 0x0040,
158 RxTx = (TxOn | RxOn),
162enum tulip_busconfig_bits {
172struct tulip_rx_desc {
180struct tulip_tx_desc {
188enum desc_status_bits {
189 DescOwned = 0x80000000,
190 RxDescFatalErr = 0x8000,
195enum 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),
205enum 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
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))
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;
338struct 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;
405extern u16 t21142_csr14[];
406void t21142_start_nway(
struct rtnet_device *rtdev);
407void t21142_lnk_change(
struct rtnet_device *rtdev,
int csr5);
411void pnic2_lnk_change(
struct rtnet_device *rtdev,
int csr5);
412void pnic2_start_nway(
struct rtnet_device *rtdev);
413void pnic2_lnk_change(
struct rtnet_device *rtdev,
int csr5);
416void tulip_parse_eeprom(
struct rtnet_device *rtdev);
417int tulip_read_eeprom(
long ioaddr,
int location,
int addr_len);
420extern unsigned int tulip_max_interrupt_work;
421extern int tulip_rx_copybreak;
422int tulip_interrupt(rtdm_irq_t *irq_handle);
423int tulip_refill_rx(
struct rtnet_device *rtdev);
426int tulip_mdio_read(
struct rtnet_device *dev,
int phy_id,
int location);
427void tulip_mdio_write(
struct rtnet_device *dev,
int phy_id,
int location,
int value);
428void tulip_select_media(
struct rtnet_device *dev,
int startup);
429int tulip_check_duplex(
struct rtnet_device *dev);
430void tulip_find_mii (
struct rtnet_device *dev,
int board_idx);
433void pnic_do_nway(
struct rtnet_device *rtdev);
434void pnic_lnk_change(
struct rtnet_device *rtdev,
int csr5);
437extern int tulip_debug;
438extern const char *
const medianame[];
439extern const char tulip_media_cap[];
440extern struct tulip_chip_table tulip_tbl[];
441extern u8 t21040_csr13[];
442extern u16 t21041_csr13[];
443extern u16 t21041_csr14[];
444extern 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))
463static 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);
471static 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);
483static inline void tulip_restart_rxtx(
struct tulip_private *tp)
487 tulip_start_rxtx(tp);
pipeline_spinlock_t rtdm_lock_t
Lock variable.
Definition driver.h:552
void rtdm_task_busy_sleep(nanosecs_rel_t delay)
Busy-wait a specified amount of time.
Definition drvlib.c:488