Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

rtl_3c905cx_drv.h File Reference

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/config.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/timer.h>
#include <linux/errno.h>
#include <linux/in.h>
#include <linux/ioport.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/mii.h>
#include <linux/init.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/ethtool.h>
#include <linux/highmem.h>
#include <asm/irq.h>
#include <asm/bitops.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <rtl_sched.h>
#include <signal.h>
#include <time.h>
#include <rtl_sync.h>
#include <rtl_core.h>
#include <rtl_printf.h>
#include <rtl_posixio.h>
#include <sys/mman.h>
#include <errno.h>
#include <unistd.h>
#include <rtl.h>
#include <rtl_malloc.h>
#include <rtl_sema.h>
#include "memcopy.h"

Include dependency graph for rtl_3c905cx_drv.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  boom_rx_desc
struct  boom_tx_desc
struct  media_table
struct  vortex_chip_info
struct  vortex_private

Defines

#define DRV_NAME   "3c59x"
#define DRV_VERSION   "0.1"
#define DRV_RELDATE   "27 december 2002"
#define MAX_THREADS   10
#define COM3_VENDOR_ID   0x10B7
#define COM3_DEVICE_ID   0X9200
#define BFEXT(value, offset, bitcount)   ((((unsigned long)(value)) >> (offset)) & ((1 << (bitcount)) - 1))
#define BFINS(lhs, rhs, offset, bitcount)
#define RAM_SIZE(v)   BFEXT(v, 0, 3)
#define RAM_WIDTH(v)   BFEXT(v, 3, 1)
#define RAM_SPEED(v)   BFEXT(v, 4, 2)
#define ROM_SIZE(v)   BFEXT(v, 6, 2)
#define RAM_SPLIT(v)   BFEXT(v, 16, 2)
#define XCVR(v)   BFEXT(v, 20, 4)
#define AUTOSELECT(v)   BFEXT(v, 24, 1)
#define EL3WINDOW(win_num)   outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
#define EL3_CMD   0x0e
#define EL3_STATUS   0x0e
#define TX_RING_SIZE   16
#define RX_RING_SIZE   32
#define PKT_BUF_SZ   1536
#define MAX_ADDR_LEN   8
#define LAST_FRAG   0x80000000
#define DN_COMPLETE   0x00010000
#define DO_ZEROCOPY   0
#define PCI_DEBUG   0
#define EEPROM_CONTENTS_DEBUG   0
#define MAC_ADDRESS_DEBUG   0
#define FUNCTION_CALL_DEBUG   0
#define INITIALIZATION_DEBUG   0
#define RECEIVE_DEBUG   0
#define PACKET_DATA_DEBUG   0
#define INTERRUPT_DEBUG   0
#define TRANSMIT_DEBUG   0
#define ERROR_DEBUG   1
#define SIGALRM2   RTL_SIGUSR1
#define DEBUG(x, y)   if(x) printk y

Enumerations

enum  vortex_cmd {
  TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11, RxDisable = 3<<11,
  RxEnable = 4<<11, RxReset = 5<<11, UpStall = 6<<11, UpUnstall = (6<<11)+1,
  DownStall = (6<<11)+2, DownUnstall = (6<<11)+3, RxDiscard = 8<<11, TxEnable = 9<<11,
  TxDisable = 10<<11, TxReset = 11<<11, FakeIntr = 12<<11, AckIntr = 13<<11,
  SetIntrEnb = 14<<11, SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11,
  SetTxThreshold = 18<<11, SetTxStart = 19<<11, StartDMAUp = 20<<11, StartDMADown = (20<<11)+1,
  StatsEnable = 21<<11, StatsDisable = 22<<11, StopCoax = 23<<11, SetFilterBit = 25<<11
}
enum  RxFilter { RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 }
enum  vortex_status {
  IntLatch = 0x0001, HostError = 0x0002, TxComplete = 0x0004, TxAvailable = 0x0008,
  RxComplete = 0x0010, RxEarly = 0x0020, IntReq = 0x0040, StatsFull = 0x0080,
  DMADone = 1<<8, DownComplete = 1<<9, UpComplete = 1<<10, DMAInProgress = 1<<11,
  CmdInProgress = 1<<12
}
enum  Window1 {
  TX_FIFO = 0x10, RX_FIFO = 0x10, RxErrors = 0x14, RxStatus = 0x18,
  Timer = 0x1A, TxStatus = 0x1B, TxFree = 0x1C
}
enum  Window0 { Wn0EepromCmd = 10, Wn0EepromData = 12, IntrStatus = 0x0E }
enum  Win0_EEPROM_bits {
  EEPROM_Read = 0x80, EEPROM_WRITE = 0x40, EEPROM_ERASE = 0xC0, EEPROM_EWENB = 0x30,
  EEPROM_EWDIS = 0x00
}
enum  eeprom_offset {
  PhysAddr01 = 0, PhysAddr23 = 1, PhysAddr45 = 2, ModelID = 3,
  EtherLink3ID = 7, IFXcvrIO = 8, IRQLine = 9, NodeAddr01 = 10,
  NodeAddr23 = 11, NodeAddr45 = 12, DriverTune = 13, Checksum = 15
}
enum  Window2 { Wn2_ResetOptions = 12 }
enum  Window3 { Wn3_Config = 0, Wn3_MAC_Ctrl = 6, Wn3_Options = 8 }
enum  Window4 { Wn4_FIFODiag = 4, Wn4_NetDiag = 6, Wn4_PhysicalMgmt = 8, Wn4_Media = 10 }
enum  Win4_Media_bits { Media_SQE = 0x0008, Media_10TP = 0x00C0, Media_Lnk = 0x0080, Media_LnkBeat = 0x0800 }
enum  Window7 { Wn7_MasterAddr = 0, Wn7_MasterLen = 6, Wn7_MasterStatus = 12 }
enum  MasterCtrl {
  PktStatus = 0x20, DownListPtr = 0x24, FragAddr = 0x28, FragLen = 0x2c,
  TxFreeThreshold = 0x2f, UpPktStatus = 0x30, UpListPtr = 0x38
}
enum  rx_desc_status {
  RxDComplete = 0x00008000, RxDError = 0x4000, IPChksumErr = 1<<25, TCPChksumErr = 1<<26,
  UDPChksumErr = 1<<27, IPChksumValid = 1<<29, TCPChksumValid = 1<<30, UDPChksumValid = 1<<31
}
enum  tx_desc_status {
  CRCDisable = 0x2000, TxDComplete = 0x8000, AddIPChksum = 0x02000000, AddTCPChksum = 0x04000000,
  AddUDPChksum = 0x08000000, TxIntrUploaded = 0x80000000
}
enum  xcvr_types {
  XCVR_10baseT = 0, XCVR_AUI, XCVR_10baseTOnly, XCVR_10base2,
  XCVR_100baseTx, XCVR_100baseFx, XCVR_MII = 6, XCVR_NWAY = 8,
  XCVR_ExtMII = 9, XCVR_Default = 10
}
enum  ChipCaps { CapBusMaster = 0x20, CapPwrMgmt = 0x2000 }
enum  pci_flags_bit {
  PCI_USES_IO = 1, PCI_USES_MEM = 2, PCI_USES_MASTER = 4, PCI_ADDR0 = 0x10<<0,
  PCI_ADDR1 = 0x10<<1, PCI_ADDR2 = 0x10<<2, PCI_ADDR3 = 0x10<<3
}
enum  {
  IS_VORTEX = 1, IS_BOOMERANG = 2, IS_CYCLONE = 4, IS_TORNADO = 8,
  EEPROM_8BIT = 0x10, HAS_PWR_CTRL = 0x20, HAS_MII = 0x40, HAS_NWAY = 0x80,
  HAS_CB_FNS = 0x100, INVERT_MII_PWR = 0x200, INVERT_LED_PWR = 0x400, MAX_COLLISION_RESET = 0x800,
  EEPROM_OFFSET = 0x1000, HAS_HWCKSM = 0x2000
}
enum  vortex_chips {
  CH_3C590 = 0, CH_3C592, CH_3C597, CH_3C595_1,
  CH_3C595_2, CH_3C595_3, CH_3C900_1, CH_3C900_2,
  CH_3C900_3, CH_3C900_4, CH_3C900_5, CH_3C900B_FL,
  CH_3C905_1, CH_3C905_2, CH_3C905B_1, CH_3C905B_2,
  CH_3C905B_FX, CH_3C905C, CH_3C980, CH_3C9805,
  CH_3CSOHO100_TX, CH_3C555, CH_3C556, CH_3C556B,
  CH_3C575, CH_3C575_1, CH_3CCFE575, CH_3CCFE575CT,
  CH_3CCFE656, CH_3CCFEM656, CH_3CCFEM656_1, CH_3C450
}

