updating isdn4bsd to beta version 0.83

This commit is contained in:
hm 1999-08-06 14:05:10 +00:00
parent 629d9d690a
commit 1c8f239db0
65 changed files with 3882 additions and 545 deletions

View File

@ -3,7 +3,7 @@
ISDN4BSD Frequently Asked Questions
===================================
last edit-date: [Mon May 10 11:40:48 1999]
last edit-date: [Fri Jul 30 08:49:21 1999]
--------------------------------------------------------------------------------
@ -25,6 +25,14 @@ Contents:
12. NL: i'm getting CAUSE 100 or CAUSE 101 when dialling out
14. I'm using sPPP. I can connect to my ISP but no TCP/IP services work. HELP!
15. i4b 0.80.00: problems with AVM Fritz PCI
16. How do i setup logfile rotation for isdnd ?
17. How do i setup dialin from Windows NT RAS to i4b ?
18. How can I convert my old .g711a files to the new format?
19. I have lots of old .g711a files to convert what can I do?
20. How can I convert the .al files to Sun/NeXT .au/.snd/.vox files?
21. Help, isdn4bsd 0.82 fails to probe my Elsa PCC-16!
22. How do i enable and configure userland PPP with i4b ?
23. What is the procedure to install a new i4b on FreeBSD 3.x ?
1. How do I get started with synchronous PPP (sPPP) ?
@ -607,6 +615,7 @@ Bart
(from Bart van Leeuwen bart@ixori.demon.nl)
14. I'm using sPPP. I can connect to my ISP but no TCP/IP services work. HELP!
==============================================================================
@ -646,6 +655,7 @@ should start to blame the vendors...
Harold Gutch <logix@foobar.franken.de> and
Martin Husemann <martin@rumolt.teuto.de>).
15. i4b 0.80.00: problems with AVM Fritz PCI
==============================================================================
@ -693,3 +703,234 @@ kernel to compile cleanly.
(from Rich Wood, rich@dynamite.org)
16. How do i setup logfile rotation for isdnd ?
==============================================================================
For syslog-based logging:
-------------------------
man newsyslog (on FreeBSD)
You just add a line to /etc/newsyslog.conf:
/var/log/isdnd.log 664 7 100 * Z
and you are all done...
(From: Andreas Haakh <ah@alvman.RoBIN.de>)
For logfile-based logging:
--------------------------
I suggest using newsyslog(8). Adding a line like:
/var/log/isdn.log 664 100 * 168 Z /var/run/isdnd.pid
to /etc/newsyslog.conf will do the job (here: once a week, for the next
100 weeks) with compression of the old log.
This is the standard method for other daemons (apache, etc.).
(From: Udo Schweigert <ust@cert.siemens.de>)
17. How do i setup dialin from Windows NT RAS to i4b ?
==============================================================================
> > I need to be able to dial in from a WNT box, equipped with TELES h/w and
> > s/w, to a FreeBSD machine. I don't have a clue what RAS is using.
> > I've tried
> > ipr and isp. The latter seems to work but is hanging on authentication. Is
> > there somebody who has done this before and is able to give me some hints?
>
> RAS is using PPP, so you should be able to get the isp interface working. I
> haven't done it so I can't give you concrete hints, but setting the isp
> interface to debug mode and posting the log (with passwords cut out or with
> test passwords) could help us to debug your setup.
I have several customers using sPPP do dial in from their W95/W98/WNT.
If You use FreeBSD_3.2-BETA with i4b-071 or older then you have to apply
the attached patch to /sys/net/if_spppsubr.c (patch -p0 <patchfile).
You need to configure isp0. See the manpages or the supplied templates in
the i4b-distribution. I would suggest to supply an ip-number for the
isp0-interface and force the clients to accept this value.
Don't forget to supply the relevant parameters to sppconfig_isp0 in
/etc/rc.conf...
On WNT you have to install the CAPI-2.0-drivers and Dialin-network.
Create a new entry and check the following box:
* Connection to internet
select the appropriate ISDN-device for dialout, insert a phone-number
and that's it.
You are asked for username & password. Supply the values You did define in
spppconfig_isp0 and dial...
Patch for i4b version 0.71 or older:
------------------------------------
*** /sys/net/if_spppsubr.c Sun Dec 27 22:30:44 1998
--- /sys/net/if_spppsubr.c.orig Sat May 8 10:54:14 1999
***************
*** 2056,2062 ****
if (debug)
addlog("[non-empty] ");
/* suggest a zero one */
! p[2] = p[3] = p[4] = p[5] = 0;
break;
case LCP_OPT_MRU:
--- 2056,2062 ----
if (debug)
addlog("[non-empty] ");
/* suggest a zero one */
! /* p[2] = p[3] = p[4] = p[5] = 0; */
break;
case LCP_OPT_MRU:
***************
*** 2668,2678 ****
addlog("%s [not agreed] ",
sppp_dotted_quad(desiredaddr));
- p[2] = hisaddr >> 24;
- p[3] = hisaddr >> 16;
- p[4] = hisaddr >> 8;
- p[5] = hisaddr;
}
break;
}
/* Add the option to nak'ed list. */
--- 2668,2678 ----
addlog("%s [not agreed] ",
sppp_dotted_quad(desiredaddr));
}
+ p[2] = hisaddr >> 24;
+ p[3] = hisaddr >> 16;
+ p[4] = hisaddr >> 8;
+ p[5] = hisaddr;
break;
}
/* Add the option to nak'ed list. */
(From: Andreas Haakh <ah@alvman.RoBIN.de>)
18. How can I convert my old .g711a files to the new format?
================================================================================
I got the best results with:
cat /some/path/dwhello.g711a | alaw2ulaw | g711conv -u > /tmp/newhello.al
(From: David Wetzel <dave@turbocat.de>)
19. I have lots of old .g711a files to convert what can I do?
================================================================================
Create a shell script (/tmp/csnd.sh) with this contents:
#!/bin/sh
OLDFILES=`ls *.g711a`
#echo $OLDFILES
for THEFILE in $OLDFILES
do
(
echo -n "converting $THEFILE..."
BASENAME=`basename $THEFILE .g711a`
/bin/cat $THEFILE | alaw2ulaw | g711conv -u > $BASENAME.al
echo "done"
)
done
###### END
then type "chmod a+x /tmp/csnd.sh" in you shell.
cd /usr/local/lib/isdn (or where your old sounds live)
/tmp/csnd.sh
Optional:
rm *.g711a (you should know what you do here :-)
(From: David Wetzel <dave@turbocat.de>)
20. How can I convert the .al files to Sun/NeXT .au/.snd/.vox files?
================================================================================
/bin/cat /some/path/old.al | sox -t raw -A -b -r 8000 - -t .au /some/path/new.snd
(From: David Wetzel <dave@turbocat.de>)
21. Help, isdn4bsd 0.82 fails to probe my Elsa PCC-16!
================================================================================
>Isdn4bsd 0.82 fails to probe my Elsa PCC-16. It just can't find isic0.
flags have changed from 19 to 20.
(From: "Frank J. Beckmann" <frank@vogon.agala.harz.de>)
22. How do i enable and configure userland PPP with i4b ?
================================================================================
NOTE: this is the procedure used as of end of July 1999, it may change in
the near future!
Get the current ppp sources from
http://www.freebsd.org/~brian
unpack them and apply the patch
ftp://ftp6.uk.freebsd.org/pub/PPPoISDN/pppcommit.patch
to the ppp directory (where you just unpacked the above mentioned ppp source).
Make and install the result.
Have a look at the user-ppp directory and the end of etc-isdn/isdnd.rc.sample
for ppp and i4b sample configurations to get things up and running.
More information to ppp setup can be found at
http://www.Awfulhak.org/ppp.html
http://www.freebsd.org/handbook/ppp-and-slip.html
http://www.freebsd.org/FAQ/userppp.html
and in the directory "user-ppp" of the isdn4bsd distribution.
23. What is the procedure to install a new i4b on FreeBSD 3.x ?
================================================================================
cd /usr/src
mkdir i4b
cd i4b
tar xvzf i4b-00.82.00-beta-140799.tar.gz
cd FreeBSD
sh overuninstall.sh
sh overinstall.sh
cd ..
make cleandir
make depend
make
make install
cd /sys/i386/conf
config <YOURKERNEL>
cd ../../compile/<YOURKERNEL>
make clean
make depend
make
make install
shutdown -r now
(From: Luke Roberts <luke@roberts.nl>)

View File

@ -1,6 +1,6 @@
Note: This is a modified README from the isdn4bsd 0.81.00 ftp-distribution.
Note: This is a modified README from the isdn4bsd 0.83.00 ftp-distribution.
In December 1998, i4b was integrated into the FreeBSD sourcetree
and so the following parts about FreeBSD may not apply completely
@ -14,7 +14,7 @@ Note: This is a modified README from the isdn4bsd 0.81.00 ftp-distribution.
isdn4bsd
========
beta Version 0.81.00 / May 1999
beta Version 0.83.0 / July 1999
written by:
@ -52,7 +52,7 @@ Note: This is a modified README from the isdn4bsd 0.81.00 ftp-distribution.
==============================
The (for laywer infected places: optional) license fee for using
isdn4bsd is sending a picture postcard of your home town.
isdn4bsd is sending a picture postcard of your home town.
My address can be found at the top of this file.
@ -108,10 +108,11 @@ The only ISDN protocol currently supported is the BRI protocol specified in
I.430, Q.921 and Q.931; better known as DSS1 or Euro-ISDN.
Isdn4bsd allows you to make IP network connections by using either IP packets
sent in raw HDLC frames on the B channel or by using synchronous PPP.
sent in raw HDLC frames on the B channel or by using built-in synchronous PPP
(or using userland ppp, this is experimental and only available in FreeBSD).
For telephony, isdn4bsd can answer incoming phone calls like an answering
machine and now has preliminary dialout capabilities.
machine and now has preliminary dialout capabilities for voice and data calls.
3. Which BSD's are supported ?
@ -120,17 +121,23 @@ machine and now has preliminary dialout capabilities.
FreeBSD:
--------
I4b was integrated into FreeBSD in January 1999, so it is part
of FreeBSD-current and FreeBSD 3.1 (stable).
of FreeBSD-current and FreeBSD 3.x.
Usually i will commit a new i4b release as soon as possible to
FreeBSD-current, but not to FreeBSD 3.x - this means that
FreeBSD 3.x now has a relatively old version of i4b in its tree
and i recommend for FreeBSD 3.x users to upgrade via the scripts
found in the FreeBSD directory of the i4b ftp release.
FreeBSD 2.2.x is no longer actively supported by i4b but there is
a good chance that this release will compile and run under 2.2.x.
This is the last i4b release which has support for FreeBSD < 3.x.
I4b version 0.8x is the last i4b release which has support for
FreeBSD < 3.x !
Please take the time to read the file FreeBSD/INSTALLATION (and
the other available documentation) carefully. Thank you!
NetBSD/i386:
------------
The NetBSD specific support and the Diehl driver was written by
@ -158,31 +165,18 @@ NetBSD/Alpha:
The NetBSD/Alpha specific support was done by Jan-Hinrich Fessel,
(oskar@zippo.unna.ping.de)
OpenBSD/i386:
-------------
The OpenBSD/i386 2.2 specific support was done by Bas Oude Nijeweme
(bon@serious.xs4all.nl). He reports that it is also running fine
under OpenBSD 2.3.
NOTICE:
=======
i4b on OpenBSD has not been tested for a long time now and everyone
who promised to maintain it so far disappeared without further notice.
Requests on the OpenBSD newsgroup and mailinglist were not answered.
In an attempt to maintain it, i tried to install OpenBSD on a machine
where FreeBSD ran for a long time but it seems OpenBSD can not be run
there, so i gave up.
Because of this, i4b is currently completely unsupported on OpenBSD!
--------------------------------------------------------------------
OpenBSD/i386 2.5 (and only 2.5!) is supported by isdn4bsd. I've
just tested it with the Teles 16.3 card and i am not using
it daily, so please let me hear how it works for you and which
cards you were able to use.
BSD/OS:
-------
The BSD/OS 4.0 specific support was done by Bert Driehuis. The
support is not yet complete. Please contact Bert directly in case
of questions regarding this at bert_driehuis@nl.compuware.com.
of questions regarding this at driehuis@playbeing.org.
4. Which ISDN cards are supported ?
@ -198,7 +192,7 @@ BSD/OS:
Type (passive, ISA) FreeBSD NetBSD OpenBSD BSD/OS Notes
--------------------- ------- ------ ------- ------ -----------------------
AVM A1 YES YES ??? ???
AVM Fritz!CardClassic YES YES ??? ??? (Note 1)
AVM Fritz!CardClassic YES YES ??? ???
Creatix ISDN-S0/8 YES YES ??? ??? ( = Teles S0/8 )
Creatix ISDN-S0/16 YES YES ??? ??? ( = Teles S0/16 )
Dr.Neuhaus Niccy 1008 YES YES ??? ??? ( = Teles S0/8 )
@ -208,22 +202,26 @@ BSD/OS:
Stollmann Tina-pp YES YES ??? ???
Teles S0/8 YES YES ??? ???
Teles S0/16 YES YES ??? ???
Teles S0/16.3 YES YES ??? YES (Note 4)
Teles S0/16.3 YES YES YES YES (Note 4)
3Com/USR SportsterInt YES YES ??? ??? ( = Stollmann Tina-pp )
Type (passive, ISAPnP)FreeBSD NetBSD OpenBSD BSD/OS Notes
--------------------- ------- ------ ------- ------ -----------------------
AVM Fritz!Card PnP DEV NO NO NO (Note 1)
AVM Fritz!Card PnP YES NO NO NO (Note 1)
Asuscom I-IN100-ST-DV ??? ??? ??? ??? ( = Dynalink IS64PH )
Asuscom ISDNlink 128K YES ??? ??? ??? (Note 16)
Creatix ISDN-S0 PnP YES YES ??? ??? (Note 2)
Dr.Neuhaus Niccy GO@ YES YES ??? ??? (Note 2)
Dynalink IS64PH ??? ??? ??? ??? (Note 11)
Dynalink IS64PH ??? ??? ??? YES (Note 11)
ELSA 1000pro ISA YES YES ??? ??? (Note 3)
ITK ix1 micro V.3 YES ??? ??? ??? (Note 13)
Sagem Cybermod YES YES ??? ??? ( = Niccy GO@ )
Sedlbauer Win Speed YES YES ??? ??? (Note 9)
Siemens I-Surf 2.0 YES NO NO NO (Note 15)
Teles S0 PnP ??? ??? ??? ??? (Note 5)
3Com USR PnP internal DEV NO NO NO (under development)
Type (passive, PCI) FreeBSD NetBSD OpenBSD BSD/OS Notes
--------------------- ------- ------ ------- ------ -----------------------
ELSA 1000pro PCI YES YES ??? ???
@ -235,7 +233,7 @@ BSD/OS:
ELSA ISDN/MC NO YES ??? ???
ELSA MC/ALL NO DEV ??? ???
Type (passive, SUPIO) FreeBSD NetBSD OpenBSD BSD/OS Notes
Type (passive, Zorro2)FreeBSD NetBSD OpenBSD BSD/OS Notes
--------------------- ------- ------ ------- ------ -----------------------
ISDN Blaster NO YES ??? NO (Note 12, Amiga/NetBSD)
ISDN Master NO YES ??? NO (Note 12, Amiga/NetBSD)
@ -250,13 +248,9 @@ BSD/OS:
Note 1: Only the ISA, non-PnP AVM Fritz!Card ("Fritz!Card Classic") is
currently supported.
A driver for the Fritz!Card PnP is under development.
The "Teledat 150" sold by the german Telekom seems to be an AVM
Fritz!Card classic.
Note 1: The driver for the Fritz!Card PnP was developed by Udo Schweigert
(ust@cert.siemens.de) who develops under FreeBSD only.
Please contact Udo in case of trouble.
Note 2: FreeBSD
This is a PnP card. To run it under FreeBSD, you need
@ -303,6 +297,8 @@ Note 11: This driver was developed by Martijn Plak (tigrfhur@xs4all.nl)
Note: This driver is now unsupported as Martijn is no longer able
to maintain this driver.
The BSD/OS support for this card was written by Bert Driehuis.
Note 12: This driver was developed by Ignatios Souvatzis (is@netbsd.org)
Please contact him in case of trouble.
This driver is supposed to work on the ISDN Master versions and
@ -312,12 +308,21 @@ Note 12: This driver was developed by Ignatios Souvatzis (is@netbsd.org)
i4b problem, but general.
Note 13: This driver was developed by Martin Husemann, please contact him
in case of trouble.
in case of trouble. The FreeBSD PnP support for version 3 of the
card was done by Philippe Guezou <Philippe.Guezou@wanadoo.fr>.
Note 14: This driver was developed by Gary Jennejohn who develops under
FreeBSD only. In case of problems with this driver, please contact
him directly at garyj@muc.de.
him directly at garyj@muc.de. This driver is reported to run with
the ELSA MicroLink ISDN/PCF.
Note 15: The driver for the Siemens I-Surf 2.0 was developed by Udo Schweigert
(ust@cert.siemens.de) who develops under FreeBSD only.
Please contact Udo in case of trouble.
Note 16: The driver for the Asuscom ISDNlink 128K PnP was developed by
Ari Suutari (ari@suutari.iki.fi). Please contact Ari directly
in case of trouble with this driver.
5. Where do i find documentation for isdn4bsd ?
-----------------------------------------------
@ -370,12 +375,18 @@ me please clearly state that there is no guarantee that your bug will be
fixed within some specific amount of time, in fact there is no guarantee
that your bug will be fixed at all; i'll do my best but there might be
more important things going on in my life than giving free support for
isdn4bsd. Some bugs seem to occur only in certain environments and are
not reproduceable here without access to the equipment you are connected
isdn4bsd.
Some bugs seem to occur only in certain environments and are not
reproduceable here without access to the equipment you are connected
to or other equipment like ISDN simulators (which i don't get access to
for free): in this case you are the only person being able to trace down
the bug and fix it.
There is a web page for i4b at http://www.freebsd-support.de/i4b available
where i will put bugfixes, updates and contributions. In particular it has
an "errata" page, where you should look in case you have problems with i4b.
8. Where do i get commercial support for isdn4bsd ?
----------------------------------------------------
@ -383,15 +394,15 @@ the bug and fix it.
In case you want to pay for support, maintenance, enhancements, extensions
to isdn4bsd or whatever else you may need, it is possible to hire me for
reasonable rates through my employer HCS GmbH; in this case please contact
me for details at hm@hcs.de or look at http://www.freebsd-support.de.
me for details at hm@hcs.de and/or look at http://www.freebsd-support.de
9. How can i help and/or support isdn4bsd ?
-------------------------------------------
Send a postcard!
Send a postcard! :-)
I really like to hear from you! (even if it runs out of the box :-)
I really like to hear from you! (even if it runs out of the box)
I'm open for suggestions, bugreports, fixes, patches, enhancements and
comments to improve isdn4bsd.
@ -458,16 +469,15 @@ This mailing list is NOT (!) FreeBSD specific, everyone is welcome there!
12. Where can i get isdn4bsd ?
------------------------------
The isdn4bsd package is available from two sites:
The isdn4bsd package is available from:
- ftp://isdn4bsd@ftp.consol.de/pub
ftp://i4b.consol.de/pub
- http://www.freebsd-support.de/i4b
On ftp.consol.de, you must log in as user "isdn4bsd" and give your mail
address as the password. Then change to the "pub" directory. You will
find the latest available isdn4bsd package. Anonymous ftp as user "ftp"
or "anonymous" will not work.
Finally, i4b got an own web-page at
http://www.freebsd-support.de/i4b
13. What is the reward for reading everything in this file ?
@ -475,4 +485,3 @@ or "anonymous" will not work.
Have fun!
hellmuth

View File

@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
# $Id: LINT,v 1.620 1999/07/26 05:47:17 cracauer Exp $
# $Id: LINT,v 1.621 1999/08/04 17:29:33 green Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@ -1842,7 +1842,7 @@ options AVM_A1
options USR_STI
#device isic0 at isa? port 0x268 irq 5 flags 7
#
# ITK ix1 Micro
# ITK ix1 Micro ( < V.3, non-PnP version )
options ITKIX1
#device isic0 at isa? port 0x398 irq 10 flags 18
#
@ -1877,6 +1877,18 @@ options DYNALINK
options ELSA_QS1ISA
#device isic0 at isa? port ? irq ?
#
# ITK ix1 Micro ( V.3, PnP version )
options "ITKIX1"
#device isic0 at isa? port ? irq ?
#
# AVM Fritz!Card PnP
options "AVM_PNP"
#device isic0 at isa? port ? irq ?
#
# Siemens I-Surf 2.0
options "SIEMENS_ISURF2"
#device isic0 at isa? port ? irq ?
#
# PCI-Cards:
# ----------
#

View File

@ -1,7 +1,7 @@
# This file tells config what files go into building a kernel,
# files marked standard are always included.
#
# $Id: files.i386,v 1.254 1999/07/26 07:43:20 phk Exp $
# $Id: files.i386,v 1.255 1999/07/29 01:49:17 msmith Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@ -335,31 +335,34 @@ i386/linux/linux_stats.c optional compat_linux
i386/linux/linux_sysent.c optional compat_linux
i386/linux/linux_sysvec.c optional compat_linux
i386/linux/linux_util.c optional compat_linux
i4b/layer1/i4b_avm_a1.c optional isic
i4b/layer1/i4b_avm_fritz_pci.c optional isic
i4b/layer1/i4b_avm_fritz_pcmcia.c optional isic
i4b/layer1/i4b_bchan.c optional isic
i4b/layer1/i4b_ctx_s0P.c optional isic
i4b/layer1/i4b_drn_ngo.c optional isic
i4b/layer1/i4b_dynalink.c optional isic
i4b/layer1/i4b_elsa_qs1i.c optional isic
i4b/layer1/i4b_elsa_qs1p.c optional isic
i4b/layer1/i4b_hscx.c optional isic
i4b/layer1/i4b_isac.c optional isic
i4b/layer1/i4b_isic.c optional isic
i4b/layer1/i4b_isic_isa.c optional isic
i4b/layer1/i4b_isic_pci.c optional isic
i4b/layer1/i4b_isic_pcmcia.c optional isic
i4b/layer1/i4b_isic_pnp.c optional isic
i4b/layer1/i4b_itk_ix1.c optional isic
i4b/layer1/i4b_l1.c optional isic
i4b/layer1/i4b_l1fsm.c optional isic
i4b/layer1/i4b_sws.c optional isic
i4b/layer1/i4b_tel_s016.c optional isic
i4b/layer1/i4b_tel_s0163.c optional isic
i4b/layer1/i4b_tel_s08.c optional isic
i4b/layer1/i4b_tel_s0P.c optional isic
i4b/layer1/i4b_usr_sti.c optional isic
i4b/layer1/i4b_asuscom_ipac.c optional isic device-driver
i4b/layer1/i4b_avm_a1.c optional isic device-driver
i4b/layer1/i4b_avm_fritz_pci.c optional isic device-driver
i4b/layer1/i4b_avm_fritz_pcmcia.c optional isic device-driver
i4b/layer1/i4b_avm_fritz_pnp.c optional isic device-driver
i4b/layer1/i4b_bchan.c optional isic device-driver
i4b/layer1/i4b_ctx_s0P.c optional isic device-driver
i4b/layer1/i4b_drn_ngo.c optional isic device-driver
i4b/layer1/i4b_dynalink.c optional isic device-driver
i4b/layer1/i4b_elsa_qs1i.c optional isic device-driver
i4b/layer1/i4b_elsa_qs1p.c optional isic device-driver
i4b/layer1/i4b_hscx.c optional isic device-driver
i4b/layer1/i4b_isac.c optional isic device-driver
i4b/layer1/i4b_isic.c optional isic device-driver
i4b/layer1/i4b_isic_isa.c optional isic device-driver
i4b/layer1/i4b_isic_pci.c optional isic device-driver
i4b/layer1/i4b_isic_pcmcia.c optional isic device-driver
i4b/layer1/i4b_isic_pnp.c optional isic device-driver
i4b/layer1/i4b_itk_ix1.c optional isic device-driver
i4b/layer1/i4b_l1.c optional isic device-driver
i4b/layer1/i4b_l1fsm.c optional isic device-driver
i4b/layer1/i4b_siemens_isurf.c optional isic device-driver
i4b/layer1/i4b_sws.c optional isic device-driver
i4b/layer1/i4b_tel_s016.c optional isic device-driver
i4b/layer1/i4b_tel_s0163.c optional isic device-driver
i4b/layer1/i4b_tel_s08.c optional isic device-driver
i4b/layer1/i4b_tel_s0P.c optional isic device-driver
i4b/layer1/i4b_usr_sti.c optional isic device-driver
isa/atkbd_isa.c optional atkbd
isa/atkbdc_isa.c optional atkbdc
isa/psm.c optional psm

