Commit de57f159 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.19pre1

parent 4d27e1fb
......@@ -157,12 +157,6 @@ S: 633 South 550 East
S: Provo, Utah 84606
S: USA
N: Paul Barton-Davis
E: pbd@op.net
D: Driver for WaveFront soundcards (Turtle Beach Maui, Tropez, Tropez+)
D: Various bugfixes and changes to sound drivers
S: USA
N: Krzysztof G. Baranowski
E: kgb@manjak.knm.org.pl
P: 1024/FA6F16D1 96 D1 1A CF 5F CA 69 EC F9 4F 36 1F 6D 60 7B DA
......@@ -174,6 +168,12 @@ S: ul. Koscielna 12a
S: 62-300 Wrzesnia
S: Poland
N: Paul Barton-Davis
E: pbd@op.net
D: Driver for WaveFront soundcards (Turtle Beach Maui, Tropez, Tropez+)
D: Various bugfixes and changes to sound drivers
S: USA
N: Carlos Henrique Bauer
E: chbauer@acm.org
E: bauer@atlas.unisinos.br
......@@ -482,11 +482,11 @@ S: Warrendale, Pennsylvania 15086
S: USA
N: Alex deVries
E: puffin@redhat.com
D: Various SGI parts, bits of HAL2 and Newport
S: 18 Bernier Terrace
S: Kanata, Ontario
S: K2L 2V@
E: adevries@thepuffingroup.com
D: Various SGI parts, bits of HAL2 and Newport, PA-RISC Linux.
S: 41.5 William Street
S: Ottawa, Ontario
S: K1N 6Z9
S: CANADA
N: Eddie C. Dost
......@@ -794,6 +794,10 @@ S: 77 Clarence Mews
S: London SE16 1GD
S: United Kingdom
N: Kai Harrekilde-Petersen
E: khp@olicom.dk
D: Original author of the ftape-HOWTO, i82078 fdc detection code.
N: Bart Hartgers
E: bart@etpmod.phys.tue.nl
D: MTRR emulation with Centaur MCRs
......@@ -801,10 +805,6 @@ S: Gen Stedmanstraat 212
S: 5623 HZ Eindhoven
S: The Netherlands
N: Kai Harrekilde-Petersen
E: khp@olicom.dk
D: Original author of the ftape-HOWTO, i82078 fdc detection code.
N: Andrew Haylett
E: ajh@primag.co.uk
D: Selection mechanism
......@@ -858,6 +858,14 @@ S: Danckelmannstr. 48
S: 14059 Berlin
S: Germany
N: David Hinds
E: dhinds@zen.stanford.edu
W: http://hyper.stanford.edu/~dhinds
D: PCMCIA and CardBus stuff, PCMCIA-HOWTO, PCMCIA client drivers
S: 2019 W. Middlefield Rd #1
S: Mountain View, CA 94043
S: USA
N: Michael Hipp
E: hippm@informatik.uni-tuebingen.de
D: drivers for the racal ni5210 & ni6510 Ethernet-boards
......@@ -1018,19 +1026,6 @@ S: Gelligaer, Hengoed,
S: Mid Glamorgan, CF82 8EJ,
S: Wales, United Kingdom
N: Andreas S. Krebs
E: akrebs@altavista.net
D: CYPRESS CY82C693 chipset IDE, Digital's PC-Alpha 164SX boards
N: Andrzej M. Krzysztofowicz
E: ankry@mif.pg.gda.pl
D: XT disk driver
D: Aladdin 1533/1543(C) chipset IDE
D: PIIX chipset IDE
S: ul. Matemblewska 1B/10
S: 80-283 Gdansk
S: Poland
N: Bernhard Kaindl
E: bkaindl@netway.at
E: edv@bartelt.via.at
......@@ -1154,6 +1149,10 @@ S: Markham, Ontario
S: L3R 8B2
S: Canada
N: Andreas S. Krebs
E: akrebs@altavista.net
D: CYPRESS CY82C693 chipset IDE, Digital's PC-Alpha 164SX boards
N: Russell Kroll
E: rkroll@exploits.org
W: http://www.exploits.org/
......@@ -1162,6 +1161,15 @@ S: Post Office Box 49458
S: Colorado Springs, Colorado 80949-9458
S: USA
N: Andrzej M. Krzysztofowicz
E: ankry@mif.pg.gda.pl
D: XT disk driver
D: Aladdin 1533/1543(C) chipset IDE
D: PIIX chipset IDE
S: ul. Matemblewska 1B/10
S: 80-283 Gdansk
S: Poland
N: Gero Kuhlmann
E: gero@gkminix.han.de
D: mounting root via NFS
......@@ -1253,10 +1261,14 @@ D: Busmaster driver for HP 10/100 Mbit Network Adapters
S: University of Stuttgart, Germany and
S: Ecole Nationale Superieure des Telecommunications, Paris
N: Martin von Lwis
E: loewis@informatik.hu-berlin.de
D: script binary format
D: NTFS driver
N: Jamie Lokier
E: jamie@imbolc.ucc.ie
D: Reboot-through-BIOS for broken 486 motherboards
S: 11 Goodson Walk
S: Marston
S: Oxford
S: OX3 0HX
S: United Kingdom
N: Mark Lord
E: mlord@pobox.com
......@@ -1267,15 +1279,6 @@ S: 33 Ridgefield Cr
S: Nepean, Ontario
S: Canada K2H 6S3
N: Jamie Lokier
E: jamie@imbolc.ucc.ie
D: Reboot-through-BIOS for broken 486 motherboards
S: 11 Goodson Walk
S: Marston
S: Oxford
S: OX3 0HX
S: United Kingdom
N: Warner Losh
E: imp@village.org
D: Linux/MIPS Deskstation support, Provided OI/OB for Linux
......@@ -1283,6 +1286,11 @@ S: 8786 Niwot Road
S: Niwot, Colorado 80503
S: USA
N: Martin von Lwis
E: loewis@informatik.hu-berlin.de
D: script binary format
D: NTFS driver
N: H.J. Lu
E: hjl@gnu.ai.mit.edu
D: GCC + libraries hacker
......@@ -1295,10 +1303,6 @@ S: Puistokaari 1 E 18
S: 00200 Helsinki
S: Finland
N: Kai Mkisara
E: Kai.Makisara@metla.fi
D: SCSI Tape Driver
N: Hamish Macdonald
E: hamishm@lucent.com
D: Linux/68k port
......@@ -1343,6 +1347,10 @@ S: PO BOX 220, HFX. CENTRAL
S: Halifax, Nova Scotia
S: Canada B3J 3C8
N: Kai Mkisara
E: Kai.Makisara@metla.fi
D: SCSI Tape Driver
N: Martin Mares
E: mj@atrey.karlin.mff.cuni.cz
W: http://atrey.karlin.mff.cuni.cz/~mj/
......@@ -1399,11 +1407,13 @@ N: Arnaldo Carvalho de Melo
E: acme@conectiva.com.br
W: http://www.conectiva.com.br/~acme
D: wanrouter hacking
D: USB hacking
D: miscellaneous Makefile & Config.in fixes
D: Cyclom 2X synchronous card driver
D: i18n for minicom, net-tools, util-linux, fetchmail, etc
S: Conectiva Informatica LTDA
S: Conectiva Informtica LTDA
S: R. Prof. Rubens Elke Braga, 558 - Parolin
S: 80220-320 Curitiba - Parana
S: 80220-320 Curitiba - Paran
S: Brazil
N: Michael Meskes
......@@ -1500,13 +1510,6 @@ S: 30 White Tail Lane
S: Lafayette, Indiana 47905
S: USA
N: Johan Myreen
E: jem@iki.fi
D: PS/2 mouse driver writer etc.
S: Dragonvagen 1 A 13
S: FIN-00330 Helsingfors
S: Finland
N: Trond Myklebust
E: trond.myklebust@fys.uio.no
D: current NFS client hacker.
......@@ -1514,6 +1517,13 @@ S: Dagaliveien 31e
S: N-0391 Oslo
S: Norway
N: Johan Myreen
E: jem@iki.fi
D: PS/2 mouse driver writer etc.
S: Dragonvagen 1 A 13
S: FIN-00330 Helsingfors
S: Finland
N: Matija Nalis
E: mnalis@jagor.srce.hr
E: mnalis@voyager.hr
......@@ -1628,6 +1638,13 @@ S: Demonstratsii 8-382
S: Tula 300000
S: Russia
N: Johnnie Peters
E: jpeters@phx.mcd.mot.com
D: Motorola PowerPC changes for PReP
S: 2900 S. Diable Way
S: Tempe, Arizona 85282
S: USA
N: Kirk Petersen
E: kirk@speakeasy.org
W: http://www.speakeasy.org/~kirk/
......@@ -1818,13 +1835,6 @@ S: Dag Hammerskjolds v. 3E
S: S-226 64 LUND
S: Sweden
N: Peter De Schrijver
E: stud11@cc4.kuleuven.ac.be
D: Mitsumi CD-ROM driver patches March version
S: Molenbaan 29
S: B2240 Zandhoven
S: Belgium
N: Henning P. Schmiedehausen
E: hps@tanstaafl.de
D: added PCI support to the serial driver
......@@ -1834,6 +1844,13 @@ N: Michael Schmitz
E:
D: Macintosh IDE Driver
N: Peter De Schrijver
E: stud11@cc4.kuleuven.ac.be
D: Mitsumi CD-ROM driver patches March version
S: Molenbaan 29
S: B2240 Zandhoven
S: Belgium
N: Martin Schulze
E: joey@linux.de
W: http://home.pages.de/~joey/
......@@ -1954,13 +1971,21 @@ S: Willowdale, Ontario
S: Canada M2N 2Z1
N: Adrian Sun
E: asun@u.washington.edu
E: asun@cobaltnet.com
D: hfs support
D: alpha rtc port, random appletalk fixes
S: Department of Zoology, University of Washington
S: Seattle, WA 98195-1800
S: USA
N: Corey Thomas
E: corey@world.std.com
W: http://world.std.com/~corey/index.html
D: Raylink/WebGear wireless LAN device driver (ray_cs) author
S: 145 Howard St.
S: Northborough, MA 01532
S: USA
N: Tommy Thorn
E: Tommy.Thorn@irisa.fr
W: http://www.irisa.fr/prive/thorn/index.html
......@@ -1997,9 +2022,9 @@ W: http://lie-br.conectiva.com.br/~marcelo/
D: Miscellaneous kernel hacker
D: Cyclom 2X driver hacker
D: linuxconf apache & proftpd module maintainer
S: Conectiva Informatica LTDA
S: Conectiva Informtica LTDA
S: R. Prof. Rubens Elke Braga, 558 - Parolin
S: 80220-320 Curitiba - Parana
S: 80220-320 Curitiba - Paran
S: Brazil
N: Stefan Traby
......@@ -2036,6 +2061,17 @@ D: Linux-Workshop K
S: Tacitusstr. 6
S: D-50968 Kln
N: Tsu-Sheng Tsao
E: tsusheng@scf.usc.edu
D: IGMP(Internet Group Management Protocol) version 2
S: 2F 14 ALY 31 LN 166 SEC 1 SHIH-PEI RD
S: Taipei
S: Taiwan 112
S: Republic of China
S: 24335 Delta Drive
S: Diamond Bar, California 91765
S: USA
N: Theodore Ts'o
E: tytso@mit.edu
D: Random Linux hacker
......@@ -2051,17 +2087,6 @@ S: 1 Amherst Street
S: Cambridge, Massachusetts 02139
S: USA
N: Tsu-Sheng Tsao
E: tsusheng@scf.usc.edu
D: IGMP(Internet Group Management Protocol) version 2
S: 2F 14 ALY 31 LN 166 SEC 1 SHIH-PEI RD
S: Taipei
S: Taiwan 112
S: Republic of China
S: 24335 Delta Drive
S: Diamond Bar, California 91765
S: USA
N: Simmule Turner
E: sturner@tele-tv.com
D: Added swapping to filesystem
......@@ -2193,8 +2218,14 @@ D: The Linux Support Team Erlangen
N: David Weinehall
E: tao@acc.umu.se
D: NE/2-driver maintainer
W: http://www.acc.umu.se/~tao/
W: http://www.acc.umu.se/~mcalinux/
D: Fixes for the NE/2-driver
D: Miscellaneous MCA-support
D: Cleanup of the Config-files
S: Axtorpsvagen 40:20
S: S-903 37 UMEA
S: Sweden
N: Matt Welsh
E: mdw@metalab.unc.edu
......
......@@ -210,3 +210,26 @@ options "-kr -i8" (stands for "K&R, 8 character indents").
"indent" has a lot of options, and especially when it comes to comment
re-formatting you may want to take a look at the manual page. But
remember: "indent" is not a fix for bad programming.
Chapter 7: Configuration-files
For configuration options (arch/xxx/config.in, and all the Config.in files),
somewhat different indentation is used.
An indention level of 3 is used in the code, while the text in the config-
options should have an indention-level of 2 to indicate dependencies. The
latter only applies to bool/tristate options. For other options, just use
common sense. An example:
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'Apply nitroglycerine inside the keyboard (DANGEROUS)' CONFIG_BOOM
if [ "$CONFIG_BOOM" != "n" ]; then
bool ' Output nice messages when you explode' CONFIG_CHEER
fi
fi
Generally, CONFIG_EXPERIMENTAL should surround all options not considered
stable. All options that are known to trash data (experimental write-
support for file-systems, for instance) should be denoted (DANGEROUS), other
Experimental options should be denoted (EXPERIMENTAL).
This diff is collapsed.
......@@ -29,7 +29,7 @@ trivial patch so apply some common sense.
job the maintainers (and especially Linus) do is to keep things
looking the same. Sometimes this means that the clever hack in
your driver to get around a problem actually needs to become a
generalized kernel feature ready for next time. See
generalized kernel feature ready for next time. See
Documentation/CodingStyle for guidance here.
PLEASE try to include any credit lines you want added with the
......@@ -63,7 +63,7 @@ S: Status, one of the following:
Maintained: Someone actually looks after it.
Odd Fixes: It has a maintainer but they don't have time to do
much other than throw the odd patch in. See below..
Orphan: No current maintainer [but maybe you could take the
Orphan: No current maintainer [but maybe you could take the
role as you write your new code].
Obsolete: Old code. Something tagged obsolete generally means
it has been replaced by a better system and you
......@@ -131,12 +131,6 @@ M: Jay.Schulist@spacs.k12.wi.us
L: linux-atalk@netspace.org
S: Maintained
ARPD SUPPORT
P: Jonathan Layes
M: layes@loran.com
L: linux-net@vger.rutgers.edu
S: Maintained
ARM MFM AND FLOPPY DRIVERS
P: Dave Gilbert
M: linux@treblig.org
......@@ -150,6 +144,12 @@ L: arm-linux@tardis.ed.ac.uk
W: http://www.arm.uk.linux.org/~rmk/armlinux.html
S: Maintained
ARPD SUPPORT
P: Jonathan Layes
M: layes@loran.com
L: linux-net@vger.rutgers.edu
S: Maintained
AX.25 NETWORK LAYER
P: Matthias Welwarsky
M: dg2fef@afthd.tu-darmstadt.de
......@@ -182,6 +182,12 @@ M: jgarzik@pobox.com
L: linux-fbdev@vuser.vu.union.edu
S: Maintained
COMPAQ SMART2 RAID DRIVER
P: Charles White
M: Charles White <arrays@compaq.com>
L: compaqandlinux@yps.org
S: Maintained
COMPUTONE INTELLIPORT MULTIPORT CARD
P: Doug McNash
P: Michael H. Warfield
......@@ -287,12 +293,6 @@ M: mike@i-Connect.Net
L: linux-eata@i-connect.net, linux-scsi@vger.rutgers.edu
S: Maintained
COMPAQ SMART2 RAID DRIVER
P: Charles White
M: Charles White <arrays@compaq.com>
L: compaqandlinux@yps.org
S: Maintained
EATA ISA/EISA/PCI SCSI DRIVER
P: Dario Ballabio
M: dario@milano.europe.dg.com
......@@ -369,7 +369,7 @@ S: Maintained
HFS FILESYSTEM
P: Adrian Sun
M: asun@u.washington.edu
M: asun@cobaltnet.com
L: linux-kernel@vger.rutgers.edu
S: Maintained
......@@ -390,17 +390,23 @@ P: Jaroslav Kysela
M: perex@suse.cz
S: Maintained
HPFS FILESYSTEM
P: Mikulas Patocka
M: mikulas@artax.karlin.mff.cuni.cz
W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
S: Maintained
IBM MCA SCSI SUBSYSTEM DRIVER
P: Michael Lang
M: langa2@kph.uni-mainz.de
W: http://www.uni-mainz.de/~langm000/linux.html
S: Maintained
HPFS FILESYSTEM
P: Mikulas Patocka
M: mikulas@artax.karlin.mff.cuni.cz
W: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
S: Maintained
IBM ServeRAID RAID DRIVER
P: Keith Mitchell
M: ipslinux@us.ibm.com
W: http://www.developer.ibm.com/welcome/netfinity/serveraid_beta.html
S: Supported
IBM ServeRAID RAID DRIVER
P: Keith Mitchell
......@@ -415,7 +421,7 @@ L: linux-kernel@vger.rutgers.edu
W: http://linux.kernel.org/pub/linux/kernel/people/hedrick/
S: Supported
IDE/ATAPI CDROM DRIVER
IDE/ATAPI CDROM DRIVER
P: Jens Axboe
M: axboe@image.dk
L: linux-kernel@vger.rutgers.edu
......@@ -524,8 +530,9 @@ S: Maintained
MISCELLANEOUS MCA-SUPPORT
P: David Weinehall
M: mcalinux@acc.umu.se (project MCA-team)
M: tao@acc.umu.se (personal)
W: http://www.acc.umu.se/~tao/
W: http://www.acc.umu.se/~mcalinux/
L: linux-kernel@vger.rutgers.edu
S: Maintained
......@@ -571,7 +578,7 @@ L: netfilter@lists.samba.org
S: Supported
NETROM NETWORK LAYER
P: Tomi Manninen
P: Tomi Manninen
M: Tomi.Manninen@hut.fi
L: linux-hams@vger.rutgers.edu
S: Maintained
......@@ -627,16 +634,6 @@ L: linux-tr@emissary.aus-etc.com
W: http://www.linuxtr.net
S: Maintained
OLYMPIC NETWORK DRIVER
P: Peter De Shrijver
M: p2@ace.ulyssis.sutdent.kuleuven.ac.be
P: Mike Phillips
M: phillim@amtrak.com
L: linux-net@vger.rutgers.edu
L: linux-tr@emissary.aus-etc.com
W: http://www.linuxtr.net
S: Maintained
OPL3-SA2, SA3, and SAx DRIVER
P: Scott Murray
M: scottm@interlog.com
......@@ -668,17 +665,23 @@ P: Jens Maurer
M: jmaurer@cck.uni-kl.de
S: Maintained
PCI SOUND DRIVERS (ES1370, ES1371 and SONICVIBES)
P: Thomas Sailer
M: sailer@ife.ee.ethz.ch
L: linux-sound@vger.rutgers.edu
W: http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html
S: Maintained
PCI SUBSYSTEM
P: Martin Mares
M: mj@atrey.karlin.mff.cuni.cz
L: linux-kernel@vger.rutgers.edu
S: Maintained
PCI SOUND DRIVERS (ES1370, ES1371 and SONICVIBES)
P: Thomas Sailer
M: sailer@ife.ee.ethz.ch
L: linux-sound@vger.rutgers.edu
W: http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html
PCMCIA SUBSYSTEM
P: David Hinds
M: dhinds@zen.stanford.edu
L: linux-kernel@vger.rutgers.edu
S: Maintained
PCNET32 NETWORK DRIVER
......@@ -701,6 +704,12 @@ M: longyear@pobox.com
L: linux-ppp@vger.rutgers.edu
S: Maintained
RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
P: Corey Thomas
M: corey@world.std.com
L: linux-kernel@vger.rutgers.edu
S: Maintained
REAL TIME CLOCK DRIVER
P: Paul Gortmaker
M: p_gortmaker@yahoo.com
......@@ -725,7 +734,7 @@ M: emoenke@gwdg.de
L: linux-kernel@vger.rutgers.edu
S: Maintained
SCSI CDROM DRIVER
SCSI CDROM DRIVER
P: Jens Axboe
M: axboe@image.dk
L: linux-kernel@vger.rutgers.edu
......@@ -776,7 +785,7 @@ L: linux-net@vger.rutgers.edu
S: Maintained
SOUND
P: Alan Cox
P: Alan Cox
M: alan@redhat.com
S: Supported
......@@ -860,7 +869,7 @@ M: mnalis@jagor.srce.hr
L: linux-kernel@vger.rutgers.edu
S: Maintained
UNIFORM CDROM DRIVER
UNIFORM CDROM DRIVER
P: Jens Axboe
M: axboe@image.dk
L: linux-kernel@vger.rutgers.edu
......@@ -888,6 +897,11 @@ L: linux-kernel@vger.rutgers.edu
W: http://bmrc.berkeley.edu/people/chaffee
S: Maintained
VIA 82Cxxx AUDIO DRIVER
P: Jeff Garzik
M: jgarzik@pobox.com
S: Maintained
VIDEO FOR LINUX
P: Alan Cox
M: Alan.Cox@linux.org
......
......@@ -285,6 +285,7 @@ CONFIG_EEXPRESS_PRO100=y
# PCMCIA network devices
#
# CONFIG_PCMCIA_PCNET is not set
# CONFIG_PCMCIA_3C589 is not set
CONFIG_PCMCIA_RAYCS=y
#
......
......@@ -385,7 +385,7 @@ void __init init_IRQ(void)
#endif
/*
* Set the clock to 100 Hz, we already have a valid
* Set the clock to HZ Hz, we already have a valid
* vector now:
*/
outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */
......
......@@ -201,6 +201,28 @@
19990512 Richard Gooch <rgooch@atnf.csiro.au>
Minor cleanups.
v1.35
19990707 Zoltan Boszormenyi <zboszor@mol.hu>
Check whether ARR3 is protected in cyrix_get_free_region()
and mtrr_del(). The code won't attempt to delete or change it
from now on if the BIOS protected ARR3. It silently skips ARR3
in cyrix_get_free_region() or returns with an error code from
mtrr_del().
19990711 Zoltan Boszormenyi <zboszor@mol.hu>
Reset some bits in the CCRs in cyrix_arr_init() to disable SMM
if ARR3 isn't protected. This is needed because if SMM is active
and ARR3 isn't protected then deleting and setting ARR3 again
may lock up the processor. With SMM entirely disabled, it does
not happen.
19990812 Zoltan Boszormenyi <zboszor@mol.hu>
Rearrange switch() statements so the driver accomodates to
the fact that the AMD Athlon handles its MTRRs the same way
as Intel does.
19990814 Zoltan Boszormenyi <zboszor@mol.hu>
Double check for Intel in mtrr_add()'s big switch() because
that revision check is only valid for Intel CPUs.
19990819 Alan Cox <alan@redhat.com>
Tested Zoltan's changes on a pre production Athlon - 100%
success.
*/
#include <linux/types.h>
#include <linux/errno.h>
......@@ -309,6 +331,7 @@ struct set_mtrr_context
unsigned long ccr3;
};
static int arr3_protected;
/* Put the processor into a state where MTRRs can be safely set */
static void set_mtrr_prepare (struct set_mtrr_context *ctxt)
......@@ -321,6 +344,8 @@ static void set_mtrr_prepare (struct set_mtrr_context *ctxt)
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
if (boot_cpu_data.x86 >= 6) break; /* Athlon and post-Athlon CPUs */
/* else fall through */
case X86_VENDOR_CENTAUR:
return;
/*break;*/
......@@ -344,6 +369,7 @@ static void set_mtrr_prepare (struct set_mtrr_context *ctxt)
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
case X86_VENDOR_INTEL:
/* Disable MTRRs, and set the default type to uncached */
rdmsr (MTRRdefType_MSR, ctxt->deftype_lo, ctxt->deftype_hi);
......@@ -365,6 +391,8 @@ static void set_mtrr_done (struct set_mtrr_context *ctxt)
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
if (boot_cpu_data.x86 >= 6) break; /* Athlon and post-Athlon CPUs */
/* else fall through */
case X86_VENDOR_CENTAUR:
__restore_flags (ctxt->flags);
return;
......@@ -376,6 +404,7 @@ static void set_mtrr_done (struct set_mtrr_context *ctxt)
/* Restore MTRRdefType */
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
case X86_VENDOR_INTEL:
wrmsr (MTRRdefType_MSR, ctxt->deftype_lo, ctxt->deftype_hi);
break;
......@@ -406,6 +435,9 @@ static unsigned int get_num_var_ranges (void)
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
if (boot_cpu_data.x86 < 6) return 2; /* pre-Athlon CPUs */
/* else fall through */
case X86_VENDOR_INTEL:
rdmsr (MTRRcap_MSR, config, dummy);
return (config & 0xff);
......@@ -416,9 +448,6 @@ static unsigned int get_num_var_ranges (void)
/* and Centaur has 8 MCR's */
return 8;
/*break;*/
case X86_VENDOR_AMD:
return 2;
/*break;*/
}
return 0;
} /* End Function get_num_var_ranges */
......@@ -430,12 +459,14 @@ static int have_wrcomb (void)
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
if (boot_cpu_data.x86 < 6) return 1; /* pre-Athlon CPUs */
/* else fall through */
case X86_VENDOR_INTEL:
rdmsr (MTRRcap_MSR, config, dummy);
return (config & (1<<10));
/*break;*/
case X86_VENDOR_CYRIX:
case X86_VENDOR_AMD:
case X86_VENDOR_CENTAUR:
return 1;
/*break;*/
......@@ -1030,6 +1061,7 @@ static int cyrix_get_free_region (unsigned long base, unsigned long size)
for (i = 0; i < 7; i++)
{
cyrix_get_arr (i, &lbase, &lsize, &ltype);
if ((i == 3) && arr3_protected) continue;
if (lsize < 1) return i;
}
/* ARR0-ARR6 isn't free, try ARR7 but its size must be at least 256K */
......@@ -1062,13 +1094,30 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
if ( !(boot_cpu_data.x86_capability & X86_FEATURE_MTRR) ) return -ENODEV;
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
if (boot_cpu_data.x86 < 6) { /* pre-Athlon CPUs */
/* Apply the K6 block alignment and size rules
In order
o Uncached or gathering only
o 128K or bigger block
o Power of 2 block
o base suitably aligned to the power
*/
if (type > MTRR_TYPE_WRCOMB || size < (1 << 17) ||
(size & ~(size-1))-size || (base & (size-1)))
return -EINVAL;
break;
} /* else fall through */
case X86_VENDOR_INTEL:
/* For Intel PPro stepping <= 7, must be 4 MiB aligned */
if ( (boot_cpu_data.x86 == 6) && (boot_cpu_data.x86_model == 1) &&
(boot_cpu_data.x86_mask <= 7) && ( base & ( (1 << 22) - 1 ) ) )
{
printk ("mtrr: base(0x%lx) is not 4 MiB aligned\n", base);
return -EINVAL;
/* Double check for Intel, we may run on Athlon. */
if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) {
/* For Intel PPro stepping <= 7, must be 4 MiB aligned */
if ( (boot_cpu_data.x86 == 6) && (boot_cpu_data.x86_model == 1) &&
(boot_cpu_data.x86_mask <= 7) && ( base & ( (1 << 22) - 1 ) ) )
{
printk ("mtrr: base(0x%lx) is not 4 MiB aligned\n", base);
return -EINVAL;
}
}
/* Fall through */
case X86_VENDOR_CYRIX:
......@@ -1105,18 +1154,6 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
return -EINVAL;
}
break;
case X86_VENDOR_AMD:
/* Apply the K6 block alignment and size rules
In order
o Uncached or gathering only
o 128K or bigger block
o Power of 2 block
o base suitably aligned to the power
*/
if (type > MTRR_TYPE_WRCOMB || size < (1 << 17) ||
(size & ~(size-1))-size || (base & (size-1)))
return -EINVAL;
break;
default:
return -EINVAL;
/*break;*/
......@@ -1221,6 +1258,15 @@ int mtrr_del (int reg, unsigned long base, unsigned long size)
printk ("mtrr: register: %d too big\n", reg);
return -EINVAL;
}
if (boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX)
{
if ((reg == 3) && arr3_protected)
{
spin_unlock (&main_lock);
printk ("mtrr: ARR3 cannot be changed\n");
return -EINVAL;
}
}
(*get_mtrr) (reg, &lbase, &lsize, &ltype);
if (lsize < 1)
{
......@@ -1585,22 +1631,22 @@ static void __init cyrix_arr_init(void)
ccr[5] = getCx86 (CX86_CCR5);
ccr[6] = getCx86 (CX86_CCR6);
if (ccr[3] & 1)
if (ccr[3] & 1) {
ccrc[3] = 1;
else {
arr3_protected = 1;
} else {
/* Disable SMM mode (bit 1), access to SMM memory (bit 2) and
* access to SMM memory through ARR3 (bit 7).
*/
/*
if (ccr[1] & 0x80) { ccr[1] &= 0x7f; ccrc[1] |= 0x80; }
if (ccr[1] & 0x04) { ccr[1] &= 0xfb; ccrc[1] |= 0x04; }
if (ccr[1] & 0x02) { ccr[1] &= 0xfd; ccrc[1] |= 0x02; }
*/
arr3_protected = 0;
if (ccr[6] & 0x02) {
ccr[6] &= 0xfd; ccrc[6] = 1; /* Disable write protection of ARR3. */
setCx86 (CX86_CCR6, ccr[6]);
}
/* Disable ARR3. */
/* Disable ARR3. This is safe now that we disabled SMM. */
/* cyrix_set_arr_up (3, 0, 0, 0, FALSE); */
}
/* If we changed CCR1 in memory, change it in the processor, too. */
......@@ -1660,6 +1706,12 @@ static void __init mtrr_setup(void)
printk ("mtrr: v%s Richard Gooch (rgooch@atnf.csiro.au)\n", MTRR_VERSION);
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
if (boot_cpu_data.x86 < 6) { /* pre-Athlon CPUs */
get_mtrr = amd_get_mtrr;
set_mtrr_up = amd_set_mtrr_up;
break;
} /* else fall through */
case X86_VENDOR_INTEL:
get_mtrr = intel_get_mtrr;
set_mtrr_up = intel_set_mtrr_up;
......@@ -1669,10 +1721,6 @@ static void __init mtrr_setup(void)
set_mtrr_up = cyrix_set_arr_up;
get_free_region = cyrix_get_free_region;
break;
case X86_VENDOR_AMD:
get_mtrr = amd_get_mtrr;
set_mtrr_up = amd_set_mtrr_up;
break;
case X86_VENDOR_CENTAUR:
get_mtrr = centaur_get_mcr;
set_mtrr_up = centaur_set_mcr_up;
......@@ -1691,6 +1739,8 @@ void __init mtrr_init_boot_cpu(void)
mtrr_setup ();
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
if (boot_cpu_data.x86 < 6) break; /* pre-Athlon CPUs */
case X86_VENDOR_INTEL:
get_mtrr_state (&smp_mtrr_state);
break;
......@@ -1727,6 +1777,9 @@ void __init mtrr_init_secondary_cpu(void)
if ( !(boot_cpu_data.x86_capability & X86_FEATURE_MTRR) ) return;
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
/* Just for robustness: pre-Athlon CPUs cannot do SMP. */
if (boot_cpu_data.x86 < 6) break;
case X86_VENDOR_INTEL:
intel_mtrr_init_secondary_cpu ();
break;
......@@ -1752,6 +1805,8 @@ int __init mtrr_init(void)
# ifdef __SMP__
switch (boot_cpu_data.x86_vendor)
{
case X86_VENDOR_AMD:
if (boot_cpu_data.x86 < 6) break; /* pre-Athlon CPUs */
case X86_VENDOR_INTEL:
finalize_mtrr_state (&smp_mtrr_state);
mtrr_state_warn (smp_changes_mask);
......
......@@ -61,6 +61,7 @@
#include <asm/msr.h>
#include <asm/desc.h>
#include <asm/e820.h>
#include <asm/dma.h>
/*
* Machine setup..
......@@ -401,18 +402,49 @@ void __init add_memory_region(unsigned long start,
void __init setup_memory_region(void)
{
#define E820_DEBUG 0
#ifdef E820_DEBUG
int i;
#endif
/*
* If we're lucky and live on a modern system, the setup code
* will have given us a memory map that we can use to properly
* set up memory. If we aren't, we'll fake a memory map.
*
* We check to see that the memory map contains at least 2 elements
* before we'll use it, because the detection code in setup.S may
* not be perfect and most every PC known to man has two memory
* regions: one from 0 to 640k, and one from 1mb up. (The IBM
* thinkpad 560x, for example, does not cooperate with the memory
* detection code.)
*/
if (E820_MAP_NR) {
if (E820_MAP_NR > 1) {
/* got a memory map; copy it into a safe place.
*/
e820.nr_map = E820_MAP_NR;
if (e820.nr_map > E820MAX)
e820.nr_map = E820MAX;
memcpy(e820.map, E820_MAP, e820.nr_map * sizeof e820.map[0]);
#ifdef E820_DEBUG
for (i=0; i < e820.nr_map; i++) {
printk("e820: %ld @ %08lx ",
(unsigned long)(e820.map[i].size),
(unsigned long)(e820.map[i].addr));
switch (e820.map[i].type) {
case E820_RAM: printk("(usable)\n");
break;
case E820_RESERVED:
printk("(reserved)\n");
break;
case E820_ACPI:
printk("(ACPI data)\n");
break;
default: printk("type %lu\n", e820.map[i].type);
break;
}
}
#endif
}
else {
/* otherwise fake a memory map; one section from 0k->640k,
......@@ -422,8 +454,8 @@ void __init setup_memory_region(void)
mem_size = (ALT_MEM_K < EXT_MEM_K) ? EXT_MEM_K : ALT_MEM_K;
add_memory_region(0, LOWMEMSIZE(), 1);
add_memory_region(HIGH_MEMORY, mem_size << 10, 1);
add_memory_region(0, LOWMEMSIZE(), E820_RAM);
add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
}
} /* setup_memory_region */
......@@ -503,7 +535,7 @@ void __init setup_arch(char **cmdline_p, unsigned long * memory_start_p, unsigne
*/
e820.nr_map = 0;
usermem = 1;
add_memory_region(0, LOWMEMSIZE(), 1);
add_memory_region(0, LOWMEMSIZE(), E820_RAM);
}
mem_size = memparse(from+4, &from);
if (*from == '@')
......@@ -512,7 +544,7 @@ void __init setup_arch(char **cmdline_p, unsigned long * memory_start_p, unsigne
start_at = HIGH_MEMORY;
mem_size -= HIGH_MEMORY;
}
add_memory_region(start_at, mem_size, 1);
add_memory_region(start_at, mem_size, E820_RAM);
}
}
c = *(from++);
......@@ -531,7 +563,7 @@ void __init setup_arch(char **cmdline_p, unsigned long * memory_start_p, unsigne
memory_end = 0;
for (i=0; i < e820.nr_map; i++) {
/* RAM? */
if (e820.map[i].type == 1) {
if (e820.map[i].type == E820_RAM) {
unsigned long end = e820.map[i].addr + e820.map[i].size;
if (end > memory_end)
......@@ -856,6 +888,15 @@ static void __init cyrix_model(struct cpuinfo_x86 *c)
c->x86_model = (dir1 & 0x20) ? 1 : 2;
c->x86_capability&=~X86_FEATURE_TSC;
}
#ifdef CONFIG_PCI
/* It isnt really a PCI quirk directly, but the cure is the
same. The MediaGX has deep magic SMM stuff that handles the
SB emulation. It thows away the fifo on disable_dma() which
is wrong and ruins the audio. */
printk(KERN_INFO "Working around Cyrix MediaGX virtual DMA bug.\n");
isa_dma_bridge_buggy = 1;
#endif
break;
case 5: /* 6x86MX/M II */
......@@ -881,8 +922,8 @@ static void __init cyrix_model(struct cpuinfo_x86 *c)
dir0_msn = 0;
p = Cx486S_name[0];
break;
break;
}
break;
default: /* unknown (shouldn't happen, we know everyone ;-) */
dir0_msn = 7;
......
......@@ -414,25 +414,23 @@ void __init mem_init(unsigned long start_mem, unsigned long end_mem)
for (avail = i = 0; i < e820.nr_map; i++) {
unsigned long addr, end, size;
if (e820.map[i].type != 1) /* not usable memory */
if (e820.map[i].type != E820_RAM) /* not usable memory */
continue;
addr = e820.map[i].addr;
size = e820.map[i].size;
/* Overflow large memory reasonably gracefully */
/* Silently ignore memory regions starting above 4gb */
if (addr != e820.map[i].addr)
continue;
printk("memory region: %luk @ %08lx\n", size >> 10, addr );
/* Make sure we don't get fractional pages */
end = (addr + size) & PAGE_MASK;
addr = PAGE_ALIGN(addr);
if (end <= addr)
continue;
end = PAGE_OFFSET + ((addr + size) & PAGE_MASK);
addr= PAGE_OFFSET + PAGE_ALIGN(addr);
for ( ; addr < end; addr += PAGE_SIZE) {
size = end - addr;
for (addr = addr + PAGE_OFFSET ; size ; addr += PAGE_SIZE, size -= PAGE_SIZE) {
/* this little bit of grossness is for dealing
* with memory borrowing for system bookkeeping
* (smp stacks, zero page, kernel code, etc)
......@@ -446,14 +444,11 @@ void __init mem_init(unsigned long start_mem, unsigned long end_mem)
* in any case, we don't want to hack mem_map
* entries above end_mem.
*/
if ( addr < start_low_mem )
continue;
if ( addr > end_mem )
continue;
if ( addr >= HIGH_MEMORY && addr <= start_mem )
if ( (addr < start_low_mem)
|| (addr >= (HIGH_MEMORY + PAGE_OFFSET)&& addr <= start_mem)
|| (addr > end_mem) )
continue;
avail++;
clear_bit(PG_reserved, &mem_map[MAP_NR(addr)].flags);
}
}
......
......@@ -674,7 +674,7 @@ static inline int tx_take (amb_dev * dev) {
return 0;
} else {
spin_unlock_irqrestore (&dev->lock, flags);
spin_unlock_irqrestore (&txq->lock, flags);
return -1;
}
}
......
This diff is collapsed.
......@@ -84,6 +84,7 @@ struct bttv
struct video_picture picture; /* Current picture params */
struct video_audio audio_dev; /* Current audio params */
struct semaphore lock;
int user;
int capuser;
struct device_open open_data[MAX_OPENS];
......
......@@ -374,13 +374,13 @@ static int i2c_getdataline(struct i2c_bus *bus)
return (btread(ZR36057_I2CBR) >> 1) & 1;
}
void attach_inform(struct i2c_bus *bus, int id)
static void attach_inform(struct i2c_bus *bus, int id)
{
DEBUG(struct zoran *zr = (struct zoran *) bus->data);
DEBUG(printk(BUZ_DEBUG "-%u: i2c attach %02x\n", zr->id, id));
}
void detach_inform(struct i2c_bus *bus, int id)
static void detach_inform(struct i2c_bus *bus, int id)
{
DEBUG(struct zoran *zr = (struct zoran *) bus->data);
DEBUG(printk(BUZ_DEBUG "-%u: i2c detach %02x\n", zr->id, id));
......
This diff is collapsed.
......@@ -79,6 +79,7 @@
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/bitops.h>
#include <asm/semaphore.h>
#define VERSION "1.6.1"
......@@ -1588,8 +1589,8 @@ int __init pcxe_init(void)
ch->blocked_open = 0;
ch->callout_termios = pcxe_callout.init_termios;
ch->normal_termios = pcxe_driver.init_termios;
ch->open_wait = 0;
ch->close_wait = 0;
init_waitqueue_head(ch->open_wait);
init_waitqueue_head(ch->close_wait);
ch->asyncflags = 0;
}
......
......@@ -35,6 +35,7 @@
#include <asm/uaccess.h> /* copy to/from user */
#include <linux/videodev.h> /* kernel radio structs */
#include <linux/config.h> /* CONFIG_RADIO_RTRACK_PORT */
#include <asm/semaphore.h> /* Lock for the I/O */
#ifndef CONFIG_RADIO_RTRACK_PORT
#define CONFIG_RADIO_RTRACK_PORT -1
......@@ -42,6 +43,7 @@
static int io = CONFIG_RADIO_RTRACK_PORT;
static int users = 0;
static struct semaphore lock;
struct rt_device
{
......@@ -86,19 +88,23 @@ static void rt_incvol(void)
static void rt_mute(struct rt_device *dev)
{
dev->muted = 1;
down(&lock);
outb(0xd0, io); /* volume steady, off */
up(&lock);
}
static int rt_setvol(struct rt_device *dev, int vol)
{
int i;
down(&lock);
if(vol == dev->curvol) { /* requested volume = current */
if (dev->muted) { /* user is unmuting the card */
dev->muted = 0;
outb (0xd8, io); /* enable card */
}
up(&lock);
return 0;
}
......@@ -107,6 +113,7 @@ static int rt_setvol(struct rt_device *dev, int vol)
sleep_delay(2000000); /* make sure it's totally down */
outb(0xd0, io); /* volume steady, off */
dev->curvol = 0; /* track the volume state! */
up(&lock);
return 0;
}
......@@ -119,7 +126,7 @@ static int rt_setvol(struct rt_device *dev, int vol)
rt_decvol();
dev->curvol = vol;
up(&lock);
return 0;
}
......@@ -165,6 +172,8 @@ static int rt_setfreq(struct rt_device *dev, unsigned long freq)
freq += 171200; /* Add 10.7 MHz IF */
freq /= 800; /* Convert to 50 kHz units */
down(&lock); /* Stop other ops interfering */
send_0_byte (io, dev); /* 0: LSB of frequency */
......@@ -191,11 +200,13 @@ static int rt_setfreq(struct rt_device *dev, unsigned long freq)
outb (0xd0, io); /* volume steady + sigstr */
else
outb (0xd8, io); /* volume steady + sigstr + on */
up(&lock);
return 0;
}
int rt_getsigstr(struct rt_device *dev)
static int rt_getsigstr(struct rt_device *dev)
{
if (inb(io) & 2) /* bit set = no signal present */
return 0;
......@@ -324,8 +335,14 @@ static struct video_device rtrack_radio=
NULL
};
int __init rtrack_init(struct video_init *v)
static int __init rtrack_init(void)
{
if(io==-1)
{
printk(KERN_ERR "You must set an I/O address with io=0x???\n");
return -EINVAL;
}
if (check_region(io, 2))
{
printk(KERN_ERR "rtrack: port 0x%x already in use\n", io);
......@@ -340,6 +357,10 @@ int __init rtrack_init(struct video_init *v)
request_region(io, 2, "rtrack");
printk(KERN_INFO "AIMSlab Radiotrack/radioreveal card driver.\n");
/* Set up the I/O locking */
init_MUTEX(&lock);
/* mute card - prevents noisy bootups */
/* this ensures that the volume is all the way down */
......@@ -351,8 +372,6 @@ int __init rtrack_init(struct video_init *v)
return 0;
}
#ifdef MODULE
MODULE_AUTHOR("M.Kirkwood");
MODULE_DESCRIPTION("A driver for the RadioTrack/RadioReveal radio card.");
MODULE_PARM(io, "i");
......@@ -360,20 +379,12 @@ MODULE_PARM_DESC(io, "I/O address of the RadioTrack card (0x20f or 0x30f)");
EXPORT_NO_SYMBOLS;
int init_module(void)
{
if(io==-1)
{
printk(KERN_ERR "You must set an I/O address with io=0x???\n");
return -EINVAL;
}
return rtrack_init(NULL);
}
void cleanup_module(void)
static void __exit cleanup_rtrack_module(void)
{
video_unregister_device(&rtrack_radio);
release_region(io,2);
}
#endif
module_init(rtrack_init);
module_exit(cleanup_rtrack_module);
......@@ -42,6 +42,7 @@
static int io = CONFIG_RADIO_AZTECH_PORT;
static int radio_wait_time = 1000;
static int users = 0;
static struct semaphore lock;
struct az_device
{
......@@ -86,7 +87,9 @@ static void send_1_byte (struct az_device *dev)
static int az_setvol(struct az_device *dev, int vol)
{
down(&lock);
outb (volconvert(vol), io);
up(&lock);
return 0;
}
......@@ -119,6 +122,8 @@ static int az_setfreq(struct az_device *dev, unsigned long frequency)
frequency += 171200; /* Add 10.7 MHz IF */
frequency /= 800; /* Convert to 50 kHz units */
down(&lock);
send_0_byte (dev); /* 0: LSB of frequency */
for (i = 0; i < 13; i++) /* : frequency bits (1-13) */
......@@ -146,6 +151,8 @@ static int az_setfreq(struct az_device *dev, unsigned long frequency)
udelay (radio_wait_time);
outb_p(128+64+volconvert(dev->curvol), io);
up(&lock);
return 0;
}
......@@ -279,14 +286,21 @@ static struct video_device aztech_radio=
NULL
};
int __init aztech_init(struct video_init *v)
static int __init aztech_init(void)
{
if(io==-1)
{
printk(KERN_ERR "You must set an I/O address with io=0x???\n");
return -EINVAL;
}
if (check_region(io, 2))
{
printk(KERN_ERR "aztech: port 0x%x already in use\n", io);
return -EBUSY;
}
init_MUTEX(&lock);
aztech_radio.priv=&aztech_unit;
if(video_register_device(&aztech_radio, VFL_TYPE_RADIO)==-1)
......@@ -299,8 +313,6 @@ int __init aztech_init(struct video_init *v)
return 0;
}
#ifdef MODULE
MODULE_AUTHOR("Russell Kroll, Quay Lu, Donald Song, Jason Lewis, Scott McGrath, William McGrath");
MODULE_DESCRIPTION("A driver for the Aztech radio card.");
MODULE_PARM(io, "i");
......@@ -308,20 +320,11 @@ MODULE_PARM_DESC(io, "I/O address of the Aztech card (0x350 or 0x358)");
EXPORT_NO_SYMBOLS;
int init_module(void)
{
if(io==-1)
{
printk(KERN_ERR "You must set an I/O address with io=0x???\n");
return -EINVAL;
}
return aztech_init(NULL);
}
void cleanup_module(void)
static void __exit aztech_cleanup(void)
{
video_unregister_device(&aztech_radio);
release_region(io,2);
}
#endif
module_init(aztech_init);
module_exit(aztech_cleanup);
......@@ -23,6 +23,7 @@
#include <asm/uaccess.h> /* copy to/from user */
#include <linux/videodev.h> /* kernel radio structs */
#include <linux/config.h> /* CONFIG_RADIO_GEMTEK_PORT */
#include <linux/spinlock.h>
#ifndef CONFIG_RADIO_GEMTEK_PORT
#define CONFIG_RADIO_GEMTEK_PORT -1
......@@ -30,6 +31,7 @@
static int io = CONFIG_RADIO_GEMTEK_PORT;
static int users = 0;
static spinlock_t lock;
struct gemtek_device
{
......@@ -48,7 +50,9 @@ static void gemtek_mute(struct gemtek_device *dev)
{
if(dev->muted)
return;
spin_lock(&lock);
outb(0x10, io);
spin_unlock(&lock);
dev->muted = 1;
}
......@@ -56,7 +60,9 @@ static void gemtek_unmute(struct gemtek_device *dev)
{
if(dev->muted == 0)
return;
spin_lock(&lock);
outb(0x20, io);
spin_unlock(&lock);
dev->muted = 0;
}
......@@ -87,6 +93,8 @@ static int gemtek_setfreq(struct gemtek_device *dev, unsigned long freq)
freq *= 7825;
freq /= 100000;
spin_lock(&lock);
/* 2 start bits */
outb_p(0x03, io);
udelay(5);
......@@ -114,13 +122,17 @@ static int gemtek_setfreq(struct gemtek_device *dev, unsigned long freq)
outb_p(0x07, io);
udelay(5);
spin_unlock(&lock);
return 0;
}
int gemtek_getsigstr(struct gemtek_device *dev)
{
spin_lock(&lock);
inb(io);
udelay(5);
spin_unlock(&lock);
if (inb(io) & 8) /* bit set = no signal present */
return 0;
return 1; /* signal present */
......@@ -250,8 +262,14 @@ static struct video_device gemtek_radio=
NULL
};
int __init gemtek_init(struct video_init *v)
static int __init gemtek_init(void)
{
if(io==-1)
{
printk(KERN_ERR "You must set an I/O address with io=0x20c, io=0x30c, io=0x24c or io=0x34c (or io=0x248 for the combined sound/radiocard)\n");
return -EINVAL;
}
if (check_region(io, 4))
{
printk(KERN_ERR "gemtek: port 0x%x already in use\n", io);
......@@ -266,6 +284,7 @@ int __init gemtek_init(struct video_init *v)
request_region(io, 4, "gemtek");
printk(KERN_INFO "GemTek Radio Card driver.\n");
spin_lock_init(&lock);
/* mute card - prevents noisy bootups */
outb(0x10, io);
udelay(5);
......@@ -277,8 +296,6 @@ int __init gemtek_init(struct video_init *v)
return 0;
}
#ifdef MODULE
MODULE_AUTHOR("Jonas Munsin");
MODULE_DESCRIPTION("A driver for the GemTek Radio Card");
MODULE_PARM(io, "i");
......@@ -286,23 +303,14 @@ MODULE_PARM_DESC(io, "I/O address of the GemTek card (0x20c, 0x30c, 0x24c or 0x3
EXPORT_NO_SYMBOLS;
int init_module(void)
{
if(io==-1)
{
printk(KERN_ERR "You must set an I/O address with io=0x20c, io=0x30c, io=0x24c or io=0x34c (or io=0x248 for the combined sound/radiocard)\n");
return -EINVAL;
}
return gemtek_init(NULL);
}
void cleanup_module(void)
static void __exit gemtek_cleanup(void)
{
video_unregister_device(&gemtek_radio);
release_region(io,4);
}
#endif
module_init(gemtek_init);
module_exit(gemtek_cleanup);
/*
Local variables:
......
......@@ -205,7 +205,7 @@ static struct video_device pcm20_radio=
NULL
};
int __init pcm20_init(struct video_init *v)
static int __init pcm20_init(void)
{
pcm20_radio.priv=&pcm20_unit;
......@@ -224,22 +224,16 @@ int __init pcm20_init(struct video_init *v)
return 0;
}
#ifdef MODULE
MODULE_AUTHOR("Ruurd Reitsma");
MODULE_DESCRIPTION("A driver for the Miro PCM20 radio card.");
EXPORT_NO_SYMBOLS;
int init_module(void)
{
return pcm20_init(NULL);
}
void cleanup_module(void)
static void __exit pcm20_cleanup(void)
{
video_unregister_device(&pcm20_radio);
}
#endif
module_init(pcm20_init);
module_exit(pcm20_cleanup);
......@@ -16,6 +16,7 @@
#include <asm/uaccess.h> /* copy to/from user */
#include <linux/videodev.h> /* kernel radio structs */
#include <linux/config.h> /* CONFIG_RADIO_RTRACK2_PORT */
#include <linux/spinlock.h>
#ifndef CONFIG_RADIO_RTRACK2_PORT
#define CONFIG_RADIO_RTRACK2_PORT -1
......@@ -23,6 +24,7 @@
static int io = CONFIG_RADIO_RTRACK2_PORT;
static int users = 0;
static spinlock_t lock;
struct rt_device
{
......@@ -38,7 +40,9 @@ static void rt_mute(struct rt_device *dev)
{
if(dev->muted)
return;
spin_lock(&lock);
outb(1, io);
spin_unlock(&lock);
dev->muted = 1;
}
......@@ -46,7 +50,9 @@ static void rt_unmute(struct rt_device *dev)
{
if(dev->muted == 0)
return;
spin_lock(&lock);
outb(0, io);
spin_unlock(&lock);
dev->muted = 0;
}
......@@ -69,6 +75,8 @@ static int rt_setfreq(struct rt_device *dev, unsigned long freq)
int i;
freq = freq / 200 + 856;
spin_lock(&lock);
outb_p(0xc8, io);
outb_p(0xc9, io);
......@@ -85,11 +93,13 @@ static int rt_setfreq(struct rt_device *dev, unsigned long freq)
outb_p(0xc8, io);
if (!dev->muted)
outb_p(0, io);
outb_p(0, io);
spin_unlock(&lock);
return 0;
}
int rt_getsigstr(struct rt_device *dev)
static int rt_getsigstr(struct rt_device *dev)
{
if (inb(io) & 2) /* bit set = no signal present */
return 0;
......@@ -227,7 +237,8 @@ int __init rtrack2_init(struct video_init *v)
}
rtrack2_radio.priv=&rtrack2_unit;
spin_lock_init(&lock);
if(video_register_device(&rtrack2_radio, VFL_TYPE_RADIO)==-1)
return -EINVAL;
......
......@@ -22,6 +22,7 @@
#include <asm/uaccess.h> /* copy to/from user */
#include <linux/videodev.h> /* kernel radio structs */
#include <linux/config.h> /* CONFIG_RADIO_SF16MI_PORT */
#include <asm/semaphore.h>
struct fmi_device
{
......@@ -37,6 +38,7 @@ struct fmi_device
static int io = CONFIG_RADIO_SF16FMI_PORT;
static int users = 0;
static struct semaphore lock;
/* freq is in 1/16 kHz to internal number, hw precision is 50 kHz */
/* It is only usefull to give freq in intervall of 800 (=0.05Mhz),
......@@ -67,12 +69,16 @@ static void outbits(int bits, unsigned int data, int port)
static inline void fmi_mute(int port)
{
down(&lock);
outb(0x00, port);
up(&lock);
}
static inline void fmi_unmute(int port)
{
down(&lock);
outb(0x08, port);
up(&lock);
}
static inline int fmi_setfreq(struct fmi_device *dev)
......@@ -81,6 +87,8 @@ static inline int fmi_setfreq(struct fmi_device *dev)
unsigned long freq = dev->curfreq;
int i;
down(&lock);
outbits(16, RSF16_ENCODE(freq), myport);
outbits(8, 0xC0, myport);
for(i=0; i< 100; i++)
......@@ -93,6 +101,8 @@ static inline int fmi_setfreq(struct fmi_device *dev)
current->state = TASK_UNINTERRUPTIBLE;
schedule_timeout(HZ/7);
*/
up(&lock);
if (dev->curvol) fmi_unmute(myport);
return 0;
}
......@@ -104,6 +114,7 @@ static inline int fmi_getsigstr(struct fmi_device *dev)
int myport = dev->port;
int i;
down(&lock);
val = dev->curvol ? 0x08 : 0x00; /* unmute/mute */
outb(val, myport);
outb(val | 0x10, myport);
......@@ -119,6 +130,8 @@ static inline int fmi_getsigstr(struct fmi_device *dev)
*/
res = (int)inb(myport+1);
outb(val, myport);
up(&lock);
return (res & 2) ? 0 : 0xFFFF;
}
......@@ -290,6 +303,8 @@ int __init fmi_init(struct video_init *v)
fmi_unit.flags = VIDEO_TUNER_LOW;
fmi_radio.priv = &fmi_unit;
init_MUTEX(&lock);
if(video_register_device(&fmi_radio, VFL_TYPE_RADIO)==-1)
return -EINVAL;
......
......@@ -31,6 +31,7 @@
#include <asm/uaccess.h> /* copy to/from user */
#include <linux/videodev.h> /* kernel radio structs */
#include <linux/config.h> /* CONFIG_RADIO_TERRATEC_PORT */
#include <linux/spinlock.h>
#ifndef CONFIG_RADIO_TERRATEC_PORT
#define CONFIG_RADIO_TERRATEC_PORT 0x590
......@@ -50,6 +51,7 @@
static int io = CONFIG_RADIO_TERRATEC_PORT;
static int users = 0;
static spinlock_t lock;
struct tt_device
{
......@@ -66,12 +68,14 @@ static void cardWriteVol(int volume)
{
int i;
volume = volume+(volume * 32); // change both channels
spin_lock(&lock);
for (i=0;i<8;i++)
{
if (volume & (0x80>>i))
outb(0x80, VOLPORT);
else outb(0x00, VOLPORT);
}
spin_unlock(&lock);
}
......@@ -148,6 +152,8 @@ static int tt_setfreq(struct tt_device *dev, unsigned long freq1)
temp = temp/2;
}
spin_lock(&lock);
for (i=24;i>-1;i--) /* bit shift the values to the radiocard */
{
if (buffer[i]==1)
......@@ -163,6 +169,8 @@ static int tt_setfreq(struct tt_device *dev, unsigned long freq1)
}
}
outb(0x00, BASEPORT);
spin_unlock(&lock);
return 0;
}
......@@ -309,6 +317,8 @@ int __init terratec_init(struct video_init *v)
terratec_radio.priv=&terratec_unit;
spin_lock_init(&lock);
if(video_register_device(&terratec_radio, VFL_TYPE_RADIO)==-1)
return -EINVAL;
......
/* radio-trust.c - Trust FM Radio card driver for Linux 2.2
* by Eric Lammerts <eric@scintilla.utwente.nl>
*
* Based on radio-aztech.c. Original notes:
*
* Adapted to support the Video for Linux API by
* Russell Kroll <rkroll@exploits.org>. Based on original tuner code by:
*
* Quay Ly
* Donald Song
* Jason Lewis (jlewis@twilight.vtc.vsc.edu)
* Scott McGrath (smcgrath@twilight.vtc.vsc.edu)
* William McGrath (wmcgrath@twilight.vtc.vsc.edu)
*
* The basis for this code may be found at http://bigbang.vtc.vsc.edu/fmradio/
*/
#include <stdarg.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <linux/videodev.h>
#include <linux/config.h> /* CONFIG_RADIO_TRUST_PORT */
/* acceptable ports: 0x350 (JP3 shorted), 0x358 (JP3 open) */
#ifndef CONFIG_RADIO_TRUST_PORT
#define CONFIG_RADIO_TRUST_PORT -1
#endif
static int io = CONFIG_RADIO_TRUST_PORT;
static int ioval = 0xf;
static int users = 0;
static __u16 curvol;
static __u16 curbass;
static __u16 curtreble;
static unsigned long curfreq;
static int curstereo;
static int curmute;
/* i2c addresses */
#define TDA7318_ADDR 0x88
#define TSA6060T_ADDR 0xc4
#define TR_DELAY do { inb(io); inb(io); inb(io); } while(0)
#define TR_SET_SCL outb(ioval |= 2, io)
#define TR_CLR_SCL outb(ioval &= 0xfd, io)
#define TR_SET_SDA outb(ioval |= 1, io)
#define TR_CLR_SDA outb(ioval &= 0xfe, io)
static void write_i2c(int n, ...)
{
unsigned char val, mask;
va_list args;
va_start(args, n);
/* start condition */
TR_SET_SDA;
TR_SET_SCL;
TR_DELAY;
TR_CLR_SDA;
TR_CLR_SCL;
TR_DELAY;
for(; n; n--) {
val = va_arg(args, unsigned);
for(mask = 0x80; mask; mask >>= 1) {
if(val & mask)
TR_SET_SDA;
else
TR_CLR_SDA;
TR_SET_SCL;
TR_DELAY;
TR_CLR_SCL;
TR_DELAY;
}
/* acknowledge bit */
TR_SET_SDA;
TR_SET_SCL;
TR_DELAY;
TR_CLR_SCL;
TR_DELAY;
}
/* stop condition */
TR_CLR_SDA;
TR_DELAY;
TR_SET_SCL;
TR_DELAY;
TR_SET_SDA;
TR_DELAY;
va_end(args);
}
static void tr_setvol(__u16 vol)
{
curvol = vol / 2048;
write_i2c(2, TDA7318_ADDR, curvol ^ 0x1f);
}
static int basstreble2chip[15] = {
0, 1, 2, 3, 4, 5, 6, 7, 14, 13, 12, 11, 10, 9, 8
};
static void tr_setbass(__u16 bass)
{
curbass = bass / 4370;
write_i2c(2, TDA7318_ADDR, 0x60 | basstreble2chip[curbass]);
}
static void tr_settreble(__u16 treble)
{
curtreble = treble / 4370;
write_i2c(2, TDA7318_ADDR, 0x70 | basstreble2chip[curtreble]);
}
static void tr_setstereo(int stereo)
{
curstereo = !!stereo;
ioval = (ioval & 0xfb) | (!curstereo << 2);
outb(ioval, io);
}
static void tr_setmute(int mute)
{
curmute = !!mute;
ioval = (ioval & 0xf7) | (curmute << 3);
outb(ioval, io);
}
static int tr_getsigstr(void)
{
int i, v;
for(i = 0, v = 0; i < 100; i++) v |= inb(io);
return (v & 1)? 0 : 0xffff;
}
static int tr_getstereo(void)
{
/* don't know how to determine it, just return the setting */
return curstereo;
}
static void tr_setfreq(unsigned long f)
{
f /= 160; /* Convert to 10 kHz units */
f += 1070; /* Add 10.7 MHz IF */
write_i2c(5, TSA6060T_ADDR, (f << 1) | 1, f >> 7, 0x60 | ((f >> 15) & 1), 0);
}
static int tr_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
{
switch(cmd)
{
case VIDIOCGCAP:
{
struct video_capability v;
v.type=VID_TYPE_TUNER;
v.channels=1;
v.audios=1;
/* No we don't do pictures */
v.maxwidth=0;
v.maxheight=0;
v.minwidth=0;
v.minheight=0;
strcpy(v.name, "Trust FM Radio");
if(copy_to_user(arg,&v,sizeof(v)))
return -EFAULT;
return 0;
}
case VIDIOCGTUNER:
{
struct video_tuner v;
if(copy_from_user(&v, arg,sizeof(v))!=0)
return -EFAULT;
if(v.tuner) /* Only 1 tuner */
return -EINVAL;
v.rangelow = 87500 * 16;
v.rangehigh = 108000 * 16;
v.flags = VIDEO_TUNER_LOW;
v.mode = VIDEO_MODE_AUTO;
v.signal = tr_getsigstr();
if(tr_getstereo())
v.flags |= VIDEO_TUNER_STEREO_ON;
strcpy(v.name, "FM");
if(copy_to_user(arg,&v, sizeof(v)))
return -EFAULT;
return 0;
}
case VIDIOCSTUNER:
{
struct video_tuner v;
if(copy_from_user(&v, arg, sizeof(v)))
return -EFAULT;
if(v.tuner != 0)
return -EINVAL;
return 0;
}
case VIDIOCGFREQ:
if(copy_to_user(arg, &curfreq, sizeof(curfreq)))
return -EFAULT;
return 0;
case VIDIOCSFREQ:
{
unsigned long f;
if(copy_from_user(&f, arg, sizeof(curfreq)))
return -EFAULT;
tr_setfreq(f);
return 0;
}
case VIDIOCGAUDIO:
{
struct video_audio v;
memset(&v,0, sizeof(v));
v.flags = VIDEO_AUDIO_MUTABLE | VIDEO_AUDIO_VOLUME |
VIDEO_AUDIO_BASS | VIDEO_AUDIO_TREBLE;
v.mode = curstereo? VIDEO_SOUND_STEREO : VIDEO_SOUND_MONO;
v.volume = curvol * 2048;
v.step = 2048;
v.bass = curbass * 4370;
v.treble = curtreble * 4370;
strcpy(v.name, "Trust FM Radio");
if(copy_to_user(arg,&v, sizeof(v)))
return -EFAULT;
return 0;
}
case VIDIOCSAUDIO:
{
struct video_audio v;
if(copy_from_user(&v, arg, sizeof(v)))
return -EFAULT;
if(v.audio)
return -EINVAL;
tr_setvol(v.volume);
tr_setbass(v.bass);
tr_settreble(v.treble);
tr_setstereo(v.mode & VIDEO_SOUND_STEREO);
tr_setmute(v.flags & VIDEO_AUDIO_MUTE);
return 0;
}
default:
return -ENOIOCTLCMD;
}
}
static int tr_open(struct video_device *dev, int flags)
{
if(users)
return -EBUSY;
users++;
MOD_INC_USE_COUNT;
return 0;
}
static void tr_close(struct video_device *dev)
{
users--;
MOD_DEC_USE_COUNT;
}
static struct video_device trust_radio=
{
"Trust FM Radio",
VID_TYPE_TUNER,
VID_HARDWARE_TRUST,
tr_open,
tr_close,
NULL, /* Can't read (no capture ability) */
NULL, /* Can't write */
NULL, /* No poll */
tr_ioctl,
NULL,
NULL
};
static int __init trust_init(void)
{
if(io == -1) {
printk(KERN_ERR "You must set an I/O address with io=0x???\n");
return -EINVAL;
}
if(check_region(io, 2)) {
printk(KERN_ERR "trust: port 0x%x already in use\n", io);
return -EBUSY;
}
if(video_register_device(&trust_radio, VFL_TYPE_RADIO)==-1)
return -EINVAL;
request_region(io, 2, "Trust FM Radio");
printk(KERN_INFO "Trust FM Radio card driver v1.0.\n");
write_i2c(2, TDA7318_ADDR, 0x80); /* speaker att. LF = 0 dB */
write_i2c(2, TDA7318_ADDR, 0xa0); /* speaker att. RF = 0 dB */
write_i2c(2, TDA7318_ADDR, 0xc0); /* speaker att. LR = 0 dB */
write_i2c(2, TDA7318_ADDR, 0xe0); /* speaker att. RR = 0 dB */
write_i2c(2, TDA7318_ADDR, 0x40); /* stereo 1 input, gain = 18.75 dB */
tr_setvol(0x8000);
tr_setbass(0x8000);
tr_settreble(0x8000);
tr_setstereo(1);
/* mute card - prevents noisy bootups */
tr_setmute(1);
return 0;
}
#ifdef MODULE
MODULE_AUTHOR("Eric Lammerts, Russell Kroll, Quay Lu, Donald Song, Jason Lewis, Scott McGrath, William McGrath");
MODULE_DESCRIPTION("A driver for the Trust FM Radio card.");
MODULE_PARM(io, "i");
MODULE_PARM_DESC(io, "I/O address of the Trust FM Radio card (0x350 or 0x358)");
EXPORT_NO_SYMBOLS;
#endif /* MODULE */
static void __exit cleanup_trust_module(void)
{
video_unregister_device(&trust_radio);
release_region(io, 2);
}
module_init(trust_init);
module_exit(cleanup_trust_module);
This diff is collapsed.
/*
* random.c -- A strong random number generator
*
* Version 1.88, last modified 30-Aug-99
* Version 1.89, last modified 19-Sep-99
*
* Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999. All
* rights reserved.
......@@ -1329,8 +1329,14 @@ static ssize_t extract_entropy(struct entropy_store *r, void * buf,
*/
void get_random_bytes(void *buf, int nbytes)
{
extract_entropy(sec_random_state, (char *) buf, nbytes,
EXTRACT_ENTROPY_SECONDARY);
if (sec_random_state)
extract_entropy(sec_random_state, (char *) buf, nbytes,
EXTRACT_ENTROPY_SECONDARY);
else if (random_state)
extract_entropy(random_state, (char *) buf, nbytes, 0);
else
printk(KERN_NOTICE "get_random_bytes called before "
"random driver initialization\n");
}
/*********************************************************************
......@@ -2012,7 +2018,7 @@ __u32 secure_tcp_sequence_number(__u32 saddr, __u32 daddr,
if (!rekey_time || (tv.tv_sec - rekey_time) > REKEY_INTERVAL) {
rekey_time = tv.tv_sec;
/* First three words are overwritten below. */
get_random_bytes(&secret+3, sizeof(secret)-12);
get_random_bytes(&secret[3], sizeof(secret)-12);
count = (tv.tv_sec/REKEY_INTERVAL) << HASH_BITS;
}
......
......@@ -79,9 +79,9 @@ static const int disp_modes[8][3] =
#define PAGE_WAIT 30 /* Time in jiffies between requesting page and */
#define PAGE_WAIT (300*HZ/1000) /* Time between requesting page and */
/* checking status bits */
#define PGBUF_EXPIRE 1500 /* Time in jiffies to wait before retransmitting */
#define PGBUF_EXPIRE (15*HZ) /* Time to wait before retransmitting */
/* page regardless of infobits */
typedef struct {
u8 pgbuf[VTX_VIRTUALSIZE]; /* Page-buffer */
......@@ -107,9 +107,9 @@ struct saa5249_device
#define CCTWR 34 /* IC write/read-address of vtx-chip */
#define CCTRD 35
#define NOACK_REPEAT 10 /* Retry access this many times on failure */
#define CLEAR_DELAY 5 /* Time in jiffies required to clear a page */
#define I2C_TIMEOUT 300 /* open/close/SDA-check timeout in jiffies */
#define READY_TIMEOUT 3 /* Time in jiffies to wait for ready signal of IC-bus interface */
#define CLEAR_DELAY (HZ/20) /* Time required to clear a page */
#define I2C_TIMEOUT (3*HZ) /* open/close/SDA-check timeout */
#define READY_TIMEOUT (30*HZ/1000) /* Time to wait for ready signal of IC-bus interface */
#define INIT_DELAY 500 /* Time in usec to wait at initialization of CEA interface */
#define START_DELAY 10 /* Time in usec to wait before starting write-cycle (CEA) */
......
This diff is collapsed.
......@@ -3295,7 +3295,7 @@ int dfx_xmt_queue_pkt(
* wide.
*/
p_xmt_descr->long_0 = (u32) (PI_XMT_DESCR_M_SOP | PI_XMT_DESCR_M_EOP | ((skb->len + 3) << PI_XMT_DESCR_V_SEG_LEN));
p_xmt_descr->long_0 = (u32) (PI_XMT_DESCR_M_SOP | PI_XMT_DESCR_M_EOP | ((skb->len) << PI_XMT_DESCR_V_SEG_LEN));
p_xmt_descr->long_1 = (u32) virt_to_bus(skb->data);
/*
......
......@@ -75,7 +75,7 @@ extern inline void mem_on(short port, volatile char *mem_base,
{
/* This is a little weird: set the shared memory window by doing a
read. The low address bits specify the starting page. */
mem_base[start_page];
readb(mem_base+start_page);
inb(port + E21_MEM_ENABLE);
outb(E21_MEM_ON, port + E21_MEM_ENABLE + E21_MEM_ON);
}
......
......@@ -15,12 +15,12 @@ dep_tristate 'SMC IrCC' CONFIG_SMC_IRCC_FIR $CONFIG_IRDA
comment 'Dongle support'
bool 'Serial dongle support' CONFIG_DONGLE
if [ "$CONFIG_DONGLE" != "n" ]; then
dep_tristate ' ESI JetEye PC dongle' CONFIG_ESI_DONGLE $CONFIG_IRDA
dep_tristate ' ACTiSYS IR-220L and IR220L+ dongle' CONFIG_ACTISYS_DONGLE $CONFIG_IRDA
dep_tristate ' Tekram IrMate 210B dongle' CONFIG_TEKRAM_DONGLE $CONFIG_IRDA
dep_tristate ' Greenwich GIrBIL dongle' CONFIG_GIRBIL_DONGLE $CONFIG_IRDA
dep_tristate ' Parallax LiteLink dongle' CONFIG_LITELINK_DONGLE $CONFIG_IRDA
dep_tristate ' Adaptec Airport 1000/2000 dongle' CONFIG_AIRPORT_DONGLE $CONFIG_IRDA
dep_tristate ' ESI JetEye PC dongle' CONFIG_ESI_DONGLE $CONFIG_IRDA
dep_tristate ' ACTiSYS IR-220L and IR220L+ dongle' CONFIG_ACTISYS_DONGLE $CONFIG_IRDA
dep_tristate ' Tekram IrMate 210B dongle' CONFIG_TEKRAM_DONGLE $CONFIG_IRDA
dep_tristate ' Greenwich GIrBIL dongle' CONFIG_GIRBIL_DONGLE $CONFIG_IRDA
dep_tristate ' Parallax LiteLink dongle' CONFIG_LITELINK_DONGLE $CONFIG_IRDA
dep_tristate ' Adaptec Airport 1000/2000 dongle' CONFIG_AIRPORT_DONGLE $CONFIG_IRDA
fi
endmenu
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.
......@@ -90,6 +90,7 @@ static struct dentry *proc_lookupfd(struct inode * dir, struct dentry * dentry)
fd = 0;
len = dentry->d_name.len;
name = dentry->d_name.name;
if (len > 1 && *name == '0') goto out;
while (len-- > 0) {
c = *name - '0';
name++;
......
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