Functions

pci_dev * rtl_3COM905C_init_device (void)
int rtl_3COM905C_start_up_device (struct pci_dev *dev)
void rtl_3COM905C_mdio_write (int phy_id, int location, int value)
int rtl_3COM905C_mdio_read (int phy_id, int location)
void rtl_3COM905C_mdio_sync (long ioaddr, int bits)
int vortex_open (struct pci_dev *dev)
void vortex_up (struct pci_dev *dev)
void rtl_3COM905C_issue_and_wait (int cmd)
void rtl_3COM905C_set_rx_mode (void)
void rtl_3COM905C_acpi_set_WOL (void)
int boomerang_rx (struct pci_dev *dev)
void vortex_down (struct pci_dev *dev)
void vortex_error (struct pci_dev *dev, int status)
int vortex_close (struct pci_dev *dev)
void vortex_remove_one (struct pci_dev *pdev)
int rt_3c905c_send_packet (const char *buffer, size_t size)
void rt_3c905c_send_signal (void)
int rtl_3COM905C_open (struct rtl_file *filp)
int rtl_3COM905C_release (struct rtl_file *filp)
ssize_t rtl_3COM905C_write (struct rtl_file *filp, const char *buf, size_t count, loff_t *ppos)
int rtl_3COM905C_ioctl (struct rtl_file *filp, unsigned int request, unsigned long other)
ssize_t rtl_3COM905C_read (struct rtl_file *filp, char *buf, size_t count, loff_t *ppos)

Variables

vortex_chip_info vortex_info
media_table media_tbl []
char mii_preamble_required
const int mtu = 1500
int max_interrupt_work = 32
const int rx_copybreak = 200


Define Documentation

#define AUTOSELECT  )     BFEXT(v, 24, 1)
 

Definition at line 261 of file rtl_3c905cx_drv.h.

Referenced by rtl_3COM905C_start_up_device().

#define BFEXT value,
offset,
bitcount   )     ((((unsigned long)(value)) >> (offset)) & ((1 << (bitcount)) - 1))
 

Definition at line 248 of file rtl_3c905cx_drv.h.

#define BFINS lhs,
rhs,
offset,
bitcount   ) 
 

Value:

(((lhs) & ~((((1 << (bitcount)) - 1)) << (offset))) |   \
        (((rhs) & ((1 << (bitcount)) - 1)) << (offset)))

Definition at line 251 of file rtl_3c905cx_drv.h.

Referenced by vortex_up().

#define COM3_DEVICE_ID   0X9200
 

Definition at line 246 of file rtl_3c905cx_drv.h.

Referenced by rtl_3COM905C_init_device().

#define COM3_VENDOR_ID   0x10B7
 

Definition at line 245 of file rtl_3c905cx_drv.h.

Referenced by rtl_3COM905C_init_device().

#define DEBUG x,
 )     if(x) printk y
 

Definition at line 603 of file rtl_3c905cx_drv.h.

#define DN_COMPLETE   0x00010000
 

Definition at line 367 of file rtl_3c905cx_drv.h.

#define DO_ZEROCOPY   0
 

Definition at line 410 of file rtl_3c905cx_drv.h.

#define DRV_NAME   "3c59x"
 

Definition at line 239 of file rtl_3c905cx_drv.h.

#define DRV_RELDATE   "27 december 2002"
 

Definition at line 241 of file rtl_3c905cx_drv.h.

#define DRV_VERSION   "0.1"
 

Definition at line 240 of file rtl_3c905cx_drv.h.

#define EEPROM_CONTENTS_DEBUG   0
 

Definition at line 591 of file rtl_3c905cx_drv.h.

#define EL3_CMD   0x0e
 

Definition at line 271 of file rtl_3c905cx_drv.h.

Referenced by boomerang_interrupt(), rt_3c905c_send_packet(), rtl_3COM905C_acpi_set_WOL(), rtl_3COM905C_issue_and_wait(), rtl_3COM905C_set_rx_mode(), vortex_down(), vortex_error(), vortex_remove_one(), and vortex_up().

#define EL3_STATUS   0x0e
 

Definition at line 272 of file rtl_3c905cx_drv.h.

Referenced by boomerang_interrupt(), rtl_3COM905C_issue_and_wait(), and vortex_error().

#define EL3WINDOW win_num   )     outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
 

Definition at line 270 of file rtl_3c905cx_drv.h.

Referenced by rtl_3COM905C_acpi_set_WOL(), rtl_3COM905C_start_up_device(), vortex_error(), and vortex_up().

#define ERROR_DEBUG   1
 

Definition at line 599 of file rtl_3c905cx_drv.h.

#define FUNCTION_CALL_DEBUG   0
 

Definition at line 593 of file rtl_3c905cx_drv.h.

#define INITIALIZATION_DEBUG   0
 

Definition at line 594 of file rtl_3c905cx_drv.h.

#define INTERRUPT_DEBUG   0
 

Definition at line 597 of file rtl_3c905cx_drv.h.

#define LAST_FRAG   0x80000000
 

Definition at line 366 of file rtl_3c905cx_drv.h.

Referenced by rt_3c905c_send_packet(), and vortex_open().

#define MAC_ADDRESS_DEBUG   0
 

Definition at line 592 of file rtl_3c905cx_drv.h.

#define MAX_ADDR_LEN   8
 

Definition at line 279 of file rtl_3c905cx_drv.h.

#define MAX_THREADS   10
 

Definition at line 243 of file rtl_3c905cx_drv.h.

#define PACKET_DATA_DEBUG   0
 

Definition at line 596 of file rtl_3c905cx_drv.h.

#define PCI_DEBUG   0
 

Definition at line 590 of file rtl_3c905cx_drv.h.

#define PKT_BUF_SZ   1536
 

Definition at line 278 of file rtl_3c905cx_drv.h.

#define RAM_SIZE  )     BFEXT(v, 0, 3)
 

Definition at line 255 of file rtl_3c905cx_drv.h.

#define RAM_SPEED  )     BFEXT(v, 4, 2)
 

Definition at line 257 of file rtl_3c905cx_drv.h.

#define RAM_SPLIT  )     BFEXT(v, 16, 2)
 

Definition at line 259 of file rtl_3c905cx_drv.h.

#define RAM_WIDTH  )     BFEXT(v, 3, 1)
 

Definition at line 256 of file rtl_3c905cx_drv.h.

#define RECEIVE_DEBUG   0
 

Definition at line 595 of file rtl_3c905cx_drv.h.

#define ROM_SIZE  )     BFEXT(v, 6, 2)
 

Definition at line 258 of file rtl_3c905cx_drv.h.

#define RX_RING_SIZE   32
 

Definition at line 277 of file rtl_3c905cx_drv.h.

Referenced by boomerang_interrupt(), boomerang_rx(), rtl_3COM905C_start_up_device(), vortex_close(), vortex_open(), vortex_remove_one(), and vortex_up().

#define SIGALRM2   RTL_SIGUSR1
 

Definition at line 601 of file rtl_3c905cx_drv.h.

#define TRANSMIT_DEBUG   0
 

Definition at line 598 of file rtl_3c905cx_drv.h.

#define TX_RING_SIZE   16
 

Definition at line 276 of file rtl_3c905cx_drv.h.

Referenced by rt_3c905c_send_packet(), rtl_3COM905C_start_up_device(), vortex_close(), vortex_open(), and vortex_remove_one().

#define XCVR  )     BFEXT(v, 20, 4)
 

Definition at line 260 of file rtl_3c905cx_drv.h.

Referenced by rtl_3COM905C_start_up_device().


Enumeration Type Documentation

anonymous enum
 

Enumeration values:
IS_VORTEX 
IS_BOOMERANG 
IS_CYCLONE 
IS_TORNADO 
EEPROM_8BIT 
HAS_PWR_CTRL 
HAS_MII 
HAS_NWAY 
HAS_CB_FNS 
INVERT_MII_PWR 
INVERT_LED_PWR 
MAX_COLLISION_RESET 
EEPROM_OFFSET 
HAS_HWCKSM 

Definition at line 404 of file rtl_3c905cx_drv.h.

00404      {  IS_VORTEX=1, IS_BOOMERANG=2, IS_CYCLONE=4, IS_TORNADO=8,
00405         EEPROM_8BIT=0x10,       /* AKPM: Uses 0x230 as the base bitmaps for EEPROM reads */
00406         HAS_PWR_CTRL=0x20, HAS_MII=0x40, HAS_NWAY=0x80, HAS_CB_FNS=0x100,
00407         INVERT_MII_PWR=0x200, INVERT_LED_PWR=0x400, MAX_COLLISION_RESET=0x800,
00408         EEPROM_OFFSET=0x1000, HAS_HWCKSM=0x2000 };

enum ChipCaps
 

