Commit c1a6eca6 authored by Anton Altaparmakov's avatar Anton Altaparmakov Committed by Anton Altaparmakov

Merge cam.ac.uk:/usr/src/bklinux-2.5

into cam.ac.uk:/usr/src/bkntfs-tng-2.5
parents 3cc589c4 085c9a18
Serial UART 16450/16550 MIDI driver
===================================
The snd_adaptor module parameter allows you to select either:
0 - Roland Soundcanvas support (default)
1 - Midiator MS-124T support (1)
2 - Midiator MS-124W S/A mode (2)
3 - MS-124W M/B mode support (3)
For the Midiator MS-124W, you must set the physical M-S and A-B
switches on the Midiator to match the driver mode you select.
In Roland Soundcanvas mode, multiple ALSA raw MIDI substreams are supported
(midiCnD0-midiCnD15). Whenever you write to a different substream, the driver
sends the nonstandard MIDI command sequence F5 NN, where NN is the substream
number plus 1. Roland modules use this command to switch between different
"parts", so this feature lets you treat each part as a distinct raw MIDI
substream. The driver provides no way to send F5 00 (no selection) or to not
send the F5 NN command sequence at all; perhaps it ought to.
Usage example for simple serial converter:
/sbin/setserial /dev/ttyS0 none
/sbin/modprobe snd-serial-u16550 snd_port=0x3f8 snd_irq=4 \
snd_speed=115200
Usage example for Roland SoundCanvas with 4 MIDI ports:
/sbin/setserial /dev/ttyS0 none
/sbin/modprobe snd-serial-u16550 snd_port=0x3f8 snd_irq=4 snd_outs=4
In MS-124T mode, one raw MIDI substream is supported (midiCnD0); the snd_outs
module parameter is automatically set to 1. The driver sends the same data to
all four MIDI Out connectors. Set the A-B switch and the snd_speed module
parameter to match (A=19200, B=9600).
Usage example for MS-124T, with A-B switch in A position:
/sbin/setserial /dev/ttyS0 none
/sbin/modprobe snd-serial-u16550 snd_port=0x3f8 snd_irq=4 \
snd_adaptor=1 snd_speed=19200
In MS-124W S/A mode, one raw MIDI substream is supported (midiCnD0);
the snd_outs module parameter is automatically set to 1. The driver sends
the same data to all four MIDI Out connectors at full MIDI speed.
Usage example for S/A mode:
/sbin/setserial /dev/ttyS0 none
/sbin/modprobe snd-serial-u16550 snd_port=0x3f8 snd_irq=4 \
snd_adaptor=2
In MS-124W M/B mode, the driver supports 16 ALSA raw MIDI substreams;
the snd_outs module parameter is automatically set to 16. The substream
number gives a bitmask of which MIDI Out connectors the data should be
sent to, with midiCnD1 sending to Out 1, midiCnD2 to Out 2, midiCnD4 to
Out 3, and midiCnD8 to Out 4. Thus midiCnD15 sends the data to all 4 ports.
As a special case, midiCnD0 also sends to all ports, since it is not useful
to send the data to no ports. M/B mode has extra overhead to select the MIDI
Out for each byte, so the aggregate data rate across all four MIDI Outs is
at most one byte every 520 us, as compared with the full MIDI data rate of
one byte every 320 us per port.
Usage example for M/B mode:
/sbin/setserial /dev/ttyS0 none
/sbin/modprobe snd-serial-u16550 snd_port=0x3f8 snd_irq=4 \
snd_adaptor=3
The MS-124W hardware's M/A mode is currently not supported. This mode allows
the MIDI Outs to act independently at double the aggregate throughput of M/B,
but does not allow sending the same byte simultaneously to multiple MIDI Outs.
The M/A protocol requires the driver to twiddle the modem control lines under
timing constraints, so it would be a bit more complicated to implement than
the other modes.
Midiator models other than MS-124W and MS-124T are currently not supported.
Note that the suffix letter is significant; the MS-124 and MS-124B are not
compatible, nor are the other known models MS-101, MS-101B, MS-103, and MS-114.
I do have documentation (tim.mann@compaq.com) that partially covers these models,
but no units to experiment with. The MS-124W support is tested with a real unit.
The MS-124T support is untested, but should work.
VERSION = 2 VERSION = 2
PATCHLEVEL = 5 PATCHLEVEL = 5
SUBLEVEL = 7 SUBLEVEL = 7
EXTRAVERSION =-pre2 EXTRAVERSION =
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......
...@@ -290,7 +290,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -290,7 +290,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -274,7 +274,6 @@ CONFIG_BLK_DEV_CY82C693=y ...@@ -274,7 +274,6 @@ CONFIG_BLK_DEV_CY82C693=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
......
...@@ -564,7 +564,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -564,7 +564,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -429,7 +429,6 @@ CONFIG_BLK_DEV_PDC202XX=y ...@@ -429,7 +429,6 @@ CONFIG_BLK_DEV_PDC202XX=y
# CONFIG_PDC202XX_BURST is not set # CONFIG_PDC202XX_BURST is not set
# CONFIG_BLK_DEV_OSB4 is not set # CONFIG_BLK_DEV_OSB4 is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_SL82C105=y
......
...@@ -478,7 +478,6 @@ CONFIG_BLK_DEV_CMD64X=y ...@@ -478,7 +478,6 @@ CONFIG_BLK_DEV_CMD64X=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_BLK_DEV_SL82C105 is not set # CONFIG_BLK_DEV_SL82C105 is not set
......
...@@ -149,7 +149,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -149,7 +149,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -305,7 +305,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -305,7 +305,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -285,7 +285,6 @@ CONFIG_PIIX_TUNING=y ...@@ -285,7 +285,6 @@ CONFIG_PIIX_TUNING=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
......
...@@ -131,7 +131,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -131,7 +131,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -248,7 +248,6 @@ CONFIG_BLK_DEV_PIIX=y ...@@ -248,7 +248,6 @@ CONFIG_BLK_DEV_PIIX=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
......
...@@ -235,7 +235,6 @@ CONFIG_BLK_DEV_IDEDMA=y ...@@ -235,7 +235,6 @@ CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
......
...@@ -235,7 +235,6 @@ CONFIG_BLK_DEV_IDEDMA=y ...@@ -235,7 +235,6 @@ CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
......
...@@ -161,7 +161,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -161,7 +161,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -350,7 +350,6 @@ if [ "$CONFIG_SGI_IP22" != "y" -a \ ...@@ -350,7 +350,6 @@ if [ "$CONFIG_SGI_IP22" != "y" -a \
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -248,7 +248,6 @@ CONFIG_BLK_DEV_IDEPCI=y ...@@ -248,7 +248,6 @@ CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
......
...@@ -317,7 +317,6 @@ CONFIG_IT8172_TUNING=y ...@@ -317,7 +317,6 @@ CONFIG_IT8172_TUNING=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
CONFIG_IDE_CHIPSETS=y CONFIG_IDE_CHIPSETS=y
......
...@@ -147,7 +147,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -147,7 +147,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -425,7 +425,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -425,7 +425,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -276,7 +276,6 @@ CONFIG_BLK_DEV_CMD64X=y ...@@ -276,7 +276,6 @@ CONFIG_BLK_DEV_CMD64X=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_SL82C105=y
......
...@@ -259,7 +259,6 @@ CONFIG_BLK_DEV_ALI15X3=y ...@@ -259,7 +259,6 @@ CONFIG_BLK_DEV_ALI15X3=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_BLK_DEV_SL82C105 is not set # CONFIG_BLK_DEV_SL82C105 is not set
......
...@@ -263,7 +263,6 @@ CONFIG_BLK_DEV_IDEPCI=y ...@@ -263,7 +263,6 @@ CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_BLK_DEV_SL82C105 is not set # CONFIG_BLK_DEV_SL82C105 is not set
......
...@@ -256,7 +256,6 @@ CONFIG_BLK_DEV_IDEPCI=y ...@@ -256,7 +256,6 @@ CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_PDC202XX_BURST is not set # CONFIG_PDC202XX_BURST is not set
# CONFIG_BLK_DEV_OSB4 is not set # CONFIG_BLK_DEV_OSB4 is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_BLK_DEV_SL82C105 is not set # CONFIG_BLK_DEV_SL82C105 is not set
......
...@@ -266,7 +266,6 @@ CONFIG_BLK_DEV_CMD64X=y ...@@ -266,7 +266,6 @@ CONFIG_BLK_DEV_CMD64X=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_SL82C105=y
......
...@@ -270,7 +270,6 @@ CONFIG_BLK_DEV_IDEDMA=y ...@@ -270,7 +270,6 @@ CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
CONFIG_BLK_DEV_VIA82CXXX=y CONFIG_BLK_DEV_VIA82CXXX=y
CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_SL82C105=y
......
...@@ -233,7 +233,6 @@ CONFIG_BLK_DEV_IDEDMA=y ...@@ -233,7 +233,6 @@ CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_SL82C105=y
......
...@@ -276,7 +276,6 @@ CONFIG_BLK_DEV_CMD64X=y ...@@ -276,7 +276,6 @@ CONFIG_BLK_DEV_CMD64X=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
CONFIG_BLK_DEV_SL82C105=y CONFIG_BLK_DEV_SL82C105=y
......
...@@ -28,7 +28,7 @@ struct aligninfo { ...@@ -28,7 +28,7 @@ struct aligninfo {
#define OPCD(inst) (((inst) & 0xFC000000) >> 26) #define OPCD(inst) (((inst) & 0xFC000000) >> 26)
#define RS(inst) (((inst) & 0x03E00000) >> 21) #define RS(inst) (((inst) & 0x03E00000) >> 21)
#define RA(inst) (((inst) & 0x001F0000) >> 16) #define RA(inst) (((inst) & 0x001F0000) >> 16)
#define IS_DFORM(code) ((code) >= 32 && (code) <= 47) #define IS_DFORM(code) ((code) >= 32 && (code) <= 55)
#endif #endif
#define INVALID { 0, 0 } #define INVALID { 0, 0 }
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
#define FB_MAX 8 #define FB_MAX 8
#endif #endif
#define ALIGN(x) (((x) + sizeof(unsigned long)-1) & -sizeof(unsigned long)) #define ALIGNUL(x) (((x) + sizeof(unsigned long)-1) & -sizeof(unsigned long))
struct prom_args { struct prom_args {
const char *service; const char *service;
...@@ -376,7 +376,7 @@ check_display(unsigned long mem) ...@@ -376,7 +376,7 @@ check_display(unsigned long mem)
} }
} }
return ALIGN(mem); return ALIGNUL(mem);
} }
/* This function will enable the early boot text when doing OF booting. This /* This function will enable the early boot text when doing OF booting. This
...@@ -457,7 +457,7 @@ copy_device_tree(unsigned long mem_start, unsigned long mem_end) ...@@ -457,7 +457,7 @@ copy_device_tree(unsigned long mem_start, unsigned long mem_end)
prom_exit(); prom_exit();
} }
allnextp = &allnodes; allnextp = &allnodes;
mem_start = ALIGN(mem_start); mem_start = ALIGNUL(mem_start);
new_start = inspect_node(root, 0, mem_start, mem_end, &allnextp); new_start = inspect_node(root, 0, mem_start, mem_end, &allnextp);
*allnextp = 0; *allnextp = 0;
return new_start; return new_start;
...@@ -501,7 +501,7 @@ inspect_node(phandle node, struct device_node *dad, ...@@ -501,7 +501,7 @@ inspect_node(phandle node, struct device_node *dad,
if ((int) call_prom("nextprop", 3, 1, node, prev_name, if ((int) call_prom("nextprop", 3, 1, node, prev_name,
namep) <= 0) namep) <= 0)
break; break;
mem_start = ALIGN((unsigned long)namep + strlen(namep) + 1); mem_start = ALIGNUL((unsigned long)namep + strlen(namep) + 1);
prev_name = namep; prev_name = namep;
valp = (unsigned char *) mem_start; valp = (unsigned char *) mem_start;
pp->value = PTRUNRELOC(valp); pp->value = PTRUNRELOC(valp);
...@@ -514,7 +514,7 @@ inspect_node(phandle node, struct device_node *dad, ...@@ -514,7 +514,7 @@ inspect_node(phandle node, struct device_node *dad,
if (pp->length > MAX_PROPERTY_LENGTH) if (pp->length > MAX_PROPERTY_LENGTH)
continue; /* ignore this property */ continue; /* ignore this property */
#endif #endif
mem_start = ALIGN(mem_start + pp->length); mem_start = ALIGNUL(mem_start + pp->length);
*prev_propp = PTRUNRELOC(pp); *prev_propp = PTRUNRELOC(pp);
prev_propp = &pp->next; prev_propp = &pp->next;
} }
...@@ -526,7 +526,7 @@ inspect_node(phandle node, struct device_node *dad, ...@@ -526,7 +526,7 @@ inspect_node(phandle node, struct device_node *dad,
namep = (char *) (pp + 1); namep = (char *) (pp + 1);
pp->name = PTRUNRELOC(namep); pp->name = PTRUNRELOC(namep);
strcpy(namep, "linux,phandle"); strcpy(namep, "linux,phandle");
mem_start = ALIGN((unsigned long)namep + strlen(namep) + 1); mem_start = ALIGNUL((unsigned long)namep + strlen(namep) + 1);
pp->value = (unsigned char *) PTRUNRELOC(&np->node); pp->value = (unsigned char *) PTRUNRELOC(&np->node);
pp->length = sizeof(np->node); pp->length = sizeof(np->node);
} }
...@@ -538,7 +538,7 @@ inspect_node(phandle node, struct device_node *dad, ...@@ -538,7 +538,7 @@ inspect_node(phandle node, struct device_node *dad,
if (l >= 0) { if (l >= 0) {
np->full_name = PTRUNRELOC((char *) mem_start); np->full_name = PTRUNRELOC((char *) mem_start);
*(char *)(mem_start + l) = 0; *(char *)(mem_start + l) = 0;
mem_start = ALIGN(mem_start + l + 1); mem_start = ALIGNUL(mem_start + l + 1);
} }
/* do all our children */ /* do all our children */
...@@ -741,7 +741,7 @@ prom_init(int r3, int r4, prom_entry pp) ...@@ -741,7 +741,7 @@ prom_init(int r3, int r4, prom_entry pp)
*d = 0; *d = 0;
call_prom("canon", 3, 1, p, d, 1<<20); call_prom("canon", 3, 1, p, d, 1<<20);
bootdevice = PTRUNRELOC(d); bootdevice = PTRUNRELOC(d);
mem = ALIGN(mem + strlen(d) + 1); mem = ALIGNUL(mem + strlen(d) + 1);
} }
prom_instantiate_rtas(); prom_instantiate_rtas();
......
...@@ -400,13 +400,17 @@ heathrow_modem_enable(struct device_node* node, int param, int value) ...@@ -400,13 +400,17 @@ heathrow_modem_enable(struct device_node* node, int param, int value)
LOCK(flags); LOCK(flags);
MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio | 1); MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio | 1);
(void)MACIO_IN8(HRW_GPIO_MODEM_RESET); (void)MACIO_IN8(HRW_GPIO_MODEM_RESET);
UNLOCK(flags); mdelay(250); LOCK(flags); UNLOCK(flags);
mdelay(250);
LOCK(flags);
MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio); MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio);
(void)MACIO_IN8(HRW_GPIO_MODEM_RESET); (void)MACIO_IN8(HRW_GPIO_MODEM_RESET);
UNLOCK(flags); mdelay(250); LOCK(flags); UNLOCK(flags);
mdelay(250);
LOCK(flags);
MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio | 1); MACIO_OUT8(HRW_GPIO_MODEM_RESET, gpio | 1);
(void)MACIO_IN8(HRW_GPIO_MODEM_RESET); (void)MACIO_IN8(HRW_GPIO_MODEM_RESET);
UNLOCK(flags); mdelay(250); LOCK(flags); UNLOCK(flags);
} }
return 0; return 0;
} }
......
...@@ -92,7 +92,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -92,7 +92,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -218,7 +218,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -218,7 +218,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -110,14 +110,11 @@ if [ "$CONFIG_PCI" = "y" ]; then ...@@ -110,14 +110,11 @@ if [ "$CONFIG_PCI" = "y" ]; then
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
else else
define_bool CONFIG_IDE n define_bool CONFIG_IDE n
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
......
...@@ -112,7 +112,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -112,7 +112,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -311,7 +311,6 @@ CONFIG_BLK_DEV_NS87415=y ...@@ -311,7 +311,6 @@ CONFIG_BLK_DEV_NS87415=y
# CONFIG_PDC202XX_FORCE is not set # CONFIG_PDC202XX_FORCE is not set
# CONFIG_BLK_DEV_SVWKS is not set # CONFIG_BLK_DEV_SVWKS is not set
# CONFIG_BLK_DEV_SIS5513 is not set # CONFIG_BLK_DEV_SIS5513 is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set # CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set # CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
......
...@@ -122,7 +122,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE ...@@ -122,7 +122,6 @@ tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in source drivers/ide/Config.in
else else
define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n define_bool CONFIG_BLK_DEV_HD n
fi fi
endmenu endmenu
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/blk.h> #include <linux/blk.h>
#include <linux/completion.h>
#include <linux/cdrom.h> #include <linux/cdrom.h>
......
...@@ -352,19 +352,10 @@ CONFIG_WDC_ALI15X3 ...@@ -352,19 +352,10 @@ CONFIG_WDC_ALI15X3
SAY N! SAY N!
CONFIG_BLK_DEV_AMD74XX CONFIG_BLK_DEV_AMD74XX
This driver ensures (U)DMA support for the AMD756/760 Viper This driver adds explicit support for AMD-7xx and AMD-8111 chips
chipsets. and also for the nVidia nForce chip. This allows the kernel to
change PIO, DMA and UDMA speeds and to configure the chip to
If you say Y here, you also need to say Y to "Use DMA by default optimum performance.
when available", above.
Please read the comments at the top of <file:drivers/ide/amd74xx.c>.
If unsure, say N.
CONFIG_AMD74XX_OVERRIDE
This option auto-forces the ata66 flag.
This effect can be also invoked by calling "idex=ata66"
If unsure, say N.
CONFIG_BLK_DEV_CMD64X CONFIG_BLK_DEV_CMD64X
Say Y here if you have an IDE controller which uses any of these Say Y here if you have an IDE controller which uses any of these
...@@ -435,28 +426,10 @@ CONFIG_BLK_DEV_SVWKS ...@@ -435,28 +426,10 @@ CONFIG_BLK_DEV_SVWKS
chipsets. chipsets.
CONFIG_BLK_DEV_PIIX CONFIG_BLK_DEV_PIIX
This driver adds PIO mode setting and tuning for all PIIX IDE This driver adds explicit support for Intel PIIX and ICH chips
controllers by Intel. Since the BIOS can sometimes improperly tune and also for the Efar Victory66 (slc90e66) chip. This allows
PIO 0-4 mode settings, this allows dynamic tuning of the chipset the kernel to change PIO, DMA and UDMA speeds and to configure
via the standard end-user tool 'hdparm'. the chip to optimum performance.
Please read the comments at the top of <file:drivers/ide/piix.c>.
If you say Y here, you should also say Y to "PIIXn Tuning support",
below.
If unsure, say N.
CONFIG_PIIX_TUNING
This driver extension adds DMA mode setting and tuning for all PIIX
IDE controllers by Intel. Since the BIOS can sometimes improperly
set up the device/adapter combination and speed limits, it has
become a necessity to back/forward speed devices as needed.
Case 430HX/440FX PIIX3 need speed limits to reduce UDMA to DMA mode
2 if the BIOS can not perform this task at initialization.
If unsure, say N.
CONFIG_BLK_DEV_PDC202XX CONFIG_BLK_DEV_PDC202XX
Promise Ultra33 or PDC20246 Promise Ultra33 or PDC20246
...@@ -513,19 +486,6 @@ CONFIG_BLK_DEV_SIS5513 ...@@ -513,19 +486,6 @@ CONFIG_BLK_DEV_SIS5513
Please read the comments at the top of <file:drivers/ide/sis5513.c>. Please read the comments at the top of <file:drivers/ide/sis5513.c>.
CONFIG_BLK_DEV_SLC90E66
This driver ensures (U)DMA support for Victroy66 SouthBridges for
SMsC with Intel NorthBridges. This is an Ultra66 based chipset.
The nice thing about it is that you can mix Ultra/DMA/PIO devices
and it will handle timing cycles. Since this is an improved
look-a-like to the PIIX4 it should be a nice addition.
If you say Y here, you need to say Y to "Use DMA by default when
available" as well.
Please read the comments at the top of
<file:drivers/ide/slc90e66.c>.
CONFIG_BLK_DEV_SL82C105 CONFIG_BLK_DEV_SL82C105
If you have a Winbond SL82c105 IDE controller, say Y here to enable If you have a Winbond SL82c105 IDE controller, say Y here to enable
special configuration for this chip. This is common on various CHRP special configuration for this chip. This is common on various CHRP
...@@ -538,20 +498,9 @@ CONFIG_BLK_DEV_TRM290 ...@@ -538,20 +498,9 @@ CONFIG_BLK_DEV_TRM290
Please read the comments at the top of <file:drivers/ide/trm290.c>. Please read the comments at the top of <file:drivers/ide/trm290.c>.
CONFIG_BLK_DEV_VIA82CXXX CONFIG_BLK_DEV_VIA82CXXX
This allows you to configure your chipset for a better use while This driver adds explicit support for VIA BusMastering IDE chips.
running PIO/(U)DMA, it will allow you to enable efficiently the This allows the kernel to change PIO, DMA and UDMA speeds and to
second channel dma usage, as it may not be set by BIOS. It will try configure the chip to optimum performance.
to set fifo configuration at its best. It will allow you to get
information from /proc/ide/via provided you enabled "/proc file
system" support.
Please read the comments at the top of
<file:drivers/ide/via82cxxx.c>.
If you say Y here, then say Y to "Use DMA by default when available"
as well.
If unsure, say N.
CONFIG_BLK_DEV_IDE_RAPIDE CONFIG_BLK_DEV_IDE_RAPIDE
Say Y here if you want to support the Yellowstone RapIDE controller Say Y here if you want to support the Yellowstone RapIDE controller
......
...@@ -53,18 +53,14 @@ if [ "$CONFIG_BLK_DEV_IDE" != "n" ]; then ...@@ -53,18 +53,14 @@ if [ "$CONFIG_BLK_DEV_IDE" != "n" ]; then
dep_mbool ' AEC62XX Tuning support' CONFIG_AEC62XX_TUNING $CONFIG_BLK_DEV_AEC62XX dep_mbool ' AEC62XX Tuning support' CONFIG_AEC62XX_TUNING $CONFIG_BLK_DEV_AEC62XX
dep_bool ' ALI M15x3 chipset support' CONFIG_BLK_DEV_ALI15X3 $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' ALI M15x3 chipset support' CONFIG_BLK_DEV_ALI15X3 $CONFIG_BLK_DEV_IDEDMA_PCI
dep_mbool ' ALI M15x3 WDC support (DANGEROUS)' CONFIG_WDC_ALI15X3 $CONFIG_BLK_DEV_ALI15X3 dep_mbool ' ALI M15x3 WDC support (DANGEROUS)' CONFIG_WDC_ALI15X3 $CONFIG_BLK_DEV_ALI15X3
dep_bool ' AMD Viper support' CONFIG_BLK_DEV_AMD74XX $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' AMD and nVidia chipset support' CONFIG_BLK_DEV_AMD74XX $CONFIG_BLK_DEV_IDEDMA_PCI
dep_mbool ' AMD Viper ATA-66 Override (WIP)' CONFIG_AMD74XX_OVERRIDE $CONFIG_BLK_DEV_AMD74XX $CONFIG_IDEDMA_PCI_WIP
dep_bool ' CMD64X chipset support' CONFIG_BLK_DEV_CMD64X $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' CMD64X chipset support' CONFIG_BLK_DEV_CMD64X $CONFIG_BLK_DEV_IDEDMA_PCI
dep_bool ' CY82C693 chipset support' CONFIG_BLK_DEV_CY82C693 $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' CY82C693 chipset support' CONFIG_BLK_DEV_CY82C693 $CONFIG_BLK_DEV_IDEDMA_PCI
dep_bool ' Cyrix CS5530 MediaGX chipset support' CONFIG_BLK_DEV_CS5530 $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' Cyrix CS5530 MediaGX chipset support' CONFIG_BLK_DEV_CS5530 $CONFIG_BLK_DEV_IDEDMA_PCI
dep_bool ' HPT34X chipset support' CONFIG_BLK_DEV_HPT34X $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' HPT34X chipset support' CONFIG_BLK_DEV_HPT34X $CONFIG_BLK_DEV_IDEDMA_PCI
dep_mbool ' HPT34X AUTODMA support (WIP)' CONFIG_HPT34X_AUTODMA $CONFIG_BLK_DEV_HPT34X $CONFIG_IDEDMA_PCI_WIP dep_mbool ' HPT34X AUTODMA support (WIP)' CONFIG_HPT34X_AUTODMA $CONFIG_BLK_DEV_HPT34X $CONFIG_IDEDMA_PCI_WIP
dep_bool ' HPT366 chipset support' CONFIG_BLK_DEV_HPT366 $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' HPT366 chipset support' CONFIG_BLK_DEV_HPT366 $CONFIG_BLK_DEV_IDEDMA_PCI
if [ "$CONFIG_X86" = "y" -o "$CONFIG_IA64" = "y" ]; then dep_bool ' Intel and Efar (SMsC) chipset support' CONFIG_BLK_DEV_PIIX $CONFIG_BLK_DEV_IDEDMA_PCI
dep_mbool ' Intel PIIXn chipsets support' CONFIG_BLK_DEV_PIIX $CONFIG_BLK_DEV_IDEDMA_PCI
dep_mbool ' PIIXn Tuning support' CONFIG_PIIX_TUNING $CONFIG_BLK_DEV_PIIX $CONFIG_IDEDMA_PCI_AUTO
fi
if [ "$CONFIG_MIPS_ITE8172" = "y" -o "$CONFIG_MIPS_IVR" = "y" ]; then if [ "$CONFIG_MIPS_ITE8172" = "y" -o "$CONFIG_MIPS_IVR" = "y" ]; then
dep_mbool ' IT8172 IDE support' CONFIG_BLK_DEV_IT8172 $CONFIG_BLK_DEV_IDEDMA_PCI dep_mbool ' IT8172 IDE support' CONFIG_BLK_DEV_IT8172 $CONFIG_BLK_DEV_IDEDMA_PCI
dep_mbool ' IT8172 IDE Tuning support' CONFIG_IT8172_TUNING $CONFIG_BLK_DEV_IT8172 $CONFIG_IDEDMA_PCI_AUTO dep_mbool ' IT8172 IDE Tuning support' CONFIG_IT8172_TUNING $CONFIG_BLK_DEV_IT8172 $CONFIG_IDEDMA_PCI_AUTO
...@@ -77,9 +73,8 @@ if [ "$CONFIG_BLK_DEV_IDE" != "n" ]; then ...@@ -77,9 +73,8 @@ if [ "$CONFIG_BLK_DEV_IDE" != "n" ]; then
dep_bool ' Special FastTrak Feature' CONFIG_PDC202XX_FORCE $CONFIG_BLK_DEV_PDC202XX dep_bool ' Special FastTrak Feature' CONFIG_PDC202XX_FORCE $CONFIG_BLK_DEV_PDC202XX
dep_bool ' ServerWorks OSB4/CSB5 chipsets support' CONFIG_BLK_DEV_SVWKS $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86 dep_bool ' ServerWorks OSB4/CSB5 chipsets support' CONFIG_BLK_DEV_SVWKS $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86
dep_bool ' SiS5513 chipset support' CONFIG_BLK_DEV_SIS5513 $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86 dep_bool ' SiS5513 chipset support' CONFIG_BLK_DEV_SIS5513 $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86
dep_bool ' SLC90E66 chipset support' CONFIG_BLK_DEV_SLC90E66 $CONFIG_BLK_DEV_IDEDMA_PCI $CONFIG_X86
dep_bool ' Tekram TRM290 chipset support (EXPERIMENTAL)' CONFIG_BLK_DEV_TRM290 $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' Tekram TRM290 chipset support (EXPERIMENTAL)' CONFIG_BLK_DEV_TRM290 $CONFIG_BLK_DEV_IDEDMA_PCI
dep_bool ' VIA82CXXX chipset support' CONFIG_BLK_DEV_VIA82CXXX $CONFIG_BLK_DEV_IDEDMA_PCI dep_bool ' VIA chipset support' CONFIG_BLK_DEV_VIA82CXXX $CONFIG_BLK_DEV_IDEDMA_PCI
fi fi
if [ "$CONFIG_PPC" = "y" -o "$CONFIG_ARM" = "y" ]; then if [ "$CONFIG_PPC" = "y" -o "$CONFIG_ARM" = "y" ]; then
...@@ -167,32 +162,6 @@ else ...@@ -167,32 +162,6 @@ else
define_bool CONFIG_DMA_NONPCI n define_bool CONFIG_DMA_NONPCI n
fi fi
if [ "$CONFIG_IDE_CHIPSETS" = "y" -o \
"$CONFIG_BLK_DEV_AEC62XX" = "y" -o \
"$CONFIG_BLK_DEV_ALI15X3" = "y" -o \
"$CONFIG_BLK_DEV_AMD74XX" = "y" -o \
"$CONFIG_BLK_DEV_CMD640" = "y" -o \
"$CONFIG_BLK_DEV_CMD64X" = "y" -o \
"$CONFIG_BLK_DEV_CS5530" = "y" -o \
"$CONFIG_BLK_DEV_CY82C693" = "y" -o \
"$CONFIG_BLK_DEV_HPT34X" = "y" -o \
"$CONFIG_BLK_DEV_HPT366" = "y" -o \
"$CONFIG_BLK_DEV_IDE_PMAC" = "y" -o \
"$CONFIG_BLK_DEV_OPTI621" = "y" -o \
"$CONFIG_BLK_DEV_SVWKS" = "y" -o \
"$CONFIG_BLK_DEV_PDC202XX" = "y" -o \
"$CONFIG_BLK_DEV_PIIX" = "y" -o \
"$CONFIG_BLK_DEV_IT8172" = "y" -o \
"$CONFIG_BLK_DEV_SIS5513" = "y" -o \
"$CONFIG_BLK_DEV_SLC90E66" = "y" -o \
"$CONFIG_BLK_DEV_SL82C105" = "y" -o \
"$CONFIG_BLK_DEV_VIA82CXXX" = "y" -o \
"$CONFIG_BLK_DEV_MPC8xx_IDE" = "y" ]; then
define_bool CONFIG_BLK_DEV_IDE_MODES y
else
define_bool CONFIG_BLK_DEV_IDE_MODES n
fi
dep_tristate 'Support for IDE Raid controllers' CONFIG_BLK_DEV_ATARAID $CONFIG_BLK_DEV_IDE $CONFIG_EXPERIMENTAL dep_tristate 'Support for IDE Raid controllers' CONFIG_BLK_DEV_ATARAID $CONFIG_BLK_DEV_IDE $CONFIG_EXPERIMENTAL
dep_tristate ' Support Promise software RAID (Fasttrak(tm))' CONFIG_BLK_DEV_ATARAID_PDC $CONFIG_BLK_DEV_IDE $CONFIG_EXPERIMENTAL $CONFIG_BLK_DEV_ATARAID dep_tristate ' Support Promise software RAID (Fasttrak(tm))' CONFIG_BLK_DEV_ATARAID_PDC $CONFIG_BLK_DEV_IDE $CONFIG_EXPERIMENTAL $CONFIG_BLK_DEV_ATARAID
dep_tristate ' Highpoint 370 software RAID' CONFIG_BLK_DEV_ATARAID_HPT $CONFIG_BLK_DEV_IDE $CONFIG_EXPERIMENTAL $CONFIG_BLK_DEV_ATARAID dep_tristate ' Highpoint 370 software RAID' CONFIG_BLK_DEV_ATARAID_HPT $CONFIG_BLK_DEV_IDE $CONFIG_EXPERIMENTAL $CONFIG_BLK_DEV_ATARAID
......
...@@ -60,7 +60,6 @@ ide-obj-$(CONFIG_BLK_DEV_QD65XX) += qd65xx.o ...@@ -60,7 +60,6 @@ ide-obj-$(CONFIG_BLK_DEV_QD65XX) += qd65xx.o
ide-obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o ide-obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o
ide-obj-$(CONFIG_BLK_DEV_RZ1000) += rz1000.o ide-obj-$(CONFIG_BLK_DEV_RZ1000) += rz1000.o
ide-obj-$(CONFIG_BLK_DEV_SIS5513) += sis5513.o ide-obj-$(CONFIG_BLK_DEV_SIS5513) += sis5513.o
ide-obj-$(CONFIG_BLK_DEV_SLC90E66) += slc90e66.o
ide-obj-$(CONFIG_BLK_DEV_SL82C105) += sl82c105.o ide-obj-$(CONFIG_BLK_DEV_SL82C105) += sl82c105.o
ide-obj-$(CONFIG_BLK_DEV_TRM290) += trm290.o ide-obj-$(CONFIG_BLK_DEV_TRM290) += trm290.o
ide-obj-$(CONFIG_BLK_DEV_UMC8672) += umc8672.o ide-obj-$(CONFIG_BLK_DEV_UMC8672) += umc8672.o
......
/* /*
* $Id: amd74xx.c,v 2.7 2002/09/01 17:37:00 vojtech Exp $ * $Id: amd74xx.c,v 2.8 2002/03/14 11:52:20 vojtech Exp $
* *
* Copyright (c) 2000-2002 Vojtech Pavlik * Copyright (c) 2000-2002 Vojtech Pavlik
* *
...@@ -46,13 +46,13 @@ ...@@ -46,13 +46,13 @@
#include "ata-timing.h" #include "ata-timing.h"
#define AMD_IDE_ENABLE 0x40 #define AMD_IDE_ENABLE (0x00 + amd_config->base)
#define AMD_IDE_CONFIG 0x41 #define AMD_IDE_CONFIG (0x01 + amd_config->base)
#define AMD_CABLE_DETECT 0x42 #define AMD_CABLE_DETECT (0x02 + amd_config->base)
#define AMD_DRIVE_TIMING 0x48 #define AMD_DRIVE_TIMING (0x08 + amd_config->base)
#define AMD_8BIT_TIMING 0x4e #define AMD_8BIT_TIMING (0x0e + amd_config->base)
#define AMD_ADDRESS_SETUP 0x4c #define AMD_ADDRESS_SETUP (0x0c + amd_config->base)
#define AMD_UDMA_TIMING 0x50 #define AMD_UDMA_TIMING (0x10 + amd_config->base)
#define AMD_UDMA 0x07 #define AMD_UDMA 0x07
#define AMD_UDMA_33 0x01 #define AMD_UDMA_33 0x01
...@@ -66,18 +66,19 @@ ...@@ -66,18 +66,19 @@
*/ */
static struct amd_ide_chip { static struct amd_ide_chip {
char *name;
unsigned short id; unsigned short id;
unsigned char rev; unsigned char rev;
unsigned int base;
unsigned char flags; unsigned char flags;
} amd_ide_chips[] = { } amd_ide_chips[] = {
{ "8111", PCI_DEVICE_ID_AMD_8111_IDE, 0x00, AMD_UDMA_100 }, { PCI_DEVICE_ID_AMD_8111_IDE, 0x00, 0x40, AMD_UDMA_100 }, /* AMD-8111 */
{ "768 Opus", PCI_DEVICE_ID_AMD_OPUS_7441, 0x00, AMD_UDMA_100 }, { PCI_DEVICE_ID_AMD_OPUS_7441, 0x00, 0x40, AMD_UDMA_100 }, /* AMD-768 Opus */
{ "766 Viper", PCI_DEVICE_ID_AMD_VIPER_7411, 0x00, AMD_UDMA_100 | AMD_BAD_FIFO }, { PCI_DEVICE_ID_AMD_VIPER_7411, 0x00, 0x40, AMD_UDMA_100 | AMD_BAD_FIFO }, /* AMD-766 Viper */
{ "756/c4+ Viper", PCI_DEVICE_ID_AMD_VIPER_7409, 0x07, AMD_UDMA_66 }, { PCI_DEVICE_ID_AMD_VIPER_7409, 0x07, 0x40, AMD_UDMA_66 }, /* AMD-756/c4+ Viper */
{ "756 Viper", PCI_DEVICE_ID_AMD_VIPER_7409, 0x00, AMD_UDMA_66 | AMD_BAD_SWDMA }, { PCI_DEVICE_ID_AMD_VIPER_7409, 0x00, 0x40, AMD_UDMA_66 | AMD_BAD_SWDMA }, /* AMD-756 Viper */
{ "755 Cobra", PCI_DEVICE_ID_AMD_COBRA_7401, 0x00, AMD_UDMA_33 | AMD_BAD_SWDMA }, { PCI_DEVICE_ID_AMD_COBRA_7401, 0x00, 0x40, AMD_UDMA_33 | AMD_BAD_SWDMA }, /* AMD-755 Cobra */
{ NULL } { PCI_DEVICE_ID_NVIDIA_NFORCE_IDE, 0x00, 0x50, AMD_UDMA_100 }, /* nVidia nForce */
{ 0 }
}; };
static struct amd_ide_chip *amd_config; static struct amd_ide_chip *amd_config;
...@@ -119,8 +120,8 @@ static int amd_get_info(char *buffer, char **addr, off_t offset, int count) ...@@ -119,8 +120,8 @@ static int amd_get_info(char *buffer, char **addr, off_t offset, int count)
amd_print("----------AMD BusMastering IDE Configuration----------------"); amd_print("----------AMD BusMastering IDE Configuration----------------");
amd_print("Driver Version: 2.7"); amd_print("Driver Version: 2.8");
amd_print("South Bridge: AMD-%s", amd_config->name); amd_print("South Bridge: %s", bmide_dev->name);
pci_read_config_byte(dev, PCI_REVISION_ID, &t); pci_read_config_byte(dev, PCI_REVISION_ID, &t);
amd_print("Revision: IDE %#x", t); amd_print("Revision: IDE %#x", t);
...@@ -389,8 +390,8 @@ unsigned int __init pci_init_amd74xx(struct pci_dev *dev, const char *name) ...@@ -389,8 +390,8 @@ unsigned int __init pci_init_amd74xx(struct pci_dev *dev, const char *name)
*/ */
pci_read_config_byte(dev, PCI_REVISION_ID, &t); pci_read_config_byte(dev, PCI_REVISION_ID, &t);
printk(KERN_INFO "AMD_IDE: AMD-%s (rev %02x) IDE %s controller on pci%s\n", printk(KERN_INFO "AMD_IDE: %s (rev %02x) %s controller on pci%s\n",
amd_config->name, t, amd_dma[amd_config->flags & AMD_UDMA], dev->slot_name); dev->name, t, amd_dma[amd_config->flags & AMD_UDMA], dev->slot_name);
/* /*
* Register /proc/ide/amd74xx entry * Register /proc/ide/amd74xx entry
......
...@@ -106,40 +106,51 @@ static int lba_capacity_is_ok (struct hd_driveid *id) ...@@ -106,40 +106,51 @@ static int lba_capacity_is_ok (struct hd_driveid *id)
return 0; /* lba_capacity value may be bad */ return 0; /* lba_capacity value may be bad */
} }
static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block); static ide_startstop_t chs_do_request(ide_drive_t *drive, struct request *rq, unsigned long block);
static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block); static ide_startstop_t lba28_do_request(ide_drive_t *drive, struct request *rq, unsigned long block);
static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long long block); static ide_startstop_t lba48_do_request(ide_drive_t *drive, struct request *rq, unsigned long long block);
/* /*
* do_rw_disk() issues READ and WRITE commands to a disk, * Issue a READ or WRITE command to a disk, using LBA if supported, or CHS
* using LBA if supported, or CHS otherwise, to address sectors. * otherwise, to address sectors. It also takes care of issuing special
* It also takes care of issuing special DRIVE_CMDs. * DRIVE_CMDs.
*/ */
static ide_startstop_t do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block) static ide_startstop_t idedisk_do_request(ide_drive_t *drive, struct request *rq, unsigned long block)
{ {
if (drive->blocked) /*
panic("ide: Request while drive blocked? You don't like your data intact?"); * Wait until all request have bin finished.
*/
while (drive->blocked) {
yield();
// panic("ide: Request while drive blocked?");
}
if (!(rq->flags & REQ_CMD)) { if (!(rq->flags & REQ_CMD)) {
blk_dump_rq_flags(rq, "do_rw_disk, bad command"); blk_dump_rq_flags(rq, "idedisk_do_request - bad command");
ide_end_request(drive, 0); ide_end_request(drive, 0);
return ide_stopped; return ide_stopped;
} }
if (IS_PDC4030_DRIVE) { if (IS_PDC4030_DRIVE) {
extern ide_startstop_t promise_rw_disk(ide_drive_t *, struct request *, unsigned long); extern ide_startstop_t promise_rw_disk(ide_drive_t *, struct request *, unsigned long);
return promise_rw_disk(drive, rq, block); return promise_rw_disk(drive, rq, block);
} }
if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing)) /* 48-bit LBA */ /* 48-bit LBA */
return lba_48_rw_disk(drive, rq, block); if ((drive->id->cfs_enable_2 & 0x0400) && (drive->addressing))
if (drive->select.b.lba) /* 28-bit LBA */ return lba48_do_request(drive, rq, block);
return lba_28_rw_disk(drive, rq, block);
/* 28-bit LBA */
if (drive->select.b.lba)
return lba28_do_request(drive, rq, block);
/* 28-bit CHS : DIE DIE DIE piece of legacy crap!!! */ /* 28-bit CHS */
return chs_rw_disk(drive, rq, block); return chs_do_request(drive, rq, block);
} }
static task_ioreg_t get_command (ide_drive_t *drive, int cmd) static task_ioreg_t get_command(ide_drive_t *drive, int cmd)
{ {
int lba48bit = (drive->id->cfs_enable_2 & 0x0400) ? 1 : 0; int lba48bit = (drive->id->cfs_enable_2 & 0x0400) ? 1 : 0;
...@@ -147,23 +158,25 @@ static task_ioreg_t get_command (ide_drive_t *drive, int cmd) ...@@ -147,23 +158,25 @@ static task_ioreg_t get_command (ide_drive_t *drive, int cmd)
lba48bit = drive->addressing; lba48bit = drive->addressing;
#endif #endif
if ((cmd == READ) && (drive->using_dma)) if (cmd == READ) {
return (lba48bit) ? WIN_READDMA_EXT : WIN_READDMA; if (drive->using_dma)
else if ((cmd == READ) && (drive->mult_count)) return (lba48bit) ? WIN_READDMA_EXT : WIN_READDMA;
return (lba48bit) ? WIN_MULTREAD_EXT : WIN_MULTREAD; else if (drive->mult_count)
else if (cmd == READ) return (lba48bit) ? WIN_MULTREAD_EXT : WIN_MULTREAD;
return (lba48bit) ? WIN_READ_EXT : WIN_READ; else
else if ((cmd == WRITE) && (drive->using_dma)) return (lba48bit) ? WIN_READ_EXT : WIN_READ;
return (lba48bit) ? WIN_WRITEDMA_EXT : WIN_WRITEDMA; } else if (cmd == WRITE) {
else if ((cmd == WRITE) && (drive->mult_count)) if (drive->using_dma)
return (lba48bit) ? WIN_MULTWRITE_EXT : WIN_MULTWRITE; return (lba48bit) ? WIN_WRITEDMA_EXT : WIN_WRITEDMA;
else if (cmd == WRITE) else if (drive->mult_count)
return (lba48bit) ? WIN_WRITE_EXT : WIN_WRITE; return (lba48bit) ? WIN_MULTWRITE_EXT : WIN_MULTWRITE;
else else
return WIN_NOP; return (lba48bit) ? WIN_WRITE_EXT : WIN_WRITE;
}
return WIN_NOP;
} }
static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block) static ide_startstop_t chs_do_request(ide_drive_t *drive, struct request *rq, unsigned long block)
{ {
struct hd_drive_task_hdr taskfile; struct hd_drive_task_hdr taskfile;
struct hd_drive_hob_hdr hobfile; struct hd_drive_hob_hdr hobfile;
...@@ -203,19 +216,15 @@ static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsi ...@@ -203,19 +216,15 @@ static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsi
memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr)); memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr)); memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
args.command_type = ide_cmd_type_parser(&args); ide_cmd_type_parser(&args);
args.prehandler = ide_pre_handler_parser(&taskfile, &hobfile); args.rq = rq;
args.handler = ide_handler_parser(&taskfile, &hobfile); args.block = block;
args.posthandler = NULL; rq->special = &args;
args.rq = (struct request *) rq;
args.block = block;
rq->special = NULL;
rq->special = (ide_task_t *)&args;
return do_rw_taskfile(drive, &args); return do_rw_taskfile(drive, &args);
} }
static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block) static ide_startstop_t lba28_do_request(ide_drive_t *drive, struct request *rq, unsigned long block)
{ {
struct hd_drive_task_hdr taskfile; struct hd_drive_task_hdr taskfile;
struct hd_drive_hob_hdr hobfile; struct hd_drive_hob_hdr hobfile;
...@@ -250,14 +259,10 @@ static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, u ...@@ -250,14 +259,10 @@ static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, u
memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr)); memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr)); memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
args.command_type = ide_cmd_type_parser(&args); ide_cmd_type_parser(&args);
args.prehandler = ide_pre_handler_parser(&taskfile, &hobfile); args.rq = rq;
args.handler = ide_handler_parser(&taskfile, &hobfile); args.block = block;
args.posthandler = NULL; rq->special = &args;
args.rq = (struct request *) rq;
args.block = block;
rq->special = NULL;
rq->special = (ide_task_t *)&args;
return do_rw_taskfile(drive, &args); return do_rw_taskfile(drive, &args);
} }
...@@ -268,7 +273,7 @@ static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, u ...@@ -268,7 +273,7 @@ static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, u
* 1073741822 == 549756 MB or 48bit addressing fake drive * 1073741822 == 549756 MB or 48bit addressing fake drive
*/ */
static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long long block) static ide_startstop_t lba48_do_request(ide_drive_t *drive, struct request *rq, unsigned long long block)
{ {
struct hd_drive_task_hdr taskfile; struct hd_drive_task_hdr taskfile;
struct hd_drive_hob_hdr hobfile; struct hd_drive_hob_hdr hobfile;
...@@ -314,13 +319,10 @@ static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, u ...@@ -314,13 +319,10 @@ static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, u
memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr)); memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr)); memcpy(args.hobRegister, &hobfile, sizeof(struct hd_drive_hob_hdr));
args.command_type = ide_cmd_type_parser(&args); ide_cmd_type_parser(&args);
args.prehandler = ide_pre_handler_parser(&taskfile, &hobfile); args.rq = rq;
args.handler = ide_handler_parser(&taskfile, &hobfile); args.block = block;
args.posthandler = NULL; rq->special = &args;
args.rq = (struct request *) rq;
args.block = block;
rq->special = (ide_task_t *)&args;
return do_rw_taskfile(drive, &args); return do_rw_taskfile(drive, &args);
} }
...@@ -637,9 +639,9 @@ static ide_startstop_t idedisk_special (ide_drive_t *drive) ...@@ -637,9 +639,9 @@ static ide_startstop_t idedisk_special (ide_drive_t *drive)
taskfile.high_cylinder = drive->cyl>>8; taskfile.high_cylinder = drive->cyl>>8;
taskfile.device_head = ((drive->head-1)|drive->select.all)&0xBF; taskfile.device_head = ((drive->head-1)|drive->select.all)&0xBF;
if (!IS_PDC4030_DRIVE) { if (!IS_PDC4030_DRIVE) {
taskfile.sector_count = drive->sect; taskfile.sector_count = drive->sect;
taskfile.command = WIN_SPECIFY; taskfile.command = WIN_SPECIFY;
handler = ide_handler_parser(&taskfile, &hobfile); handler = set_geometry_intr;;
} }
do_taskfile(drive, &taskfile, &hobfile, handler); do_taskfile(drive, &taskfile, &hobfile, handler);
} else if (s->b.recalibrate) { } else if (s->b.recalibrate) {
...@@ -651,7 +653,7 @@ static ide_startstop_t idedisk_special (ide_drive_t *drive) ...@@ -651,7 +653,7 @@ static ide_startstop_t idedisk_special (ide_drive_t *drive)
memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr)); memset(&hobfile, 0, sizeof(struct hd_drive_hob_hdr));
taskfile.sector_count = drive->sect; taskfile.sector_count = drive->sect;
taskfile.command = WIN_RESTORE; taskfile.command = WIN_RESTORE;
do_taskfile(drive, &taskfile, &hobfile, ide_handler_parser(&taskfile, &hobfile)); do_taskfile(drive, &taskfile, &hobfile, recal_intr);
} }
} else if (s->b.set_multmode) { } else if (s->b.set_multmode) {
s->b.set_multmode = 0; s->b.set_multmode = 0;
...@@ -1089,7 +1091,7 @@ static struct ata_operations idedisk_driver = { ...@@ -1089,7 +1091,7 @@ static struct ata_operations idedisk_driver = {
owner: THIS_MODULE, owner: THIS_MODULE,
cleanup: idedisk_cleanup, cleanup: idedisk_cleanup,
standby: idedisk_standby, standby: idedisk_standby,
do_request: do_rw_disk, do_request: idedisk_do_request,
end_request: NULL, end_request: NULL,
ioctl: NULL, ioctl: NULL,
open: idedisk_open, open: idedisk_open,
...@@ -1127,7 +1129,7 @@ int idedisk_init (void) ...@@ -1127,7 +1129,7 @@ int idedisk_init (void)
{ {
ide_drive_t *drive; ide_drive_t *drive;
int failed = 0; int failed = 0;
MOD_INC_USE_COUNT; MOD_INC_USE_COUNT;
while ((drive = ide_scan_devices(ATA_DISK, "ide-disk", NULL, failed++)) != NULL) { while ((drive = ide_scan_devices(ATA_DISK, "ide-disk", NULL, failed++)) != NULL) {
if (ide_register_subdriver (drive, &idedisk_driver)) { if (ide_register_subdriver (drive, &idedisk_driver)) {
......
...@@ -119,6 +119,7 @@ extern void ide_init_pdc202xx(ide_hwif_t *); ...@@ -119,6 +119,7 @@ extern void ide_init_pdc202xx(ide_hwif_t *);
extern unsigned int pci_init_piix(struct pci_dev *); extern unsigned int pci_init_piix(struct pci_dev *);
extern unsigned int ata66_piix(ide_hwif_t *); extern unsigned int ata66_piix(ide_hwif_t *);
extern void ide_init_piix(ide_hwif_t *); extern void ide_init_piix(ide_hwif_t *);
extern void ide_dmacapable_piix(ide_hwif_t *, unsigned long);
#endif #endif
#ifdef CONFIG_BLK_DEV_IT8172 #ifdef CONFIG_BLK_DEV_IT8172
...@@ -142,12 +143,6 @@ extern unsigned int ata66_sis5513(ide_hwif_t *); ...@@ -142,12 +143,6 @@ extern unsigned int ata66_sis5513(ide_hwif_t *);
extern void ide_init_sis5513(ide_hwif_t *); extern void ide_init_sis5513(ide_hwif_t *);
#endif #endif
#ifdef CONFIG_BLK_DEV_SLC90E66
extern unsigned int pci_init_slc90e66(struct pci_dev *);
extern unsigned int ata66_slc90e66(ide_hwif_t *);
extern void ide_init_slc90e66(ide_hwif_t *);
#endif
#ifdef CONFIG_BLK_DEV_SL82C105 #ifdef CONFIG_BLK_DEV_SL82C105
extern unsigned int pci_init_sl82c105(struct pci_dev *); extern unsigned int pci_init_sl82c105(struct pci_dev *);
extern void dma_init_sl82c105(ide_hwif_t *, unsigned long); extern void dma_init_sl82c105(ide_hwif_t *, unsigned long);
...@@ -197,19 +192,18 @@ typedef struct ide_pci_device_s { ...@@ -197,19 +192,18 @@ typedef struct ide_pci_device_s {
static ide_pci_device_t pci_chipsets[] __initdata = { static ide_pci_device_t pci_chipsets[] __initdata = {
#ifdef CONFIG_BLK_DEV_PIIX #ifdef CONFIG_BLK_DEV_PIIX
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_0, NULL, NULL, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_1, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_1, NULL, NULL, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_1, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX, NULL, NULL, ide_init_piix, NULL, {{0x6D,0x80,0x80}, {0x6F,0x80,0x80}}, ON_BOARD, 0, ATA_F_NODMA }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_1, pci_init_piix, NULL, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_1, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB, pci_init_piix, NULL, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82372FB_1, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_1, pci_init_piix, NULL, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_1, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_1, pci_init_piix, NULL, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_1, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_1, pci_init_piix, ata66_piix, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_9, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82372FB_1, pci_init_piix, ata66_piix, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_8, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_init_piix, NULL, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, ATA_F_NOADMA }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_9, pci_init_piix, ata66_piix, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_11, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_8, pci_init_piix, ata66_piix, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_1, pci_init_piix, ata66_piix, ide_init_piix, ide_dmacapable_piix, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, pci_init_piix, ata66_piix, ide_init_piix, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
#endif #endif
#ifdef CONFIG_BLK_DEV_VIA82CXXX #ifdef CONFIG_BLK_DEV_VIA82CXXX
{PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1, pci_init_via82cxxx, ata66_via82cxxx, ide_init_via82cxxx, ide_dmacapable_via82cxxx, {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, ON_BOARD, 0, ATA_F_NOADMA }, {PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1, pci_init_via82cxxx, ata66_via82cxxx, ide_init_via82cxxx, ide_dmacapable_via82cxxx, {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, ON_BOARD, 0, ATA_F_NOADMA },
...@@ -289,13 +283,11 @@ static ide_pci_device_t pci_chipsets[] __initdata = { ...@@ -289,13 +283,11 @@ static ide_pci_device_t pci_chipsets[] __initdata = {
{PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411, pci_init_amd74xx, ata66_amd74xx, ide_init_amd74xx, ide_dmacapable_amd74xx, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_7411, pci_init_amd74xx, ata66_amd74xx, ide_init_amd74xx, ide_dmacapable_amd74xx, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7441, pci_init_amd74xx, ata66_amd74xx, ide_init_amd74xx, ide_dmacapable_amd74xx, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_OPUS_7441, pci_init_amd74xx, ata66_amd74xx, ide_init_amd74xx, ide_dmacapable_amd74xx, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_IDE, pci_init_amd74xx, ata66_amd74xx, ide_init_amd74xx, ide_dmacapable_amd74xx, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_IDE, pci_init_amd74xx, ata66_amd74xx, ide_init_amd74xx, ide_dmacapable_amd74xx, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_IDE, pci_init_amd74xx, ata66_amd74xx, ide_init_amd74xx, ide_dmacapable_amd74xx, {{0x50,0x01,0x01}, {0x50,0x02,0x02}}, ON_BOARD, 0, 0 },
#endif #endif
#ifdef CONFIG_BLK_DEV_PDC_ADMA #ifdef CONFIG_BLK_DEV_PDC_ADMA
{PCI_VENDOR_ID_PDC, PCI_DEVICE_ID_PDC_1841, pci_init_pdcadma, ata66_pdcadma, ide_init_pdcadma, ide_dmacapable_pdcadma, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 0, ATA_F_NODMA }, {PCI_VENDOR_ID_PDC, PCI_DEVICE_ID_PDC_1841, pci_init_pdcadma, ata66_pdcadma, ide_init_pdcadma, ide_dmacapable_pdcadma, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 0, ATA_F_NODMA },
#endif #endif
#ifdef CONFIG_BLK_DEV_SLC90E66
{PCI_VENDOR_ID_EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_1, pci_init_slc90e66, ata66_slc90e66, ide_init_slc90e66, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0, 0 },
#endif
#ifdef CONFIG_BLK_DEV_SVWKS #ifdef CONFIG_BLK_DEV_SVWKS
{PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE, pci_init_svwks, ata66_svwks, ide_init_svwks, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_DMA }, {PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE, pci_init_svwks, ata66_svwks, ide_init_svwks, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_DMA },
{PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, pci_init_svwks, ata66_svwks, ide_init_svwks, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, pci_init_svwks, ata66_svwks, ide_init_svwks, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, 0 },
...@@ -311,6 +303,7 @@ static ide_pci_device_t pci_chipsets[] __initdata = { ...@@ -311,6 +303,7 @@ static ide_pci_device_t pci_chipsets[] __initdata = {
{PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87410, NULL, NULL, NULL, NULL, {{0x43,0x08,0x08}, {0x47,0x08,0x08}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_87410, NULL, NULL, NULL, NULL, {{0x43,0x08,0x08}, {0x47,0x08,0x08}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_HINT, PCI_DEVICE_ID_HINT, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_HINT, PCI_DEVICE_ID_HINT, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_6565, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, 0 }, {PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_6565, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, 0 },
{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX, NULL, NULL, NULL, NULL, {{0x6D,0x80,0x80}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_NODMA },
{PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8673F, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_FIXIRQ }, {PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8673F, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_FIXIRQ },
{PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886A, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_FIXIRQ }, {PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886A, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_FIXIRQ },
{PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886BF, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_FIXIRQ }, {PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886BF, NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0, ATA_F_FIXIRQ },
......
...@@ -118,10 +118,6 @@ int (*svwks_display_info)(char *, char **, off_t, int) = NULL; ...@@ -118,10 +118,6 @@ int (*svwks_display_info)(char *, char **, off_t, int) = NULL;
extern byte sis_proc; extern byte sis_proc;
int (*sis_display_info)(char *, char **, off_t, int) = NULL; int (*sis_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_SIS5513 */ #endif /* CONFIG_BLK_DEV_SIS5513 */
#ifdef CONFIG_BLK_DEV_SLC90E66
extern byte slc90e66_proc;
int (*slc90e66_display_info)(char *, char **, off_t, int) = NULL;
#endif /* CONFIG_BLK_DEV_SLC90E66 */
#ifdef CONFIG_BLK_DEV_VIA82CXXX #ifdef CONFIG_BLK_DEV_VIA82CXXX
extern byte via_proc; extern byte via_proc;
int (*via_display_info)(char *, char **, off_t, int) = NULL; int (*via_display_info)(char *, char **, off_t, int) = NULL;
...@@ -593,10 +589,6 @@ void proc_ide_create(void) ...@@ -593,10 +589,6 @@ void proc_ide_create(void)
if ((sis_display_info) && (sis_proc)) if ((sis_display_info) && (sis_proc))
create_proc_info_entry("sis", 0, proc_ide_root, sis_display_info); create_proc_info_entry("sis", 0, proc_ide_root, sis_display_info);
#endif /* CONFIG_BLK_DEV_SIS5513 */ #endif /* CONFIG_BLK_DEV_SIS5513 */
#ifdef CONFIG_BLK_DEV_SLC90E66
if ((slc90e66_display_info) && (slc90e66_proc))
create_proc_info_entry("slc90e66", 0, proc_ide_root, slc90e66_display_info);
#endif /* CONFIG_BLK_DEV_SLC90E66 */
#ifdef CONFIG_BLK_DEV_VIA82CXXX #ifdef CONFIG_BLK_DEV_VIA82CXXX
if ((via_display_info) && (via_proc)) if ((via_display_info) && (via_proc))
create_proc_info_entry("via", 0, proc_ide_root, via_display_info); create_proc_info_entry("via", 0, proc_ide_root, via_display_info);
...@@ -653,10 +645,6 @@ void proc_ide_destroy(void) ...@@ -653,10 +645,6 @@ void proc_ide_destroy(void)
if ((sis_display_info) && (sis_proc)) if ((sis_display_info) && (sis_proc))
remove_proc_entry("ide/sis", 0); remove_proc_entry("ide/sis", 0);
#endif /* CONFIG_BLK_DEV_SIS5513 */ #endif /* CONFIG_BLK_DEV_SIS5513 */
#ifdef CONFIG_BLK_DEV_SLC90E66
if ((slc90e66_display_info) && (slc90e66_proc))
remove_proc_entry("ide/slc90e66",0);
#endif /* CONFIG_BLK_DEV_SLC90E66 */
#ifdef CONFIG_BLK_DEV_VIA82CXXX #ifdef CONFIG_BLK_DEV_VIA82CXXX
if ((via_display_info) && (via_proc)) if ((via_display_info) && (via_proc))
remove_proc_entry("ide/via",0); remove_proc_entry("ide/via",0);
......
This diff is collapsed.
...@@ -654,14 +654,14 @@ ide_startstop_t promise_rw_disk (ide_drive_t *drive, struct request *rq, unsigne ...@@ -654,14 +654,14 @@ ide_startstop_t promise_rw_disk (ide_drive_t *drive, struct request *rq, unsigne
memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr)); memcpy(args.tfRegister, &taskfile, sizeof(struct hd_drive_task_hdr));
memcpy(args.hobRegister, NULL, sizeof(struct hd_drive_hob_hdr)); memcpy(args.hobRegister, NULL, sizeof(struct hd_drive_hob_hdr));
args.command_type = ide_cmd_type_parser(&args); ide_cmd_type_parser(&args);
/* We don't use the generic inerrupt handlers here? */
args.prehandler = NULL; args.prehandler = NULL;
args.handler = NULL; args.handler = NULL;
args.posthandler = NULL; args.rq = rq;
args.rq = (struct request *) rq;
args.block = block; args.block = block;
rq->special = NULL; rq->special = NULL;
rq->special = (ide_task_t *)&args; rq->special = &args;
return do_pdc4030_io(drive, &args); return do_pdc4030_io(drive, &args);
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -1710,7 +1710,6 @@ struct pci_pool { /* the pool */ ...@@ -1710,7 +1710,6 @@ struct pci_pool { /* the pool */
spinlock_t lock; spinlock_t lock;
size_t blocks_per_page; size_t blocks_per_page;
size_t size; size_t size;
int flags;
struct pci_dev *dev; struct pci_dev *dev;
size_t allocation; size_t allocation;
char name [32]; char name [32];
...@@ -1727,8 +1726,6 @@ struct pci_page { /* cacheable header for 'allocation' bytes */ ...@@ -1727,8 +1726,6 @@ struct pci_page { /* cacheable header for 'allocation' bytes */
#define POOL_TIMEOUT_JIFFIES ((100 /* msec */ * HZ) / 1000) #define POOL_TIMEOUT_JIFFIES ((100 /* msec */ * HZ) / 1000)
#define POOL_POISON_BYTE 0xa7 #define POOL_POISON_BYTE 0xa7
// #define CONFIG_PCIPOOL_DEBUG
/** /**
* pci_pool_create - Creates a pool of pci consistent memory blocks, for dma. * pci_pool_create - Creates a pool of pci consistent memory blocks, for dma.
...@@ -1737,7 +1734,7 @@ struct pci_page { /* cacheable header for 'allocation' bytes */ ...@@ -1737,7 +1734,7 @@ struct pci_page { /* cacheable header for 'allocation' bytes */
* @size: size of the blocks in this pool. * @size: size of the blocks in this pool.
* @align: alignment requirement for blocks; must be a power of two * @align: alignment requirement for blocks; must be a power of two
* @allocation: returned blocks won't cross this boundary (or zero) * @allocation: returned blocks won't cross this boundary (or zero)
* @flags: SLAB_* flags (not all are supported). * @mem_flags: SLAB_* flags.
* *
* Returns a pci allocation pool with the requested characteristics, or * Returns a pci allocation pool with the requested characteristics, or
* null if one can't be created. Given one of these pools, pci_pool_alloc() * null if one can't be created. Given one of these pools, pci_pool_alloc()
...@@ -1753,7 +1750,7 @@ struct pci_page { /* cacheable header for 'allocation' bytes */ ...@@ -1753,7 +1750,7 @@ struct pci_page { /* cacheable header for 'allocation' bytes */
*/ */
struct pci_pool * struct pci_pool *
pci_pool_create (const char *name, struct pci_dev *pdev, pci_pool_create (const char *name, struct pci_dev *pdev,
size_t size, size_t align, size_t allocation, int flags) size_t size, size_t align, size_t allocation, int mem_flags)
{ {
struct pci_pool *retval; struct pci_pool *retval;
...@@ -1777,13 +1774,9 @@ pci_pool_create (const char *name, struct pci_dev *pdev, ...@@ -1777,13 +1774,9 @@ pci_pool_create (const char *name, struct pci_dev *pdev,
} else if (allocation < size) } else if (allocation < size)
return 0; return 0;
if (!(retval = kmalloc (sizeof *retval, flags))) if (!(retval = kmalloc (sizeof *retval, mem_flags)))
return retval; return retval;
#ifdef CONFIG_PCIPOOL_DEBUG
flags |= SLAB_POISON;
#endif
strncpy (retval->name, name, sizeof retval->name); strncpy (retval->name, name, sizeof retval->name);
retval->name [sizeof retval->name - 1] = 0; retval->name [sizeof retval->name - 1] = 0;
...@@ -1791,17 +1784,10 @@ pci_pool_create (const char *name, struct pci_dev *pdev, ...@@ -1791,17 +1784,10 @@ pci_pool_create (const char *name, struct pci_dev *pdev,
INIT_LIST_HEAD (&retval->page_list); INIT_LIST_HEAD (&retval->page_list);
spin_lock_init (&retval->lock); spin_lock_init (&retval->lock);
retval->size = size; retval->size = size;
retval->flags = flags;
retval->allocation = allocation; retval->allocation = allocation;
retval->blocks_per_page = allocation / size; retval->blocks_per_page = allocation / size;
init_waitqueue_head (&retval->waitq); init_waitqueue_head (&retval->waitq);
#ifdef CONFIG_PCIPOOL_DEBUG
printk (KERN_DEBUG "pcipool create %s/%s size %d, %d/page (%d alloc)\n",
pdev ? pdev->slot_name : NULL, retval->name, size,
retval->blocks_per_page, allocation);
#endif
return retval; return retval;
} }
...@@ -1824,8 +1810,9 @@ pool_alloc_page (struct pci_pool *pool, int mem_flags) ...@@ -1824,8 +1810,9 @@ pool_alloc_page (struct pci_pool *pool, int mem_flags)
&page->dma); &page->dma);
if (page->vaddr) { if (page->vaddr) {
memset (page->bitmap, 0xff, mapsize); // bit set == free memset (page->bitmap, 0xff, mapsize); // bit set == free
if (pool->flags & SLAB_POISON) #ifdef CONFIG_DEBUG_SLAB
memset (page->vaddr, POOL_POISON_BYTE, pool->allocation); memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
#endif
list_add (&page->page_list, &pool->page_list); list_add (&page->page_list, &pool->page_list);
} else { } else {
kfree (page); kfree (page);
...@@ -1851,8 +1838,9 @@ pool_free_page (struct pci_pool *pool, struct pci_page *page) ...@@ -1851,8 +1838,9 @@ pool_free_page (struct pci_pool *pool, struct pci_page *page)
{ {
dma_addr_t dma = page->dma; dma_addr_t dma = page->dma;
if (pool->flags & SLAB_POISON) #ifdef CONFIG_DEBUG_SLAB
memset (page->vaddr, POOL_POISON_BYTE, pool->allocation); memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
#endif
pci_free_consistent (pool->dev, pool->allocation, page->vaddr, dma); pci_free_consistent (pool->dev, pool->allocation, page->vaddr, dma);
list_del (&page->page_list); list_del (&page->page_list);
kfree (page); kfree (page);
...@@ -1871,12 +1859,6 @@ pci_pool_destroy (struct pci_pool *pool) ...@@ -1871,12 +1859,6 @@ pci_pool_destroy (struct pci_pool *pool)
{ {
unsigned long flags; unsigned long flags;
#ifdef CONFIG_PCIPOOL_DEBUG
printk (KERN_DEBUG "pcipool destroy %s/%s\n",
pool->dev ? pool->dev->slot_name : NULL,
pool->name);
#endif
spin_lock_irqsave (&pool->lock, flags); spin_lock_irqsave (&pool->lock, flags);
while (!list_empty (&pool->page_list)) { while (!list_empty (&pool->page_list)) {
struct pci_page *page; struct pci_page *page;
...@@ -2010,30 +1992,27 @@ pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma) ...@@ -2010,30 +1992,27 @@ pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
pool->name, vaddr, (unsigned long) dma); pool->name, vaddr, (unsigned long) dma);
return; return;
} }
#ifdef CONFIG_PCIPOOL_DEBUG
if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%lx\n",
pool->dev ? pool->dev->slot_name : NULL,
pool->name, vaddr, (unsigned long) dma);
return;
}
#endif
block = dma - page->dma; block = dma - page->dma;
block /= pool->size; block /= pool->size;
map = block / BITS_PER_LONG; map = block / BITS_PER_LONG;
block %= BITS_PER_LONG; block %= BITS_PER_LONG;
#ifdef CONFIG_PCIPOOL_DEBUG #ifdef CONFIG_DEBUG_SLAB
if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%lx\n",
pool->dev ? pool->dev->slot_name : NULL,
pool->name, vaddr, (unsigned long) dma);
return;
}
if (page->bitmap [map] & (1UL << block)) { if (page->bitmap [map] & (1UL << block)) {
printk (KERN_ERR "pci_pool_free %s/%s, dma %x already free\n", printk (KERN_ERR "pci_pool_free %s/%s, dma %x already free\n",
pool->dev ? pool->dev->slot_name : NULL, pool->dev ? pool->dev->slot_name : NULL,
pool->name, dma); pool->name, dma);
return; return;
} }
memset (vaddr, POOL_POISON_BYTE, pool->size);
#endif #endif
if (pool->flags & SLAB_POISON)
memset (vaddr, POOL_POISON_BYTE, pool->size);
spin_lock_irqsave (&pool->lock, flags); spin_lock_irqsave (&pool->lock, flags);
set_bit (block, &page->bitmap [map]); set_bit (block, &page->bitmap [map]);
......
...@@ -526,8 +526,10 @@ ...@@ -526,8 +526,10 @@
2040 79c974 2040 79c974
7006 AMD-751 [Irongate] System Controller 7006 AMD-751 [Irongate] System Controller
7007 AMD-751 [Irongate] AGP Bridge 7007 AMD-751 [Irongate] AGP Bridge
700e AMD-760 [Irongate] System Controller 700c AMD-760 MP [IGD4-2P] System Controller
700f AMD-760 [Irongate] AGP Bridge 700d AMD-760 MP [IGD4-2P] AGP Bridge
700e AMD-760 [IGD4-1P] System Controller
700f AMD-760 [IGD4-1P] AGP Bridge
7400 AMD-755 [Cobra] ISA 7400 AMD-755 [Cobra] ISA
7401 AMD-755 [Cobra] IDE 7401 AMD-755 [Cobra] IDE
7403 AMD-755 [Cobra] ACPI 7403 AMD-755 [Cobra] ACPI
...@@ -540,11 +542,21 @@ ...@@ -540,11 +542,21 @@
7411 AMD-765 [Viper] IDE 7411 AMD-765 [Viper] IDE
7413 AMD-765 [Viper] ACPI 7413 AMD-765 [Viper] ACPI
7414 AMD-765 [Viper] USB 7414 AMD-765 [Viper] USB
7440 AMD-768 [??] ISA 7440 AMD-768 [Opus] ISA
7441 AMD-768 [??] IDE 7441 AMD-768 [Opus] IDE
7443 AMD-768 [??] ACPI 7443 AMD-768 [Opus] ACPI
7448 AMD-768 [??] PCI 7448 AMD-768 [Opus] PCI
7449 AMD-768 [??] USB 7449 AMD-768 [Opus] USB
7454 AMD-8151 System Controller
7455 AMD-8151 AGP Bridge
7460 AMD-8111 PCI
7461 AMD-8111 USB
7462 AMD-8111 Ethernet
7468 AMD-8111 LPC
7469 AMD-8111 IDE
746a AMD-8111 SMBus 2.0
746b AMD-8111 ACPI
746d AMD-8111 AC97 Audio
1023 Trident Microsystems 1023 Trident Microsystems
0194 82C194 0194 82C194
2000 4DWave DX 2000 4DWave DX
...@@ -1055,11 +1067,11 @@ ...@@ -1055,11 +1067,11 @@
1052 ?Young Micro Systems 1052 ?Young Micro Systems
1053 Young Micro Systems 1053 Young Micro Systems
1054 Hitachi, Ltd 1054 Hitachi, Ltd
1055 EFAR Microsystems 1055 Efar Microsystems
9130 EIDE Controller 9130 slc90e66 [Victory66] IDE
9460 PCI to ISA Bridge 9460 slc90e66 [Victory66] ISA
9462 USB Universal Host Controller [OHCI] 9462 slc90e66 [Victory66] USB
9463 Power Management Controller [Bridge] 9463 slc90e66 [Victory66] ACPI
1056 ICL 1056 ICL
# Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this. # Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this.
1057 Motorola 1057 Motorola
...@@ -1925,6 +1937,7 @@ ...@@ -1925,6 +1937,7 @@
0151 NV15 DDR (GeForce2 GTS) 0151 NV15 DDR (GeForce2 GTS)
0152 NV15 Bladerunner (GeForce2 Ultra) 0152 NV15 Bladerunner (GeForce2 Ultra)
0153 NV15 GL (Quadro2 Pro) 0153 NV15 GL (Quadro2 Pro)
01bc nForce IDE
0200 NV20 (GeForce3) 0200 NV20 (GeForce3)
0203 Quadro DCC 0203 Quadro DCC
10df Emulex Corporation 10df Emulex Corporation
...@@ -5066,6 +5079,8 @@ ...@@ -5066,6 +5079,8 @@
244c 82820 820 (Camino 2) Chipset ISA Bridge (ICH2-M) 244c 82820 820 (Camino 2) Chipset ISA Bridge (ICH2-M)
244e 82820 820 (Camino 2) Chipset PCI 244e 82820 820 (Camino 2) Chipset PCI
2485 AC'97 Audio Controller 2485 AC'97 Audio Controller
248a 82801CAM ICH3-M IDE
248b 82801CA ICH3 IDE
2500 82820 820 (Camino) Chipset Host Bridge (MCH) 2500 82820 820 (Camino) Chipset Host Bridge (MCH)
1043 801c P3C-2000 system chipset 1043 801c P3C-2000 system chipset
2501 82820 820 (Camino) Chipset Host Bridge (MCH) 2501 82820 820 (Camino) Chipset Host Bridge (MCH)
...@@ -5118,10 +5133,10 @@ ...@@ -5118,10 +5133,10 @@
71a0 440GX - 82443GX Host bridge 71a0 440GX - 82443GX Host bridge
71a1 440GX - 82443GX AGP bridge 71a1 440GX - 82443GX AGP bridge
71a2 440GX - 82443GX Host bridge (AGP disabled) 71a2 440GX - 82443GX Host bridge (AGP disabled)
7600 82372FB PCI to ISA Bridge 7600 82372FB PIIX5 ISA
7601 82372FB PIIX4 IDE 7601 82372FB PIIX5 IDE
7602 82372FB [PCI-to-USB UHCI] 7602 82372FB PIIX5 USB
7603 82372FB System Management Bus Controller 7603 82372FB PIIX5 SMBus
7800 i740 7800 i740
1092 0100 Stealth II G460 1092 0100 Stealth II G460
8086 0100 Intel740 Graphics Accelerator 8086 0100 Intel740 Graphics Accelerator
......
...@@ -2273,6 +2273,39 @@ EXPORT_SYMBOL(isapnp_resource_change); ...@@ -2273,6 +2273,39 @@ EXPORT_SYMBOL(isapnp_resource_change);
EXPORT_SYMBOL(isapnp_register_driver); EXPORT_SYMBOL(isapnp_register_driver);
EXPORT_SYMBOL(isapnp_unregister_driver); EXPORT_SYMBOL(isapnp_unregister_driver);
static struct device_driver isapnp_device_driver = {};
static inline int isapnp_init_device_tree(void)
{
struct pci_bus *card;
struct pci_dev *parent = pci_find_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
isapnp_for_each_card(card) {
struct list_head *devlist;
card->dev = isapnp_alloc(sizeof(*card->dev));
if (!card->dev)
break;
snprintf(card->dev->name, sizeof(card->dev->name), "%s", card->name);
sprintf(card->dev->bus_id, "isapnp%d", card->number);
card->dev->parent = parent ? &parent->dev : NULL;
card->dev->driver = &isapnp_device_driver;
device_register(card->dev);
for (devlist = card->devices.next; devlist != &card->devices; devlist = devlist->next) {
struct pci_dev *dev = pci_dev_b(devlist);
snprintf(dev->dev.name, sizeof(dev->dev.name), "%s", dev->name);
sprintf(dev->dev.bus_id, "%d", dev->devfn);
dev->dev.parent = card->dev;
dev->dev.driver = &isapnp_device_driver;
device_register(&dev->dev);
}
}
return 0;
}
int __init isapnp_init(void) int __init isapnp_init(void)
{ {
int cards; int cards;
...@@ -2351,6 +2384,9 @@ int __init isapnp_init(void) ...@@ -2351,6 +2384,9 @@ int __init isapnp_init(void)
} else { } else {
printk(KERN_INFO "isapnp: No Plug & Play card found\n"); printk(KERN_INFO "isapnp: No Plug & Play card found\n");
} }
isapnp_init_device_tree();
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
isapnp_proc_init(); isapnp_proc_init();
#endif #endif
...@@ -2361,10 +2397,28 @@ subsys_initcall(isapnp_init); ...@@ -2361,10 +2397,28 @@ subsys_initcall(isapnp_init);
#ifdef MODULE #ifdef MODULE
static inline void isapnp_cleanup_device_tree(void)
{
struct pci_bus *card;
isapnp_for_each_card(card) {
struct list_head *devlist;
for (devlist = card->devices.next; devlist != &card->devices; devlist = devlist->next) {
struct pci_dev *dev = pci_dev_b(devlist);
put_device(&dev->dev);
}
put_device(card->dev);
}
}
void cleanup_module(void) void cleanup_module(void)
{ {
if (isapnp_detected) if (isapnp_detected) {
isapnp_cleanup_device_tree();
isapnp_free_all_resources(); isapnp_free_all_resources();
}
} }
#else #else
......
...@@ -382,6 +382,7 @@ CONFIG_USB_KAWETH ...@@ -382,6 +382,7 @@ CONFIG_USB_KAWETH
CONFIG_USB_CATC CONFIG_USB_CATC
Say Y if you want to use one of the following 10Mbps USB Ethernet Say Y if you want to use one of the following 10Mbps USB Ethernet
device based on the EL1210A chip. Supported devices are: device based on the EL1210A chip. Supported devices are:
Belkin F5U011
Belkin F5U111 Belkin F5U111
CATC NetMate CATC NetMate
CATC NetMate II CATC NetMate II
......
This diff is collapsed.
...@@ -110,10 +110,11 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned ...@@ -110,10 +110,11 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned
memset(field, 0, sizeof(struct hid_field) + usages * sizeof(struct hid_usage) memset(field, 0, sizeof(struct hid_field) + usages * sizeof(struct hid_usage)
+ values * sizeof(unsigned)); + values * sizeof(unsigned));
report->field[report->maxfield++] = field; report->field[report->maxfield] = field;
field->usage = (struct hid_usage *)(field + 1); field->usage = (struct hid_usage *)(field + 1);
field->value = (unsigned *)(field->usage + usages); field->value = (unsigned *)(field->usage + usages);
field->report = report; field->report = report;
field->index = report->maxfield++;
return field; return field;
} }
...@@ -741,8 +742,20 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, s ...@@ -741,8 +742,20 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, s
if (hid->claimed & HID_CLAIMED_INPUT) if (hid->claimed & HID_CLAIMED_INPUT)
hidinput_hid_event(hid, field, usage, value); hidinput_hid_event(hid, field, usage, value);
#ifdef CONFIG_USB_HIDDEV #ifdef CONFIG_USB_HIDDEV
if (hid->claimed & HID_CLAIMED_HIDDEV) if (hid->claimed & HID_CLAIMED_HIDDEV) {
hiddev_hid_event(hid, usage->hid, value); struct hiddev_usage_ref uref;
unsigned type = field->report_type;
uref.report_type =
(type == HID_INPUT_REPORT) ? HID_REPORT_TYPE_INPUT :
((type == HID_OUTPUT_REPORT) ? HID_REPORT_TYPE_OUTPUT :
((type == HID_FEATURE_REPORT) ? HID_REPORT_TYPE_FEATURE:0));
uref.report_id = field->report->id;
uref.field_index = field->index;
uref.usage_index = (usage - field->usage);
uref.usage_code = usage->hid;
uref.value = value;
hiddev_hid_event(hid, &uref);
}
#endif #endif
} }
...@@ -839,6 +852,21 @@ static int hid_input_report(int type, struct urb *urb) ...@@ -839,6 +852,21 @@ static int hid_input_report(int type, struct urb *urb)
return -1; return -1;
} }
#ifdef CONFIG_USB_HIDDEV
/* Notify listeners that a report has been received */
if (hid->claimed & HID_CLAIMED_HIDDEV) {
struct hiddev_usage_ref uref;
memset(&uref, 0, sizeof(uref));
uref.report_type =
(type == HID_INPUT_REPORT) ? HID_REPORT_TYPE_INPUT :
((type == HID_OUTPUT_REPORT) ? HID_REPORT_TYPE_OUTPUT :
((type == HID_FEATURE_REPORT) ? HID_REPORT_TYPE_FEATURE:0));
uref.report_id = report->id;
uref.field_index = HID_FIELD_INDEX_NONE;
hiddev_hid_event(hid, &uref);
}
#endif
size = ((report->size - 1) >> 3) + 1; size = ((report->size - 1) >> 3) + 1;
if (len < size) { if (len < size) {
...@@ -1096,6 +1124,9 @@ void hid_submit_report(struct hid_device *hid, struct hid_report *report, unsign ...@@ -1096,6 +1124,9 @@ void hid_submit_report(struct hid_device *hid, struct hid_report *report, unsign
int head; int head;
unsigned long flags; unsigned long flags;
if ((hid->quirks & HID_QUIRK_NOGET) && dir == USB_DIR_IN)
return;
if (hid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) { if (hid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) {
spin_lock_irqsave(&hid->outlock, flags); spin_lock_irqsave(&hid->outlock, flags);
...@@ -1238,18 +1269,27 @@ void hid_init_reports(struct hid_device *hid) ...@@ -1238,18 +1269,27 @@ void hid_init_reports(struct hid_device *hid)
#define USB_DEVICE_ID_POWERMATE 0x0410 #define USB_DEVICE_ID_POWERMATE 0x0410
#define USB_DEVICE_ID_SOUNDKNOB 0x04AA #define USB_DEVICE_ID_SOUNDKNOB 0x04AA
#define USB_VENDOR_ID_ATEN 0x0557
#define USB_DEVICE_ID_ATEN_UC100KM 0x2004
#define USB_DEVICE_ID_ATEN_CS124U 0x2202
#define USB_DEVICE_ID_ATEN_2PORTKVM 0x2204
struct hid_blacklist { struct hid_blacklist {
__u16 idVendor; __u16 idVendor;
__u16 idProduct; __u16 idProduct;
unsigned quirks;
} hid_blacklist[] = { } hid_blacklist[] = {
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS }, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 1}, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 1, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 2}, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 2, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 3}, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 3, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 4}, { USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 4, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE }, { USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB }, { USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB, HID_QUIRK_IGNORE },
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
{ 0, 0 } { 0, 0 }
}; };
...@@ -1258,13 +1298,17 @@ static struct hid_device *usb_hid_configure(struct usb_device *dev, int ifnum) ...@@ -1258,13 +1298,17 @@ static struct hid_device *usb_hid_configure(struct usb_device *dev, int ifnum)
struct usb_interface_descriptor *interface = dev->actconfig->interface[ifnum].altsetting + 0; struct usb_interface_descriptor *interface = dev->actconfig->interface[ifnum].altsetting + 0;
struct hid_descriptor *hdesc; struct hid_descriptor *hdesc;
struct hid_device *hid; struct hid_device *hid;
unsigned rsize = 0; unsigned quirks = 0, rsize = 0;
char *buf; char *buf;
int n; int n;
for (n = 0; hid_blacklist[n].idVendor; n++) for (n = 0; hid_blacklist[n].idVendor; n++)
if ((hid_blacklist[n].idVendor == dev->descriptor.idVendor) && if ((hid_blacklist[n].idVendor == dev->descriptor.idVendor) &&
(hid_blacklist[n].idProduct == dev->descriptor.idProduct)) return NULL; (hid_blacklist[n].idProduct == dev->descriptor.idProduct))
quirks = hid_blacklist[n].quirks;
if (quirks & HID_QUIRK_IGNORE)
return NULL;
if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) && ((!interface->bNumEndpoints) || if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) && ((!interface->bNumEndpoints) ||
usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) { usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) {
...@@ -1302,6 +1346,8 @@ static struct hid_device *usb_hid_configure(struct usb_device *dev, int ifnum) ...@@ -1302,6 +1346,8 @@ static struct hid_device *usb_hid_configure(struct usb_device *dev, int ifnum)
} }
} }
hid->quirks = quirks;
for (n = 0; n < interface->bNumEndpoints; n++) { for (n = 0; n < interface->bNumEndpoints; n++) {
struct usb_endpoint_descriptor *endpoint = &interface->endpoint[n]; struct usb_endpoint_descriptor *endpoint = &interface->endpoint[n];
......
...@@ -203,6 +203,8 @@ struct hid_item { ...@@ -203,6 +203,8 @@ struct hid_item {
#define HID_QUIRK_INVERT 0x01 #define HID_QUIRK_INVERT 0x01
#define HID_QUIRK_NOTOUCH 0x02 #define HID_QUIRK_NOTOUCH 0x02
#define HID_QUIRK_IGNORE 0x04
#define HID_QUIRK_NOGET 0x08
/* /*
* This is the global enviroment of the parser. This information is * This is the global enviroment of the parser. This information is
...@@ -276,6 +278,7 @@ struct hid_field { ...@@ -276,6 +278,7 @@ struct hid_field {
__s32 unit_exponent; __s32 unit_exponent;
unsigned unit; unsigned unit;
struct hid_report *report; /* associated report */ struct hid_report *report; /* associated report */
unsigned index; /* index into report->field[] */
}; };
#define HID_MAX_FIELDS 64 #define HID_MAX_FIELDS 64
......
...@@ -50,9 +50,10 @@ struct hiddev { ...@@ -50,9 +50,10 @@ struct hiddev {
}; };
struct hiddev_list { struct hiddev_list {
struct hiddev_event buffer[HIDDEV_BUFFER_SIZE]; struct hiddev_usage_ref buffer[HIDDEV_BUFFER_SIZE];
int head; int head;
int tail; int tail;
unsigned flags;
struct fasync_struct *fasync; struct fasync_struct *fasync;
struct hiddev *hiddev; struct hiddev *hiddev;
struct hiddev_list *next; struct hiddev_list *next;
...@@ -146,17 +147,19 @@ hiddev_lookup_usage(struct hid_device *hid, struct hiddev_usage_ref *uref) ...@@ -146,17 +147,19 @@ hiddev_lookup_usage(struct hid_device *hid, struct hiddev_usage_ref *uref)
* This is where hid.c calls into hiddev to pass an event that occurred over * This is where hid.c calls into hiddev to pass an event that occurred over
* the interrupt pipe * the interrupt pipe
*/ */
void hiddev_hid_event(struct hid_device *hid, unsigned int usage, int value) void hiddev_hid_event(struct hid_device *hid, struct hiddev_usage_ref *uref)
{ {
struct hiddev *hiddev = hid->hiddev; struct hiddev *hiddev = hid->hiddev;
struct hiddev_list *list = hiddev->list; struct hiddev_list *list = hiddev->list;
while (list) { while (list) {
list->buffer[list->head].hid = usage; if (uref->field_index != HID_FIELD_INDEX_NONE ||
list->buffer[list->head].value = value; (list->flags & HIDDEV_FLAG_REPORT) != 0) {
list->head = (list->head + 1) & (HIDDEV_BUFFER_SIZE - 1); list->buffer[list->head] = *uref;
list->head = (list->head + 1) &
kill_fasync(&list->fasync, SIGIO, POLL_IN); (HIDDEV_BUFFER_SIZE - 1);
kill_fasync(&list->fasync, SIGIO, POLL_IN);
}
list = list->next; list = list->next;
} }
...@@ -257,43 +260,67 @@ static ssize_t hiddev_read(struct file * file, char * buffer, size_t count, ...@@ -257,43 +260,67 @@ static ssize_t hiddev_read(struct file * file, char * buffer, size_t count,
{ {
DECLARE_WAITQUEUE(wait, current); DECLARE_WAITQUEUE(wait, current);
struct hiddev_list *list = file->private_data; struct hiddev_list *list = file->private_data;
int event_size;
int retval = 0; int retval = 0;
if (list->head == list->tail) { event_size = ((list->flags & HIDDEV_FLAG_UREF) != 0) ?
sizeof(struct hiddev_usage_ref) : sizeof(struct hiddev_event);
add_wait_queue(&list->hiddev->wait, &wait);
set_current_state(TASK_INTERRUPTIBLE);
while (list->head == list->tail) { if (count < event_size) return 0;
if (file->f_flags & O_NONBLOCK) { while (retval == 0) {
retval = -EAGAIN; if (list->head == list->tail) {
break; add_wait_queue(&list->hiddev->wait, &wait);
} set_current_state(TASK_INTERRUPTIBLE);
if (signal_pending(current)) {
retval = -ERESTARTSYS; while (list->head == list->tail) {
break; if (file->f_flags & O_NONBLOCK) {
} retval = -EAGAIN;
if (!list->hiddev->exist) { break;
retval = -EIO; }
break; if (signal_pending(current)) {
retval = -ERESTARTSYS;
break;
}
if (!list->hiddev->exist) {
retval = -EIO;
break;
}
schedule();
} }
schedule(); set_current_state(TASK_RUNNING);
remove_wait_queue(&list->hiddev->wait, &wait);
} }
set_current_state(TASK_RUNNING); if (retval)
remove_wait_queue(&list->hiddev->wait, &wait); return retval;
}
if (retval) while (list->head != list->tail &&
return retval; retval + event_size <= count) {
if ((list->flags & HIDDEV_FLAG_UREF) == 0) {
if (list->buffer[list->tail].field_index !=
HID_FIELD_INDEX_NONE) {
struct hiddev_event event;
event.hid = list->buffer[list->tail].usage_code;
event.value = list->buffer[list->tail].value;
if (copy_to_user(buffer + retval, &event, sizeof(struct hiddev_event)))
return -EFAULT;
retval += sizeof(struct hiddev_event);
}
} else {
if (list->buffer[list->tail].field_index != HID_FIELD_INDEX_NONE ||
(list->flags & HIDDEV_FLAG_REPORT) != 0) {
if (copy_to_user(buffer + retval, list->buffer + list->tail, sizeof(struct hiddev_usage_ref)))
return -EFAULT;
retval += sizeof(struct hiddev_usage_ref);
}
}
list->tail = (list->tail + 1) & (HIDDEV_BUFFER_SIZE - 1);
}
while (list->head != list->tail && retval + sizeof(struct hiddev_event) <= count) {
if (copy_to_user(buffer + retval, list->buffer + list->tail,
sizeof(struct hiddev_event))) return -EFAULT;
list->tail = (list->tail + 1) & (HIDDEV_BUFFER_SIZE - 1);
retval += sizeof(struct hiddev_event);
} }
return retval; return retval;
...@@ -358,6 +385,25 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, ...@@ -358,6 +385,25 @@ static int hiddev_ioctl(struct inode *inode, struct file *file,
return copy_to_user((void *) arg, &dinfo, sizeof(dinfo)); return copy_to_user((void *) arg, &dinfo, sizeof(dinfo));
} }
case HIDIOCGFLAG:
return put_user(list->flags, (int *) arg);
case HIDIOCSFLAG:
{
int newflags;
if (get_user(newflags, (int *) arg))
return -EFAULT;
if ((newflags & ~HIDDEV_FLAGS) != 0 ||
((newflags & HIDDEV_FLAG_REPORT) != 0 &&
(newflags & HIDDEV_FLAG_UREF) == 0))
return -EINVAL;
list->flags = newflags;
return 0;
}
case HIDIOCGSTRING: case HIDIOCGSTRING:
{ {
int idx, len; int idx, len;
......
This diff is collapsed.
...@@ -262,7 +262,7 @@ static int cyberjack_write (struct usb_serial_port *port, int from_user, const u ...@@ -262,7 +262,7 @@ static int cyberjack_write (struct usb_serial_port *port, int from_user, const u
port); port);
/* send the data out the bulk port */ /* send the data out the bulk port */
result = usb_submit_urb(port->write_urb, GFP_KERNEL); result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
if (result) { if (result) {
err(__FUNCTION__ " - failed submitting write urb, error %d", result); err(__FUNCTION__ " - failed submitting write urb, error %d", result);
/* Throw away data. No better idea what to do with it. */ /* Throw away data. No better idea what to do with it. */
...@@ -331,7 +331,7 @@ static void cyberjack_read_int_callback( struct urb *urb ) ...@@ -331,7 +331,7 @@ static void cyberjack_read_int_callback( struct urb *urb )
if( !old_rdtodo ) { if( !old_rdtodo ) {
port->read_urb->dev = port->serial->dev; port->read_urb->dev = port->serial->dev;
result = usb_submit_urb(port->read_urb, GFP_KERNEL); result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
if( result ) if( result )
err(__FUNCTION__ " - failed resubmitting read urb, error %d", result); err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
dbg(__FUNCTION__ " - usb_submit_urb(read urb)"); dbg(__FUNCTION__ " - usb_submit_urb(read urb)");
...@@ -387,7 +387,7 @@ static void cyberjack_read_bulk_callback (struct urb *urb) ...@@ -387,7 +387,7 @@ static void cyberjack_read_bulk_callback (struct urb *urb)
/* Continue to read if we have still urbs to do. */ /* Continue to read if we have still urbs to do. */
if( priv->rdtodo /* || (urb->actual_length==port->bulk_in_endpointAddress)*/ ) { if( priv->rdtodo /* || (urb->actual_length==port->bulk_in_endpointAddress)*/ ) {
port->read_urb->dev = port->serial->dev; port->read_urb->dev = port->serial->dev;
result = usb_submit_urb(port->read_urb, GFP_KERNEL); result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
if (result) if (result)
err(__FUNCTION__ " - failed resubmitting read urb, error %d", result); err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
dbg(__FUNCTION__ " - usb_submit_urb(read urb)"); dbg(__FUNCTION__ " - usb_submit_urb(read urb)");
...@@ -440,7 +440,7 @@ static void cyberjack_write_bulk_callback (struct urb *urb) ...@@ -440,7 +440,7 @@ static void cyberjack_write_bulk_callback (struct urb *urb)
port); port);
/* send the data out the bulk port */ /* send the data out the bulk port */
result = usb_submit_urb(port->write_urb, GFP_KERNEL); result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
if (result) { if (result) {
err(__FUNCTION__ " - failed submitting write urb, error %d", result); err(__FUNCTION__ " - failed submitting write urb, error %d", result);
/* Throw away data. No better idea what to do with it. */ /* Throw away data. No better idea what to do with it. */
......
...@@ -676,7 +676,7 @@ dbg( "digi_write_oob_command: TOP: port=%d, count=%d", oob_priv->dp_port_num, co ...@@ -676,7 +676,7 @@ dbg( "digi_write_oob_command: TOP: port=%d, count=%d", oob_priv->dp_port_num, co
oob_port->write_urb->transfer_buffer_length = len; oob_port->write_urb->transfer_buffer_length = len;
oob_port->write_urb->dev = port->serial->dev; oob_port->write_urb->dev = port->serial->dev;
if( (ret=usb_submit_urb(oob_port->write_urb, GFP_KERNEL)) == 0 ) { if( (ret=usb_submit_urb(oob_port->write_urb, GFP_ATOMIC)) == 0 ) {
oob_priv->dp_write_urb_in_use = 1; oob_priv->dp_write_urb_in_use = 1;
count -= len; count -= len;
buf += len; buf += len;
...@@ -764,7 +764,7 @@ count ); ...@@ -764,7 +764,7 @@ count );
} }
port->write_urb->dev = port->serial->dev; port->write_urb->dev = port->serial->dev;
if( (ret=usb_submit_urb(port->write_urb, GFP_KERNEL)) == 0 ) { if( (ret=usb_submit_urb(port->write_urb, GFP_ATOMIC)) == 0 ) {
priv->dp_write_urb_in_use = 1; priv->dp_write_urb_in_use = 1;
priv->dp_out_buf_len = 0; priv->dp_out_buf_len = 0;
count -= len; count -= len;
...@@ -841,7 +841,7 @@ port_priv->dp_port_num, modem_signals ); ...@@ -841,7 +841,7 @@ port_priv->dp_port_num, modem_signals );
oob_port->write_urb->transfer_buffer_length = 8; oob_port->write_urb->transfer_buffer_length = 8;
oob_port->write_urb->dev = port->serial->dev; oob_port->write_urb->dev = port->serial->dev;
if( (ret=usb_submit_urb(oob_port->write_urb, GFP_KERNEL)) == 0 ) { if( (ret=usb_submit_urb(oob_port->write_urb, GFP_ATOMIC)) == 0 ) {
oob_priv->dp_write_urb_in_use = 1; oob_priv->dp_write_urb_in_use = 1;
port_priv->dp_modem_signals = port_priv->dp_modem_signals =
(port_priv->dp_modem_signals&~(TIOCM_DTR|TIOCM_RTS)) (port_priv->dp_modem_signals&~(TIOCM_DTR|TIOCM_RTS))
...@@ -962,7 +962,7 @@ dbg( "digi_rx_unthrottle: TOP: port=%d", priv->dp_port_num ); ...@@ -962,7 +962,7 @@ dbg( "digi_rx_unthrottle: TOP: port=%d", priv->dp_port_num );
/* restart read chain */ /* restart read chain */
if( priv->dp_throttle_restart ) { if( priv->dp_throttle_restart ) {
port->read_urb->dev = port->serial->dev; port->read_urb->dev = port->serial->dev;
ret = usb_submit_urb( port->read_urb, GFP_KERNEL ); ret = usb_submit_urb( port->read_urb, GFP_ATOMIC );
} }
/* turn throttle off */ /* turn throttle off */
...@@ -1323,7 +1323,7 @@ priv->dp_port_num, count, from_user, in_interrupt() ); ...@@ -1323,7 +1323,7 @@ priv->dp_port_num, count, from_user, in_interrupt() );
/* copy in new data */ /* copy in new data */
memcpy( data, from_user ? user_buf : buf, new_len ); memcpy( data, from_user ? user_buf : buf, new_len );
if( (ret=usb_submit_urb(port->write_urb, GFP_KERNEL)) == 0 ) { if( (ret=usb_submit_urb(port->write_urb, GFP_ATOMIC)) == 0 ) {
priv->dp_write_urb_in_use = 1; priv->dp_write_urb_in_use = 1;
ret = new_len; ret = new_len;
priv->dp_out_buf_len = 0; priv->dp_out_buf_len = 0;
...@@ -1399,7 +1399,7 @@ dbg( "digi_write_bulk_callback: TOP, urb->status=%d", urb->status ); ...@@ -1399,7 +1399,7 @@ dbg( "digi_write_bulk_callback: TOP, urb->status=%d", urb->status );
memcpy( port->write_urb->transfer_buffer+2, priv->dp_out_buf, memcpy( port->write_urb->transfer_buffer+2, priv->dp_out_buf,
priv->dp_out_buf_len ); priv->dp_out_buf_len );
if( (ret=usb_submit_urb(port->write_urb, GFP_KERNEL)) == 0 ) { if( (ret=usb_submit_urb(port->write_urb, GFP_ATOMIC)) == 0 ) {
priv->dp_write_urb_in_use = 1; priv->dp_write_urb_in_use = 1;
priv->dp_out_buf_len = 0; priv->dp_out_buf_len = 0;
} }
...@@ -1837,7 +1837,7 @@ dbg( "digi_read_bulk_callback: TOP" ); ...@@ -1837,7 +1837,7 @@ dbg( "digi_read_bulk_callback: TOP" );
/* continue read */ /* continue read */
urb->dev = port->serial->dev; urb->dev = port->serial->dev;
if( (ret=usb_submit_urb(urb, GFP_KERNEL)) != 0 ) { if( (ret=usb_submit_urb(urb, GFP_ATOMIC)) != 0 ) {
err( __FUNCTION__ ": failed resubmitting urb, ret=%d, port=%d", err( __FUNCTION__ ": failed resubmitting urb, ret=%d, port=%d",
ret, priv->dp_port_num ); ret, priv->dp_port_num );
} }
......
...@@ -256,7 +256,7 @@ static int empeg_write (struct usb_serial_port *port, int from_user, const unsig ...@@ -256,7 +256,7 @@ static int empeg_write (struct usb_serial_port *port, int from_user, const unsig
} }
if (urb->transfer_buffer == NULL) { if (urb->transfer_buffer == NULL) {
urb->transfer_buffer = kmalloc (URB_TRANSFER_BUFFER_SIZE, GFP_KERNEL); urb->transfer_buffer = kmalloc (URB_TRANSFER_BUFFER_SIZE, GFP_ATOMIC);
if (urb->transfer_buffer == NULL) { if (urb->transfer_buffer == NULL) {
err(__FUNCTION__" no more kernel memory..."); err(__FUNCTION__" no more kernel memory...");
goto exit; goto exit;
...@@ -288,7 +288,7 @@ static int empeg_write (struct usb_serial_port *port, int from_user, const unsig ...@@ -288,7 +288,7 @@ static int empeg_write (struct usb_serial_port *port, int from_user, const unsig
urb->transfer_flags |= USB_QUEUE_BULK; urb->transfer_flags |= USB_QUEUE_BULK;
/* send it down the pipe */ /* send it down the pipe */
status = usb_submit_urb(urb, GFP_KERNEL); status = usb_submit_urb(urb, GFP_ATOMIC);
if (status) { if (status) {
err(__FUNCTION__ " - usb_submit_urb(write bulk) failed with status = %d", status); err(__FUNCTION__ " - usb_submit_urb(write bulk) failed with status = %d", status);
bytes_sent = status; bytes_sent = status;
...@@ -441,7 +441,7 @@ static void empeg_read_bulk_callback (struct urb *urb) ...@@ -441,7 +441,7 @@ static void empeg_read_bulk_callback (struct urb *urb)
port->read_urb->transfer_flags |= USB_QUEUE_BULK; port->read_urb->transfer_flags |= USB_QUEUE_BULK;
result = usb_submit_urb(port->read_urb, GFP_KERNEL); result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
if (result) if (result)
err(__FUNCTION__ " - failed resubmitting read urb, error %d", result); err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
...@@ -466,7 +466,7 @@ static void empeg_unthrottle (struct usb_serial_port *port) ...@@ -466,7 +466,7 @@ static void empeg_unthrottle (struct usb_serial_port *port)
port->read_urb->dev = port->serial->dev; port->read_urb->dev = port->serial->dev;
result = usb_submit_urb(port->read_urb, GFP_KERNEL); result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
if (result) if (result)
err(__FUNCTION__ " - failed submitting read urb, error %d", result); err(__FUNCTION__ " - failed submitting read urb, error %d", result);
......
...@@ -469,7 +469,7 @@ static int ftdi_sio_write (struct usb_serial_port *port, int from_user, ...@@ -469,7 +469,7 @@ static int ftdi_sio_write (struct usb_serial_port *port, int from_user,
port->write_urb->transfer_buffer, count, port->write_urb->transfer_buffer, count,
ftdi_sio_write_bulk_callback, port); ftdi_sio_write_bulk_callback, port);
result = usb_submit_urb(port->write_urb, GFP_KERNEL); result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
if (result) { if (result) {
err(__FUNCTION__ " - failed submitting write urb, error %d", result); err(__FUNCTION__ " - failed submitting write urb, error %d", result);
return 0; return 0;
...@@ -631,7 +631,7 @@ static void ftdi_sio_read_bulk_callback (struct urb *urb) ...@@ -631,7 +631,7 @@ static void ftdi_sio_read_bulk_callback (struct urb *urb)
port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
ftdi_sio_read_bulk_callback, port); ftdi_sio_read_bulk_callback, port);
result = usb_submit_urb(port->read_urb, GFP_KERNEL); result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
if (result) if (result)
err(__FUNCTION__ " - failed resubmitting read urb, error %d", result); err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
......
...@@ -790,7 +790,7 @@ static void edge_interrupt_callback (struct urb *urb) ...@@ -790,7 +790,7 @@ static void edge_interrupt_callback (struct urb *urb)
/* we have pending bytes on the bulk in pipe, send a request */ /* we have pending bytes on the bulk in pipe, send a request */
edge_serial->read_urb->dev = edge_serial->serial->dev; edge_serial->read_urb->dev = edge_serial->serial->dev;
result = usb_submit_urb(edge_serial->read_urb, GFP_KERNEL); result = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC);
if (result) { if (result) {
dbg(__FUNCTION__" - usb_submit_urb(read bulk) failed with result = %d", result); dbg(__FUNCTION__" - usb_submit_urb(read bulk) failed with result = %d", result);
} }
...@@ -867,7 +867,7 @@ static void edge_bulk_in_callback (struct urb *urb) ...@@ -867,7 +867,7 @@ static void edge_bulk_in_callback (struct urb *urb)
/* there is, so resubmit our urb */ /* there is, so resubmit our urb */
edge_serial->read_urb->dev = edge_serial->serial->dev; edge_serial->read_urb->dev = edge_serial->serial->dev;
status = usb_submit_urb(edge_serial->read_urb, GFP_KERNEL); status = usb_submit_urb(edge_serial->read_urb, GFP_ATOMIC);
if (status) { if (status) {
err(__FUNCTION__" - usb_submit_urb(read bulk) failed, status = %d", status); err(__FUNCTION__" - usb_submit_urb(read bulk) failed, status = %d", status);
} }
...@@ -1435,7 +1435,7 @@ static void send_more_port_data(struct edgeport_serial *edge_serial, struct edge ...@@ -1435,7 +1435,7 @@ static void send_more_port_data(struct edgeport_serial *edge_serial, struct edge
/* build the data header for the buffer and port that we are about to send out */ /* build the data header for the buffer and port that we are about to send out */
count = fifo->count; count = fifo->count;
buffer = kmalloc (count+2, GFP_KERNEL); buffer = kmalloc (count+2, GFP_ATOMIC);
if (buffer == NULL) { if (buffer == NULL) {
err(__FUNCTION__" - no more kernel memory..."); err(__FUNCTION__" - no more kernel memory...");
edge_port->write_in_progress = FALSE; edge_port->write_in_progress = FALSE;
...@@ -1474,7 +1474,7 @@ static void send_more_port_data(struct edgeport_serial *edge_serial, struct edge ...@@ -1474,7 +1474,7 @@ static void send_more_port_data(struct edgeport_serial *edge_serial, struct edge
urb->transfer_flags |= USB_QUEUE_BULK; urb->transfer_flags |= USB_QUEUE_BULK;
urb->dev = edge_serial->serial->dev; urb->dev = edge_serial->serial->dev;
status = usb_submit_urb(urb, GFP_KERNEL); status = usb_submit_urb(urb, GFP_ATOMIC);
if (status) { if (status) {
/* something went wrong */ /* something went wrong */
dbg(__FUNCTION__" - usb_submit_urb(write bulk) failed"); dbg(__FUNCTION__" - usb_submit_urb(write bulk) failed");
...@@ -2431,7 +2431,7 @@ static int send_iosp_ext_cmd (struct edgeport_port *edge_port, __u8 command, __u ...@@ -2431,7 +2431,7 @@ static int send_iosp_ext_cmd (struct edgeport_port *edge_port, __u8 command, __u
dbg(__FUNCTION__" - %d, %d", command, param); dbg(__FUNCTION__" - %d, %d", command, param);
buffer = kmalloc (10, GFP_KERNEL); buffer = kmalloc (10, GFP_ATOMIC);
if (!buffer) { if (!buffer) {
err(__FUNCTION__" - kmalloc(%d) failed.\n", 10); err(__FUNCTION__" - kmalloc(%d) failed.\n", 10);
return -ENOMEM; return -ENOMEM;
...@@ -2467,7 +2467,7 @@ static int write_cmd_usb (struct edgeport_port *edge_port, unsigned char *buffer ...@@ -2467,7 +2467,7 @@ static int write_cmd_usb (struct edgeport_port *edge_port, unsigned char *buffer
usb_serial_debug_data (__FILE__, __FUNCTION__, length, buffer); usb_serial_debug_data (__FILE__, __FUNCTION__, length, buffer);
/* Allocate our next urb */ /* Allocate our next urb */
urb = usb_alloc_urb (0, GFP_KERNEL); urb = usb_alloc_urb (0, GFP_ATOMIC);
if (!urb) if (!urb)
return -ENOMEM; return -ENOMEM;
...@@ -2482,7 +2482,7 @@ static int write_cmd_usb (struct edgeport_port *edge_port, unsigned char *buffer ...@@ -2482,7 +2482,7 @@ static int write_cmd_usb (struct edgeport_port *edge_port, unsigned char *buffer
urb->transfer_flags |= USB_QUEUE_BULK; urb->transfer_flags |= USB_QUEUE_BULK;
edge_port->commandPending = TRUE; edge_port->commandPending = TRUE;
status = usb_submit_urb(urb, GFP_KERNEL); status = usb_submit_urb(urb, GFP_ATOMIC);
if (status) { if (status) {
/* something went wrong */ /* something went wrong */
...@@ -2532,7 +2532,7 @@ static int send_cmd_write_baud_rate (struct edgeport_port *edge_port, int baudRa ...@@ -2532,7 +2532,7 @@ static int send_cmd_write_baud_rate (struct edgeport_port *edge_port, int baudRa
} }
// Alloc memory for the string of commands. // Alloc memory for the string of commands.
cmdBuffer = kmalloc (0x100, GFP_KERNEL); cmdBuffer = kmalloc (0x100, GFP_ATOMIC);
if (!cmdBuffer) { if (!cmdBuffer) {
err(__FUNCTION__" - kmalloc(%d) failed.\n", 0x100); err(__FUNCTION__" - kmalloc(%d) failed.\n", 0x100);
return -ENOMEM; return -ENOMEM;
...@@ -2618,7 +2618,7 @@ static int send_cmd_write_uart_register (struct edgeport_port *edge_port, __u8 r ...@@ -2618,7 +2618,7 @@ static int send_cmd_write_uart_register (struct edgeport_port *edge_port, __u8 r
dbg (__FUNCTION__" - write to %s register 0x%02x", (regNum == MCR) ? "MCR" : "LCR", regValue); dbg (__FUNCTION__" - write to %s register 0x%02x", (regNum == MCR) ? "MCR" : "LCR", regValue);
// Alloc memory for the string of commands. // Alloc memory for the string of commands.
cmdBuffer = kmalloc (0x10, GFP_KERNEL); cmdBuffer = kmalloc (0x10, GFP_ATOMIC);
if (cmdBuffer == NULL ) { if (cmdBuffer == NULL ) {
return -ENOMEM; return -ENOMEM;
} }
......
...@@ -297,7 +297,7 @@ static void ipaq_read_bulk_callback(struct urb *urb) ...@@ -297,7 +297,7 @@ static void ipaq_read_bulk_callback(struct urb *urb)
usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length, port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
ipaq_read_bulk_callback, port); ipaq_read_bulk_callback, port);
result = usb_submit_urb(port->read_urb, GFP_KERNEL); result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
if (result) if (result)
err(__FUNCTION__ " - failed resubmitting read urb, error %d", result); err(__FUNCTION__ " - failed resubmitting read urb, error %d", result);
return; return;
...@@ -412,7 +412,7 @@ static int ipaq_write_flush(struct usb_serial_port *port) ...@@ -412,7 +412,7 @@ static int ipaq_write_flush(struct usb_serial_port *port)
usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress), usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress),
port->write_urb->transfer_buffer, count, ipaq_write_bulk_callback, port->write_urb->transfer_buffer, count, ipaq_write_bulk_callback,
port); port);
result = usb_submit_urb(urb, GFP_KERNEL); result = usb_submit_urb(urb, GFP_ATOMIC);
if (result) { if (result) {
err(__FUNCTION__ " - failed submitting write urb, error %d", result); err(__FUNCTION__ " - failed submitting write urb, error %d", result);
} }
......
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.
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.
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.
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