3Com EtherLink XL PCI (3C900-COMBO) drivers anyone?

3Com EtherLink XL PCI (3C900-COMBO) drivers anyone?

Post by Stephanos Piperogl » Fri, 04 Oct 1996 04:00:00



Subject says it all... I desperately want to make my EtherLink XL PCI 3C900
work with my box. Email copies most welcome.

--
 Stephanos Piperoglou aka Sneakabout - http://users.hol.gr/~spip/index.html
       System Operator - Hellas On Line PIPEX GR - http://www.hol.net/
     If my opinions were my employers', they'd be pretty wierd opinions.

                                                    ...oof porothika! (tm)

 
 
 

3Com EtherLink XL PCI (3C900-COMBO) drivers anyone?

Post by Brynn Roge » Fri, 04 Oct 1996 04:00:00




>Subject says it all... I desperately want to make my EtherLink XL PCI 3C900
>work with my box. Email copies most welcome.

I found a driver at:
http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html

Tried it today, it works fine so far.  Actually using the
Boomerang.c file, too.

Brynn
--

            http://sashimi.wwa.com/~brynn  to see my triplets!

 
 
 

3Com EtherLink XL PCI (3C900-COMBO) drivers anyone?

Post by Jacques B. Dimanch » Sat, 05 Oct 1996 04:00:00


On 3 Oct 1996, Stephanos Piperoglou wrote:

> Subject says it all... I desperately want to make my EtherLink XL PCI 3C900
> work with my box. Email copies most welcome.

        If you are using Linux 2.0.*, you can rename this file and place
it in the /usr/src/linux/drivers/net/ directory and replace 3c59x.c.
Recompile your kernel using the 3COM vortex option (last option for 3com),
and it will autodetect it.  Hope this helps.  I tried to email this to you
directly, but for some reason, your email's host was unknown, so I hope
everyone forgives me for posting the 39kb file here.

Sincerely,

        Jacques Dimanche
        Head of Tech Support/Sysad
        Tridel Technologies
        http://www.sysads.com.ph
        Phone: 0-912-329-5440

[ 3c59x.c-2.0 53K ]
/* 3c59x.c: A 3Com 3c590/3c595 "Vortex" ethernet driver for linux. */
/*
        Written 1995 by Donald Becker.

        This software may be used and distributed according to the terms
        of the GNU Public License, incorporated herein by reference.

        This driver is for the 3Com "Vortex" series ethercards.  Members of
        the series include the 3c590 PCI EtherLink III and 3c595-Tx PCI Fast
        EtherLink.

        The author may be reached as bec...@CESDIS.gsfc.nasa.gov, or C/O
        Center of Excellence in Space Data and Information Sciences
           Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
*/

static char *version = "3c59x.c:v0.28c 8/25/96 bec...@cesdis.gsfc.nasa.gov\n";

/* "Knobs" that turn on special features. */
/* Enable the automatic media selection code. */
#define AUTOMEDIA 1

/* Allow the use of bus master transfers instead of programmed-I/O for the
   Tx process.  Bus master transfers are always disabled by default, but
   iff this is set they may be turned on using 'options'. */
#define VORTEX_BUS_MASTER

#include <linux/module.h>

#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
#include <linux/ptrace.h>
#include <linux/errno.h>
#include <linux/in.h>
#include <linux/ioport.h>
#include <linux/malloc.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
#include <linux/bios32.h>
#include <linux/timer.h>
#include <asm/bitops.h>
#include <asm/io.h>

#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>

#define RUN_AT(x) (jiffies + (x))
#define DEV_ALLOC_SKB(len) dev_alloc_skb(len + 2)

#define FREE_IRQ(irqnum, dev) free_irq(irqnum, dev)
#define REQUEST_IRQ(i,h,f,n, instance) request_irq(i,h,f,n, instance)
#define IRQ(irq, dev_id, pt_regs) (irq, dev_id, pt_regs)

/* "Knobs" for adjusting internal parameters. */
/* Put out somewhat more debugging messages. (0 - no msg, 1 minimal msgs). */
#define VORTEX_DEBUG 2

/* Number of times to check to see if the Tx FIFO has space, used in some
   limited cases. */
#define WAIT_TX_AVAIL 200

/* Operational parameter that usually are not changed. */
#define TX_TIMEOUT  40          /* Time in jiffies before concluding Tx hung */

/* The total size is twice that of the original EtherLinkIII series: the
   runtime register window, window 1, is now always mapped in. */
#define VORTEX_TOTAL_SIZE 0x20

#ifdef HAVE_DEVLIST
struct netdev_entry tc59x_drv =
{"Vortex", vortex_pci_probe, VORTEX_TOTAL_SIZE, NULL};
#endif

#ifdef VORTEX_DEBUG
int vortex_debug = VORTEX_DEBUG;
#else
int vortex_debug = 1;
#endif