Enumeration values:
CapBusMaster 
CapPwrMgmt 

Definition at line 393 of file rtl_3c905cx_drv.h.

00393 { CapBusMaster=0x20, CapPwrMgmt=0x2000 };

enum eeprom_offset
 

Enumeration values:
PhysAddr01 
PhysAddr23 
PhysAddr45 
ModelID 
EtherLink3ID 
IFXcvrIO 
IRQLine 
NodeAddr01 
NodeAddr23 
NodeAddr45 
DriverTune 
Checksum 

Definition at line 331 of file rtl_3c905cx_drv.h.

00331                    {
00332         PhysAddr01=0, PhysAddr23=1, PhysAddr45=2, ModelID=3,
00333         EtherLink3ID=7, IFXcvrIO=8, IRQLine=9,
00334         NodeAddr01=10, NodeAddr23=11, NodeAddr45=12,
00335         DriverTune=13, Checksum=15};

enum MasterCtrl
 

Enumeration values:
PktStatus 
DownListPtr 
FragAddr 
FragLen 
TxFreeThreshold 
UpPktStatus 
UpListPtr 

Definition at line 358 of file rtl_3c905cx_drv.h.

00358                 {
00359         PktStatus = 0x20, DownListPtr = 0x24, FragAddr = 0x28, FragLen = 0x2c,
00360         TxFreeThreshold = 0x2f, UpPktStatus = 0x30, UpListPtr = 0x38,
00361 };

enum pci_flags_bit
 

Enumeration values:
PCI_USES_IO 
PCI_USES_MEM 
PCI_USES_MASTER 
PCI_ADDR0 
PCI_ADDR1 
PCI_ADDR2 
PCI_ADDR3 

Definition at line 399 of file rtl_3c905cx_drv.h.

00399                    {
00400         PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
00401         PCI_ADDR0=0x10<<0, PCI_ADDR1=0x10<<1, PCI_ADDR2=0x10<<2, PCI_ADDR3=0x10<<3,
00402 };

enum rx_desc_status
 

Enumeration values:
RxDComplete 
RxDError 
IPChksumErr 
TCPChksumErr 
UDPChksumErr 
IPChksumValid 
TCPChksumValid 
UDPChksumValid 

Definition at line 370 of file rtl_3c905cx_drv.h.

00370                     {
00371         RxDComplete=0x00008000, RxDError=0x4000,
00372         /* See boomerang_rx() for actual error bits */
00373         IPChksumErr=1<<25, TCPChksumErr=1<<26, UDPChksumErr=1<<27,
00374         IPChksumValid=1<<29, TCPChksumValid=1<<30, UDPChksumValid=1<<31,
00375 };

enum RxFilter
 

Enumeration values:
RxStation 
RxMulticast 
RxBroadcast 
RxProm 

Definition at line 300 of file rtl_3c905cx_drv.h.

00300               {
00301         RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 };

enum tx_desc_status
 

Enumeration values:
CRCDisable 
TxDComplete 
AddIPChksum 
AddTCPChksum 
AddUDPChksum 
TxIntrUploaded 

Definition at line 378 of file rtl_3c905cx_drv.h.

00378                     {
00379         CRCDisable=0x2000, TxDComplete=0x8000,
00380         AddIPChksum=0x02000000, AddTCPChksum=0x04000000, AddUDPChksum=0x08000000,
00381         TxIntrUploaded=0x80000000,              /* IRQ when in FIFO, but maybe not sent. */
00382 };

enum vortex_chips
 

Enumeration values:
CH_3C590 
CH_3C592 
CH_3C597 
CH_3C595_1 
CH_3C595_2 
CH_3C595_3 
CH_3C900_1 
CH_3C900_2 
CH_3C900_3 
CH_3C900_4 
CH_3C900_5 
CH_3C900B_FL 
CH_3C905_1 
CH_3C905_2 
CH_3C905B_1 
CH_3C905B_2 
CH_3C905B_FX 
CH_3C905C 
CH_3C980 
CH_3C9805 
CH_3CSOHO100_TX 
CH_3C555 
CH_3C556 
CH_3C556B 
CH_3C575 
CH_3C575_1 
CH_3CCFE575 
CH_3CCFE575CT 
CH_3CCFE656 
CH_3CCFEM656 
CH_3CCFEM656_1 
CH_3C450 

Definition at line 495 of file rtl_3c905cx_drv.h.

00495                   {
00496         CH_3C590 = 0,
00497         CH_3C592,
00498         CH_3C597,
00499         CH_3C595_1,
00500         CH_3C595_2,
00501 
00502         CH_3C595_3,
00503         CH_3C900_1,
00504         CH_3C900_2,
00505         CH_3C900_3,
00506         CH_3C900_4,
00507 
00508         CH_3C900_5,
00509         CH_3C900B_FL,
00510         CH_3C905_1,
00511         CH_3C905_2,
00512         CH_3C905B_1,
00513 
00514         CH_3C905B_2,
00515         CH_3C905B_FX,
00516         CH_3C905C,
00517         CH_3C980,
00518         CH_3C9805,
00519 
00520         CH_3CSOHO100_TX,
00521         CH_3C555,
00522         CH_3C556,
00523         CH_3C556B,
00524         CH_3C575,
00525 
00526         CH_3C575_1,
00527         CH_3CCFE575,
00528         CH_3CCFE575CT,
00529         CH_3CCFE656,
00530         CH_3CCFEM656,
00531 
00532         CH_3CCFEM656_1,
00533         CH_3C450,
00534 };

enum vortex_cmd
 

Enumeration values:
TotalReset 
SelectWindow 
StartCoax 
RxDisable 
RxEnable 
RxReset 
UpStall 
UpUnstall 
DownStall 
DownUnstall 
RxDiscard 
TxEnable 
TxDisable 
TxReset 
FakeIntr 
AckIntr 
SetIntrEnb 
SetStatusEnb 
SetRxFilter 
SetRxThreshold 
SetTxThreshold 
SetTxStart 
StartDMAUp 
StartDMADown 
StatsEnable 
StatsDisable 
StopCoax 
SetFilterBit 

