Commit ccb6dd87 authored by Linus Torvalds's avatar Linus Torvalds

v2.4.6.3 -> v2.4.6.4

  - David Miller: sparc and networking updates
  - Al Viro: SysV FS add_link off-by-two bogosity.
  - Jeff Garzik: merge D-Link DL2k GigE driver, other network driver cleanups
  - Kai Germaschewski: ISDN update
  - Alan Cox: more merging (MPT fusion core)
  - Johannes Erdfelt: USB updates
  - Stas Sergeev: make sure we return out of vm86 mode when interrupts
  get re.enabled
  - Rusty Russell: netfilter fixes for ipt_unclean and ip_queue
  - me: initialize page->age when adding it to the swap cache
  - Paul Mackerras: PPC updates
  - some subtle fs/buffer.c race conditions (Andrew Morton, me)
parent d62f43c5
...@@ -8842,6 +8842,18 @@ CONFIG_MYRI_SBUS ...@@ -8842,6 +8842,18 @@ CONFIG_MYRI_SBUS
say M here and read Documentation/modules.txt. This is recommended. say M here and read Documentation/modules.txt. This is recommended.
The module will be called myri_sbus.o. The module will be called myri_sbus.o.
D-Link 2000-based Gigabit Ethernet support
CONFIG_DL2K
This driver supports D-Link 2000-based gigabit ethernet cards, which
includes
D-Link DGE-550T Gigabit Ethernet Adapter.
D-Link DL2000-based Gigabit Ethernet Adapter.
If you want to compile this driver 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. This is recommended.
The module will be called dl2k.o.
AMD LANCE and PCnet (AT1500 and NE2100) support AMD LANCE and PCnet (AT1500 and NE2100) support
CONFIG_LANCE CONFIG_LANCE
If you have a network (Ethernet) card of this type, say Y and read If you have a network (Ethernet) card of this type, say Y and read
......
BOOKS := wanbook.sgml z8530book.sgml mcabook.sgml videobook.sgml \ BOOKS := wanbook.sgml z8530book.sgml mcabook.sgml videobook.sgml \
kernel-api.sgml parportbook.sgml kernel-hacking.sgml \ kernel-api.sgml parportbook.sgml kernel-hacking.sgml \
kernel-locking.sgml via-audio.sgml mousedrivers.sgml sis900.sgml \ kernel-locking.sgml via-audio.sgml mousedrivers.sgml sis900.sgml \
deviceiobook.sgml procfs-guide.sgml deviceiobook.sgml procfs-guide.sgml tulip-user.sgml
PS := $(patsubst %.sgml, %.ps, $(BOOKS)) PS := $(patsubst %.sgml, %.ps, $(BOOKS))
PDF := $(patsubst %.sgml, %.pdf, $(BOOKS)) PDF := $(patsubst %.sgml, %.pdf, $(BOOKS))
...@@ -62,6 +62,9 @@ via-audio.sgml: via-audio.tmpl $(TOPDIR)/drivers/sound/via82cxxx_audio.c ...@@ -62,6 +62,9 @@ via-audio.sgml: via-audio.tmpl $(TOPDIR)/drivers/sound/via82cxxx_audio.c
$(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/sound/via82cxxx_audio.c \ $(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/sound/via82cxxx_audio.c \
<via-audio.tmpl >via-audio.sgml <via-audio.tmpl >via-audio.sgml
tulip-user.sgml: tulip-user.tmpl
$(TOPDIR)/scripts/docgen <$< >$@
sis900.sgml: sis900.tmpl $(TOPDIR)/drivers/net/sis900.c sis900.sgml: sis900.tmpl $(TOPDIR)/drivers/net/sis900.c
$(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/net/sis900.c \ $(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/net/sis900.c \
<sis900.tmpl >sis900.sgml <sis900.tmpl >sis900.sgml
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</authorgroup> </authorgroup>
<copyright> <copyright>
<year>2000</year> <year>1999-2001</year>
<holder>Jeff Garzik</holder> <holder>Jeff Garzik</holder>
</copyright> </copyright>
...@@ -149,23 +149,6 @@ ...@@ -149,23 +149,6 @@
<title>Known Bugs And Assumptions</title> <title>Known Bugs And Assumptions</title>
<para> <para>
<variablelist> <variablelist>
<varlistentry><term>MMAP support</term>
<listitem>
<para>
MMAP support is currently missing. Make sure to
test with Quake.
</para>
</listitem></varlistentry>
<varlistentry><term>AC97 codec timeout during init</term>
<listitem>
<para>
A warning message "via82cxxx: timeout while reading AC97
codec" is printed during driver initialization. This
message can safely be ignored.
</para>
</listitem></varlistentry>
<varlistentry><term>Low volume</term> <varlistentry><term>Low volume</term>
<listitem> <listitem>
<para> <para>
...@@ -198,6 +181,16 @@ ...@@ -198,6 +181,16 @@
<para> <para>
AC97 mixer interface fixes and debugging by Ron Cemer <email>roncemer@gte.net</email>. AC97 mixer interface fixes and debugging by Ron Cemer <email>roncemer@gte.net</email>.
</para> </para>
<para>
Rui Sousa <email>rui.sousa@conexant.com</email>, for bugfixing
MMAP support, and several other notable fixes that resulted from
his hard work and testing.
</para>
<para>
Adrian Cox <email>adrian@humboldt.co.uk</email>, for bugfixing
MMAP support, and several other notable fixes that resulted from
his hard work and testing.
</para>
</chapter> </chapter>
<chapter id="notes"> <chapter id="notes">
...@@ -219,7 +212,10 @@ ...@@ -219,7 +212,10 @@
and device ids are not examined. and device ids are not examined.
</para> </para>
<para> <para>
GNU indent formatting options: -kr -i8 -pcs GNU indent formatting options:
<programlisting>
-kr -i8 -ts8 -br -ce -bap -sob -l80 -pcs -cs -ss -bs -di1 -nbc -lp -psl
</programlisting>
</para> </para>
<para> <para>
Via has graciously donated e-mail support and source code to help further Via has graciously donated e-mail support and source code to help further
...@@ -238,6 +234,79 @@ ...@@ -238,6 +234,79 @@
<chapter id="changelog"> <chapter id="changelog">
<title>Driver ChangeLog</title> <title>Driver ChangeLog</title>
<sect1 id="version1115"><title>
Version 1.1.15
</title>
<itemizedlist spacing=compact>
<listitem>
<para>
Support for variable fragment size and variable fragment number (Rui
Sousa)
</para>
</listitem>
<listitem>
<para>
Fixes for the SPEED, STEREO, CHANNELS, FMT ioctls when in read &
write mode (Rui Sousa)
</para>
</listitem>
<listitem>
<para>
Mmaped sound is now fully functional. (Rui Sousa)
</para>
</listitem>
<listitem>
<para>
Make sure to enable PCI device before reading any of its PCI
config information. (fixes potential hotplug problems)
</para>
</listitem>
<listitem>
<para>
Clean up code a bit and add more internal function documentation.
</para>
</listitem>
<listitem>
<para>
AC97 codec access fixes (Adrian Cox)
</para>
</listitem>
<listitem>
<para>
Big endian fixes (Adrian Cox)
</para>
</listitem>
<listitem>
<para>
MIDI support (Adrian Cox)
</para>
</listitem>
<listitem>
<para>
Detect and report locked-rate AC97 codecs. If your hardware only
supports 48Khz (locked rate), then your recording/playback software
must upsample or downsample accordingly. The hardware cannot do it.
</para>
</listitem>
<listitem>
<para>
Use new pci_request_regions and pci_disable_device functions in
kernel 2.4.6.
</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="version1114"><title> <sect1 id="version1114"><title>
Version 1.1.14 Version 1.1.14
</title> </title>
......
...@@ -185,6 +185,20 @@ suggestions welcome) (WIP) ...@@ -185,6 +185,20 @@ suggestions welcome) (WIP)
Change History Change History
-------------- --------------
Version 0.9.18 - July 6, 2001
* Fix race leading to crashes on some machines.
* Minimize race leading to low performance.
* Correct interrupt acknowledgement to cover all three
relevant Rx events.
* Add ethtool driver info support.
* Collect additional driver-internal statistics.
* Add descriptions for module parameters.
* Support new SIOCxMIIxxx ioctls added in kernel 2.4.6.
* Multicast filter big endian fix.
* Support new PCI PM API added in kernel 2.4.6.
Version 0.9.17 - May 7, 2001 Version 0.9.17 - May 7, 2001
* Fix chipset wakeup bug which prevent media connection for 8139B * Fix chipset wakeup bug which prevent media connection for 8139B
......
D-Link DL2000-based Gigabit Ethernet Adapter Installation
for Linux
July 5, 2001
Contents
========
- Compatibility List
- Quick Install
- Compiling the Driver
- Installing the Driver
- Option parameter
- Configuration Script Sample
- Troubleshooting
Compatiblity List
=================
Adapter Support:
D-Link DGE-550T Gigabit Ethernet Adapter.
D-Link DL2000-based Gigabit Ethernet Adapter.
The driver support Linux kernal 2.4.x later. We had tested it
on the environments below.
. Red Hat v6.2 (update to kernel 2.4.4)
. Red Hat v7.0 (update to kernel 2.4.4)
. Red Hat v7.1 (kernel 2.4.2-2)
Quick Install
=============
Install linux driver as following command:
1. make all
2. insmod dl2x.o
3. ifconfig eth0 up 10.xxx.xxx.xxx netmask 255.0.0.0
^^^^^^^^^^^^^^^\ ^^^^^^^^\
IP NETMASK
Now eth0 bring up, you can test it by "ping" or get more information by
"ifconfig". If test ok, then continue next step.
4. cp dl2x.o /lib/modules/`uname -r`/kernel/drivers/net
5. Add the following lines to /etc/modules.conf:
alias eth0 dl2x
6. Run "netconfig" or "netconf" to create configuration script ifcfg-eth0
located at /etc/sysconfig/network-scripts or create it manually.
[see - Configuration Script Sample]
7. Driver will automatically load and configure at next boot time.
Compiling the Driver
====================
In Linux, NIC drivers are most commonly configured as loadable modules.
The approach of building a monolithic kernel has become obsolete. The driver
can be compiled as part of a monolithic kernel, but is strongly discouraged.
The remainder of this section assumes the driver is built as a loadable module.
In the Linux environment, it is a good idea to rebuild the driver from the
source instead of relying on a precompiled version. This approach provides
better reliability since a precompiled driver might depend on libraries or
kernel features that are not present in a given Linux installation.
The 3 files necessary to build Linux device driver are dl2x.c, dl2x.h and
Makefile. To compile, the Linux installation must include the gcc compiler,
the kernel source, and the kernel headers. The Linux driver supports Linux
Kernels 2.4.x. Copy the files to a directory and enter the following command
to compile and link the driver:
CD-ROM drive
------------
[root@XXX /] mkdir cdrom
[root@XXX /] mount -r -t iso9660 -o conv=auto /dev/cdrom /cdrom
[root@XXX /] cd root
[root@XXX /root] mkdir dl2x
[root@XXX /root] cd dl2x
[root@XXX dl2x] cp /cdrom/linux/dl2x.tgz /root/dl2x
[root@XXX dl2x] tar xfvz dl2x.tgz
[root@XXX dl2x] make all
Floppy disc drive
-----------------
[root@XXX /] cd root
[root@XXX /root] mkdir dl2x
[root@XXX /root] cd dl2x
[root@XXX dl2x] mcopy a:/linux/dl2x.tgz /root/dl2x
[root@XXX dl2x] tar xfvz dl2x.tgz
[root@XXX dl2x] make all
Installing the Driver
=====================
Manual Installation
-------------------
Once the driver has been compiled, it must be loaded, enabled, and bound
to a protocol stack in order to establish network connectivity. To load a
module enter the command:
insmod dl2x.o
or
insmod dl2x.o <optional parameter> ; add parameter
===============================================================
example: insmod dl2x.o media=100mbps_hd
or insmod dl2x.o media=3
or insmod dl2x.o media=3 2 ; for 2 cards
===============================================================
Please reference the list of the command line parameters supported by
the Linux device driver below.
The insmod command only loads the driver and gives it a name of the form
eth0, eth1, etc. To bring the NIC into an operational state,
it is necessary to issue the following command:
ifconfig eth0 up
Finally, to bind the driver to the active protocol (e.g., TCP/IP with
Linux), enter the following command:
ifup eth0
Note that this is meaningful only if the system can find a configuration
script that contains the necessary network information. A sample will be
given in the next paragraph.
The commands to unload a driver are as follows:
ifdown eth0
ifconfig eth0 down
rmmod dl2x.o
The following are the commands to list the currently loaded modules and
to see the current network configuration.
lsmod
ifconfig
Automated Installation
----------------------
This section describes how to install the driver such that it is
automatically loaded and configured at boot time. The following description
is based on a Red Hat 6.0/7.0 distribution, but it can easily be ported to
other distributions as well.
Red Hat v6.x/v7.x
-----------------
1. Copy dl2x.o to the network modules directory, typically
/lib/modules/2.x.x-xx/net or /lib/modules/2.x.x/kernel/drivers/net.
2. Locate the boot module configuration file, most commonly modules.conf
or conf.modules in the /etc directory. Add the following lines:
alias ethx dl2x
options dl2x <optional parameters>
where ethx will be eth0 if the NIC is the only ethernet adapter, eth1 if
one other ethernet adapter is installed, etc. Refer to the table in the
previous section for the list of optional parameters.
3. Locate the network configuration scripts, normally the
/etc/sysconfig/network-scripts directory, and create a configuration
script named ifcfg-ethx that contains network information.
4. Note that for most Linux distributions, Red Hat included, a configuration
utility with a graphical user interface is provided to perform steps 2
and 3 above.
Parameter Description
=====================
You can install this driver without any addtional parameter. However, if you
are going to have extensive functions then it is necessary to set extra
parameter. Below is a list of the command line parameters supported by the
Linux device
driver.
mtu=packet_size - Specifies the maximum packet size. default
is 1500.
media=xxxxxxxxx - Specifies the media type the NIC operates at.
autosense Autosensing active media.
10mbps_hd 10Mbps half duplex.
10mbps_fd 10Mbps full duplex.
100mbps_hd 100Mbps half duplex.
100mbps_fd 100Mbps full duplex.
1000mbps_fd 1000Mbps full duplex.
1000mbps_hd 1000Mbps half duplex.
0 Autosensing active media.
1 10Mbps half duplex.
2 10Mbps full duplex.
3 100Mbps half duplex.
4 100Mbps full duplex.
5 1000Mbps full duplex.
6 1000Mbps half duplex.
By default, the NIC operates at autosense.
vlan=x - Specifies the VLAN ID. If vlan=0, the
Virtual Local Area Network (VLAN) function is
disable.
jumbo=x - Specifies the jumbo frame support. If jumbo=1,
the NIC accept jumbo frames. By default, this
function is disabled.
Configuration Script Sample
===========================
Here is a sample of a simple configuration script:
DEVICE=eth0
USERCTL=no
ONBOOT=yes
POOTPROTO=none
BROADCAST=207.200.5.255
NETWORK=207.200.5.0
NETMASK=255.255.255.0
IPADDR=207.200.5.2
Troubleshooting
===============
Q: Couldn't compiler the driver ?
A1: Copy all necessary files on same current directory. Make sure all files
are Unix file format (no LF). You can use some convertible program conver
it from DOS to UNIX. (Like dos2unix, UltraEdit-32 ...).
A2: The default include directory configured in Makefile is
/usr/src/linux/include. If kernel source was not installed, you could
not compile driver. Try to install kernel source, and make sure kernel
source in /usr/src/linux. If there is a copy of header files in
/usr/include, you can try to change the variable "INCLUDEDIR" in Makefile from
/usr/src/linux/include to /usr/include.
...@@ -106,6 +106,12 @@ M: p_gortmaker@yahoo.com ...@@ -106,6 +106,12 @@ M: p_gortmaker@yahoo.com
L: linux-net@vger.kernel.org L: linux-net@vger.kernel.org
S: Maintained S: Maintained
ACENIC DRIVER
P: Jes Sorensen
M: jes@trained-monkey.org
L: linux-acenic@sunsite.dk
S: Maintained
ACI MIXER DRIVER ACI MIXER DRIVER
P: Robert Siemer P: Robert Siemer
M: Robert.Siemer@gmx.de M: Robert.Siemer@gmx.de
...@@ -566,8 +572,8 @@ S: Maintained ...@@ -566,8 +572,8 @@ S: Maintained
HIPPI HIPPI
P: Jes Sorensen P: Jes Sorensen
M: jes@linuxcare.com M: jes@trained-monkey.org
L: linux-hippi@sunsite.auc.dk L: linux-hippi@sunsite.dk
S: Maintained S: Maintained
HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
...@@ -812,7 +818,7 @@ S: Maintained ...@@ -812,7 +818,7 @@ S: Maintained
M68K M68K
P: Jes Sorensen P: Jes Sorensen
M: jes@linuxcare.com M: jes@trained-monkey.org
W: http://www.clark.net/pub/lawrencc/linux/index.html W: http://www.clark.net/pub/lawrencc/linux/index.html
L: linux-m68k@lists.linux-m68k.org L: linux-m68k@lists.linux-m68k.org
S: Maintained S: Maintained
......
...@@ -414,6 +414,7 @@ CONFIG_EEPRO100=y ...@@ -414,6 +414,7 @@ CONFIG_EEPRO100=y
# #
# CONFIG_ACENIC is not set # CONFIG_ACENIC is not set
# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_ACENIC_OMIT_TIGON_I is not set
# CONFIG_DL2K is not set
# CONFIG_MYRI_SBUS is not set # CONFIG_MYRI_SBUS is not set
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set # CONFIG_YELLOWFIN is not set
......
...@@ -456,7 +456,7 @@ void handle_vm86_fault(struct kernel_vm86_regs * regs, long error_code) ...@@ -456,7 +456,7 @@ void handle_vm86_fault(struct kernel_vm86_regs * regs, long error_code)
if (VMPI.vm86dbg_active && VMPI.vm86dbg_TFpendig) \ if (VMPI.vm86dbg_active && VMPI.vm86dbg_TFpendig) \
pushw(ssp,sp,popw(ssp,sp) | TF_MASK); pushw(ssp,sp,popw(ssp,sp) | TF_MASK);
#define VM86_FAULT_RETURN \ #define VM86_FAULT_RETURN \
if (VMPI.force_return_for_pic && (VEFLAGS & IF_MASK)) \ if (VMPI.force_return_for_pic && (VEFLAGS & (IF_MASK | VIF_MASK))) \
return_to_32bit(regs, VM86_PICRETURN); \ return_to_32bit(regs, VM86_PICRETURN); \
return; return;
......
This diff is collapsed.
...@@ -967,6 +967,7 @@ static void end_buffer_io_sync(struct buffer_head *bh, int uptodate) ...@@ -967,6 +967,7 @@ static void end_buffer_io_sync(struct buffer_head *bh, int uptodate)
{ {
mark_buffer_uptodate(bh, uptodate); mark_buffer_uptodate(bh, uptodate);
unlock_buffer(bh); unlock_buffer(bh);
atomic_dec(&bh->b_count);
} }
/** /**
...@@ -1055,6 +1056,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head * bhs[]) ...@@ -1055,6 +1056,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head * bhs[])
continue; continue;
/* We have the buffer lock */ /* We have the buffer lock */
atomic_inc(&bh->b_count);
bh->b_end_io = end_buffer_io_sync; bh->b_end_io = end_buffer_io_sync;
switch(rw) { switch(rw) {
......
...@@ -117,6 +117,7 @@ static int access_count[MAX_HD]; ...@@ -117,6 +117,7 @@ static int access_count[MAX_HD];
static char ps2esdi_valid[MAX_HD]; static char ps2esdi_valid[MAX_HD];
static int ps2esdi_sizes[MAX_HD << 6]; static int ps2esdi_sizes[MAX_HD << 6];
static int ps2esdi_blocksizes[MAX_HD << 6]; static int ps2esdi_blocksizes[MAX_HD << 6];
static int ps2esdi_maxsect[MAX_HD << 6];
static int ps2esdi_drives; static int ps2esdi_drives;
static struct hd_struct ps2esdi[MAX_HD << 6]; static struct hd_struct ps2esdi[MAX_HD << 6];
static u_short io_base; static u_short io_base;
......
...@@ -59,8 +59,8 @@ ...@@ -59,8 +59,8 @@
* *
*/ */
static char *serial_version = "5.05b"; static char *serial_version = "5.05c";
static char *serial_revdate = "2001-05-03"; static char *serial_revdate = "2001-07-08";
/* /*
* Serial driver configuration section. Here are the various options: * Serial driver configuration section. Here are the various options:
...@@ -3512,7 +3512,7 @@ static void autoconfig_startech_uarts(struct async_struct *info, ...@@ -3512,7 +3512,7 @@ static void autoconfig_startech_uarts(struct async_struct *info,
struct serial_state *state, struct serial_state *state,
unsigned long flags) unsigned long flags)
{ {
unsigned char scratch, scratch2, scratch3; unsigned char scratch, scratch2, scratch3, scratch4;
/* /*
* First we check to see if it's an Oxford Semiconductor UART. * First we check to see if it's an Oxford Semiconductor UART.
...@@ -3556,17 +3556,32 @@ static void autoconfig_startech_uarts(struct async_struct *info, ...@@ -3556,17 +3556,32 @@ static void autoconfig_startech_uarts(struct async_struct *info,
* XR16C854. * XR16C854.
* *
*/ */
/* Save the DLL and DLM */
serial_outp(info, UART_LCR, UART_LCR_DLAB); serial_outp(info, UART_LCR, UART_LCR_DLAB);
scratch3 = serial_inp(info, UART_DLL);
scratch4 = serial_inp(info, UART_DLM);
serial_outp(info, UART_DLL, 0); serial_outp(info, UART_DLL, 0);
serial_outp(info, UART_DLM, 0); serial_outp(info, UART_DLM, 0);
state->revision = serial_inp(info, UART_DLL); scratch2 = serial_inp(info, UART_DLL);
scratch = serial_inp(info, UART_DLM); scratch = serial_inp(info, UART_DLM);
serial_outp(info, UART_LCR, 0); serial_outp(info, UART_LCR, 0);
if (scratch == 0x10 || scratch == 0x14) { if (scratch == 0x10 || scratch == 0x14) {
if (scratch == 0x10)
state->revision = scratch2;
state->type = PORT_16850; state->type = PORT_16850;
return; return;
} }
/* Restore the DLL and DLM */
serial_outp(info, UART_LCR, UART_LCR_DLAB);
serial_outp(info, UART_DLL, scratch3);
serial_outp(info, UART_DLM, scratch4);
serial_outp(info, UART_LCR, 0);
/* /*
* We distinguish between the '654 and the '650 by counting * We distinguish between the '654 and the '650 by counting
* how many bytes are in the FIFO. I'm using this for now, * how many bytes are in the FIFO. I'm using this for now,
...@@ -3979,10 +3994,7 @@ static void __devinit start_pci_pnp_board(struct pci_dev *dev, ...@@ -3979,10 +3994,7 @@ static void __devinit start_pci_pnp_board(struct pci_dev *dev,
* seems to be mainly needed on card using the PLX which also use I/O * seems to be mainly needed on card using the PLX which also use I/O
* mapped memory. * mapped memory.
*/ */
static int static int __devinit
#ifndef MODULE
__devinit
#endif
pci_plx9050_fn(struct pci_dev *dev, struct pci_board *board, int enable) pci_plx9050_fn(struct pci_dev *dev, struct pci_board *board, int enable)
{ {
u8 data, *p, irq_config; u8 data, *p, irq_config;
...@@ -4046,10 +4058,7 @@ pci_plx9050_fn(struct pci_dev *dev, struct pci_board *board, int enable) ...@@ -4046,10 +4058,7 @@ pci_plx9050_fn(struct pci_dev *dev, struct pci_board *board, int enable)
#define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc) #define PCI_DEVICE_ID_SIIG_1S_10x (PCI_DEVICE_ID_SIIG_1S_10x_550 & 0xfffc)
#define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8) #define PCI_DEVICE_ID_SIIG_2S_10x (PCI_DEVICE_ID_SIIG_2S_10x_550 & 0xfff8)
static int static int __devinit
#ifndef MODULE
__devinit
#endif
pci_siig10x_fn(struct pci_dev *dev, struct pci_board *board, int enable) pci_siig10x_fn(struct pci_dev *dev, struct pci_board *board, int enable)
{ {
u16 data, *p; u16 data, *p;
...@@ -4078,10 +4087,7 @@ pci_siig10x_fn(struct pci_dev *dev, struct pci_board *board, int enable) ...@@ -4078,10 +4087,7 @@ pci_siig10x_fn(struct pci_dev *dev, struct pci_board *board, int enable)
#define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc) #define PCI_DEVICE_ID_SIIG_2S_20x (PCI_DEVICE_ID_SIIG_2S_20x_550 & 0xfffc)
#define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc) #define PCI_DEVICE_ID_SIIG_2S1P_20x (PCI_DEVICE_ID_SIIG_2S1P_20x_550 & 0xfffc)
static int static int __devinit
#ifndef MODULE
__devinit
#endif
pci_siig20x_fn(struct pci_dev *dev, struct pci_board *board, int enable) pci_siig20x_fn(struct pci_dev *dev, struct pci_board *board, int enable)
{ {
u8 data; u8 data;
...@@ -4102,10 +4108,7 @@ pci_siig20x_fn(struct pci_dev *dev, struct pci_board *board, int enable) ...@@ -4102,10 +4108,7 @@ pci_siig20x_fn(struct pci_dev *dev, struct pci_board *board, int enable)
} }
/* Added for EKF Intel i960 serial boards */ /* Added for EKF Intel i960 serial boards */
static int static int __devinit
#ifndef MODULE
__devinit
#endif
pci_inteli960ni_fn(struct pci_dev *dev, pci_inteli960ni_fn(struct pci_dev *dev,
struct pci_board *board, struct pci_board *board,
int enable) int enable)
...@@ -4163,10 +4166,7 @@ static struct timedia_struct { ...@@ -4163,10 +4166,7 @@ static struct timedia_struct {
{ 0, 0 } { 0, 0 }
}; };
static int static int __devinit
#ifndef MODULE
__devinit
#endif
pci_timedia_fn(struct pci_dev *dev, struct pci_board *board, int enable) pci_timedia_fn(struct pci_dev *dev, struct pci_board *board, int enable)
{ {
int i, j; int i, j;
...@@ -4187,10 +4187,7 @@ pci_timedia_fn(struct pci_dev *dev, struct pci_board *board, int enable) ...@@ -4187,10 +4187,7 @@ pci_timedia_fn(struct pci_dev *dev, struct pci_board *board, int enable)
return 0; return 0;
} }
static int static int __devinit
#ifndef MODULE
__devinit
#endif
pci_xircom_fn(struct pci_dev *dev, struct pci_board *board, int enable) pci_xircom_fn(struct pci_dev *dev, struct pci_board *board, int enable)
{ {
__set_current_state(TASK_UNINTERRUPTIBLE); __set_current_state(TASK_UNINTERRUPTIBLE);
......
/* $Id: eicon.h,v 1.23.6.3 2001/05/17 21:15:33 kai Exp $ /* $Id: eicon.h,v 1.23.6.4 2001/06/09 15:14:16 kai Exp $
* *
* ISDN low-level module for Eicon active ISDN-Cards. * ISDN low-level module for Eicon active ISDN-Cards.
* *
......
This diff is collapsed.
6f9433a8b696076562562d090e3c420f isac.c
13c3eed869f5139f44c563e3a8fea1f5 isdnl1.c
addcff863b0ff1e366c0f2ae9fa6e81e isdnl2.c
7076deb94a363945c21ea27aca4a720a isdnl3.c
51c603829b6cc4f8421f744ad657ceff tei.c
669050ab5079f02887ed0239d86e5474 callc.c
e592db58630c1f1029cc064110108156 cert.c
fadeb3b85bb23bc1ac48470c0848d6fa l3dss1.c
cf7dec9fac6283716904d26b99188476 l3_1tr6.c
65d9e5471bc129624f858ebcf0743525 elsa.c
b4cf8a4dceed9ea6dcba65a85b4eecc7 diva.c
99e67bea8f6945fa0d4e0aded5bf0fa0 sedlbauer.c
/* $Id: isdn_tty.c,v 1.94.6.2 2001/06/09 15:14:15 kai Exp $ /* $Id: isdn_tty.c,v 1.94.6.3 2001/07/03 14:48:25 kai Exp $
* Linux ISDN subsystem, tty functions and AT-command emulator (linklevel). * Linux ISDN subsystem, tty functions and AT-command emulator (linklevel).
* *
...@@ -66,7 +66,7 @@ static int bit2si[8] = ...@@ -66,7 +66,7 @@ static int bit2si[8] =
static int si2bit[8] = static int si2bit[8] =
{4, 1, 4, 4, 4, 4, 4, 4}; {4, 1, 4, 4, 4, 4, 4, 4};
char *isdn_tty_revision = "$Revision: 1.94.6.2 $"; char *isdn_tty_revision = "$Revision: 1.94.6.3 $";
/* isdn_tty_try_read() is called from within isdn_tty_rcv_skb() /* isdn_tty_try_read() is called from within isdn_tty_rcv_skb()
...@@ -1420,8 +1420,7 @@ isdn_tty_get_lsr_info(modem_info * info, uint * value) ...@@ -1420,8 +1420,7 @@ isdn_tty_get_lsr_info(modem_info * info, uint * value)
status = info->lsr; status = info->lsr;
restore_flags(flags); restore_flags(flags);
result = ((status & UART_LSR_TEMT) ? TIOCSER_TEMT : 0); result = ((status & UART_LSR_TEMT) ? TIOCSER_TEMT : 0);
put_user(result, (uint *) value); return put_user(result, (uint *) value);
return 0;
} }
...@@ -1444,8 +1443,7 @@ isdn_tty_get_modem_info(modem_info * info, uint * value) ...@@ -1444,8 +1443,7 @@ isdn_tty_get_modem_info(modem_info * info, uint * value)
| ((status & UART_MSR_RI) ? TIOCM_RNG : 0) | ((status & UART_MSR_RI) ? TIOCM_RNG : 0)
| ((status & UART_MSR_DSR) ? TIOCM_DSR : 0) | ((status & UART_MSR_DSR) ? TIOCM_DSR : 0)
| ((status & UART_MSR_CTS) ? TIOCM_CTS : 0); | ((status & UART_MSR_CTS) ? TIOCM_CTS : 0);
put_user(result, (uint *) value); return put_user(result, (uint *) value);
return 0;
} }
static int static int
...@@ -1454,7 +1452,8 @@ isdn_tty_set_modem_info(modem_info * info, uint cmd, uint * value) ...@@ -1454,7 +1452,8 @@ isdn_tty_set_modem_info(modem_info * info, uint cmd, uint * value)
uint arg; uint arg;
int pre_dtr; int pre_dtr;
get_user(arg, (uint *) value); if (get_user(arg, (uint *) value))
return -EFAULT;
switch (cmd) { switch (cmd) {
case TIOCMBIS: case TIOCMBIS:
#ifdef ISDN_DEBUG_MODEM_IOCTL #ifdef ISDN_DEBUG_MODEM_IOCTL
...@@ -1522,7 +1521,6 @@ isdn_tty_ioctl(struct tty_struct *tty, struct file *file, ...@@ -1522,7 +1521,6 @@ isdn_tty_ioctl(struct tty_struct *tty, struct file *file,
uint cmd, ulong arg) uint cmd, ulong arg)
{ {
modem_info *info = (modem_info *) tty->driver_data; modem_info *info = (modem_info *) tty->driver_data;
int error;
int retval; int retval;
if (isdn_tty_paranoia_check(info, tty->device, "isdn_tty_ioctl")) if (isdn_tty_paranoia_check(info, tty->device, "isdn_tty_ioctl"))
...@@ -1552,19 +1550,13 @@ isdn_tty_ioctl(struct tty_struct *tty, struct file *file, ...@@ -1552,19 +1550,13 @@ isdn_tty_ioctl(struct tty_struct *tty, struct file *file,
#ifdef ISDN_DEBUG_MODEM_IOCTL #ifdef ISDN_DEBUG_MODEM_IOCTL
printk(KERN_DEBUG "ttyI%d ioctl TIOCGSOFTCAR\n", info->line); printk(KERN_DEBUG "ttyI%d ioctl TIOCGSOFTCAR\n", info->line);
#endif #endif
error = verify_area(VERIFY_WRITE, (void *) arg, sizeof(long)); return put_user(C_CLOCAL(tty) ? 1 : 0, (ulong *) arg);
if (error)
return error;
put_user(C_CLOCAL(tty) ? 1 : 0, (ulong *) arg);
return 0;
case TIOCSSOFTCAR: case TIOCSSOFTCAR:
#ifdef ISDN_DEBUG_MODEM_IOCTL #ifdef ISDN_DEBUG_MODEM_IOCTL
printk(KERN_DEBUG "ttyI%d ioctl TIOCSSOFTCAR\n", info->line); printk(KERN_DEBUG "ttyI%d ioctl TIOCSSOFTCAR\n", info->line);
#endif #endif
error = verify_area(VERIFY_READ, (void *) arg, sizeof(long)); if (get_user(arg, (ulong *) arg))
if (error) return -EFAULT;
return error;
get_user(arg, (ulong *) arg);
tty->termios->c_cflag = tty->termios->c_cflag =
((tty->termios->c_cflag & ~CLOCAL) | ((tty->termios->c_cflag & ~CLOCAL) |
(arg ? CLOCAL : 0)); (arg ? CLOCAL : 0));
...@@ -1573,25 +1565,15 @@ isdn_tty_ioctl(struct tty_struct *tty, struct file *file, ...@@ -1573,25 +1565,15 @@ isdn_tty_ioctl(struct tty_struct *tty, struct file *file,
#ifdef ISDN_DEBUG_MODEM_IOCTL #ifdef ISDN_DEBUG_MODEM_IOCTL
printk(KERN_DEBUG "ttyI%d ioctl TIOCMGET\n", info->line); printk(KERN_DEBUG "ttyI%d ioctl TIOCMGET\n", info->line);
#endif #endif
error = verify_area(VERIFY_WRITE, (void *) arg, sizeof(uint));
if (error)
return error;
return isdn_tty_get_modem_info(info, (uint *) arg); return isdn_tty_get_modem_info(info, (uint *) arg);
case TIOCMBIS: case TIOCMBIS:
case TIOCMBIC: case TIOCMBIC:
case TIOCMSET: case TIOCMSET:
error = verify_area(VERIFY_READ, (void *) arg, sizeof(uint));
if (error)
return error;
return isdn_tty_set_modem_info(info, cmd, (uint *) arg); return isdn_tty_set_modem_info(info, cmd, (uint *) arg);
case TIOCSERGETLSR: /* Get line status register */ case TIOCSERGETLSR: /* Get line status register */
#ifdef ISDN_DEBUG_MODEM_IOCTL #ifdef ISDN_DEBUG_MODEM_IOCTL
printk(KERN_DEBUG "ttyI%d ioctl TIOCSERGETLSR\n", info->line); printk(KERN_DEBUG "ttyI%d ioctl TIOCSERGETLSR\n", info->line);
#endif #endif
error = verify_area(VERIFY_WRITE, (void *) arg, sizeof(uint));
if (error)
return error;
else
return isdn_tty_get_lsr_info(info, (uint *) arg); return isdn_tty_get_lsr_info(info, (uint *) arg);
default: default:
#ifdef ISDN_DEBUG_MODEM_IOCTL #ifdef ISDN_DEBUG_MODEM_IOCTL
......
mainmenu_option next_comment
comment 'Fusion MPT device support'
dep_tristate "Fusion MPT (base + ScsiHost) drivers" CONFIG_FUSION $CONFIG_SCSI $CONFIG_BLK_DEV_SD
if [ "$CONFIG_FUSION" = "y" -o "$CONFIG_FUSION" = "m" ]; then
if [ "$CONFIG_BLK_DEV_SD" = "y" -a "$CONFIG_FUSION" = "y" ]; then
define_bool CONFIG_FUSION_BOOT y
comment "(ability to boot linux kernel from Fusion device is ENABLED!)"
else
define_bool CONFIG_FUSION_BOOT n
comment "(ability to boot linux kernel from Fusion device is DISABLED!)"
fi
if [ "$CONFIG_MODULES" = "y" ]; then
# How can we force these options to module or nothing?
dep_tristate " Enhanced SCSI error reporting" CONFIG_FUSION_ISENSE $CONFIG_FUSION m
dep_tristate " Fusion MPT misc device (ioctl) driver" CONFIG_FUSION_CTL $CONFIG_FUSION m
fi
dep_tristate " Fusion MPT LAN driver" CONFIG_FUSION_LAN $CONFIG_FUSION $CONFIG_NET
if [ "$CONFIG_FUSION_LAN" != "n" ]; then
define_bool CONFIG_NET_FC y
fi
else
define_bool CONFIG_FUSION_BOOT n
# These <should> be define_tristate, but we leave them define_bool
# for backward compatibility with pre-linux-2.2.15 kernels.
# (Bugzilla:fibrebugs, #384)
define_bool CONFIG_FUSION_ISENSE n
define_bool CONFIG_FUSION_CTL n
define_bool CONFIG_FUSION_LAN n
fi
endmenu
#
# Makefile for the LSI Logic Fusion MPT (Message Passing Technology) drivers.
#
# Note! Dependencies are done automagically by 'make dep', which also
# removes any old dependencies. DON'T put your own dependencies here
# unless it's something special (ie not a .c file).
#
# Note 2! The CFLAGS definition is now inherited from the
# parent makefile.
#
# Note 3! If you want to turn on various debug defines for an extended period of
# time but don't want them lingering around in the Makefile when you pass it on
# to someone else, use the MPT_CFLAGS env variable (thanks Steve). -nromer
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-{ LSI_LOGIC
# Architecture-specific...
# # intel
#EXTRA_CFLAGS += -g
# # sparc64
#EXTRA_CFLAGS += -gstabs+
EXTRA_CFLAGS += -I. ${MPT_CFLAGS}
# Fusion MPT drivers; recognized debug defines...
# MPT general:
#EXTRA_CFLAGS += -DDEBUG
#EXTRA_CFLAGS += -DMPT_DEBUG
#EXTRA_CFLAGS += -DMPT_DEBUG_MSG_FRAME
#EXTRA_CFLAGS += -DMPT_DEBUG_SPINLOCK
# driver/module specifics...
# For mptbase:
#CFLAGS_mptbase.o += -DMPT_DEBUG_HANDSHAKE
#CFLAGS_mptbase.o += -DMPT_DEBUG_IRQ
# For {mptscsih, mptctl}:
#CFLAGS_mptscsih.o += -DMPT_SCSI_USE_NEW_EH
#CFLAGS_mptscsih.o += -DMPT_SCSI_CACHE_AUTOSENSE
#CFLAGS_mptscsih.o += -DMPT_DEBUG_SG
#CFLAGS_mptctl.o += -DMPT_DEBUG_SG
# For mptlan:
#CFLAGS_mptlan.o += -DMPT_LAN_IO_DEBUG
# For isense:
# EXP...
##mptscsih-objs := scsihost.o scsiherr.o
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-} LSI_LOGIC
O_TARGET := fusion.o
export-objs := mptbase.o mptscsih.o mptlan.o mptctl.o isense.o
# ? what's list-multi for?
#list-multi := fusion.o mptscsih.o
obj-$(CONFIG_FUSION) += mptbase.o mptscsih.o
obj-$(CONFIG_FUSION_ISENSE) += isense.o
obj-$(CONFIG_FUSION_CTL) += mptctl.o
obj-$(CONFIG_FUSION_LAN) += mptlan.o
O_OBJS := $(filter-out $(export-objs), $(obj-y))
OX_OBJS := $(filter $(export-objs), $(obj-y))
M_OBJS := $(sort $(filter-out $(export-objs), $(obj-m)))
MX_OBJS := $(sort $(filter $(export-objs), $(obj-m)))
include $(TOPDIR)/Rules.make
# EXP...
## Fusion MPT extra's...
##mptscsih.o: $(mptscsih-objs)
## $(LD) -r -o $@ $(mptscsih-objs)
This diff is collapsed.
#!/bin/sh
#
# ascq_tbl.sh - Translate SCSI t10.org's "asc-num.txt" file of
# SCSI Additional Sense Code & Qualifiers (ASC/ASCQ's)
# into something useful in C, creating "ascq_tbl.c" file.
#
#*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
PREF_INFILE="t10.org/asc-num.txt" # From SCSI t10.org
PREF_OUTFILE="ascq_tbl.c"
#*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
xlate_ascq() {
cat | awk '
BEGIN {
DQ = "\042";
OUTFILE = "'"${PREF_OUTFILE}"'";
TRUE = 1;
FALSE = 0;
#debug = TRUE;
# read and discard all lines up to and including the one that begins
# with the "magic token" of "------- -------------- ---"...
headers_gone = FALSE;
while (!headers_gone) {
if (getline <= 0)
exit 1;
header_line[++hdrs] = $0;
if (debug)
printf("header_line[%d] = :%s:\n", ++hdrs, $0);
if ($0 ~ /^------- -------------- ---/) {
headers_gone = TRUE;
}
}
outcount = 0;
}
(NF > 1) {
++outcount;
if (debug)
printf( "DBG: %s\n", $0 );
ASC[outcount] = substr($0,1,2);
ASCQ[outcount] = substr($0,5,2);
devtypes = substr($0,10,14);
gsub(/ /, ".", devtypes);
DESCRIP[outcount] = substr($0,26);
if (!(devtypes in DevTypesVoodoo)) {
DevTypesVoodoo[devtypes] = ++voodoo;
DevTypesIdx[voodoo] = devtypes;
}
DEVTYPES[outcount] = DevTypesVoodoo[devtypes];
# Handle 0xNN exception stuff...
if (ASCQ[outcount] == "NN" || ASCQ[outcount] == "nn")
ASCQ[outcount] = "FF";
}
END {
printf("#ifndef SCSI_ASCQ_TBL_C_INCLUDED\n") > OUTFILE;
printf("#define SCSI_ASCQ_TBL_C_INCLUDED\n") >> OUTFILE;
printf("\n/* AuToMaGiCaLlY generated from: %s'"${FIN}"'%s\n", DQ, DQ) >> OUTFILE;
printf(" *******************************************************************************\n") >> OUTFILE;
for (i=1; i<=hdrs; i++) {
printf(" * %s\n", header_line[i]) >> OUTFILE;
}
printf(" */\n") >> OUTFILE;
printf("\n") >> OUTFILE;
for (i=1; i<=voodoo; i++) {
printf("static char SenseDevTypes%03d[] = %s%s%s;\n", i, DQ, DevTypesIdx[i], DQ) >> OUTFILE;
}
printf("\nstatic ASCQ_Table_t ASCQ_Table[] = {\n") >> OUTFILE;
for (i=1; i<=outcount; i++) {
printf(" {\n") >> OUTFILE;
printf(" 0x%s, 0x%s,\n", ASC[i], ASCQ[i]) >> OUTFILE;
printf(" SenseDevTypes%03d,\n", DEVTYPES[i]) >> OUTFILE;
printf(" %s%s%s\n", DQ, DESCRIP[i], DQ) >> OUTFILE;
printf(" },\n") >> OUTFILE;
}
printf( "};\n\n" ) >> OUTFILE;
printf( "static int ASCQ_TableSize = %d;\n\n", outcount ) >> OUTFILE;
printf( "Total of %d ASC/ASCQ records generated\n", outcount );
printf("\n#endif\n") >> OUTFILE;
close(OUTFILE);
}'
return
}
#*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*#
# main()
if [ $# -lt 1 ]; then
echo "INFO: No input filename supplied - using: $PREF_INFILE" >&2
FIN=$PREF_INFILE
else
FIN="$1"
if [ "$FIN" != "$PREF_INFILE" ]; then
echo "INFO: Ok, I'll try chewing on '$FIN' for SCSI ASC/ASCQ combos..." >&2
fi
shift
fi
cat $FIN | xlate_ascq
exit 0
/*
* linux/drivers/message/fusion/isense.c
* Little linux driver / shim that interfaces with the Fusion MPT
* Linux base driver to provide english readable strings in SCSI
* Error Report logging output. This module implements SCSI-3
* Opcode lookup and a sorted table of SCSI-3 ASC/ASCQ strings.
*
* Copyright (c) 1991-2001 Steven J. Ralston
* Written By: Steven J. Ralston
* (yes I wrote some of the orig. code back in 1991!)
* (mailto:Steve.Ralston@lsil.com)
*
* $Id: isense.c,v 1.28 2001/01/14 23:11:09 sralston Exp $
*/
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
NO WARRANTY
THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
solely responsible for determining the appropriateness of using and
distributing the Program and assumes all risks associated with its
exercise of rights under this Agreement, including but not limited to
the risks and costs of program errors, damage to or loss of data,
programs or equipment, and unavailability or interruption of operations.
DISCLAIMER OF LIABILITY
NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/version.h>
/* Hmmm, avoid undefined spinlock_t on lk-2.2.14-5.0 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
#include <asm/spinlock.h>
#endif
#define MODULEAUTHOR "Steven J. Ralston"
#define COPYRIGHT "Copyright (c) 2000 " MODULEAUTHOR
#include "mptbase.h"
#include "isense.h"
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/*
* Private data...
*/
/*
* YIKES! I don't usually #include C source files, but..
* The following #include's pulls in our needed ASCQ_Table[] array,
* ASCQ_TableSz integer, and ScsiOpcodeString[] array!
*/
#include "ascq_tbl.c"
#include "scsiops.c"
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#define my_NAME "SCSI-3 Opcodes & ASC/ASCQ Strings"
#define my_VERSION MPT_LINUX_VERSION_COMMON
#define MYNAM "isense"
EXPORT_NO_SYMBOLS;
MODULE_AUTHOR(MODULEAUTHOR);
MODULE_DESCRIPTION(my_NAME);
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
int __init isense_init(void)
{
show_mptmod_ver(my_NAME, my_VERSION);
/*
* Install our handler
*/
if (mpt_register_ascqops_strings(&ASCQ_Table[0], ASCQ_TableSize, ScsiOpcodeString) != 1)
{
printk(KERN_ERR MYNAM ": ERROR: Can't register with Fusion MPT base driver!\n");
return -EBUSY;
}
printk(KERN_INFO MYNAM ": Registered SCSI-3 Opcodes & ASC/ASCQ Strings\n");
return 0;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
static void isense_exit(void)
{
#ifdef MODULE
mpt_deregister_ascqops_strings();
#endif
printk(KERN_INFO MYNAM ": Deregistered SCSI-3 Opcodes & ASC/ASCQ Strings\n");
}
module_init(isense_init);
module_exit(isense_exit);
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#ifndef ISENSE_H_INCLUDED
#define ISENSE_H_INCLUDED
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#ifdef __KERNEL__
#include <linux/types.h> /* needed for u8, etc. */
#include <linux/string.h> /* needed for strcat */
#include <linux/kernel.h> /* needed for sprintf */
#else
#ifndef U_STUFF_DEFINED
#define U_STUFF_DEFINED
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
#endif
#endif
#include "scsi3.h" /* needed for all things SCSI */
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/*
* Defines and typedefs...
*/
#ifdef __KERNEL__
#define PrintF(x) printk x
#else
#define PrintF(x) printf x
#endif
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#define RETRY_STATUS ((int) 1)
#define PUT_STATUS ((int) 0)
/*
* A generic structure to hold info about IO request that caused
* a Request Sense to be performed, and the resulting Sense Data.
*/
typedef struct IO_Info
{
char *DevIDStr; /* String of chars which identifies the device. */
u8 *cdbPtr; /* Pointer (Virtual/Logical addr) to CDB bytes of
IO request that caused ContAllegianceCond. */
u8 *sensePtr; /* Pointer (Virtual/Logical addr) to Sense Data
returned by Request Sense operation. */
u8 *dataPtr; /* Pointer (Virtual/Logical addr) to Data buffer
of IO request caused ContAllegianceCondition. */
u8 *inqPtr; /* Pointer (Virtual/Logical addr) to Inquiry Data for
IO *Device* that caused ContAllegianceCondition. */
u8 SCSIStatus; /* SCSI status byte of IO request that caused
Contingent Allegiance Condition. */
u8 DoDisplay; /* Shall we display any messages? */
u16 rsvd_align1;
u32 ComplCode; /* Four-byte OS-dependent completion code. */
u32 NotifyL; /* Four-byte OS-dependent notification field. */
} IO_Info_t;
/*
* SCSI Additional Sense Code and Additional Sense Code Qualifier table.
*/
typedef struct ASCQ_Table
{
u8 ASC;
u8 ASCQ;
char *DevTypes;
char *Description;
} ASCQ_Table_t;
#if 0
/*
* SCSI Opcodes table.
*/
typedef struct SCSI_OPS_Table
{
u8 OpCode;
char *DevTypes;
char *ScsiCmndStr;
} SCSI_OPS_Table_t;
#endif
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/*
* Public entry point prototypes
*/
/* in scsiherr.c, needed by mptscsih.c */
extern int mpt_ScsiHost_ErrorReport(IO_Info_t *ioop);
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#endif
/* drivers/message/fusion/linux_compat.h */
#ifndef FUSION_LINUX_COMPAT_H
#define FUSION_LINUX_COMPAT_H
/*{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#include <linux/version.h>
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/pci.h>
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
# if LINUX_VERSION_CODE < KERNEL_VERSION(2,2,18)
typedef unsigned int dma_addr_t;
# endif
#else
# if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,42)
typedef unsigned int dma_addr_t;
# endif
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,2,18)
/*{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/* This block snipped from lk-2.2.18/include/linux/init.h { */
/*
* Used for initialization calls..
*/
typedef int (*initcall_t)(void);
typedef void (*exitcall_t)(void);
#define __init_call __attribute__ ((unused,__section__ (".initcall.init")))
#define __exit_call __attribute__ ((unused,__section__ (".exitcall.exit")))
extern initcall_t __initcall_start, __initcall_end;
#define __initcall(fn) \
static initcall_t __initcall_##fn __init_call = fn
#define __exitcall(fn) \
static exitcall_t __exitcall_##fn __exit_call = fn
#ifdef MODULE
/* These macros create a dummy inline: gcc 2.9x does not count alias
as usage, hence the `unused function' warning when __init functions
are declared static. We use the dummy __*_module_inline functions
both to kill the warning and check the type of the init/cleanup
function. */
typedef int (*__init_module_func_t)(void);
typedef void (*__cleanup_module_func_t)(void);
#define module_init(x) \
int init_module(void) __attribute__((alias(#x))); \
extern inline __init_module_func_t __init_module_inline(void) \
{ return x; }
#define module_exit(x) \
void cleanup_module(void) __attribute__((alias(#x))); \
extern inline __cleanup_module_func_t __cleanup_module_inline(void) \
{ return x; }
#else
#define module_init(x) __initcall(x);
#define module_exit(x) __exitcall(x);
#endif
/* } block snipped from lk-2.2.18/include/linux/init.h */
/* Wait queues. */
#define DECLARE_WAIT_QUEUE_HEAD(name) \
struct wait_queue * (name) = NULL
#define DECLARE_WAITQUEUE(name, task) \
struct wait_queue (name) = { (task), NULL }
#if defined(__sparc__) && defined(__sparc_v9__)
/* The sparc64 ioremap implementation is wrong in 2.2.x,
* but fixing it would break all of the drivers which
* workaround it. Fixed in 2.3.x onward. -DaveM
*/
#define ARCH_IOREMAP(base) ((unsigned long) (base))
#else
#define ARCH_IOREMAP(base) ioremap(base)
#endif
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#else /* LINUX_VERSION_CODE must be >= KERNEL_VERSION(2,2,18) */
/* No ioremap bugs in >2.3.x kernels. */
#define ARCH_IOREMAP(base) ioremap(base)
/*}-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,2,18) */
/* PCI/driver subsystem { */
#ifndef pci_for_each_dev
#define pci_for_each_dev(dev) for((dev)=pci_devices; (dev)!=NULL; (dev)=(dev)->next)
#define pci_peek_next_dev(dev) ((dev)->next ? (dev)->next : NULL)
#define DEVICE_COUNT_RESOURCE 6
#define PCI_BASEADDR_FLAGS(idx) base_address[idx]
#define PCI_BASEADDR_START(idx) base_address[idx] & ~0xFUL
/*
* We have to keep track of the original value using
* a temporary, and not by just sticking pdev->base_address[x]
* back. pdev->base_address[x] is an opaque cookie that can
* be used by the PCI implementation on a given Linux port
* for any purpose. -DaveM
*/
#define PCI_BASEADDR_SIZE(__pdev, __idx) \
({ unsigned int size, tmp; \
pci_read_config_dword(__pdev, PCI_BASE_ADDRESS_0 + (4*(__idx)), &tmp); \
pci_write_config_dword(__pdev, PCI_BASE_ADDRESS_0 + (4*(__idx)), 0xffffffff); \
pci_read_config_dword(__pdev, PCI_BASE_ADDRESS_0 + (4*(__idx)), &size); \
pci_write_config_dword(__pdev, PCI_BASE_ADDRESS_0 + (4*(__idx)), tmp); \
(4 - size); \
})
#else
#define pci_peek_next_dev(dev) ((dev) != pci_dev_g(&pci_devices) ? pci_dev_g((dev)->global_list.next) : NULL)
#define PCI_BASEADDR_FLAGS(idx) resource[idx].flags
#define PCI_BASEADDR_START(idx) resource[idx].start
#define PCI_BASEADDR_SIZE(dev,idx) (dev)->resource[idx].end - (dev)->resource[idx].start + 1
#endif /* } ifndef pci_for_each_dev */
/* procfs compat stuff... */
#ifdef CONFIG_PROC_FS
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,28)
#define CREATE_PROCDIR_ENTRY(x,y) create_proc_entry(x, S_IFDIR, y)
/* This is a macro so we don't need to pull all the procfs
* headers into this file. -DaveM
*/
#define create_proc_read_entry(name, mode, base, __read_proc, __data) \
({ struct proc_dir_entry *__res=create_proc_entry(name,mode,base); \
if (__res) { \
__res->read_proc=(__read_proc); \
__res->data=(__data); \
} \
__res; \
})
#else
#define CREATE_PROCDIR_ENTRY(x,y) proc_mkdir(x, y)
#endif
#endif
/* Compatability for the 2.3.x PCI DMA API. */
#ifndef PCI_DMA_BIDIRECTIONAL
/*{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#define PCI_DMA_BIDIRECTIONAL 0
#define PCI_DMA_TODEVICE 1
#define PCI_DMA_FROMDEVICE 2
#define PCI_DMA_NONE 3
#ifdef __KERNEL__
#include <asm/page.h>
/* Pure 2^n version of get_order */
static __inline__ int __get_order(unsigned long size)
{
int order;
size = (size-1) >> (PAGE_SHIFT-1);
order = -1;
do {
size >>= 1;
order++;
} while (size);
return order;
}
#endif
#define pci_alloc_consistent(hwdev, size, dma_handle) \
({ void *__ret = (void *)__get_free_pages(GFP_ATOMIC, __get_order(size)); \
if (__ret != NULL) { \
memset(__ret, 0, size); \
*(dma_handle) = virt_to_bus(__ret); \
} \
__ret; \
})
#define pci_free_consistent(hwdev, size, vaddr, dma_handle) \
free_pages((unsigned long)vaddr, __get_order(size))
#define pci_map_single(hwdev, ptr, size, direction) \
virt_to_bus(ptr);
#define pci_unmap_single(hwdev, dma_addr, size, direction) \
do { /* Nothing to do */ } while (0)
#define pci_map_sg(hwdev, sg, nents, direction) (nents)
#define pci_unmap_sg(hwdev, sg, nents, direction) \
do { /* Nothing to do */ } while(0)
#define sg_dma_address(sg) (virt_to_bus((sg)->address))
#define sg_dma_len(sg) ((sg)->length)
/*}-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#endif /* PCI_DMA_BIDIRECTIONAL */
/*}-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#endif /* _LINUX_COMPAT_H */
/*
* Copyright (c) 2000-2001 LSI Logic Corporation. All rights reserved.
*
* NAME: fc_log.h
* SUMMARY: MPI IocLogInfo definitions for the SYMFC9xx chips
* DESCRIPTION: Contains the enumerated list of values that may be returned
* in the IOCLogInfo field of a MPI Default Reply Message.
*
* CREATION DATE: 6/02/2000
* ID: $Id: fc_log.h,v 4.2 2001/03/01 18:28:59 fibre Exp $
*/
/*
* MpiIocLogInfo_t enum
*
* These 32 bit values are used in the IOCLogInfo field of the MPI reply
* messages.
* The value is 0xabcccccc where
* a = The type of log info as per the MPI spec. Since these codes are
* all for Fibre Channel this value will always be 2.
* b = Specifies a subclass of the firmware where
* 0 = FCP Initiator
* 1 = FCP Target
* 2 = LAN
* 3 = MPI Message Layer
* 4 = FC Link
* 5 = Context Manager
* 6 = Invalid Field Offset
* 7 = State Change Info
* all others are reserved for future use
* c = A specific value within the subclass.
*
* NOTE: Any new values should be added to the end of each subclass so that the
* codes remain consistent across firmware releases.
*/
typedef enum _MpiIocLogInfoFc
{
MPI_IOCLOGINFO_FC_INIT_BASE = 0x20000000,
MPI_IOCLOGINFO_FC_INIT_ERROR_OUT_OF_ORDER_FRAME = 0x20000001, /* received an out of order frame - unsupported */
MPI_IOCLOGINFO_FC_INIT_ERROR_BAD_START_OF_FRAME = 0x20000002, /* bad start of frame primative */
MPI_IOCLOGINFO_FC_INIT_ERROR_BAD_END_OF_FRAME = 0x20000003, /* bad end of frame primative */
MPI_IOCLOGINFO_FC_INIT_ERROR_OVER_RUN = 0x20000004, /* Receiver hardware detected overrun */
MPI_IOCLOGINFO_FC_INIT_ERROR_RX_OTHER = 0x20000005, /* Other errors caught by IOC which require retries */
MPI_IOCLOGINFO_FC_INIT_ERROR_SUBPROC_DEAD = 0x20000006, /* Main processor could not initialize sub-processor */
MPI_IOCLOGINFO_FC_TARGET_BASE = 0x21000000,
MPI_IOCLOGINFO_FC_TARGET_NO_PDISC = 0x21000001, /* not sent because we are waiting for a PDISC from the initiator */
MPI_IOCLOGINFO_FC_TARGET_NO_LOGIN = 0x21000002, /* not sent because we are not logged in to the remote node */
MPI_IOCLOGINFO_FC_TARGET_DOAR_KILLED_BY_LIP = 0x21000003, /* Data Out, Auto Response, not sent due to a LIP */
MPI_IOCLOGINFO_FC_TARGET_DIAR_KILLED_BY_LIP = 0x21000004, /* Data In, Auto Response, not sent due to a LIP */
MPI_IOCLOGINFO_FC_TARGET_DIAR_MISSING_DATA = 0x21000005, /* Data In, Auto Response, missing data frames */
MPI_IOCLOGINFO_FC_TARGET_DONR_KILLED_BY_LIP = 0x21000006, /* Data Out, No Response, not sent due to a LIP */
MPI_IOCLOGINFO_FC_TARGET_WRSP_KILLED_BY_LIP = 0x21000007, /* Auto-response after a write not sent due to a LIP */
MPI_IOCLOGINFO_FC_TARGET_DINR_KILLED_BY_LIP = 0x21000008, /* Data In, No Response, not completed due to a LIP */
MPI_IOCLOGINFO_FC_TARGET_DINR_MISSING_DATA = 0x21000009, /* Data In, No Response, missing data frames */
MPI_IOCLOGINFO_FC_TARGET_MRSP_KILLED_BY_LIP = 0x2100000a, /* Manual Response not sent due to a LIP */
MPI_IOCLOGINFO_FC_TARGET_NO_CLASS_3 = 0x2100000b, /* not sent because remote node does not support Class 3 */
MPI_IOCLOGINFO_FC_TARGET_LOGIN_NOT_VALID = 0x2100000c, /* not sent because login to remote node not validated */
MPI_IOCLOGINFO_FC_TARGET_FROM_OUTBOUND = 0x2100000e, /* cleared from the outbound after a logout */
MPI_IOCLOGINFO_FC_TARGET_WAITING_FOR_DATA_IN = 0x2100000f, /* cleared waiting for data after a logout */
MPI_IOCLOGINFO_FC_LAN_BASE = 0x22000000,
MPI_IOCLOGINFO_FC_LAN_TRANS_SGL_MISSING = 0x22000001, /* Transaction Context Sgl Missing */
MPI_IOCLOGINFO_FC_LAN_TRANS_WRONG_PLACE = 0x22000002, /* Transaction Context found before an EOB */
MPI_IOCLOGINFO_FC_LAN_TRANS_RES_BITS_SET = 0x22000003, /* Transaction Context value has reserved bits set */
MPI_IOCLOGINFO_FC_LAN_WRONG_SGL_FLAG = 0x22000004, /* Invalid SGL Flags */
MPI_IOCLOGINFO_FC_MSG_BASE = 0x23000000,
MPI_IOCLOGINFO_FC_LINK_BASE = 0x24000000,
MPI_IOCLOGINFO_FC_LINK_LOOP_INIT_TIMEOUT = 0x24000001, /* Loop initialization timed out */
MPI_IOCLOGINFO_FC_LINK_ALREADY_INITIALIZED = 0x24000002, /* Another system controller already initialized the loop */
MPI_IOCLOGINFO_FC_LINK_LINK_NOT_ESTABLISHED = 0x24000003, /* Not synchronized to signal or still negotiating (possible cable problem) */
MPI_IOCLOGINFO_FC_CTX_BASE = 0x25000000,
MPI_IOCLOGINFO_FC_INVALID_FIELD_BYTE_OFFSET = 0x26000000, /* The lower 24 bits give the byte offset of the field in the request message that is invalid. */
MPI_IOCLOGINFO_FC_INVALID_FIELD_MAX_OFFSET = 0x26ffffff,
MPI_IOCLOGINFO_FC_STATE_CHANGE = 0x27000000 /* The lower 24 bits give additional information concerning state change */
} MpiIocLogInfoFc_t;
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.
...@@ -207,6 +207,7 @@ comment 'Ethernet (1000 Mbit)' ...@@ -207,6 +207,7 @@ comment 'Ethernet (1000 Mbit)'
dep_tristate 'Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support' CONFIG_ACENIC $CONFIG_PCI dep_tristate 'Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support' CONFIG_ACENIC $CONFIG_PCI
dep_mbool ' Omit support for old Tigon I based AceNICs' CONFIG_ACENIC_OMIT_TIGON_I $CONFIG_ACENIC dep_mbool ' Omit support for old Tigon I based AceNICs' CONFIG_ACENIC_OMIT_TIGON_I $CONFIG_ACENIC
dep_tristate 'D-Link 2000-based Gigabit Ethernet support' CONFIG_DL2K $CONFIG_PCI
dep_tristate 'MyriCOM Gigabit Ethernet support' CONFIG_MYRI_SBUS $CONFIG_SBUS dep_tristate 'MyriCOM Gigabit Ethernet support' CONFIG_MYRI_SBUS $CONFIG_SBUS
dep_tristate 'Packet Engines Hamachi GNIC-II support' CONFIG_HAMACHI $CONFIG_PCI dep_tristate 'Packet Engines Hamachi GNIC-II support' CONFIG_HAMACHI $CONFIG_PCI
dep_tristate 'Packet Engines Yellowfin Gigabit-NIC support (EXPERIMENTAL)' CONFIG_YELLOWFIN $CONFIG_PCI $CONFIG_EXPERIMENTAL dep_tristate 'Packet Engines Yellowfin Gigabit-NIC support (EXPERIMENTAL)' CONFIG_YELLOWFIN $CONFIG_PCI $CONFIG_EXPERIMENTAL
......
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