/* Caution!  These entries must be consistent, with the EISA ones last. */
static int product_ids[] = {0x5900, 0x5950, 0x5951, 0x5952, 0x9000, 0x9001, 0x9050, 0x9051,
                                                                0, 0};
static const char *product_names[] = {
        "3c590 Vortex 10Mbps",
        "3c595 Vortex 100baseTX",
        "3c595 Vortex 100baseT4",
        "3c595 Vortex 100base-MII",
        "3c900 Boomerang 10baseT",
        "3c900 Boomerang 10Mbps/Combo",
        "3c905 Boomerang 100baseTx",
        "3c905 Boomerang 100baseT4",
        "3c592 EISA 10mbps Demon/Vortex",
        "3c597 EISA Fast Demon/Vortex",

};

#define DEMON10_INDEX 8
#define DEMON100_INDEX 9

/*
                                Theory of Operation

I. Board Compatibility

This device driver is designed for the 3Com FastEtherLink, 3Com's PCI to
10/100baseT adapter.  It also works with the 3c590, a similar product
with only a 10Mbs interface.

II. Board-specific settings

PCI bus devices are configured by the system at boot time, so no jumpers
need to be set on the board.  The system BIOS should be set to assign the
PCI INTA signal to an otherwise unused system IRQ line.  While it's
physically possible to shared PCI interrupt lines, the 1.2.0 kernel doesn't
support it.

III. Driver operation

The 3c59x series use an interface that's very similar to the previous 3c5x9
series.  The primary interface is two programmed-I/O FIFOs, with an
alternate single-contiguous-region bus-master transfer (see next).

One extension that is advertised in a very large font is that the adapters
are capable of being bus masters.  Unfortunately this capability is only for
a single contiguous region making it less useful than the list of transfer
regions available with the DEC Tulip or AMD PCnet.  Given the significant
performance impact of taking an extra interrupt for each transfer, using
DMA transfers is a win only with large blocks.

IIIC. Synchronization
The driver runs as two independent, single-threaded flows of control.  One
is the send-packet routine, which enforces single-threaded use by the
dev->tbusy flag.  The other thread is the interrupt handler, which is single
threaded by the hardware and other software.

IV. Notes

Thanks to Cameron Spitzer and Terry Murphy of 3Com for providing both
3c590 and 3c595 boards.
The name "Vortex" is the internal 3Com project name for the PCI ASIC, and
the EISA version is called "Demon".  According to Terry these names come
from rides at the local amusement park.

The new chips support both ethernet (1.5K) and FDDI (4.5K) packet sizes!
This driver only supports ethernet packets because of the skbuff allocation
limit of 4K.
*/

#define TCOM_VENDOR_ID  0x10B7          /* 3Com's manufacturer's ID. */

/* Operational definitions.
   These are not used by other compilation units and thus are not
   exported in a ".h" file.

   First the windows.  There are eight register windows, with the command
   and status registers available in each.
   */
#define EL3WINDOW(win_num) outw(SelectWindow + (win_num), ioaddr + EL3_CMD)
#define EL3_CMD 0x0e
#define EL3_STATUS 0x0e

/* The top five bits written to EL3_CMD are a command, the lower
   11 bits are the parameter, if applicable.
   Note that 11 parameters bits was fine for ethernet, but the new chip
   can handle FDDI length frames (~4500 octets) and now parameters count
   32-bit 'Dwords' rather than octets. */

enum vortex_cmd {
        TotalReset = 0<<11, SelectWindow = 1<<11, StartCoax = 2<<11,
        RxDisable = 3<<11, RxEnable = 4<<11, RxReset = 5<<11, 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,};

/* The SetRxFilter command accepts the following classes: */
enum RxFilter {
        RxStation = 1, RxMulticast = 2, RxBroadcast = 4, RxProm = 8 };

/* Bits in the general status register. */
enum vortex_status {
        IntLatch = 0x0001, AdapterFailure = 0x0002, TxComplete = 0x0004,
        TxAvailable = 0x0008, RxComplete = 0x0010, RxEarly = 0x0020,
        IntReq = 0x0040, StatsFull = 0x0080, DMADone = 1<<8,
        DMAInProgress = 1<<11,                    /* DMA controller is still busy.*/
        CmdInProgress = 1<<12,                    /* EL3_CMD is still busy.*/

};

/* Register window 1 offsets, the window used in normal operation.
   On the Vortex this window is always mapped at offsets 0x10-0x1f. */
enum Window1 {
        TX_FIFO = 0x10,  RX_FIFO = 0x10,  RxErrors = 0x14,
        RxStatus = 0x18,  Timer=0x1A, TxStatus = 0x1B,
        TxFree = 0x1C, /* Remaining free bytes in Tx buffer. */
};

enum Window0 {
        Wn0EepromCmd = 10,              /* Window 0: EEPROM command register. */
        Wn0EepromData = 12,             /* Window 0: EEPROM results register. */
};

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

/* EEPROM locations. */
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 Window3 {                  /* Window 3: MAC/config bits. */
        Wn3_Config=0, Wn3_MAC_Ctrl=6, Wn3_Options=8,

};

union wn3_config {
        int i;
        struct w3_config_fields {
                unsigned int ram_size:3, ram_width:1, ram_speed:2, rom_size:2;
                int pad8:8;
                unsigned int ram_split:2, pad18:2, xcvr:3, pad21:1, autoselect:1;
                int pad24:7;
        } u;

};

enum Window4 {
        Wn4_Media = 0x0A,               /* Window 4: Various transcvr/media bits. */
};

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

enum Window7 {                                  /* Window 7: Bus Master control. */
        Wn7_MasterAddr = 0, Wn7_MasterLen = 6, Wn7_MasterStatus = 12,

};

struct vortex_private {
        char devname[8];                        /* "ethN" string, also for kernel debug. */
        const char *product_name;
        struct device *next_module;
        struct enet_statistics stats;
        struct sk_buff *tx_skb;         /* Packet being eaten by bus master ctrl.  */
        struct timer_list timer;        /* Media selection timer. */
        int options;                            /* User-settable misc. driver options. */
        int last_rx_packets;            /* For media autoselection. */
        unsigned int available_media:8, /* From Wn3_Options */
          media_override:3,                     /* Passed-in media type. */
          default_media:3,                      /* Read from the EEPROM. */
          full_duplex:1, bus_master:1, autoselect:1;

};

/* The action to take with a media selection timer tick.
   Note that we deviate from the 3Com order by checking 10base2 before AUI.
 */
static struct media_table {
  char *name;
  unsigned int media_bits:16,           /* Bits to set in Wn4_Media register. */
        mask:8,                         /* The transceiver-present bit in Wn3_Config.*/
        next:8;                         /* The media type to try next. */
  short wait;                   /* Time before we check media status. */
} media_tbl[] = {

  {     "10baseT",   Media_10TP,0x08, 3 /* 10baseT->10base2 */, (14*HZ)/10},
  { "10Mbs AUI", Media_SQE, 0x20, 8 /* AUI->default */, (1*HZ)/10},
  { "undefined", 0,                   0x80, 0 /* Undefined */, 0},
  { "10base2",
...

read more »

 
 
 

3Com EtherLink XL PCI (3C900-COMBO) drivers anyone?

Post by Stephanos Piperogl » Mon, 07 Oct 1996 04:00:00


Jacques B. Dimanche mumbled the following on comp.os.linux.hardware:

Quote:>> Subject says it all... I desperately want to make my EtherLink XL PCI 3C900
>> work with my box. Email copies most welcome.

>    If you are using Linux 2.0.*, you can rename this file and place
>it in the /usr/src/linux/drivers/net/ directory and replace 3c59x.c.
>Recompile your kernel using the 3COM vortex option (last option for 3com),
>and it will autodetect it.  Hope this helps.  I tried to email this to you
>directly, but for some reason, your email's host was unknown, so I hope
>everyone forgives me for posting the 39kb file here.

Thanks... yeah, I don't have a DNS entry here at the office yet, so
trillian.hol.gr is wrong :) I should set my newsreader accordingly. My

--
 Stephanos Piperoglou aka Sneakabout - http://users.hol.gr/~spip/index.html
       System Operator - Hellas On Line PIPEX GR - http://www.hol.net/
     If my opinions were my employers', they'd be pretty weird opinions.

                                                    ...oof porothika! (tm)

 
 
 

1. Driver for 3COM EtherLink XL (3C900-COMBO) PCI NIC Card

I just got a Pentium 100 and tried installing linux (Slackware 3) on
it.  I'm having major problems getting the 3COM EtherLink XL PCI
network card working.  I've tried using a kernal that has the 3COM
Vortex (3C59X) driver compiled in thinking that might work because the
Vortex is also a PCI card, but it pukes splendidly.  I'm sure none of
the 3COM ISA drivers will do it,

I checked the 3COM Web site, but they only have SCO drivers.  Does
anyone know the whereabout of driver code for the EtherLink XL???


solution here (if I find it.).

Thanks!

Chris

2. 3C501 - Does it *REALLY* work?

3. Driver for 3COM Etherlink XL (3C900-COMBO)?

4. Hello!

5. 3Com EtherLink XL 3C900-COMBO

6. MVS/UNIX Conversion of QSAM

7. Setup of 3COM EtherLink XL 3C900-COMBO

8. which modem is best?

9. 3Com EtherLink XL PCI adapter (3C900 PCI)

10. 3com Etherlink XL PCI COMBO driver

11. HELP: Need driver for 3C900 - EtherLink XL-Combo

12. 3COM PCI XL 3C900 Combo

13. drivers for etherlink III XL 3Com 3C900 card