Definition at line 287 of file rtl_3c905cx_drv.h.

00287                 {
00288         TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11,
00289         RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11,
00290         UpStall = 6<<11, UpUnstall = (6<<11)+1,
00291         DownStall = (6<<11)+2, DownUnstall = (6<<11)+3,
00292         RxDiscard = 8<<11, TxEnable = 9<<11, TxDisable = 10<<11, TxReset = 11<<11,
00293         FakeIntr = 12<<11, AckIntr = 13<<11, SetIntrEnb = 14<<11,
00294         SetStatusEnb = 15<<11, SetRxFilter = 16<<11, SetRxThreshold = 17<<11,
00295         SetTxThreshold = 18<<11, SetTxStart = 19<<11,
00296         StartDMAUp = 20<<11, StartDMADown = (20<<11)+1, StatsEnable = 21<<11,
00297         StatsDisable = 22<<11, StopCoax = 23<<11, SetFilterBit = 25<<11,};

enum vortex_status
 

Enumeration values:
IntLatch 
HostError 
TxComplete 
TxAvailable 
RxComplete 
RxEarly 
IntReq 
StatsFull 
DMADone 
DownComplete 
UpComplete 
DMAInProgress 
CmdInProgress 

Definition at line 304 of file rtl_3c905cx_drv.h.

00304                    {
00305         IntLatch = 0x0001, HostError = 0x0002, TxComplete = 0x0004,
00306         TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020,
00307         IntReq = 0x0040, StatsFull = 0x0080,
00308         DMADone = 1<<8, DownComplete = 1<<9, UpComplete = 1<<10,
00309         DMAInProgress = 1<<11,                  /* DMA controller is still busy.*/
00310         CmdInProgress = 1<<12,                  /* EL3_CMD is still busy.*/
00311 };

enum Win0_EEPROM_bits
 

Enumeration values:
EEPROM_Read 
EEPROM_WRITE 
EEPROM_ERASE 
EEPROM_EWENB 
EEPROM_EWDIS 

Definition at line 325 of file rtl_3c905cx_drv.h.

00325                       {
00326         EEPROM_Read = 0x80, EEPROM_WRITE = 0x40, EEPROM_ERASE = 0xC0,
00327         EEPROM_EWENB = 0x30,            /* Enable erasing/writing for 10 msec. */
00328         EEPROM_EWDIS = 0x00,            /* Disable EWENB before 10 msec timeout. */
00329 };

enum Win4_Media_bits
 

Enumeration values:
Media_SQE 
Media_10TP 
Media_Lnk 
Media_LnkBeat 

Definition at line 347 of file rtl_3c905cx_drv.h.

00347                      {
00348         Media_SQE = 0x0008,             /* Enable SQE error counting for AUI. */
00349         Media_10TP = 0x00C0,    /* Enable link beat and jabber for 10baseT. */
00350         Media_Lnk = 0x0080,             /* Enable just link beat for 100TX/100FX. */
00351         Media_LnkBeat = 0x0800,
00352 };

enum Window0
 

Enumeration values:
Wn0EepromCmd 
Wn0EepromData 
IntrStatus 

Definition at line 320 of file rtl_3c905cx_drv.h.

00320              {
00321         Wn0EepromCmd = 10,              /* Window 0: EEPROM command register. */
00322         Wn0EepromData = 12,             /* Window 0: EEPROM results register. */
00323         IntrStatus=0x0E,                /* Valid in all windows. */
00324 };

enum Window1
 

Enumeration values:
TX_FIFO 
RX_FIFO 
RxErrors 
RxStatus 
Timer 
TxStatus 
TxFree 

Definition at line 315 of file rtl_3c905cx_drv.h.

00315              {
00316         TX_FIFO = 0x10,  RX_FIFO = 0x10,  RxErrors = 0x14,
00317         RxStatus = 0x18,  Timer=0x1A, TxStatus = 0x1B,
00318         TxFree = 0x1C, /* Remaining free bytes in Tx buffer. */
00319 };

enum Window2
 

Enumeration values:
Wn2_ResetOptions 

Definition at line 337 of file rtl_3c905cx_drv.h.

00337              {                  /* Window 2. */
00338         Wn2_ResetOptions=12,
00339 };

enum Window3
 

Enumeration values:
Wn3_Config 
Wn3_MAC_Ctrl 
Wn3_Options 

Definition at line 340 of file rtl_3c905cx_drv.h.

00340              {                  /* Window 3: MAC/config bits. */
00341         Wn3_Config=0, Wn3_MAC_Ctrl=6, Wn3_Options=8,
00342 };

enum Window4
 

Enumeration values:
Wn4_FIFODiag 
Wn4_NetDiag 
Wn4_PhysicalMgmt 
Wn4_Media 

Definition at line 344 of file rtl_3c905cx_drv.h.

00344              {          /* Window 4: Xcvr/media bits. */
00345         Wn4_FIFODiag = 4, Wn4_NetDiag = 6, Wn4_PhysicalMgmt=8, Wn4_Media = 10,
00346 };

enum Window7
 

Enumeration values:
Wn7_MasterAddr 
Wn7_MasterLen 
Wn7_MasterStatus 

Definition at line 354 of file rtl_3c905cx_drv.h.

00354              {                                  /* Window 7: Bus Master control. */
00355         Wn7_MasterAddr = 0, Wn7_MasterLen = 6, Wn7_MasterStatus = 12,
00356 };

enum xcvr_types
 

Enumeration values:
XCVR_10baseT 
XCVR_AUI 
XCVR_10baseTOnly 
XCVR_10base2 
XCVR_100baseTx 
XCVR_100baseFx 
XCVR_MII 
XCVR_NWAY 
XCVR_ExtMII 
XCVR_Default 

