5 FILE_LICENCE ( GPL2_OR_LATER
);
7 #define CONGENB 0 /* Enable congestion control in the DP83840. */
8 #define TX_FIFO 8 /* Tx FIFO threshold in 4 byte units, 0-15 */
9 #define RX_FIFO 8 /* Rx FIFO threshold, default 32 bytes. */
10 #define TX_DMA_COUNT 0 /* Tx DMA burst length, 0-127, default 0. */
11 #define RX_DMA_COUNT 0 /* Rx DMA length, 0 means no preemption. */
12 #define CU_CMD_TIMEOUT 1000 /* CU command accept timeout in microseconds */
13 #define LINK_CHECK_PERIOD 1000 /* # of poll() calls between link checks */
15 #define RFD_PACKET_LEN 1518
16 #define RFD_IOB_LEN 1536
17 #define RFD_HEADER_LEN 16
18 #define CB_ALIGN 2 /* Alignment of command blocks */
22 #define RX_RING_BYTES ( RFD_COUNT * sizeof ( struct ifec_rfd ) )
23 #define TX_RING_BYTES ( TCB_COUNT * sizeof ( struct ifec_tcb ) )
25 /* some EEPROM addresses */
26 #define EEPROM_ADDR_MAC_0 0
27 #define EEPROM_ADDR_MDIO_REGISTER 6
29 /* Control / Status Register byte offsets - SDM Table 11 */
31 SCBStatus
=0, SCBCmd
=2, SCBPointer
= 4,
32 CSRPort
=8, CSRFlash
=12, CSREeprom
= 14,
33 CSRCtrlMDI
=16, CSREarlyRx
=20
36 /* System Control Block Command Word - SDM Table 12 */
38 /* SCB Interrupt Masks - SDM Table 14 */
39 SCBMaskCmdDone
=0x8000, SCBMaskRxDone
=0x4000, SCBMaskCmdIdle
=0x2000,
40 SCBMaskRxSuspend
=0x1000, SCBMaskEarlyRx
=0x0800, SCBMaskFlowCtl
=0x0400,
41 SCBTriggerIntr
=0x0200, SCBMaskAll
=0x0100,
42 /* SCB Control Commands - SDM Table 14-16 */
43 CUStart
=0x0010, CUResume
=0x0020, CUStatsAddr
=0x0040,
44 CUShowStats
=0x0050, CUCmdBase
=0x0060, CUDumpStats
=0x0070,
45 RUStart
=0x0001, RUResume
=0x0002, RUAbort
=0x0004,
46 RUAddrLoad
=0x0006, RUResumeNoResources
=0x0007
50 PortReset
=0, PortSelfTest
=1, PortPartialReset
=2, PortDump
=3
53 /* Action Commands - SDM Table 14,37 */
55 CmdNOp
= 0, CmdIASetup
= 1, CmdConfigure
= 2,
56 CmdMulticastList
= 3, CmdTx
= 4, CmdTDR
= 5,
57 CmdDump
= 6, CmdDiagnose
= 7,
58 /* And some extra flags: */
59 CmdEndOfList
= 0x8000,
60 CmdSuspend
= 0x4000, CmdIntr
= 0x2000, CmdTxFlex
= 0x0008
64 TCB_C
=0x8000, TCB_OK
=0x2000, TCB_U
=0x1000
68 /* Status Word Bits */
69 RFDRxCol
=0x0001, RFDIAMatch
=0x0002, RFDNoMatch
=0x0004,
70 RFDReserved3
=0x0008, RFDRxErr
=0x0010, RFDEthType
=0x0020,
71 RFDReserved6
=0x0040, RFDShort
=0x0080, RFDDMAOverrun
=0x0100,
72 RFDNoBufs
=0x0200, RFDCRCAlign
=0x0400, RFDCRCError
=0x0800,
73 RFDReserved12
=0x1000, RFD_OK
=0x2000, RFDComplete
=0x8000,
74 /* Command Word Bits */
75 //RFD_SF=0x0008, RFDSuspend=0x4000, RFDEndOfList=0x8000,
81 NonSuchPhy
=0, I82553AB
, I82553C
,
82 I82503
, DP83840
, S80C240
,
83 S80C24
, PhyUndefined
, DP83840A
=10
86 /* Serial EEPROM section.
87 A "bit" grungy, but we work our way through bit-by-bit :->. */
88 /* EEPROM_Ctrl bits. */
89 #define EE_SHIFT_CLK 0x01 /* EEPROM shift clock. */
90 #define EE_CS 0x02 /* EEPROM chip select. */
91 #define EE_DATA_WRITE 0x04 /* EEPROM chip data in. */
92 #define EE_DATA_READ 0x08 /* EEPROM chip data out. */
93 #define EE_ENB ( 0x4800 | EE_CS )
95 /* Elements of the dump_statistics block. This block must be lword aligned. */
98 tx_good_frames
, tx_coll16_errs
, tx_late_colls
,
99 tx_underruns
, tx_lost_carrier
, tx_deferred
,
100 tx_one_colls
, tx_multi_colls
, tx_total_colls
,
101 rx_good_frames
, rx_crc_errs
, rx_align_errs
,
102 rx_resource_errs
, rx_overrun_errs
, rx_colls_errs
,
103 rx_runt_errs
, done_marker
;
106 struct ifec_tcb
{ /* A Transmit Command Block & TBD. Must be */
107 volatile s16 status
; /* word (even address) aligned */
109 u32 link
; /* PHYSICAL next ifec_tcb, doesn't change */
110 u32 tbda_addr
; /* TBD Array, points to TBD below */
111 s32 count
; /* # of TBD, Tx start thresh., etc. */
112 /* The following constitutes a Transmit Buffer Descriptor (TBD).
113 * TBDs must be aligned on an even address (word-aligned). */
114 u32 tbd_addr0
; /* PHYSICAL ptr to Tx data */
115 s32 tbd_size0
; /* Length of Tx data */
116 /* Driver-specific data; not part of TCB format. */
117 struct io_buffer
*iob
; /* Exists from tx() to completion poll() */
118 struct ifec_tcb
*next
; /* VIRTUAL next ifec_tcb, doesn't change */
121 struct ifec_rfd
{ /* A Receive Frame Descriptor. Must be aligned */
122 volatile s16 status
; /* on a physical word (even address) */
124 u32 link
; /* PHYSICAL next ifec_rfd, doesn't change */
125 u32 rx_buf_addr
; /* Unused. Flex rx mode is not documented */
126 u16 count
; /* and may be impossible */
128 char packet
[RFD_PACKET_LEN
];
131 struct ifec_ias
{ /* Individual Address Setup command block. */
132 volatile s16 status
; /* Must be word (even address) aligned. */
134 u32 link
; /* PHYSICAL next command block to process */
138 struct ifec_cfg
{ /* The configure command format. */
141 u32 link
; /* PHYSICAL next command block to process */
142 u8 byte
[22]; /* 22 configuration bytes */
145 struct ifec_private
{
146 unsigned long ioaddr
;
147 struct ifec_stats stats
;
148 unsigned short mdio_register
;
150 struct ifec_tcb
*tcbs
;
151 struct ifec_rfd
*rfds
[RFD_COUNT
];
152 struct ifec_tcb
*tcb_head
, *tcb_tail
;
153 struct io_buffer
*tx_iobs
[TCB_COUNT
];
154 struct io_buffer
*rx_iobs
[RFD_COUNT
];
160 * The configured flag indicates if a Config command was last issued.
161 * The following attempt to issue a command (in ifec_tx_wake) will
162 * use a START rather than RESUME SCB command. It seems the card won't
163 * RESUME after a configure command.
166 struct spi_bit_basher spi
;
167 struct spi_device eeprom
;
171 /**************************** Function prototypes ****************************/
173 /* PCI device API prototypes */
174 static int ifec_pci_probe ( struct pci_device
*, const struct pci_device_id
*);
175 static void ifec_pci_remove ( struct pci_device
*pci
);
177 /* Network device API prototypes */
178 static void ifec_net_close ( struct net_device
* );
179 static void ifec_net_irq ( struct net_device
*, int enable
);
180 static int ifec_net_open ( struct net_device
* );
181 static void ifec_net_poll ( struct net_device
* );
182 static int ifec_net_transmit ( struct net_device
*, struct io_buffer
*iobuf
);
184 /* Local function prototypes */
185 static void ifec_init_eeprom ( struct net_device
* );
186 static int ifec_link_check ( struct net_device
* );
187 static void ifec_link_update ( struct net_device
* );
188 static int ifec_mdio_read ( struct net_device
*, int phy
, int location
);
189 static void ifec_mdio_setup ( struct net_device
*, int options
);
190 static int ifec_mdio_write ( struct net_device
*, int phy
, int loc
, int val
);
191 static void ifec_reset ( struct net_device
* );
192 static void ifec_free ( struct net_device
* );
193 static void ifec_rfd_init ( struct ifec_rfd
*rfd
, s16 command
, u32 link
);
194 static void ifec_rx_process ( struct net_device
* );
195 static void ifec_reprime_ru ( struct net_device
* );
196 static void ifec_check_ru_status ( struct net_device
*, unsigned short );
197 static int ifec_get_rx_desc ( struct net_device
*, int ,int ,int );
198 static void ifec_refill_rx_ring ( struct net_device
* );
199 static int ifec_rx_setup ( struct net_device
* );
200 static int ifec_scb_cmd ( struct net_device
*, u32 ptr
, u8 cmd
);
201 static int ifec_scb_cmd_wait ( struct net_device
* );
202 static void ifec_tx_process ( struct net_device
* );
203 static int ifec_tx_setup ( struct net_device
* );
204 static void ifec_tx_wake ( struct net_device
* );