Commit 83cfb0f5 authored by Linus Torvalds's avatar Linus Torvalds

Import 1.3.92

parent 1d7c9de8
......@@ -162,7 +162,7 @@ Named pipes
Linux's handling of named pipes changed (it now does it The Right Way
instead of the SunOS way ;-). This broke some programs that depended
on the SunOS behavior, most notably SysVinit. If you're running 2.59
or earlier, you will probably get a wierd error on shutdown in which
or earlier, you will probably get a weird error on shutdown in which
your computer shuts down fine but "INIT: error reading initrequest" or
words to that effect scroll across your screen hundreds of times. To
fix, upgrade to
......
......@@ -2213,6 +2213,22 @@ CONFIG_DEC_ELCP
If your card is NOT SMC EtherPower 10/100 PCI (smc9332dst),
you can try the de4x5.c driver.
Digi Intl. RightSwitch support
CONFIG_DGRS
This is support for the Digi International RightSwitch series of
PCI/EISA ethernet switch cards. These include the SE-4 and the SE-6
models. If you have a network card of this type, say Y and read
the Ethernet-HOWTO, available via ftp (user: anonymous) in
sunsite.unc.edu:/pub/Linux/docs/HOWTO. More specific information is
contained in drivers/net/README.dgrs. This driver is also available
as a module ( = code which can be inserted in and removed from the
running kernel whenever you want). If you want to compile it as a
module, say M here and read Documentation/modules.txt as well as
Documentation/networking/net-modules.txt. If you plan to use more
than one network card under linux, read the
Multiple-Ethernet-mini-HOWTO, available from
sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini.
ICL EtherTeam 16i/32 support
CONFIG_ETH16I
If you have a network (ethernet) card of this type, say Y and read
......@@ -2795,7 +2811,8 @@ CONFIG_CYCLADES
to compile this as a module ( = code which can be inserted in and
removed from the running kernel whenever you want), say M here and
read Documentation/modules.txt. If you haven't heard about it, it's
safe to say N.
safe to say N. (As of 1.3.9x kernels, this driver's minor numbers
start at 0 instead of 32.)
Stallion multiport serial support
CONFIG_STALDRV
......
......@@ -554,9 +554,9 @@ number 3).
\begin{devicelist}
\major{19}{}{char }{Cyclades serial card}
\minor{32}{/dev/ttyC0}{First Cyclades port}
\minor{0}{/dev/ttyC0}{First Cyclades port}
\minordots
\minor{63}{/dev/ttyC31}{32nd Cyclades port}
\minor{31}{/dev/ttyC31}{32nd Cyclades port}
\end{devicelist}
\noindent
It would make more sense for these to start at 0...
......@@ -575,9 +575,9 @@ See the Double documentation for an explanation of the ``mirror'' devices.
\begin{devicelist}
\major{20}{}{char }{Cyclades serial card -- alternate devices}
\minor{32}{/dev/cub0}{Callout device corresponding to {\file ttyC0}}
\minor{0}{/dev/cub0}{Callout device corresponding to {\file ttyC0}}
\minordots
\minor{63}{/dev/cub31}{Callout device corresponding to {\file ttyC31}}
\minor{31}{/dev/cub31}{Callout device corresponding to {\file ttyC31}}
\\
\major{ }{}{block}{Hitachi CD-ROM}
\minor{0}{/dev/hitcd}{Hitachi CD-ROM}
......
......@@ -342,9 +342,9 @@ an unreasonable effort.
0 = /dev/sjcd Sanyo CD-ROM
19 char Cyclades serial card
32 = /dev/ttyC0 First Cyclades port
0 = /dev/ttyC0 First Cyclades port
...
63 = /dev/ttyC31 32nd Cyclades port
31 = /dev/ttyC31 32nd Cyclades port
It would make more sense for these to start at 0...
......@@ -360,9 +360,9 @@ an unreasonable effort.
mirror devices.
20 char Cyclades serial card - alternate devices
32 = /dev/cub0 Callout device corresponding to ttyC0
0 = /dev/cub0 Callout device corresponding to ttyC0
...
63 = /dev/cub31 Callout device corresponding to ttyC31
31 = /dev/cub31 Callout device corresponding to ttyC31
block Hitachi CD-ROM (under development)
0 = /dev/hitcd Hitachi CD-ROM
......
......@@ -68,7 +68,7 @@ done
------------------ mkdigidev end
or apply the following patch to /dev/MAKEDEV and do a
make digi
----- MAKDEV Patch
----- MAKEDEV Patch
--- /dev/MAKEDEV Sun Aug 13 15:48:23 1995
+++ MAKEDEV Tue Apr 16 17:53:27 1996
@@ -120,7 +120,7 @@
......
......@@ -52,11 +52,11 @@ Known bug(s)
============
This driver's media detection is very simple and sometimes
it causes serious problem. The driver automatically switches
media when it causes timeout. If you want to speficy or to fix
media when it causes timeout. If you want to specify or to fix
a media;
- Modify TULIP_PORT in tulip.c, line 33.
- Uncommennt the definition of TULIP_FIX_PORT in tulip.c, line 40.
- Uncomment the definition of TULIP_FIX_PORT in tulip.c, line 40.
or
......
......@@ -78,6 +78,13 @@ M: phil@tazenda.demon.co.uk
L: linux-net@vger.rutgers.edu
S: Maintained
DIGI RIGHTSWITCH NETWORK DRIVER
P: Rick Richardson
M: rick@dgii.com
L: linux-net@vger.rutgers.edu
W: http://www.dgii.com/linux/
S: Maintained
APM DRIVER
P: Rik Faith & Stephen Rothwell
M: faith@cs.unc.edu, Stephen.Rothwell@canb.auug.org.au
......@@ -102,6 +109,12 @@ M: Leonard N. Zubkoff <lnz@dandelion.com>
L: linux-scsi@vger.rutgers.edu
S: Maintained
CYCLADES ASYNC MUX DRIVER
P: Marcio Saito
M: Marcio Saito <marcio@cyclades.com>
W: http://www.cyclades.com/
S: Supported
EATA ISA/EISA SCSI DRIVER
P: Dario Ballabio
M: dario@milano.europe.dg.com
......@@ -245,7 +258,7 @@ MOUSE AND MISC DEVICES [GENERAL]
P: Alessandro Rubini
M: rubini@ipvvis.unipv.it
L: linux-kernel@vger.rutgers.edu
S: Mantained
S: Maintained
MENUCONFIG:
P: William Roadcap
......
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 91
SUBLEVEL = 92
ARCH = i386
......
......@@ -68,7 +68,8 @@ else
define_bool CONFIG_ALPHA_NEED_ROUNDING_EMULATION y
fi
if [ "$CONFIG_ALPHA_JENSEN" = "y" ]
if [ "$CONFIG_ALPHA_CABRIOLET" = "y" -o "$CONFIG_ALPHA_AVANTI" = "y" \
-o "$CONFIG_ALPHA_EB64P" = "y" -o "$CONFIG_ALPHA_JENSEN" = "y" ]
then
bool 'Using SRM as bootloader' CONFIG_ALPHA_SRM
fi
......
......@@ -75,6 +75,7 @@ CONFIG_SKB_LARGE=y
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_AX25 is not set
# CONFIG_BRIDGE is not set
# CONFIG_NETLINK is not set
#
......@@ -106,6 +107,7 @@ CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_U14_34F is not set
......@@ -114,6 +116,7 @@ CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_NCR53C7xx=y
CONFIG_SCSI_NCR53C7xx_sync=y
CONFIG_SCSI_NCR53C7xx_FAST=y
# CONFIG_SCSI_NCR53C7xx_DISCONNECT is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_QLOGIC is not set
......@@ -134,6 +137,7 @@ CONFIG_DUMMY=m
# CONFIG_SLIP is not set
# CONFIG_PPP is not set
# CONFIG_STRIP is not set
# CONFIG_WIC is not set
# CONFIG_SCC is not set
# CONFIG_PLIP is not set
# CONFIG_EQUALIZER is not set
......
......@@ -26,7 +26,9 @@
#include <linux/config.h>
#if 0
#define DEBUG_PRINT_DEVS 1
# define DBG_DEVS(args) printk args
#else
# define DBG_DEVS(args)
#endif
#ifndef CONFIG_PCI
......@@ -269,10 +271,8 @@ static void layout_dev(struct pci_dev *dev)
pcibios_write_config_word(bus->number, dev->devfn, PCI_COMMAND,
cmd | PCI_COMMAND_MASTER);
#if DEBUG_PRINT_DEVS
printk("layout_dev: bus %d slot 0x%x VID 0x%x DID 0x%x class 0x%x\n",
bus->number, PCI_SLOT(dev->devfn), dev->vendor, dev->device, dev->class);
#endif
DBG_DEVS(("layout_dev: bus %d slot 0x%x VID 0x%x DID 0x%x class 0x%x\n",
bus->number, PCI_SLOT(dev->devfn), dev->vendor, dev->device, dev->class));
}
......@@ -282,9 +282,7 @@ static void layout_bus(struct pci_bus *bus)
struct pci_bus *child;
struct pci_dev *dev;
#if DEBUG_PRINT_DEVS
printk("layout_bus: starting bus %d\n", bus->number);
#endif
DBG_DEVS(("layout_bus: starting bus %d\n", bus->number));
if (!bus->devices && !bus->children)
return;
......@@ -314,9 +312,7 @@ printk("layout_bus: starting bus %d\n", bus->number);
/*
* Allocate space to each device:
*/
#if DEBUG_PRINT_DEVS
printk("layout_bus: starting bus %d devices\n", bus->number);
#endif
DBG_DEVS(("layout_bus: starting bus %d devices\n", bus->number));
for (dev = bus->devices; dev; dev = dev->sibling) {
if (dev->class >> 16 != PCI_BASE_CLASS_BRIDGE) {
......@@ -326,9 +322,7 @@ printk("layout_bus: starting bus %d devices\n", bus->number);
/*
* Recursively allocate space for all of the sub-buses:
*/
#if DEBUG_PRINT_DEVS
printk("layout_bus: starting bus %d children\n", bus->number);
#endif
DBG_DEVS(("layout_bus: starting bus %d children\n", bus->number));
for (child = bus->children; child; child = child->next) {
layout_bus(child);
......@@ -760,15 +754,17 @@ static inline void sio_fixup(void)
/*
* Go through all devices, fixing up irqs as we see fit:
*/
level_bits = inb(0x4d0) | (inb(0x4d1) << 8);
level_bits = 0;
for (dev = pci_devices; dev; dev = dev->next) {
if (dev->class >> 16 == PCI_BASE_CLASS_BRIDGE)
continue;
dev->irq = 0;
if (dev->bus->number != 0) {
struct pci_dev *curr = dev ;
/* read the pin and do the PCI-PCI bridge
interrupt pin swizzle */
/*
* read the pin and do the PCI-PCI bridge
* interrupt pin swizzle
*/
pcibios_read_config_byte(dev->bus->number, dev->devfn,
PCI_INTERRUPT_PIN, &pin);
/* cope with 0 */
......@@ -790,17 +786,18 @@ static inline void sio_fixup(void)
PCI_INTERRUPT_PIN, &pin);
}
pirq = pirq_tab[slot - 6][pin];
#if DEBUG_PRINT_DEVS
printk("sio_fixup: bus %d slot 0x%x VID 0x%x DID 0x%x int_slot 0x%x int_pin 0x%x, pirq 0x%x\n",
dev->bus->number, PCI_SLOT(dev->devfn), dev->vendor, dev->device, slot, pin, pirq);
#endif
if (pirq < 0) {
if (slot < 6 || slot >= 6 + sizeof(pirq_tab)/sizeof(pirq_tab[0])) {
printk("bios32.sio_fixup: "
"weird, found device %04x:%04x in non-existent slot %d!!\n",
dev->vendor, dev->device, slot);
continue;
}
pirq = pirq_tab[slot - 6][pin];
DBG_DEVS(("sio_fixup: bus %d slot 0x%x VID 0x%x DID 0x%x\n"
" int_slot 0x%x int_pin 0x%x, pirq 0x%x\n",
dev->bus->number, PCI_SLOT(dev->devfn), dev->vendor, dev->device,
slot, pin, pirq));
/*
* if its a VGA, enable its BIOS ROM at C0000
*/
......@@ -812,6 +809,14 @@ printk("sio_fixup: bus %d slot 0x%x VID 0x%x DID 0x%x int_slot 0x%x int_pin
if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
continue; /* for now, displays get no IRQ */
}
if (pirq < 0) {
printk("bios32.sio_fixup: "
"weird, device %04x:%04x coming in on slot %d has no irq line!!\n",
dev->vendor, dev->device, slot);
continue;
}
dev->irq = (route_tab >> (8 * pirq)) & 0xff;
/* must set the PCI IRQs to level triggered */
......@@ -825,8 +830,8 @@ printk("sio_fixup: bus %d slot 0x%x VID 0x%x DID 0x%x int_slot 0x%x int_pin
}
/*
* Now, make all PCI interrupts level sensitive. Notice:
* these registers must be accessed byte-wise. outw() doesn't
* work.
* these registers must be accessed byte-wise. inw()/outw()
* don't work.
*/
level_bits |= (inb(0x4d0) | (inb(0x4d1) << 8));
outb((level_bits >> 0) & 0xff, 0x4d0);
......
......@@ -87,11 +87,11 @@ asmlinkage void do_entIF(unsigned long type, unsigned long a1, unsigned long a2,
case 2: /* gentrap */
/*
* The translation from the gentrap error code into a
* siginfo structure (see /usr/include/sys/siginfo.h)
* is missing as Linux does not presently support the
* siginfo argument that is normally passed to a
* signal handler.
* The exception code should be passed on to the signal
* handler as the second argument. Linux doesn't do that
* yet (also notice that Linux *always* behaves like
* DEC Unix with SA_SIGINFO off; see DEC Unix man page
* for sigaction(2)).
*/
switch ((long) regs.r16) {
case GEN_INTOVF: case GEN_INTDIV: case GEN_FLTOVF:
......
......@@ -18,6 +18,22 @@
#include <asm/system.h>
#include <asm/segment.h>
#include <asm/pgtable.h>
#include <asm/mmu_context.h>
unsigned long asn_cache = ASN_FIRST_VERSION;
#ifndef BROKEN_ASN
/*
* Select a new ASN and reload the context. This is
* not inlined as this expands to a pretty large
* function.
*/
void get_new_asn_and_reload(struct task_struct *tsk, struct mm_struct *mm)
{
get_new_mmu_context(tsk, mm, asn_cache);
reload_context(tsk);
}
#endif
extern void die_if_kernel(char *,struct pt_regs *,long);
......
......@@ -266,6 +266,22 @@ void flush_thread(void)
for (i=0 ; i<8 ; i++)
current->debugreg[i] = 0;
/*
* Forget coprocessor state..
*/
#ifdef __SMP__
if (current->flags & PF_USEDFPU) {
stts();
}
#else
if (last_task_used_math == current) {
last_task_used_math = NULL;
stts();
}
#endif
current->used_math = 0;
current->flags &= ~PF_USEDFPU;
}
void release_thread(struct task_struct *dead_task)
......
......@@ -266,7 +266,7 @@ void math_error(void)
/*
* Give the process a clean slate next time they use
* the FPU (and if they haven't accepted the SIGFP before
* the FPU (and if they haven't accepted the SIGFPE before
* that, it's their problem..)
*/
stts();
......
......@@ -29,6 +29,17 @@ prompt, the option strings of both places are concatenated, the boot
prompt options coming last. That's why there are also options to
restore the default behaviour.
If you use the floppy driver as a module, use the following syntax:
insmod floppy floppy="<options>"
Example:
insmod floppy floppy="daring two_fdc"
Note that in this case 'floppy=' should only be typed out once, and
not once for each option. You need at least modules-1.3.57 for this
method. However, the older environment variable based syntax is still
available: floppy="daring two_fdc" insmod floppy
The floppy related options include:
floppy=<mask>,allowed_drive_mask
......@@ -66,6 +77,16 @@ restore the default behaviour.
floppy=0,thinkpad
Tells the floppy driver that you don't have a Thinkpad.
floppy=omnibook
floppy=nodma
Tells the floppy driver not to use Dma for data transfers.
This is needed on HP Omnibooks, which don't have a workable
DMA channel for the floppy driver.
floppy=dma
Tells the floppy driver that a workable DMA channel is available
(the default).
floppy=<drive>,<type>,cmos
Sets the cmos type of <drive> to <type>. This is mandatory if
you have more than two floppy drives (only two can be
......
This diff is collapsed.
......@@ -507,14 +507,12 @@ static unsigned long current_capacity (ide_drive_t *drive)
return 0;
if (drive->media != ide_disk)
return 0x7fffffff; /* cdrom or tape */
if (!IS_PROMISE_DRIVE) {
drive->select.b.lba = 0;
/* Determine capacity, and use LBA if the drive properly supports it */
if (id != NULL && (id->capability & 2) && lba_capacity_is_ok(id)) {
if (id->lba_capacity >= capacity) {
capacity = id->lba_capacity;
drive->select.b.lba = 1;
}
drive->select.b.lba = 0;
/* Determine capacity, and use LBA if the drive properly supports it */
if (id != NULL && (id->capability & 2) && lba_capacity_is_ok(id)) {
if (id->lba_capacity >= capacity) {
capacity = id->lba_capacity;
drive->select.b.lba = 1;
}
}
return (capacity - drive->sect0);
......@@ -1248,10 +1246,22 @@ static inline void do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned
{
ide_hwif_t *hwif = HWIF(drive);
unsigned short io_base = hwif->io_base;
#ifdef CONFIG_BLK_DEV_PROMISE
int use_promise_io = 0;
#endif /* CONFIG_BLK_DEV_PROMISE */
OUT_BYTE(drive->ctl,IDE_CONTROL_REG);
OUT_BYTE(rq->nr_sectors,io_base+IDE_NSECTOR_OFFSET);
#ifdef CONFIG_BLK_DEV_PROMISE
if (IS_PROMISE_DRIVE) {
if (hwif->is_promise2 || rq->cmd == READ) {
use_promise_io = 1;
}
}
if (drive->select.b.lba || use_promise_io) {
#else /* !CONFIG_BLK_DEV_PROMISE */
if (drive->select.b.lba) {
#endif /* CONFIG_BLK_DEV_PROMISE */
#ifdef DEBUG
printk("%s: %sing: LBAsect=%ld, sectors=%ld, buffer=0x%08lx\n",
drive->name, (rq->cmd==READ)?"read":"writ",
......@@ -1278,11 +1288,9 @@ static inline void do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned
#endif
}
#ifdef CONFIG_BLK_DEV_PROMISE
if (IS_PROMISE_DRIVE) {
if (hwif->is_promise2 || rq->cmd == READ) {
do_promise_io (drive, rq);
return;
}
if (use_promise_io) {
do_promise_io (drive, rq);
return;
}
#endif /* CONFIG_BLK_DEV_PROMISE */
if (rq->cmd == READ) {
......@@ -2533,8 +2541,6 @@ static void probe_hwif (ide_hwif_t *hwif)
ide_drive_t *drive = &hwif->drives[unit];
(void) probe_for_drive (drive);
if (drive->present && drive->media == ide_disk) {
if (IS_PROMISE_DRIVE)
drive->select.b.lba = 1; /* required by promise driver */
if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
printk("%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n",
drive->name, drive->head);
......
/*
* linux/drivers/block/promise.c Version 0.04 Mar 15, 1996
/* -*- linux-c -*-
* linux/drivers/block/promise.c Version 0.07 Mar 26, 1996
*
* Copyright (C) 1995-1996 Linus Torvalds & authors (see below)
*/
......@@ -26,16 +26,11 @@
* Changed initialization strategy
* Version 0.05 Kernel integration. -ml
* Version 0.06 Ooops. Add hwgroup to direct call of ide_intr() -ml
* Version 0.07 Added support for DC4030 variants
* Secondary interface autodetection
*/
/*
* From: 'peterd@pnd-pc.demon.co.uk'
*
* Here's another version of the Promise driver for DC4030VL2 cards.
* There have been few substantive changes to the code, but it is now in
* line with the more recent ide.c changes, and is somewhat more configurable.
*
* Once you've compiled it in, you'll have to also enable the interface
* setup routine from the kernel command line, as in
*
......@@ -155,12 +150,14 @@ int init_dc4030 (void)
}
ide_input_data(drive,&ident,SECTOR_WORDS);
if(ident.id[1] != 'P' || ident.id[0] != 'T') {
return 0;
return 0;
}
printk("%s: Promise caching controller, ",hwif->name);
switch(ident.type) {
case 0x43: printk("DC4030VL, "); break;
default: printk("unknown - type 0x%02x - please report!, "
case 0x43: printk("DC4030VL-2, "); break;
case 0x41: printk("DC4030VL-1, "); break;
case 0x40: printk("DC4030VL, "); break;
default: printk("unknown - type 0x%02x - please report!\n"
,ident.type);
return 0;
}
......@@ -173,16 +170,23 @@ int init_dc4030 (void)
printk("on IRQ %d\n",hwif->irq);
hwif->chipset = second_hwif->chipset = ide_promise;
hwif->selectproc = second_hwif->selectproc = &promise_selectproc;
/* Shift the remaining interfaces down by one */
for (i=MAX_HWIFS-1 ; i > hwif->index+1 ; i--) {
printk("Shifting i/f %d values to i/f %d\n",i-1,i);
ide_hwifs[i].io_base = ide_hwifs[i-1].io_base;
ide_hwifs[i].ctl_port = ide_hwifs[i-1].ctl_port;
ide_hwifs[i].noprobe = ide_hwifs[i-1].noprobe;
}
second_hwif->is_promise2 = 1;
second_hwif->io_base = hwif->io_base;
second_hwif->ctl_port = hwif->ctl_port;
second_hwif->irq = hwif->irq;
for (i=0; i<2 ; i++) {
hwif->drives[i].io_32bit = 3;
hwif->drives[i].io_32bit = 3;
second_hwif->drives[i].io_32bit = 3;
if(!ident.current_tm[i+2].cyl) second_hwif->drives[i].noprobe=1;
}
return 1;
return 1;
}
/*
......@@ -298,9 +302,9 @@ static void promise_write (ide_drive_t *drive)
}
/*
* do_promise_rw_disk() issues READ and WRITE commands to a
* disk on a promise controller, using LBA to address sectors. It also
* takes care of issuing special DRIVE_CMDs.
* do_promise_io() is called from do_rw_disk, having had the block number
* already set up. It issues a READ or WRITE command to the Promise
* controller, assuming LBA has been used to set up the block number.
*/
void do_promise_io (ide_drive_t *drive, struct request *rq)
{
......@@ -311,27 +315,30 @@ void do_promise_io (ide_drive_t *drive, struct request *rq)
if (rq->cmd == READ) {
ide_set_handler(drive, &promise_read_intr, WAIT_CMD);
OUT_BYTE(PROMISE_READ, io_base+IDE_COMMAND_OFFSET);
/* The card's behaviour is odd at this point. If the data is
available, DRQ will be true, and no interrupt will be
generated by the card. If this is the case, we need to simulate
an interrupt. Ugh! Otherwise, if an interrupt will occur, bit0
of the SELECT register will be high, so we can just return and
be interrupted.*/
/* The card's behaviour is odd at this point. If the data is
available, DRQ will be true, and no interrupt will be
generated by the card. If this is the case, we need to simulate
an interrupt. Ugh! Otherwise, if an interrupt will occur, bit0
of the SELECT register will be high, so we can just return and
be interrupted.*/
timeout = jiffies + HZ/20; /* 50ms wait */
do {
stat=GET_STAT();
if(stat & DRQ_STAT) {
unsigned long flags;
/* unsigned long flags;
save_flags(flags);
cli();
disable_irq(HWIF(drive)->irq);
*/
ide_intr(HWIF(drive)->irq,HWGROUP(drive),NULL);
enable_irq(HWIF(drive)->irq);
/* enable_irq(HWIF(drive)->irq);
restore_flags(flags);
*/
return;
}
if(IN_BYTE(io_base+IDE_SELECT_OFFSET) & 0x01)
return;
udelay(1);
} while (jiffies < timeout);
printk("%s: reading: No DRQ and not waiting - Odd!\n",
drive->name);
......
Mon Apr 1 10:22:01 1996 <tytso@rsts-11.mit.edu>
* serial.c (rs_close): Cleaned up modularization changes.
Remove code which forced line discpline back to N_TTY
Remove code which forced line discipline back to N_TTY
this is done in the tty upper layers, and there's no
reason to do it here. (Making this change also
removed the requirement that the serial module access
......
NOTE: Earlier versions of the driver mapped ttyS0 to minor
number 32, but this is changed in this distribution. Port ttyS0
now maps to minor number 0.) The following patch should be
applied to /dev/MAKEDEV and the script should then be re-run
to create new entries for the ports.
--------------------------- CUT HERE ----------------------------
--- /dev/MAKEDEV Sun Aug 20 10:51:55 1995
+++ MAKEDEV.new Fri Apr 19 06:48:12 1996
@@ -206,8 +206,8 @@
major2=`Major cub` || continue
for i in 0 1 2 3 4 5 6 7 # 8 9 10 11 12 13 14 15
do
- makedev ttyC$i c $major1 `expr 32 + $i` $tty
- makedev cub$i c $major2 `expr 32 + $i` $dialout
+ makedev ttyC$i c $major1 $i $tty
+ makedev cub$i c $major2 $i $dialout
done
;;
par[0-2])
--------------------------- CUT HERE ----------------------------
This diff is collapsed.
......@@ -90,5 +90,5 @@ PLIP_OPTS =
DEPCA_OPTS =
EWRK3_OPTS =
DE4X5_OPTS = -DDE4X5_AUTOSENSE=AUTO
ELP_OPTS = -DELP_DEBUG=1 -DELP_NEED_HARD_RESET=0
ELP_OPTS =
TULIP_OPTS =
......@@ -80,6 +80,7 @@ if [ "$CONFIG_NET_EISA" = "y" ]; then
tristate 'Apricot Xen-II on board ethernet' CONFIG_APRICOT
tristate 'DE425, DE434, DE435, DE500 support' CONFIG_DE4X5
tristate 'DECchip Tulip (dc21x4x) PCI support' CONFIG_DEC_ELCP
tristate 'Digi Intl. RightSwitch SE-X support' CONFIG_DGRS
# bool 'LPL T100V 100Mbs support' CONFIG_LPL_T100
# bool 'PCnet32 (32 bit VLB and PCI LANCE) support' CONFIG_PCNET32
bool 'Zenith Z-Note support' CONFIG_ZNET
......
......@@ -462,6 +462,14 @@ else
endif
endif
ifeq ($(CONFIG_DGRS),y)
L_OBJS += dgrs.o
else
ifeq ($(CONFIG_DGRS),m)
M_OBJS += dgrs.o
endif
endif
include $(TOPDIR)/Rules.make
clean:
......@@ -526,5 +534,7 @@ sdla.o: sdla.c CONFIG
dlci.o: dlci.c CONFIG
dgrs.o: dgrs.c dgrs.h CONFIG
$(CC) $(CPPFLAGS) $(CFLAGS) -c $<
tulip.o: tulip.c CONFIG
$(CC) $(CPPFLAGS) $(CFLAGS) $(TULIP_OPTS) -c $<
The Digi Intl. RightSwitch SE-X (dgrs) Device Driver
This is a Linux driver for the Digi International RightSwitch SE-X
EISA and PCI boards. These are 4 (EISA) or 6 (PCI) port ethernet
switches and a NIC combined into a single board. This driver can
be compiled into the kernel statically or as a loadable module.
There is also a companion management tool, called "xrightswitch".
The management tool lets you watch the performance graphically,
as well as set the SNMP agent IP and IPX addresses, IEEE Spanning
Tree, and Aging time. These can also be set from the command line
when the driver is loaded. The command line options are:
debug=NNN Debug printing level
dma=0/1 Disable/Enable DMA on PCI card
spantree=0/1 Disable/Enable IEEE spanning tree
hashexpire=NNN Change address aging time (default 300 seconds)
ipaddr=A,B,C,D Set SNMP agent IP address i.e. 199,86,8,221
ipxnet=NNN Set SNMP agent IPX network number
There is also a tool for setting up input and output packet filters
on each port, called "dgrsfilt".
Both the management tool and the filtering tool are available
separately from the following FTP site:
ftp://ftp.dgii.com/drivers/rightswitch/linux/
Copyright 1995-1996 Digi International Inc.
This software may be used and distributed according to the terms
of the GNU General Public License, incorporated herein by reference.
For information on purchasing a RightSwitch SE-4 or SE-6
board, please contact Digi's sales department at 1-612-912-3444
or 1-800-DIGIBRD. Outside the U.S., please check our Web page at:
http://www.dgii.com
for sales offices worldwide. Tech support is also available through
the channels listed on the Web site, although as long as I am
employed on networking products at Digi I will be happy to provide
any bug fixes that may be needed.
-Rick Richardson, rick@dgii.com
......@@ -71,6 +71,7 @@ extern int ni65_probe(struct device *);
extern int SK_init(struct device *);
extern int seeq8005_probe(struct device *);
extern int tc59x_probe(struct device *);
extern int dgrs_probe(struct device *);
extern int smc_init( struct device * );
/* Detachable devices ("pocket adaptors") */
......@@ -87,6 +88,9 @@ ethif_probe(struct device *dev)
return 1; /* ENXIO */
if (1
#ifdef CONFIG_DGRS
&& dgrs_probe(dev)
#endif
#if defined(CONFIG_VORTEX)
&& tc59x_probe(dev)
#endif
......
This diff is collapsed.
/*
* ioctl's for the Digi Intl. RightSwitch
*
* These network driver ioctl's are a bit obtuse compared to the usual
* ioctl's for a "normal" device driver. Hey, I didn't invent it.
*
* Typical use:
*
* struct ifreq ifr;
* DGRS_IOCTL ioc;
* int x;
*
* strcpy(ifr.ifr_name, "eth1");
* ifr.ifr_data = (caddr_t) &ioc;
* ioc.cmd = DGRS_GETMEM;
* ioc.len = sizeof(x);
* ioc.data = (caddr_t) &x;
* rc = ioctl(fd, DGRSIOCTL, &ifr);
* printf("rc=%d mem=%x\n", rc, x);
*
*/
#include <linux/sockios.h>
#define DGRSIOCTL SIOCDEVPRIVATE
typedef struct dgrs_ioctl {
unsigned short cmd; /* Command to run */
unsigned short len; /* Length of the data buffer */
unsigned char *data; /* Pointer to the data buffer */
unsigned short port; /* port number for command, if needed */
unsigned short filter; /* filter number for command, if needed */
} DGRS_IOCTL;
/*
* Commands for the driver
*/
#define DGRS_GETMEM 0x01 /* Get the dual port memory address */
#define DGRS_SETFILTER 0x02 /* Set a filter */
/*
* For declaring structures shared with assembly routines
*
* $Id: asstruct.h,v 1.1.1.1 1994/10/23 05:08:32 rick Exp $
*/
#if ASSEMBLER
# define MO(t,a) (a)
# define VMO(t,a) (a)
# define BEGIN_STRUCT(x) _Off=0
# define S1A(t,x,n) _Off=(_Off+0)&~0; x=_Off; _Off=_Off+(1*n)
# define S2A(t,x,n) _Off=(_Off+1)&~1; x=_Off; _Off=_Off+(2*n)
# define S4A(t,x,n) _Off=(_Off+3)&~3; x=_Off; _Off=_Off+(4*n)
# define WORD(x) _Off=(_Off+3)&~3; x=_Off; _Off=_Off+4
# define WORDA(x,n) _Off=(_Off+3)&~3; x=_Off; _Off=_Off+(4*n)
# define VWORD(x) _Off=(_Off+3)&~3; x=_Off; _Off=_Off+4
# define S1(t,x) _Off=(_Off+0)&~0; x=_Off; _Off=_Off+1
# define S2(t,x) _Off=(_Off+1)&~1; x=_Off; _Off=_Off+2
# define S4(t,x) _Off=(_Off+3)&~3; x=_Off; _Off=_Off+4
# define END_STRUCT(x) _Off=(_Off+3)&~3; x=_Off
#else /* C */
#define VMO(t,a) (*(volatile t *)(a))
# define BEGIN_STRUCT(x) struct x {
# define S1(t,x) t x ;
# define S1A(t,x,n) t x[n] ;
# define S2(t,x) t x ;
# define S2A(t,x,n) t x[n] ;
# define S4(t,x) t x ;
# define S4A(t,x,n) t x[n] ;
# define END_STRUCT(x) } ;
#endif
/*
* The bios low-memory structure
*
* Some of the variables in here can be used to set parameters that
* are stored in NVRAM and will retain their old values the next time
* the card is brought up. To use the values stored in NVRAM, the
* parameter should be set to "all ones". This tells the firmware to
* use the NVRAM value or a suitable default. The value that is used
* will be stored back into this structure by the firmware. If the
* value of the variable is not "all ones", then that value will be
* used and will be stored into NVRAM if it isn't already there.
* The variables this applies to are the following:
* Variable Set to: Gets default of:
* bc_hashexpire -1 300 (5 minutes)
* bc_spantree -1 1 (spanning tree on)
* bc_ipaddr FF:FF:FF:FF 0 (no IP address)
* bc_ipxnet FF:FF:FF:FF 0 (no IPX net)
*
* Some variables MUST have their value set after the firmware
* is loaded onto the board, but before the processor is released.
* These are:
* bc_host 0 means no host "port", run as standalone switch.
* 1 means there is a host "port" (normal).
* bc_nowait
* bc_hostarea_len
* bc_filter_len
*
*/
BEGIN_STRUCT(bios_comm)
S4(ulong, bc_intflag) /* Count of all interrupts */
S4(ulong, bc_lbolt) /* Count of timer interrupts */
S4(ulong, bc_maincnt) /* Count of main loops */
S4(ulong, bc_hashcnt) /* Count of entries in hash table */
S4A(ulong, bc_cnt, 8) /* Misc counters, for debugging */
S4A(ulong, bc_flag, 8) /* Misc flags, for debugging */
S4(ulong, bc_memsize) /* Size of memory */
S4(ulong, bc_dcache) /* Size of working dcache */
S4(ulong, bc_icache) /* Size of working icache */
S4(long, bc_status) /* Firmware status */
S1A(char, bc_file, 8) /* File name of assertion failure */
S4(ulong, bc_line) /* Line # of assertion failure */
S4(uchar *, bc_ramstart)
S4(uchar *, bc_ramend)
S4(uchar *, bc_heapstart) /* Start of heap (end of loaded memory) */
S4(uchar *, bc_heapend) /* End of heap */
/* Configurable Parameters */
S4(long, bc_host) /* 1=Host Port, 0=No Host Port, -1=Test Mode */
S4(long, bc_nowait) /* Don't wait for 2host circ buffer to empty*/
S4(long, bc_150ohm) /* 0 == 100 ohm UTP, 1 == 150 ohm STP */
S4(long, bc_squelch) /* 0 == normal squelch, 1 == reduced squelch */
S4(ulong, bc_hashexpire) /* Expiry time in seconds for hash table */
S4(long, bc_spantree) /* 1 == enable IEEE spanning tree */
S2A(ushort, bc_eaddr, 3) /* New ether address */
S2(ushort, bc_dummy1) /* padding for DOS compilers */
/* Various debugging aids */
S4(long, bc_debug) /* Debugging is turned on */
S4(long, bc_spew) /* Spew data on port 4 for bs_spew seconds */
S4(long, bc_spewlen) /* Length of spewed data packets */
S4(long, bc_maxrfd) /* If != 0, max number of RFD's to allocate */
S4(long, bc_maxrbd) /* If != 0, max number of RBD's to allocate */
/* Circular buffers for messages to/from host */
S4(ulong, bc_2host_head)
S4(ulong, bc_2host_tail)
S4(ulong, bc_2host_mask)
S1A(char, bc_2host, 0x200) /* Circ buff to host */
S4(ulong, bc_2idt_head)
S4(ulong, bc_2idt_tail)
S4(ulong, bc_2idt_mask)
S1A(char, bc_2idt, 0x200) /* Circ buff to idt */
/* Pointers to structures for driver access */
S4(uchar *, bc_port) /* pointer to Port[] structures */
S4(long, bc_nports) /* Number of ports */
S4(long, bc_portlen) /* sizeof(PORT) */
S4(uchar *, bc_hash) /* Pointer to hash table */
S4(long, bc_hashlen) /* sizeof(Table) */
/* SNMP agent addresses */
S1A(uchar, bc_ipaddr, 4) /* IP address for SNMP */
S1A(uchar, bc_ipxnet, 4) /* IPX net address for SNMP */
S4(long, bc_nohostintr) /* Do not cause periodic host interrupts */
S4(uchar *, bc_dmaaddr) /* Physical addr of host DMA buf for diags */
S4(ulong, bc_dmalen) /* Length of DMA buffer 0..2048 */
/*
* Board memory allocated on startup for use by host, usually
* for the purposes of creating DMA chain descriptors. The
* "len" must be set before the processor is released. The
* address of the area is returned in bc_hostarea. The area
* is guaranteed to be aligned on a 16 byte boundary.
*/
S4(ulong, bc_hostarea_len) /* RW: Number of bytes to allocate */
S4(uchar *, bc_hostarea) /* RO: Address of allocated memory */
/*
* Variables for communicating filters into the board
*/
S4(ulong *, bc_filter_area) /* RO: Space to put filter into */
S4(ulong, bc_filter_area_len) /* RO: Length of area, in bytes */
S4(long, bc_filter_cmd) /* RW: Filter command, see below */
S4(ulong, bc_filter_len) /* RW: Actual length of filter */
S4(ulong, bc_filter_port) /* RW: Port # for filter 0..6 */
S4(ulong, bc_filter_num) /* RW: Filter #, 0=input, 1=output */
S4A(long, bc_spare, 3) /* spares */
END_STRUCT(bios_comm)
#define bc VMO(struct bios_comm, 0xa3000100)
/*
* bc_status values
*/
#define BC_INIT 0
#define BC_RUN 100
/*
* Values for spew (debugging)
*/
#define BC_SPEW_ENABLE 0x80000000
/*
* filter commands
*/
#define BC_FILTER_ERR -1
#define BC_FILTER_OK 0
#define BC_FILTER_SET 1
#define BC_FILTER_CLR 2
This diff is collapsed.
/************************************************************************/
/* */
/* es4h.h: Hardware definition of the ES/4h Ethernet Switch, from */
/* both the host and the 3051's point of view. */
/* NOTE: this name is a misnomer now that there is a PCI */
/* board. Everything that says "es4h" should really be */
/* "se4". But we'll keep the old name for now. */
/* */
/* $Id: es4h.h,v 1.9 1996/04/18 02:58:25 rick Exp $ */
/* */
/************************************************************************/
/************************************************************************/
/* */
/* EISA I/O Registers. These are located at 0x1000 * slot-number */
/* plus the indicated address. I.E. 0x4000-0x4009 for slot 4. */
/* */
/************************************************************************/
#define ES4H_MANUFmsb 0x00 /* Read-only */
#define ES4H_MANUFlsb 0x01 /* Read-only */
# define ES4H_MANUF_CODE 0x1049 /* = "DBI" */
#define ES4H_PRODUCT 0x02 /* Read-only */
# define ES4H_PRODUCT_CODE 0x0A
# define EPC_PRODUCT_CODE 0x03
#define ES4H_REVISION 0x03 /* Read-only */
# define ES4H_REVISION_CODE 0x01
#define ES4H_EC 0x04 /* EISA Control */
# define ES4H_EC_RESET 0x04 /* WO, EISA reset */
# define ES4H_EC_ENABLE 0x01 /* RW, EISA enable - set to */
/* 1 before memory enable */
#define ES4H_PC 0x05 /* Processor Control */
# define ES4H_PC_RESET 0x04 /* RW, 3051 reset */
# define ES4H_PC_INT 0x08 /* WO, assert 3051 intr. 3 */
#define ES4H_MW 0x06 /* Memory Window select and enable */
# define ES4H_MW_ENABLE 0x80 /* WO, enable memory */
# define ES4H_MW_SELECT_MASK 0x1f /* WO, 32k window selected */
#define ES4H_IS 0x07 /* Interrupt, addr select */
# define ES4H_IS_INTMASK 0x07 /* WO, interrupt select */
# define ES4H_IS_INTOFF 0x00 /* No IRQ */
# define ES4H_IS_INT3 0x01 /* IRQ 3 */
# define ES4H_IS_INT5 0x02 /* IRQ 5 */
# define ES4H_IS_INT7 0x03 /* IRQ 7 */
# define ES4H_IS_INT10 0x04 /* IRQ 10 */
# define ES4H_IS_INT11 0x05 /* IRQ 11 */
# define ES4H_IS_INT12 0x06 /* IRQ 12 */
# define ES4H_IS_INT15 0x07 /* IRQ 15 */
# define ES4H_IS_INTACK 0x10 /* WO, interrupt ack */
# define ES4H_IS_INTPEND 0x10 /* RO, interrupt pending */
# define ES4H_IS_LINEAR 0x40 /* WO, no memory windowing */
# define ES4H_IS_AS15 0x80 /* RW, address select bit 15 */
#define ES4H_AS_23_16 0x08 /* Address select bits 23-16 */
#define ES4H_AS_31_24 0x09 /* Address select bits 31-24 */
#define ES4H_IO_MAX 0x09 /* Size of I/O space */
/*
* PCI
*/
#define SE6_RESET PLX_USEROUT
/************************************************************************/
/* */
/* 3051 Memory Map */
/* */
/* Note: 3051 has 4K I-cache, 2K D-cache. 1 cycle is 50 nsec. */
/* */
/************************************************************************/
#define SE4_NPORTS 4 /* # of ethernet ports */
#define SE6_NPORTS 6 /* # of ethernet ports */
#define SE_NPORTS 6 /* Max # of ethernet ports */
#define ES4H_RAM_BASE 0x83000000 /* Base address of RAM */
#define ES4H_RAM_SIZE 0x00200000 /* Size of RAM (2MB) */
#define ES4H_RAM_INTBASE 0x83800000 /* Base of int-on-write RAM */
/* a.k.a. PKT RAM */
/* Ethernet controllers */
/* See: i82596.h */
#define ES4H_ETHER0_PORT 0xA2000000
#define ES4H_ETHER0_CMD 0xA2000100
#define ES4H_ETHER1_PORT 0xA2000200
#define ES4H_ETHER1_CMD 0xA2000300
#define ES4H_ETHER2_PORT 0xA2000400
#define ES4H_ETHER2_CMD 0xA2000500
#define ES4H_ETHER3_PORT 0xA2000600
#define ES4H_ETHER3_CMD 0xA2000700
#define ES4H_ETHER4_PORT 0xA2000800 /* RS SE-6 only */
#define ES4H_ETHER4_CMD 0xA2000900 /* RS SE-6 only */
#define ES4H_ETHER5_PORT 0xA2000A00 /* RS SE-6 only */
#define ES4H_ETHER5_CMD 0xA2000B00 /* RS SE-6 only */
#define ES4H_I8254 0xA2040000 /* 82C54 timers */
/* See: i8254.h */
#define SE4_I8254_HZ (23000000/4) /* EISA clock input freq. */
#define SE4_IDT_HZ (46000000) /* EISA CPU freq. */
#define SE6_I8254_HZ (20000000/4) /* PCI clock input freq. */
#define SE6_IDT_HZ (50000000) /* PCI CPU freq. */
#define ES4H_I8254_HZ (23000000/4) /* EISA clock input freq. */
#define ES4H_GPP 0xA2050000 /* General purpose port */
/*
* SE-4 (EISA) GPP bits
*/
# define ES4H_GPP_C0_100 0x0001 /* WO, Chan 0: 100 ohm TP */
# define ES4H_GPP_C0_SQE 0x0002 /* WO, Chan 0: normal squelch */
# define ES4H_GPP_C1_100 0x0004 /* WO, Chan 1: 100 ohm TP */
# define ES4H_GPP_C1_SQE 0x0008 /* WO, Chan 1: normal squelch */
# define ES4H_GPP_C2_100 0x0010 /* WO, Chan 2: 100 ohm TP */
# define ES4H_GPP_C2_SQE 0x0020 /* WO, Chan 2: normal squelch */
# define ES4H_GPP_C3_100 0x0040 /* WO, Chan 3: 100 ohm TP */
# define ES4H_GPP_C3_SQE 0x0080 /* WO, Chan 3: normal squelch */
# define ES4H_GPP_SQE 0x00AA /* WO, All: normal squelch */
# define ES4H_GPP_100 0x0055 /* WO, All: 100 ohm TP */
# define ES4H_GPP_HOSTINT 0x0100 /* RO, cause intr. to host */
/* Hold high > 250 nsec */
# define SE4_GPP_EED 0x0200 /* RW, EEPROM data bit */
# define SE4_GPP_EECS 0x0400 /* RW, EEPROM chip select */
# define SE4_GPP_EECK 0x0800 /* RW, EEPROM clock */
/*
* SE-6 (PCI) GPP bits
*/
# define SE6_GPP_EED 0x0001 /* RW, EEPROM data bit */
# define SE6_GPP_EECS 0x0002 /* RW, EEPROM chip select */
# define SE6_GPP_EECK 0x0004 /* RW, EEPROM clock */
#define ES4H_INTVEC 0xA2060000 /* RO: Interrupt Vector */
# define ES4H_IV_DMA0 0x01 /* Chan 0 DMA interrupt */
# define ES4H_IV_PKT0 0x02 /* Chan 0 PKT interrupt */
# define ES4H_IV_DMA1 0x04 /* Chan 1 DMA interrupt */
# define ES4H_IV_PKT1 0x08 /* Chan 1 PKT interrupt */
# define ES4H_IV_DMA2 0x10 /* Chan 2 DMA interrupt */
# define ES4H_IV_PKT2 0x20 /* Chan 2 PKT interrupt */
# define ES4H_IV_DMA3 0x40 /* Chan 3 DMA interrupt */
# define ES4H_IV_PKT3 0x80 /* Chan 3 PKT interrupt */
#define ES4H_INTACK 0xA2060000 /* WO: Interrupt Ack */
# define ES4H_INTACK_8254 0x01 /* Real Time Clock (int 0) */
# define ES4H_INTACK_HOST 0x02 /* Host (int 1) */
# define ES4H_INTACK_PKT0 0x04 /* Chan 0 Pkt (int 2) */
# define ES4H_INTACK_PKT1 0x08 /* Chan 1 Pkt (int 3) */
# define ES4H_INTACK_PKT2 0x10 /* Chan 2 Pkt (int 4) */
# define ES4H_INTACK_PKT3 0x20 /* Chan 3 Pkt (int 5) */
#define SE6_PLX 0xA2070000 /* PLX 9060, SE-6 (PCI) only */
/* see plx9060.h */
#define SE6_PCI_VENDOR_ID 0x114F /* Digi PCI vendor ID */
#define SE6_PCI_DEVICE_ID 0x0003 /* RS SE-6 device ID */
#define SE6_PCI_ID ((SE6_PCI_DEVICE_ID<<16) | SE6_PCI_VENDOR_ID)
/*
* IDT Interrupts
*/
#define ES4H_INT_8254 IDT_INT0
#define ES4H_INT_HOST IDT_INT1
#define ES4H_INT_ETHER0 IDT_INT2
#define ES4H_INT_ETHER1 IDT_INT3
#define ES4H_INT_ETHER2 IDT_INT4
#define ES4H_INT_ETHER3 IDT_INT5
/*
* Because there are differences between the SE-4 and the SE-6,
* we assume that the following globals will be set up at init
* time in main.c to containt the appropriate constants from above
*/
extern ushort Gpp; /* Softcopy of GPP register */
extern ushort EEck; /* Clock bit */
extern ushort EEcs; /* CS bit */
extern ushort EEd; /* Data bit */
extern ulong I8254_Hz; /* i8254 input frequency */
extern ulong IDT_Hz; /* IDT CPU frequency */
extern int Nports; /* Number of ethernet controllers */
extern int Nchan; /* Nports+1 */
/*
* A filtering function
*/
typedef int (FILTER_FUNC)(uchar *pktp, int pktlen, ulong *scratch);
#define NFILTERS 2
/*
* The per port structure
*/
typedef struct
{
int chan; /* Channel number (0-3) */
ulong portaddr; /* address of 596 port register */
volatile ulong *ca; /* address of 596 chan attention */
ulong intmask; /* Interrupt mask for this port */
ulong intack; /* Ack bit for this port */
uchar ethaddr[6]; /* Ethernet address of this port */
int is_promisc; /* Port is promiscuous */
int debug; /* Debugging turned on */
I596_ISCP *iscpp; /* Uncached ISCP pointer */
I596_SCP *scpp; /* Uncached SCP pointer */
I596_SCB *scbp; /* Uncached SCB pointer */
I596_ISCP iscp;
I596_SCB scb;
/* Command Queue */
I596_CB *cb0;
I596_CB *cbN;
I596_CB *cb_head;
I596_CB *cb_tail;
/* Receive Queue */
I596_RFD *rfd0;
I596_RFD *rfdN;
I596_RFD *rfd_head;
I596_RFD *rfd_tail;
/* Receive Buffers */
I596_RBD *rbd0;
I596_RBD *rbdN;
I596_RBD *rbd_head;
I596_RBD *rbd_tail;
int buf_size; /* Size of an RBD buffer */
int buf_cnt; /* Total RBD's allocated */
/* Rx Statistics */
ulong cnt_rx_cnt; /* Total packets rcvd, good and bad */
ulong cnt_rx_good; /* Total good packets rcvd */
ulong cnt_rx_bad; /* Total of all bad packets rcvd */
/* Subtotals can be gotten from SCB */
ulong cnt_rx_nores; /* No resources */
ulong cnt_rx_bytes; /* Total bytes rcvd */
/* Tx Statistics */
ulong cnt_tx_queued;
ulong cnt_tx_done;
ulong cnt_tx_freed;
ulong cnt_tx_nores; /* No resources */
ulong cnt_tx_bad;
ulong cnt_tx_err_late;
ulong cnt_tx_err_nocrs;
ulong cnt_tx_err_nocts;
ulong cnt_tx_err_under;
ulong cnt_tx_err_maxcol;
ulong cnt_tx_collisions;
/* Special stuff for host */
# define rfd_freed cnt_rx_cnt
ulong rbd_freed;
int host_timer;
/* Added after first beta */
ulong cnt_tx_races; /* Counts race conditions */
int spanstate;
ulong cnt_st_tx; /* send span tree pkts */
ulong cnt_st_fail_tx; /* Failures to send span tree pkts */
ulong cnt_st_fail_rbd;/* Failures to send span tree pkts */
ulong cnt_st_rx; /* rcv span tree pkts */
ulong cnt_st_rx_bad; /* bogus st packets rcvd */
ulong cnt_rx_fwd; /* Rcvd packets that were forwarded */
ulong cnt_rx_mcast; /* Multicast pkts received */
ulong cnt_tx_mcast; /* Multicast pkts transmitted */
ulong cnt_tx_bytes; /* Bytes transmitted */
/*
* Packet filtering
* Filter 0: input filter
* Filter 1: output filter
*/
ulong *filter_space[NFILTERS];
FILTER_FUNC *filter_func[NFILTERS];
ulong filter_cnt[NFILTERS];
ulong filter_len[NFILTERS];
ulong pad[ (512-300) / 4];
} PORT;
/*
* Port[0] is host interface
* Port[1..SE_NPORTS] are external 10 Base T ports. Fewer may be in
* use, depending on whether this is an SE-4 or
* an SE-6.
* Port[SE_NPORTS] Pseudo-port for Spanning tree and SNMP
*/
extern PORT Port[1+SE_NPORTS+1];
extern int Nports; /* Number of genuine ethernet controllers */
extern int Nchan; /* ... plus one for host interface */
extern int FirstChan; /* 0 or 1, depedning on whether host is used */
extern int NumChan; /* 4 or 5 */
/*
* Functions
*/
extern void eth_xmit_spew_on(PORT *p, int cnt);
extern void eth_xmit_spew_off(PORT *p);
extern I596_RBD *alloc_rbds(PORT *p, int num);
extern I596_CB * eth_cb_alloc(PORT *p);
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -474,7 +474,7 @@ static int eql_enslave(struct device *dev, slaving_request_t *srqp)
}
#ifdef EQL_DEBUG
if (eql_debug >= 20)
printk ("EQL enslsave: slave is master or slave is already slave\n");
printk ("EQL enslave: slave is master or slave is already slave\n");
#endif
return -EINVAL;
......
......@@ -189,6 +189,7 @@ struct pci_dev_info dev_info[] = {
DEVICE( ALLIANCE, ALLIANCE_PROMOTIO, "Promotion-6410"),
DEVICE( ALLIANCE, ALLIANCE_PROVIDEO, "Provideo"),
DEVICE( VMIC, VMIC_VME, "VMIVME-7587"),
DEVICE( DIGI, DIGI_RIGHTSWITCH, "Digi RightSwitch SE-6"),
DEVICE( MUTECH, MUTECH_MV1000, "MV-1000"),
DEVICE( ZEITNET, ZEITNET_1221, "1221"),
DEVICE( ZEITNET, ZEITNET_1225, "1225"),
......@@ -198,7 +199,10 @@ struct pci_dev_info dev_info[] = {
DEVICE( RP, RP8INTF, "RocketPort 8 Intf"),
DEVICE( RP, RP16INTF, "RocketPort 16 Intf"),
DEVICE( RP, RP32INTF, "RocketPort 32 Intf"),
DEVICE( CYCLADES, CYCLADES_Y, "Cyclome-Y"),
DEVICE( CYCLADES, CYCLOM_Y_Lo, "Cyclom-Y below 1Mbyte"),
DEVICE( CYCLADES, CYCLOM_Y_Hi, "Cyclom-Y above 1Mbyte"),
DEVICE( CYCLADES, CYCLOM_Z_Lo, "Cyclom-Z below 1Mbyte"),
DEVICE( CYCLADES, CYCLOM_Z_Hi, "Cyclom-Z above 1Mbyte"),
DEVICE( SYMPHONY, SYMPHONY_101, "82C101"),
DEVICE( TEKRAM, TEKRAM_DC290, "DC-290"),
DEVICE( AVANCE, AVANCE_2302, "ALG-2302"),
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment