Commit afcf71d6 authored by Linus Torvalds's avatar Linus Torvalds

Import pre2.0.6

parent 37147b87
...@@ -434,6 +434,15 @@ N: Philip Gladstone ...@@ -434,6 +434,15 @@ N: Philip Gladstone
E: philipg@onsett.com E: philipg@onsett.com
D: Kernel / timekeeping stuff D: Kernel / timekeeping stuff
N: Michael A. Griffith
E: grif@cs.ucr.edu
W: http://www.cs.ucr.edu/~grif
D: Loopback speedup, qlogic scsi hacking, VT_LOCKSWITCH
S: Department of Computer Science
S: University of California, Riverside
S: Riverside, CA 92521-0304
S: USA
N: Dmitry S. Gorodchanin N: Dmitry S. Gorodchanin
E: begemot@bgm.rosprint.net E: begemot@bgm.rosprint.net
D: RISCom/8 driver, misc kernel fixes. D: RISCom/8 driver, misc kernel fixes.
...@@ -1270,8 +1279,10 @@ S: USA ...@@ -1270,8 +1279,10 @@ S: USA
N: Stephen Tweedie N: Stephen Tweedie
E: sct@dcs.ed.ac.uk E: sct@dcs.ed.ac.uk
P: 1024/E7A417AD E2 FE A4 20 34 EC ED FC 7D 7E 67 8D E0 31 D1 69
D: Second extended file system developer D: Second extended file system developer
D: General filesystem hacker D: General filesystem hacker
D: kswap vm management code
S: Dept. of Computer Science S: Dept. of Computer Science
S: University of Edinburgh S: University of Edinburgh
S: JCMB, The King's Buildings S: JCMB, The King's Buildings
...@@ -1350,6 +1361,13 @@ S: Roger Maris Cancer Center ...@@ -1350,6 +1361,13 @@ S: Roger Maris Cancer Center
S: 820 4th St. N. S: 820 4th St. N.
S: Fargo, ND 58122 S: Fargo, ND 58122
N: Hans-Joachim Widmaier
E: jbhr@sofal.tynet.sub.org
D: AFFS rewrite
S: Eichenweg 16
S: 73650 Winterbach
S: Germany
N: Marco van Wieringen N: Marco van Wieringen
E: mvw@mercury.mcs.nl.mugnet.org E: mvw@mercury.mcs.nl.mugnet.org
D: Author of acct and quota D: Author of acct and quota
......
...@@ -324,8 +324,8 @@ throughout 1.3.x. A warning will be printed in 2.0.x when the old ...@@ -324,8 +324,8 @@ throughout 1.3.x. A warning will be printed in 2.0.x when the old
numbers are used, and their use will be discontinued entirely in 2.1.x numbers are used, and their use will be discontinued entirely in 2.1.x
In order to avoid trouble, you need to recompile any programs that In order to avoid trouble, you need to recompile any programs that
emit floppy ioctls. These include mtools and fdutils. You can get emit floppy ioctls. These include mtools, fdutils and dosemu. You can
mtools at: get mtools at:
ftp://ftp.imag.fr/pub/Linux/ZLIBC/mtools/mtools-3.0.src.tar.gz ftp://ftp.imag.fr/pub/Linux/ZLIBC/mtools/mtools-3.0.src.tar.gz
ftp://sunsite.unc.edu/pub/Linux/utils/disk-management/mtools-3.0.src.tar.gz ftp://sunsite.unc.edu/pub/Linux/utils/disk-management/mtools-3.0.src.tar.gz
...@@ -337,6 +337,8 @@ ftp://ftp.imag.fr/pub/Linux/ZLIBC/fdutils/fdutils-4.3.src.tar.gz ...@@ -337,6 +337,8 @@ ftp://ftp.imag.fr/pub/Linux/ZLIBC/fdutils/fdutils-4.3.src.tar.gz
ftp://sunsite.unc.edu/pub/Linux/system/Misc/fdutils-4.3.src.tar.gz ftp://sunsite.unc.edu/pub/Linux/system/Misc/fdutils-4.3.src.tar.gz
ftp://tsx-11.mit.edu/pub/linux/sources/sbin/fdutils-4.3.src.tar.gz ftp://tsx-11.mit.edu/pub/linux/sources/sbin/fdutils-4.3.src.tar.gz
For dosemu, see above.
In the future, the ioctl used by fdformat might be discontinued In the future, the ioctl used by fdformat might be discontinued
altogether. Please use superformat (included in fdutils) instead. altogether. Please use superformat (included in fdutils) instead.
......
This diff is collapsed.
$Id: README.aztcd,v 2.30 1996/04/26 05:32:23 root Exp root $ $Id: README.aztcd,v 2.50 1996/05/16 18:31:22 root Exp root $
Readme-File /usr/src/Documentation/cdrom/aztcd Readme-File /usr/src/Documentation/cdrom/aztcd
for for
AZTECH CD-ROM CDA268-01A, ORCHID CD-3110, AZTECH CD-ROM CDA268-01A, ORCHID CD-3110,
OKANO/WEARNES CDD110, CONRAD TXC, CyCDROM CR520, CR540 OKANO/WEARNES CDD110, CONRAD TXC, CyCDROM CR520, CR540
CD-ROM Drives CD-ROM Drives
Version 2.3 and newer Version 2.5 and newer
(for other drives see 6.-8.) (for other drives see 6.-8.)
NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE
......
...@@ -77,7 +77,7 @@ let the juke box work on even if a disk has fallen upon the floor and ...@@ -77,7 +77,7 @@ let the juke box work on even if a disk has fallen upon the floor and
the drive door has closed without having a disk inside; without any the drive door has closed without having a disk inside; without any
new software layer or any structures which are not already present in new software layer or any structures which are not already present in
\cdromh. This `other' group of \linux\ \cdrom\ driver writers \cdromh. This `other' group of \linux\ \cdrom\ driver writers
explicitely does {\em not\/} support the idea to define an additional explicitly does {\em not\/} support the idea to define an additional
software layer between driver and user program. software layer between driver and user program.
The following text reflects the opinion of the first mentioned \linux\ The following text reflects the opinion of the first mentioned \linux\
......
IDE-CD driver documentation IDE-CD driver documentation
10 May 1996 19 May 1996
scott snyder <snyder@fnald0.fnal.gov> scott snyder <snyder@fnald0.fnal.gov>
1. Introduction 1. Introduction
...@@ -45,7 +45,7 @@ This driver provides the following features: ...@@ -45,7 +45,7 @@ This driver provides the following features:
--------------- ---------------
0. The ide-cd relies on the ide disk driver. See 0. The ide-cd relies on the ide disk driver. See
drivers/block/README.ide for up-to-date information on the ide Documentation/ide.txt for up-to-date information on the ide
driver. driver.
1. Make sure that the ide and ide-cd drivers are compiled into the 1. Make sure that the ide and ide-cd drivers are compiled into the
...@@ -61,7 +61,7 @@ This driver provides the following features: ...@@ -61,7 +61,7 @@ This driver provides the following features:
Depending on what type of IDE interface you have, you may need to Depending on what type of IDE interface you have, you may need to
specify additional configuration options. See specify additional configuration options. See
drivers/block/README.ide. Documentation/ide.txt.
2. You should also ensure that the iso9660 filesystem is either 2. You should also ensure that the iso9660 filesystem is either
compiled into the kernel or available as a loadable module. You compiled into the kernel or available as a loadable module. You
...@@ -81,7 +81,7 @@ This driver provides the following features: ...@@ -81,7 +81,7 @@ This driver provides the following features:
on the primary IDE interface are called `hda' and `hdb', on the primary IDE interface are called `hda' and `hdb',
respectively. The drives on the secondary interface are called respectively. The drives on the secondary interface are called
`hdc' and `hdd'. (Interfaces at other locations get other letters `hdc' and `hdd'. (Interfaces at other locations get other letters
in the third position; see drivers/block/README.ide.) in the third position; see Documentation/ide.txt.)
If you want your cdrom drive to be found automatically by the If you want your cdrom drive to be found automatically by the
driver, you should make sure your IDE interface uses either the driver, you should make sure your IDE interface uses either the
...@@ -90,7 +90,7 @@ This driver provides the following features: ...@@ -90,7 +90,7 @@ This driver provides the following features:
be jumpered as `master'. (If for some reason you cannot configure be jumpered as `master'. (If for some reason you cannot configure
your system in this manner, you can probably still use the driver. your system in this manner, you can probably still use the driver.
You may have to pass extra configuration information to the kernel You may have to pass extra configuration information to the kernel
when you boot, however. See drivers/block/README.ide for more when you boot, however. See Documentation/ide.txt for more
information.) information.)
4. Boot the system. If the drive is recognized, you should see a 4. Boot the system. If the drive is recognized, you should see a
...@@ -194,7 +194,7 @@ TEST ...@@ -194,7 +194,7 @@ TEST
This section discusses some common problems encountered when trying to This section discusses some common problems encountered when trying to
use the driver, and some possible solutions. Note that if you are use the driver, and some possible solutions. Note that if you are
experiencing problems, you should probably also review experiencing problems, you should probably also review
drivers/block/README.ide for current information about the underlying Documentation/ide.txt for current information about the underlying
IDE support code. Some of these items apply only to earlier versions IDE support code. Some of these items apply only to earlier versions
of the driver, but are mentioned here for completeness. of the driver, but are mentioned here for completeness.
...@@ -204,7 +204,7 @@ from the driver. ...@@ -204,7 +204,7 @@ from the driver.
a. Drive is not detected during booting. a. Drive is not detected during booting.
- Review the configuration instructions above and in - Review the configuration instructions above and in
drivers/block/README.ide, and check how your hardware is Documentation/ide.txt, and check how your hardware is
configured. configured.
- If your drive is the only device on an IDE interface, it should - If your drive is the only device on an IDE interface, it should
...@@ -212,7 +212,7 @@ a. Drive is not detected during booting. ...@@ -212,7 +212,7 @@ a. Drive is not detected during booting.
- If your IDE interface is not at the standard addresses of 0x170 - If your IDE interface is not at the standard addresses of 0x170
or 0x1f0, you'll need to explicitly inform the driver using a or 0x1f0, you'll need to explicitly inform the driver using a
lilo option. See drivers/block/README.ide. (This feature was lilo option. See Documentation/ide.txt. (This feature was
added around kernel version 1.3.30.) added around kernel version 1.3.30.)
- If the autoprobing is not finding your drive, you can tell the - If the autoprobing is not finding your drive, you can tell the
...@@ -238,7 +238,7 @@ a. Drive is not detected during booting. ...@@ -238,7 +238,7 @@ a. Drive is not detected during booting.
Support for some interfaces needing extra initialization is Support for some interfaces needing extra initialization is
provided in later 1.3.x kernels. You may need to turn on provided in later 1.3.x kernels. You may need to turn on
additional kernel configuration options to get them to work; additional kernel configuration options to get them to work;
see drivers/block/README.ide. see Documentation/ide.txt.
Even if support is not available for your interface, you may be Even if support is not available for your interface, you may be
able to get it to work with the following procedure. First boot able to get it to work with the following procedure. First boot
...@@ -283,7 +283,7 @@ c. System hangups. ...@@ -283,7 +283,7 @@ c. System hangups.
be worked around by specifying the `serialize' option when be worked around by specifying the `serialize' option when
booting. Recent kernels should be able to detect the need for booting. Recent kernels should be able to detect the need for
this automatically in most cases, but the detection is not this automatically in most cases, but the detection is not
foolproof. See drivers/block/README.ide for more information foolproof. See Documentation/ide.txt for more information
about the `serialize' option and the CMD640B. about the `serialize' option and the CMD640B.
- Note that many MS-DOS cdrom drivers will work with such buggy - Note that many MS-DOS cdrom drivers will work with such buggy
...@@ -319,7 +319,7 @@ d. Can't mount a cdrom. ...@@ -319,7 +319,7 @@ d. Can't mount a cdrom.
Some early Slackware releases had these defined incorrectly. If Some early Slackware releases had these defined incorrectly. If
these are wrong, you can remake them by running the script these are wrong, you can remake them by running the script
drivers/block/MAKEDEV.ide. (You may have to make it executable scripts/MAKEDEV.ide. (You may have to make it executable
with chmod first.) with chmod first.)
If you have a /dev/cdrom symbolic link, check that it is pointing If you have a /dev/cdrom symbolic link, check that it is pointing
......
...@@ -6,14 +6,12 @@ currently knows 6 different filesystems: ...@@ -6,14 +6,12 @@ currently knows 6 different filesystems:
DOS\0 The old or original filesystem, not really suited for DOS\0 The old or original filesystem, not really suited for
hard disks and normally not used on them, either. hard disks and normally not used on them, either.
Not supported.
DOS\1 The original Fast File System. Supported. DOS\1 The original Fast File System. Supported.
DOS\2 The old "international" filesystem. International means that DOS\2 The old "international" filesystem. International means that
a bug has been fixed so that accented ("international") letters a bug has been fixed so that accented ("international") letters
in file names are case-insensitive, as they ought to be. in file names are case-insensitive, as they ought to be.
Not supported.
DOS\3 The "international" Fast File System. Supported. DOS\3 The "international" Fast File System. Supported.
...@@ -29,7 +27,10 @@ Supported block sizes are: 512, 1024, 2048 and 4096 bytes. Larger blocks ...@@ -29,7 +27,10 @@ Supported block sizes are: 512, 1024, 2048 and 4096 bytes. Larger blocks
speed up almost everything with the expense of wasted disk space. The speed speed up almost everything with the expense of wasted disk space. The speed
gain above 4K seems not really worth the price, so you don't lose too gain above 4K seems not really worth the price, so you don't lose too
much here, either. much here, either.
The muFS (multi user File System) equivalents of the above file systems
are supported, too.
Mount options for the AFFS Mount options for the AFFS
========================== ==========================
...@@ -68,6 +69,9 @@ bs=blksize Sets the blocksize to blksize. Valid block sizes are 512, ...@@ -68,6 +69,9 @@ bs=blksize Sets the blocksize to blksize. Valid block sizes are 512,
quiet The file system will not return an error for disallowed quiet The file system will not return an error for disallowed
mode changes. mode changes.
verbose The volume name, file system type and block size will
be written to the syslog.
Handling of the Users/Groups and protection flags Handling of the Users/Groups and protection flags
================================================= =================================================
...@@ -104,22 +108,47 @@ The Linux rwxrwxrwx file mode is handled as follows: ...@@ -104,22 +108,47 @@ The Linux rwxrwxrwx file mode is handled as follows:
Newly created files and directories will get the user and group id Newly created files and directories will get the user and group id
of the current user and a mode according to the umask. of the current user and a mode according to the umask.
Linux can read, but not write, Amiga FFS partitions.
Mount options are
size has the size in 512 byte blocks of the mounted medium.
Case is significant in filename matching, different to real AFFS.
Command line example Command line example
====================
mount Archive/Amiga/Workbench3.1.adf /mnt -t affs -o loop,size=1760 mount Archive/Amiga/Workbench3.1.adf /mnt -t affs -o loop,size=1760
mount /dev/sda3 /Amiga -t affs mount /dev/sda3 /Amiga -t affs
/etc/fstab example /etc/fstab example
/dev/sdb5 /d/f affs ro /dev/sdb5 /d/f affs ro
This file system will probably be writeable in future releases. Bugs, Restrictions, Caveats
===========================
Quite a few things may not work as advertised. Not everything is
tested, though several hundred MB have been read and written using
this fs.
Filenames are truncated to 30 characters without warning.
Currently there are no checks against invalid characters (':')
in filenames.
Case is ignored by the affs in filename matching, but Linux shells
do care about the case. Example (with /mnt being an affs mounted fs):
rm /mnt/WRONGCASE
will remove /mnt/wrongcase, but
rm /mnt/WR*
will not since the names are matched by the shell.
The block allocation is designed for hard disk partitions. If more
than 1 process writes to a (small) diskette, the blocks are allocated
in an ugly way (but the real AFFS doesn't do much better). This
is also true when space gets tight.
The bitmap valid flag in the root block may not be accurate when the
system crashes while an affs partition is mounted. There's currently
no way to fix this without an Amiga (disk validator) or manually
(who would do this?). Maybe later.
A fsck.affs and mkfs.affs will probably be available in the future.
Until then, you should do
ln -s /bin/true /etc/fs/mkfs.affs
It's not possible to read floppy disks with a normal PC or workstation It's not possible to read floppy disks with a normal PC or workstation
due to an incompatibility to the Amiga floppy controller. due to an incompatibility to the Amiga floppy controller.
......
$Id: INTERFACE,v 1.2 1996/05/18 15:58:53 fritz Exp $
Description of the Interface between Linklevel and Hardwarelevel Description of the Interface between Linklevel and Hardwarelevel
of isdn4linux: of isdn4linux:
...@@ -12,9 +13,29 @@ Description of the Interface between Linklevel and Hardwarelevel ...@@ -12,9 +13,29 @@ Description of the Interface between Linklevel and Hardwarelevel
the fields. All further communication is done via callbacks using the fields. All further communication is done via callbacks using
the function-pointers defined in isdn_if. the function-pointers defined in isdn_if.
ATTENTION, CHANGES since version 0.6 are marked with "***CHANGE0.6"! Changes/Version numbering:
ATTENTION, CHANGES since version 0.7 are marked with "***CHANGE0.7"!
ATTENTION, CHANGES since version 0.71 are marked with "***CHANGE0.7.1"! During development of the ISDN subsystem, several changes have been
made to the interface. Before it went into kernel, the package
had a unique version number. The last version, distributed separately
was 0.7.4. When the subsystem went into kernel, every functional unit
got a separate version number. These numbers are shown at initialization,
separated by slashes:
c.c/t.t/n.n/p.p/a.a
where
c.c is the revision of the common code.
t.t is the revision of the tty related code.
n.n is the revision of the network related code.
p.p is the revision of the ppp related code.
a.a is the revision of the audio related code.
Changes in this document are marked with '***CHANGEx' where x representing
the version number. If that number starts with 0, it refers to the old,
separately distributed package. If it starts with one of the letters
above, it refers to the revision of the corresponding module.
1. Description of the fields of isdn_if: 1. Description of the fields of isdn_if:
...@@ -53,6 +74,11 @@ Description of the Interface between Linklevel and Hardwarelevel ...@@ -53,6 +74,11 @@ Description of the Interface between Linklevel and Hardwarelevel
void (*rcvcallb)(int, int, u_char*, int); void (*rcvcallb)(int, int, u_char*, int);
***CHANGEc1.14: Declared obsolete. Do NOT use this field/function
anymore, since it will be removed when all current
LL drivers have been changed accordingly. Use
rcvcallb_skb instead.
This field will be set by LL. The HL-driver delivers received data- This field will be set by LL. The HL-driver delivers received data-
packets by calling this function. packets by calling this function.
...@@ -114,6 +140,11 @@ Description of the Interface between Linklevel and Hardwarelevel ...@@ -114,6 +140,11 @@ Description of the Interface between Linklevel and Hardwarelevel
int (*writebuf)(int, int, u_char*, int, int); int (*writebuf)(int, int, u_char*, int, int);
***CHANGEc1.14: Declared obsolete. Do NOT use this field/function
anymore, since it will be removed when all current
LL drivers have been changed accordingly. Set this
field to NULL and use writebuf_skb instead.
This field has to be preset by the HL-driver. The given function will This field has to be preset by the HL-driver. The given function will
be called by the LL for delivering data to be send via B-Channel. be called by the LL for delivering data to be send via B-Channel.
...@@ -149,11 +180,7 @@ Description of the Interface between Linklevel and Hardwarelevel ...@@ -149,11 +180,7 @@ Description of the Interface between Linklevel and Hardwarelevel
Length of data accepted on success, else error-code (-EINVAL on Length of data accepted on success, else error-code (-EINVAL on
oversized packets etc.) oversized packets etc.)
NOTE on writebuf and writebuf_skb: int (*writecmd)(u_char*, int, int, int, int);
The HL-driver may initialize one of the fields to NULL, in which case
the LL will call the non-NULL function only.
int (*writecmd)(u_char*, int, int);
This field has to be preset by the HL-driver. The given function will be This field has to be preset by the HL-driver. The given function will be
called to perform write-requests on /dev/isdnctrl (i.e. sending commands called to perform write-requests on /dev/isdnctrl (i.e. sending commands
...@@ -169,11 +196,15 @@ NOTE on writebuf and writebuf_skb: ...@@ -169,11 +196,15 @@ NOTE on writebuf and writebuf_skb:
memcpy, may NOT use schedule()) memcpy, may NOT use schedule())
1 = call from user-space. (HL-driver must use 1 = call from user-space. (HL-driver must use
memcpy_fromfs, use of schedule() allowed) memcpy_fromfs, use of schedule() allowed)
int driver-Id.
int channel-number locally to the HL-driver. (starts with 0)
***CHANGEc1.14: The driver-Id and channel-number are new since this revision.
Returnvalue: Returnvalue:
Length of data accepted on success, else error-code (-EINVAL etc.) Length of data accepted on success, else error-code (-EINVAL etc.)
int (*readstat)(u_char*, int, int); int (*readstat)(u_char*, int, int, int, int);
This field has to be preset by the HL-driver. The given function will be This field has to be preset by the HL-driver. The given function will be
called to perform read-requests on /dev/isdnctrl (i.e. reading replies called to perform read-requests on /dev/isdnctrl (i.e. reading replies
...@@ -189,6 +220,10 @@ NOTE on writebuf and writebuf_skb: ...@@ -189,6 +220,10 @@ NOTE on writebuf and writebuf_skb:
memcpy, may NOT use schedule()) memcpy, may NOT use schedule())
1 = call from user-space. (HL-driver must use 1 = call from user-space. (HL-driver must use
memcpy_fromfs, use of schedule() allowed) memcpy_fromfs, use of schedule() allowed)
int driver-Id.
int channel-number locally to the HL-driver. (starts with 0)
***CHANGEc1.14: The driver-Id and channel-number are new since this revision.
Returnvalue: Returnvalue:
Length of data on success, else error-code (-EINVAL etc.) Length of data on success, else error-code (-EINVAL etc.)
......
...@@ -119,6 +119,8 @@ README for the ISDN-subsystem ...@@ -119,6 +119,8 @@ README for the ISDN-subsystem
AT&X0 BTX-mode off (default) AT&X0 BTX-mode off (default)
AT&X1 BTX-mode on. (S13.1=1, S14=0, S16=7, S18=7, S19=0) AT&X1 BTX-mode on. (S13.1=1, S14=0, S16=7, S18=7, S19=0)
For voice-mode commands refer to README.audio
1.3.2 Escape sequence: 1.3.2 Escape sequence:
During a connection, the emulation reacts just like During a connection, the emulation reacts just like
a normal modem to the escape sequence <DELAY>+++<DELAY>. a normal modem to the escape sequence <DELAY>+++<DELAY>.
...@@ -168,18 +170,34 @@ README for the ISDN-subsystem ...@@ -168,18 +170,34 @@ README for the ISDN-subsystem
1 = Direct tty-send. 1 = Direct tty-send.
Bit 1: 0 = T.70 protocol (Only for BTX!) off Bit 1: 0 = T.70 protocol (Only for BTX!) off
1 = T.70 protocol (Only for BTX!) on 1 = T.70 protocol (Only for BTX!) on
14 0 Layer-2 protocol: (with the ICN-driver 14 0 Layer-2 protocol:
currently always 0)
0 = X75/LAPB with I-frames 0 = X75/LAPB with I-frames
1 = X75/LAPB with UI-frames 1 = X75/LAPB with UI-frames
2 = X75/LAPB with BUI-frames 2 = X75/LAPB with BUI-frames
3 = HDLC 3 = HDLC
4 = Transparent (audio)
15 0 Layer-3 protocol: (at the moment always 0) 15 0 Layer-3 protocol: (at the moment always 0)
0 = transparent 0 = transparent
16 250 Send-Packet-size/16 16 250 Send-Packet-size/16
17 8 Window-size for Teles-driver (not yet implemented) 17 8 Window-size for Teles-driver (not yet implemented)
18 7 Service-Octet-1 18 4 Bit coded register, Service-Octet-1 to accept,
or to be used on dialout:
Bit 0: Service 1 (audio) when set.
Bit 1: Service 5 (BTX) when set.
Bit 2: Service 7 (data) when set.
Note: It is possible to set more than one
bit. In this case, on incoming calls
the selected services are accepted,
and if the service is "audio", the
Layer-2-protocol is automatically
changed to 4 regardless of the setting
of register 14. On outgoing calls,
the most significant 1-bit is choosen to
select the outgoing service octet.
19 0 Service-Octet-2 19 0 Service-Octet-2
20 0 Bit coded register (readonly)
Service-Octet-1 of last call.
Bit mapping is the same like register 18
Last but not least a (at the moment fairly primitive) device to request Last but not least a (at the moment fairly primitive) device to request
the line-status (/dev/isdninfo) is made available. the line-status (/dev/isdninfo) is made available.
...@@ -272,9 +290,8 @@ README for the ISDN-subsystem ...@@ -272,9 +290,8 @@ README for the ISDN-subsystem
Due to limited hardware-capabilities, there is no way to check the Due to limited hardware-capabilities, there is no way to check the
existence of a card. Therefore you need to be sure your card's setup existence of a card. Therefore you need to be sure your card's setup
is correct. Also there are bugs in the printed manual of some newer is correct. Also there are bugs in the printed manual of some newer
16.3 cards. The manual tells the port has to be 0x180. THIS IS WRONG!! 16.3 cards. Have a look to the kernel-syslog. With most of the cards,
0xd80 is the correct value! Have a look to the kernel-syslog. With you should see a line "HSCX version A:5 B:5" there.
most of the cards, you should see a line "HSCX version A:5 B:5" there.
3.1.2 ICN driver. 3.1.2 ICN driver.
...@@ -292,9 +309,10 @@ README for the ISDN-subsystem ...@@ -292,9 +309,10 @@ README for the ISDN-subsystem
When using the ICN double card, you MUST define TWO idstrings. When using the ICN double card, you MUST define TWO idstrings.
idstring must start with a character! idstring must start with a character!
The ICN driver supports only one card at the moment. If you like to If you like to use more than one card, you can use the program
use more than one card, build the modularized version, loading it "icnctrl" from the utility-package to configure additional cards.
more than one time, each module driving a single card. You need to configure shared memory only once, since the icn-driver
maps all cards into the same address-space.
Using the "icnctrl"-utility, portbase and shared memory can also be Using the "icnctrl"-utility, portbase and shared memory can also be
changed during runtime. changed during runtime.
...@@ -335,12 +353,8 @@ README for the ISDN-subsystem ...@@ -335,12 +353,8 @@ README for the ISDN-subsystem
When using the ICN double card, you MUST define TWO idstrings. When using the ICN double card, you MUST define TWO idstrings.
idstring must start with a character! idstring must start with a character!
The ICN driver supports only one card at the moment. If you like to Using the "icnctrl"-utility, the same features apply to the modularized
use more than one card, build the modularized version, loading it version like to the kernel-builtin one.
more than one time, each module driving a single card.
Using the "icnctrl"-utility, portbase and shared memory can also be
changed during runtime.
The D-channel protocol is configured by loading different firmware The D-channel protocol is configured by loading different firmware
into the card's memory using the "icnctrl"-utility. into the card's memory using the "icnctrl"-utility.
...@@ -365,13 +379,16 @@ README for the ISDN-subsystem ...@@ -365,13 +379,16 @@ README for the ISDN-subsystem
For Euro-ISDN: For Euro-ISDN:
icnctrl [-d IDstring] load download/loadpg.bin download/pc_eu_ca.bin icnctrl [-d IDstring] load download/loadpg.bin download/pc_eu_ca.bin
When using the ICN-2B, the protocol-software for the second half of When using the ICN-4B, the protocol-software for the second half of
the card must be appended to the command line. the card must be appended to the command line.
-> The two LEDs at the back cover of the card (ICN-2B: 4 LEDs) must be -> The two LEDs at the back cover of the card (ICN-4B: 4 LEDs) must be
blinking intermittently now. If a connection is up, the corresponding blinking intermittently now. If a connection is up, the corresponding
led is lit continuously. led is lit continuously.
For loading pcbit-firmware, refer to Documentation/isdn/README.pcbit
and the pcbit manpage, included in the utility-package.
b) If you only intend to use ttys, you are nearly ready now. b) If you only intend to use ttys, you are nearly ready now.
c) If you want to have really permanent "Modem"-settings on disk, you c) If you want to have really permanent "Modem"-settings on disk, you
......
$Id: README.icn,v 1.3 1996/05/19 00:10:37 fritz Exp $
You can get the ICN-ISDN-card from: You can get the ICN-ISDN-card from:
Thinking Objects Software GmbH Thinking Objects Software GmbH
...@@ -16,7 +18,8 @@ The card communicates with the PC by two interfaces: ...@@ -16,7 +18,8 @@ The card communicates with the PC by two interfaces:
2. A memory window with 16KB-256KB size, which can be setup in 16k steps 2. A memory window with 16KB-256KB size, which can be setup in 16k steps
over the whole range of 16MB. Isdn4linux only uses a 16k window. over the whole range of 16MB. Isdn4linux only uses a 16k window.
The base address of the window can be configured when loading The base address of the window can be configured when loading
the lowlevel-module (see README). the lowlevel-module (see README). If using more than one card,
all cards are mapped to the same window and activated as needed.
Setting up the IO-address dipswitches for the ICN-ISDN-card: Setting up the IO-address dipswitches for the ICN-ISDN-card:
......
...@@ -12,7 +12,7 @@ To compile isdn4linux with the sync PPP part, you have ...@@ -12,7 +12,7 @@ To compile isdn4linux with the sync PPP part, you have
to answer the appropriate question when doing a "make config" to answer the appropriate question when doing a "make config"
Don't forget to load the slhc.o Don't forget to load the slhc.o
module before the isdn.o module, if VJ-compression support module before the isdn.o module, if VJ-compression support
is not compiled into your kernel. (e.g if you have PPP or is not compiled into your kernel. (e.g if you have no PPP or
CSLIP in the kernel) CSLIP in the kernel)
Using isdn4linux with sync PPP: Using isdn4linux with sync PPP:
...@@ -20,11 +20,13 @@ Using isdn4linux with sync PPP: ...@@ -20,11 +20,13 @@ Using isdn4linux with sync PPP:
Sync PPP is just another encapsulation for isdn4linux. The Sync PPP is just another encapsulation for isdn4linux. The
name to enable sync PPP encapsulation is 'syncppp' .. e.g: name to enable sync PPP encapsulation is 'syncppp' .. e.g:
isdn/isdnctrl encap ippp0 syncppp /sbin/isdnctrl encap ippp0 syncppp
The name of the interface is here 'ippp0'. You need The name of the interface is here 'ippp0'. You need
one interface with the name 'ippp0' to saturate the one interface with the name 'ippp0' to saturate the
ipppd, which checks the ppp version via this interface. ipppd, which checks the ppp version via this interface.
Currently, all devices must have the name ipppX where
'X' is a decimal value.
To set up a PPP connection you need the ipppd .. You must start To set up a PPP connection you need the ipppd .. You must start
the ipppd once after installing the modules. The ipppd the ipppd once after installing the modules. The ipppd
...@@ -46,7 +48,8 @@ for an example setup script. ...@@ -46,7 +48,8 @@ for an example setup script.
To use the MPPP stuff, you must configure a slave device To use the MPPP stuff, you must configure a slave device
with isdn4linux. Now call the ipppd with the '+mp' option. with isdn4linux. Now call the ipppd with the '+mp' option.
To increase the number of links, you must use the To increase the number of links, you must use the
'addlink' option of the isdnctrl tool. 'addlink' option of the isdnctrl tool. (rc.isdn.syncppp.MPPP is
an example script)
enjoy it, enjoy it,
michael michael
......
simple isdn4linux PPP FAQ .. to be continued .. not 'debugged' simple isdn4linux PPP FAQ .. to be continued .. not 'debugged'
-------------------------------------------------------------------
Q: pppd,ipppd, syncPPP , asyncPPP .. what is that ? Q01: what's pppd,ipppd, syncPPP , asyncPPP ??
what should I use? Q02: error message "this systems lacks PPP support"
A: The pppd is for asynchronous PPP .. asynchronous means Q03: strange information using 'ifconfig'
here, the framing is character based. (e.g when Q04: MPPP?? What's that and how can I use it ...
using ttyI* or tty* devices) Q05: I tried MPPP but it doesn't work
Q06: can I use asynchronous PPP encapuslation with network devices
The ipppd handles PPP packets coming in HDLC Q07: A SunISDN machine can't connect to my i4l system
frames (bit based protocol) ... The PPP driver Q08: I wanna talk to several machines, which need different configs
in isdn4linux pushes all IP packets direct Q09: Starting the ipppd, I get only error messages from i4l
to the network layer and all PPP protocol Q10: I wanna use dynamic IP address assignment
frames to the /dev/ippp* device. Q11: I can't connect. How can I check where the problem is.
So, the ipppd is a simple external network Q12: How can I reduce login delay?
protocol handler.
-------------------------------------------------------------------
If you login into a remote machine using the
/dev/ttyI* devices and then enable PPP on the Q01: pppd,ipppd, syncPPP , asyncPPP .. what is that ?
remote terminal server -> use the 'old' pppd what should I use?
A: The pppd is for asynchronous PPP .. asynchron means
If your remote side immediately starts to send here, the framing is character based. (e.g when
frames ... you probably connect to a using ttyI* or tty* devices)
syncPPP machine .. use the network device part
of isdn4linux with the 'syncppp' encapsulation The ipppd handles PPP packets coming in HDLC
and make sure, that the ipppd is running and frames (bit based protocol) ... The PPP driver
connected to at least one /dev/ippp*. Check the in isdn4linux pushes all IP packets direct
isdn4linux manual on how to configure a network device. to the network layer and all PPP protocol
frames to the /dev/ippp* device.
Q: when I start the ipppd .. I only get the So, the ipppd is a simple externel network
protocol handler.
If you login into a remote machine using the
/dev/ttyI* devices and then enable PPP on the
remote terminal server -> use the 'old' pppd
If your remote side immediately starts to send
frames ... you probably connect to a
syncPPP machine .. use the network device part
of isdn4linux with the 'syncppp' encapsulation
and make sure, that the ipppd is running and
conneted to at least one /dev/ippp*. Check the
isdn4linux manual on how to configure a network device.
--
Q02: when I start the ipppd .. I only get the
error message "this systems lacks PPP support" error message "this systems lacks PPP support"
A: check that at least the device 'ippp0' exists. A: check that at least the device 'ippp0' exists.
(you can check this e.g with the program 'ifconfig') (you can check this e.g with the program 'ifconfig')
...@@ -39,12 +57,168 @@ A: Maybe you have compiled the ipppd with another ...@@ -39,12 +57,168 @@ A: Maybe you have compiled the ipppd with another
kernel source tree than the kernel you currently kernel source tree than the kernel you currently
run ... run ...
Q: when I list the netdevices with ifconfig I see, that --
Q03: when I list the netdevices with ifconfig I see, that
my ISDN interface has a HWaddr and IRQ=0 and Base my ISDN interface has a HWaddr and IRQ=0 and Base
address = 0 address = 0
A: The device is a fake ethernet device .. ignore IRQ and baseaddr A: The device is a fake ethernetdevice .. ignore IRQ and baseaddr
You need the HWaddr only for ethernet encapsulation. You need the HWaddr only for ethernet encapsulation.
--
Q04: MPPP?? What's that and how can I use it ...
A: MPPP or MP or MPP (Warning: MP is also an
acronym for 'Multi Processor') stands for
Multi Point to Point and means bundling
of several channels to one logical stream.
To enable MPPP negotiation you must call the
ipppd with the '+mp' option.
You must also configure a slave device for
every additional channel. (see the i4l manual
for more)
To use channel bundling you must first activate
the 'master' or inital call. Now you can add
the slave channels with the command:
isdnctrl addlink <device>
e.g:
isdnctrl addlink ippp0
This is different to other encapsualtions of
isdn4linux! With syncPPP, there is no automatic
activation of slave devices.
--
Q05: I tried MPPP but it doesn't work .. the ipppd
writes in the debug log something like:
.. rcvd [0][proto=0x3d] c0 00 00 00 80 fd 01 01 00 0a ...
.. sent [0][LCP ProtRej id=0x2 00 3d c0 00 00 00 80 fd 01 ...
A: you forgot to compile MPPP/RFC1717 support into the
ISDN Subsystem. Recompile with this option enabled.
--
Q06: can I use asynchronous PPP encapuslation
over the network interface of isdn4linux ..
A: No .. that's not possible .. Use the standard
PPP package over the /dev/ttyI* devices. You
must not use the ipppd for this.
--
Q07: A SunISDN machine tries to connect my i4l system,
which doesn't work.
Checking the debug log I just saw garbage like:
!![ ... fill in the line ... ]!!
A: The Sun tries to talk asynchronous PPP ... i4l
can't understand this ... try to use the ttyI*
devices with the standard PPP/pppd package
A: (from Alexanter Strauss: )
!![ ... fill in mail ]!!
--
Q08: A wanna talk to remote machines, which need
a different configuration. The only way
I found to do this is to kill the ipppd and
start a new one with another config to connect
to the second machine.
A: you must bind a network interface explicitly to
an ippp device, where you can connect a (for this
interface) individualy configured ipppd.
--
Q09: When I start the ipppd I only get error messages
from the i4l driver ..
A: When starting, the ipppd calls functions which may
trigger a network packet. (e.g gethostbyname()).
Without the ipppd (at this moment, it is not
fully started) we can't handle this network request.
Try to configure hostnames necessary for the ipppd
in your local /etc/hosts file or in a way, that
your system can resolve it without using an
isdn/ippp network-interface.
--
Q10: I wanna use dynamic IP address assignment ... How
must I configure the network device.
A: At least you must have a routing, which forwards
a packet to the ippp network-interface to trigger
the dial-on-demand.
A default routing to the ippp-interface will work.
Now you must choose a dummy IP address for your
interface.
If for some reason you can't set the default
routing to the ippp interface, you may take any
address of the subnet from which you expect your
dynamic IP number and set a 'network route' for
this subnet to the ippp interface.
To allow overriding of the dummy address you
must call the ipppd with the 'ipcp-accept-local' option.
A: You must know, how the ipppd gets the addresses it wanna
configure. If you don't give any option, the ipppd
tries to negotiate the local host address!
With the option 'noipdefault' it requests an address
from the remote machine. With 'useifip' it gets the
addresses from the net interface. Or you set the addresse
on the option line with the <a.b.c.d:e.f.g.h> option.
Note: the IP address of the remote machine must be configured
locally or the remote machine must send it in an IPCP request.
If your side doesn't know the IP address after negotiation, it
closes the connection!
You must allow overriding of address with the 'ipcp-accept-*'
options, if you have set your own or the remote address
explicitly.
A: Maybe you try these options .. e.g:
/sbin/ipppd :$REMOTE noipdefault /dev/ippp0
where REMOTE must be the address of the remote machine (the
machine, which gives you your address)
--
Q11: I can't connect. How can I check where the problem is.
A: A good help log is the debug output from the ipppd...
Check whether you can find there:
- only a few LCP-conf-req SENT messages (less then 10)
and then a Term-REQ:
-> check whether your ISDN card is well configured
it seems, that your machine doesn't dial
(IRQ,IO,Proto, etc problems)
Configure your ISDN card to print debug messages and
check the /dev/isdnctrl output next time. There
you can see, whether there is activity on the card/line.
- there are at least a few RECV messages in the log:
-> fine: your card is dialing and your remote machine
tries to talk with you. Maybe only a missing
authentification. Check your ipppd configuration again.
- the ipppd exits for some reason:
-> not good ... check /var/adm/syslog and /var/adm/daemon.
Could be a bug in the ipppd.
--
Q12: How can I reduce login delay?
A: Log a login session ('debug' log) and check which options
your remote side rejects. Next time configure your ipppd
to not negotiate these options. Another 'side effect' is, that
this increases redundancy. (e.g your remote side is buggy and
rejects options in a wrong way).
VERSION = 1 VERSION = 1
PATCHLEVEL = 99 PATCHLEVEL = 99
SUBLEVEL = 5 SUBLEVEL = 6
ARCH = i386 ARCH = i386
......
...@@ -24,6 +24,7 @@ CONFIG_NATIVE=y ...@@ -24,6 +24,7 @@ CONFIG_NATIVE=y
# CONFIG_ALPHA_EB66P is not set # CONFIG_ALPHA_EB66P is not set
# CONFIG_ALPHA_EB64P is not set # CONFIG_ALPHA_EB64P is not set
CONFIG_ALPHA_EB164=y CONFIG_ALPHA_EB164=y
# CONFIG_ALPHA_PC164 is not set
# CONFIG_ALPHA_JENSEN is not set # CONFIG_ALPHA_JENSEN is not set
# CONFIG_ALPHA_NONAME is not set # CONFIG_ALPHA_NONAME is not set
# CONFIG_ALPHA_P2K is not set # CONFIG_ALPHA_P2K is not set
...@@ -47,11 +48,15 @@ CONFIG_BLK_DEV_FD=y ...@@ -47,11 +48,15 @@ CONFIG_BLK_DEV_FD=y
# Please see drivers/block/README.ide for help/info on IDE drives # Please see drivers/block/README.ide for help/info on IDE drives
# #
# CONFIG_BLK_DEV_HD_ONLY is not set # CONFIG_BLK_DEV_HD_ONLY is not set
#
# Additional Block Devices
#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
# CONFIG_BLK_DEV_INITRD is not set # CONFIG_BLK_DEV_INITRD is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_XD is not set # CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_DEV_MD is not set
# #
# Networking options # Networking options
...@@ -120,7 +125,7 @@ CONFIG_SCSI_NCR53C7xx_FAST=y ...@@ -120,7 +125,7 @@ CONFIG_SCSI_NCR53C7xx_FAST=y
# CONFIG_SCSI_NCR53C7xx_DISCONNECT is not set # CONFIG_SCSI_NCR53C7xx_DISCONNECT is not set
# CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_QLOGIC is not set # CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_SEAGATE is not set # CONFIG_SCSI_SEAGATE is not set
# CONFIG_SCSI_T128 is not set # CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_ULTRASTOR is not set # CONFIG_SCSI_ULTRASTOR is not set
......
...@@ -70,9 +70,9 @@ asmlinkage void do_entArith(unsigned long summary, unsigned long write_mask, ...@@ -70,9 +70,9 @@ asmlinkage void do_entArith(unsigned long summary, unsigned long write_mask,
force_sig(SIGFPE, current); force_sig(SIGFPE, current);
} }
asmlinkage void do_entIF(unsigned long type, unsigned long a1, unsigned long a2, asmlinkage void do_entIF(unsigned long type, unsigned long a1,
unsigned long a3, unsigned long a4, unsigned long a5, unsigned long a2, unsigned long a3, unsigned long a4,
struct pt_regs regs) unsigned long a5, struct pt_regs regs)
{ {
extern int ptrace_cancel_bpt (struct task_struct *who); extern int ptrace_cancel_bpt (struct task_struct *who);
...@@ -201,18 +201,18 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -201,18 +201,18 @@ asmlinkage void do_entUna(void * va, unsigned long opcode, unsigned long reg,
if (reg >= 16 && reg <= 18) if (reg >= 16 && reg <= 18)
reg += 19; reg += 19;
switch (opcode) { switch (opcode) {
case 0x28: /* ldl */ case 0x28: /* ldl */
*(reg+regs.regs) = (int) ldl_u(va); *(reg+regs.regs) = get_unaligned((int *)va);
return; return;
case 0x29: /* ldq */ case 0x29: /* ldq */
*(reg+regs.regs) = ldq_u(va); *(reg+regs.regs) = get_unaligned((long *)va);
return; return;
case 0x2c: /* stl */ case 0x2c: /* stl */
stl_u(*(reg+regs.regs), va); put_unaligned(*(reg+regs.regs), (int *)va);
return; return;
case 0x2d: /* stq */ case 0x2d: /* stq */
stq_u(*(reg+regs.regs), va); put_unaligned(*(reg+regs.regs), (long *)va);
return; return;
} }
printk("Bad unaligned kernel access at %016lx: %p %lx %ld\n", printk("Bad unaligned kernel access at %016lx: %p %lx %ld\n",
regs.pc, va, opcode, reg); regs.pc, va, opcode, reg);
...@@ -321,45 +321,79 @@ asmlinkage void do_entUnaUser(void * va, unsigned long opcode, unsigned long reg ...@@ -321,45 +321,79 @@ asmlinkage void do_entUnaUser(void * va, unsigned long opcode, unsigned long reg
reg_addr = frame; reg_addr = frame;
if (opcode >= 0x28) { if (opcode >= 0x28) {
/* it's an integer load/store */ /* it's an integer load/store */
if (reg < 9) { switch (reg) {
reg_addr += 7 + reg; /* v0-t7 in SAVE_ALL frame */ case 0: case 1: case 2: case 3: case 4:
} else if (reg < 16) { case 5: case 6: case 7: case 8:
reg_addr += (reg - 9); /* s0-s6 in entUna frame */ /* v0-t7 in SAVE_ALL frame */
} else if (reg < 19) { reg_addr += 7 + reg;
reg_addr += 7 + 20 + 3 + (reg - 16); /* a0-a2 in PAL frame */ break;
} else if (reg < 29) {
reg_addr += 7 + 9 + (reg - 19); /* a3-at in SAVE_ALL frame */ case 9: case 10: case 11: case 12:
} else { case 13: case 14: case 15:
switch (reg) { /* s0-s6 in entUna frame */
case 29: /* gp in PAL frame */ reg_addr += (reg - 9);
reg_addr += 7 + 20 + 2; break;
break;
case 30: /* usp in PAL regs */ case 16: case 17: case 18:
usp = rdusp(); /* a0-a2 in PAL frame */
reg_addr = &usp; reg_addr += 7 + 20 + 3 + (reg - 16);
break; break;
case 31: /* zero "register" */
reg_addr = &zero; case 19: case 20: case 21: case 22: case 23:
break; case 24: case 25: case 26: case 27: case 28:
} /* a3-at in SAVE_ALL frame */
reg_addr += 7 + 9 + (reg - 19);
break;
case 29:
/* gp in PAL frame */
reg_addr += 7 + 20 + 2;
break;
case 30:
/* usp in PAL regs */
usp = rdusp();
reg_addr = &usp;
break;
case 31:
/* zero "register" */
reg_addr = &zero;
break;
} }
} }
switch (opcode) { switch (opcode) {
case 0x22: /* lds */ case 0x22: /* lds */
alpha_write_fp_reg(reg, s_mem_to_reg(ldl_u(va))); alpha_write_fp_reg(reg, s_mem_to_reg(
get_unaligned((unsigned int *)va)));
break; break;
case 0x26: /* lds */ case 0x26: /* sts */
alpha_write_fp_reg(reg, s_reg_to_mem(ldl_u(va))); put_unaligned(s_reg_to_mem(alpha_read_fp_reg(reg)),
(unsigned int *)va);
break; break;
case 0x23: alpha_write_fp_reg(reg, ldq_u(va)); break; /* ldt */ case 0x23: /* ldt */
case 0x27: stq_u(alpha_read_fp_reg(reg), va); break; /* stt */ alpha_write_fp_reg(reg, get_unaligned((unsigned long *)va));
break;
case 0x27: /* stt */
put_unaligned(alpha_read_fp_reg(reg), (unsigned long *)va);
break;
case 0x28: /* ldl */
*reg_addr = get_unaligned((int *)va);
break;
case 0x2c: /* stl */
put_unaligned(*reg_addr, (int *)va);
break;
case 0x29: /* ldq */
*reg_addr = get_unaligned((long *)va);
break;
case 0x2d: /* stq */
put_unaligned(*reg_addr, (long *)va);
break;
case 0x28: *reg_addr = (int) ldl_u(va); break; /* ldl */
case 0x29: *reg_addr = ldq_u(va); break; /* ldq */
case 0x2c: stl_u(*reg_addr, va); break; /* stl */
case 0x2d: stq_u(*reg_addr, va); break; /* stq */
default: default:
*pc_addr -= 4; /* make pc point to faulting insn */ *pc_addr -= 4; /* make pc point to faulting insn */
force_sig(SIGBUS, current); force_sig(SIGBUS, current);
...@@ -383,10 +417,11 @@ asmlinkage void do_entUnaUser(void * va, unsigned long opcode, unsigned long reg ...@@ -383,10 +417,11 @@ asmlinkage void do_entUnaUser(void * va, unsigned long opcode, unsigned long reg
* got terminally tainted by VMS at some point. * got terminally tainted by VMS at some point.
*/ */
asmlinkage long do_entSys(unsigned long a0, unsigned long a1, unsigned long a2, asmlinkage long do_entSys(unsigned long a0, unsigned long a1, unsigned long a2,
unsigned long a3, unsigned long a4, unsigned long a5, struct pt_regs regs) unsigned long a3, unsigned long a4, unsigned long a5,
struct pt_regs regs)
{ {
if (regs.r0 != 112) if (regs.r0 != 112)
printk("<sc %ld(%lx,%lx,%lx)>", regs.r0, a0, a1, a2); printk("<sc %ld(%lx,%lx,%lx)>", regs.r0, a0, a1, a2);
return -1; return -1;
} }
......
...@@ -880,7 +880,7 @@ vesa1: seg gs ! Get next mode in the list ...@@ -880,7 +880,7 @@ vesa1: seg gs ! Get next mode in the list
cmp ax,#0x0080 ! Check validity of mode ID cmp ax,#0x0080 ! Check validity of mode ID
jc vesa2 jc vesa2
or ah,ah ! Valid ID's are 0x0000-0x007f and 0x0100-0x07ff or ah,ah ! Valid ID's are 0x0000-0x007f and 0x0100-0x07ff
jz vesan ! [Certain BIOSes errorneously report 0x80-0xff] jz vesan ! [Certain BIOSes erroneously report 0x80-0xff]
cmp ax,#0x0800 cmp ax,#0x0800
jnc vesae jnc vesae
vesa2: push cx vesa2: push cx
......
...@@ -44,13 +44,17 @@ CONFIG_BLK_DEV_IDECD=y ...@@ -44,13 +44,17 @@ CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDE_PCMCIA is not set # CONFIG_BLK_DEV_IDE_PCMCIA is not set
CONFIG_BLK_DEV_CMD640=y CONFIG_BLK_DEV_CMD640=y
CONFIG_BLK_DEV_RZ1000=y
# CONFIG_BLK_DEV_TRITON is not set # CONFIG_BLK_DEV_TRITON is not set
CONFIG_BLK_DEV_RZ1000=y
# CONFIG_IDE_CHIPSETS is not set # CONFIG_IDE_CHIPSETS is not set
# CONFIG_BLK_DEV_RAM is not set
#
# Additional Block Devices
#
# CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_DEV_MD is not set # CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_XD is not set
# #
# Networking options # Networking options
......
...@@ -375,7 +375,7 @@ ENTRY(_start) ...@@ -375,7 +375,7 @@ ENTRY(_start)
movel %d1,%a2@+ movel %d1,%a2@+
/* /*
* %a2 points now to the page table entry for available pages at %a6, * %a2 points now to the page table entry for available pages at %a6,
* hence caching modes for new pages can easiely set unless increasing * hence caching modes for new pages can easily set unless increasing
* of %a2 are forgotten. * of %a2 are forgotten.
*/ */
Lnot040: Lnot040:
......
...@@ -30,21 +30,16 @@ ...@@ -30,21 +30,16 @@
#include <asm/system.h> #include <asm/system.h>
#ifdef __alpha__
/* /*
* On the Alpha, we get unaligned access exceptions on * Many architectures don't like unaligned accesses, which is
* p->nr_sects and p->start_sect, when the partition table * frequently the case with the nr_sects and start_sect partition
* is not on a 4-byte boundary, which is frequently the case. * table entries.
* This code uses unaligned load instructions to prevent
* such exceptions.
*/ */
#include <asm/unaligned.h> #include <asm/unaligned.h>
#define NR_SECTS(p) ldl_u(&p->nr_sects)
#define START_SECT(p) ldl_u(&p->start_sect) #define NR_SECTS(p) get_unaligned(&p->nr_sects)
#else /* __alpha__ */ #define START_SECT(p) get_unaligned(&p->start_sect)
#define NR_SECTS(p) p->nr_sects
#define START_SECT(p) p->start_sect
#endif /* __alpha__ */
struct gendisk *gendisk_head = NULL; struct gendisk *gendisk_head = NULL;
......
...@@ -97,6 +97,7 @@ ...@@ -97,6 +97,7 @@
* 3.12 May 7, 1996 -- Rudimentary changer support. Based on patches * 3.12 May 7, 1996 -- Rudimentary changer support. Based on patches
* from Gerhard Zuber <zuber@berlin.snafu.de>. * from Gerhard Zuber <zuber@berlin.snafu.de>.
* Let open succeed even if there's no loaded disc. * Let open succeed even if there's no loaded disc.
* 3.13 May 19, 1996 -- Fixes for changer code.
* *
* NOTE: Direct audio reads will only work on some types of drive. * NOTE: Direct audio reads will only work on some types of drive.
* So far, i've received reports of success for Sony and Toshiba drives. * So far, i've received reports of success for Sony and Toshiba drives.
...@@ -106,6 +107,7 @@ ...@@ -106,6 +107,7 @@
* uses a different protocol. * uses a different protocol.
* *
* ATAPI cd-rom driver. To be used with ide.c. * ATAPI cd-rom driver. To be used with ide.c.
* See Documentation/cdrom/ide-cd for usage information.
* *
* Copyright (C) 1994, 1995, 1996 scott snyder <snyder@fnald0.fnal.gov> * Copyright (C) 1994, 1995, 1996 scott snyder <snyder@fnald0.fnal.gov>
* May be copied or modified under the terms of the GNU General Public License * May be copied or modified under the terms of the GNU General Public License
...@@ -130,9 +132,7 @@ ...@@ -130,9 +132,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include <asm/segment.h> #include <asm/segment.h>
#ifdef __alpha__ #include <asm/unaligned.h>
# include <asm/unaligned.h>
#endif
#include "ide.h" #include "ide.h"
...@@ -1149,11 +1149,7 @@ static void cdrom_start_read_continuation (ide_drive_t *drive) ...@@ -1149,11 +1149,7 @@ static void cdrom_start_read_continuation (ide_drive_t *drive)
pc.c[0] = READ_10; pc.c[0] = READ_10;
pc.c[7] = (nframes >> 8); pc.c[7] = (nframes >> 8);
pc.c[8] = (nframes & 0xff); pc.c[8] = (nframes & 0xff);
#ifdef __alpha__ put_unaligned(htonl (frame), (unsigned int *) &pc.c[2]);
stl_u (htonl (frame), (unsigned int *) &pc.c[2]);
#else
*(int *)(&pc.c[2]) = htonl (frame);
#endif
/* Send the command to the drive and return. */ /* Send the command to the drive and return. */
(void) cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c), (void) cdrom_transfer_packet_command (drive, pc.c, sizeof (pc.c),
...@@ -1937,11 +1933,7 @@ cdrom_read_block (ide_drive_t *drive, int format, int lba, ...@@ -1937,11 +1933,7 @@ cdrom_read_block (ide_drive_t *drive, int format, int lba,
pc.c[0] = READ_CD; pc.c[0] = READ_CD;
pc.c[1] = (format << 2); pc.c[1] = (format << 2);
#ifdef __alpha__ put_unaligned(htonl(lba), (unsigned int *) &pc.c[2]);
stl_u(htonl (lba), (unsigned int *) &pc.c[2]);
#else
*(int *)(&pc.c[2]) = htonl (lba);
#endif
pc.c[8] = 1; /* one block */ pc.c[8] = 1; /* one block */
pc.c[9] = 0x10; pc.c[9] = 0x10;
...@@ -1968,7 +1960,7 @@ cdrom_read_block (ide_drive_t *drive, int format, int lba, ...@@ -1968,7 +1960,7 @@ cdrom_read_block (ide_drive_t *drive, int format, int lba,
/* If SLOT<0, unload the current slot. Otherwise, try to load SLOT. */ /* If SLOT<0, unload the current slot. Otherwise, try to load SLOT. */
static int static int
cdrom_load_unload (ide_drive_t *drive, unsigned long slot, cdrom_load_unload (ide_drive_t *drive, int slot,
struct atapi_request_sense *reqbuf) struct atapi_request_sense *reqbuf)
{ {
struct packet_command pc; struct packet_command pc;
...@@ -2403,16 +2395,14 @@ int ide_cdrom_ioctl (ide_drive_t *drive, struct inode *inode, ...@@ -2403,16 +2395,14 @@ int ide_cdrom_ioctl (ide_drive_t *drive, struct inode *inode,
if (drive->usage > 1) if (drive->usage > 1)
return -EBUSY; return -EBUSY;
stat = cdrom_load_unload (drive, -1, NULL); (void) cdrom_load_unload (drive, -1, NULL);
if (stat) return stat;
cdrom_saw_media_change (drive); cdrom_saw_media_change (drive);
if (arg == -1) { if (arg == -1) {
(void) cdrom_lockdoor (drive, 0, NULL); (void) cdrom_lockdoor (drive, 0, NULL);
return 0; return 0;
} }
stat = cdrom_load_unload (drive, arg, NULL); (void) cdrom_load_unload (drive, (int)arg, NULL);
if (stat) return stat;
stat = cdrom_check_status (drive, &my_reqbuf); stat = cdrom_check_status (drive, &my_reqbuf);
if (stat && my_reqbuf.sense_key == NOT_READY) { if (stat && my_reqbuf.sense_key == NOT_READY) {
...@@ -2642,7 +2632,6 @@ void ide_cdrom_setup (ide_drive_t *drive) ...@@ -2642,7 +2632,6 @@ void ide_cdrom_setup (ide_drive_t *drive)
* Establish interfaces for an IDE port driver, and break out the cdrom * Establish interfaces for an IDE port driver, and break out the cdrom
* code into a loadable module. * code into a loadable module.
* Support changers better. * Support changers better.
* Write some real documentation.
*/ */
......
...@@ -286,9 +286,17 @@ static void make_request(int major,int rw, struct buffer_head * bh) ...@@ -286,9 +286,17 @@ static void make_request(int major,int rw, struct buffer_head * bh)
count = bh->b_size >> 9; count = bh->b_size >> 9;
sector = bh->b_rsector; sector = bh->b_rsector;
/* Uhhuh.. Nasty dead-lock possible here.. */
if (buffer_locked(bh))
return;
/* Maybe the above fixes it, and maybe it doesn't boot. Life is interesting */
lock_buffer(bh);
if (blk_size[major]) if (blk_size[major])
if (blk_size[major][MINOR(bh->b_rdev)] < (sector + count)>>1) { if (blk_size[major][MINOR(bh->b_rdev)] < (sector + count)>>1) {
bh->b_state = 0; bh->b_state &= (1 << BH_Lock) | (1 << BH_FreeOnIO);
/* This may well happen - the kernel calls bread() /* This may well happen - the kernel calls bread()
without checking the size of the device, e.g., without checking the size of the device, e.g.,
when mounting a device. */ when mounting a device. */
...@@ -298,13 +306,9 @@ static void make_request(int major,int rw, struct buffer_head * bh) ...@@ -298,13 +306,9 @@ static void make_request(int major,int rw, struct buffer_head * bh)
kdevname(bh->b_rdev), rw, kdevname(bh->b_rdev), rw,
(sector + count)>>1, (sector + count)>>1,
blk_size[major][MINOR(bh->b_rdev)]); blk_size[major][MINOR(bh->b_rdev)]);
unlock_buffer(bh);
return; return;
} }
/* Uhhuh.. Nasty dead-lock possible here.. */
if (buffer_locked(bh))
return;
/* Maybe the above fixes it, and maybe it doesn't boot. Life is interesting */
lock_buffer(bh);
rw_ahead = 0; /* normal case; gets changed below for READA/WRITEA */ rw_ahead = 0; /* normal case; gets changed below for READA/WRITEA */
switch (rw) { switch (rw) {
......
#define AZT_VERSION "2.40" #define AZT_VERSION "2.50"
/* $Id: aztcd.c,v 2.40 1996/05/01 11:09:35 root Exp root $ /* $Id: aztcd.c,v 2.50 1996/05/17 16:19:03 root Exp root $
linux/drivers/block/aztcd.c - Aztech CD268 CDROM driver linux/drivers/block/aztcd.c - Aztech CD268 CDROM driver
Copyright (C) 1994,95,96 Werner Zimmermann(zimmerma@rz.fht-esslingen.de) Copyright (C) 1994,95,96 Werner Zimmermann(zimmerma@rz.fht-esslingen.de)
...@@ -151,6 +151,9 @@ ...@@ -151,6 +151,9 @@
V2.40 Reorganized the placement of functions in the source code file V2.40 Reorganized the placement of functions in the source code file
to reflect the layered approach; did not actually change code to reflect the layered approach; did not actually change code
Werner Zimmermann, May 1, 96 Werner Zimmermann, May 1, 96
V2.50 Heiko Eissfeld suggested to remove some VERIFY_READs in
aztcd_ioctl; check_aztcd_media_change modified
Werner Zimmermann, May 16, 96
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/errno.h> #include <linux/errno.h>
...@@ -1053,10 +1056,15 @@ void aztcd_setup(char *str, int *ints) ...@@ -1053,10 +1056,15 @@ void aztcd_setup(char *str, int *ints)
} }
/* /*
* Checking if the media has been changed not yet implemented * Checking if the media has been changed
*/ */
static int check_aztcd_media_change(kdev_t full_dev) static int check_aztcd_media_change(kdev_t full_dev)
{ return 0; { if (aztDiskChanged) /* disk changed */
{ aztDiskChanged=0;
return 1;
}
else
return 0; /* no change */
} }
/* /*
...@@ -1127,7 +1135,7 @@ static int aztcd_ioctl(struct inode *ip, struct file *fp, unsigned int cmd, unsi ...@@ -1127,7 +1135,7 @@ static int aztcd_ioctl(struct inode *ip, struct file *fp, unsigned int cmd, unsi
#ifdef AZT_DEBUG #ifdef AZT_DEBUG
printk("aztcd ioctl MULTISESSION\n"); printk("aztcd ioctl MULTISESSION\n");
#endif #endif
st = verify_area(VERIFY_READ, (void*) arg, sizeof(struct cdrom_multisession)); st = verify_area(VERIFY_WRITE, (void*) arg, sizeof(struct cdrom_multisession));
if (st) return st; if (st) return st;
memcpy_fromfs(&ms, (void*) arg, sizeof(struct cdrom_multisession)); memcpy_fromfs(&ms, (void*) arg, sizeof(struct cdrom_multisession));
if (ms.addr_format == CDROM_MSF) if (ms.addr_format == CDROM_MSF)
...@@ -1140,8 +1148,6 @@ static int aztcd_ioctl(struct inode *ip, struct file *fp, unsigned int cmd, unsi ...@@ -1140,8 +1148,6 @@ static int aztcd_ioctl(struct inode *ip, struct file *fp, unsigned int cmd, unsi
else else
return -EINVAL; return -EINVAL;
ms.xa_flag = DiskInfo.xa; ms.xa_flag = DiskInfo.xa;
st = verify_area(VERIFY_WRITE, (void*) arg, sizeof(struct cdrom_multisession));
if (st) return st;
memcpy_tofs((void*) arg, &ms, sizeof(struct cdrom_multisession)); memcpy_tofs((void*) arg, &ms, sizeof(struct cdrom_multisession));
#ifdef AZT_DEBUG #ifdef AZT_DEBUG
if (ms.addr_format == CDROM_MSF) if (ms.addr_format == CDROM_MSF)
...@@ -1225,8 +1231,6 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame); ...@@ -1225,8 +1231,6 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame);
memcpy_tofs((void *) arg, &tocHdr, sizeof tocHdr); memcpy_tofs((void *) arg, &tocHdr, sizeof tocHdr);
break; break;
case CDROMREADTOCENTRY: /* Read an entry in the table of contents */ case CDROMREADTOCENTRY: /* Read an entry in the table of contents */
st = verify_area(VERIFY_READ, (void *) arg, sizeof entry);
if (st) return st;
st = verify_area(VERIFY_WRITE, (void *) arg, sizeof entry); st = verify_area(VERIFY_WRITE, (void *) arg, sizeof entry);
if (st) return st; if (st) return st;
memcpy_fromfs(&entry, (void *) arg, sizeof entry); memcpy_fromfs(&entry, (void *) arg, sizeof entry);
...@@ -1254,17 +1258,10 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame); ...@@ -1254,17 +1258,10 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame);
memcpy_tofs((void *) arg, &entry, sizeof entry); memcpy_tofs((void *) arg, &entry, sizeof entry);
break; break;
case CDROMSUBCHNL: /* Get subchannel info */ case CDROMSUBCHNL: /* Get subchannel info */
st = verify_area(VERIFY_READ, (void *) arg, sizeof(struct cdrom_subchnl));
if (st) {
#ifdef AZT_DEBUG
printk("aztcd: exiting aztcd_ioctl - Error 1 - Command:%x\n",cmd);
#endif
return st;
}
st = verify_area(VERIFY_WRITE, (void *) arg, sizeof(struct cdrom_subchnl)); st = verify_area(VERIFY_WRITE, (void *) arg, sizeof(struct cdrom_subchnl));
if (st) { if (st) {
#ifdef AZT_DEBUG #ifdef AZT_DEBUG
printk("aztcd: exiting aztcd_ioctl - Error 2 - Command:%x\n",cmd); printk("aztcd: exiting aztcd_ioctl - Error 1 - Command:%x\n",cmd);
#endif #endif
return st; return st;
} }
...@@ -1340,9 +1337,7 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame); ...@@ -1340,9 +1337,7 @@ azt_Play.end.min, azt_Play.end.sec, azt_Play.end.frame);
#if AZT_PRIVATE_IOCTLS #if AZT_PRIVATE_IOCTLS
case CDROMREADCOOKED: /*read data in mode 1 (2048 Bytes)*/ case CDROMREADCOOKED: /*read data in mode 1 (2048 Bytes)*/
case CDROMREADRAW: /*read data in mode 2 (2336 Bytes)*/ case CDROMREADRAW: /*read data in mode 2 (2336 Bytes)*/
{ st = verify_area(VERIFY_READ, (void *) arg, sizeof msf); { st = verify_area(VERIFY_WRITE, (void *) arg, sizeof buf);
if (st) return st;
st = verify_area(VERIFY_WRITE, (void *) arg, sizeof buf);
if (st) return st; if (st) return st;
memcpy_fromfs(&msf, (void *) arg, sizeof msf); memcpy_fromfs(&msf, (void *) arg, sizeof msf);
/* convert to bcd */ /* convert to bcd */
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
* Daniel v. Mosnenck (he sent me the Technical and Programming Reference) * Daniel v. Mosnenck (he sent me the Technical and Programming Reference)
* Gerd Knorr (he lent me his PhotoCD) * Gerd Knorr (he lent me his PhotoCD)
* Nils Faerber and Roger E. Wolff (extensively tested the LU portion) * Nils Faerber and Roger E. Wolff (extensively tested the LU portion)
* Andreas Kies (testing the mysterious hang up's) * Andreas Kies (testing the mysterious hangups)
* ... somebody forgotten? * ... somebody forgotten?
* *
* 2.1 1996/04/29 Marcin Dalecki <dalecki@namu03.gwdg.de> * 2.1 1996/04/29 Marcin Dalecki <dalecki@namu03.gwdg.de>
...@@ -38,8 +38,8 @@ ...@@ -38,8 +38,8 @@
* 2.3 1996/05/15 Marcin Dalecki <dalecki@namu03.gwdg.de> * 2.3 1996/05/15 Marcin Dalecki <dalecki@namu03.gwdg.de>
* Fixed stereo support. * Fixed stereo support.
* NOTE: * NOTE:
* There will be propably a 3.0 adhering to the new generic non ATAPI * There will be probably a 3.0 adhering to the new generic non ATAPI
* cdrom interface in the unforseen future. * cdrom interface in the unforeseen future.
*/ */
#define VERSION "2.3" #define VERSION "2.3"
...@@ -261,8 +261,8 @@ static inline int irq(int *ip) ...@@ -261,8 +261,8 @@ static inline int irq(int *ip)
* Return drives status in case of success, -1 otherwise. * Return drives status in case of success, -1 otherwise.
* *
* First we try to get the status information quickly. * First we try to get the status information quickly.
* Then we sleep repeatedly for about 10 usecs, befor we finally reach the * Then we sleep repeatedly for about 10 usecs, before we finally reach the
* timeout. For this reason this command must be called with the drive beeing * timeout. For this reason this command must be called with the drive being
* locked! * locked!
*/ */
static int get_status(struct s_drive_stuff *stuffp, static int get_status(struct s_drive_stuff *stuffp,
...@@ -462,7 +462,7 @@ int read_toc(struct s_drive_stuff *stuffp) ...@@ -462,7 +462,7 @@ int read_toc(struct s_drive_stuff *stuffp)
set_drive_mode(stuffp, DATA); set_drive_mode(stuffp, DATA);
return -EIO; return -EIO;
} }
/* now read actually the index tarcks */ /* now read actually the index tracks */
for (trk = 0; for (trk = 0;
trk < (stuffp->n_last - stuffp->n_first + 1); trk < (stuffp->n_last - stuffp->n_first + 1);
trk++) trk++)
...@@ -563,8 +563,8 @@ static int mcdx_ioctl(struct inode *ip, struct file *fp, ...@@ -563,8 +563,8 @@ static int mcdx_ioctl(struct inode *ip, struct file *fp,
/* /*
* Update disk information, when necessary. * Update disk information, when necessary.
* This part will only work, when the new disk is of the same type as * This part will only work, when the new disk is of the same type as
* the one which was previousley there, esp. also for audio diks. * the one which was previously there, esp. also for audio disks.
* This doesn't hurt us, since otherwise the mouting/unmounting scheme * This doesn't hurt us, since otherwise the mounting/unmounting scheme
* will ensure correct operation. * will ensure correct operation.
*/ */
if (stuffp->xxx) { /* disk changed */ if (stuffp->xxx) { /* disk changed */
...@@ -797,7 +797,7 @@ static int mcdx_ioctl(struct inode *ip, struct file *fp, ...@@ -797,7 +797,7 @@ static int mcdx_ioctl(struct inode *ip, struct file *fp,
return ans; return ans;
memcpy_fromfs(&volctrl, (char *) arg, sizeof(volctrl)); memcpy_fromfs(&volctrl, (char *) arg, sizeof(volctrl));
/* Adjust for the wiredness of workman. */ /* Adjust for the weirdness of workman. */
volctrl.channel2 = volctrl.channel1; volctrl.channel2 = volctrl.channel1;
volctrl.channel1 = volctrl.channel3 = 0x00; volctrl.channel1 = volctrl.channel3 = 0x00;
return talk(stuffp, MCDX_CMD_SET_ATTENATOR, return talk(stuffp, MCDX_CMD_SET_ATTENATOR,
...@@ -815,7 +815,7 @@ static int mcdx_ioctl(struct inode *ip, struct file *fp, ...@@ -815,7 +815,7 @@ static int mcdx_ioctl(struct inode *ip, struct file *fp,
* This does actually the transfer from the drive. * This does actually the transfer from the drive.
* Return: -1 on timeout or other error * Return: -1 on timeout or other error
* else status byte (as in stuff->st) * else status byte (as in stuff->st)
* FIXME: the excessive jumping throught wait queues degrades the * FIXME: the excessive jumping through wait queues degrades the
* performance significantly. * performance significantly.
*/ */
static int transfer_data(struct s_drive_stuff *stuffp, static int transfer_data(struct s_drive_stuff *stuffp,
...@@ -1179,7 +1179,7 @@ static int mcdx_media_change(kdev_t full_dev) ...@@ -1179,7 +1179,7 @@ static int mcdx_media_change(kdev_t full_dev)
MCDX_TRACE(("mcdx_media_change()\n")); MCDX_TRACE(("mcdx_media_change()\n"));
/* /*
* FIXME: propably this is unneded or should be simplified! * FIXME: probably this is unneeded or should be simplified!
*/ */
issue_command(stuffp = mcdx_stuffp[MINOR(full_dev)], issue_command(stuffp = mcdx_stuffp[MINOR(full_dev)],
MCDX_CMD_GET_STATUS, 5 * HZ); MCDX_CMD_GET_STATUS, 5 * HZ);
...@@ -1197,7 +1197,7 @@ static void mcdx_intr(int irq, void *dev_id, struct pt_regs *regs) ...@@ -1197,7 +1197,7 @@ static void mcdx_intr(int irq, void *dev_id, struct pt_regs *regs)
u_char b; u_char b;
if (!(stuffp = mcdx_irq_map[irq])) { if (!(stuffp = mcdx_irq_map[irq])) {
return; /* hugh? */ return; /* huh? */
} }
/* NOTE: We only should get interrupts if data were requested. /* NOTE: We only should get interrupts if data were requested.
...@@ -1225,7 +1225,7 @@ static void mcdx_intr(int irq, void *dev_id, struct pt_regs *regs) ...@@ -1225,7 +1225,7 @@ static void mcdx_intr(int irq, void *dev_id, struct pt_regs *regs)
/* /*
* FIXME! * FIXME!
* This seems to hang badly, when the driver is loaded with inappriopriate * This seems to hang badly, when the driver is loaded with inappropriate
* port/irq settings! * port/irq settings!
*/ */
int mcdx_init(void) int mcdx_init(void)
......
...@@ -79,7 +79,7 @@ or leave this task to kerneld (if installed). Add the following line to ...@@ -79,7 +79,7 @@ or leave this task to kerneld (if installed). Add the following line to
Configuring the driver Configuring the driver
Everytime the driver is inserted into the kernel, it has to know which Every time the driver is inserted into the kernel, it has to know which
modems it should access at which ports. This can be done with the setbaycom modems it should access at which ports. This can be done with the setbaycom
utility. If you are only using one modem, you can also configure the utility. If you are only using one modem, you can also configure the
driver from the insmod command line (or by means of an option line in driver from the insmod command line (or by means of an option line in
......
...@@ -1868,6 +1868,9 @@ static int pcxe_ioctl(struct tty_struct *tty, struct file * file, ...@@ -1868,6 +1868,9 @@ static int pcxe_ioctl(struct tty_struct *tty, struct file * file,
return 0; return 0;
case TIOCSSOFTCAR: case TIOCSSOFTCAR:
error = verify_area(VERIFY_READ, (void *) arg,sizeof(long));
if(error)
return error;
arg = get_fs_long((unsigned long *) arg); arg = get_fs_long((unsigned long *) arg);
tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL) | (arg ? CLOCAL : 0)); tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL) | (arg ? CLOCAL : 0));
return 0; return 0;
...@@ -1905,6 +1908,9 @@ static int pcxe_ioctl(struct tty_struct *tty, struct file * file, ...@@ -1905,6 +1908,9 @@ static int pcxe_ioctl(struct tty_struct *tty, struct file * file,
case TIOCMBIC: case TIOCMBIC:
case TIOCMODS: case TIOCMODS:
case TIOCMSET: case TIOCMSET:
error = verify_area(VERIFY_READ, (void *) arg,sizeof(long));
if(error)
return error;
mstat = get_fs_long((unsigned long *) arg); mstat = get_fs_long((unsigned long *) arg);
mflag = 0; mflag = 0;
......
...@@ -8,6 +8,7 @@ if [ "$CONFIG_INET" != "n" ]; then ...@@ -8,6 +8,7 @@ if [ "$CONFIG_INET" != "n" ]; then
bool 'Support generic MP (RFC 1717)' CONFIG_ISDN_MPP bool 'Support generic MP (RFC 1717)' CONFIG_ISDN_MPP
fi fi
fi fi
dep_tristate 'ICN B1 and B2 support' CONFIG_ISDN_DRV_ICN $CONFIG_ISDN bool 'Support audio via ISDN' CONFIG_ISDN_AUDIO
dep_tristate 'ICN 2B and 4B support' CONFIG_ISDN_DRV_ICN $CONFIG_ISDN
dep_tristate 'PCBIT-D support' CONFIG_ISDN_DRV_PCBIT $CONFIG_ISDN dep_tristate 'PCBIT-D support' CONFIG_ISDN_DRV_PCBIT $CONFIG_ISDN
dep_tristate 'Teles/NICCY1016PC/Creatix support' CONFIG_ISDN_DRV_TELES $CONFIG_ISDN dep_tristate 'Teles/NICCY1016PC/Creatix support' CONFIG_ISDN_DRV_TELES $CONFIG_ISDN
...@@ -18,6 +18,9 @@ ifeq ($(CONFIG_ISDN),y) ...@@ -18,6 +18,9 @@ ifeq ($(CONFIG_ISDN),y)
ifdef CONFIG_ISDN_PPP ifdef CONFIG_ISDN_PPP
L_OBJS += isdn_ppp.o L_OBJS += isdn_ppp.o
endif endif
ifdef CONFIG_ISDN_AUDIO
L_OBJS += isdn_audio.o
endif
else else
ifeq ($(CONFIG_ISDN),m) ifeq ($(CONFIG_ISDN),m)
M_OBJS += isdn.o M_OBJS += isdn.o
...@@ -27,6 +30,9 @@ else ...@@ -27,6 +30,9 @@ else
ifdef CONFIG_ISDN_PPP ifdef CONFIG_ISDN_PPP
O_OBJS += isdn_ppp.o O_OBJS += isdn_ppp.o
endif endif
ifdef CONFIG_ISDN_AUDIO
O_OBJS += isdn_audio.o
endif
endif endif
endif endif
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -38,7 +38,6 @@ ...@@ -38,7 +38,6 @@
#undef ISDN_DEBUG_AT #undef ISDN_DEBUG_AT
#undef ISDN_DEBUG_NET_DUMP #undef ISDN_DEBUG_NET_DUMP
#undef ISDN_DEBUG_NET_DIAL #undef ISDN_DEBUG_NET_DIAL
#undef ISDN_DEBUG_NET_BUILDHDR
#undef ISDN_DEBUG_NET_ICALL #undef ISDN_DEBUG_NET_ICALL
/* Prototypes */ /* Prototypes */
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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