Definition at line 387 of file rtl_3c905cx_drv.h.


Function Documentation

int boomerang_rx struct pci_dev *  dev  )  [static]
 

Referenced by boomerang_interrupt().

int rt_3c905c_send_packet const char *  buffer,
size_t  size
[static]
 

Referenced by rtl_3COM905C_write().

void rt_3c905c_send_signal void   ) 
 

void rtl_3COM905C_acpi_set_WOL void   )  [static]
 

struct pci_dev* rtl_3COM905C_init_device void   ) 
 

Definition at line 393 of file rtl_3c905cx_drv.c.

References COM3_DEVICE_ID, COM3_VENDOR_ID, net_policy_operations::initialize_rx_buffer, NULL, rt_3c905x_policy, rt_3c905x_rx_buffer, rt_pci_enable_device(), and rt_pci_find_device().

Referenced by rtl_3COM905C_open().

00393                                               {
00394   struct pci_dev *dev;
00395 
00396   /* First of all, we must get a pointer to the pci_dev structure */
00397   if((dev = rt_pci_find_device(COM3_VENDOR_ID, COM3_DEVICE_ID, NULL))== NULL)
00398     return NULL;
00399 
00400   rt_3c905x_policy.initialize_rx_buffer(&rt_3c905x_rx_buffer);
00401 
00402   /* Let's enable the device */
00403   if (rt_pci_enable_device(dev)){
00404     rtl_printf("PCI ERROR: Can't enable device 3Com905C-X\n");
00405     return NULL;
00406   }
00407 
00408   return dev;
00409 }

Here is the call graph for this function:

int rtl_3COM905C_ioctl struct rtl_file *  filp,
unsigned int  request,
unsigned long  other
[static]
 

void rtl_3COM905C_issue_and_wait int  cmd  )  [static]
 

Referenced by boomerang_interrupt(), cleanup_module(), rt_3c905c_send_packet(), vortex_error(), and vortex_up().

int rtl_3COM905C_mdio_read int  phy_id,
int  location
[static]
 

Referenced by rtl_3COM905C_start_up_device(), and vortex_up().

void rtl_3COM905C_mdio_sync long  ioaddr,
int  bits
[static]
 

Referenced by rtl_3COM905C_mdio_read(), and rtl_3COM905C_mdio_write().

void rtl_3COM905C_mdio_write int  phy_id,
int  location,
int  value
[static]
 

Referenced by rtl_3COM905C_start_up_device().

int rtl_3COM905C_open struct rtl_file *  filp  )  [static]
 

ssize_t rtl_3COM905C_read struct rtl_file *  filp,
char *  buf,
size_t  count,
loff_t *  ppos
[static]
 

int rtl_3COM905C_release struct rtl_file *  filp  )  [static]
 

Referenced by rtl_3COM905C_open().

void rtl_3COM905C_set_rx_mode void   )  [static]
 

int rtl_3COM905C_start_up_device struct pci_dev *  dev  ) 
 

Definition at line 624 of file rtl_3c905cx_drv.c.

References vortex_private::advertising, AUTOSELECT, vortex_private::autoselect, vortex_private::available_media, vortex_private::bus_master, vortex_private::capabilities, CapBusMaster, vortex_private::card_idx, vortex_private::cb_fn_base, vortex_private::default_media, vortex_private::dev_addr, vortex_private::drv_flags, EEPROM_8BIT, EEPROM_OFFSET, EEPROM_Read, EL3WINDOW, vortex_private::enable_wol, vortex_private::full_bus_master_rx, vortex_private::full_bus_master_tx, vortex_private::full_duplex, HAS_CB_FNS, HAS_NWAY, vortex_private::has_nway, htons, vortex_private::if_port, vortex_private::info1, vortex_private::info2, INVERT_LED_PWR, INVERT_MII_PWR, vortex_private::io_size, vortex_private::ioaddr, IS_TORNADO, vortex_private::media_override, vortex_private::mtu, vortex_private::must_free_region, NULL, PCI_USES_MASTER, vortex_private::pdev, vortex_private::phys, vortex_private::pm_state_valid, vortex_private::power_state, rt_3c905c_vp, rt_pci_resource_start, rt_pci_save_state(), rtl_3COM905C_acpi_set_WOL(), rtl_3COM905C_mdio_read(), rtl_3COM905C_mdio_write(), vortex_private::rx_ring, vortex_private::rx_ring_dma, RX_RING_SIZE, vortex_private::tx_ring, vortex_private::tx_ring_dma, TX_RING_SIZE, vortex_open(), Wn0EepromCmd, Wn0EepromData, Wn2_ResetOptions, Wn3_Config, Wn3_Options, Wn4_NetDiag, XCVR, XCVR_MII, and XCVR_NWAY.

Referenced by rtl_3COM905C_open().

