Linux Quicknet-Drivers-Howto
Quicknet Technologies, Inc. (www.quicknet.net)
Version 0.3.4  December 18, 1999

1.0  Introduction

This document describes the first GPL release version of the Linux
driver for the Quicknet Internet PhoneJACK and Internet LineJACK
cards.  More information about these cards is available at
www.quicknet.net.  The driver version discussed in this document is
0.3.4.

These cards offer nice telco style interfaces to use your standard
telephone/key system/PBX as the user interface for VoIP applications.
The Internet LineJACK also offers PSTN connectivity for a single line
Internet to PSTN gateway.  Of course, you can add more than one card
to a system to obtain multi-line functionality.  At this time, the
driver supports the POTS port on both the Internet PhoneJACK and the
Internet LineJACK, but the PSTN port on the latter card is not yet
supported.

This document, and the drivers for the cards, are intended for a
limited audience that includes technically capable programmers who
would like to experiment with Quicknet cards.  The drivers are
considered in ALPHA status and are not yet considered stable enough
for general, widespread use in an unlimited audience.

That's worth saying again:

THE LINUX DRIVERS FOR QUICKNET CARDS ARE PRESENTLY IN A ALPHA STATE
AND SHOULD NOT BE CONSIDERED AS READY FOR NORMAL WIDESPREAD USE.

They are released early in the spirit of Internet development and to
make this technology available to innovators who would benefit from
early exposure.

When we promote the device driver to "beta" level it will be
considered ready for non-programmer, non-technical users.  Until then,
please be aware that these drivers may not be stable and may affect
the performance of your system.


1.1 Latest Additions/Improvements

The 0.3.4 version of the driver is the first GPL release.  Several
features had to be removed from the prior binary only module, mostly
for reasons of Intellectual Property rights.  We can't release
information that is not ours - so certain aspects of the driver had to
be removed to protect the rights of others.  

Specifically, very old Internet PhoneJACK cards have non-standard
G.723.1 codecs (due to the early nature of the DSPs in those days).
The auto-conversion code to bring those cards into compliance with
today's standards is available as a binary only module to those people
needing it.  If you bought your card after 1997 or so, you are OK -
it's only the very old cards that are affected.

Also, the code to download G.728/G.729/G.729a codecs to the DSP is
available as a binary only module as well.  This IP is not ours to
release.  

Hooks are built into the GPL driver to allow it to work with other
companion modules that are completely separate from this module.

1.2 Copyright, Trademarks, Disclaimer, & Credits 

Copyright

Copyright (c) 1999 Quicknet Technologies, Inc.  Permission is granted
to freely copy and distribute this document provided you preserve it
in its original form. For corrections and minor changes contact the
maintainer at linux@quicknet.net.

Trademarks

Internet PhoneJACK and Internet LineJACK are registered trademarks of
Quicknet Technologies, Inc.

Disclaimer

Much of the info in this HOWTO is early information released by
Quicknet Technologies, Inc. for the express purpose of allowing early
testing and use of the Linux drivers developed for their products.
While every attempt has been made to be thorough, complete and
accurate, the information contained here may be unreliable and there
are likely a number of errors in this document. Please let the
maintainer know about them. Since this is free documentation, it
should be obvious that neither I nor previous authors can be held
legally responsible for any errors.

Credits

This HOWTO was written by:

	Greg Herlein <gherlein@quicknet.net>
	Ed Okerson <eokerson@quicknet.net> 

1.3  Future Plans: You Can Help 

Please let the maintainer know of any errors in facts, opinions,
logic, spelling, grammar, clarity, links, etc.  But first, if the date
is over a month old, check to see that you have the latest
version. Please send any info that you think belongs in this document.

You can also contribute code and/or bug-fixes for the sample
applications.


1.4  Where to get things

Info on latest versions of the driver are here:

http://web.archive.org/web/*/http://www.quicknet.net/develop.htm

1.5  Mailing List

Quicknet operates a mailing list to provide a public forum on using
these drivers.

To subscribe to the linux-sdk mailing list, send an email to:

   majordomo@linux.quicknet.net

In the body of the email, type:

   subscribe linux-sdk <your-email-address>