View File

@ -1,4 +1,4 @@
# $Id: options.i386,v 1.117 1999/06/15 13:14:43 des Exp $
# $Id: options.i386,v 1.118 1999/06/22 14:13:36 yokota Exp $
DISABLE_PSE
IDE_DELAY
@ -139,6 +139,7 @@ GUS_IRQ opt_sound.h
# Video spigot
SPIGOT_UNSECURE opt_spigot.h
# -------------------------------
# isdn4bsd: passive ISA cards
# -------------------------------
@ -148,7 +149,7 @@ TEL_S0_16_3 opt_i4b.h
AVM_A1 opt_i4b.h
USR_STI opt_i4b.h
ITKIX1 opt_i4b.h
ELSA_PCC16 opt_i4b.h
ELSA_PCC16 opt_i4b.h
# -------------------------------
# isdn4bsd: passive ISA PnP cards
# -------------------------------
@ -157,7 +158,10 @@ DRN_NGO opt_i4b.h
TEL_S0_16_3_P opt_i4b.h
SEDLBAUER opt_i4b.h
DYNALINK opt_i4b.h
ASUSCOM_IPAC opt_i4b.h
ELSA_QS1ISA opt_i4b.h
AVM_PNP opt_i4b.h
SIEMENS_ISURF2 opt_i4b.h
# -------------------------------
# isdn4bsd: passive PCI cards
# -------------------------------
@ -174,6 +178,7 @@ AVM_A1_PCMCIA opt_i4b.h
I4B_SMP_WORKAROUND opt_i4b.h
# enable VJ compression code for ipr i/f
IPR_VJ opt_i4b.h
# -------------------------------
# oltr: build options
# -------------------------------

View File

@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
# $Id: LINT,v 1.620 1999/07/26 05:47:17 cracauer Exp $
# $Id: LINT,v 1.621 1999/08/04 17:29:33 green Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@ -1842,7 +1842,7 @@ options AVM_A1
options USR_STI
#device isic0 at isa? port 0x268 irq 5 flags 7
#
# ITK ix1 Micro
# ITK ix1 Micro ( < V.3, non-PnP version )
options ITKIX1
#device isic0 at isa? port 0x398 irq 10 flags 18
#
@ -1877,6 +1877,18 @@ options DYNALINK
options ELSA_QS1ISA
#device isic0 at isa? port ? irq ?
#
# ITK ix1 Micro ( V.3, PnP version )
options "ITKIX1"
#device isic0 at isa? port ? irq ?
#
# AVM Fritz!Card PnP
options "AVM_PNP"
#device isic0 at isa? port ? irq ?
#
# Siemens I-Surf 2.0
options "SIEMENS_ISURF2"
#device isic0 at isa? port ? irq ?
#
# PCI-Cards:
# ----------
#

View File

@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
# $Id: LINT,v 1.620 1999/07/26 05:47:17 cracauer Exp $
# $Id: LINT,v 1.621 1999/08/04 17:29:33 green Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@ -1842,7 +1842,7 @@ options AVM_A1
options USR_STI
#device isic0 at isa? port 0x268 irq 5 flags 7
#
# ITK ix1 Micro
# ITK ix1 Micro ( < V.3, non-PnP version )
options ITKIX1
#device isic0 at isa? port 0x398 irq 10 flags 18
#
@ -1877,6 +1877,18 @@ options DYNALINK
options ELSA_QS1ISA
#device isic0 at isa? port ? irq ?
#
# ITK ix1 Micro ( V.3, PnP version )
options "ITKIX1"
#device isic0 at isa? port ? irq ?
#
# AVM Fritz!Card PnP
options "AVM_PNP"
#device isic0 at isa? port ? irq ?
#
# Siemens I-Surf 2.0
options "SIEMENS_ISURF2"
#device isic0 at isa? port ? irq ?
#
# PCI-Cards:
# ----------
#

View File

@ -1,7 +1,7 @@
# This file tells config what files go into building a kernel,
# files marked standard are always included.
#
# $Id: files.i386,v 1.254 1999/07/26 07:43:20 phk Exp $
# $Id: files.i386,v 1.255 1999/07/29 01:49:17 msmith Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@ -335,31 +335,34 @@ i386/linux/linux_stats.c optional compat_linux
i386/linux/linux_sysent.c optional compat_linux
i386/linux/linux_sysvec.c optional compat_linux
i386/linux/linux_util.c optional compat_linux
i4b/layer1/i4b_avm_a1.c optional isic
i4b/layer1/i4b_avm_fritz_pci.c optional isic
i4b/layer1/i4b_avm_fritz_pcmcia.c optional isic
i4b/layer1/i4b_bchan.c optional isic
i4b/layer1/i4b_ctx_s0P.c optional isic
i4b/layer1/i4b_drn_ngo.c optional isic
i4b/layer1/i4b_dynalink.c optional isic
i4b/layer1/i4b_elsa_qs1i.c optional isic
i4b/layer1/i4b_elsa_qs1p.c optional isic
i4b/layer1/i4b_hscx.c optional isic
i4b/layer1/i4b_isac.c optional isic
i4b/layer1/i4b_isic.c optional isic
i4b/layer1/i4b_isic_isa.c optional isic
i4b/layer1/i4b_isic_pci.c optional isic
i4b/layer1/i4b_isic_pcmcia.c optional isic
i4b/layer1/i4b_isic_pnp.c optional isic
i4b/layer1/i4b_itk_ix1.c optional isic
i4b/layer1/i4b_l1.c optional isic
i4b/layer1/i4b_l1fsm.c optional isic
i4b/layer1/i4b_sws.c optional isic
i4b/layer1/i4b_tel_s016.c optional isic
i4b/layer1/i4b_tel_s0163.c optional isic
i4b/layer1/i4b_tel_s08.c optional isic
i4b/layer1/i4b_tel_s0P.c optional isic
i4b/layer1/i4b_usr_sti.c optional isic
i4b/layer1/i4b_asuscom_ipac.c optional isic device-driver
i4b/layer1/i4b_avm_a1.c optional isic device-driver
i4b/layer1/i4b_avm_fritz_pci.c optional isic device-driver
i4b/layer1/i4b_avm_fritz_pcmcia.c optional isic device-driver
i4b/layer1/i4b_avm_fritz_pnp.c optional isic device-driver
i4b/layer1/i4b_bchan.c optional isic device-driver
i4b/layer1/i4b_ctx_s0P.c optional isic device-driver
i4b/layer1/i4b_drn_ngo.c optional isic device-driver
i4b/layer1/i4b_dynalink.c optional isic device-driver
i4b/layer1/i4b_elsa_qs1i.c optional isic device-driver
i4b/layer1/i4b_elsa_qs1p.c optional isic device-driver
i4b/layer1/i4b_hscx.c optional isic device-driver
i4b/layer1/i4b_isac.c optional isic device-driver
i4b/layer1/i4b_isic.c optional isic device-driver
i4b/layer1/i4b_isic_isa.c optional isic device-driver
i4b/layer1/i4b_isic_pci.c optional isic device-driver
i4b/layer1/i4b_isic_pcmcia.c optional isic device-driver
i4b/layer1/i4b_isic_pnp.c optional isic device-driver
i4b/layer1/i4b_itk_ix1.c optional isic device-driver
i4b/layer1/i4b_l1.c optional isic device-driver
i4b/layer1/i4b_l1fsm.c optional isic device-driver
i4b/layer1/i4b_siemens_isurf.c optional isic device-driver
i4b/layer1/i4b_sws.c optional isic device-driver
i4b/layer1/i4b_tel_s016.c optional isic device-driver
i4b/layer1/i4b_tel_s0163.c optional isic device-driver
i4b/layer1/i4b_tel_s08.c optional isic device-driver
i4b/layer1/i4b_tel_s0P.c optional isic device-driver
i4b/layer1/i4b_usr_sti.c optional isic device-driver
isa/atkbd_isa.c optional atkbd
isa/atkbdc_isa.c optional atkbdc
isa/psm.c optional psm

View File

@ -1,4 +1,4 @@
# $Id: options.i386,v 1.117 1999/06/15 13:14:43 des Exp $
# $Id: options.i386,v 1.118 1999/06/22 14:13:36 yokota Exp $
DISABLE_PSE
IDE_DELAY
@ -139,6 +139,7 @@ GUS_IRQ opt_sound.h
# Video spigot
SPIGOT_UNSECURE opt_spigot.h
# -------------------------------
# isdn4bsd: passive ISA cards
# -------------------------------
@ -148,7 +149,7 @@ TEL_S0_16_3 opt_i4b.h
AVM_A1 opt_i4b.h
USR_STI opt_i4b.h
ITKIX1 opt_i4b.h
ELSA_PCC16 opt_i4b.h
ELSA_PCC16 opt_i4b.h
# -------------------------------
# isdn4bsd: passive ISA PnP cards
# -------------------------------
@ -157,7 +158,10 @@ DRN_NGO opt_i4b.h
TEL_S0_16_3_P opt_i4b.h
SEDLBAUER opt_i4b.h
DYNALINK opt_i4b.h
ASUSCOM_IPAC opt_i4b.h
ELSA_QS1ISA opt_i4b.h
AVM_PNP opt_i4b.h
SIEMENS_ISURF2 opt_i4b.h
# -------------------------------
# isdn4bsd: passive PCI cards
# -------------------------------
@ -174,6 +178,7 @@ AVM_A1_PCMCIA opt_i4b.h
I4B_SMP_WORKAROUND opt_i4b.h
# enable VJ compression code for ipr i/f
IPR_VJ opt_i4b.h
# -------------------------------
# oltr: build options
# -------------------------------

View File