00624                                                      {
00625   struct vortex_chip_info * const vci = &vortex_info;
00626   unsigned int eeprom[0x40], checksum = 0;              /* EEPROM contents */
00627   char *print_name;
00628   int retval;
00629   long ioaddr;
00630   int i,step;
00631 
00632   print_name = dev ? dev->slot_name : "3c59x";
00633 
00634   ioaddr = rt_pci_resource_start(dev, 0);
00635 
00636   rt_3c905c_vp.drv_flags = vci->drv_flags;
00637   rt_3c905c_vp.has_nway = (vci->drv_flags & HAS_NWAY) ? 1 : 0;
00638   rt_3c905c_vp.io_size = vci->io_size;
00639   rt_3c905c_vp.card_idx = 0;
00640   rt_3c905c_vp.ioaddr = ioaddr;
00641   rt_3c905c_vp.media_override = 7;
00642   rt_3c905c_vp.mtu = mtu;
00643 
00644   print_name = dev ? dev->slot_name : "3c59x";
00645 
00646   /* PCI-only startup logic */
00647   if (dev) {
00648     if (request_region(ioaddr, vci->io_size, print_name) != NULL){
00649       rt_3c905c_vp.must_free_region = 1;
00650      }
00651 
00652     /* enable bus-mastering if necessary */             
00653     if (vci->flags & PCI_USES_MASTER)
00654       pci_set_master (dev);
00655 
00656     rt_3c905c_vp.pdev = dev;
00657 
00658     /* Makes sure rings are at least 16 byte aligned. */
00659     rt_3c905c_vp.rx_ring = pci_alloc_consistent(dev, sizeof(struct boom_rx_desc) * RX_RING_SIZE, &rt_3c905c_vp.rx_ring_dma);
00660     rt_3c905c_vp.tx_ring = pci_alloc_consistent(dev, sizeof(struct boom_tx_desc) * TX_RING_SIZE, &rt_3c905c_vp.tx_ring_dma);
00661 
00662     retval = -ENOMEM;
00663     if ((rt_3c905c_vp.rx_ring == 0) || (rt_3c905c_vp.tx_ring == 0))
00664       goto free_region;
00665         
00666     EL3WINDOW(0);
00667     {
00668       int base;
00669 
00670       if (vci->drv_flags & EEPROM_8BIT)
00671         base = 0x230;
00672       else if (vci->drv_flags & EEPROM_OFFSET)
00673         base = EEPROM_Read + 0x30;
00674       else
00675         base = EEPROM_Read;
00676 
00677       for (i = 0; i < 0x40; i++) {
00678         int timer;
00679         
00680         /* This means that we want to read EepromCommand Register and disable writting */
00681         /* Issuing ReadRegister & WriteDisable                                         */
00682         outw(base + i, ioaddr + Wn0EepromCmd);
00683 
00684         for (timer = 10; timer >= 0; timer--) {
00685 
00686           /* The read data is available through the EepromData register 162us after  */
00687           /* the ReadRegister command has been issued                                */
00688           rtl_delay(162000);
00689 
00690           /* Bit 15th (eepromBusy) of EepromCommand register is a read-only bit asserted   */
00691           /* during the execution of EEProm commands. Further commans should not be issued */
00692           /* to the EepromCommand register, nor should data be read from the EepromData    */
00693           /* register while this bit is true                                               */
00694           if ((inw(ioaddr + Wn0EepromCmd) & 0x8000) == 0)
00695             break;
00696         }
00697 
00698         /* Save the contents of the 3C90xC NIC's EEPROM     */ 
00699         eeprom[i] = inw(ioaddr + Wn0EepromData);
00700       }
00701 
00702     }//EL3WINDOW(0) configuration finished
00703 
00704     /* EEPROM can be checksummed in order to assure that reading was OK */
00705     for (i = 0; i < 0x18; i++)
00706       checksum ^= eeprom[i];
00707     checksum = (checksum ^ (checksum >> 8)) & 0xff;
00708     if (checksum != 0x00) {             /* Grrr, needless incompatible change 3Com. */
00709       while (i < 0x21)
00710         checksum ^= eeprom[i++];
00711       checksum = (checksum ^ (checksum >> 8)) & 0xff;
00712     }
00713     if ((checksum != 0x00) && !(vci->drv_flags & IS_TORNADO))
00714       printk(" ***INVALID CHECKSUM %4.4x*** ", checksum);
00715     
00716     /* Save HW address into dev_addr (MAC address in format 00:04:75:bd:ea:e7) */
00717     for (i = 0; i < 3; i++)
00718       ((u16 *)rt_3c905c_vp.dev_addr)[i] = htons(eeprom[i + 10]);
00719     
00720     /* This writes into the StationAddress register the NIC's HW address in order */
00721     /* to define the individual destination address that the NIC responds to when */
00722     /* receiving packets                                                          */
00723     EL3WINDOW(2);
00724     for (i = 0; i < 6; i++)
00725       outb(rt_3c905c_vp.dev_addr[i], ioaddr + i);
00726 
00727     EL3WINDOW(4);
00728     step = (inb(ioaddr + Wn4_NetDiag) & 0x1e) >> 1;
00729 
00730     if (dev && vci->drv_flags & HAS_CB_FNS) {
00731       unsigned long fn_st_addr;                 /* Cardbus function status space */
00732       unsigned short n;
00733       
00734       fn_st_addr = pci_resource_start (dev, 2);
00735       if (fn_st_addr) {
00736         rt_3c905c_vp.cb_fn_base = ioremap(fn_st_addr, 128);
00737         retval = -ENOMEM;
00738         if (!rt_3c905c_vp.cb_fn_base)
00739           goto free_ring;
00740       }
00741 
00742       EL3WINDOW(2);
00743       
00744       n = inw(ioaddr + Wn2_ResetOptions) & ~0x4010;
00745       if (rt_3c905c_vp.drv_flags & INVERT_LED_PWR)
00746         n |= 0x10;
00747       if (rt_3c905c_vp.drv_flags & INVERT_MII_PWR)
00748         n |= 0x4000;
00749       outw(n, ioaddr + Wn2_ResetOptions);
00750     }
00751 
00752     /* Extract our information from the EEPROM data. */
00753     rt_3c905c_vp.info1 = eeprom[13];
00754     rt_3c905c_vp.info2 = eeprom[15];
00755     rt_3c905c_vp.capabilities = eeprom[16];
00756  
00757     if (rt_3c905c_vp.info1 & 0x8000){
00758       rt_3c905c_vp.full_duplex = 1;
00759       printk(KERN_INFO "Full duplex capable\n");
00760     }
00761 
00762     {
00763       unsigned int config;
00764       EL3WINDOW(3);
00765 
00766       /* This reads the MediaOptions register which shows what physical media */
00767       /* connections are available in the NIC                                 */
00768       rt_3c905c_vp.available_media = inw(ioaddr + Wn3_Options); //Wn3_Options = 8 vp.available_media = 0xa
00769 
00770       if ((rt_3c905c_vp.available_media & 0xff) == 0)           /* Broken 3c916 */
00771         rt_3c905c_vp.available_media = 0x40;
00772 
00773       /* This reads the InternalConfig register which provides a way to set */
00774       /* NIC-specific, non-host-related configuration settings              */ 
00775       config = inl(ioaddr + Wn3_Config); //Wn3_Config = 0
00776 
00777       rt_3c905c_vp.default_media = XCVR(config);
00778       if (rt_3c905c_vp.default_media == XCVR_NWAY)
00779         rt_3c905c_vp.has_nway = 1;
00780       rt_3c905c_vp.autoselect = AUTOSELECT(config);
00781     }
00782 
00783     if (rt_3c905c_vp.media_override != 7) {
00784       rt_3c905c_vp.if_port = rt_3c905c_vp.media_override;
00785     } else
00786       rt_3c905c_vp.if_port = rt_3c905c_vp.default_media;
00787 
00788     if (rt_3c905c_vp.if_port == XCVR_MII || rt_3c905c_vp.if_port == XCVR_NWAY) {
00789       int phy, phy_idx = 0;
00790       EL3WINDOW(4);
00791       mii_preamble_required++;
00792       mii_preamble_required++;
00793       rtl_3COM905C_mdio_read(24, 1);
00794       for (phy = 0; phy < 32 && phy_idx < 1; phy++) {
00795         int mii_status, phyx;
00796         
00797         /*
00798          * For the 3c905CX we look at index 24 first, because it bogusly
00799          * reports an external PHY at all indices
00800          */
00801         if (phy == 0)
00802           phyx = 24;
00803         else if (phy <= 24)
00804           phyx = phy - 1;
00805         else
00806           phyx = phy;
00807         mii_status = rtl_3COM905C_mdio_read(phyx, 1);
00808         if (mii_status  &&  mii_status != 0xffff) {
00809           rt_3c905c_vp.phys[phy_idx++] = phyx;
00810           
00811           if ((mii_status & 0x0040) == 0)
00812             mii_preamble_required++;
00813         }
00814       }         
00815       mii_preamble_required--;
00816       if (phy_idx == 0) {
00817         rt_3c905c_vp.phys[0] = 24;
00818       } else {
00819         rt_3c905c_vp.advertising = rtl_3COM905C_mdio_read(rt_3c905c_vp.phys[0], 4);
00820         if (rt_3c905c_vp.full_duplex) {
00821           /* Only advertise the FD media types. */
00822           rt_3c905c_vp.advertising &= ~0x02A0;
00823           rtl_3COM905C_mdio_write(rt_3c905c_vp.phys[0], 4, rt_3c905c_vp.advertising);
00824         }
00825       }
00826     }
00827     if (rt_3c905c_vp.capabilities & CapBusMaster) {
00828       rt_3c905c_vp.full_bus_master_tx = 1;
00829       
00830       rt_3c905c_vp.full_bus_master_rx = (rt_3c905c_vp.info2 & 1) ? 1 : 2;
00831       rt_3c905c_vp.bus_master = 0;              /* AKPM: vortex only */
00832     }
00833     if (rt_3c905c_vp.pdev && rt_3c905c_vp.enable_wol) {
00834       rt_3c905c_vp.pm_state_valid = 1;
00835       rt_pci_save_state(dev, rt_3c905c_vp.power_state);
00836       rtl_3COM905C_acpi_set_WOL();
00837     }
00838     vortex_open(dev);
00839 
00840   }// if(dev)
00841     
00842   return 0;
00843 
00844  free_ring:
00845 
00846   pci_free_consistent(dev, sizeof(struct boom_rx_desc) * RX_RING_SIZE, rt_3c905c_vp.rx_ring, rt_3c905c_vp.rx_ring_dma);
00847   pci_free_consistent(dev, sizeof(struct boom_tx_desc) * TX_RING_SIZE, rt_3c905c_vp.tx_ring, rt_3c905c_vp.tx_ring_dma);
00848 
00849   return -1;
00850 
00851  free_region:
00852   if (rt_3c905c_vp.must_free_region){
00853     release_region(ioaddr, vci->io_size);
00854     rt_3c905c_vp.must_free_region = 0;
00855   }
00856   printk("vortex_probe1 fails.  Returns %d\n", retval);
00857 
00858   return -1;
00859 }