Please delete any signature block that you would normally add to the
bottom of your email - it tends to confuse majordomo.

To send mail to the list, address your mail to 

   linux-sdk@linux.quicknet.net

Your message will go out to everyone on the list.

To unsubscribe to the linux-sdk mailing list, send an email to:

   majordomo@linux.quicknet.net

In the body of the email, type:

   unsubscribe linux-sdk <your-email-address>



2.0  Requirements

2.1  Quicknet Card(s)

You will need at least one Internet PhoneJACK or Internet LineJACK
cards.  These are ISA or PCI bus devices that use Plug-n-Play for
configuration, and use no IRQs.  The driver will support up to 16
cards in any one system, of any mix between the two types.

Note that you will need two cards to do any useful testing alone, since
you will need a card on both ends of the connection.  Of course, if
you are doing collaborative work, perhaps your friends or coworkers
have cards too.  If not, we'll gladly sell them some!


2.2  ISAPNP

Since the Quicknet cards are Plug-n-Play devices, you will need the
isapnp tools package to configure the cards, or you can use the isapnp
module to autoconfigure them.  The former package probably came with
your Linux distribution.  Documentation on this package is available
online at:

http://mailer.wiwi.uni-marburg.de/linux/LDP/HOWTO/Plug-and-Play-HOWTO.html

The isapnp autoconfiguration is available on the Quicknet website at:

    http://www.quicknet.net/develop.htm

though it may be in the kernel by the time you read this.


3.0  Card Configuration 

If you did not get your drivers as part of the linux kernel, do the
following to install them:

   a.  untar the distribution file.  We use the following command:
        tar -xvzf ixj-0.x.x.tgz

This creates a subdirectory holding all the necessary files.  Go to that
subdirectory.

   b.  run the "ixj_dev_create" script to remove any stray device
files left in the /dev directory, and to create the new officially
designated device files.  Note that the old devices were called 
/dev/ixj, and the new method uses /dev/phone.  

   c.  type "make;make install" - this will compile and install the