@ -27,9 +27,9 @@
* i4b_debug.h - i4b debug header file
* -----------------------------------
*
* $Id: i4b_debug.h,v 1.18 1999/04/28 14:50:55 hm Exp $
* $Id: i4b_debug.h,v 1.19 1999/05/28 15:03:32 hm Exp $
*
* last edit-date: [Wed Apr 28 16:50:36 1999]
* last edit-date: [Fri May 28 16:27:07 1999]
*
*---------------------------------------------------------------------------*/
@ -221,4 +221,54 @@ typedef struct {
#define I4B_CTL_CLR_HSCXSTAT _IOW('C', 3, hscxstat_t)
/*---------------------------------------------------------------------------*
* get LAPD/Q.921 statistics
*---------------------------------------------------------------------------*/
typedef struct {
/* transmit */
u_long tx_i; /* I */
u_long tx_rr; /* RR */
u_long tx_rnr; /* RNR */
u_long tx_rej; /* REJ */
u_long tx_sabme; /* SABME*/
u_long tx_dm; /* DM */
u_long tx_disc; /* DISC */
u_long tx_ua; /* UA */
u_long tx_frmr; /* FRMR */
u_long tx_tei; /* TEI */
/* receive */
u_long rx_i; /* I */
u_long rx_rr; /* RR */
u_long rx_rnr; /* RNR */
u_long rx_rej; /* REJ */
u_long rx_sabme; /* SABME*/
u_long rx_tei; /* TEI */
u_long rx_ui; /* UI */
u_long rx_disc; /* DISC */
u_long rx_xid; /* XID */
u_long rx_dm; /* DM */
u_long rx_ua; /* UA */
u_long rx_frmr; /* FRMR */
/* errors */
u_long err_rx_len; /* incorrect length */
u_long err_rx_badf; /* bad frame type */
u_long err_rx_bads; /* bad s frame */
u_long err_rx_badu; /* bad u frame */
u_long err_rx_badui; /* bad ui frame */
} lapdstat_t;
typedef struct {
int unit;
lapdstat_t lapdstat;
} l2stat_t;
#define I4B_CTL_GET_LAPDSTAT _IOWR('C', 4, l2stat_t)
#define I4B_CTL_CLR_LAPDSTAT _IOW('C', 5, int)
/* EOF */

View File

@ -27,9 +27,9 @@
* i4b_ioctl.h - messages kernel <--> userland
* -------------------------------------------
*
* $Id: i4b_ioctl.h,v 1.106 1999/05/19 08:51:14 hm Exp $
* $Id: i4b_ioctl.h,v 1.125 1999/07/30 07:02:11 hm Exp $
*
* last edit-date: [Wed May 19 10:56:56 1999]
* last edit-date: [Fri Jul 30 08:53:47 1999]
*
*---------------------------------------------------------------------------*/
@ -46,7 +46,7 @@
* version and release number for isdn4bsd package
*---------------------------------------------------------------------------*/
#define VERSION 0 /* version number */
#define REL 81 /* release number */
#define REL 83 /* release number */
#define STEP 0 /* release step */
/*---------------------------------------------------------------------------*
@ -103,7 +103,9 @@
#define CARD_TYPEP_ITKIX1 18 /* ITK ix1 micro */
#define CARD_TYPEP_AVMA1PCI 19 /* AVM FRITZ!CARD PCI */
#define CARD_TYPEP_PCC16 20 /* ELSA PCC-16 */
#define CARD_TYPEP_AVM_PNP 21 /* AVM FRITZ!CARD PnP */
#define CARD_TYPEP_SIE_ISURF2 22 /* Siemens I-Surf 2 PnP */
#define CARD_TYPEP_ASUSCOMIPAC 23 /* Asuscom ISDNlink 128 K PnP */
/*
* in case you add support for more cards, please update:
*
@ -113,7 +115,7 @@
* and adjust CARD_TYPEP_MAX below.
*/
#define CARD_TYPEP_MAX 20 /* max type */
#define CARD_TYPEP_MAX 23 /* max type */
/*---------------------------------------------------------------------------*
* card types for CTRL_DAIC
@ -175,7 +177,7 @@ typedef unsigned int cause_t; /* 32 bit unsigned int */
*---------------------------------------------------------------------------*/
#define SHA_FIXU 0 /* timeout algorithm for fix unit charging */
#define SHA_VARU 1 /* timeout algorithm for variable unit charging */
/*---------------------------------------------------------------------------*
* The shorthold data struct
*---------------------------------------------------------------------------*/
@ -593,14 +595,15 @@ typedef struct {
/*---------------------------------------------------------------------------*
* request version and release info from kernel part
* (msg_vr_req_t is also used by tel & rbch drivers)
*---------------------------------------------------------------------------*/
typedef struct {
int version; /* version number */
int release; /* release number */
int step; /* release step number */
} msg_vr_req_t;
#define I4B_VR_REQ _IOR('4', 9, msg_vr_req_t)
#define I4B_VR_REQ _IOR('4', 9, msg_vr_req_t)
/*---------------------------------------------------------------------------*
* Protocol download to active cards

View File

@ -0,0 +1,53 @@
/*
* Copyright (c) 1999 Hellmuth Michaelis. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*---------------------------------------------------------------------------
*
* i4b_rbch_ioctl.h raw B-channel driver interface ioctls
* ------------------------------------------------------
*
* $Id: i4b_rbch_ioctl.h,v 1.1 1999/07/09 06:44:00 hm Exp $
*
* last edit-date: [Fri Jul 9 08:35:07 1999]
*
*---------------------------------------------------------------------------*/
#ifndef _I4B_RBCH_IOCTL_H_
#define _I4B_RBCH_IOCTL_H_
/*---------------------------------------------------------------------------*
* instruct the rbch device to dial the given number
*---------------------------------------------------------------------------*/
typedef char telno_t[TELNO_MAX];
#define I4B_RBCH_DIALOUT _IOW('R', 1, telno_t)
/*---------------------------------------------------------------------------*
* request version and release info from kernel part
*---------------------------------------------------------------------------*/
#define I4B_RBCH_VR_REQ _IOR('R', 2, msg_vr_req_t)
#endif /* _I4B_RBCH_IOCTL_H_ */

View File

@ -27,9 +27,9 @@
* i4b_tel_ioctl.h telephony interface ioctls
* ------------------------------------------
*
* $Id: i4b_tel_ioctl.h,v 1.9 1999/04/21 10:06:32 hm Exp $
* $Id: i4b_tel_ioctl.h,v 1.10 1999/07/09 06:44:00 hm Exp $
*
* last edit-date: [Wed Apr 21 11:00:02 1999]
* last edit-date: [Fri Jul 9 08:34:28 1999]
*
*---------------------------------------------------------------------------*/
@ -54,6 +54,12 @@
#define I4B_TEL_SETAUDIOFMT _IOW('A', 1, int)
#define I4B_TEL_EMPTYINPUTQUEUE _IOW('A', 2, int)
/*---------------------------------------------------------------------------*
* request version and release info from kernel part
*---------------------------------------------------------------------------*/
#define I4B_TEL_VR_REQ _IOR('A', 3, msg_vr_req_t)
/*===========================================================================*
* /dev/i4bteld<n> devices (dialer interface)
*===========================================================================*/

View File

@ -27,9 +27,9 @@
* i4b_ctl.c - i4b system control port driver
* ------------------------------------------
*
* $Id: i4b_ctl.c,v 1.4 1999/05/20 10:08:56 hm Exp $
* $Id: i4b_ctl.c,v 1.25 1999/06/08 08:13:00 hm Exp $
*
* last edit-date: [Mon Apr 26 11:16:28 1999]
* last edit-date: [Tue Jun 8 09:27:15 1999]
*
*---------------------------------------------------------------------------*/
@ -83,6 +83,7 @@
#include <i4b/include/i4b_global.h>
#include <i4b/include/i4b_mbuf.h>
#include <i4b/layer1/i4b_l1.h>
#include <i4b/layer2/i4b_l2.h>
static int openflag = 0;
@ -99,6 +100,8 @@ static d_poll_t i4bctlpoll;
#endif
#define CDEV_MAJOR 55
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
static struct cdevsw i4bctl_cdevsw = {
/* open */ i4bctlopen,
/* close */ i4bctlclose,
@ -120,6 +123,12 @@ static struct cdevsw i4bctl_cdevsw = {
/* maxio */ 0,
/* bmaj */ -1
};
#else
static struct cdevsw i4bctl_cdevsw =
{ i4bctlopen, i4bctlclose, noread, nowrite,
i4bctlioctl, nostop, nullreset, nodevtotty,
POLLFIELD, nommap, NULL, "i4bctl", NULL, -1 };
#endif
static void i4bctlattach(void *);
PSEUDO_SET(i4bctlattach, i4b_i4bctldrv);
@ -150,8 +159,12 @@ int i4bctlioctl __P((dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
static void
i4bctlinit(void *unused)
{
cdevsw_add(&i4bctl_cdevsw);
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
cdevsw_add(&i4bctl_cdevsw);
#else
dev_t dev = makedev(CDEV_MAJOR, 0);
cdevsw_add(&dev, &i4bctl_cdevsw, NULL);
#endif
}
SYSINIT(i4bctldev, SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR, &i4bctlinit, NULL);
@ -332,6 +345,42 @@ i4bctlioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
break;
}
case I4B_CTL_GET_LAPDSTAT:
{
l2stat_t *l2s;
l2_softc_t *sc;
l2s = (l2stat_t *)data;
if( l2s->unit < 0 || l2s->unit > ISIC_MAXUNIT)
{
error = EINVAL;
break;
}
sc = &l2_softc[l2s->unit];
bcopy(&sc->stat, &l2s->lapdstat, sizeof(lapdstat_t));
break;
}
case I4B_CTL_CLR_LAPDSTAT:
{
int *up;
l2_softc_t *sc;
up = (int *)data;
if( *up < 0 || *up > ISIC_MAXUNIT)
{
error = EINVAL;
break;
}
sc = &l2_softc[*up];
bzero(&sc->stat, sizeof(lapdstat_t));
break;
}
default:
error = ENOTTY;
break;

View File

@ -27,9 +27,9 @@
* i4b_ipr.c - isdn4bsd IP over raw HDLC ISDN network driver
* ---------------------------------------------------------
*
* $Id: i4b_ipr.c,v 1.4 1999/05/20 10:08:58 hm Exp $
* $Id: i4b_ipr.c,v 1.53 1999/07/22 18:30:15 hm Exp $
*
* last edit-date: [Thu May 6 10:09:20 1999]
* last edit-date: [Thu Jul 22 19:46:53 1999]
*
*---------------------------------------------------------------------------*
*
@ -110,8 +110,12 @@
/* undef to uncompress in the mbuf itself */
#endif /* IPR_VJ */
#if defined(__FreeBSD_version) && __FreeBSD_version >= 400008
#include "bpf.h"
#if NBPF > 0
#else
#include "bpfilter.h"
#endif
#if NBPFILTER > 0 || NBPF > 0
#include <sys/time.h>
#include <net/bpf.h>
#endif
@ -350,7 +354,7 @@ i4biprattach()
if_attach(&sc->sc_if);
#if NBPF > 0
#if NBPFILTER > 0 || NBPF > 0
#ifdef __FreeBSD__
bpfattach(&sc->sc_if, DLT_NULL, sizeof(u_int));
#else
@ -994,7 +998,7 @@ ipr_rx_data_rdy(int unit)
sc->sc_inb += m->m_pkthdr.len;
#endif
#if NBPF > 0
#if NBPFILTER > 0 || NBPF > 0
if(sc->sc_if.if_bpf)
{
/* prepend the address family as a four byte field */
@ -1010,7 +1014,7 @@ ipr_rx_data_rdy(int unit)
bpf_mtap(sc->sc_if.if_bpf, &mm);
#endif
}
#endif /* NBPF > 0 */
#endif /* NBPFILTER > 0 || NBPF > 0 */
if(IF_QFULL(&ipintrq))
{
@ -1062,7 +1066,7 @@ ipr_tx_queue_empty(int unit)
microtime(&sc->sc_if.if_lastchange);
#if NBPF > 0
#if NBPFILTER > 0 || NBPF > 0
if(sc->sc_if.if_bpf)
{
/* prepend the address family as a four byte field */
@ -1079,7 +1083,7 @@ ipr_tx_queue_empty(int unit)
bpf_mtap(sc->sc_if.if_bpf, &mm);
#endif
}
#endif /* NBPF */
#endif /* NBPFILTER */
#if I4BIPRACCT
sc->sc_outb += m->m_pkthdr.len; /* size before compression */

View File

@ -34,9 +34,9 @@
* the "cx" driver for Cronyx's HDLC-in-hardware device). This driver
* is only the glue between sppp and i4b.
*
* $Id: i4b_isppp.c,v 1.3 1999/05/20 10:09:01 hm Exp $
* $Id: i4b_isppp.c,v 1.34 1999/07/24 13:21:42 hm Exp $
*
* last edit-date: [Sun May 2 10:52:57 1999]
* last edit-date: [Sat Jul 24 15:23:04 1999]
*
*---------------------------------------------------------------------------*/
@ -63,19 +63,27 @@
#include <net/if_types.h>
#include <net/netisr.h>
#include <net/route.h>
#if defined(__FreeBSD__)
#include <net/if_sppp.h>
#else
#include <i4b/sppp/if_sppp.h>
#endif
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/in_var.h>
#include <netinet/ip.h>
#include "bpf.h"
#if NBPF > 0
#include <net/slcompress.h>
#if defined(__FreeBSD__) || defined(__OpenBSD__)
#include <net/if_sppp.h>
#else
#include <i4b/sppp/if_sppp.h>
#endif
#if defined(__FreeBSD_version) && __FreeBSD_version >= 400008
#include "bpf.h"
#else
#include "bpfilter.h"
#endif
#if NBPFILTER > 0 || NBPF > 0
#include <sys/time.h>
#include <net/bpf.h>
#endif
@ -222,8 +230,11 @@ i4bispppattach(void)
int i;
#ifndef HACK_NO_PSEUDO_ATTACH_MSG
printf("i4bisppp: %d ISDN SyncPPP device(s) attached\n",
NI4BISPPP);
#ifdef SPPP_VJ
printf("i4bisppp: %d ISDN SyncPPP device(s) attached (VJ header compression)\n", NI4BISPPP);
#else
printf("i4bisppp: %d ISDN SyncPPP device(s) attached\n", NI4BISPPP);
#endif
#endif
for(i = 0; i < NI4BISPPP; sc++, i++) {
@ -290,7 +301,7 @@ i4bispppattach(void)
sppp_attach(&sc->sc_if);
if_attach(&sc->sc_if);
#if NBPF > 0
#if NBPFILTER > 0 || NBPF > 0
#ifdef __FreeBSD__
bpfattach(&sc->sc_if, DLT_PPP, PPP_HDRLEN);
CALLOUT_INIT(&sc->sc_ch);
@ -361,7 +372,7 @@ i4bisppp_start(struct ifnet *ifp)
while ((m = sppp_dequeue(&sc->sc_if)) != NULL)
{
#if NBPF > 0
#if NBPFILTER > 0 || NBPF > 0
#ifdef __FreeBSD__
if (ifp->if_bpf)
bpf_mtap(ifp, m);
@ -371,7 +382,7 @@ i4bisppp_start(struct ifnet *ifp)
if (ifp->if_bpf)
bpf_mtap(ifp->if_bpf, m);
#endif
#endif /* NBPF > 0 */
#endif /* NBPFILTER > 0 || NBPF > 0 */
microtime(&ifp->if_lastchange);
@ -654,7 +665,7 @@ i4bisppp_rx_data_rdy(int unit)
printf("i4bisppp_rx_data_ready: received packet!\n");
#endif
#if NBPF > 0
#if NBPFILTER > 0 || NBPF > 0
#ifdef __FreeBSD__
if(sc->sc_if.if_bpf)
@ -666,7 +677,7 @@ i4bisppp_rx_data_rdy(int unit)
bpf_mtap(sc->sc_if.if_bpf, m);
#endif
#endif /* NBPF > 0 */
#endif /* NBPFILTER > 0 || NBPF > 0 */
s = splimp();

View File

@ -27,9 +27,9 @@
* i4b_rbch.c - device driver for raw B channel data
* ---------------------------------------------------
*
* $Id: i4b_rbch.c,v 1.3 1999/05/20 10:09:02 hm Exp $
* $Id: i4b_rbch.c,v 1.36 1999/07/19 14:03:33 hm Exp $
*
* last edit-date: [Thu May 6 13:40:22 1999]
* last edit-date: [Fri Jul 9 09:37:02 1999]
*
*---------------------------------------------------------------------------*/
@ -49,7 +49,7 @@
#include <sys/proc.h>
#include <sys/tty.h>
#ifdef __NetBSD__
#if defined (__NetBSD__) || defined (__OpenBSD__)
extern cc_t ttydefchars;
#define termioschars(t) memcpy((t)->c_cc, &ttydefchars, sizeof((t)->c_cc))
#endif
@ -69,9 +69,11 @@ extern cc_t ttydefchars;
#ifdef __FreeBSD__
#include <machine/i4b_ioctl.h>
#include <machine/i4b_rbch_ioctl.h>
#include <machine/i4b_debug.h>
#else
#include <i4b/i4b_ioctl.h>
#include <i4b/i4b_rbch_ioctl.h>
#include <i4b/i4b_debug.h>
#endif
@ -147,8 +149,7 @@ int i4brbchioctl __P((dev_t dev, IOCTL_CMD_T cmd, caddr_t arg, int flag, struct
#ifdef OS_USES_POLL
int i4brbchpoll __P((dev_t dev, int events, struct proc *p));
#else
/* XXX fix "static" to PDEVSTATIC */
static int i4brbchselect __P((dev_t dev, int rw, struct proc *p));
PDEVSTATIC int i4brbchselect __P((dev_t dev, int rw, struct proc *p));
#endif
#endif
@ -175,6 +176,8 @@ PDEVSTATIC d_select_t i4brbchselect;
#endif
#define CDEV_MAJOR 57
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
static struct cdevsw i4brbch_cdevsw = {
/* open */ i4brbchopen,
/* close */ i4brbchclose,
@ -196,6 +199,13 @@ static struct cdevsw i4brbch_cdevsw = {
/* maxio */ 0,
/* bmaj */ -1
};
#else
static struct cdevsw i4brbch_cdevsw = {
i4brbchopen, i4brbchclose, i4brbchread, i4brbchwrite,
i4brbchioctl, nostop, noreset, nodevtotty,
POLLFIELD, nommap, NULL, "i4brbch", NULL, -1
};
#endif
static void i4brbchattach(void *);
PSEUDO_SET(i4brbchattach, i4b_rbch);
@ -210,8 +220,12 @@ PSEUDO_SET(i4brbchattach, i4b_rbch);
static void
i4brbchinit(void *unused)
{
cdevsw_add(&i4brbch_cdevsw);
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
cdevsw_add(&i4brbch_cdevsw);
#else
dev_t dev = makedev(CDEV_MAJOR, 0);
cdevsw_add(&dev, &i4brbch_cdevsw, NULL);
#endif
}
SYSINIT(i4brbchdev, SI_SUB_DRIVERS,
@ -247,6 +261,7 @@ dummy_i4brbchattach(struct device *parent, struct device *self, void *aux)
printf("dummy_i4brbchattach: aux=0x%x\n", aux);
}
#endif /* __bsdi__ */
/*---------------------------------------------------------------------------*
* interface attach routine
*---------------------------------------------------------------------------*/
@ -282,7 +297,7 @@ i4brbchattach()
/*---------------------------------------------------------------------------*
* open rbch device
*---------------------------------------------------------------------------*/
int
PDEVSTATIC int
i4brbchopen(dev_t dev, int flag, int fmt, struct proc *p)
{
int unit = minor(dev);
@ -305,7 +320,7 @@ i4brbchopen(dev_t dev, int flag, int fmt, struct proc *p)
/*---------------------------------------------------------------------------*
* close rbch device
*---------------------------------------------------------------------------*/
int
PDEVSTATIC int
i4brbchclose(dev_t dev, int flag, int fmt, struct proc *p)
{
int unit = minor(dev);
@ -326,7 +341,7 @@ i4brbchclose(dev_t dev, int flag, int fmt, struct proc *p)
/*---------------------------------------------------------------------------*
* read from rbch device
*---------------------------------------------------------------------------*/
int
PDEVSTATIC int
i4brbchread(dev_t dev, struct uio *uio, int ioflag)
{
struct mbuf *m;
@ -419,7 +434,7 @@ i4brbchread(dev_t dev, struct uio *uio, int ioflag)
/*---------------------------------------------------------------------------*
* write to rbch device
*---------------------------------------------------------------------------*/
int
PDEVSTATIC int
i4brbchwrite(dev_t dev, struct uio * uio, int ioflag)
{
struct mbuf *m;
@ -520,60 +535,96 @@ i4brbchwrite(dev_t dev, struct uio * uio, int ioflag)
return(error);
}
/*---------------------------------------------------------------------------*
* rbch device ioctl handlibg
*---------------------------------------------------------------------------*/
PDEVSTATIC int
i4brbchioctl(dev_t dev, IOCTL_CMD_T cmd, caddr_t data, int flag, struct proc* p) {
i4brbchioctl(dev_t dev, IOCTL_CMD_T cmd, caddr_t data, int flag, struct proc* p)
{
int error = 0;
int unit = minor(dev);
switch(cmd)
{
#if 0
case I4B_RBCH_DIALOUT:
if(bootverbose)printf("EE-rbch%d: attempting dialout (ioctl)\n", unit);
i4b_l4_dialout(BDRV_RBCH, unit);
break;
#endif
case FIOASYNC: /* Set async mode */
if (*(int *)data) {
if(bootverbose)printf("EE-rbch%d: setting async mode\n", unit);
} else {
if(bootverbose)printf("EE-rbch%d: clearing async mode\n", unit);
if (*(int *)data)
{
DBGL4(L4_RBCHDBG, "i4brbchioctl", ("unit %d, setting async mode\n", unit));
}
else
{
DBGL4(L4_RBCHDBG, "i4brbchioctl", ("unit %d, clearing async mode\n", unit));
}
break;
case FIONBIO:
if (*(int *)data) {
if(bootverbose)printf("EE-rbch%d: setting non-blocking mode\n", unit);
if (*(int *)data)
{
DBGL4(L4_RBCHDBG, "i4brbchioctl", ("unit %d, setting non-blocking mode\n", unit));
rbch_softc[unit].sc_devstate |= ST_NOBLOCK;
} else {
if(bootverbose)printf("EE-rbch%d: clearing non-blocking mode\n", unit);
}
else
{
DBGL4(L4_RBCHDBG, "i4brbchioctl", ("unit %d, clearing non-blocking mode\n", unit));
rbch_softc[unit].sc_devstate &= ~ST_NOBLOCK;
}
break;
case TIOCCDTR: /* Clear DTR */
if(rbch_softc[unit].sc_devstate & ST_CONNECTED) {
if(bootverbose)printf("EE-rbch%d: disconnecting for DTR down\n", unit);
if(rbch_softc[unit].sc_devstate & ST_CONNECTED)
{
DBGL4(L4_RBCHDBG, "i4brbchioctl", ("unit %d, disconnecting for DTR down\n", unit));
i4b_l4_disconnect_ind(rbch_softc[unit].cd);
}
break;
case I4B_RBCH_DIALOUT:
{
size_t l;
for (l = 0; l < TELNO_MAX && ((char *)data)[l]; l++)
;
if (l)
{
DBGL4(L4_RBCHDBG, "i4brbchioctl", ("unit %d, attempting dialout to %s\n", unit, (char *)data));
i4b_l4_dialoutnumber(BDRV_RBCH, unit, l, (char *)data);
break;
}
/* fall through to SDTR */
}
case TIOCSDTR: /* Set DTR */
if(bootverbose)printf("EE-rbch%d: attempting dialout (DTR)\n", unit);
DBGL4(L4_RBCHDBG, "i4brbchioctl", ("unit %d, attempting dialout (DTR)\n", unit));
i4b_l4_dialout(BDRV_RBCH, unit);
break;
case TIOCSETA: /* Set termios struct */
break;
case TIOCGETA: /* Get termios struct */
*(struct termios *)data = rbch_softc[unit].it_in;
break;
case TIOCMGET:
*(int *)data = TIOCM_LE|TIOCM_DTR|TIOCM_RTS|TIOCM_CTS|TIOCM_DSR;
if (rbch_softc[unit].sc_devstate & ST_CONNECTED)
*(int *)data |= TIOCM_CD;
break;
case I4B_RBCH_VR_REQ:
{
msg_vr_req_t *mvr;
mvr = (msg_vr_req_t *)data;
mvr->version = VERSION;
mvr->release = REL;
mvr->step = STEP;
break;
}
default: /* Unknown stuff */
printf("\n ========= i4brbch%d - ioctl, unknown cmd %lx ==================== \n",
unit,
(u_long)cmd);
DBGL4(L4_RBCHDBG, "i4brbchioctl", ("unit %d, ioctl, unknown cmd %lx\n", unit, (u_long)cmd));
error = EINVAL;
break;
}
@ -642,8 +693,7 @@ i4brbchpoll(dev_t dev, int events, struct proc *p)
/*---------------------------------------------------------------------------*
* device driver select
*---------------------------------------------------------------------------*/
/* XXX fix "static" to PDEVSTATIC */
static int
PDEVSTATIC int
i4brbchselect(dev_t dev, int rw, struct proc *p)
{
int unit = minor(dev);

View File

@ -27,9 +27,9 @@
* i4b_tel.c - device driver for ISDN telephony
* --------------------------------------------
*
* $Id: i4b_tel.c,v 1.3 1999/05/20 10:09:03 hm Exp $
* $Id: i4b_tel.c,v 1.43 1999/07/09 06:44:00 hm Exp $
*
* last edit-date: [Thu May 6 09:30:13 1999]
* last edit-date: [Fri Jul 9 08:35:30 1999]
*
*---------------------------------------------------------------------------*/
@ -183,6 +183,7 @@ PDEVSTATIC d_close_t i4btelclose;
PDEVSTATIC d_read_t i4btelread;
PDEVSTATIC d_read_t i4btelwrite;
PDEVSTATIC d_ioctl_t i4btelioctl;
#ifdef OS_USES_POLL
PDEVSTATIC d_poll_t i4btelpoll;
#define POLLFIELD i4btelpoll
@ -192,6 +193,8 @@ PDEVSTATIC d_select_t i4btelsel;
#endif
#define CDEV_MAJOR 56
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
static struct cdevsw i4btel_cdevsw = {
/* open */ i4btelopen,
/* close */ i4btelclose,
@ -213,6 +216,13 @@ static struct cdevsw i4btel_cdevsw = {
/* maxio */ 0,
/* bmaj */ -1
};
#else
static struct cdevsw i4btel_cdevsw = {
i4btelopen, i4btelclose, i4btelread, i4btelwrite,
i4btelioctl, nostop, noreset, nodevtotty,
POLLFIELD, nommap, NULL, "i4btel", NULL, -1
};
#endif
PDEVSTATIC void i4btelinit(void *unused);
PDEVSTATIC void i4btelattach(void *);
@ -229,8 +239,12 @@ PSEUDO_SET(i4btelattach, i4b_tel);
PDEVSTATIC void
i4btelinit(void *unused)
{
cdevsw_add(&i4btel_cdevsw);
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
cdevsw_add(&i4btel_cdevsw);
#else
dev_t dev = makedev(CDEV_MAJOR, 0);
cdevsw_add(&dev, &i4btel_cdevsw, NULL);
#endif
}
SYSINIT(i4bteldev, SI_SUB_DRIVERS,
@ -441,6 +455,18 @@ i4btelioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
}
splx(s);
break;
case I4B_TEL_VR_REQ:
{
msg_vr_req_t *mvr;
mvr = (msg_vr_req_t *)data;
mvr->version = VERSION;
mvr->release = REL;
mvr->step = STEP;
break;
}
default:
error = ENOTTY;

View File

@ -27,9 +27,9 @@
* i4btrc - device driver for trace data read device
* ---------------------------------------------------
*
* $Id: i4b_trace.c,v 1.3 1999/05/20 10:09:05 hm Exp $
* $Id: i4b_trace.c,v 1.20 1999/06/01 10:23:58 hm Exp $
*
* last edit-date: [Wed Apr 28 10:21:09 1999]
* last edit-date: [Tue Jun 1 12:15:40 1999]
*
* NOTE: the code assumes that SPLI4B >= splimp !
*
@ -125,6 +125,7 @@ static d_open_t i4btrcopen;
static d_close_t i4btrcclose;
static d_read_t i4btrcread;
static d_ioctl_t i4btrcioctl;
#ifdef OS_USES_POLL
static d_poll_t i4btrcpoll;
#define POLLFIELD i4btrcpoll
@ -133,6 +134,8 @@ static d_poll_t i4btrcpoll;
#endif
#define CDEV_MAJOR 59
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
static struct cdevsw i4btrc_cdevsw = {
/* open */ i4btrcopen,
/* close */ i4btrcclose,
@ -154,6 +157,13 @@ static struct cdevsw i4btrc_cdevsw = {
/* maxio */ 0,
/* bmaj */ -1
};
#else
static struct cdevsw i4btrc_cdevsw = {
i4btrcopen, i4btrcclose, i4btrcread, nowrite,
i4btrcioctl, nostop, noreset, nodevtotty,
POLLFIELD, nommap, NULL, "i4btrc", NULL, -1
};
#endif
/*---------------------------------------------------------------------------*
* interface init routine
@ -161,8 +171,12 @@ static struct cdevsw i4btrc_cdevsw = {
static
void i4btrcinit(void *unused)
{
cdevsw_add(&i4btrc_cdevsw);
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
cdevsw_add(&i4btrc_cdevsw);
#else
dev_t dev = makedev(CDEV_MAJOR, 0);
cdevsw_add(&dev, &i4btrc_cdevsw, NULL);
#endif
}
SYSINIT(i4btrcdev, SI_SUB_DRIVERS,

View File

@ -27,9 +27,9 @@
* i4b_debug.h - i4b debug header file
* -----------------------------------
*
* $Id: i4b_debug.h,v 1.18 1999/04/28 14:50:55 hm Exp $
* $Id: i4b_debug.h,v 1.19 1999/05/28 15:03:32 hm Exp $
*
* last edit-date: [Wed Apr 28 16:50:36 1999]
* last edit-date: [Fri May 28 16:27:07 1999]
*
*---------------------------------------------------------------------------*/
@ -221,4 +221,54 @@ typedef struct {
#define I4B_CTL_CLR_HSCXSTAT _IOW('C', 3, hscxstat_t)
/*---------------------------------------------------------------------------*
* get LAPD/Q.921 statistics
*---------------------------------------------------------------------------*/
typedef struct {
/* transmit */
u_long tx_i; /* I */
u_long tx_rr; /* RR */
u_long tx_rnr; /* RNR */
u_long tx_rej; /* REJ */
u_long tx_sabme; /* SABME*/
u_long tx_dm; /* DM */
u_long tx_disc; /* DISC */
u_long tx_ua; /* UA */
u_long tx_frmr; /* FRMR */
u_long tx_tei; /* TEI */
/* receive */
u_long rx_i; /* I */
u_long rx_rr; /* RR */
u_long rx_rnr; /* RNR */
u_long rx_rej; /* REJ */
u_long rx_sabme; /* SABME*/
u_long rx_tei; /* TEI */
u_long rx_ui; /* UI */
u_long rx_disc; /* DISC */
u_long rx_xid; /* XID */
u_long rx_dm; /* DM */
u_long rx_ua; /* UA */
u_long rx_frmr; /* FRMR */
/* errors */
u_long err_rx_len; /* incorrect length */
u_long err_rx_badf; /* bad frame type */
u_long err_rx_bads; /* bad s frame */
u_long err_rx_badu; /* bad u frame */
u_long err_rx_badui; /* bad ui frame */
} lapdstat_t;
typedef struct {
int unit;
lapdstat_t lapdstat;
} l2stat_t;
#define I4B_CTL_GET_LAPDSTAT _IOWR('C', 4, l2stat_t)
#define I4B_CTL_CLR_LAPDSTAT _IOW('C', 5, int)
/* EOF */

View File

@ -27,9 +27,9 @@
* i4b_ioctl.h - messages kernel <--> userland
* -------------------------------------------
*
* $Id: i4b_ioctl.h,v 1.106 1999/05/19 08:51:14 hm Exp $
* $Id: i4b_ioctl.h,v 1.125 1999/07/30 07:02:11 hm Exp $
*
* last edit-date: [Wed May 19 10:56:56 1999]
* last edit-date: [Fri Jul 30 08:53:47 1999]
*
*---------------------------------------------------------------------------*/
@ -46,7 +46,7 @@
* version and release number for isdn4bsd package
*---------------------------------------------------------------------------*/
#define VERSION 0 /* version number */
#define REL 81 /* release number */
#define REL 83 /* release number */
#define STEP 0 /* release step */
/*---------------------------------------------------------------------------*
@ -103,7 +103,9 @@
#define CARD_TYPEP_ITKIX1 18 /* ITK ix1 micro */
#define CARD_TYPEP_AVMA1PCI 19 /* AVM FRITZ!CARD PCI */
#define CARD_TYPEP_PCC16 20 /* ELSA PCC-16 */
#define CARD_TYPEP_AVM_PNP 21 /* AVM FRITZ!CARD PnP */
#define CARD_TYPEP_SIE_ISURF2 22 /* Siemens I-Surf 2 PnP */
#define CARD_TYPEP_ASUSCOMIPAC 23 /* Asuscom ISDNlink 128 K PnP */
/*
* in case you add support for more cards, please update:
*
@ -113,7 +115,7 @@
* and adjust CARD_TYPEP_MAX below.
*/
#define CARD_TYPEP_MAX 20 /* max type */
#define CARD_TYPEP_MAX 23 /* max type */
/*---------------------------------------------------------------------------*
* card types for CTRL_DAIC
@ -175,7 +177,7 @@ typedef unsigned int cause_t; /* 32 bit unsigned int */
*---------------------------------------------------------------------------*/
#define SHA_FIXU 0 /* timeout algorithm for fix unit charging */
#define SHA_VARU 1 /* timeout algorithm for variable unit charging */
/*---------------------------------------------------------------------------*
* The shorthold data struct
*---------------------------------------------------------------------------*/
@ -593,14 +595,15 @@ typedef struct {
/*---------------------------------------------------------------------------*
* request version and release info from kernel part
* (msg_vr_req_t is also used by tel & rbch drivers)
*---------------------------------------------------------------------------*/
typedef struct {
int version; /* version number */
int release; /* release number */
int step; /* release step number */
} msg_vr_req_t;
#define I4B_VR_REQ _IOR('4', 9, msg_vr_req_t)
#define I4B_VR_REQ _IOR('4', 9, msg_vr_req_t)
/*---------------------------------------------------------------------------*
* Protocol download to active cards

View File

@ -0,0 +1,53 @@
/*
* Copyright (c) 1999 Hellmuth Michaelis. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*---------------------------------------------------------------------------
*
* i4b_rbch_ioctl.h raw B-channel driver interface ioctls
* ------------------------------------------------------
*
* $Id: i4b_rbch_ioctl.h,v 1.1 1999/07/09 06:44:00 hm Exp $
*
* last edit-date: [Fri Jul 9 08:35:07 1999]
*
*---------------------------------------------------------------------------*/
#ifndef _I4B_RBCH_IOCTL_H_
#define _I4B_RBCH_IOCTL_H_
/*---------------------------------------------------------------------------*
* instruct the rbch device to dial the given number
*---------------------------------------------------------------------------*/
typedef char telno_t[TELNO_MAX];
#define I4B_RBCH_DIALOUT _IOW('R', 1, telno_t)
/*---------------------------------------------------------------------------*
* request version and release info from kernel part
*---------------------------------------------------------------------------*/
#define I4B_RBCH_VR_REQ _IOR('R', 2, msg_vr_req_t)
#endif /* _I4B_RBCH_IOCTL_H_ */

View File

@ -27,9 +27,9 @@
* i4b_tel_ioctl.h telephony interface ioctls
* ------------------------------------------
*
* $Id: i4b_tel_ioctl.h,v 1.9 1999/04/21 10:06:32 hm Exp $
* $Id: i4b_tel_ioctl.h,v 1.10 1999/07/09 06:44:00 hm Exp $
*
* last edit-date: [Wed Apr 21 11:00:02 1999]
* last edit-date: [Fri Jul 9 08:34:28 1999]
*
*---------------------------------------------------------------------------*/
@ -54,6 +54,12 @@
#define I4B_TEL_SETAUDIOFMT _IOW('A', 1, int)
#define I4B_TEL_EMPTYINPUTQUEUE _IOW('A', 2, int)
/*---------------------------------------------------------------------------*
* request version and release info from kernel part
*---------------------------------------------------------------------------*/
#define I4B_TEL_VR_REQ _IOR('A', 3, msg_vr_req_t)
/*===========================================================================*
* /dev/i4bteld<n> devices (dialer interface)
*===========================================================================*/

View File

@ -0,0 +1,510 @@
/*
* Copyright (c) 1999 Ari Suutari. All rights reserved.
* Copyright (c) 1997, 1999 Hellmuth Michaelis. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*---------------------------------------------------------------------------
*
* isic - I4B Siemens ISDN Chipset Driver for Asuscom ISDNlink 128K PnP
* =====================================================================
*
* This driver works with Asuscom ISDNlink 128K PnP ISA adapter,
* which is based on Siemens IPAC chip (my card probes as ASU1690).
* Older Asuscom ISA cards are based on different chipset
* (containing two chips) - for those cards, one might want
* to try the Dynalink driver.
*
* This driver is heavily based on ELSA Quickstep 1000pro PCI
* driver written by Hellmuth Michaelis. Card initialization
* code is modeled after Linux i4l driver written by Karsten
* Keil.
*
* $Id: i4b_asuscom_ipac.c,v 1.1 1999/07/05 13:46:46 hm Exp $
*
* last edit-date: [Mon May 31 20:53:17 EEST 1999]
*
*---------------------------------------------------------------------------*/
#if defined(__FreeBSD__)
#include "isic.h"
#include "opt_i4b.h"
#include "pnp.h"
#else
#define NISIC 1
#define NPNP 1
#endif
#if (NISIC > 0) && (NPNP > 0) && defined(ASUSCOM_IPAC)
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <net/if.h>
#ifdef __FreeBSD__
#if __FreeBSD__ >= 3
#include <sys/ioccom.h>
#else
#include <sys/ioctl.h>
#endif
#include <machine/clock.h>
#include <i386/isa/isa_device.h>
#include <i386/isa/pnp.h>
#else
#include <machine/bus.h>
#include <sys/device.h>
#endif
#ifdef __FreeBSD__
#include <machine/i4b_debug.h>
#include <machine/i4b_ioctl.h>
#else
#include <i4b/i4b_debug.h>
#include <i4b/i4b_ioctl.h>
#endif
#include <i4b/include/i4b_global.h>
#include <i4b/include/i4b_l1l2.h>
#include <i4b/include/i4b_mbuf.h>
#include <i4b/layer1/i4b_l1.h>
#include <i4b/layer1/i4b_isac.h>
#include <i4b/layer1/i4b_hscx.h>
#include <i4b/layer1/i4b_ipac.h>
#ifndef __FreeBSD__
#include <i4b/layer1/pci_isic.h>
#endif
/* masks for register encoded in base addr */
#define ASI_BASE_MASK 0x0ffff
#define ASI_OFF_MASK 0xf0000
/* register id's to be encoded in base addr */
#define ASI_IDISAC 0x00000
#define ASI_IDHSCXA 0x10000
#define ASI_IDHSCXB 0x20000
#define ASI_IDIPAC 0x40000
/* offsets from base address */
#define ASI_OFF_ALE 0x00
#define ASI_OFF_RW 0x01
/*---------------------------------------------------------------------------*
* Asuscom ISDNlink 128K PnP ISAC get fifo routine
*---------------------------------------------------------------------------*/
#ifdef __FreeBSD__
static void
asi_read_fifo(void *buf, const void *base, size_t len)
{
u_int asus_base;
asus_base = ((u_int) base) & ASI_BASE_MASK;
switch (((u_int) base) & ASI_OFF_MASK) {
case ASI_IDHSCXB:
outb(asus_base + ASI_OFF_ALE, IPAC_HSCXB_OFF);
insb(asus_base + ASI_OFF_RW, (u_char *)buf, (u_int)len);
break;
case ASI_IDHSCXA:
outb(asus_base + ASI_OFF_ALE, IPAC_HSCXA_OFF);
insb(asus_base + ASI_OFF_RW, (u_char *)buf, (u_int)len);
break;
case ASI_IDISAC:
outb(asus_base + ASI_OFF_ALE, IPAC_ISAC_OFF);
insb(asus_base + ASI_OFF_RW, (u_char *)buf, (u_int)len);
break;
}
}
#else
static void
asi_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
{
bus_space_tag_t t = sc->sc_maps[1].t;
bus_space_handle_t h = sc->sc_maps[1].h;
switch (what) {
case ISIC_WHAT_ISAC:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_ISAC_OFF);
bus_space_read_multi_1(t, h, ASI_OFF_RW, buf, size);
break;
case ISIC_WHAT_HSCXA:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_HSCXA_OFF);
bus_space_read_multi_1(t, h, ASI_OFF_RW, buf, size);
break;
case ISIC_WHAT_HSCXB:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_HSCXB_OFF);
bus_space_read_multi_1(t, h, ASI_OFF_RW, buf, size);
break;
}
}
#endif
/*---------------------------------------------------------------------------*
* Asuscom ISDNlink 128K PnP ISAC put fifo routine
*---------------------------------------------------------------------------*/
#ifdef __FreeBSD__
static void
asi_write_fifo(void *base, const void *buf, size_t len)
{
u_int asus_base;
asus_base = ((u_int) base) & ASI_BASE_MASK;
switch (((u_int) base) & ASI_OFF_MASK) {
case ASI_IDHSCXB:
outb(asus_base + ASI_OFF_ALE, IPAC_HSCXB_OFF);
outsb(asus_base + ASI_OFF_RW, (u_char *)buf, (u_int)len);
break;
case ASI_IDHSCXA:
outb(asus_base + ASI_OFF_ALE, IPAC_HSCXA_OFF);
outsb(asus_base + ASI_OFF_RW, (u_char *)buf, (u_int)len);
break;
case ASI_IDISAC:
outb(asus_base + ASI_OFF_ALE, IPAC_ISAC_OFF);
outsb(asus_base + ASI_OFF_RW, (u_char *)buf, (u_int)len);
break;
}
}
#else
static void
asi_write_fifo(struct isic_softc *sc,
int what, const void *buf, size_t size)
{
bus_space_tag_t t = sc->sc_maps[1].t;
bus_space_handle_t h = sc->sc_maps[1].h;
switch (what) {
case ISIC_WHAT_ISAC:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_ISAC_OFF);
bus_space_write_multi_1(t, h, ASI_OFF_RW, (u_int8_t*)buf,size);
break;
case ISIC_WHAT_HSCXA:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_HSCXA_OFF);
bus_space_write_multi_1(t, h, ASI_OFF_RW, (u_int8_t*)buf,size);
break;
case ISIC_WHAT_HSCXB:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_HSCXB_OFF);
bus_space_write_multi_1(t, h, ASI_OFF_RW, (u_int8_t*)buf,size);
break;
}
}
#endif
/*---------------------------------------------------------------------------*
* Asuscom ISDNlink 128K PnP ISAC put register routine
*---------------------------------------------------------------------------*/
#ifdef __FreeBSD__
static void
asi_write_reg(u_char *base, u_int offset, u_int v)
{
u_int asus_base;
asus_base = ((u_int) base) & ASI_BASE_MASK;
switch (((u_int) base) & ASI_OFF_MASK) {
case ASI_IDHSCXB:
outb(asus_base + ASI_OFF_ALE, (u_char)(offset+IPAC_HSCXB_OFF));
outb(asus_base + ASI_OFF_RW, (u_char)v);
break;
case ASI_IDHSCXA:
outb(asus_base + ASI_OFF_ALE, (u_char)(offset+IPAC_HSCXA_OFF));
outb(asus_base + ASI_OFF_RW, (u_char)v);
break;
case ASI_IDISAC:
outb(asus_base + ASI_OFF_ALE, (u_char)(offset+IPAC_ISAC_OFF));
outb(asus_base + ASI_OFF_RW, (u_char)v);
break;
case ASI_IDIPAC:
outb(asus_base + ASI_OFF_ALE, (u_char)(offset+IPAC_IPAC_OFF));
outb(asus_base + ASI_OFF_RW, (u_char)v);
break;
}
}
#else
static void
asi_write_reg(struct isic_softc *sc,
int what, bus_size_t offs, u_int8_t data)
{
bus_space_tag_t t = sc->sc_maps[1].t;
bus_space_handle_t h = sc->sc_maps[1].h;
switch (what) {
case ISIC_WHAT_ISAC:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_ISAC_OFF+offs);
bus_space_write_1(t, h, ASI_OFF_RW, data);
break;
case ISIC_WHAT_HSCXA:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_HSCXA_OFF+offs);
bus_space_write_1(t, h, ASI_OFF_RW, data);
break;
case ISIC_WHAT_HSCXB:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_HSCXB_OFF+offs);
bus_space_write_1(t, h, ASI_OFF_RW, data);
break;
case ISIC_WHAT_IPAC:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_IPAC_OFF+offs);
bus_space_write_1(t, h, ASI_OFF_RW, data);
break;
}
}
#endif
/*---------------------------------------------------------------------------*
* Asuscom ISDNlink 128K PnP ISAC get register routine
*---------------------------------------------------------------------------*/
#ifdef __FreeBSD__
static u_char
asi_read_reg(u_char *base, u_int offset)
{
u_int asus_base;
asus_base = ((u_int) base) & ASI_BASE_MASK;
switch (((u_int) base) & ASI_OFF_MASK) {
case ASI_IDHSCXB:
outb(asus_base + ASI_OFF_ALE, (u_char)(offset+IPAC_HSCXB_OFF));
return(inb(asus_base + ASI_OFF_RW));
case ASI_IDHSCXA:
outb(asus_base + ASI_OFF_ALE, (u_char)(offset+IPAC_HSCXA_OFF));
return(inb(asus_base + ASI_OFF_RW));
case ASI_IDISAC:
outb(asus_base + ASI_OFF_ALE, (u_char)(offset+IPAC_ISAC_OFF));
return(inb(asus_base + ASI_OFF_RW));
case ASI_IDIPAC:
outb(asus_base + ASI_OFF_ALE, (u_char)(offset+IPAC_IPAC_OFF));
return(inb(asus_base + ASI_OFF_RW));
}
return 0; /* NOTREACHED */
}
#else
static u_int8_t
asi_read_reg(struct isic_softc *sc, int what, bus_size_t offs)
{
bus_space_tag_t t = sc->sc_maps[1].t;
bus_space_handle_t h = sc->sc_maps[1].h;
switch (what) {
case ISIC_WHAT_ISAC:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_ISAC_OFF+offs);
return bus_space_read_1(t, h, ASI_OFF_RW);
case ISIC_WHAT_HSCXA:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_HSCXA_OFF+offs);
return bus_space_read_1(t, h, ASI_OFF_RW);
case ISIC_WHAT_HSCXB:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_HSCXB_OFF+offs);
return bus_space_read_1(t, h, ASI_OFF_RW);
case ISIC_WHAT_IPAC:
bus_space_write_1(t, h, ASI_OFF_ALE, IPAC_IPAC_OFF+offs);
return bus_space_read_1(t, h, ASI_OFF_RW);
}
return 0;
}
#endif
/*---------------------------------------------------------------------------*
* isic_attach_asi - attach for Asuscom ISDNlink 128K PnP
*---------------------------------------------------------------------------*/
#ifdef __FreeBSD__
int
isic_probe_asi(struct isa_device *dev, unsigned int iobase2)
{
struct isic_softc *sc = &isic_sc[dev->id_unit];
/* check max unit range */
if(dev->id_unit >= ISIC_MAXUNIT)
{
printf("isic%d: Error, unit %d >= ISIC_MAXUNIT "
"for Asuscom ISDNlink 128K PnP!\n",
dev->id_unit, dev->id_unit);
return(0);
}
sc->sc_unit = dev->id_unit;
/* setup iobase */
if((dev->id_iobase <= 0) || (dev->id_iobase > 0xffff))
{
printf("isic%d: Error, invalid iobase 0x%x specified "
"for Asuscom ISDNlink 128K PnP\n",
dev->id_unit, iobase2);
return(0);
}
sc->sc_port = dev->id_iobase;
/* setup access routines */
sc->clearirq = NULL;
sc->readreg = asi_read_reg;
sc->writereg = asi_write_reg;
sc->readfifo = asi_read_fifo;
sc->writefifo = asi_write_fifo;
/* setup card type */
sc->sc_cardtyp = CARD_TYPEP_ASUSCOMIPAC;
/* setup IOM bus type */
sc->sc_bustyp = BUS_TYPE_IOM2;
/* setup chip type = IPAC ! */
sc->sc_ipac = 1;
sc->sc_bfifolen = IPAC_BFIFO_LEN;
/* setup ISAC and HSCX base addr */
ISAC_BASE = (caddr_t) ((u_int)dev->id_iobase | ASI_IDISAC);
HSCX_A_BASE = (caddr_t) ((u_int)dev->id_iobase | ASI_IDHSCXA);
HSCX_B_BASE = (caddr_t) ((u_int)dev->id_iobase | ASI_IDHSCXB);
IPAC_BASE = (caddr_t) ((u_int)dev->id_iobase | ASI_IDIPAC);
return (1);
}
int
isic_attach_asi(struct isa_device *dev, unsigned int iobase2)
{
struct isic_softc *sc = &isic_sc[dev->id_unit];
/* enable hscx/isac irq's */
#if 0
/*
* This is for ELSA driver
*/
IPAC_WRITE(IPAC_MASK, (IPAC_MASK_INT1 | IPAC_MASK_INT0));
IPAC_WRITE(IPAC_ACFG, 0); /* outputs are open drain */
IPAC_WRITE(IPAC_AOE, /* aux 5..2 are inputs, 7, 6 outputs */
(IPAC_AOE_OE5 | IPAC_AOE_OE4 | IPAC_AOE_OE3 | IPAC_AOE_OE2));
IPAC_WRITE(IPAC_ATX, 0xff); /* set all output lines high */
outb(dev->id_iobase + 0x4c, 0x41); /* enable card interrupt */
#endif
/*
* This has been taken from Linux driver.
* XXX Figure out bits to use defines as original driver did.
*/
IPAC_WRITE (IPAC_CONF, 0x0);
IPAC_WRITE (IPAC_ACFG, 0xff);
IPAC_WRITE (IPAC_AOE, 0x0);
IPAC_WRITE (IPAC_MASK, 0xc0);
IPAC_WRITE (IPAC_PCFG, 0x12);
return (1);
}
#else /* !FreeBSD */
void
isic_attach_asi(psc, pa)
struct pci_isic_softc *psc;
struct pci_attach_args *pa;
{
struct isic_softc *sc = &psc->sc_isic;
/* setup io mappings */
sc->sc_num_mappings = 2;
MALLOC_MAPS(sc);
sc->sc_maps[0].size = 0;
if (pci_mapreg_map(pa, ASI_PORT0_MAPOFF, PCI_MAPREG_TYPE_IO, 0,
&sc->sc_maps[0].t, &sc->sc_maps[0].h, NULL, NULL)) {
printf("%s: can't map i/o space\n", sc->sc_dev.dv_xname);
return;
}
sc->sc_maps[1].size = 0;
if (pci_mapreg_map(pa, ASI_PORT1_MAPOFF, PCI_MAPREG_TYPE_IO, 0,
&sc->sc_maps[1].t, &sc->sc_maps[1].h, NULL, NULL)) {
printf("%s: can't map i/o space\n", sc->sc_dev.dv_xname);
return;
}
/* setup access routines */
sc->clearirq = NULL;
sc->readreg = asi_read_reg;
sc->writereg = asi_write_reg;
sc->readfifo = asi_read_fifo;
sc->writefifo = asi_write_fifo;
/* setup card type */
sc->sc_cardtyp = CARD_TYPEP_ASUSCOMIPAC;
/* setup IOM bus type */
sc->sc_bustyp = BUS_TYPE_IOM2;
/* setup chip type = IPAC ! */
sc->sc_ipac = 1;
sc->sc_bfifolen = IPAC_BFIFO_LEN;
#if 0
/*
* This for ELSA card in original driver.
*/
/* enable hscx/isac irq's */
IPAC_WRITE(IPAC_MASK, (IPAC_MASK_INT1 | IPAC_MASK_INT0));
IPAC_WRITE(IPAC_ACFG, 0); /* outputs are open drain */
IPAC_WRITE(IPAC_AOE, /* aux 5..2 are inputs, 7, 6 outputs */
(IPAC_AOE_OE5 | IPAC_AOE_OE4 | IPAC_AOE_OE3 | IPAC_AOE_OE2));
IPAC_WRITE(IPAC_ATX, 0xff); /* set all output lines high */
bus_space_write_1(sc->sc_maps[0].t, sc->sc_maps[0].h, 0x4c, 0x41); /* enable card interrupt */
#endif
/*
* This has been taken from Linux driver.
* XXX Figure out bits to use defines as original driver did.
*/
IPAC_WRITE (IPAC_CONF, 0x0);
IPAC_WRITE (IPAC_ACFG, 0xff);
IPAC_WRITE (IPAC_AOE, 0x0);
IPAC_WRITE (IPAC_MASK, 0xc0);
IPAC_WRITE (IPAC_PCFG, 0x12);
}
#endif
#endif /* (NISIC > 0) && defined(ASUSCOM_IPAC) */

View File

@ -35,9 +35,9 @@
* Fritz!Card PCI specific routines for isic driver
* ------------------------------------------------
*
* $Id: i4b_avm_fritz_pci.c,v 1.5 1999/05/05 11:50:21 hm Exp $
* $Id: i4b_avm_fritz_pci.c,v 1.6 1999/06/01 12:10:25 hm Exp $
*
* last edit-date: [Tue Mar 16 16:18:35 1999]
* last edit-date: [Tue Jun 1 14:08:01 1999]
*
*---------------------------------------------------------------------------*/
@ -390,30 +390,31 @@ avma1pp_write_fifo(void *base, const void *buf, size_t len)
}
/* tell the board to use the ISAC fifo */
outb(sc->sc_port + ADDR_REG_OFFSET, ISAC_FIFO);
outsb(sc->sc_port + ISAC_REG_OFFSET, (u_char *)buf, len);
outsb(sc->sc_port + ISAC_REG_OFFSET, (const u_char *)buf, len);
}
static void
hscx_write_fifo(int chan, const void *buf, size_t len, struct isic_softc *sc)
{
register u_int *ip;
register const u_int *ip;
register size_t cnt;
isic_Bchan_t *Bchan = &sc->sc_chan[chan];
sc->avma1pp_cmd &= ~HSCX_CMD_XME;
sc->avma1pp_txl = 0;
if (len != sc->sc_bfifolen)
if (Bchan->out_mbuf_cur == NULL)
{
if (Bchan->bprot != BPROT_NONE)
sc->avma1pp_cmd |= HSCX_CMD_XME;
sc->avma1pp_txl = len;
}
if (len != sc->sc_bfifolen)
sc->avma1pp_txl = len;
cnt = 0; /* borrow cnt */
AVMA1PPSETCMDLONG(cnt);
hscx_write_reg(chan, HSCX_STAT, cnt, sc);
ip = (u_int *)buf;
ip = (const u_int *)buf;
cnt = 0;
while (cnt < len)
{
@ -450,12 +451,13 @@ hscx_write_fifo(int chan, const void *buf, size_t len, struct isic_softc *sc)
sc->avma1pp_cmd &= ~HSCX_CMD_XME;
sc->avma1pp_txl = 0;
if (len != sc->sc_bfifolen)
if (Bchan->out_mbuf_cur == NULL)
{
if (Bchan->bprot != BPROT_NONE)
sc->avma1pp_cmd |= HSCX_CMD_XME;
sc->avma1pp_txl = len;
}
if (len != sc->sc_bfifolen)
sc->avma1pp_txl = len;
cnt = 0; /* borrow cnt */
AVMA1PPSETCMDLONG(cnt);
@ -492,7 +494,7 @@ avma1pp_write_reg(u_char *base, u_int offset, u_int v)
hscx_write_reg(0, offset, v, sc);
return;
}
if (((int)base & IS_HSCX_MASK) == HSCX0FAKE)
if (((int)base & IS_HSCX_MASK) == HSCX1FAKE)
{
hscx_write_reg(1, offset, v, sc);
return;

File diff suppressed because it is too large Load Diff

View File

@ -33,7 +33,7 @@
* isdn4bsd layer1 driver for Dynalink IS64PH isdn TA
* ==================================================
*
* $Id: i4b_dynalink.c,v 1.9 1999/02/14 09:44:58 hm Exp $
* $Id: i4b_dynalink.c,v 1.10 1999/07/26 09:03:49 hm Exp $
*
* last edit-date: [Sun Feb 14 10:26:21 1999]
*
@ -108,6 +108,8 @@
#include <machine/clock.h>
#include <i386/isa/isa_device.h>
#include <i386/isa/pnp.h>
#elif defined(__bsdi__)
#include <i386/isa/pnp.h>
#else
#include <machine/bus.h>
#include <sys/device.h>
@ -129,15 +131,21 @@
#include <i4b/layer1/i4b_isac.h>
#include <i4b/layer1/i4b_hscx.h>
#ifdef __FreeBSD__
#if defined(__FreeBSD__) || defined(__bsdi__)
static void dynalink_read_fifo(void *buf, const void *base, size_t len);
static void dynalink_write_fifo(void *base, const void *buf, size_t len);
static void dynalink_write_reg(u_char *base, u_int offset, u_int v);
static u_char dynalink_read_reg(u_char *base, u_int offset);
#endif
#ifdef __FreeBSD__
extern struct isa_driver isicdriver;
#endif
#ifdef __bsdi__
extern struct cfdriver isiccd;
#endif
#else
#if !defined(__FreeBSD__) && !defined(__bsdi__)
static void dynalink_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size);
static void dynalink_write_fifo(struct isic_softc *sc, int what, const void *buf, size_t size);
static void dynalink_write_reg(struct isic_softc *sc, int what, bus_size_t offs, u_int8_t data);
@ -158,13 +166,15 @@ void isic_attach_Dyn(struct isic_softc *sc);
#define HSCXA 0x00
#define HSCXB 0x40
#ifdef __FreeBSD__
#if defined(__FreeBSD__) || defined(__bsdi__)
/* base address juggling */
#define HSCXB_HACK 0x400
#define IOBASE(addr) (((int)addr)&0x3FC)
#define IOADDR(addr) (((int)addr)&0x3FF)
#define IS_HSCXB_HACK(addr) ((((int)addr)&HSCXB_HACK)?HSCXB:HSCXA)
#endif
#ifdef __FreeBSD__
/* ISIC probe and attach
*/
@ -271,6 +281,136 @@ isic_attach_Dyn(struct isa_device *dev, unsigned int iobase2)
return(1);
}
#elif defined(__bsdi__)
/* ISIC probe and attach
*/
static int
set_softc(struct isic_softc *sc, struct isa_attach_args *ia, int unit)
{
if (unit >= NISIC)
return 0;
sc->sc_unit = unit;
switch(ffs(ia->ia_irq) - 1)
{
case 3:
case 4:
case 5:
case 9:
case 10:
case 11:
case 12:
case 15:
break;
default:
printf("isic%d: Error, invalid IRQ [%d] specified for Dynalink IS64PH.\n",
unit, ffs(ia->ia_irq)-1);
return(0);
break;
}
sc->sc_irq = ia->ia_irq;
/* check if memory addr specified */
if(ia->ia_maddr)
{
printf("isic%d: Error, mem addr 0x%lx specified for Dynalink IS64PH.\n",
unit, (u_long)ia->ia_maddr);
return (0);
}
/* check if we got an iobase */
if ( (ia->ia_iobase < 0x100) ||
(ia->ia_iobase > 0x3f8) ||
(ia->ia_iobase & 3) )
{
printf("isic%d: Error, invalid iobase 0x%x specified for Dynalink!\n", unit, ia->ia_iobase);
return(0);
}
sc->sc_port = ia->ia_iobase;
/* setup access routines */
sc->clearirq = NULL;
sc->readreg = dynalink_read_reg;
sc->writereg = dynalink_write_reg;
sc->readfifo = dynalink_read_fifo;
sc->writefifo = dynalink_write_fifo;
/* setup card type */
sc->sc_cardtyp = CARD_TYPEP_DYNALINK;
/* setup IOM bus type */
sc->sc_bustyp = BUS_TYPE_IOM2;
sc->sc_ipac = 0;
sc->sc_bfifolen = HSCX_FIFO_LEN;
/* setup ISAC and HSCX base addr */
ISAC_BASE = (caddr_t) sc->sc_port;
HSCX_A_BASE = (caddr_t) sc->sc_port + 1;
HSCX_B_BASE = (caddr_t) sc->sc_port + 1 + HSCXB_HACK;
return 1;
}
int
isapnp_match_dynalink(struct device *parent, struct cfdata *cf,
struct isa_attach_args *ia)
{
struct isic_softc dummysc, *sc = &dummysc;
pnp_resource_t res;
char *ids[] = {"ASU1688", NULL};
bzero(&res, sizeof res);
res.res_irq[0].irq_level = ia->ia_irq;
res.res_port[0].prt_base = ia->ia_iobase;
res.res_port[0].prt_length = 4;
if (!pnp_assigndev(ids, isiccd.cd_name, &res))
return (0);
ia->ia_irq = res.res_irq[0].irq_level;
ia->ia_iobase = res.res_port[0].prt_base;
ia->ia_iosize = res.res_port[0].prt_length;
if (set_softc(sc, ia, cf->cf_unit) == 0)
return 0;
/* Read HSCX A/B VSTR. Expected value is 0x05 (V2.1). */
if( ((HSCX_READ(0, H_VSTR) & 0xf) != 0x5) ||
((HSCX_READ(1, H_VSTR) & 0xf) != 0x5) )
{
printf("isic%d: HSCX VSTR test failed for Dynalink\n",
cf->cf_unit);
printf("isic%d: HSC0: VSTR: %#x\n",
cf->cf_unit, HSCX_READ(0, H_VSTR));
printf("isic%d: HSC1: VSTR: %#x\n",
cf->cf_unit, HSCX_READ(1, H_VSTR));
return (0);
}
cf->cf_flags = FLAG_DYNALINK;
return (1);
}
int
isic_attach_Dyn(struct device *parent, struct device *self,
struct isa_attach_args *ia)
{
struct isic_softc *sc = (struct isic_softc *)self;
int unit = sc->sc_dev.dv_unit;
/* Commit the probed attachment values */
if (set_softc(sc, ia, unit) == 0)
panic("isic_attach_Dyn: set_softc");
outb((ia->ia_iobase)+ADDR, RESET);
DELAY(SEC_DELAY / 10);
outb((ia->ia_iobase)+ADDR, 0);
DELAY(SEC_DELAY / 10);
return(1);
}
#else
void isic_attach_Dyn(struct isic_softc *sc)
@ -320,7 +460,7 @@ void isic_attach_Dyn(struct isic_softc *sc)
REM: this is only true for the FreeBSD version of I4B!
*/
#ifdef __FreeBSD__
#if defined(__FreeBSD__) || defined(__bsdi__)
static void
dynalink_read_fifo(void *buf, const void *base, size_t len)
{
@ -350,7 +490,7 @@ dynalink_read_fifo(struct isic_softc *sc, int what, void *buf, size_t size)
}
#endif
#ifdef __FreeBSD__
#if defined(__FreeBSD__) || defined(__bsdi__)
static void
dynalink_write_fifo(void *base, const void *buf, size_t len)
{
@ -379,7 +519,7 @@ static void dynalink_write_fifo(struct isic_softc *sc, int what, const void *buf
}
#endif
#ifdef __FreeBSD__
#if defined(__FreeBSD__) || defined(__bsdi__)
static void
dynalink_write_reg(u_char *base, u_int offset, u_int v)
{
@ -408,7 +548,7 @@ static void dynalink_write_reg(struct isic_softc *sc, int what, bus_size_t offs,
}
#endif
#ifdef __FreeBSD__
#if defined(__FreeBSD__) || defined(__bsdi__)
static u_char
dynalink_read_reg(u_char *base, u_int offset)
{

View File

@ -27,9 +27,9 @@
* i4b_ipac.h - definitions for the Siemens IPAC PSB2115 chip
* ==========================================================
*
* $Id: i4b_ipac.h,v 1.5 1999/02/14 09:44:59 hm Exp $
* $Id: i4b_ipac.h,v 1.6 1999/06/08 08:13:00 hm Exp $
*
* last edit-date: [Sun Feb 14 10:27:03 1999]
* last edit-date: [Tue Jun 8 09:53:26 1999]
*
*---------------------------------------------------------------------------
*/
@ -44,6 +44,10 @@
#define IPAC_ISAC_OFF 0x80
#define IPAC_IPAC_OFF 0xc0
/* chip version */
#define IPAC_V11 0x01 /* IPAC Version 1.1 */
/*
* definitions of registers and bits for the IPAC ISDN chip.
*/

View File

@ -27,9 +27,9 @@
* i4b_isic.c - global isic stuff
* ==============================
*
* $Id: i4b_isic.c,v 1.47 1999/04/20 09:34:14 hm Exp $
* $Id: i4b_isic.c,v 1.51 1999/07/26 09:03:49 hm Exp $
*
* last edit-date: [Sun Feb 14 10:27:20 1999]
* last edit-date: [Mon Jul 26 10:59:56 1999]
*
*---------------------------------------------------------------------------*/
@ -97,6 +97,7 @@ struct cfdriver isiccd =
sizeof(struct isic_softc) };
int isa_isicmatch(struct device *parent, struct cfdata *cf, struct isa_attach_args *);
int isapnp_isicmatch(struct device *parent, struct cfdata *cf, struct isa_attach_args *);
int isa_isicattach(struct device *parent, struct device *self, struct isa_attach_args *ia);
static int
@ -109,8 +110,7 @@ isicmatch(struct device *parent, struct cfdata *cf, void *aux)
return 0; /* for now */
}
if (ia->ia_bustype == BUS_PNP) {
/* return isapnp_isicmatch(parent, cf, ia); */
return 0; /* for now */
return isapnp_isicmatch(parent, cf, ia);
}
return isa_isicmatch(parent, cf, ia);
}
@ -209,6 +209,9 @@ isicintr(void *arg)
was_isac_irq = 1;
}
}
#ifdef NOTDEF
#if !defined(amiga) && !defined(atari) /* XXX should be: #if INTS_ARE_SHARED */
#ifdef ELSA_QS1ISA
if(sc->sc_cardtyp != CARD_TYPEP_ELSAQS1ISA)
@ -220,6 +223,8 @@ isicintr(void *arg)
}
#endif
#endif /* !AMIGA && !ATARI */
#endif /* NOTDEF */
HSCX_WRITE(0, H_MASK, 0xff);
ISAC_WRITE(I_MASK, 0xff);
@ -273,21 +278,27 @@ isicintr(void *arg)
ipac_irq_stat & IPAC_ISTA_EXB);
was_ipac_irq = 1;
}
if(ipac_irq_stat & (IPAC_ISTA_ICD | IPAC_ISTA_EXD))
if(ipac_irq_stat & IPAC_ISTA_ICD)
{
/* ISAC interrupt */
isic_isac_irq(sc, ISAC_READ(I_ISTA));
was_ipac_irq = 1;
}
if(ipac_irq_stat & IPAC_ISTA_EXD)
{
/* force ISAC interrupt handling */
isic_isac_irq(sc, ISAC_ISTA_EXI);
was_ipac_irq = 1;
}
/* do as long as there are pending irqs in the chip */
if(!ipac_irq_stat)
break;
}
#ifdef NOTDEF
if(was_ipac_irq == 0)
DBGL1(L1_ERROR, "isicintr", ("WARNING: unit %d, No IRQ from IPAC!\n", sc->sc_unit));
#endif
IPAC_WRITE(IPAC_MASK, 0xff);
DELAY(50);
IPAC_WRITE(IPAC_MASK, 0xc0);

View File

@ -27,9 +27,9 @@
* i4b_isic_isa.c - ISA bus interface
* ==================================
*
* $Id: i4b_isic_isa.c,v 1.20 1999/05/10 09:37:35 hm Exp $
* $Id: i4b_isic_isa.c,v 1.24 1999/07/26 09:03:49 hm Exp $
*
* last edit-date: [Tue Apr 20 11:47:59 1999]
* last edit-date: [Mon Jul 26 10:59:51 1999]
*
*---------------------------------------------------------------------------*/
@ -210,6 +210,18 @@ isicprobe(struct isa_device *dev)
return(ret);
}
#elif defined(__bsdi__)
/*---------------------------------------------------------------------------*
* isic - pnp device driver probe routine
*---------------------------------------------------------------------------*/
int
isapnp_isicmatch(struct device *parent, struct cfdata *cf, struct isa_attach_args *ia)
{
#ifdef DYNALINK
if (isapnp_match_dynalink(parent, cf, ia))
return 1;
#endif
return 0;
}
/*---------------------------------------------------------------------------*
* isic - non-pnp device driver probe routine
*---------------------------------------------------------------------------*/
@ -305,6 +317,7 @@ isic_realattach(struct isa_device *dev, unsigned int iobase2)
*---------------------------------------------------------------------------*/
int
isa_isicattach(struct device *parent, struct device *self, struct isa_attach_args *ia)
#else /* ! __FreeBSD__ */
int
@ -316,19 +329,26 @@ isicattach(int flags, struct isic_softc *sc)
char *drvid;
#ifdef __FreeBSD__
struct isic_softc *sc = &isic_sc[dev->id_unit];
#define PARM dev
#define PARM2 dev, iobase2
#define FLAGS dev->id_flags
#elif defined(__bsdi__)
struct isic_softc *sc = (struct isic_softc *)self;
#define PARM parent, self, ia
#define PARM2 parent, self, ia
#define FLAGS sc->sc_flags
#else
#define PARM sc
#define PARM2 sc
#define FLAGS flags
#endif
#endif /* __FreeBSD__ */
static char *ISACversion[] = {
"2085 Version A1/A2 or 2086/2186 Version 1.1",
@ -353,7 +373,7 @@ isicattach(int flags, struct isic_softc *sc)
#ifdef __FreeBSD__
if(dev->id_unit != next_isic_unit)
{
printf("isicattach: Error: new unit (%d) != next_isic_unit (%d)!\n", dev->id_unit, next_isic_unit);
/*XXX*/ printf("isicattach: Error: new unit (%d) != next_isic_unit (%d)!\n", dev->id_unit, next_isic_unit);
return(0);
}
@ -413,9 +433,16 @@ isicattach(int flags, struct isic_softc *sc)
break;
#endif
#ifdef amiga
case FLAG_BLMASTER:
ret = 1; /* full detection was done in caller */
break;
#endif
/* ======================================================================
* Only P&P cards follow below!!!
*/
#ifdef __FreeBSD__ /* we've already splitted all non-ISA stuff
out of this ISA specific part for the other
OS */
@ -456,15 +483,26 @@ isicattach(int flags, struct isic_softc *sc)
break;
#endif
#endif /* __FreeBSD__ / P&P specific part */
/* --- XXX - don't know how to handle this - should be removed!!!! ---- */
#ifdef amiga
case FLAG_BLMASTER:
ret = 1; /* full detection was done in caller */
#ifdef AVM_PNP
case FLAG_AVM_PNP:
ret = isic_attach_avm_pnp(PARM2);
ret = 0;
break;
#endif
/* ------------------------------------------------------------------- */
#ifdef SIEMENS_ISURF2
case FLAG_SIEMENS_ISURF2:
ret = isic_attach_siemens_isurf(PARM2);
break;
#endif
#ifdef ASUSCOM_IPAC
case FLAG_ASUSCOM_IPAC:
ret = isic_attach_asi(PARM2);
break;
#endif
#endif /* __FreeBSD__ / P&P specific part */
default:
break;
@ -473,40 +511,78 @@ isicattach(int flags, struct isic_softc *sc)
if(ret == 0)
return(0);
sc->sc_isac_version = 0;
sc->sc_isac_version = ((ISAC_READ(I_RBCH)) >> 5) & 0x03;
switch(sc->sc_isac_version)
if(sc->sc_ipac)
{
case ISAC_VA:
case ISAC_VB1:
case ISAC_VB2:
case ISAC_VB3:
break;
ret = IPAC_READ(IPAC_ID);
default:
printf(ISIC_FMT "Error, ISAC version %d unknown!\n",
ISIC_PARM, sc->sc_isac_version);
if(ret != IPAC_V11)
{
printf("isic%d: Error, IPAC version %d unknown!\n",
sc->sc_unit, ret);
return(0);
break;
}
}
sc->sc_hscx_version = HSCX_READ(0, H_VSTR) & 0xf;
switch(sc->sc_hscx_version)
else
{
case HSCX_VA1:
case HSCX_VA2:
case HSCX_VA3:
case HSCX_V21:
break;
default:
printf(ISIC_FMT "Error, HSCX version %d unknown!\n",
ISIC_PARM, sc->sc_hscx_version);
return(0);
break;
};
sc->sc_isac_version = 0;
sc->sc_hscx_version = 0;
if(sc->sc_ipac)
{
ret = IPAC_READ(IPAC_ID);
switch(ret)
{
case 0x01:
printf("isic%d: IPAC PSB2115 Version 1.1\n", sc->sc_unit);
break;
default:
printf("isic%d: Error, IPAC version %d unknown!\n",
sc->sc_unit, ret);
return(0);
break;
}
}
else
{
sc->sc_isac_version = ((ISAC_READ(I_RBCH)) >> 5) & 0x03;
switch(sc->sc_isac_version)
{
case ISAC_VA:
case ISAC_VB1:
case ISAC_VB2:
case ISAC_VB3:
break;
default:
printf(ISIC_FMT "Error, ISAC version %d unknown!\n",
ISIC_PARM, sc->sc_isac_version);
return(0);
break;
}
sc->sc_hscx_version = HSCX_READ(0, H_VSTR) & 0xf;
switch(sc->sc_hscx_version)
{
case HSCX_VA1:
case HSCX_VA2:
case HSCX_VA3:
case HSCX_V21:
break;
default:
printf(ISIC_FMT "Error, HSCX version %d unknown!\n",
ISIC_PARM, sc->sc_hscx_version);
return(0);
break;
}
}
}
/* ISAC setup */
@ -614,6 +690,14 @@ isicattach(int flags, struct isic_softc *sc)
drvid = "ELSA PCC-16";
break;
case FLAG_ASUSCOM_IPAC:
drvid = "Asuscom ISDNlink 128K PnP";
break;
case FLAG_SIEMENS_ISURF2:
drvid = "Siemens I-Surf 2.0";
break;
default:
drvid = "ERROR, unknown flag used";
break;
@ -626,42 +710,52 @@ isicattach(int flags, struct isic_softc *sc)
/* announce chip versions */
if(sc->sc_isac_version >= ISAC_UNKN)
if(sc->sc_ipac)
{
printf(ISIC_FMT "ISAC Version UNKNOWN (VN=0x%x)" TERMFMT,
ISIC_PARM,
sc->sc_isac_version);
sc->sc_isac_version = ISAC_UNKN;
printf(ISIC_FMT "IPAC PSB2115 Version 1.1\n", ISIC_PARM);
}
else
{
printf(ISIC_FMT "ISAC %s (IOM-%c)" TERMFMT,
ISIC_PARM,
ISACversion[sc->sc_isac_version],
sc->sc_bustyp == BUS_TYPE_IOM1 ? '1' : '2');
}
if(sc->sc_isac_version >= ISAC_UNKN)
{
printf(ISIC_FMT "ISAC Version UNKNOWN (VN=0x%x)" TERMFMT,
ISIC_PARM,
sc->sc_isac_version);
sc->sc_isac_version = ISAC_UNKN;
}
else
{
printf(ISIC_FMT "ISAC %s (IOM-%c)" TERMFMT,
ISIC_PARM,
ISACversion[sc->sc_isac_version],
sc->sc_bustyp == BUS_TYPE_IOM1 ? '1' : '2');
}
#ifdef __FreeBSD__
printf("(Addr=0x%lx)\n", (u_long)ISAC_BASE);
printf("(Addr=0x%lx)\n", (u_long)ISAC_BASE);
#endif
if(sc->sc_hscx_version >= HSCX_UNKN)
{
printf(ISIC_FMT "HSCX Version UNKNOWN (VN=0x%x)" TERMFMT,
ISIC_PARM,
sc->sc_hscx_version);
sc->sc_hscx_version = HSCX_UNKN;
}
else
{
printf(ISIC_FMT "HSCX %s" TERMFMT,
ISIC_PARM,
HSCXversion[sc->sc_hscx_version]);
if(sc->sc_hscx_version >= HSCX_UNKN)
{
printf(ISIC_FMT "HSCX Version UNKNOWN (VN=0x%x)" TERMFMT,
ISIC_PARM,
sc->sc_hscx_version);
sc->sc_hscx_version = HSCX_UNKN;
}
else
{
printf(ISIC_FMT "HSCX %s" TERMFMT,
ISIC_PARM,
HSCXversion[sc->sc_hscx_version]);
}
#ifdef __FreeBSD__
printf("(AddrA=0x%lx, AddrB=0x%lx)\n", (u_long)HSCX_A_BASE, (u_long)HSCX_B_BASE);
#endif /* __FreeBSD__ */
}
#ifdef __FreeBSD__
printf("(AddrA=0x%lx, AddrB=0x%lx)\n", (u_long)HSCX_A_BASE, (u_long)HSCX_B_BASE);
next_isic_unit++;
#if defined(__FreeBSD_version) && __FreeBSD_version >= 300003

View File

@ -37,9 +37,9 @@
* i4b_isic_pnp.c - i4b pnp support
* --------------------------------
*
* $Id: i4b_isic_pnp.c,v 1.17 1999/04/20 14:28:46 hm Exp $
* $Id: i4b_isic_pnp.c,v 1.23 1999/07/05 14:00:04 hm Exp $
*
* last edit-date: [Tue Apr 20 16:12:27 1999]
* last edit-date: [Mon Jul 5 15:57:01 1999]
*
*---------------------------------------------------------------------------*/
@ -76,23 +76,31 @@ extern void isicintr(int unit);
#include <machine/i4b_ioctl.h>
#include <i4b/layer1/i4b_l1.h>
#define VID_TEL163PNP 0x10212750 /* Teles 16.3 PnP */
#define VID_CREATIXPP 0x0000980e /* Creatix S0/16 P+P */
#define VID_DYNALINK 0x88167506 /* Dynalink */
#define VID_SEDLBAUER 0x0100274c /* Sedlbauer WinSpeed */
#define VID_NICCYGO 0x5001814c /* Neuhaus Niccy GO@ */
#define VID_ELSAQS1P 0x33019315 /* ELSA Quickstep1000pro*/
#define VID_TEL163PNP 0x10212750 /* Teles 16.3 PnP */
#define VID_CREATIXPP 0x0000980e /* Creatix S0/16 P+P */
#define VID_DYNALINK 0x88167506 /* Dynalink */
#define VID_SEDLBAUER 0x0100274c /* Sedlbauer WinSpeed */
#define VID_NICCYGO 0x5001814c /* Neuhaus Niccy GO@ */
#define VID_ELSAQS1P 0x33019315 /* ELSA Quickstep1000pro*/
#define VID_ITK0025 0x25008b26 /* ITK Ix1 Micro V3 */
#define VID_AVMPNP 0x0009cd06 /* AVM Fritz! PnP */
#define VID_SIESURF2 0x2000254d /* Siemens I-Surf 2.0 PnP*/
#define VID_ASUSCOM_IPAC 0x90167506 /* Asuscom (with IPAC) */
static struct i4b_pnp_ids {
u_long vend_id;
char *id_str;
} i4b_pnp_ids[] = {
{ VID_TEL163PNP, "Teles 16.3 PnP" },
{ VID_CREATIXPP, "Creatix S0/16 P+P" },
{ VID_DYNALINK, "Dynalink IS64PH" },
{ VID_SEDLBAUER, "Sedlbauer WinSpeed" },
{ VID_NICCYGO, "Dr.Neuhaus Niccy Go@" },
{ VID_ELSAQS1P, "ELSA QuickStep 1000pro"},
{ VID_TEL163PNP, "Teles 16.3 PnP" },
{ VID_CREATIXPP, "Creatix S0/16 P+P" },
{ VID_DYNALINK, "Dynalink IS64PH" },
{ VID_SEDLBAUER, "Sedlbauer WinSpeed" },
{ VID_NICCYGO, "Dr.Neuhaus Niccy Go@" },
{ VID_ELSAQS1P, "ELSA QuickStep 1000pro" },
{ VID_ITK0025, "ITK ix1 Micro V3.0" },
{ VID_AVMPNP, "AVM Fritz!Card PnP" },
{ VID_SIESURF2, "Siemens I-Surf 2.0 PnP" },
{ VID_ASUSCOM_IPAC, "Asuscom ISDNLink 128 PnP" },
{ 0 }
};
@ -156,7 +164,9 @@ static void
i4b_pnp_attach(u_long csn, u_long vend_id, char *name, struct isa_device *dev)
{
struct pnp_cinfo spci;
#if !((defined(__FreeBSD_version) && __FreeBSD_version >= 400004))
struct isa_device *isa_devp;
#endif
if(dev->id_unit != next_isic_unit)
{
@ -211,6 +221,18 @@ i4b_pnp_attach(u_long csn, u_long vend_id, char *name, struct isa_device *dev)
case VID_ELSAQS1P:
dev->id_flags = FLAG_ELSA_QS1P_ISA;
break;
case VID_ITK0025:
dev->id_flags = FLAG_ITK_IX1;
break;
case VID_AVMPNP:
dev->id_flags = FLAG_AVM_PNP;
break;
case VID_SIESURF2:
dev->id_flags = FLAG_SIEMENS_ISURF2;
break;
case VID_ASUSCOM_IPAC:
dev->id_flags = FLAG_ASUSCOM_IPAC;
break;
}
write_pnp_parms(&spci, 0);
@ -287,6 +309,31 @@ isic_pnpprobe(struct isa_device *dev, unsigned int iobase2)
ret = isic_probe_Eqs1pi(dev, iobase2);
break;
#endif
#ifdef ITKIX1
case FLAG_ITK_IX1:
ret = isic_probe_itkix1(dev);
break;
#endif
#ifdef AVM_PNP
case FLAG_AVM_PNP:
ret = isic_probe_avm_pnp(dev, iobase2);
break;
#endif
#ifdef SIEMENS_ISURF2
case FLAG_SIEMENS_ISURF2:
ret = isic_probe_siemens_isurf(dev, iobase2);
break;
#endif
#ifdef ASUSCOM_IPAC
case FLAG_ASUSCOM_IPAC:
ret = isic_probe_asi(dev, iobase2);
break;
#endif
default:
break;
}

View File

@ -27,9 +27,9 @@
* i4b_l1.h - isdn4bsd layer 1 header file
* ---------------------------------------
*
* $Id: i4b_l1.h,v 1.61 1999/04/21 07:50:31 hm Exp $
* $Id: i4b_l1.h,v 1.64 1999/07/05 13:46:46 hm Exp $
*
* last edit-date: [Tue Mar 16 15:50:24 1999]
* last edit-date: [Mon Jul 5 15:32:02 1999]
*
*---------------------------------------------------------------------------*/
@ -48,42 +48,36 @@
/*---------------------------------------------------------------------------
* kernel config file flags definition
*---------------------------------------------------------------------------*/
/* XXX: we do need these only for real ISA (not even ISAPNP cards), and only
* because we are not confident enough in the general ISA probe routine (as
* practiced by the NetBSD variant). *And* it is completely redundant to the
* various options enabling only a few card's support routines to be compiled
* in. Probably the current truth is: this is usefull for anybody with more
* than one supported real ISA card. It is not usefull in generic configs,
* nor in typical one-controller-only configurations.
* Further - it is identical to the CARD_TYPEP_xxx definitions in
* ../machine/i4b_ioctl.h.
*/
#define FLAG_TELES_S0_8 1
#define FLAG_TELES_S0_16 2
#define FLAG_TELES_S0_163 3
#define FLAG_AVM_A1 4
#define FLAG_TELES_S0_163_PnP 5 /* XXX - not needed, remove! */
#define FLAG_CREATIX_S0_PnP 6 /* XXX - not needed, remove! */
#define FLAG_TELES_S0_163_PnP 5
#define FLAG_CREATIX_S0_PnP 6
#define FLAG_USR_ISDN_TA_INT 7
#define FLAG_DRN_NGO 8 /* XXX - not needed, remove! */
#define FLAG_SWS 9 /* XXX - not needed, remove! */
#define FLAG_AVM_A1_PCMCIA 10 /* XXX - not needed, remove! */
#define FLAG_DYNALINK 11 /* XXX - not needed, remove! */
#define FLAG_DRN_NGO 8
#define FLAG_SWS 9
#define FLAG_AVM_A1_PCMCIA 10
#define FLAG_DYNALINK 11
#define FLAG_BLMASTER 12
#define FLAG_ELSA_QS1P_ISA 13 /* XXX - not needed, remove! */
#define FLAG_ELSA_QS1P_PCI 14 /* XXX - not needed, remove! */
#define FLAG_ELSA_QS1P_ISA 13
#define FLAG_ELSA_QS1P_PCI 14
#define FLAG_SIEMENS_ITALK 15
#define FLAG_ELSA_MLIMC 16 /* XXX - not needed, remove! */
#define FLAG_ELSA_MLMCALL 17 /* XXX - not needed, remove! */
#define FLAG_ELSA_MLIMC 16
#define FLAG_ELSA_MLMCALL 17
#define FLAG_ITK_IX1 18
#define FLAG_ELSA_PCC16 19
#define FLAG_AVMA1PCI 19
#define FLAG_ELSA_PCC16 20
#define FLAG_AVM_PNP 21
#define FLAG_SIEMENS_ISURF2 22
#define FLAG_ASUSCOM_IPAC 23
#define SEC_DELAY 1000000 /* one second DELAY for DELAY*/
#define SEC_DELAY 1000000 /* one second DELAY for DELAY*/
#define MAX_DFRAME_LEN 264 /* max length of a D frame */
#define MAX_DFRAME_LEN 264 /* max length of a D frame */
#ifndef __bsdi__
#define min(a,b) ((a)<(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#endif
#if !defined(__FreeBSD__) && !defined(__bsdi__)
@ -190,7 +184,7 @@ struct isic_softc
#endif
int sc_unit; /* unit number */
int sc_irq; /* interrupt vector */
int sc_irq; /* interrupt vector */
#ifdef __FreeBSD__
int sc_port; /* port base address */
@ -205,6 +199,7 @@ struct isic_softc
u_int sc_maddr; /* "memory address" for card config register */
int sc_num_mappings; /* number of io mappings provided */
struct isic_io_map *sc_maps;
#define MALLOC_MAPS(sc) \
(sc)->sc_maps = (struct isic_io_map*)malloc(sizeof((sc)->sc_maps[0])*(sc)->sc_num_mappings, M_DEVBUF, 0)
#endif
@ -266,6 +261,7 @@ struct isic_softc
#endif
int sc_I430T4; /* Timer T4 running */
#if defined(__FreeBSD__) && __FreeBSD__ >=3
struct callout_handle sc_T4_callout;
#endif
@ -396,7 +392,10 @@ extern int isic_attach_itkix1 ( struct isa_device *dev );
extern int isic_attach_drnngo ( struct isa_device *dev, unsigned int iobase2);
extern int isic_attach_sws ( struct isa_device *dev );
extern int isic_attach_Eqs1pi(struct isa_device *dev, unsigned int iobase2);
extern int isic_attach_avm_pnp(struct isa_device *dev, unsigned int iobase2);
extern int isic_attach_siemens_isurf(struct isa_device *dev, unsigned int iobase2);
extern int isic_attach_Eqs1pp(int unit, unsigned int iobase1, unsigned int iobase2);
extern int isic_attach_asi(struct isa_device *dev, unsigned int iobase2);
extern void isic_bchannel_setup (int unit, int hscx_channel, int bprot, int activate );
extern int isic_hscx_fifo(isic_Bchan_t *, struct isic_softc *);
extern void isic_hscx_init ( struct isic_softc *sc, int hscx_channel, int activate );
@ -412,6 +411,8 @@ extern void isic_next_state ( struct isic_softc *sc, int event );
extern char *isic_printstate ( struct isic_softc *sc );
extern int isic_probe_avma1 ( struct isa_device *dev );
extern int isic_probe_avma1_pcmcia ( struct isa_device *dev );
extern int isic_probe_avm_pnp ( struct isa_device *dev, unsigned int iobase2);
extern int isic_probe_siemens_isurf ( struct isa_device *dev, unsigned int iobase2);
extern int isic_probe_Cs0P ( struct isa_device *dev, unsigned int iobase2);
extern int isic_probe_Dyn ( struct isa_device *dev, unsigned int iobase2);
extern int isic_probe_s016 ( struct isa_device *dev );
@ -423,6 +424,7 @@ extern int isic_probe_itkix1 ( struct isa_device *dev );
extern int isic_probe_drnngo ( struct isa_device *dev, unsigned int iobase2);
extern int isic_probe_sws ( struct isa_device *dev );
extern int isic_probe_Eqs1pi(struct isa_device *dev, unsigned int iobase2);
extern int isic_probe_asi(struct isa_device *dev, unsigned int iobase2);
#elif defined(__bsdi__)

View File

@ -0,0 +1,317 @@
/*
* Copyright (c) 1999 Udo Schweigert. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the author nor the names of any co-contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* 4. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software and/or documentation.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*---------------------------------------------------------------------------
* Based on ELSA Quickstep 1000pro PCI driver (i4b_elsa_qs1p.c)
*---------------------------------------------------------------------------
* In case of trouble please contact Udo Schweigert <ust@cert.siemens.de>
*---------------------------------------------------------------------------
*
* Siemens I-Surf 2.0 PnP specific routines for isic driver
* --------------------------------------------------------
*
* $Id: i4b_siemens_isurf.c,v 1.2 1999/07/05 13:22:12 hm Exp $
*
* last edit-date: [Mon 14 Jun 16:46:27 CEST 1999]
*
*---------------------------------------------------------------------------*/
#if defined(__FreeBSD__)
#include "isic.h"
#include "opt_i4b.h"
#if NISIC > 0 && defined(SIEMENS_ISURF2)
#include <sys/param.h>
#if defined(__FreeBSD__) && __FreeBSD__ >= 3
#include <sys/ioccom.h>
#else
#include <sys/ioctl.h>
#endif
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <machine/clock.h>
#include <i386/isa/isa_device.h>
#include <sys/socket.h>
#include <net/if.h>
#include <machine/i4b_debug.h>
#include <machine/i4b_ioctl.h>
#include <i4b/include/i4b_global.h>
#include <i4b/include/i4b_l1l2.h>
#include <i4b/include/i4b_mbuf.h>
#include <i4b/layer1/i4b_l1.h>
#include <i4b/layer1/i4b_ipac.h>
#include <i4b/layer1/i4b_isac.h>
#include <i4b/layer1/i4b_hscx.h>
/* masks for register encoded in base addr */
#define SIE_ISURF_BASE_MASK 0x0ffff
#define SIE_ISURF_OFF_MASK 0xf0000
/* register id's to be encoded in base addr */
#define SIE_ISURF_IDISAC 0x00000
#define SIE_ISURF_IDHSCXA 0x10000
#define SIE_ISURF_IDHSCXB 0x20000
#define SIE_ISURF_IDIPAC 0x40000
/* offsets from base address */
#define SIE_ISURF_OFF_ALE 0x00
#define SIE_ISURF_OFF_RW 0x01
/*---------------------------------------------------------------------------*
* Siemens I-Surf 2.0 PnP ISAC get fifo routine
*---------------------------------------------------------------------------*/
static void
siemens_isurf_read_fifo(void *buf, const void *base, size_t len)
{
if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXB)
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_HSCXB_OFF);
insb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (u_char *)buf, (u_int)len);
}
else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXA)
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_HSCXA_OFF);
insb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (u_char *)buf, (u_int)len);
}
else /* if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDISAC) */
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_ISAC_OFF);
insb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (u_char *)buf, (u_int)len);
}
}
/*---------------------------------------------------------------------------*
* Siemens I-Surf 2.0 PnP ISAC put fifo routine
*---------------------------------------------------------------------------*/
static void
siemens_isurf_write_fifo(void *base, const void *buf, size_t len)
{
if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXB)
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_HSCXB_OFF);
outsb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (const u_char *)buf, (u_int)len);
}
else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXA)
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_HSCXA_OFF);
outsb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (const u_char *)buf, (u_int)len);
}
else /* if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDISAC) */
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, IPAC_ISAC_OFF);
outsb((((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW), (const u_char *)buf, (u_int)len);
}
}
/*---------------------------------------------------------------------------*
* Siemens I-Surf 2.0 PnP ISAC put register routine
*---------------------------------------------------------------------------*/
static void
siemens_isurf_write_reg(u_char *base, u_int offset, u_int v)
{
if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXB)
{
outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_HSCXB_OFF));
outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW, (u_char)v);
}
else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXA)
{
outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_HSCXA_OFF));
outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW, (u_char)v);
}
else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDISAC)
{
outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_ISAC_OFF));
outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW, (u_char)v);
}
else /* IPAC */
{
outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_IPAC_OFF));
outb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW, (u_char)v);
}
}
/*---------------------------------------------------------------------------*
* Siemens I-Surf 2.0 PnP ISAC get register routine
*---------------------------------------------------------------------------*/
static u_char
siemens_isurf_read_reg(u_char *base, u_int offset)
{
if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXB)
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_HSCXB_OFF));
return(inb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW));
}
else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDHSCXA)
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_HSCXA_OFF));
return(inb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW));
}
else if(((u_int)base & SIE_ISURF_OFF_MASK) == SIE_ISURF_IDISAC)
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_ISAC_OFF));
return(inb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW));
}
else /* IPAC */
{
outb((u_int)((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_ALE, (u_char)(offset+IPAC_IPAC_OFF));
return(inb(((u_int)base & SIE_ISURF_BASE_MASK) + SIE_ISURF_OFF_RW));
}
}
/*---------------------------------------------------------------------------*
* isic_probe_siemens_isurf - probe for Siemens I-Surf 2.0 PnP
*---------------------------------------------------------------------------*/
int
isic_probe_siemens_isurf(struct isa_device *dev, unsigned int iobase2)
{
struct isic_softc *sc = &isic_sc[dev->id_unit];
/* check max unit range */
if(dev->id_unit >= ISIC_MAXUNIT)
{
printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Siemens I-Surf 2.0 PnP\n",
dev->id_unit, dev->id_unit);
return(0);
}
sc->sc_unit = dev->id_unit;
/* check IRQ validity */
switch(ffs(dev->id_irq) - 1)
{
case 3:
case 4:
case 5:
case 7:
case 10:
case 11:
case 12:
case 15:
break;
default:
printf("isic%d: Error, invalid IRQ [%d] specified for Siemens I-Surf 2.0 PnP!\n",
dev->id_unit, ffs(dev->id_irq)-1);
return(0);
break;
}
sc->sc_irq = dev->id_irq;
/* check if memory addr specified */
if(dev->id_maddr)
{
printf("isic%d: Error, mem addr 0x%lx specified for Siemens I-Surf 2.0 PnP!\n",
dev->id_unit, (u_long)dev->id_maddr);
return(0);
}
dev->id_msize = 0;
/* check if we got an iobase */
if(!((dev->id_iobase >= 0x100) && (dev->id_iobase <= 0xff0)))
{
printf("isic%d: Error, invalid iobase 0x%x specified for Siemens I-Surf 2.0 PnP!\n",
dev->id_unit, dev->id_iobase);
return(0);
}
sc->sc_port = dev->id_iobase;
/* setup access routines */
sc->clearirq = NULL;
sc->readreg = siemens_isurf_read_reg;
sc->writereg = siemens_isurf_write_reg;
sc->readfifo = siemens_isurf_read_fifo;
sc->writefifo = siemens_isurf_write_fifo;
/* setup card type */
sc->sc_cardtyp = CARD_TYPEP_SIE_ISURF2;
/* setup IOM bus type */
sc->sc_bustyp = BUS_TYPE_IOM2;
/* setup chip type = IPAC ! */
sc->sc_ipac = 1;
sc->sc_bfifolen = IPAC_BFIFO_LEN;
return (1);
}
/*---------------------------------------------------------------------------*
* isic_attach_siemens_isurf - attach for Siemens I-Surf 2.0 PnP
*---------------------------------------------------------------------------*/
int
isic_attach_siemens_isurf(struct isa_device *dev, unsigned int iobase2)
{
struct isic_softc *sc = &isic_sc[dev->id_unit];
/* setup ISAC and HSCX base addr */
ISAC_BASE = (caddr_t) ((u_int)sc->sc_port | SIE_ISURF_IDISAC);
HSCX_A_BASE = (caddr_t) ((u_int)sc->sc_port | SIE_ISURF_IDHSCXA);
HSCX_B_BASE = (caddr_t) ((u_int)sc->sc_port | SIE_ISURF_IDHSCXB);
IPAC_BASE = (caddr_t) ((u_int)sc->sc_port | SIE_ISURF_IDIPAC);
/* enable hscx/isac irq's */
IPAC_WRITE(IPAC_MASK, (IPAC_MASK_INT1 | IPAC_MASK_INT0));
IPAC_WRITE(IPAC_ACFG, 0); /* outputs are open drain */
IPAC_WRITE(IPAC_AOE, /* aux 5..2 are inputs, 7, 6 outputs */
(IPAC_AOE_OE5 | IPAC_AOE_OE4 | IPAC_AOE_OE3 | IPAC_AOE_OE2));
IPAC_WRITE(IPAC_ATX, 0xff); /* set all output lines high */
return(1);
}
#endif /* NISIC > 0 && defined(SIEMENS_ISURF2) */
#endif /* FreeBSD */

