Commit 9334eab8 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.1.27

parent f613de21
......@@ -26,7 +26,7 @@ HTML-ized shopping list.
http://www.datanet.hu/generations/linux/Changes2.html is an
English-language HTML version.
Last updated: January 29, 1997.
Last updated: February 11, 1997.
Current Author: Chris Ricker (gt1355b@prism.gatech.edu).
Current Minimal Requirements
......@@ -47,6 +47,7 @@ encountered a bug!
- Net-tools 1.32-alpha
- Kbd 0.91
- Loadlin 1.6a
- Sh-utils 1.16
Upgrade notes
*************
......@@ -136,6 +137,13 @@ Loadlin
Linux 2.1.22 and later releases use a new method of memory size
detection, requiring loadlin users to upgrade to loadlin-1.6a.
Sh-utils
========
As of Linux-2.1.26, the Configure script ("make config") has been
updated to be POSIX-compliant. As a result, your expr needs to be
updated. Use sh-utils 1.16 or later.
How to know the version of the installed programs
*************************************************
......@@ -155,6 +163,7 @@ Procps: ps --version
SysVinit: strings `egrep -li INIT_VERSION=sysvinit- /proc/*/environ | head
-1` | egrep -i INIT_VERSION=sysvinit-
RPM: rpm --version
Sh-utils: expr --v
Where to get the files
**********************
......@@ -254,6 +263,13 @@ The 1.6a release:
ftp://ftp.suse.com/pub/loadlin/update-1.6a/loadlin.exe.gz
ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/update-1.6a/loadlin.exe.gz
Sh-utils
========
The 1.16 release
ftp://sunsite.unc.edu/pub/gnu/sh-utils-1.16.tar.gz
ftp://prep.ai.mit.edu/pub/gnu/sh-utils-1.16.tar.gz
Other Info
==========
......
......@@ -1217,8 +1217,8 @@ CONFIG_ATALK
IP-over-DDP support
CONFIG_IPDDP
This allows IP networking for users who only have Appletalk
networking available. It doesn't work yet in 2.1.xx, so you
should say N.
networking available. This feature is experimental. Please see
http://www.maths.unm.edu/~bradford/ltpc.html
LocalTalk PC card support
CONFIG_LTPC
......@@ -1229,7 +1229,8 @@ CONFIG_LTPC
This driver is experimental, which means that it may not work.
In particular the module support is not yet working for the 2.1.xx
kernels, so choose Y or N, but not M for now.
See README.ltpc in the drivers/net directory.
See README.ltpc in the drivers/net directory, and the web site
http://www.math.unm.edu/~bradford/ltpc.html
Amateur Radio AX.25 Level 2
CONFIG_AX25
......@@ -2214,26 +2215,12 @@ CONFIG_SOUNDMODEM_AFSK1200
compatible to popular modems using TCM3105 or AM7911. The demodulator
requires about 12% of the CPU power of a Pentium 75 CPU per channel.
Soundmodem 1200 baud AFSK using floating point
CONFIG_SOUNDMODEM_AFSK1200_FP
This option enables floating point calculations to be used for the
AFSK1200 baud modem. The Intel Pentium is a perverted chip because
integer multiplications are, although easier to implement in silicon,
an order of magnitude slower than floating point calculations.
Enabling this option uses a highly optimized assembler routine for
correlations, modeled after the one published by Phil Karn, KA9Q.
This reduces the computing power needed on Intel Pentium chips to
about 50%. On the other hand, Pentium clones with faster integer
multiply and slower floating point multiply will probably take
longer with this option turned on. As a rule of thumb, enable it for
Intel Pentium and Pentium Pro processors, and disable it for
anything else.
I (sailer@ife.ee.ethz.ch) am very interested in figures. If you are
willing to give me a feedback, please compile the driver once with
this option enabled and once with it disabled, and send me the cycle
counter numbers obtained with both compilations, and your exact
chip. The cycle counter numbers can be obtained with a recent
sethdlc utility.
Soundcard modem support for 4800 baud HAPN-1 modulation
CONFIG_SOUNDMODEM_HAPN4800
This option enables the soundmodem driver 4800 baud HAPN-1 compatible
modem. This modulation seems to be widely used 'down under' and in
the netherlands. Here, nobody uses it, so I could not test if it works.
It is compatible to itself, however :-)
Soundcard modem support for 9600 baud FSK G3RUH modulation
CONFIG_SOUNDMODEM_FSK9600
......@@ -2244,6 +2231,25 @@ CONFIG_SOUNDMODEM_FSK9600
can only use one protocol at a time, depending on what the other end
can understand).
Soundcard modem support using floating point arithmetic
CONFIG_SOUNDMODEM_FLOAT
This option enables floating point calculations to be used for the
AFSK1200 baud modem. The Intel Pentium is a perverted chip because
integer multiplications are, altough easier to implement in silicon,
an order of a magnitude slower than floating point calculations.
Enabling this option uses a highly optimized assembler routine for
correlations, modelled after the one published by Phil Karn, KA9Q.
This reduces the computing power needed on Intel Pentium chips to about
50%. On the other hand, Pentium clones with faster integer multiply and
slower floating point multiply will probably take longer with this
option turned on. As a rule of thumb, enable it for Intel Pentium and
Pentium Pro processors, and disable it for anything else.
I (sailer@ife.ee.ethz.ch) am very interested in figures. If you are
willing to give me a feedback, please compile the driver once with this
option enabled and once with it disabled, and send me the cycle counter
numbers obtained with both compilations, and your exact chip. The cycle
counter numbers can be optained by a recent sethdlc utility.
Serial port KISS driver for AX.25
CONFIG_MKISS
KISS is the protocol used to send IP traffic over AX.25 radio
......@@ -4473,8 +4479,8 @@ CONFIG_ISDN_AUDIO
(mgetty+sendfax by gert@greenie.muc.de with an extension, available
with the ISDN utility package for example), you will be able to use
your Linux box as an ISDN-answering machine. Of course, this must be
supported by the lowlevel driver also. Currently, the Teles driver
is the only voice-supporting one. See
supported by the lowlevel driver also. Currently, the Teles and HiSax
drivers are the only voice-supporting drivers. See
Documentation/isdn/README.audio for more information.
ICN 2B and 4B support
......@@ -4493,14 +4499,77 @@ CONFIG_ISDN_DRV_ICN
Teles, NICCY1016PC, Creatix support
CONFIG_ISDN_DRV_TELES
This enables support for the Teles ISDN-cards S0-16.0, S0-16.3, S0-8
and many compatibles. By default, the driver is configured to
support a 16.0-type using EDSS1-protocol. See
Documentation/isdn/README on how to configure it using 16.3, a
different D-channel protocol, or non-standard irq/port/shmem
settings. If you want to compile this as a module ( = code which can
be inserted in and removed from the running kernel whenever you
want), say M here and read Documentation/modules.txt. The module
will be called teles.o.
and many compatibles.
There is a new, heavily improved driver called HiSax which can be
enabled in the next section. This driver will be removed soon. Please
use this driver only if you cannot get the HiSax driver working.
By default, the driver is configured to support a 16.0-type using
EDSS1-protocol. See Documentation/isdn/README on how to configure
it using 16.3, a different D-channel protocol, or non-standard
irq/port/shmem settings.
HiSax SiemensChipSet driver support
CONFIG_ISDN_DRV_HISAX
This is an alternative driver supporting the Siemens chipset on
various ISDN-cards (like AVM A1, Elsa ISDN cards, Teles S0-16.0,
Teles S0-16.3, Teles S0-8, Teles/Creatix PnP, ITK micro ix1 and
many compatibles). It's a complete rewrite of the original Teles
driver. So you either say M or Y here and N in the above Teles
section.
See Documentation/isdn/README.HiSax for further informations on
using this driver.
HiSax Support for Teles 16.0/8.0
CONFIG_HISAX_16_0
This enables HiSax support for the Teles ISDN-cards S0-16.0,
S0-8 and many compatibles.
See Documentation/isdn/README.HiSax on how to configure it
using the different cards, a different D-channel protocol, or
non-standard irq/port/shmem settings.
HiSax Support for Teles 16.3 or PNP or PCMCIA
CONFIG_HISAX_16_3
This enables HiSax support for the Teles ISDN-cards S0-16.3
the Teles/Creatix PnP and the Teles PCMCIA.
See Documentation/isdn/README.HiSax on how to configure it
using the different cards, a different D-channel protocol, or
non-standard irq/port/shmem settings.
HiSax Support for AVM A1 (Fritz)
CONFIG_HISAX_AVM_A1
This enables HiSax support for the AVM A1 (aka "Fritz").
See Documentation/isdn/README.HiSax on how to configure it
using the different cards, a different D-channel protocol, or
non-standard irq/port/shmem settings.
HiSax Support for Elsa cards
CONFIG_HISAX_ELSA_PCC
This enables HiSax support for the Elsa Mircolink cards and
for the Elsa Quickstep series cards.
See Documentation/isdn/README.HiSax on how to configure it
using the different cards, a different D-channel protocol, or
non-standard irq/port/shmem settings.
HiSax Support for ITK ix1-micro Revision 2
CONFIG_HISAX_IX1MICROR2
This enables HiSax support for the ITK ix1-micro Revision 2 card.
See Documentation/isdn/README.HiSax on how to configure it
using the different cards, a different D-channel protocol, or
non-standard irq/port/shmem settings.
HiSax Support for EURO/DSS1
CONFIG_HISAX_EURO
You should choose your D-channel protocol your local
telephone service provider uses here by saying Y or N.
NOTE: This is mutually exclusive with HiSax Support for
german 1TR6 if you have only one ISDN card installed.
HiSax Support for german 1TR6
CONFIG_HISAX_1TR6
You should choose your D-channel protocol your local
telephone service provider uses here by saying Y or N.
NOTE: This is mutually exclusive with HiSax Support for
EURO/DSS1 if you have only one ISDN card installed.
PCBIT-D support
CONFIG_ISDN_DRV_PCBIT
......@@ -4514,6 +4583,13 @@ CONFIG_ISDN_DRV_PCBIT
whenever you want), say M here and read
Documentation/modules.txt. The module will be called pcbit.o.
Spellcaster support (EXPERIMENTAL)
CONFIG_ISDN_DRV_SC
This enables support for the Spellcaster BRI boards. This driver
currently builds in a modularized version only.
See Documentation/isdn/README.sc and http://www.spellcast.com
for more information.
Support for AP1000 multicomputer
CONFIG_AP1000
This enables support for a sparc based parallel multi-computer
......
......@@ -12,11 +12,18 @@ Volker G
For contribution of man-pages, the imontty-tool and a perfect
maintaining of the mailing-list at hub-wue.
Bernhard Hailer (Bernhard.Hailer@lrz.uni-muenchen.de)
For maintaining the FAQ.
Michael 'Ghandi' Herold (michael@abadonna.franken.de)
For contribution of the vbox answering machine.
Michael Hipp (Michael.Hipp@student.uni-tuebingen.de)
For his Sync-PPP-code.
Karsten Keil (isdn4@temic-ech.spacenet.de)
For adding 1TR6-support to the Teles-driver.
For the HiSax-driver.
Michael Knigge (knick@cove.han.de)
For contributing the imon-tool
......@@ -39,7 +46,7 @@ Max Riegel (riegel@max.franken.de)
Gerhard 'Fido' Schneider (fido@wuff.franken.de)
For heavy-duty-beta-testing with his BBS ;)
Thomas Uhl (uhl@hn-net.de)
Thomas Uhl (uhl@think.de)
For distributing the cards.
For pushing me to work ;-)
This diff is collapsed.
......@@ -27,7 +27,14 @@ README for the ISDN-subsystem
subscribe isdn4linux <your_email_address>
To write to the mailing-list, write to isdn4linux@hub-wue.franken.de
This mailinglist is bidirectionally gated to the newsgroup
de.alt.comm.isdn4linux
There is also a well maintained FAQ (both english and german) available
at ftp.franken.de in /pub/isdn4linux/FAQ/
This FAQ is also available at http://www.lrz-muenchen.de/~ui161ab/www/isdn/
1.1 Technical details
......@@ -89,6 +96,7 @@ README for the ISDN-subsystem
ATI Return "ISDN for Linux...".
ATI0 "
ATI1 "
ATI2 Report of last connection.
ATO On line (data mode).
ATQ0 Enable result codes (default).
ATQ1 Disable result codes (default).
......@@ -173,6 +181,10 @@ README for the ISDN-subsystem
1 = T.70 protocol (Only for BTX!) on
Bit 2: 0 = Don't hangup on DTR low.
1 = Hangup on DTR low.
Bit 3: 0 = Standard response messages
1 = Extended response messages
Bit 4: 0 = CALLER NUMBER before every RING.
1 = CALLER NUMBER after first RING.
14 0 Layer-2 protocol:
0 = X75/LAPB with I-frames
1 = X75/LAPB with UI-frames
......@@ -201,6 +213,14 @@ README for the ISDN-subsystem
20 0 Bit coded register (readonly)
Service-Octet-1 of last call.
Bit mapping is the same like register 18
21 0 Bit coded register (readonly)
Set on incoming call (during RING) to
octet 3 of calling party number IE (Numbering plan)
See section 4.5.10 of ITU Q.931
22 0 Bit coded register (readonly)
Set on incoming call (during RING) to
octet 3a of calling party number IE (Screening info)
See section 4.5.10 of ITU Q.931
Last but not least a (at the moment fairly primitive) device to request
the line-status (/dev/isdninfo) is made available.
......@@ -243,16 +263,11 @@ README for the ISDN-subsystem
2 System prerequisites:
ATTENTION! The program "insmod" from the Package "modules-1.2.8" (It's
on nearly all newer distributions) has a bug, which makes
it impossible to set both driver-Id's when loading the
icn-module for the Double-ICN-Card. A patch is supplied
in the utility-package called "insmod-1.2.8.patch". Change into
the source-directory of insmod, and type
"patch < insmod-1.2.8.patch". Then recompile it. This will fix
the bug.
This bug does NOT occur when using insmod with the Teles-driver
or a single ICN-card.
ATTENTION!
Always use the latest module utilities. The current version is
named in Documentation/Changes. Some old versions of insmod
are not capable of setting the driver-Ids correctly.
3. Lowlevel-driver configuration.
......
This diff is collapsed.
$Id: README.audio,v 1.3 1996/06/05 02:19:36 fritz Exp $
$Id: README.audio,v 1.4 1997/02/03 23:43:47 fritz Exp $
ISDN subsystem for Linux.
Description of audio mode.
......@@ -86,8 +86,11 @@ General behavior and description of data formats/protocol.
starts sending audio data to the application. There are several
escape sequences defined, all using DLE (0x10) as Escape char:
<DLE><ETX> End of audio data. Emulator stops
<DLE><ETX> End of audio data. (i.e. caused by a
hangup of the remote side) Emulator stops
recording, responding with VCON.
<DLE><DC4> Abort recording, (send by appl.) Emulator
stops recording, sends DLE,ETX.
<DLE><DLE> Escape sequence for DLE in data stream.
<DLE>0 Touchtone "0" received.
...
......@@ -107,13 +110,16 @@ General behavior and description of data formats/protocol.
<DLE>s silence. Silence detected from the
start of recording.
Any character sent by the application, except XON (0x11) or XOFF (0x13)
immediately stops recording.
Audio playback.
When sending audio data, upon AT+VTX command, emulator responds with
CONNECT, and starts transferring data from application to the phone line.
The same DLE sequences apply to this mode.
Full-Duplex-Audio:
When _both_ commands for recording and playback are given in _one_
AT-command-line (i.e.: "AT+VTX+VRX"), full-duplex-mode is selected.
In this mode, the only way to stop recording is sending <DLE><DC4>
and the only way to stop playback is to send <DLE><ETX>.
This diff is collapsed.
With the version of the AX.25, NET/ROM and Rose protocol stacks provided in
the Linux kernel from 2.1.9 onwards, a change has occurred in the
configuration of the protocols. With previous versions such changes were
made via ioctl calls, but now use is being made of the sysctl interface.
To use the amateur radio protocols within Linux you will need to get a
suitable copy of the AX.25 Utilities. More detailed information about these
and associated programs can be found on http://www.cs.nott.ac.uk/~jsn/.
Each AX.25 device will be represented in the directory /proc/sys/net/ax25,
in the form "dev.parms" where dev is the device name, eg ax0. In it are a
string of numbers that represent different values for the different
parameters, they are:
No. Name Meaning Default
1 IP Default Mode 0=DG 1=VC 0
2 AX.25 Default Mode 0=Normal 1=Extended 0
3 Allow Vanilla Connects 0=No 1=Yes 1
4 Backoff 0=None 1=Linear 2=Exponential 1
5 Connected Mode 0=No 1=Yes 1
6 Standard Window 1 <= N <= 7 2
7 Extended Window 1 <= N <= 63 32
8 T1 Timeout 1s <= N <= 30s 10s
9 T2 Timeout 1s <= N <= 20s 3s
10 T3 Timeout 0s <= N <= 3600s 300s
11 Idle Timeout 0m <= N 20m
12 N2 1 <= N <= 31 10
13 AX.25 MTU 1 <= N <= 512 256
14 Max Queue 1 <= N <= 20 2
15 Digipeater Mode 0=None 1=Inband 2=XBand 3=Both 3
In the above list T1, T2 and T3 are given in seconds, and the Idle Timeout
is given in minutes. But please note that the values used in the sysctl
interface are given in internal units where the time in seconds is
multiplied by 10, this allows resolution down to 1/10 of a second. With
timers that are allowed to be zero, eg T3 and Idle, a zero value indicates
that the timer is disabled.
With NET/ROM and Rose protocol stacks, the entries in /proc/sys/net/netrom
and /proc/sys/net/rose are more obvious. Each file in these directories has
a name more in keeping with its function, and will not be explained in any
greater depth here. As with the AX.25 sysctl entries, timers operate with a
resolution of 100ms and so values should be written accordingly.
It is possible that the AX.25 sysctl interface will change in the future and
become more user friendly.
For more information about the AX.25 and NET/ROM protocol stacks, see the
AX25-HOWTO written by Terry Dawson <terry@perf.no.itg.telstra.com.au> who is
also the AX.25 Utilities maintainer.
For more information about the AX.25, NET/ROM and ROSE protocol stacks, see
the AX25-HOWTO written by Terry Dawson <terry@perf.no.itg.telstra.com.au>
who is also the AX.25 Utilities maintainer.
There is an active mailing list for discussing Linux amateur radio matters
called linux-hams. To subscribe to it, send a message to
majordomo@vger.rutgers.edu with the words "subscribe linux-hams" in the body
Majordomo@vger.rutgers.edu with the words "subscribe linux-hams" in the body
of the message, the subject field is ignored.
Jonathan G4KLX
......
......@@ -81,6 +81,7 @@ P: Paul Gortmaker
M gpg109@rsphy1.anu.edu.au
L: linux-net@vger.rutgers.edu
S: Maintained
W: http://rsphy1.anu.edu.au/~gpg109/ne2000.html
ETHEREXPRESS-16 NETWORK DRIVER
P: Philip Blundell
......
VERSION = 2
PATCHLEVEL = 1
SUBLEVEL = 26
SUBLEVEL = 27
ARCH = i386
......@@ -11,7 +11,7 @@ ARCH = i386
#
# NOTE! SMP is experimental. See the file Documentation/SMP.txt
#
# SMP = 1
SMP = 1
#
# SMP profiling options
# SMP_PROF = 1
......@@ -330,6 +330,9 @@ mrproper: clean
rm -f drivers/sound/local.h drivers/sound/.defines
rm -f drivers/scsi/aic7xxx_asm drivers/scsi/aic7xxx_seq.h
rm -f drivers/char/uni_hash.tbl drivers/char/conmakehash
rm -f drivers/net/soundmodem/sm_tbl_{afsk1200,afsk2666,fsk9600}.h
rm -f drivers/net/soundmodem/sm_tbl_{hapn4800,psk4800}.h
rm -f drivers/net/soundmodem/gentbl
rm -f .version .config* config.in config.old
rm -f scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp
rm -f scripts/lxdialog/*.o scripts/lxdialog/lxdialog
......
......@@ -123,7 +123,7 @@ entInt:
SAVE_ALL
/* start atomic operation with respect to software interrupts */
lda $0,intr_count
ldq $1,0($0)
ldl $1,0($0)
addq $1,1,$1
stq $1,0($0)
/* set up the arguments to the C interrupt handler */
......@@ -131,7 +131,7 @@ entInt:
jsr $26,do_entInt
/* ok, return */
lda $0,intr_count
ldq $1,0($0)
ldl $1,0($0)
subq $1,1,$1
stq $1,0($0)
br $31,ret_from_sys_call
......@@ -527,7 +527,7 @@ ret_from_sys_call:
cmovne $26,0,$19 /* $19 = 0 => non-restartable */
/* check bottom half interrupts */
lda $0,intr_count
ldq $1,0($0)
ldl $1,0($0)
bne $1,ret_from_handle_bh
lda $2,bh_active
ldq $3,0($2)
......@@ -622,7 +622,7 @@ handle_bottom_half:
* We're called with $0 containing the address of
* 'intr_count' and $1 containing 'intr_count+1'
*/
stq $1,0($0) /* intr_count = 1 */
stl $1,0($0) /* intr_count = 1 */
subq $30,16,$30
stq $19,0($30) /* save syscall nr */
stq $20,8($30) /* and error indication (a3) */
......@@ -631,7 +631,7 @@ handle_bottom_half:
ldq $19,0($30)
ldq $20,8($30)
addq $30,16,$30
stq $31,0($0) /* intr_count = 0 */
stl $31,0($0) /* intr_count = 0 */
br $31,ret_from_handle_bh
.align 3
......
......@@ -26,8 +26,8 @@ CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
# CONFIG_M386 is not set
# CONFIG_M486 is not set
CONFIG_M586=y
# CONFIG_M686 is not set
# CONFIG_M586 is not set
CONFIG_M686=y
# CONFIG_VIDEO_SELECT is not set
#
......@@ -48,7 +48,7 @@ CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_CMD640=y
# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
CONFIG_BLK_DEV_RZ1000=y
# CONFIG_BLK_DEV_TRITON is not set
CONFIG_BLK_DEV_TRITON=y
# CONFIG_IDE_CHIPSETS is not set
#
......@@ -92,7 +92,51 @@ CONFIG_SKB_LARGE=y
#
# SCSI support
#
# CONFIG_SCSI is not set
CONFIG_SCSI=y
#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_BLK_DEV_SR is not set
# CONFIG_CHR_DEV_SG is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
#
# SCSI low-level drivers
#
# CONFIG_SCSI_7000FASST is not set
# CONFIG_SCSI_AHA152X is not set
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
CONFIG_SCSI_BUSLOGIC=y
# CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA_DMA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_SEAGATE is not set
# CONFIG_SCSI_T128 is not set
# CONFIG_SCSI_U14_34F is not set
# CONFIG_SCSI_ULTRASTOR is not set
#
# Network device support
......@@ -102,15 +146,16 @@ CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
# CONFIG_EQUALIZER is not set
CONFIG_NET_ETHERNET=y
CONFIG_NET_VENDOR_3COM=y
# CONFIG_EL1 is not set
# CONFIG_EL2 is not set
CONFIG_EL3=y
# CONFIG_VORTEX is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_EISA is not set
CONFIG_NET_EISA=y
# CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set
CONFIG_DE4X5=y
# CONFIG_DEC_ELCP is not set
# CONFIG_DGRS is not set
# CONFIG_NET_POCKET is not set
# CONFIG_FDDI is not set
# CONFIG_DLCI is not set
......@@ -139,7 +184,7 @@ CONFIG_MINIX_FS=y
CONFIG_EXT2_FS=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
# CONFIG_VFAT_FS is not set
CONFIG_VFAT_FS=y
# CONFIG_UMSDOS_FS is not set
CONFIG_PROC_FS=y
CONFIG_NFS_FS=y
......@@ -162,7 +207,12 @@ CONFIG_SERIAL=y
# CONFIG_RISCOM8 is not set
# CONFIG_ESPSERIAL is not set
# CONFIG_PRINTER is not set
# CONFIG_MOUSE is not set
CONFIG_MOUSE=y
# CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set
# CONFIG_MS_BUSMOUSE is not set
CONFIG_PSMOUSE=y
CONFIG_82C710_MOUSE=y
# CONFIG_UMISC is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_FTAPE is not set
......
......@@ -163,7 +163,7 @@ ret_from_smpfork:
ALIGN
handle_bottom_half:
pushl $9f
pushl $2f
jmp SYMBOL_NAME(do_bottom_half)
ALIGN
......@@ -183,14 +183,20 @@ ENTRY(system_call)
movl %eax,EAX(%esp) # save the return value
ALIGN
.globl ret_from_sys_call
.globl ret_from_intr
ret_from_intr:
ret_from_sys_call:
GET_CURRENT(%ebx)
cmpl $0,SYMBOL_NAME(intr_count)
#ifdef __SMP__
jne 2f
#else
jne 1f
#endif
9: movl SYMBOL_NAME(bh_mask),%eax
andl SYMBOL_NAME(bh_active),%eax
jne handle_bottom_half
movl EFLAGS(%esp),%eax # mix EFLAGS and CS
2: movl EFLAGS(%esp),%eax # mix EFLAGS and CS
movb CS(%esp),%al
testl $(VM_MASK | 3),%eax # return to VM86 mode or non-supervisor?
je 1f
......@@ -201,7 +207,8 @@ ret_from_sys_call:
notl %eax
andl signal(%ebx),%eax
jne signal_return
1: RESTORE_ALL
1:
RESTORE_ALL
ALIGN
signal_return:
testl $(VM_MASK),EFLAGS(%esp)
......
......@@ -88,14 +88,11 @@ struct sel_arg_struct {
asmlinkage int old_select(struct sel_arg_struct *arg)
{
struct sel_arg_struct a;
int ret;
if (copy_from_user(&a, arg, sizeof(a)))
return -EFAULT;
lock_kernel();
ret = sys_select(a.n, a.inp, a.outp, a.exp, a.tvp);
unlock_kernel();
return ret;
/* sys_select() does the appropriate kernel locking */
return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp);
}
/*
......
......@@ -33,6 +33,10 @@
#include <linux/config.h>
extern int setup_x86_irq(int, struct irqaction *);
extern volatile unsigned long lost_ticks;
/* change this if you have some constant time drift */
#define USECS_PER_JIFFY (1000020/HZ)
#ifndef CONFIG_APM /* cycle counter may be unreliable */
/* Cycle counter value at the previous timer interrupt.. */
......@@ -41,11 +45,6 @@ static struct {
unsigned long high;
} init_timer_cc, last_timer_cc;
extern volatile unsigned long lost_ticks;
/* change this if you have some constant time drift */
#define USECS_PER_JIFFY (1000020/HZ)
static unsigned long do_fast_gettimeoffset(void)
{
register unsigned long eax asm("ax");
......
......@@ -434,10 +434,10 @@ int handle_vm86_trap(struct kernel_vm86_regs * regs, long error_code, int trapno
if ( (trapno==3) || (trapno==1) )
return_to_32bit(regs, VM86_TRAP + (trapno << 8));
do_int(regs, trapno, (unsigned char *) (regs->ss << 4), SP(regs));
return 1;
return 0;
}
if (trapno !=1)
return 0; /* we let this handle by the calling routine */
return 1; /* we let this handle by the calling routine */
if (current->flags & PF_PTRACED)
current->blocked &= ~(1 << (SIGTRAP-1));
send_sig(SIGTRAP, current, 1);
......
......@@ -585,7 +585,7 @@ void ll_rw_swap_file(int rw, kdev_t dev, unsigned int *b, int nb, char *buf)
for (; j < 8 && i < nb; j++, i++, buf += buffersize)
{
rdev = dev;
rsector = (b[i] * buffersize) >> 9;
rsector = b[i] * (buffersize >> 9);
#ifdef CONFIG_BLK_DEV_MD
if (major==MD_MAJOR &&
md_map (MINOR(dev), &rdev,
......
......@@ -8,6 +8,7 @@
* LPCAREFUL, LPABORT, LPGETSTATUS added by Chris Metcalf, metcalf@lcs.mit.edu
* Statistics and support for slow printers by Rob Janssen, rob@knoware.nl
* "lp=" command line parameters added by Grant Guenther, grant@torque.net
* lp_read (Status readback) support added by Carsten Gross, carsten@sol.wohnheim.uni-ulm.de
*/
#include <linux/module.h>
......@@ -316,6 +317,116 @@ static long long lp_lseek(struct inode * inode, struct file * file,
return -ESPIPE;
}
/* Test if nibble mode for status readback is okay.
* returns false if not, otherwise true
*/
static int lp_nibble_mode_ok(int minor)
{
int reply=1;
outb_p(0, LP_B(minor)); /* Request "nibble mode" */
udelay(LP_DELAY);
outb((inb(LP_C(minor)) & ~8), LP_C(minor)); /* SelectIN low */
outb((inb(LP_C(minor)) | 2), LP_C(minor)); /* AutoFeed high */
udelay(LP_DELAY);
outb((inb(LP_C(minor)) | 1), LP_C(minor)); /* Strobe high */
if (( LP_S(minor) & ~0x80) != 0x38) reply=0; /* expected answer? */
outb((inb(LP_C(minor)) & ~1 ), LP_C(minor)); /* Strobe low */
outb((inb(LP_C(minor)) & ~2 ), LP_C(minor)); /* Autofeed low */
udelay(LP_DELAY);
return(reply);
}
static int lp_read_nibble(int minor)
{
unsigned char i;
i=LP_S(minor)>>3;
i&=~8;
if ( ( i & 0x10) == 0) i|=8;
return(i & 0x0f);
}
static void lp_select_in_high(int minor) {
outb((inb(LP_C(minor)) | 8), LP_C(minor));
}
/* Status readback confirming to ieee1284 */
static long lp_read(struct inode * inode, struct file * file,
char * buf, unsigned long count)
{
unsigned char z=0, Byte=0, status;
char *temp;
int retval;
unsigned int counter=0;
unsigned int i;
unsigned int minor=MINOR(inode->i_rdev);
temp=buf;
#ifdef LP_READ_DEBUG
printk(KERN_INFO "lp%d: read mode\n", minor);
#endif
retval = verify_area(VERIFY_WRITE, buf, count);
if (retval)
return retval;
if (lp_nibble_mode_ok(minor)==0) {
lp_select_in_high(minor);
return temp-buf; /* End of file */
}
for (i=0; i<=(count*2); i++) {
outb((inb(LP_C(minor)) | 2), LP_C(minor)); /* AutoFeed high */
do {
status=(LP_S(minor) & 0x40);
udelay(50);
counter++;
if (need_resched)
schedule();
} while ( (status == 0x40) && (counter < 20) );
if ( counter == 20 ) { /* Timeout */
#ifdef LP_READ_DEBUG
printk(KERN_DEBUG "lp_read: (Autofeed high) timeout\n");
#endif
outb((inb(LP_C(minor)) & ~2), LP_C(minor));
lp_select_in_high(minor);
return temp-buf; /* end the read at timeout */
}
counter=0;
z=lp_read_nibble(minor);
outb((inb(LP_C(minor)) & ~2), LP_C(minor)); /* AutoFeed low */
do {
status=(LP_S(minor) & 0x40);
udelay(20);
counter++;
if (need_resched)
schedule();
} while ( (status == 0) && (counter < 20) );
if (counter == 20) { /* Timeout */
#ifdef LP_READ_DEBUG
printk(KERN_DEBUG "lp_read: (Autofeed low) timeout\n");
#endif
if (current->signal & ~current->blocked) {
lp_select_in_high(minor);
if (temp !=buf)
return temp-buf;
else
return -EINTR;
}
current->state=TASK_INTERRUPTIBLE;
current->timeout=jiffies + LP_TIME(minor);
schedule();
}
counter=0;
if (( i & 1) != 0) {
Byte= (Byte | z<<4);
put_user(Byte, temp);
temp++;
} else Byte=z;
}
lp_select_in_high(minor);
return temp-buf;
}
static int lp_open(struct inode * inode, struct file * file)
{
unsigned int minor = MINOR(inode->i_rdev);
......@@ -524,7 +635,7 @@ static int lp_ioctl(struct inode *inode, struct file *file,
static struct file_operations lp_fops = {
lp_lseek,
NULL, /* lp_read */
lp_read,
lp_write,
NULL, /* lp_readdir */
NULL, /* lp_poll */
......
......@@ -12,3 +12,16 @@ 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 'Teles/NICCY1016PC/Creatix support' CONFIG_ISDN_DRV_TELES $CONFIG_ISDN
dep_tristate 'HiSax SiemensChipSet driver support' CONFIG_ISDN_DRV_HISAX $CONFIG_ISDN
if [ "$CONFIG_ISDN_DRV_HISAX" != "n" ]; then
bool 'HiSax Support for Teles 16.0/8.0' CONFIG_HISAX_16_0
bool 'HiSax Support for Teles 16.3 or PNP or PCMCIA' CONFIG_HISAX_16_3
bool 'HiSax Support for AVM A1 (Fritz)' CONFIG_HISAX_AVM_A1
bool 'HiSax Support for Elsa cards' CONFIG_HISAX_ELSA_PCC
bool 'HiSax Support for ITK ix1-micro Revision 2' CONFIG_HISAX_IX1MICROR2
bool 'HiSax Support for EURO/DSS1' CONFIG_HISAX_EURO
bool 'HiSax Support for german 1TR6' CONFIG_HISAX_1TR6
fi
if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then
dep_tristate 'Spellcaster support (EXPERIMENTAL)' CONFIG_ISDN_DRV_SC $CONFIG_ISDN
fi
SUB_DIRS :=
MOD_SUB_DIRS :=
ALL_SUB_DIRS := icn teles pcbit
ALL_SUB_DIRS := icn teles pcbit hisax
L_OBJS :=
LX_OBJS :=
......@@ -13,8 +13,8 @@ O_TARGET :=
ifeq ($(CONFIG_ISDN),y)
L_TARGET := isdn.a
L_OBJS += isdn_net.o isdn_tty.o isdn_cards.o
LX_OBJS += isdn_common.o
L_OBJS += isdn_common.o isdn_net.o isdn_tty.o isdn_cards.o
LX_OBJS += isdn_syms.o
ifdef CONFIG_ISDN_PPP
L_OBJS += isdn_ppp.o
endif
......@@ -25,8 +25,8 @@ else
ifeq ($(CONFIG_ISDN),m)
M_OBJS += isdn.o
O_TARGET += isdn.o
O_OBJS += isdn_net.o isdn_tty.o
OX_OBJS += isdn_common.o
O_OBJS += isdn_common.o isdn_net.o isdn_tty.o
OX_OBJS += isdn_syms.o
ifdef CONFIG_ISDN_PPP
O_OBJS += isdn_ppp.o
endif
......@@ -46,6 +46,16 @@ else
endif
endif
ifeq ($(CONFIG_ISDN_DRV_HISAX),y)
L_OBJS += hisax/hisax.o
SUB_DIRS += hisax
MOD_SUB_DIRS += hisax
else
ifeq ($(CONFIG_ISDN_DRV_HISAX),m)
MOD_SUB_DIRS += hisax
endif
endif
ifeq ($(CONFIG_ISDN_DRV_ICN),y)
L_OBJS += icn/icn.o
SUB_DIRS += icn
......@@ -66,5 +76,15 @@ else
endif
endif
ifeq ($(CONFIG_ISDN_DRV_SC),y)
L_OBJS += sc/sc.o
SUB_DIRS += sc
MOD_SUB_DIRS += sc
else
ifeq ($(CONFIG_ISDN_DRV_SC),m)
MOD_SUB_DIRS += sc
endif
endif
include $(TOPDIR)/Rules.make
L_OBJS :=
M_OBJS :=
O_OBJS := isdnl1.o config.o buffers.o tei.o isdnl2.o isdnl3.o \
q931.o callc.o fsm.o
# EXTRA_CFLAGS += -S
ifeq ($(CONFIG_HISAX_EURO),y)
O_OBJS += l3dss1.o
endif
ifeq ($(CONFIG_HISAX_1TR6),y)
O_OBJS += l3_1tr6.o
endif
ifeq ($(CONFIG_HISAX_16_0),y)
O_OBJS += teles0.o
endif
ifeq ($(CONFIG_HISAX_16_3),y)
O_OBJS += teles3.o
endif
ifeq ($(CONFIG_HISAX_AVM_A1),y)
O_OBJS += avm_a1.o
endif
ifeq ($(CONFIG_HISAX_ELSA_PCC),y)
O_OBJS += elsa.o
endif
ifeq ($(CONFIG_HISAX_IX1MICROR2),y)
O_OBJS += ix1_micro.o
endif
O_TARGET :=
ifeq ($(CONFIG_ISDN_DRV_HISAX),y)
O_TARGET += hisax.o
else
ifeq ($(CONFIG_ISDN_DRV_HISAX),m)
O_TARGET += hisax.o
M_OBJS += hisax.o
endif
endif
include $(TOPDIR)/Rules.make
This diff is collapsed.
/* $Id: avm_a1.h,v 1.2 1997/01/21 22:14:36 keil Exp $
*
* avm_a1.h Header for AVM A1 (Fritz) ISDN card
*
* Author Karsten Keil (keil@temic-ech.spacenet.de)
*
*
* $Log: avm_a1.h,v $
* Revision 1.2 1997/01/21 22:14:36 keil
* cleanups
*
* Revision 1.1 1996/10/12 21:42:40 keil
* Initial revision
*
*
*/
#define AVM_A1_STAT_ISAC 0x01
#define AVM_A1_STAT_HSCX 0x02
#define AVM_A1_STAT_TIMER 0x04
extern void avm_a1_report(struct IsdnCardState *sp);
extern void release_io_avm_a1(struct IsdnCard *card);
extern int setup_avm_a1(struct IsdnCard *card);
extern int initavm_a1(struct IsdnCardState *sp);
/* $Id: buffers.c,v 1.1 1996/10/13 20:04:49 keil Exp $
*
* Author Karsten Keil (keil@temic-ech.spacenet.de)
* based on the teles driver from Jan den Ouden
*
* Thanks to Jan den Ouden
* Fritz Elfert
*
* $Log: buffers.c,v $
* Revision 1.1 1996/10/13 20:04:49 keil
* Initial revision
*
*
*/
#define __NO_VERSION__
#include "hisax.h"
#include <linux/mm.h>
#include <linux/malloc.h>
#undef SMALLOC_DEBUG
void
BufPoolInit(struct BufPool *bp, int order, int bpps,
int maxpages)
{
#ifdef DEBUG_MAGIC
generateerror
bp->magic = 010167;
#endif
#if 0
printk(KERN_DEBUG "BufPoolInit bp %x\n", bp);
#endif
bp->freelist = NULL;
bp->pageslist = NULL;
bp->pageorder = order;
bp->pagescount = 0;
bp->bpps = bpps;
bp->bufsize = BUFFER_SIZE(order, bpps);
bp->maxpages = maxpages;
}
int
BufPoolAdd(struct BufPool *bp, int priority)
{
struct Pages *ptr;
byte *bptr;
int i;
struct BufHeader *bh = NULL, *prev, *first;
#if 0
printk(KERN_DEBUG "BufPoolAdd bp %x\n", bp);
#endif
ptr = (struct Pages *) __get_free_pages(priority, bp->pageorder, 0);
if (!ptr) {
printk(KERN_WARNING "BufPoolAdd couldn't get pages!\n");
return (-1);
}
#if 0
printk(KERN_DEBUG "Order %d pages allocated at %x\n", bp->pageorder, ptr);
#endif
ptr->next = bp->pageslist;
bp->pageslist = ptr;
bp->pagescount++;
bptr = (byte *) ptr + sizeof(struct Pages *);
i = bp->bpps;
first = (struct BufHeader *) bptr;
prev = NULL;
while (i--) {
bh = (struct BufHeader *) bptr;
#ifdef DEBUG_MAGIC
bh->magic = 020167;
#endif
bh->next = prev;
prev = bh;
bh->bp = bp;
bptr += PART_SIZE(bp->pageorder, bp->bpps);
}
first->next = bp->freelist;
bp->freelist = bh;
return (0);
}
void
BufPoolFree(struct BufPool *bp)
{
struct Pages *p;
#if 0
printk(KERN_DEBUG "BufPoolFree bp %x\n", bp);
#endif
while (bp->pagescount--) {
p = bp->pageslist->next;
free_pages((unsigned long) bp->pageslist, bp->pageorder);
#if 0
printk(KERN_DEBUG "Free pages %x order %d\n", bp->pageslist, bp->pageorder);
#endif
bp->pageslist = p;
}
}
int
BufPoolGet(struct BufHeader **bh,
struct BufPool *bp, int priority, void *heldby, int where)
{
long flags;
int i;
#ifdef DEBUG_MAGIC
if (bp->magic != 010167) {
printk(KERN_DEBUG "BufPoolGet: not a BufHeader\n");
return (-1);
}
#endif
save_flags(flags);
cli();
i = 0;
while (!0) {
if (bp->freelist) {
*bh = bp->freelist;
bp->freelist = bp->freelist->next;
(*bh)->heldby = heldby;
(*bh)->where = where;
restore_flags(flags);
return (0);
}
if ((i == 0) && (bp->pagescount < bp->maxpages)) {
if (BufPoolAdd(bp, priority)) {
restore_flags(flags);
return -1;
}
i++;
} else {
*bh = NULL;
restore_flags(flags);
return (-1);
}
}
}
void
BufPoolRelease(struct BufHeader *bh)
{
struct BufPool *bp;
long flags;
#ifdef DEBUG_MAGIC
if (bh->magic != 020167) {
printk(KERN_DEBUG "BufPoolRelease: not a BufHeader\n");
printk(KERN_DEBUG "called from %x\n", __builtin_return_address(0));
return;
}
#endif
bp = bh->bp;
#ifdef DEBUG_MAGIC
if (bp->magic != 010167) {
printk(KERN_DEBUG "BufPoolRelease: not a BufPool\n");
return;
}
#endif
save_flags(flags);
cli();
bh->next = bp->freelist;
bp->freelist = bh;
restore_flags(flags);
}
void
BufQueueLink(struct BufQueue *bq,
struct BufHeader *bh)
{
unsigned long flags;
save_flags(flags);
cli();
if (!bq->head)
bq->head = bh;
if (bq->tail)
bq->tail->next = bh;
bq->tail = bh;
bh->next = NULL;
restore_flags(flags);
}
void
BufQueueLinkFront(struct BufQueue *bq,
struct BufHeader *bh)
{
unsigned long flags;
save_flags(flags);
cli();
bh->next = bq->head;
bq->head = bh;
if (!bq->tail)
bq->tail = bh;
restore_flags(flags);
}
int
BufQueueUnlink(struct BufHeader **bh, struct BufQueue *bq)
{
long flags;
save_flags(flags);
cli();
if (bq->head) {
if (bq->tail == bq->head)
bq->tail = NULL;
*bh = bq->head;
bq->head = (*bh)->next;
restore_flags(flags);
return (0);
} else {
restore_flags(flags);
return (-1);
}
}
void
BufQueueInit(struct BufQueue *bq)
{
#ifdef DEBUG_MAGIC
bq->magic = 030167;
#endif
bq->head = NULL;
bq->tail = NULL;
}
void
BufQueueRelease(struct BufQueue *bq)
{
struct BufHeader *bh;
while (bq->head) {
BufQueueUnlink(&bh, bq);
BufPoolRelease(bh);
}
}
int
BufQueueLength(struct BufQueue *bq)
{
int i = 0;
struct BufHeader *bh;
bh = bq->head;
while (bh) {
i++;
bh = bh->next;
}
return (i);
}
void
BufQueueDiscard(struct BufQueue *q, int pr, void *heldby,
int releasetoo)
{
long flags;
struct BufHeader *sp;
save_flags(flags);
cli();
while (!0) {
sp = q->head;
if (!sp)
break;
if ((sp->primitive == pr) && (sp->heldby == heldby)) {
q->head = sp->next;
if (q->tail == sp)
q->tail = NULL;
if (releasetoo)
BufPoolRelease(sp);
} else
break;
}
sp = q->head;
if (sp)
while (sp->next) {
if ((sp->next->primitive == pr) && (sp->next->heldby == heldby)) {
if (q->tail == sp->next)
q->tail = sp;
if (releasetoo)
BufPoolRelease(sp->next);
sp->next = sp->next->next;
} else
sp = sp->next;
}
restore_flags(flags);
}
void
Sfree(byte * ptr)
{
#ifdef SMALLOC_DEBUG
printk(KERN_DEBUG "Sfree %x\n", (unsigned int)ptr);
#endif
kfree(ptr);
}
byte *
Smalloc(int size, int pr, char *why)
{
byte *p;
p = (byte *) kmalloc(size, pr);
#ifdef SMALLOC_DEBUG
printk(KERN_DEBUG "Smalloc %s size %d res %x\n", why, size, (unsigned int)p);
#endif
return (p);
}
This diff is collapsed.
/* $Id: config.c,v 1.11 1997/02/14 12:23:12 fritz Exp $
* Author Karsten Keil (keil@temic-ech.spacenet.de)
* based on the teles driver from Jan den Ouden
*
*
* $Log: config.c,v $
* Revision 1.11 1997/02/14 12:23:12 fritz
* Added support for new insmod parameter handling.
*
* Revision 1.10 1997/02/14 09:22:09 keil
* Final 2.0 version
*
* Revision 1.9 1997/02/10 11:45:09 fritz
* More changes for Kernel 2.1.X compatibility.
*
* Revision 1.8 1997/02/09 00:28:05 keil
* new interface handling, one interface per card
* default protocol now works again
*
* Revision 1.7 1997/01/27 15:56:57 keil
* Teles PCMCIA ITK ix1 micro added
*
* Revision 1.6 1997/01/21 22:17:56 keil
* new module load syntax
*
* Revision 1.5 1997/01/09 18:28:20 keil
* cosmetic cleanups
*
* Revision 1.4 1996/11/05 19:35:17 keil
* using config.h; some spelling fixes
*
* Revision 1.3 1996/10/23 17:23:28 keil
* default config changes
*
* Revision 1.2 1996/10/23 11:58:48 fritz
* Changed default setup to reflect user's selection of supported
* cards/protocols.
*
* Revision 1.1 1996/10/13 20:04:51 keil
* Initial revision
*
*
*
*/
#include <linux/types.h>
#include <linux/stddef.h>
#include <linux/timer.h>
#include <linux/config.h>
#include "hisax.h"
/*
* This structure array contains one entry per card. An entry looks
* like this:
*
* { type, protocol, p0, p1, p2, NULL }
*
* type
* 1 Teles 16.0 p0=irq p1=membase p2=iobase
* 2 Teles 8.0 p0=irq p1=membase
* 3 Teles 16.3 p0=irq p1=iobase
* 4 Creatix PNP p0=irq p1=IO0 (ISAC) p2=IO1 (HSCX)
* 5 AVM A1 (Fritz) p0=irq p1=iobase
* 6 ELSA PC [p0=iobase] or nothing (autodetect)
* 7 ELSA Quickstep p0=irq p1=iobase
* 8 Teles PCMCIA p0=irq p1=iobase
* 9 ITK ix1-micro p0=irq p1=iobase
*
*
* protocol can be either ISDN_PTYPE_EURO or ISDN_PTYPE_1TR6
*
*
*/
#ifdef CONFIG_HISAX_ELSA_PCC
#define DEFAULT_CARD ISDN_CTYPE_ELSA
#define DEFAULT_CFG {0,0,0}
#endif
#ifdef CONFIG_HISAX_AVM_A1
#undef DEFAULT_CARD
#undef DEFAULT_CFG
#define DEFAULT_CARD ISDN_CTYPE_A1
#define DEFAULT_CFG {10,0x340,0}
#endif
#ifdef CONFIG_HISAX_16_3
#undef DEFAULT_CARD
#undef DEFAULT_CFG
#define DEFAULT_CARD ISDN_CTYPE_16_3
#define DEFAULT_CFG {15,0x180,0}
#endif
#ifdef CONFIG_HISAX_16_0
#undef DEFAULT_CARD
#undef DEFAULT_CFG
#define DEFAULT_CARD ISDN_CTYPE_16_0
#define DEFAULT_CFG {15,0xd0000,0xd80}
#endif
#ifdef CONFIG_HISAX_IX1MICROR2
#undef DEFAULT_CARD
#undef DEFAULT_CFG
#define DEFAULT_CARD ISDN_CTYPE_IX1MICROR2
#define DEFAULT_CFG {5,0x390,0}
#endif
#ifdef CONFIG_HISAX_1TR6
#define DEFAULT_PROTO ISDN_PTYPE_1TR6
#define DEFAULT_PROTO_NAME "1TR6"
#endif
#ifdef CONFIG_HISAX_EURO
#undef DEFAULT_PROTO
#define DEFAULT_PROTO ISDN_PTYPE_EURO
#undef DEFAULT_PROTO_NAME
#define DEFAULT_PROTO_NAME "EURO"
#endif
#ifndef DEFAULT_PROTO
#define DEFAULT_PROTO ISDN_PTYPE_UNKNOWN
#define DEFAULT_PROTO_NAME "UNKNOWN"
#endif
#ifndef DEFAULT_CARD
#error "HiSax: No cards configured"
#endif
#define FIRST_CARD { \
DEFAULT_CARD, \
DEFAULT_PROTO, \
DEFAULT_CFG, \
NULL, \
}
#define EMPTY_CARD {0, DEFAULT_PROTO, {0, 0, 0}, NULL}
struct IsdnCard cards[] =
{
FIRST_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
EMPTY_CARD,
};
static char HiSaxID[96] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" \
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" \
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" \
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
char *HiSax_id = HiSaxID;
#ifdef MODULE
/* Variables for insmod */
int type[] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int protocol[] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int io[] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
#ifdef CONFIG_HISAX_16_3 /* For Creatix/Teles PnP */
int io0[] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int io1[] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
#endif
int irq[] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int mem[] =
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char *id = HiSaxID;
#if (LINUX_VERSION_CODE > 0x020111)
MODULE_AUTHOR("Karsten Keil");
MODULE_PARM(type, "1-16i");
MODULE_PARM(protocol, "1-16i");
MODULE_PARM(io, "1-16i");
MODULE_PARM(irq, "1-16i");
MODULE_PARM(mem, "1-16i");
MODULE_PARM(id, "s");
#ifdef CONFIG_HISAX_16_3 /* For Creatix/Teles PnP */
MODULE_PARM(io0, "1-16i");
MODULE_PARM(io1, "1-16i");
#endif
#endif
#endif
extern char *l1_revision;
extern char *l2_revision;
extern char *l3_revision;
extern char *l4_revision;
extern char *tei_revision;
char *
HiSax_getrev(const char *revision)
{
char *rev;
char *p;
if ((p = strchr(revision, ':'))) {
rev = p + 2;
p = strchr(rev, '$');
*--p = 0;
} else
rev = "???";
return rev;
}
int nrcards;
void
HiSax_mod_dec_use_count(void)
{
MOD_DEC_USE_COUNT;
}
void
HiSax_mod_inc_use_count(void)
{
MOD_INC_USE_COUNT;
}
#ifdef MODULE
#define HiSax_init init_module
#else
void
HiSax_setup(char *str, int *ints)
{
int i, j, argc;
argc = ints[0];
i = 0;
j = 1;
while (argc && (i < 16)) {
if (argc) {
cards[i].typ = ints[j];
j++;
argc--;
}
if (argc) {
cards[i].protocol = ints[j];
j++;
argc--;
}
if (argc) {
cards[i].para[0] = ints[j];
j++;
argc--;
}
if (argc) {
cards[i].para[1] = ints[j];
j++;
argc--;
}
if (argc) {
cards[i].para[2] = ints[j];
j++;
argc--;
}
i++;
}
if (strlen(str)) {
strcpy(HiSaxID, str);
HiSax_id = HiSaxID;
} else {
strcpy(HiSaxID, "HiSax");
HiSax_id = HiSaxID;
}
}
#endif
int
HiSax_init(void)
{
int i;
char tmp[64], rev[64];
char *r = rev;
int nzproto = 0;
nrcards = 0;
strcpy(tmp, l1_revision);
r += sprintf(r, "%s/", HiSax_getrev(tmp));
strcpy(tmp, l2_revision);
r += sprintf(r, "%s/", HiSax_getrev(tmp));
strcpy(tmp, l3_revision);
r += sprintf(r, "%s/", HiSax_getrev(tmp));
strcpy(tmp, l4_revision);
r += sprintf(r, "%s/", HiSax_getrev(tmp));
strcpy(tmp, tei_revision);
r += sprintf(r, "%s", HiSax_getrev(tmp));
printk(KERN_NOTICE "HiSax: Driver for Siemens chip set ISDN cards\n");
printk(KERN_NOTICE "HiSax: Version 2.0\n");
printk(KERN_NOTICE "HiSax: Revisions %s\n", rev);
#ifdef MODULE
if (id) /* If id= string used */
HiSax_id = id;
for (i = 0; i < 16; i++) {
cards[i].typ = type[i];
if (protocol[i]) {
cards[i].protocol = protocol[i];
nzproto++;
}
switch (type[i]) {
case ISDN_CTYPE_16_0:
cards[i].para[0] = irq[i];
cards[i].para[1] = mem[i];
cards[i].para[2] = io[i];
break;
case ISDN_CTYPE_8_0:
cards[i].para[0] = irq[i];
cards[i].para[1] = mem[i];
break;
case ISDN_CTYPE_16_3:
case ISDN_CTYPE_TELESPCMCIA:
cards[i].para[0] = irq[i];
cards[i].para[1] = io[i];
break;
#ifdef CONFIG_HISAX_16_3 /* For Creatix/Teles PnP */
case ISDN_CTYPE_PNP:
cards[i].para[0] = irq[i];
cards[i].para[1] = io0[i];
cards[i].para[2] = io1[i];
break;
#endif
case ISDN_CTYPE_A1:
cards[i].para[0] = irq[i];
cards[i].para[1] = io[i];
break;
case ISDN_CTYPE_ELSA:
cards[i].para[0] = io[i];
break;
case ISDN_CTYPE_ELSA_QS1000:
cards[i].para[0] = irq[i];
cards[i].para[1] = io[i];
break;
case ISDN_CTYPE_IX1MICROR2:
cards[i].para[0] = irq[i];
cards[i].para[1] = io[i];
break;
}
}
if (!nzproto) {
printk(KERN_WARNING "HiSax: Warning - no protocol specified\n");
printk(KERN_WARNING "HiSax: Note! module load syntax has changed.\n");
printk(KERN_WARNING "HiSax: using protocol %s\n", DEFAULT_PROTO_NAME);
}
#endif
if (!HiSax_id)
HiSax_id = HiSaxID;
if (!HiSaxID[0])
strcpy(HiSaxID, "HiSax");
for (i = 0; i < 16; i++)
if (cards[i].typ > 0)
nrcards++;
printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
nrcards, (nrcards > 1) ? "s" : "");
CallcNew();
Isdnl2New();
if (HiSax_inithardware()) {
/* Install only, if at least one card found */
/* No symbols to export, hide all symbols */
#ifdef MODULE
#if (LINUX_VERSION_CODE < 0x020111)
register_symtab(NULL);
#else
EXPORT_NO_SYMBOLS;
#endif
printk(KERN_NOTICE "HiSax: module installed\n");
#endif
return (0);
} else {
Isdnl2Free();
CallcFree();
return -EIO;
}
}
#ifdef MODULE
void
cleanup_module(void)
{
HiSax_closehardware();
printk(KERN_NOTICE "HiSax module removed\n");
}
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/* $Id: isdnl1.h,v 1.3 1996/12/08 19:41:55 keil Exp $
*
* $Log: isdnl1.h,v $
* Revision 1.3 1996/12/08 19:41:55 keil
* L2FRAME_DEBUG
*
* Revision 1.2 1996/10/27 22:26:27 keil
* ISAC/HSCX version functions
*
* Revision 1.1 1996/10/13 20:03:47 keil
* Initial revision
*
*
*
*/
#define L2FRAME_DEBUG
/* DEBUG Level */
#define L1_DEB_WARN 0x01
#define L1_DEB_INTSTAT 0x02
#define L1_DEB_ISAC 0x04
#define L1_DEB_ISAC_FIFO 0x08
#define L1_DEB_HSCX 0x10
#define L1_DEB_HSCX_FIFO 0x20
#define L1_DEB_LAPD 0x40
#define ISAC_RCVBUFREADY 0
#define ISAC_XMTBUFREADY 1
#define ISAC_PHCHANGE 2
#define HSCX_RCVBUFREADY 0
#define HSCX_XMTBUFREADY 1
extern void debugl1(struct IsdnCardState *sp, char *msg);
extern char *HscxVersion(byte v);
extern char *ISACVersion(byte v);
extern void hscx_sched_event(struct HscxState *hsp, int event);
extern void isac_sched_event(struct IsdnCardState *sp, int event);
extern void isac_new_ph(struct IsdnCardState *sp);
extern get_irq(int cardnr, void *routine);
extern void Logl2Frame(struct IsdnCardState *sp, struct BufHeader *ibh, char *buf, int dir);
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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