module.

   d.  type "depmod -av" to rebuild all your kernel version dependencies.

   e.  if you are using the isapnp module to configure the cards
       automatically, then skip to step f.  Otherwise, ensure that you
       have run the isapnp configuration utility to properly configure
       the cards.

       e1. The Internet PhoneJACK has one configuration register that
           requires 16 IO ports.  The Internet LineJACK card has two
           configuration registers and isapnp reports that IO 0
           requires 16 IO ports and IO 1 requires 8.  The Quicknet
           driver assumes that these registers are configured to be
           contiguous, i.e. if IO 0 is set to 0x340 then IO 1 should
           be set to 0x350.

           Make sure that none of the cards overlap if you have
           multiple cards in the system.

           If you are new to the isapnp tools, you can jumpstart
           yourself by doing the following:

      e2.  go to the /etc directory and run pnpdump to get a blank
           isapnp.conf file.

	   	pnpdump > /etc/isapnp.conf

      e3.  edit the /etc/isapnp.conf file to set the IO warnings and
           the register IO addresses. The IO warnings means that you
           should find the line in the file that looks like this:

	   (CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING

	   and you should edit the line to look like this:

	   (CONFLICT (IO WARNING)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) #
	   or WARNING

           The next step is to set the IO port addresses.  The issue
           here is that isapnp does not identify all of the ports out
           there.  Specifically any device that does not have a driver
           or module loaded by Linux will not be registered.  This
           includes older sound cards and network cards.  We have
           found that the IO port 0x300 is often used even though
           isapnp claims that no-one is using those ports.  We
           recommend that for a single card installation that port
           0x340 (and 0x350) be used.  The IO port line should change
           from this:

	   (IO 0 (SIZE 16) (BASE 0x0300) (CHECK))

	   to this:

	   (IO 0 (SIZE 16) (BASE 0x0340) )

       e4.  if you have multiple Quicknet cards, make sure that you do
            not have any overlaps.  Be especially careful if you are
            mixing Internet PhoneJACK and Internet LineJACK cards in
            the same system.  In these cases we recommend moving the
            IO port addresses to the 0x400 block.  Please note that on
            a few machines the 0x400 series are used.  Feel free to
            experiment with other addresses.  Our cards have been
            proven to work using IO addresses of up to 0xFF0.

       e5.  the last step is to uncomment the activation line so the
            drivers will be associated with the port.  This means the
            line (immediately below) the IO line should go from this:

            # (ACT Y)

            to this:

	    (ACT Y)

            Once you have finished editing the isapnp.conf file you
            must submit it into the pnp driverconfigure the cards.
            This is done using the following command:

	    isapnp isapnp.conf

	    If this works you should see a line that identifies the
            Quicknet device, the IO port(s) chosen, and a message
            "Enabled OK".

   f.  if you are loading the module by hand, use insmod.  An example
of this would look like this:

	insmod phonedev
	insmod ixj dspio=0x320,0x310 xio=0,0x330

Then verify the module loaded by running lsmod. If you are not using a
module that matches your kernel version, you may need to "force" the
load using the -f option in the insmod command.

	insmod phonedev
	insmod -f ixj dspio=0x320,0x310 xio=0,0x330


If you are using isapnp to autoconfigure your card, then you do NOT
need any of the above, though you need to use depmod to load the
driver, like this:

	depmod ixj

which will result in the needed drivers getting loaded automatically.

   g.  if you are planning on having the kernel automatically request
the module for you, then you need to edit /etc/conf.modules and add the
following lines:

	options ixj dspio=0x340 xio=0x330 ixjdebug=0

If you do this, then when you execute an application that uses the
module the kernel will request that it is loaded.

  h.  if you want non-root users to be able to read and write to the 
ixj devices (this is a good idea!) you should do the following:

     - decide upon a group name to use and create that group if 
       needed.  Add the user names to that group that you wish to 
       have access to the device.  For example, we typically will
       create a group named "ixj" in /etc/group and add all users
       to that group that we want to run software that can use the 
       ixjX devices.

     - change the permissions on the device files, like this:
	
       chgrp ixj /dev/ixj*	
       chmod 660 /dev/ixj*
	
Once this is done, then non-root users should be able to use the
devices.  If you have enabled autoloading of modules, then the user
should be able to open the device and have the module loaded
automatically for them.


4.0 Driver Installation problems.

We have tested these drivers on the 2.2.9, 2.2.10, 2.2.12, and 2.2.13 kernels
and in all cases have eventually been able to get the drivers to load and 
run.  We have found four types of problems that prevent this from happening.
The problems and solutions are:

  a. A step was missed in the installation.  Go back and use section 3
as a checklist.  Many people miss running the ixj_dev_create script and thus
never load the device names into the filesystem.

  b. The kernel is inconsistently linked.  We have found this problem in
the Out Of the Box installation of several distributions.  The symptoms 
are that neither driver will load, and that the unknown symbols include "jiffy"
and "kmalloc".  The solution is to recompile both the kernel and the
modules.  The command string for the final compile looks like this:

    In the kernel directory:
    1.  cp .config /tmp
    2.  make mrproper
    3.  cp /tmp/.config .
    4.	make clean;make bzImage;make modules;make modules_install

This rebuilds both the kernel and all the modules and makes sure they all 
have the same linkages.  This generally solves the problem once the new 
kernel is installed and the system rebooted.

  c. The kernel has been patched, then unpatched.  This happens when
someone decides to use an earlier kernel after they load a later kernel.
The symptoms are proceeding through all three above steps and still not
being able to load the driver.  What has happened is that the generated
header files are out of sync with the kernel itself.  The solution is
to recompile (again) using "make mrproper".  This will remove and then
regenerate all the necessary header files.  Once this is done, then you 
need to install and reboot the kernel.  We have not seen any problem
loading one of our drivers after this treatment.

5.0  Known Limitations

We cannot currently play "dial-tone" and listen for DTMF digits at the
same time using the ISA PhoneJACK.  This is a bug in the 8020 DSP chip
used on that product.  All other Quicknet products function normally
in this regard.  We have a work-around, but it's not done yet.  Until
then, if you want dial-tone, you can always play a recorded dial-tone
sound into the audio until you have gathered the DTMF digits.

