View File

@ -37,9 +37,9 @@
* isic - I4B Siemens ISDN Chipset Driver for Teles S0/16.3
* ========================================================
*
* $Id: i4b_tel_s0163.c,v 1.18 1999/02/14 19:51:02 hm Exp $
* $Id: i4b_tel_s0163.c,v 1.19 1999/07/26 09:03:25 hm Exp $
*
* last edit-date: [Sun Feb 14 10:28:45 1999]
* last edit-date: [Mon Jul 26 10:59:38 1999]
*
* -hm clean up
* -hm more cleanup
@ -212,7 +212,7 @@ isic_probe_s0163(struct isa_device *dev)
if(dev->id_unit >= ISIC_MAXUNIT)
{
printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Teles S0/16.3!",
printf("isic%d: Error, unit %d >= ISIC_MAXUNIT for Teles S0/16.3!\n",
dev->id_unit, dev->id_unit);
return(0);
}
@ -232,7 +232,7 @@ isic_probe_s0163(struct isa_device *dev)
if(dev->id_maddr)
{
printf("isic%d: Error, mem addr 0x%lx specified for Teles S0/16.3!",
printf("isic%d: Error, mem addr 0x%lx specified for Teles S0/16.3!\n",
dev->id_unit, (u_long)dev->id_maddr);
return(0);
}
@ -249,7 +249,7 @@ isic_probe_s0163(struct isa_device *dev)
break;
default:
printf("isic%d: Error, invalid iobase 0x%x specified for Teles S0/16.3!",
printf("isic%d: Error, invalid iobase 0x%x specified for Teles S0/16.3!\n",
dev->id_unit, dev->id_iobase);
return(0);
break;
@ -258,21 +258,21 @@ isic_probe_s0163(struct isa_device *dev)
if(((byte = inb(sc->sc_port)) != 0x51) && (byte != 0x10))
{
printf("isic%d: Error, signature 1 0x%x != 0x51 or 0x10 for Teles S0/16.3!",
printf("isic%d: Error, signature 1 0x%x != 0x51 or 0x10 for Teles S0/16.3!\n",
dev->id_unit, byte);
return(0);
}
if((byte = inb(sc->sc_port + 1)) != 0x93)
{
printf("isic%d: Error, signature 2 0x%x != 0x93 for Teles S0/16.3!",
printf("isic%d: Error, signature 2 0x%x != 0x93 for Teles S0/16.3!\n",
dev->id_unit, byte);
return(0);
}
if((byte = inb(sc->sc_port + 2)) != 0x1c)
{
printf("isic%d: Error, signature 3 0x%x != 0x1c for Teles S0/16.3!",
printf("isic%d: Error, signature 3 0x%x != 0x1c for Teles S0/16.3!\n",
dev->id_unit, byte);
return(0);
}
@ -359,7 +359,7 @@ set_softc(struct isic_softc *sc, struct isa_attach_args *ia, int unit)
break;
default:
printf("isic%d: Error, invalid iobase 0x%x specified for Teles S0/16.3!",
printf("isic%d: Error, invalid iobase 0x%x specified for Teles S0/16.3!\n",
unit, ia->ia_iobase);
return(0);
break;
@ -429,7 +429,7 @@ isic_probe_s0163(struct device *dev, struct cfdata *cf,
if(ia->ia_maddr)
{
printf("isic%d: Error, mem addr 0x%lx specified for Teles S0/16.3!",
printf("isic%d: Error, mem addr 0x%lx specified for Teles S0/16.3!\n",
cf->cf_unit, (u_long)ia->ia_maddr);
return 0;
}
@ -441,21 +441,21 @@ isic_probe_s0163(struct device *dev, struct cfdata *cf,
if((byte = inb(sc->sc_port)) != 0x51)
{
printf("isic%d: Error, signature 1 0x%x != 0x51 for Teles S0/16.3!",
printf("isic%d: Error, signature 1 0x%x != 0x51 for Teles S0/16.3!\n",
cf->cf_unit, byte);
return(0);
}
if((byte = inb(sc->sc_port + 1)) != 0x93)
{
printf("isic%d: Error, signature 2 0x%x != 0x93 for Teles S0/16.3!",
printf("isic%d: Error, signature 2 0x%x != 0x93 for Teles S0/16.3!\n",
cf->cf_unit, byte);
return(0);
}
if((byte = inb(sc->sc_port + 2)) != 0x1c)
{
printf("isic%d: Error, signature 3 0x%x != 0x1c for Teles S0/16.3!",
printf("isic%d: Error, signature 3 0x%x != 0x1c for Teles S0/16.3!\n",
cf->cf_unit, byte);
return(0);
}

View File

@ -33,9 +33,9 @@
* isa_isic.c - ISA bus frontend for i4b_isic driver
* --------------------------------------------------
*
* $Id: isa_isic.c,v 1.21 1999/02/23 14:51:18 hm Exp $
* $Id: isa_isic.c,v 1.23 1999/07/19 14:40:47 hm Exp $
*
* last edit-date: [Sun Feb 14 10:29:11 1999]
* last edit-date: [Mon Jul 19 16:39:02 1999]
*
* -mh original implementation
* -hm NetBSD patches from Martin
@ -115,6 +115,10 @@ isa_isic_probe(parent, cf, aux)
struct isic_attach_args args;
int ret = 0;
#if 0
printf("isic%d: enter isa_isic_probe\n", cf->cf_unit);
#endif
/* check irq */
if (ia->ia_irq == IRQUNK) {
printf("isic%d: config error: no IRQ specified\n", cf->cf_unit);
@ -314,6 +318,10 @@ isa_isic_probe(parent, cf, aux)
/* unmap resources */
args_unmap(&args.ia_num_mappings, &args.ia_maps[0]);
#if 0
printf("isic%d: exit isa_isic_probe, return = %d\n", cf->cf_unit, ret);
#endif
return ret;
}

View File

@ -27,9 +27,9 @@
* i4b_iframe.c - i frame handling routines
* ------------------------------------------
*
* $Id: i4b_iframe.c,v 1.19 1999/04/21 07:36:32 hm Exp $
* $Id: i4b_iframe.c,v 1.20 1999/05/28 15:03:32 hm Exp $
*
* last edit-date: [Wed Apr 21 09:24:34 1999]
* last edit-date: [Fri May 28 15:52:41 1999]
*
*---------------------------------------------------------------------------*/
@ -100,6 +100,8 @@ i4b_rxd_i_frame(int unit, struct mbuf *m)
}
CRIT_BEG;
l2sc->stat.rx_i++; /* update frame count */
nr = GETINR(*(ptr + OFF_INR));
ns = GETINS(*(ptr + OFF_INS));
@ -261,6 +263,8 @@ i4b_i_frame_queued_up(l2_softc_t *l2sc)
*(ptr + OFF_INS) = (l2sc->vs << 1) & 0xfe; /* bit 0 = 0 */
*(ptr + OFF_INR) = (l2sc->vr << 1) & 0xfe; /* P bit = 0 */
l2sc->stat.tx_i++; /* update frame counter */
PH_Data_Req(l2sc->unit, m, MBUF_DONTFREE); /* free'd when ack'd ! */
l2sc->iframe_sent = 1; /* in case we ack an I frame with another I frame */

View File

@ -27,9 +27,9 @@
* i4b_l2.c - ISDN layer 2 (Q.921)
* -------------------------------
*
* $Id: i4b_l2.c,v 1.26 1999/04/15 09:53:55 hm Exp $
* $Id: i4b_l2.c,v 1.27 1999/05/28 15:03:32 hm Exp $
*
* last edit-date: [Thu Apr 15 11:32:11 1999]
* last edit-date: [Fri May 28 16:15:39 1999]
*
*---------------------------------------------------------------------------*/
@ -281,6 +281,7 @@ i4b_mph_status_ind(int unit, int status, int parm)
l2sc->unit = unit;
l2sc->i_queue.ifq_maxlen = IQUEUE_MAXLEN;
l2sc->ua_frame = NULL;
bzero(&l2sc->stat, sizeof(lapdstat_t));
i4b_l2_unit_init(unit);
#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
@ -351,6 +352,7 @@ int i4b_mdl_command_req(int unit, int command, int parm)
int
i4b_ph_data_ind(int unit, struct mbuf *m)
{
l2_softc_t *l2sc = &l2_softc[unit];
#ifdef NOTDEF
DBGL1(L1_PRIM, "PH-DATA-IND", ("unit %d\n", unit));
#endif
@ -360,6 +362,7 @@ i4b_ph_data_ind(int unit, struct mbuf *m)
{
if(m->m_len < 4) /* 6 oct - 2 chksum oct */
{
l2sc->stat.err_rx_len++;
DBGL2(L2_ERROR, "i4b_ph_data_ind", ("ERROR, I-frame < 6 octetts!\n"));
i4b_Dfreembuf(m);
return(0);
@ -370,6 +373,7 @@ i4b_ph_data_ind(int unit, struct mbuf *m)
{
if(m->m_len < 4) /* 6 oct - 2 chksum oct */
{
l2sc->stat.err_rx_len++;
DBGL2(L2_ERROR, "i4b_ph_data_ind", ("ERROR, S-frame < 6 octetts!\n"));
i4b_Dfreembuf(m);
return(0);
@ -380,6 +384,7 @@ i4b_ph_data_ind(int unit, struct mbuf *m)
{
if(m->m_len < 3) /* 5 oct - 2 chksum oct */
{
l2sc->stat.err_rx_len++;
DBGL2(L2_ERROR, "i4b_ph_data_ind", ("ERROR, U-frame < 5 octetts!\n"));
i4b_Dfreembuf(m);
return(0);
@ -388,6 +393,7 @@ i4b_ph_data_ind(int unit, struct mbuf *m)
}
else
{
l2sc->stat.err_rx_badf++;
DBGL2(L2_ERROR, "i4b_ph_data_ind", ("ERROR, bad frame rx'd - "));
i4b_print_frame(m->m_len, m->m_data);
i4b_Dfreembuf(m);
@ -396,4 +402,3 @@ i4b_ph_data_ind(int unit, struct mbuf *m)
}
#endif /* NI4BQ921 > 0 */

View File

@ -27,9 +27,9 @@
* i4b_l2.h - ISDN layer 2 (Q.921) definitions
* ---------------------------------------------
*
* $Id: i4b_l2.h,v 1.17 1999/04/22 11:51:45 hm Exp $
* $Id: i4b_l2.h,v 1.18 1999/05/28 15:03:32 hm Exp $
*
* last edit-date: [Thu Apr 22 13:50:55 1999]
* last edit-date: [Fri May 28 15:51:17 1999]
*
*---------------------------------------------------------------------------*/
@ -103,6 +103,11 @@ typedef struct {
int (*postfsmfunc)(int);/* function to be called at fsm exit */
int postfsmarg; /* argument for above function */
/* statistics */
lapdstat_t stat; /* lapd protocol statistics */
} l2_softc_t;
extern l2_softc_t l2_softc[];

View File

@ -27,9 +27,9 @@
* i4b_sframe.c - s frame handling routines
* ----------------------------------------
*
* $Id: i4b_sframe.c,v 1.9 1999/02/14 09:45:00 hm Exp $
* $Id: i4b_sframe.c,v 1.10 1999/05/28 15:03:32 hm Exp $
*
* last edit-date: [Sun Feb 14 10:32:06 1999]
* last edit-date: [Fri May 28 16:14:04 1999]
*
*---------------------------------------------------------------------------*/
@ -93,21 +93,25 @@ i4b_rxd_s_frame(int unit, struct mbuf *m)
switch(*(ptr + OFF_SRCR))
{
case RR:
l2sc->stat.rx_rr++; /* update statistics */
DBGL2(L2_S_MSG, "i4b_rxd_s_frame", ("rx'd RR, N(R) = %d\n", l2sc->rxd_NR));
i4b_next_l2state(l2sc, EV_RXRR);
break;
case RNR:
l2sc->stat.rx_rnr++; /* update statistics */
DBGL2(L2_S_MSG, "i4b_rxd_s_frame", ("rx'd RNR, N(R) = %d\n", l2sc->rxd_NR));
i4b_next_l2state(l2sc, EV_RXRNR);
break;
case REJ:
l2sc->stat.rx_rej++; /* update statistics */
DBGL2(L2_S_MSG, "i4b_rxd_s_frame", ("rx'd REJ, N(R) = %d\n", l2sc->rxd_NR));
i4b_next_l2state(l2sc, EV_RXREJ);
break;
default:
l2sc->stat.err_rx_bads++; /* update statistics */
DBGL2(L2_S_ERR, "i4b_rxd_s_frame", ("ERROR, unknown code, frame = \n"));
i4b_print_frame(m->m_len, m->m_data);
break;
@ -128,6 +132,8 @@ i4b_tx_rr_command(l2_softc_t *l2sc, pbit_t pbit)
m = i4b_build_s_frame(l2sc, CR_CMD_TO_NT, pbit, RR);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
l2sc->stat.tx_rr++; /* update statistics */
}
/*---------------------------------------------------------------------------*
@ -143,6 +149,8 @@ i4b_tx_rr_response(l2_softc_t *l2sc, fbit_t fbit)
m = i4b_build_s_frame(l2sc, CR_RSP_TO_NT, fbit, RR);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
l2sc->stat.tx_rr++; /* update statistics */
}
/*---------------------------------------------------------------------------*
@ -158,6 +166,8 @@ i4b_tx_rnr_command(l2_softc_t *l2sc, pbit_t pbit)
m = i4b_build_s_frame(l2sc, CR_CMD_TO_NT, pbit, RNR);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
l2sc->stat.tx_rnr++; /* update statistics */
}
/*---------------------------------------------------------------------------*
@ -173,6 +183,8 @@ i4b_tx_rnr_response(l2_softc_t *l2sc, fbit_t fbit)
m = i4b_build_s_frame(l2sc, CR_RSP_TO_NT, fbit, RNR);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
l2sc->stat.tx_rnr++; /* update statistics */
}
/*---------------------------------------------------------------------------*
@ -188,6 +200,8 @@ i4b_tx_rej_response(l2_softc_t *l2sc, fbit_t fbit)
m = i4b_build_s_frame(l2sc, CR_RSP_TO_NT, fbit, REJ);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
l2sc->stat.tx_rej++; /* update statistics */
}
/*---------------------------------------------------------------------------*

View File

@ -27,9 +27,9 @@
* i4b_tei.c - tei handling procedures
* -----------------------------------
*
* $Id: i4b_tei.c,v 1.14 1999/02/14 09:45:00 hm Exp $
* $Id: i4b_tei.c,v 1.15 1999/05/28 15:03:32 hm Exp $
*
* last edit-date: [Sun Feb 14 10:32:12 1999]
* last edit-date: [Fri May 28 16:14:14 1999]
*
*---------------------------------------------------------------------------*/
@ -213,6 +213,7 @@ build_tei_mgmt_frame(l2_softc_t *l2sc, unsigned char type)
panic("build_tei_mgmt_frame: invalid type");
break;
}
l2sc->stat.tx_tei++;
return(m);
}

View File

@ -27,9 +27,9 @@
* i4b_uframe.c - routines for handling U-frames
* -----------------------------------------------
*
* $Id: i4b_uframe.c,v 1.7 1999/02/14 09:45:00 hm Exp $
* $Id: i4b_uframe.c,v 1.8 1999/05/28 15:03:32 hm Exp $
*
* last edit-date: [Sun Feb 14 10:32:17 1999]
* last edit-date: [Fri May 28 16:14:32 1999]
*
*---------------------------------------------------------------------------*/
@ -89,10 +89,9 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
if((l2sc->tei_valid == TEI_VALID) &&
(l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
{
l2sc->stat.rx_sabme++;
DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("SABME, sapi = %d, tei = %d\n", sapi, tei));
l2sc->rxd_PF = pfbit;
i4b_next_l2state(l2sc, EV_RXSABME);
}
i4b_Dfreembuf(m);
@ -104,13 +103,13 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
*(ptr + OFF_MEI) == MEI)
{
/* layer 2 management (SAPI = 63) */
l2sc->stat.rx_tei++;
i4b_tei_rxframe(unit, m);
}
else if(sapi == SAPI_CCP && tei == GROUP_TEI)
{
/* call control (SAPI = 0) */
l2sc->stat.rx_ui++;
/* strip ui header */
m_adj(m, UI_HDR_LEN);
/* to upper layer */
@ -118,8 +117,8 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
}
else
{
l2sc->stat.err_rx_badui++;
DBGL2(L2_U_ERR, "i4b_rxd_u_frame", ("unknown UI frame!\n"));
i4b_Dfreembuf(m);
}
break;
@ -128,10 +127,9 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
if((l2sc->tei_valid == TEI_VALID) &&
(l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
{
l2sc->stat.rx_disc++;
DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("DISC, sapi = %d, tei = %d\n", sapi, tei));
l2sc->rxd_PF = pfbit;
i4b_next_l2state(l2sc, EV_RXDISC);
}
i4b_Dfreembuf(m);
@ -141,6 +139,7 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
if((l2sc->tei_valid == TEI_VALID) &&
(l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
{
l2sc->stat.rx_xid++;
DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("XID, sapi = %d, tei = %d\n", sapi, tei));
}
i4b_Dfreembuf(m);
@ -152,12 +151,10 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
if((l2sc->tei_valid == TEI_VALID) &&
(l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
{
l2sc->stat.rx_dm++;
DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("DM, sapi = %d, tei = %d\n", sapi, tei));
i4b_print_frame(m->m_len, m->m_data);
l2sc->rxd_PF = pfbit;
i4b_next_l2state(l2sc, EV_RXDM);
}
i4b_Dfreembuf(m);
@ -167,10 +164,9 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
if((l2sc->tei_valid == TEI_VALID) &&
(l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
{
l2sc->stat.rx_ua++;
DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("UA, sapi = %d, tei = %d\n", sapi, tei));
l2sc->rxd_PF = pfbit;
i4b_next_l2state(l2sc, EV_RXUA);
}
i4b_Dfreembuf(m);
@ -180,10 +176,9 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
if((l2sc->tei_valid == TEI_VALID) &&
(l2sc->tei == GETTEI(*(ptr+OFF_TEI))))
{
l2sc->stat.rx_frmr++;
DBGL2(L2_U_MSG, "i4b_rxd_u_frame", ("FRMR, sapi = %d, tei = %d\n", sapi, tei));
l2sc->rxd_PF = pfbit;
i4b_next_l2state(l2sc, EV_RXFRMR);
}
i4b_Dfreembuf(m);
@ -201,6 +196,7 @@ i4b_rxd_u_frame(int unit, struct mbuf *m)
DBGL2(L2_U_ERR, "i4b_rxd_u_frame", ("not mine - UNKNOWN TYPE ERROR, sapi = %d, tei = %d, frame = ", sapi, tei));
i4b_print_frame(m->m_len, m->m_data);
}
l2sc->stat.err_rx_badui++;
i4b_Dfreembuf(m);
break;
}
@ -237,10 +233,9 @@ i4b_tx_sabme(l2_softc_t *l2sc, pbit_t pbit)
{
struct mbuf *m;
l2sc->stat.tx_sabme++;
DBGL2(L2_U_MSG, "i4b_tx_sabme", ("tx SABME, tei = %d\n", l2sc->tei));
m = i4b_build_u_frame(l2sc, CR_CMD_TO_NT, pbit, SABME);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
}
@ -251,11 +246,10 @@ void
i4b_tx_dm(l2_softc_t *l2sc, fbit_t fbit)
{
struct mbuf *m;
DBGL2(L2_U_MSG, "i4b_tx_dm", ("tx DM, tei = %d\n", l2sc->tei));
m = i4b_build_u_frame(l2sc, CR_RSP_TO_NT, fbit, DM);
l2sc->stat.tx_dm++;
DBGL2(L2_U_MSG, "i4b_tx_dm", ("tx DM, tei = %d\n", l2sc->tei));
m = i4b_build_u_frame(l2sc, CR_RSP_TO_NT, fbit, DM);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
}
@ -267,10 +261,9 @@ i4b_tx_disc(l2_softc_t *l2sc, pbit_t pbit)
{
struct mbuf *m;
l2sc->stat.tx_disc++;
DBGL2(L2_U_MSG, "i4b_tx_disc", ("tx DISC, tei = %d\n", l2sc->tei));
m = i4b_build_u_frame(l2sc, CR_CMD_TO_NT, pbit, DISC);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
}
@ -282,10 +275,9 @@ i4b_tx_ua(l2_softc_t *l2sc, fbit_t fbit)
{
struct mbuf *m;
l2sc->stat.tx_ua++;
DBGL2(L2_U_MSG, "i4b_tx_ua", ("tx UA, tei = %d\n", l2sc->tei));
m = i4b_build_u_frame(l2sc, CR_RSP_TO_NT, fbit, UA);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
}
@ -297,12 +289,10 @@ i4b_tx_frmr(l2_softc_t *l2sc, fbit_t fbit)
{
struct mbuf *m;
l2sc->stat.tx_frmr++;
DBGL2(L2_U_MSG, "i4b_tx_frmr", ("tx FRMR, tei = %d\n", l2sc->tei));
m = i4b_build_u_frame(l2sc, CR_RSP_TO_NT, fbit, FRMR);
PH_Data_Req(l2sc->unit, m, MBUF_FREE);
}
#endif /* NI4BQ921 > 0 */

View File

@ -27,9 +27,9 @@
* i4b_l2if.c - Layer 3 interface to Layer 2
* -------------------------------------------
*
* $Id: i4b_l2if.c,v 1.15 1999/02/14 09:45:01 hm Exp $
* $Id: i4b_l2if.c,v 1.16 1999/05/25 10:05:40 hm Exp $
*
* last edit-date: [Sun Feb 14 10:33:13 1999]
* last edit-date: [Tue May 25 11:55:15 1999]
*
*---------------------------------------------------------------------------*/
@ -570,7 +570,7 @@ i4b_l3_tx_status(call_desc_t *cd, u_char q850cause)
*ptr++ = IEI_CAUSE; /* cause ie */
*ptr++ = CAUSE_LEN;
*ptr++ = CAUSE_STD_LOC_OUT;
*ptr++ = q850cause;
*ptr++ = q850cause | EXT_LAST;
*ptr++ = IEI_CALLSTATE; /* call state ie */
*ptr++ = CALLSTATE_LEN;

View File

@ -27,9 +27,9 @@
* i4b_i4bdrv.c - i4b userland interface driver
* --------------------------------------------
*
* $Id: i4b_i4bdrv.c,v 1.5 1999/05/20 10:11:20 hm Exp $
* $Id: i4b_i4bdrv.c,v 1.47 1999/06/08 17:49:44 hm Exp $
*
* last edit-date: [Thu May 6 10:05:01 1999]
* last edit-date: [Tue Jun 8 19:48:16 1999]
*
*---------------------------------------------------------------------------*/
@ -147,6 +147,8 @@ PDEVSTATIC d_select_t i4bselect;
#endif
#define CDEV_MAJOR 60
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
static struct cdevsw i4b_cdevsw = {
/* open */ i4bopen,
/* close */ i4bclose,
@ -168,11 +170,38 @@ static struct cdevsw i4b_cdevsw = {
/* maxio */ 0,
/* bmaj */ -1
};
#else
static struct cdevsw i4b_cdevsw = {
i4bopen, i4bclose, i4bread, nowrite,
i4bioctl, nostop, nullreset, nodevtotty,
POLLFIELD, nommap, NULL, "i4b", NULL, -1
};
#endif
PDEVSTATIC void i4battach(void *);
PSEUDO_SET(i4battach, i4b_i4bdrv);
#endif /* __FreeBSD__ */
static void
i4b_drvinit(void *unused)
{
#if defined (__FreeBSD_version) && __FreeBSD_version >= 400006
cdevsw_add(&i4b_cdevsw);
#else
static int i4b_devsw_installed = 0;
dev_t dev;
if( ! i4b_devsw_installed )
{
dev = makedev(CDEV_MAJOR,0);
cdevsw_add(&dev,&i4b_cdevsw,NULL);
i4b_devsw_installed = 1;
}
#endif
}
SYSINIT(i4bdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,i4b_drvinit,NULL)
#endif /* BSD > 199306 && defined(__FreeBSD__) */
#ifdef __bsdi__
#include <sys/device.h>
@ -961,16 +990,4 @@ i4bputqueue_hipri(struct mbuf *m)
}
}
#if BSD > 199306 && defined(__FreeBSD__)
static int i4b_devsw_installed = 0;
static void
i4b_drvinit(void *unused)
{
cdevsw_add(&i4b_cdevsw);
}
SYSINIT(i4bdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,i4b_drvinit,NULL)
#endif /* __FreeBSD__ */
#endif /* NI4B > 0 */

View File

@ -22,9 +22,9 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $Id: isdnd.8,v 1.24 1999/02/23 16:25:49 hm Exp $
.\" $Id: isdnd.8,v 1.25 1999/05/20 13:30:36 hm Exp $
.\"
.\" last edit-date: [Tue Feb 23 16:46:26 1999]
.\" last edit-date: [Thu May 20 14:37:42 1999]
.\"
.Dd February 23, 1999
.Dt isdnd 8
@ -130,7 +130,10 @@ facility but instead is appended to a file.
.It Fl L
Specifies the name of the logfile which is used when the option
.Em -l
is set.
is set. See also the keyword
.Em rotatesuffix
in the system section of
.Xr isdnd.rc 5 .
.It Fl P
This option prints out the parsed and verified isdnd configuration in the same
format as the isdnd.rc file. This output can be used as an isdnd.rc file. This

View File

@ -27,9 +27,9 @@
* i4b daemon - main header file
* -----------------------------
*
* $Id: isdnd.h,v 1.62 1999/04/29 08:27:10 hm Exp $
* $Id: isdnd.h,v 1.63 1999/05/20 13:30:36 hm Exp $
*
* last edit-date: [Thu Apr 29 09:35:01 1999]
* last edit-date: [Thu May 20 14:44:18 1999]
*
*---------------------------------------------------------------------------*/
@ -550,6 +550,8 @@ int isdntime = 0; /* flag, log time from exchange */
char tinainitprog[MAXPATHLEN] = TINA_FILE_DEF;
char rotatesuffix[MAXPATHLEN] = "";
#else /* !MAIN */
int isdnfd;
@ -623,6 +625,8 @@ int isdntime;
char tinainitprog[MAXPATHLEN];
char rotatesuffix[MAXPATHLEN];
#endif /* MAIN */
char * bdrivername ( int drivertype );

View File

@ -22,11 +22,11 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $Id: isdnd.rc.5,v 1.34 1999/05/03 08:48:25 hm Exp $
.\" $Id: isdnd.rc.5,v 1.36 1999/07/28 14:17:45 hm Exp $
.\"
.\" last edit-date: [Thu Apr 8 18:29:22 1999]
.\" last edit-date: [Wed Jul 28 15:57:02 1999]
.\"
.Dd February, 23, 1999
.Dd May 20, 1999
.Dt isdnd.rc 5
.Sh NAME
.Nm isdnd.rc
@ -91,6 +91,8 @@ Specifies the name of the accounting file which is used when the keyword
.Em useacctfile
(see below) is set to
.Em on .
See also system keyword
.Em rotatesuffix .
If this keyword is omitted the system default is used. (optional)
.It Li aliasing
@ -203,6 +205,14 @@ expects to find the program below the path
which is prepended to the string specified as a parameter to this keyword.
(optional)
.It Li rotatesuffix
Specifies a suffix for renaming the log- and the accountingfilename. In case
rotatesuffix is used and a USR1 signal is sent to isdnd, the logfile and the
accounting file is not only closed and reopened but the old logfile is also
renamed to the former filename with the rotatesuffix string appended.
If this keyword is omitted, the logfiles are just closed and reopened; this
is also the default behaviour. (optional)
.It Li rtprio
Specifies the realtime priority
.Nm isdnd
@ -299,6 +309,7 @@ Normal behavior, call the remote site which is supposed to accept the call.
.It Ar calledback
Callback behavior, call the remote side which rejects the call and calls
us back.
.El
.It Li dialrandincr
When dialing or re-dialing and this parameter is set to
@ -315,7 +326,7 @@ This keyword is used to configure if incoming and outgoing, incoming-only or
outgoing only connections are possible.
The keyword is optional, the default is
.Em inout .
.El
.Pp
The currently supported parameters are:
.Pp

View File

@ -27,9 +27,9 @@
* i4b daemon - main program entry
* -------------------------------
*
* $Id: main.c,v 1.4 1999/05/23 23:24:08 imp Exp $
* $Id: main.c,v 1.41 1999/07/30 06:51:13 hm Exp $
*
* last edit-date: [Thu Apr 29 09:41:21 1999]
* last edit-date: [Fri Jul 30 08:14:10 1999]
*
*---------------------------------------------------------------------------*/
@ -523,7 +523,10 @@ mloop(
else if(ret == -1)
{
if(errno != EINTR)
log(LL_WRN, "ERROR, select error on isdn device, errno = %d!", errno);
{
log(LL_ERR, "ERROR, select error on isdn device, errno = %d!", errno);
do_exit(1);
}
}
/* handle timeout and recovery */
@ -666,9 +669,8 @@ rereadconfig(int dummy)
if(config_error_flag)
{
log(LL_ERR, "there were %d error(s) in the configuration file, terminating!", config_error_flag);
unlink(PIDFILE);
exit(1);
log(LL_ERR, "rereadconfig: there were %d error(s) in the configuration file, terminating!", config_error_flag);
do_exit(1);
}
if(aliasing)
@ -687,13 +689,30 @@ reopenfiles(int dummy)
{
if(useacctfile)
{
/* close file */
fflush(acctfp);
fclose(acctfp);
/* if user specified a suffix, rename the old file */
if(rotatesuffix[0] != '\0')
{
char filename[MAXPATHLEN];
sprintf(filename, "%s%s", acctfile, rotatesuffix);
if((rename(acctfile, filename)) != 0)
{
log(LL_ERR, "reopenfiles: acct rename failed, cause = %s", strerror(errno));
do_exit(1);
}
}
if((acctfp = fopen(acctfile, "a")) == NULL)
{
log(LL_ERR, "ERROR, can't open acctfile %s for writing, terminating!", acctfile);
exit(1);
do_exit(1);
}
setvbuf(acctfp, (char *)NULL, _IONBF, 0);
}
@ -702,6 +721,21 @@ reopenfiles(int dummy)
{
finish_log();
/* if user specified a suffix, rename the old file */
if(rotatesuffix[0] != '\0')
{
char filename[MAXPATHLEN];
sprintf(filename, "%s%s", logfile, rotatesuffix);
if((rename(logfile, filename)) != 0)
{
log(LL_ERR, "reopenfiles: log rename failed, cause = %s", strerror(errno));
do_exit(1);
}
}
if((logfp = fopen(logfile, "a")) == NULL)
{
fprintf(stderr, "ERROR, cannot open logfile %s: %s\n",

View File

@ -33,9 +33,9 @@
* i4b daemon - network monitor server module
* ------------------------------------------
*
* $Id: monitor.c,v 1.9 1999/05/06 08:24:45 hm Exp $
* $Id: monitor.c,v 1.10 1999/05/30 08:32:30 hm Exp $
*
* last edit-date: [Mon Feb 15 16:42:18 1999]
* last edit-date: [Sun May 30 10:33:05 1999]
*
* -mh created
*
@ -587,23 +587,35 @@ static int monitor_command(int con_index, int fd, int rights)
ioctl(fd, FIONREAD, &u);
if (u < I4B_MON_CMD_HDR) {
if (u == 0) {
log(LL_ERR, "monitor #%d, read 0 bytes", con_index);
/* socket closed by peer */
close(fd);
return 1;
}
return 0; /* not enough data there yet */
}
bytes = recv(fd, cmd, I4B_MON_CMD_HDR, MSG_PEEK);
if (bytes < I4B_MON_CMD_HDR)
{
log(LL_ERR, "monitor #%d, read only %d bytes", con_index, bytes);
return 0; /* errh? something must be wrong... */
}
bytes = I4B_GET_2B(cmd, I4B_MON_CMD_LEN);
if (bytes >= sizeof cmd) {
if (bytes >= sizeof cmd)
{
close(fd);
log(LL_ERR, "garbage on monitor connection #%d, closing it", con_index);
log(LL_ERR, "monitor #%d, garbage on connection", con_index);
return 1;
}
/* now we know the size, it fits, so lets read it! */
if (read(fd, cmd, bytes) <= 0) {
if (read(fd, cmd, bytes) <= 0)
{
log(LL_ERR, "monitor #%d, read <= 0", con_index);
close(fd);
return 1;
}

View File

@ -27,9 +27,9 @@
* i4b daemon - message from kernel handling routines
* --------------------------------------------------
*
* $Id: msghdl.c,v 1.60 1999/05/10 19:34:54 hm Exp $
* $Id: msghdl.c,v 1.61 1999/07/26 11:58:46 hm Exp $
*
* last edit-date: [Mon May 10 21:32:46 1999]
* last edit-date: [Mon Jul 26 13:55:57 1999]
*
*---------------------------------------------------------------------------*/
@ -197,6 +197,7 @@ void
msg_connect_active_ind(msg_connect_active_ind_t *mp)
{
cfg_entry_t *cep;
char *device;
if((cep = get_cep_by_cdid(mp->header.cdid)) == NULL)
{
@ -218,6 +219,8 @@ msg_connect_active_ind(msg_connect_active_ind_t *mp)
cep->outbytes = INVALID;
cep->hangup = 0;
device = bdrivername(cep->usrdevicename);
/* set the B-channel to active */
if((set_channel_busy(cep->isdncontrollerused, cep->isdnchannelused)) == ERROR)
@ -225,15 +228,17 @@ msg_connect_active_ind(msg_connect_active_ind_t *mp)
if(cep->direction == DIR_OUT)
{
log(LL_CHD, "%05d %s outgoing call active (ctl %d, ch %d)",
log(LL_CHD, "%05d %s outgoing call active (ctl %d, ch %d, %s%d)",
cep->cdid, cep->name,
cep->isdncontrollerused, cep->isdnchannelused);
cep->isdncontrollerused, cep->isdnchannelused,
bdrivername(cep->usrdevicename), cep->usrdeviceunit);
}
else
{
log(LL_CHD, "%05d %s incoming call active (ctl %d, ch %d)",
log(LL_CHD, "%05d %s incoming call active (ctl %d, ch %d, %s%d)",
cep->cdid, cep->name,
cep->isdncontrollerused, cep->isdnchannelused);
cep->isdncontrollerused, cep->isdnchannelused,
bdrivername(cep->usrdevicename), cep->usrdeviceunit);
}
#ifdef USE_CURSES

View File

@ -27,9 +27,9 @@
* i4b daemon - config file processing
* -----------------------------------
*
* $Id: rc_config.c,v 1.42 1999/04/29 08:27:10 hm Exp $
* $Id: rc_config.c,v 1.43 1999/05/20 13:30:36 hm Exp $
*
* last edit-date: [Thu Apr 29 08:49:46 1999]
* last edit-date: [Thu May 20 14:11:26 1999]
*
*---------------------------------------------------------------------------*/
@ -141,6 +141,8 @@ set_config_defaults(void)
rarr[i].re_flg = 0;
}
strcpy(rotatesuffix, "");
/* entry section cleanup */
for(i=0; i < CFG_ENTRY_MAX; i++, cep++)
@ -627,6 +629,11 @@ cfg_setval(int keyword)
nregprog++;
break;
case ROTATESUFFIX:
strcpy(rotatesuffix, yylval.str);
DBGL(DL_RCCF, (log(LL_DBG, "system: rotatesuffix = %s", yylval.str)));
break;
case RTPRIO:
#ifdef USE_RTPRIO
rt_prio = yylval.num;

View File

@ -30,9 +30,9 @@
* i4b daemon - runtime configuration parser
* -----------------------------------------
*
* $Id: rc_parse.y,v 1.19 1999/04/29 08:27:10 hm Exp $
* $Id: rc_parse.y,v 1.20 1999/05/20 13:30:36 hm Exp $
*
* last edit-date: [Thu Apr 29 08:46:01 1999]
* last edit-date: [Thu May 20 14:05:26 1999]
*
*---------------------------------------------------------------------------*/
@ -72,67 +72,69 @@ int entrycount = -1;
%token ACCTALL
%token ACCTFILE
%token ALERT
%token ALIASING
%token ALIASFNAME
%token ALIASING
%token ANSWERPROG
%token B1PROTOCOL
%token BEEPCONNECT
%token CALLBACKWAIT
%token CALLEDBACKWAIT
%token CALLIN
%token CALLOUT
%token CHANNELSTATE
%token CONNECTPROG
%token DIALRETRIES
%token DIALRANDINCR
%token DIALOUTTYPE
%token DIALRANDINCR
%token DIALRETRIES
%token DIRECTION
%token DISCONNECTPROG
%token DOWNTRIES
%token DOWNTIME
%token DOWNTRIES
%token EARLYHANGUP
%token ENTRY
%token FULLCMD
%token IDLETIME_IN
%token IDLETIME_OUT
%token IDLE_ALG_OUT
%token ISDNCONTROLLER
%token ISDNCHANNEL
%token ISDNCONTROLLER
%token ISDNTIME
%token ISDNTXDELIN
%token ISDNTXDELOUT
%token LOCAL_PHONE_DIALOUT
%token LOCAL_PHONE_INCOMING
%token MONITORSW
%token MONITORPORT
%token LOGEVENTS
%token MONITOR
%token MONITORACCESS
%token FULLCMD
%token RESTRICTEDCMD
%token CHANNELSTATE
%token CALLIN
%token CALLOUT
%token LOGEVENTS
%token MONITORPORT
%token MONITORSW
%token NAME
%token NO
%token OFF
%token ON
%token RATESFILE
%token RATETYPE
%token REMOTE_NUMBERS_HANDLING
%token REMOTE_PHONE_INCOMING
%token REMOTE_PHONE_DIALOUT
%token RATETYPE
%token REACTION
%token RECOVERYTIME
%token REGEXPR
%token REGPROG
%token REMOTE_NUMBERS_HANDLING
%token REMOTE_PHONE_DIALOUT
%token REMOTE_PHONE_INCOMING
%token RESTRICTEDCMD
%token ROTATESUFFIX
%token RTPRIO
%token SYSTEM
%token TINAINITPROG
%token UNITLENGTH
%token UNITLENGTHSRC
%token USEACCTFILE
%token USEDOWN
%token USRDEVICENAME
%token USRDEVICEUNIT
%token USEDOWN
%token YES
%token <str> NUMBERSTR
%token <str> STRING
@ -303,7 +305,8 @@ sysnumkeyword: MONITORPORT { $$ = MONITORPORT; }
| RTPRIO { $$ = RTPRIO; }
;
sysstrkeyword: REGEXPR { $$ = REGEXPR; }
sysstrkeyword: ROTATESUFFIX { $$ = ROTATESUFFIX; }
| REGEXPR { $$ = REGEXPR; }
| REGPROG { $$ = REGPROG; }
;

View File

@ -30,9 +30,9 @@
* i4b daemon - runtime configuration lexical analyzer
* ---------------------------------------------------
*
* $Id: rc_scan.l,v 1.23 1999/04/29 08:27:10 hm Exp $
* $Id: rc_scan.l,v 1.24 1999/05/20 13:30:36 hm Exp $
*
* last edit-date: [Thu Apr 29 08:46:36 1999]
* last edit-date: [Thu May 20 14:04:13 1999]
*
*---------------------------------------------------------------------------*/
@ -138,6 +138,7 @@ regprog { return REGPROG; }
remdial-handling { return REMOTE_NUMBERS_HANDLING; }
remote-phone-dialout { return REMOTE_PHONE_DIALOUT; }
remote-phone-incoming { return REMOTE_PHONE_INCOMING; }
rotatesuffix { return ROTATESUFFIX; }
rtprio { return RTPRIO; }
system { return SYSTEM; }
tinainitprog { return TINAINITPROG; }

View File

@ -27,9 +27,9 @@
* i4b daemon - misc support routines
* ----------------------------------
*
* $Id: support.c,v 1.56 1999/04/28 15:37:02 hm Exp $
* $Id: support.c,v 1.59 1999/07/05 13:46:46 hm Exp $
*
* last edit-date: [Wed Apr 28 17:13:36 1999]
* last edit-date: [Mon Jul 5 15:29:22 1999]
*
*---------------------------------------------------------------------------*/
@ -600,7 +600,10 @@ name_of_controller(int ctrl_type, int card_type)
"ELSA MicroLink MCall",
"ITK ix1 micro",
"AVM Fritz!Card PCI",
"ELSA PCC-16"
"ELSA PCC-16",
"AVM Fritz!Card PnP",
"Siemens I-Surf 2.0 PnP",
"Asuscom ISDNlink 128K PnP"
};
static char *daic_card[] = {

View File

@ -22,19 +22,15 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $Id: isdndebug.8,v 1.7 1999/05/03 08:48:25 hm Exp $
.\" $Id: isdndebug.8,v 1.8 1999/05/29 09:05:30 hm Exp $
.\"
.\" last edit-date: [Mon Feb 15 17:05:41 1999]
.\" last edit-date: [Sat May 29 11:03:15 1999]
.\"
.\" -hm writing manual pages
.\" -hm getting uptodate
.\"
.\"
.Dd July 9, 1998
.Dd May, 29, 1999
.Dt isdndebug 8
.Sh NAME
.Nm isdndebug
.Nd control debugging handling inside isdn4bsd kernel
.Nd display and control isdn4bsd kernel variables and statistics
.Sh SYNOPSIS
.Nm
.Op Fl e
@ -42,20 +38,27 @@
.Op Fl h
.Op Fl l Ar layer
.Op Fl m
.Op Fl q
.Op Fl r
.Op Fl s Ar value
.Op Fl u Ar unit
.Op Fl z
.Op Fl H
.Op Fl Q
.Sh DESCRIPTION
.Nm isdndebug
is part of the isdn4bsd package and is used to control debugging output
of the isdn4bsd kernel part. Every layer of the isdn4bsd kernel uses a
debugging mask which can be manipulated using this utility.
is part of the isdn4bsd package and is used to control the level of
debugging output of the isdn4bsd kernel part.
Every layer of the isdn4bsd kernel uses a debugging mask which can be
manipulated using this utility.
.Pp
A second usage of
.Nm
is to display and reset the HSCX error counters.
is to display and reset the HSCX (the HSCX is the chip responsible for
the B-channel handling in the
.Xr isic 4
driver) error counters and and to display and reset the D-channel layer 2
(Q.921 LAPD protocol) statistics and error counters.
.Pp
The following options are available:
.Bl -tag -width Ds
@ -70,6 +73,8 @@ Specify the layer for which a command applies. Default is all layers.
.It Fl m
Set debugging mask for the selected layer(s) to display all possible
debugging messages (maximum output).
.It Fl q
Display the Q.921 (D-channel layer 2) frame receive/transmit statistics.
.It Fl r
Set debugging mask for the selected layer(s) to the compiled in default
(reset).
@ -78,11 +83,13 @@ Set debugging mask for the selected layer(s) to value. Value can be
specified in any number base supported by
.Xr sscanf 3 .
.It Fl u
Set the unit numbers for the -h and -H flags.
Set the unit numbers for the -h, -q, -H and -Q flags.
.It Fl z
Set debugging mask for the selected layer(s) to no output at all (zero).
.It Fl H
Reset the HSCX error counters to zero.
.It Fl Q
Reset the Q.921 (D-channel layer 2) frame receive/transmit statistics to zero.
.El
.Pp
.Sh FILES

View File

@ -27,9 +27,9 @@
* main.c - i4b set debug options
* ------------------------------
*
* $Id: main.c,v 1.4 1999/05/23 23:24:11 imp Exp $
* $Id: main.c,v 1.22 1999/07/30 06:51:13 hm Exp $
*
* last edit-date: [Wed Apr 28 16:47:28 1999]
* last edit-date: [Fri Jul 30 08:14:34 1999]
*
*---------------------------------------------------------------------------*/
@ -73,6 +73,33 @@ int opt_zero = 0;
int opt_unit = 0;
int opt_hscx = 0;
int opt_rhscx = 0;
int opt_lapd = 0;
int opt_rlapd = 0;
/*---------------------------------------------------------------------------*
* usage display and exit
*---------------------------------------------------------------------------*/
static void
usage(void)
{
fprintf(stderr, "\n");
fprintf(stderr, "isdndebug - i4b set debug level, version %d.%d.%d, compiled %s %s\n", VERSION, REL, STEP, __DATE__, __TIME__);
fprintf(stderr, "usage: isdndebug -e -g -h -l <layer> -m -q -r -s <value> -u <unit> -z -H -Q\n");
fprintf(stderr, " -e set error only debugging output\n");
fprintf(stderr, " -g get current debugging values\n");
fprintf(stderr, " -h get HSCX event counters\n");
fprintf(stderr, " -l layer specify layer (1...4)\n");
fprintf(stderr, " -m set maximum debugging output\n");
fprintf(stderr, " -q get Q.921 statistics\n");
fprintf(stderr, " -r reset values(s) to compiled in default\n");
fprintf(stderr, " -s value set new debugging value for layer\n");
fprintf(stderr, " -u unit unit number for -h, -q, -H and -Q commands\n");
fprintf(stderr, " -z set zero (=no) debugging output\n");
fprintf(stderr, " -H reset HSCX event counters to zero\n");
fprintf(stderr, " -Q reset Q.921 statistics\n");
fprintf(stderr, "\n");
exit(1);
}
/*---------------------------------------------------------------------------*
* program entry
@ -84,7 +111,7 @@ main(int argc, char **argv)
ctl_debug_t cdbg;
int ret;
while ((c = getopt(argc, argv, "eghl:mrs:u:zH")) != -1)
while ((c = getopt(argc, argv, "eghl:mqrs:u:zHQ")) != -1)
{
switch(c)
{
@ -100,6 +127,10 @@ main(int argc, char **argv)
opt_hscx = 1;
break;
case 'q':
opt_lapd = 1;
break;
case 'r':
opt_reset = 1;
break;
@ -134,6 +165,10 @@ main(int argc, char **argv)
opt_rhscx = 1;
break;
case 'Q':
opt_rlapd = 1;
break;
case '?':
default:
usage();
@ -142,13 +177,14 @@ main(int argc, char **argv)
}
if(opt_get == 0 && opt_set == 0 && opt_reset == 0 && opt_max == 0 &&
opt_err == 0 && opt_zero == 0 && opt_hscx == 0 && opt_rhscx == 0)
opt_err == 0 && opt_zero == 0 && opt_hscx == 0 && opt_rhscx == 0 &&
opt_lapd == 0 && opt_rlapd == 0)
{
usage();
}
if((opt_get + opt_set + opt_reset + opt_max + opt_err + opt_zero +
opt_hscx + opt_rhscx) > 1)
opt_hscx + opt_rhscx + opt_lapd + opt_rlapd) > 1)
{
usage();
}
@ -224,6 +260,59 @@ main(int argc, char **argv)
exit(0);
}
if(opt_lapd)
{
l2stat_t l2s;
l2s.unit = opt_unit;
if((ret = ioctl(isdnfd, I4B_CTL_GET_LAPDSTAT, &l2s)) < 0)
{
fprintf(stderr, "ioctl I4B_CTL_GET_LAPDSTAT failed: %s", strerror(errno));
exit(1);
}
printf("unit %d Q.921 statistics: receive transmit\n", opt_unit);
printf("---------------------------------------------\n");
printf("# of I-frames %12lu %12lu\n", l2s.lapdstat.rx_i, l2s.lapdstat.tx_i);
printf("# of RR-frames %12lu %12lu\n", l2s.lapdstat.rx_rr, l2s.lapdstat.tx_rr);
printf("# of RNR-frames %12lu %12lu\n", l2s.lapdstat.rx_rnr, l2s.lapdstat.tx_rnr);
printf("# of REJ-frames %12lu %12lu\n", l2s.lapdstat.rx_rej, l2s.lapdstat.tx_rej);
printf("# of SABME-frames %12lu %12lu\n", l2s.lapdstat.rx_sabme, l2s.lapdstat.tx_sabme);
printf("# of DM-frames %12lu %12lu\n", l2s.lapdstat.rx_dm, l2s.lapdstat.tx_dm);
printf("# of DISC-frames %12lu %12lu\n", l2s.lapdstat.rx_disc, l2s.lapdstat.tx_disc);
printf("# of UA-frames %12lu %12lu\n", l2s.lapdstat.rx_ua, l2s.lapdstat.tx_ua);
printf("# of FRMR-frames %12lu %12lu\n", l2s.lapdstat.rx_frmr, l2s.lapdstat.tx_frmr);
printf("# of TEI-frames %12lu %12lu\n", l2s.lapdstat.rx_tei, l2s.lapdstat.tx_tei);
printf("# of UI-frames %12lu \n", l2s.lapdstat.rx_ui);
printf("# of XID-frames %12lu \n", l2s.lapdstat.rx_xid);
printf(" errors\n");
printf("---------------------------------------------\n");
printf("# of frames with incorrect length%12lu\n", l2s.lapdstat.err_rx_len);
printf("# of frames with bad frame type %12lu\n", l2s.lapdstat.err_rx_badf);
printf("# of bad S frames %12lu\n", l2s.lapdstat.err_rx_bads);
printf("# of bad U frames %12lu\n", l2s.lapdstat.err_rx_badu);
printf("# of bad UI frames %12lu\n", l2s.lapdstat.err_rx_badui);
exit(0);
}
if(opt_rlapd)
{
int unit;
unit = opt_unit;
if((ret = ioctl(isdnfd, I4B_CTL_CLR_LAPDSTAT, &unit)) < 0)
{
fprintf(stderr, "ioctl I4B_CTL_CLR_LAPDSTAT failed: %s", strerror(errno));
exit(1);
}
printf("Q.921 statistics counters unit %d reset to zero!\n", unit);
exit(0);
}
if((ret = ioctl(isdnfd, I4B_CTL_GET_DEBUG, &cdbg)) < 0)
{
@ -532,27 +621,5 @@ printl4(unsigned long val)
printf(" ++++-++++-++++-++++-++++-+-------------- unassigned\n");
}
/*---------------------------------------------------------------------------*
* usage display and exit
*---------------------------------------------------------------------------*/
static void
usage(void)
{
fprintf(stderr, "\n");
fprintf(stderr, "isdndebug - i4b set debug level, version %d.%d.%d, compiled %s %s\n", VERSION, REL, STEP, __DATE__, __TIME__);
fprintf(stderr, "usage: isdndebug -e -h -g -l <layer> -m -r -s <value> -u <unit> -z -H\n");
fprintf(stderr, " -e set error only debugging output\n");
fprintf(stderr, " -g get current debugging values\n");
fprintf(stderr, " -h get HSCX event counters\n");
fprintf(stderr, " -l layer specify layer (1...4)\n");
fprintf(stderr, " -m set maximum debugging output\n");
fprintf(stderr, " -r reset values(s) to compiled in default\n");
fprintf(stderr, " -s value set new debugging value for layer\n");
fprintf(stderr, " -u unit unit number for -h and -H commands\n");
fprintf(stderr, " -z set zero (=no) debugging output\n");
fprintf(stderr, " -H reset HSCX event counters to zero\n");
fprintf(stderr, "\n");
exit(1);
}
/* EOF */

View File

@ -27,9 +27,9 @@
* main.c - isdndecode main program file
* -------------------------------------
*
* $Id: main.c,v 1.4 1999/05/23 23:24:13 imp Exp $
* $Id: main.c,v 1.11 1999/07/30 06:51:13 hm Exp $
*
* last edit-date: [Mon Apr 26 14:02:44 1999]
* last edit-date: [Fri Jul 30 08:14:58 1999]
*
*---------------------------------------------------------------------------*/
@ -377,7 +377,7 @@ fmt_hdr(i4b_trace_hdr_t *hdr, int frm_len)
static char hbuf[256];
int i = 0;
s = localtime(&(hdr->time.tv_sec));
s = localtime((time_t *)&(hdr->time.tv_sec));
if(hdr->type == TRC_CH_I) /* Layer 1 INFO's */
{

View File

@ -33,9 +33,9 @@
* i4b daemon - network monitor client
* -----------------------------------
*
* $Id: main.c,v 1.12 1999/05/11 08:15:59 hm Exp $
* $Id: main.c,v 1.14 1999/05/30 13:39:55 hm Exp $
*
* last edit-date: [Tue Apr 20 14:14:26 1999]
* last edit-date: [Sun May 30 15:19:47 1999]
*
* -mh created
* -hm checking in
@ -88,7 +88,7 @@ static void print_disconnect(time_t tstamp, int channel);
static void print_updown(time_t tstamp, int channel, int isup);
static void handle_event(BYTE *msg, int len);
#ifdef DEBUG
static void dump_event(BYTE *msg, int len);
static void dump_event(BYTE *msg, int len, int readflag);
#endif
/*
@ -115,7 +115,7 @@ int main(int argc, char **argv)
int portno = DEF_MONPORT;
int i;
while ((i = getopt(argc, argv, "dh:p:l:")) != EOF)
while ((i = getopt(argc, argv, "dh:p:l:")) != -1)
{
switch (i)
{
@ -341,7 +341,7 @@ static void mloop()
}
#ifdef DEBUG
if (dumpall)
dump_event(buf, ret);
dump_event(buf, ret, 1);
#endif
handle_event(buf, ret);
}
@ -352,17 +352,20 @@ static void mloop()
/*
* Dump a complete event packet.
*/
static void dump_event(BYTE *msg, int len)
static void dump_event(BYTE *msg, int len, int read)
{
int i;
printf("event dump:");
if(read)
printf("read from socket:");
else
printf("write to socket:");
for (i = 0; i < len; i++)
{
if (i % 8 == 0)
printf("\n%02x: ", i);
printf("%02x %c ", msg[i], isprint(msg[i]) ? msg[i] : '.');
printf("\n%02d: ", i);
printf("0x%02x %c ", msg[i], isprint(msg[i]) ? msg[i] : '.');
}
printf("\n");
}
@ -477,6 +480,11 @@ static void handle_event(BYTE *msg, int len)
I4B_PUT_2B(cmd, I4B_MON_ICLIENT_VERMINOR, MPROT_REL);
I4B_PUT_4B(cmd, I4B_MON_ICLIENT_EVENTS, ~0U);
#ifdef DEBUG
if (dumpall)
dump_event(cmd, sizeof cmd, 0);
#endif
write(monsock, cmd, sizeof cmd);
break;
@ -621,6 +629,11 @@ static void handle_input()
{
BYTE cmd[I4B_MON_DUMPRIGHTS_SIZE];
I4B_PREP_CMD(cmd, I4B_MON_DUMPRIGHTS_CODE);
#ifdef DEBUG
if (dumpall)
dump_event(cmd, I4B_MON_DUMPRIGHTS_SIZE, 0);
#endif
write(monsock, cmd, I4B_MON_DUMPRIGHTS_SIZE);
}
break;
@ -629,6 +642,11 @@ static void handle_input()
{
BYTE cmd[I4B_MON_DUMPMCONS_SIZE];
I4B_PREP_CMD(cmd, I4B_MON_DUMPMCONS_CODE);
#ifdef DEBUG
if (dumpall)
dump_event(cmd, I4B_MON_DUMPMCONS_CODE, 0);
#endif
write(monsock, cmd, I4B_MON_DUMPMCONS_SIZE);
}
break;
@ -637,6 +655,11 @@ static void handle_input()
{
BYTE cmd[I4B_MON_CFGREREAD_SIZE];
I4B_PREP_CMD(cmd, I4B_MON_CFGREREAD_CODE);
#ifdef DEBUG
if (dumpall)
dump_event(cmd, I4B_MON_CFGREREAD_CODE, 0);
#endif
write(monsock, cmd, I4B_MON_CFGREREAD_SIZE);
}
break;
@ -649,6 +672,11 @@ static void handle_input()
fgets(buf, sizeof buf, stdin);
channel = atoi(buf);
I4B_PUT_4B(cmd, I4B_MON_HANGUP_CHANNEL, channel);
#ifdef DEBUG
if (dumpall)
dump_event(cmd, I4B_MON_HANGUP_CHANNEL, 0);
#endif
write(monsock, cmd, I4B_MON_HANGUP_SIZE);
}
break;

View File

@ -33,9 +33,9 @@
* i4b daemon - network monitor protocl definition
* -----------------------------------------------
*
* $Id: monitor.h,v 1.5 1999/02/14 09:44:57 hm Exp $
* $Id: monitor.h,v 1.6 1999/05/30 13:49:20 hm Exp $
*
* last edit-date: [Mon Aug 3 06:52:06 1998]
* last edit-date: [Sun May 30 15:50:10 1999]
*
* -mh created
* -hm checking in
@ -256,8 +256,8 @@
/* put a string into recor r at offset off, make sure it's not to long
* and proper terminate it */
#define I4B_PUT_STR(r, off, str) { \
strncpy(r+off, str, I4B_MAX_MON_STRING); \
r[off+I4B_MAX_MON_STRING-1] = (BYTE)0; }
strncpy((r)+(off), (str), I4B_MAX_MON_STRING); \
(r)[(off)+I4B_MAX_MON_STRING-1] = (BYTE)0; }
#endif /* MONITOR_H */

View File

@ -27,9 +27,9 @@
* isdntel - isdn4bsd telephone answering machine support
* ======================================================
*
* $Id: main.c,v 1.4 1999/05/23 23:24:16 imp Exp $
* $Id: main.c,v 1.10 1999/07/30 06:51:13 hm Exp $
*
* last edit-date: [Mon Apr 26 13:56:35 1999]
* last edit-date: [Fri Jul 30 08:16:03 1999]
*
*----------------------------------------------------------------------------*/

View File

@ -27,9 +27,9 @@
* isdntelctl - i4b set telephone interface options
* ------------------------------------------------
*
* $Id: main.c,v 1.4 1999/05/23 23:24:19 imp Exp $
* $Id: main.c,v 1.11 1999/07/30 06:51:13 hm Exp $
*
* last edit-date: [Mon Apr 26 14:07:06 1999]
* last edit-date: [Fri Jul 30 08:16:21 1999]
*
*---------------------------------------------------------------------------*/

View File

@ -27,9 +27,9 @@
* main.c - i4b selftest utility
* -----------------------------
*
* $Id: main.c,v 1.3 1999/05/20 10:14:11 hm Exp $
* $Id: main.c,v 1.13 1999/07/30 06:51:13 hm Exp $
*
* last edit-date: [Mon Apr 26 14:08:40 1999]
* last edit-date: [Fri Jul 30 08:16:37 1999]
*
*---------------------------------------------------------------------------*/

View File

@ -35,9 +35,9 @@
* trace.c - print traces of D (B) channel activity for isdn4bsd
* -------------------------------------------------------------
*
* $Id: trace.c,v 1.4 1999/05/23 23:24:21 imp Exp $
* $Id: trace.c,v 1.14 1999/07/30 06:51:13 hm Exp $
*
* last edit-date: [Sun Feb 14 10:23:28 1999]
* last edit-date: [Fri Jul 30 08:16:59 1999]
*
* -hm rewriting for isic and new trace format
* -hm new option -f, use automatic name for -o
@ -489,7 +489,7 @@ fmt_hdr(i4b_trace_hdr_t *hdr, int frm_len)
static char hbuf[256];
int i = 0;
s = localtime(&(hdr->time.tv_sec));
s = localtime((time_t *)&(hdr->time.tv_sec));
if(hdr->type == TRC_CH_I) /* Layer 1 INFO's */
{

View File

@ -22,11 +22,11 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $Id: i4btrc.4,v 1.6 1999/02/14 09:45:02 hm Exp $
.\" $Id: i4btrc.4,v 1.7 1999/07/30 07:19:17 hm Exp $
.\"
.\" last edit-date: [Sun Feb 14 10:37:15 1999]
.\" last edit-date: [Fri Jul 30 09:15:57 1999]
.\"
.Dd February 3, 1998
.Dd July 30, 1999
.Dt i4btrc 4
.Sh NAME
.Nm i4btrc

View File

@ -22,11 +22,11 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $Id: isic.4,v 1.18 1999/05/03 08:48:25 hm Exp $
.\" $Id: isic.4,v 1.23 1999/07/30 07:21:19 hm Exp $
.\"
.\" last edit-date: [Tue Apr 20 14:08:35 1999]
.\" last edit-date: [Fri Jul 30 09:20:24 1999]
.\"
.Dd December 22, 1998
.Dd July 30, 1999
.Dt isic 4
.Sh NAME
.Nm isic
@ -50,9 +50,14 @@ For an AVM A1 or AVM Fritz!Card classic:
.Cd "device isic0 at isa? port 0x340 net irq 5 flags 4 vector isicintr"
.Pp
For an AVM Fritz!Card PCMCIA:
.Cd options \&"AVM_A1\&"
.Cd options \&"AVM_A1_PCMCIA\&"
.Cd "device isic0 at isa? port 0x340 net irq 5 flags 10 vector isicintr"
.Pp
For an AVM Fritz!Card PnP:
.Cd options \&"AVM_PNP\&"
.Cd "device isic0 at isa? port ? net irq ? vector isicintr"
.Pp
For a Teles S0/16.3 PnP card (PnP):
.Cd options \&"TEL_S0_16_3_P\&"
.Cd "device isic0 at isa? port ? net irq ? vector isicintr"
@ -89,6 +94,10 @@ For an ELSA QuickStep 1000pro PCI:
.Cd options \&"ELSA_QS1PCI\&"
.Cd "device isic0"
.Pp
For a Siemens I-Surf 2.0 PnP:
.Cd options \&"SIEMENS_ISURF2\&"
.Cd "device isic0 at isa? port ? net irq ? vector isicintr"
.Pp
.Ar FreeBSD PnP configuration:
.Pp
To be able to use PnP cards under FreeBSD, you have to add
@ -180,6 +189,12 @@ For an ELSA MicroLink MC/all
.Cd options \&"ELSA_MCALL\&"
.Cd "isic* at pcmcia? function ?"
.Pp
Cards on the Amiga Zorro bus:
.Pp
For a BSC/ITH ISDN Master, ITH ISDN MasterII or VMC ISDN Blaster
.Cd "aster* at zbus?"
.Cd "isic* at aster? port ?"
.Pp
.Sh DESCRIPTION
The
.Nm
@ -347,6 +362,21 @@ value is 18.
Valid i/o port values must be in the range (<unknown>).
.Pp
Valid interrupt configurations are (<unknown>).
.Pp
.It Ar "BSC ISDN Master"
.It Ar "ITH ISDN MasterII"
.It Ar "VMC ISDN Blaster"
.Pp
The card addresses are auto-configured by the Zorro bus kernel subsystem.
The ISDN functions of the boards are at known (to the driver) relative
addresses.
.Pp
Note that currently, you have to jumper the card interupt for
.Em IPL 2
instead of IPL 6 (which is used by most AmigaOS software).
.Pp
Note that the ITH ISDN MasterII doesn't work in the DraCo Zorro bus. This
is no NetBSD problem, but general.
.El
.Pp
.Sh CAVEATS
@ -378,3 +408,6 @@ can be contacted at hm@kts.org.
.Pp
The complete porting to and maintenance of NetBSD was done by Martin Husemann.
He can be contacted at martin@rumolt.teuto.de
.Pp
The NetBSD/Amiga ISDN Blaster/Master/MasterII driver was written by
Ignatios Souvatzis <is@netbsd.org>.