Here is the call graph for this function:

ssize_t rtl_3COM905C_write struct rtl_file *  filp,
const char *  buf,
size_t  count,
loff_t *  ppos
[static]
 

int vortex_close struct pci_dev *  dev  )  [static]
 

Referenced by rtl_3COM905C_release().

void vortex_down struct pci_dev *  dev  )  [static]
 

Referenced by vortex_close(), and vortex_error().

void vortex_error struct pci_dev *  dev,
int  status
[static]
 

Referenced by boomerang_interrupt().

int vortex_open struct pci_dev *  dev  )  [static]
 

Referenced by rtl_3COM905C_start_up_device().

void vortex_remove_one struct pci_dev *  pdev  )  [static]
 

Referenced by rtl_3COM905C_release().

void vortex_up struct pci_dev *  dev  )  [static]
 

Referenced by vortex_error(), and vortex_open().


Variable Documentation

int max_interrupt_work = 32 [static]
 

Definition at line 559 of file rtl_3c905cx_drv.h.

struct media_table media_tbl[] [static]
 

char mii_preamble_required [static]
 

Definition at line 556 of file rtl_3c905cx_drv.h.

const int mtu = 1500 [static]
 

Definition at line 557 of file rtl_3c905cx_drv.h.

const int rx_copybreak = 200 [static]
 

Definition at line 565 of file rtl_3c905cx_drv.h.

struct vortex_chip_info vortex_info [static]
 


Generated on Wed Jan 14 12:59:10 2004 for RTL-lwIP-0.4 by doxygen 1.3.4