#!/bin/bash
#  ONLY use scanModem downloaded as:http://linmodems.technion.ac.il/packages/scanModem.gz
UPDATE="2003 November 12"
echo
echo UPDATE=$UPDATE

# BN can be inherited from ./build_module or Installers or checkout
# if BN doesn't exist
if test -z "$BN" ; then 
  BN=`basename $0`
fi
# Short term files have names tmpfile.1 2 3 etc.
if test -z "$TMPM" ; then
  TMPM=0tmpfile
fi
echo > $TMPM

# conditional when scanmodem is used in ltmodem.deb or .rpm installation
#  with stops disabled
if [ "$BN" != "scanModem" ] ; then
  FAST=yes
else
  echo  " $0 should ONLY be run within a Linux/UNIX partition."
  echo  "   If within a MicroSoft/DOS partition, abort with Ctrl-C now !!!"
  echo  "   Copy scanModem.gz to your Linux partition and restart."
  echo
  read -p "To continue:	Enter"
fi
if [ "`pwd`" = "/" ] ; then
  cat<<END

 $0 should NOT be run in the / directory!!
 Copy scanModem to /root/ or /tmp/ of some /home/User/ folder.
 Exiting now

END
  exit
fi

if test -z "$RECORD" ; then
  RECORD=ModemData.txt
  echo > $RECORD
  echo > $RECORD.2
else
  echo ------------ beginning SCANMODEM section ------ >>$RECORD
fi

if test -z "$FAST" ; then
  # this information is NOT needed during ltmodem driver installation
  cat<<END 

 This script primarily utilizes the LSPCI tool from the package PCIUTILS
 and various component sciptlets.  The goal is to identify the modem chipset, 
 enabling direction to supporting software and/or more detailed information. 
 It will fail to recognize ISA bus modems and 16 bit PCMCIA card modems.
 See the output files for guidance on these cases. 

 The script originated as scanPCI written by Chris Hebeisen, 
 to recognize modems with DSP (digital signal processing) chipsets made by Lucent/AgereSystems. 
 It now aspires to provide useful information on other modems as well.
 For the  Lucent/Agere DSP chip modems, System information is used to recommend Installers,
 from the Installer list output from Chris's repository:   http://ltmodem.heby.de/

 Updates are done as problems are recogized and solved. 
 So if new problems arise, download an update before querying discuss@linmodems.org

END
  read -p "To continue:	Enter"
  cat<<END 

 Three types of information are acquired from your System:
 1) General system information necessary for your guidance;
 2) The PCI_ID of the modem card or its AC'97/MC controller;
 but for the increasingly prevalent "soft modems", the primary PCI_ID
 only identifies the controller but not the modem subSystem;
 3) For some soft modems co-serving with a digital audio card,
 an ac97_modem codec SIL_id is acquired.
 
 The remainder of $0 is a repository of "modem gossip" or URLs thereto.
 Only information blocks relevant to your System will be output into
      $RECORD and $RECORD.2
 Should you need assistance after FIRST following all the advice and/or URLs,
 1) Browse the general information at:  http://linmodems.technion.ac.il/  and
 2) Please use the archive SEARCH ENGINE there available.
    Answers to many Newbie questions are already in the Archives. 
 ONLY thereafter send ModemData.txt to:   discuss@linmodems.org
 ModemData.txt.2  has common information the List need not be bothered with.

 This script can be read with a text browser.
 Blocks of Information with little code begin and end with ###########.
 
 Last update $UPDATE by  Marv Stodolsky. 
 Regular updates at:  http://linmodems.technion.ac.il/packages/scanModem.gz 
 Please do NOT use a scanModem.gz from any other site!!
 -----------------------------------------------------------------------------------

END
  read -p "To continue:	Enter"
  cat<<END > $RECORD.2

 Do NOT send this common information to discuss@linmodems.org 
 ==============
 Several sections are included in this file:
   Rational of scanModem service;
   summary of modem Support under Linux
   description of the SIL_ID test
   some output from scanModem specific to your System
   an explanation of the GCC 2.95 compiler warning
   ethernet Interference with DNS (domain name service)
   COMPILING DRIVERS.  Please Linux Newbies read carefully!!
   Followup Actions, to get online, with dialout examples.

 RATIONAL
 This $0 service is sadly  necessary because of the pre-compiled format 
 (binary, Closed Source)  of some modem supporting code. Intellectual property
 is protected within the binary component.  But this prevents compatibility
 assessments/debugging against Linux Open Source code. Skipping many details, 
 the consequence is that some Linux distributions do not deliver Closed Source code,
 or tools adequate to fully identify the modem's chipset.
 This script tries to close  this information gap.

 USB modems will not be detected UNTIL proper USB support is installed.
 See http://www.linux-usb.org/USB-guide/x332.html  
     ftp://ftp.smlink.com/linux/unsupported/ may provide support for
     SmartUSB56 (ST7554) based modems with vendor/product usb ids: 0483:7554

It is the CHIPSET, and Not the modem BrandName which is informative for Linux support.
 For modems not recognized by $0, chipset information may be obtained under Microsoft Windows through:
 1) Start > Settings > Control Panel > Modem  
   Start > Settings > Control Panel > System > Devices > Modem
   Do the modem query test, if available, looking for manufacturer chipset, information in the output.
   Try to identify the modem setup file, with name perhaps MODEM.INF
 2) Open a COMM console, and send ATI commands to the modem (ATI, ATI1, ATI2, etc)
   which may elicit chipset and driver information.


 SUPPORT SUMMARY - as of $UPDATE
 -------------------------------------
 Controller chipsets are used in the most expensive modems and are supported.
  They utilize the same driver, serial.o , and most commonly the ports /dev/ttyS0 thru 3.
  Such chipsets are produced by 3Com, AgereSystems (the Venus chipset),
  Topic Semiconductor Corp., and others. But the same companies may
  produce unsupported WinModems. Do not depend on the Brand Name.
  Look for an explicit statement of Linux support

 AVOID the following modem chipsets:
   ESS -       no formal support since 2.2.2 kernels
   Motorola -  no formal support since 2.4.5 kernels
   3Com/US Robotics winmodems - never supported under Linux

 SmartLink - newer chipsets are supported:   http://www.smlink.com
   ftp://ftp.smlink.com/linux/unsupported/
   Moreover, the slmodem-2.9.n  drivers will support Most other modems
   that serve under AC'97/MC97 controllers, which send much of the work load
   to companion digital audio cards.

 Conexant -  all modems supported with drivers at:  http://www.linuxant.com
   Testcode for slow 14,400 mH support is free, BUT
   there is a one time charge for the full speed support.

 Intel Inc. -  http://developer.intel.com/design/modems/support/drivers.htm
   For early releases check at: http://linmodems.technion.ac.il/resources.html
    The HaM modem is supported, but code is no longer updated
     and will likely fail under emerging 2.6 kernels.
    The 536ep modem is actively supported.
    The 537 AC'97 Link modem subSystem will be supported by Intel soon,
      but the SmartLink slmodem-2.9.n drivers are effective for now.
  Lucent /AgereSystems
   The Venus chipset modem uses the serial.o driver and is thus supported.
   Modems with digital signal processing (DSP) chipsets are supported:  http:/ltmodem.heby.de
   AC'97/MC97 soft modem support is enroute to release,
     but SmartLink slmodem-2.9.n drivers are effective for now.
   Coding of support for has Not yet begun PCI soft modems with PCI_IDs 11c1:048? 
    and probably will first be available within 2004.
 PCTel modem business has been sold to Conexant
  Driver compiler resources are at: http://pctelcompdb.sourceforge.net/
  However, the pre-compiled binary component is yet to be assembled
   with the gcc 3.nn used in newer Linux releases,
   so forced (-f) insertions may be necessary:
     insmod -f pctel
   Some/all? of the HSP soft modems are supported by the SmartLink slmdm-2.7.10 or slmodem-2.9.n drivers.
 Broadcom modems in Dell laptops and PCs - can be made to function under 2.4 kernels, but code hasn't been updated recently.
 --------- end chipset section ----------------------

  SUPPORT under the emerging 2.6.nn kernels.

 The more expensive Controller chipset modems are functioning.
 SmartLink slmodem-2.9.n drivers are functioning.
 The Lucent/Agere digital signal processing (DSP) chipsets do have 
  an informal hack extending service into 2.6.0-test kernels.
 Intel, Agere Systems and Linuxant (for Conexant chipsets) are firmly
   expected to continue support into 2.6.nn.

 ------------------------------------
  Preparing winmodem drivers will generally require compiling.
  If you are not familar with this process DEFINITELY read carefully
  the section below "COMPILING DRIVERS, for Linux Newbies"

 Silicon chipset (SIL) analysis information
-------------------------------------------
Skip this section if your modem's chipset was adequately identified in $RECORD
During bootup, kernel diagnostics on the System are stored for later display by:
   dmesg
This information may include a SIL_id of modems under AC'97/MC97 Controllers,
depending upon the type of briding of the modem card to the motherboard.
The scanModem script processes dmesg output to capture AC'97 modem information, 
parses it into a SIL_id if possible, and then displays of modem chipset information.
Guidance to sources of modem supporting software may thus be obtained.

The transfer of the AC97 information to the dmesg buffer requires that modules supporting
both the digital audio card and the ac97_codec be loaded during bootup:
   modprobe ac97_codec     
   modprobe audio_drivers  (such as i810_audio)
This can be checked after bootup with:
   lsmod

This script can also be used by entering a test block with nomenclature: 
        $0 SILtest
with SILtest a text file in This Folder
containing a section of a dmesg output or /var/log/messages like:

  i810: Intel ICH 82801AA found at IO 0xdc00 and 0xd800, IRQ 11
  i810_audio: Audio Controller supports 2 channels.
  ac97_codec: AC97 Audio codec, id: 0x4144:0x5340 (Analog Devices AD1881)
  i810_audio: AC'97 codec 0 Unable to map surround DAC's (or DAC's not present), total channels = 2
  ac97_codec: AC97 Modem codec, id: 0x5349:0x4c22 (Silicon Laboratory Si3036)

which does include a line beginning with:   ac97_codec: AC97 Modem codec, id:

---------- End SIL_id section ---------------

END
fi # FAST

# Defining other needed variables
SYS=`uname -r`
# SYS=2.4.20-8
MAJOR=`echo $SYS | cut -d. -f1-2`
KVER=`echo  $SYS | cut -d- -f1`
KEXT=`echo  $SYS | cut -d- -f2-`
# needed for rpm package name parsing
PVER="$KVER"_"$KEXT"
# needed for deb package name parsing
FILTER="$SYS"_
CPU=`uname -m`
# CPU=i686
# Define version, currently 8.26a9, within ltmodem CVS maintained by Mark Spieth
LT_VERSION=8.26a9

GCC=`gcc -dumpversion`
GCCmajor=`echo $GCC  | cut -d. -f1`

if test -z "$DISTR" ; then
# Acquire distribution data
  DISTRO_FILES="redhat-release SuSE-release mandrake-release conectiva-release  \
   bluepoint-release  slackware-version  gentoo-release debian_version"
   # redhat MUST proceed mandrake in this listing as Mandrake has an /etc/redhat-release
for i in $DISTRO_FILES
do
  if [ -a /etc/$i ]; then
    DISTRO=$i
    # generating short name
    DISTR=`ls /etc/$i | cut -d/ -f3 | cut -d"-" -f1`
    if [ "$DISTR" = "debian_version" ] ; then
       DISTR=debian
    fi
    DVERSION=`cat /etc/$i`  
  fi
done
if [ -z $DISTRO ] ; then
  DISTR="Not_identified"
fi
fi # DISTR
# DISTR=redhat

if [ "$BN" = "scanModem" ] ; then
  cat<<END>>$RECORD

 The most recent update of scanModem accessed at http://linmodems.technion.ac.il/packages/scanModem.gz
 should ALWAYS be used before requesting help from discuss@linmodem.org, 
 URLs to cogent advice are regularly entered and updated, and your problem may be solved therein.
 If further help is needed, send a description of your problem to:  discuss@linmodems.org
 with this ModemData.txt Attached, using the following in the email Subject Line:
      $BN, $DISTR kernel $SYS
 Always send this ENTIRE $RECORD, as it includes some subtle diagnostics.

 --------------  System information ------------------------
 $DISTR $DVERSION
 on system: `uname -a`" 
 GCC=$GCC
 UPDATE=$UPDATE

END
fi

# Begin soft modem SIL detection
echo audio > $TMPM
echo ac97 >> $TMPM
# for grep filter
dmesg | grep -f $TMPM > $TMPM.3

# first check for audio_codec, needed later
if grep "ac97_codec" $TMPM.3 > /dev/null ; then
  ac97_codec=1
fi

if [ "$1" = "SILtest" ] ; then
  cp SILtest  $TMPM.3
fi
codec_id=`cat $TMPM.3 | sed -n -e '/^ac97_codec: AC97 Modem codec, id: /s/^ac97_codec: AC97 Modem codec, id: \(.*\)(.*)$/\1/p'`
# codec_id=0x5349:0x4c22  # for testing

if test -n "$codec_id" ; then
for codec_id in $codec_id ; do
  echo $codec_id | grep -e '^SIL[0-9].*$' > /dev/null
  if [ $? -ne 0 ] ; then
    # < linux-2.4.20   
    codec_cid=`echo $codec_id | sed -n -e '/0x5349:0x4c/s/^0x5349:0x4c\(2[1-7]\)$/\1/p'`
    # echo codec_cid=$codec_cid
    if [ -n "$codec_cid" ] ; then
      codec_id=`printf "SIL%d" 0x$codec_cid`
      SIL_id=$codec_id
      # echo SIL_id=$SIL_id
    else
      SIL_id=$codec_id not processed      
    fi
  else
    SIL_id=$codec_id
  fi

  if test -f $TMPM.3 ; then
    cat<<END  >>$RECORD

--- processed from dmesg -----
`cat  $TMPM.3`
------------------------------
 SIL_id=$SIL_id 

END
  fi # TMPM.3
done  # end of for 
cat<<END>>$RECORD

 Soft modems which are subSystems under Controllers
 with primary PCI_ID captured below have SIL_id
 providing guidance to supporting software.
  cid  SIL_id  Manufacturer/Product 
  ===================================
  26   SIL38    Motorola - try SmartLink.  Please report if successful!
  22   SIL34    SmartLink   
  21   SIL33    PCTel    http://pctelcompdb.sourceforge.net/ or  SmartLink drivers
  27   SIL39    Agere Systems subsidiary of Lucent Technologies
                Formal support expected in 2003, but some Linux service has been
                  reported by Smartlink drivers. 
                
  ??   CXT29 (other CTX?? too) Conexant  http://www.linuxant.com
  ??   SIL??    Intel
                Others??
 Access SmartLink drivers at  ftp://ftp.smlink.com/linux/unsupported/
 

END
fi # codec_id
if test -z "$SIL_id" ; then
  echo " An AC'97 modem codec was not detected">>$RECORD  
  echo >>$RECORD   
else
  AMR=yes
fi # SIL_id

LSPCI_PATH="/bin /usr/bin /sbin"
for i in $LSPCI_PATH
do
  if test -x $i/lspci
  then
    LSPCI=$i/lspci
  fi
done
if test -z $LSPCI
then
  echo "+----------------------------------------------+"
  echo "|    WARNING: lspci not found  - exiting       |"
  echo "|    Please install the package:  pciutils     |"
  echo "+----------------------------------------------+"
  echo
  exit 1
  echo 
else
  if ! $LSPCI &>/dev/null
  then
    echo "WARNING: $LSPCI returned error - not checking for modem"
    echo
    echo Exiting
    echo
    exit 1
  fi
fi
echo Path to lspci is:  $LSPCI >>$RECORD
# ending lspci test section

# Now displaying PCI  devices.
echo --------- lspci scan ---------------- >>$RECORD
echo PCI_bus>>$RECORD
$LSPCI >>$RECORD
echo ------------------------------------- >>$RECORD

# now acquiring PCI bus slots.
echo Modem > $TMPM
echo modem >> $TMPM
echo "erial controller" >> $TMPM
# filering for modem
PCIBUS=`$LSPCI | grep -f $TMPM | cut -d' ' -f1`
BUS2=`$LSPCI -n | grep "Class 07" | cut -d' ' -f1`
# BUS2=00:09.0
# add CLass 07 devices if not already recognized
echo $PCIBUS > $TMPM.1
if ! [ "$BUS2" = "" ]  ; then
for i in $BUS2
do
   if ! $LSPCI | grep $i | grep "FIR Port" >/dev/null ; then
     # exclude Infrared controllers
     if ! grep $i $TMPM.1 >/dev/null  ; then
       # exclude already captured PCIBUS
       PCIBUS="$PCIBUS $i"
     fi
   fi
done
fi
if test -z "$PCIBUS" ; then
  # if modem candidates are not recognized
  cat<<END>>$RECORD

  A modem was not detected among the above devices in PCI bridges
  This indicates that the modem, if present has a non-standard or ISA bridge.
  Please follow the directions in $RECORD.2 for identifying the modem properties
  when booting under Microsoft Windows. Also access any documentation sources
  on yourchipset.  Guidance can only be provided AFTER
  the chipset and/or its drivers have been identified.

END
  if  $LSPCI | grep "udio controller" | grep M5451 >/dev/null ; then
     echo " Though not displayed, an embedded soft modem may reside in this Audio card:"
     AUDIO=`lspci | grep "udio controller" | cut -d' ' -f2-`
     echo "    $AUDIO"
     echo "  which sadly is not supported under Linux."
  fi
else
#  detected modem devices
echo >>$RECORD
echo "Modem candidates are at PCI_buses:  $PCIBUS">>$RECORD
for i in $PCIBUS
do
  echo " Providing detail for device at PCI_bus:" >>$RECORD
  echo  $i >>$RECORD
  $LSPCI -nv | grep -A1 $i >>$RECORD
  $LSPCI -v   | grep -A5 $i >>$RECORD
  # It would be more elegant in the above queries to select  -s PCIslot.    But
  #   $LSPCI -s $i -v
  #   fails when the PCIBUS has an "f" as on some Acer motherboards with a PCI slot   00:1f.6
  PCIDEV=`lspci -n | grep $i | cut -d' ' -f4`
  echo "    Primary PCI_id:   $PCIDEV" >>$RECORD
  Vendor=`echo $PCIDEV | cut -d: -f1`
  echo "     with VendorID:   $Vendor">>$RECORD
  Device=`echo $PCIDEV | cut -d: -f2`
  echo "      and DeviceID:        $Device">>$RECORD
  SUBSYS=`$LSPCI -nv | grep -A1 $i | grep Subsystem: | cut -d' ' -f2`
  if test -n "$SUBSYS" ; then
      echo  "  SubSystem PCI_id:   $SUBSYS" >>$RECORD
      SUBven=`echo $SUBSYS | cut -d: -f1`
      echo "  with subVendorID:   $SUBven" >>$RECORD
      SUBdev=`echo $SUBSYS | cut -d: -f2`
      echo "   and subDeviceID:        $SUBdev" >>$RECORD
  fi

  IRQ=`$LSPCI -v  | grep -A3 $i | grep IRQ | grep "IRQ 0"`
  if test -n "$IRQ" ; then
      cat<<END>>$RECORD

 The interrupt assignment:	 IRQ 0
 predicts that modem function will fail.
 Possible corrections are:
   1) to access the  the boot up BIOS change to a non-PNP mode.
   Instructions for accessing BIOS are at:
      http://linmodems.technion.ac.il/resources.html within:  Additional Resourcces.
   2) Within some BIOS setups, IRQ assignments can be changed.
   3) On non-laptop systems moving the modem card to another slot has helped.
   4) Sometimes upgrading the kernel restores a non 0 IRQ .

END
  fi

  # for AMR modem comments later
  cat<<END > $TMPM.1

 ==================== AC'97/MC97 summary ==========================
 Any of the Controllers in the left most column could support
 a variety of subSystem soft modems.
 Hence the current ambiguity in possible support by drivers under Linux

VendorID:DeviceID == PCI_ID     Controller type
   bus PCI_ID  subSystemID      AC97  MC97             try drivers from
   ----------  -----------      ----------------       ----------------
   Intel:
    8086:2416                         82801AA (ICH)     +  p c
    8086:2426                         82801AB (ICH0)    +
    8086:2446                         82801BA (ICH2)    +  p c
    8086:2486                         ICH3              +  p c
    8086:24c6                   INTEL ICH4              +
    8086:1040                   S1724
    8086:7196                         ????              +

    1543:3052  1543:3000        SI3052
    1039:7013                   SIS 630                 +  p
    1039:7018                   SIS 960                 +
    1055:9178                   Standard Microsystems   +
    10de:01c1                   Nvidia Corp             +
    1106:3068                           VIA             +  p c
    1131:3400                   Philips Semiconductors  +
    1022:7446                   AMD
    10a5:3052                   Racal Interlan          +
    10b9:5450                   ALI 5450
    10b9:5451                   ALI 5451
    10b9:5453                   ALI                        p c
    10b9:5457                   ALI 5457                +  p c
    10b9:545a                   ALI                     +
    e159:0001                   TigerJet 320
    e159:0001  0359:0003        TJ320 v3.1
    e159:0001  8086:0003        TJ320 v2.0

  PCI cards with SmartLink support at least from slmodem-2.9.n
    10b9:5459                   ALI 5459 SmartPCI561    ++
    10ec:8197 - SmartLAN56 (RealTek ether/modem combo)  ++
    1131:3400 - SmartPCI56 (Philips UCB1500)            ++
    163c:5459, 10a5:5459 - kinds of SmartPCI561         ++
  --------------------------------------------------------

  p   http://pctelcompdb.sourceforge.net/
  c   Conexant - http://www.linuxant.com
  +   SmartLink HAMR5600 compatible AMR/CNR/MDC soft modems
  ++  SmartLink PCI bus modems
       For drivers:    ftp://ftp.smlink.com/linux/unsupported/  ,
       Try the most recent slmodem-2.9.n
 ======================================================================

END
  cat $TMPM.1 >> $RECORD.2
###########

  echo > $TMPM
#  Vendor=11c1
#  Device=048c


    if $LSPCI -v | grep CM8738 >/dev/null ; then
      CM8738=1
    fi
    if $LSPCI -v | grep "Intel 537" >/dev/null ; then
      # because Intel 537 may have PCI_IDs assigned by modem assemblers, not Intel
      INTEL537=1
    fi
    if $LSPCI -v | grep "Intel 536"  >/dev/null ; then
      # because Intel 536 may have PCI_IDs assigned by modem assemblers, not Intel
      INTEL536ep=1
    fi
    if $LSPCI -v | grep "Subsystem: Conexant" >/dev/null ; then
      # because the PCI_IDs may be assigned by modem assemblers, not Conexant
      CNX=1
    elif [ "$PCIDEV" = "1024:1024" ] || [ "$PCIDEV" = "148d:1003" ] || [ "$PCIDEV" = "158b:0015" ] || [ "$PCIDEV" = "141a:1035" ] ; then
      CNX=1
    else
      echo "not a Conexant modem" >/dev/null
    fi
    if $LSPCI -v | grep "Smart Link HAMR5600"  >/dev/null ; then
      # because the PCI_IDs may be assigned by modem assemblers, not SmartLink
      SMART=1
    fi

    ## Lucent/Agere/Xircom DSP modem section
    if [ "$Vendor"  = "11c1" ] || [ "$Vendor" = "115d" ] ; then
    DEVICES="0x11c1:0x0440-0x045c"
    DEVICES=$DEVICES" 0x115d:0x0000-0x000f"
    DEVICES=$DEVICES" 0x115d:0x0440-0x045c"
    DEVICES=$DEVICES" 0x115d:0x0010-0x03ff"
    DEVVEN=$(( 0x`echo $PCIDEV | cut -d':' -f1` + 0 ))
    DEVNUM=$(( 0x`echo $PCIDEV | cut -d':' -f2` + 0 ))
    for DEV in $DEVICES
    do
      VENDOR=$(( `echo $DEV | cut -d':' -f1` + 0 ))
      DEVMIN=$(( `echo $DEV | cut -d':' -f2 | cut -d'-' -f1` + 0 ))
      DEVMAX=$(( `echo $DEV | cut -d':' -f2 | cut -d'-' -f2` + 0 ))
      FOUND=
      if test $DEVVEN -eq $VENDOR && test $DEVNUM -ge $DEVMIN && test $DEVNUM -le $DEVMAX
      then
        FOUND="yes"
        PCI_ID="$PCIDEV"
        MODEM_VENDOR=0x`echo $PCIDEV | cut -d':' -f1`
        MODEM_DEVICE=0x`echo $PCIDEV | cut -d':' -f2`
        if [ "$MODEM_VENDOR" = "0x11c1" ] ; then
          VENDED=LUCENT
        else
          VENDED=XIRCOM
        fi
        if test -n "$PCI_ID" ; then
          DSP=1
          cat<<END> $TMPM

 The modem has a supported Lucent/Agere DSP (digital signal processing) chipset
  with primary PCI_ID:  $PCI_ID
 DSP=1
END
          cat $TMPM
          cat $TMPM >>$RECORD
          cat $TMPM >>$RECORD.2
          cat<<EOF>>$RECORD.2

    VENDOR $MODEM_VENDOR         DEVICE $MODEM_DEVICE
   ------------------------------------------
    LUCENT 0x11c1          0x0440-0x045c
    XIRCOM 0x115d          0x0000-0x000F
    XIRCOM 0x115d          0x0440-0x045c
    XIRCOM 0x115d          0x0010-0x03ff
  -------------------------------------------
 Drivers and their compiler kits are available at:
       http://ltmodem.heby.de/

EOF
        else
          cat<<END > $TMPM

 While ISA and PCMCIA card modems would not be detected,
 if the modem is a PCI type it will not be served by these
 drivers for Lucent/Agere digital signal processor modems.

END
          PCI_ID=
        cat $TMPM
        cat $TMPM >>$RECORD
        fi
      fi
    done
    fi # end Lucent DSP section

# for AMR modem section testing
# echo SUBven=$SUBven
#   PCIDEV=8086:24c6
 #   PCIDEV=e159:0001
    if grep  $PCIDEV $TMPM.1 >/dev/null ; then
      AMR=1
      echo " The modem Subsystem operates under an AC'97 or MC97 controller">>$RECORD
      grep $PCIDEV $TMPM.1>>$RECORD
      if grep $PCIDEV $TMPM.1 | grep "+ " >/dev/null ; then
        cat<<END>>$RECORD
 Many soft modems under this controller are supported by the
 SmartLink slmdm-2.7.10 or slmodem-2.9.n drivers,
 even though an AC'97 modem_codec may not be displayed.

END
        if test -n $SMART ; then
          SMART=1
        else
          smart=1
        fi
      else
        echo " SmartLink drivers are not compatible with this $PCIDEV controller.">>$RECORD
      fi
    fi

    if test -n "$AMR" ; then
      cat<<END>>$RECORD.2

 Soft modems under AC'97 or MC97 Controllers
 =============================

 If a modem_codec SIL_id was not output earlier, please reboot Linux to freshen the
 bootup dmesg buffer and then rerun scanModem, to acquire an expected SIL_id.
 However 

 The roughly classified with AC'97 modems may be housed within an 
 AMR connector, the MDC connector, IBM's CDC connector, or a mini PCI slot.
 SmartLink http://www.smlink.com has a readible documentation set on
 soft modem rational and technologies. Their common feature is that they
 utilize the services of a digital audio card through use of an ac97_codec.
 This greatly reduces the cost of the modem hardware and specialization to the
 diverse telephone line standards around the world.
 
 Hoever the primary PCI_ID $PCIDEV identifies Only the Controller of the
 soft modem Subsystem $SUBSYS. This commonly FAILS to designate the chipset!!
 Queries under MS windows may be informative, by the following routes:
   Open a COMM console and send ATI commands to the modem,
     which may provide identifying information: ATI, ATI1, ATI2 etc.       
     For a good report see:  http://phep2.technion.ac.il/linmodems/archive/msg05099.html
   Get whatever detail information is available through:
     Start > Settings > Control Panel > Modem  
        There may be a TestModem option available.
     Start > Settings > Control Panel > System > Devices > Modem
   Try to identify the modem setup file, with name perhaps MODEM.INF
     Information therein including driver names may help to identify the chipset. 
 
END
    fi # finish AMR modem section
#    AMR=1
    # Following are Alternative information blocks for various chipsets
    PRIMARY=
    if test -n "$AMR" ; then
      cat<<END>>$RECORD     

 First accessing chipset provider and modem assembler information
 for the modem SubSystem under the AC'97 or MC97 Controller.

END
      # doing the modem subSystem first for AMR modems.
      VEND="$SUBven $Vendor"
    else
      VEND="$Vendor $SUBven"
    fi
    if [ "$Vendor" = "$SUBven" ] ; then
      # no use repeating if identical
      VEND=$Vendor
    fi
# for testing
#   Device=1746
#   VEND=1043

    for v in $VEND
    do     
    if test -z "$PRIMARY" ; then
      PRIMARY=1
    fi
#   if test -n "$PRIMARY" ; then
#   to limit outputs below from SUBven
    echo " === Checking $v through chipset providers and modem assemblers ====" >>$RECORD 

    if [ "$v" = "17c0" ] ; then 
    cat<<END>>$RECORD 

 Vendor $v is the Wistron Corp, Inc.,  http://www.wistron.com.tw/
 a manufacturer of PC OEM subsystems including soft modems under AC'97 Controllers
 used in some Acer laptops. 
 More chupset information may be gained by testing the modem under MS Windows:
  Start - Settings - Control Panel - Modem 

END
      if [ "$Device" = "1069" ] ; then
        echo " Device=$Device has an Agere Systems soft modem for which support is soon expected.">>$RECORD
      fi  
    fi

    if [ "$v" = "13f6" ] ; then 
    cat<<END>>$RECORD 

 Vendor $v is C-Media Electronics, which produced modems with device IDs:
        0100    CMI8338/PCI C3DX PCI Audio Chip
        0101    CMI8338-031 PCI Audio Device
        0111    CMI8738/PCI C3DX PCI Audio Chip
        0112    CMI-8378B/PCI-6CH PCI Audio Chip
        0211    HSP56 Audiomodem Riser

END
    fi
    if [ "$v" = "10cf" ] ; then 
      cat<<END>>$RECORD 

 Vendor $v is  Citicorp TTI, Inc.
 Its AMR modem Subsystem 10cf:1130 is an Agere chipset soft modem.
 The Agere AMR drivers have not been released as of this $UPDATE, but in checkout testing.
 The Smartlink slmdm-2.7.10 drivers did not support support 
 the Subsystem 10cf:1130 AMR modem, through a dialout.  For details see:
   http://linmodems.technion.ac.il/archive-third/msg00831.html
 But the slmodem-2.9.n drivers should be tested.

END
    fi
    if [ "$v" = "144f" ] ; then 
      cat<<END>>$RECORD 

 Vendor $v is  Askey Computer Corp. http://www.askey.com/ 

END
    fi
    if [ "$v" = "1043" ] ; then 
      cat<<END>>$RECORD 

 Vendor $v is Asustek Computer, Inc., producing a modem SubSystem
 serving under AC'97 Controllers.

END
      if [ "$Device" = "1746" ] ; then
        cat<<END>>$RECORD
 For device=$Device support is in development by AgereSystems, with release possible within 2003.
   ATI3 - Agere SoftModem Version 2.1.22
   ATI5 - 2.1.22, AMR Intel MB, AC97 ID:SIL REV:0x27

END
      fi
    fi
    if [ "$v" = "15f1" ] ; then
    cat<<END>>$RECORD 

 Vendors $v is TOPIC SEMICONDUCTOR Corp.
 151f:0000 is a controller chipset modem using the Open Source serial.o driver.
 See http://www.math.sunysb.edu/~comech/tools/PCImodems.html
 
END
    fi
    if [ "$v" = "14e4" ] || [ "$v" = "feda" ]  ; then
      cat<<END>>$RECORD 

 Vendors 14e4 is BroadCom, producing modems for Dell laptops, desktops and Others?
 14e4:4212    BCM V.90 56k modem
 http://support.ap.dell.com/ap/en/filelib/download/index.asp?fileid=R47114
   However the code has not been updated for some time.
   A fix by Giacomo Comes must be used for current 2.4 kernels:
   http://linmodems.technion.ac.il/archive-third/msg01652.html
  
END
    fi
    if [ "$v" = "104d" ]; then
      cat<<END>>$RECORD 

 Vendor $v is Sony,  http://www.sony.com , but without Linux info.
 A Sony PCV-RX407 has a SIL39 modem_codec id, implying an Agere Soft modem:
   PCI_ID  1039:7013  ALI 630 Controller,
   SubSys  104d:8129  the soft modem.
 http://phep2.technion.ac.il/linmodems/archive-third/msg00120.html

END 
    fi
    if [ "$v" = "104d" ] && test -n "$AMR" && test -n "$smart" ; then
        cat<<END>>$RECORD 

 Pending release of Agere support, try the slmodem-2.9.n drivers
 ftp://ftp.smlink.com/linux/unsupported/  with a report at:

END

    fi
    if [ "$v" = "oe11" ] ; then
      cat<<END>>$RECORD

 Vendor $v is Compaq, now merged with Hewlett Packard

END
    fi
    if [ "$v" = "1039" ] ; then
      echo " Vendor $v is SiS, Silicon Integrated System.">>$RECORD
      if test -n "$AMR" -a -n "$smart" ; then
        cat<<END>>$RECORD 

 Some of SIS modems under AC'97/MC97 Controllers are served by the SmartLink slmodem-2.9.n drivers.
  
END
      fi
    fi
    if [ "$v" = "16be" ] ; then
      cat<<END>>$RECORD 

 Vendor $v is Creatrix ,
 16be:1040 is an Intel 536ep chipset Data Fax Modem.
 These messages may be seen upon driver loading: 
        depmod****Unable to resolve symbol in 536ep.o
        depmod****Unable to resolve symbol in 536epcore.o
 but just reflect a harmless inter-dependency between the modules.

END
    INTEL=1
    fi
    if [ "$v" = "1179" ] ; then
      echo >>$RECORD
      echo " Vendor $v is Toshiba, using some motherboards with soft modems.">>$RECORD
      if test -n "$AMR" -a -n "$smart" ; then
        cat<<END>>$RECORD 

 Below are outputs from ATI commands under MS Windows for Subsystem: 1179:0001
    ATI3 TOSHIBA V.90 Data+Fax Software Modem Version 3.1.89
    ATI5 3.1.89, AMR Intel MB, AC97 ID:SIL REV:0x27, 19
 Support may be achieved with the SmartLink slmodem-2.9.n drivers.
 See success report at http://phep2.technion.ac.il/linmodems/archive-third/msg00120.html
   
END   
      else
        cat<<END>>$RECORD

 The modem subSystem 1179:0001 has an AgereSystems soft modem for which support is being developed.
 However, there is not a projected release date.

END
      fi
    fi
    if [ "$v" = "1014" ] ; then
      cat<<END>>$RECORD 

 Vendor=1014 is IBM.

END
      if test -n "$AMR" ; then
        cat<<END>>$RECORD 
 A Subsystem PCI_ID 1014:0227 soft modem (possible from Agere, Inc.) is in some/all?  
 ThinkPad laptops: A30, A30p 31, A31p(*1), T23,T30 (*1)(*3), X22, X23, X24,X30(*1)(*2)
 While awaiting formal Agere support try the slmodem-2.9.n driver.  A success report is:
   http://phep2.technion.ac.il/linmodems/archive-third/msg00120.html

END
      fi
    fi #IBM 
    if [ "$v" = "125d" ] ; then
      cat<<END>>$RECORD
 
 Vendor=$VEND corresponds to ESS Technologies, making devices:
    :0000    ESS336H PCI Fax Modem (early model)
    :1968    ES1968 Maestro-2 PCI audio accelerator
    :1969    ES1938/41/46 Solo-1 PCI AudioDrive family
    :199B    ES1938 Maestro-3.COMM PCI Voice+Fax Modem
    :2808    ES336H PCI Fax Modem (later model)
    :2898    ES2898S TelDrive ES56T-PI family V.90 PCI modem
 There has been no formal support for Linux since kernels 2.2.2
 But see some informal hacks at: http://andrew.cait.org/ess/
 http://sidlo.penguin.cz/ES2838/index_en.html 
 http://phep2.technion.ac.il/linmodems/archive/msg04424.html
 These are of fading utility as the Linux kernel and hardware evolves.

END
    fi
    if [ "$v" = "1025" ] ; then
      cat<<END>>$RECORD

 Vendor=$v is Acer, http://global.acer.com/ PC and latop manufacturer with devices including:
  1025:5453   M5453 AC-Link Controller Modem Device
  1025:0038   an AC'97 link modem.

END
    fi


    if [ "$v" = "1131" ] ; then
      cat<<END>>$RECORD

 Vendor=$v is Philips Semiconductors, producing Controllers for soft modems

END
    fi
    if [ "$v" = "14fe" ] ; then
    cat<<END>>$RECORD 

 Vendor=$v is ARCHTEK TELECOM Corp, http://www.archtek.com/
 incorporating chipsets from http://www.smlink.com
 in modem assemblies.  Uses other chipsets too?

END
    fi
    if [ "$v" = "1057" ] || [ "$v" = "11d4" ] ; then
      cat<<END>>$RECORD

 Vendor=$v corresponds to Motorola with service through Analog Devices Inc.
 There was support for Linux through the 2.4.5 kernels, but not subsequently.
  This old code base is progressively failing under current 2.4.20 + kernels.
  There are well intended hacks at   http://www.sm56.tk/ . But they will probably fail
 with emergence of 2.6.nn kernels. Better plan on getting a better supported modem!!
 See the modem support summary at the start of $RECORD.2

 For history see:
    http://phep2.technion.ac.il/linmodems/archive/msg05016.html
    http://phep2.technion.ac.il/linmodems/archive/msg05030.html
    http://www.angelfire.com/linux/sm56/
    http://linmodems.technion.ac.il/Motorola.html  
    http://www.sm56linux.hpg.com.br
    http://phep2.technion.ac.il/linmodems/archive/msg02408.html

END
    fi 
    if [ "$v" = "10b7" ] || [ "$v" = "12b9" ] ; then
    cat<<END>>$RECORD

   10b7 is 3COM       
       :1006    0038TA <- AC101 - TF Mini-PCI 56K V.90
       :1007    3C556 V.90 Mini-PCI 
   12b9 is US Robotics. acquired by 3COM
       :0062    erk41926a-0.6 usr 56k internal modem
       ;1006    3cp803598  Voice          WinModem  no Linux support
       :1007    ERL3263A-0 DF GWPCI PC99  WinModem  no Linux support
       :1008    3cp803598  is Supported by the standard:  serial.o  
   Though the following carry USR labels, they may be supported by Conexant drivers:
          http://www.linuxant.com
   14f1:2F12 (3COM/USR model 3094-3095)
   14f1:2F13 (USR OEM)
   14f1:2f14 3COM/USR 

END
    fi 
    if [ "$v" = "10b9" ] ; then
      cat<<END>>$RECORD 

 Vendors $v is Acer Labs, producing ASUS  highly integrated motherboards and Ali components.
 The tight integration unfortunately ofter blocks identification of the modem chipset.
 Desired information may be gained by using a COMM console under MS Windows,
   and using ATI commands to elicit chipset and driver information.
 Among the AMR modems, there are the following reports/information on Linux support:
  Devices 5450 and 5451 have Agere Systems soft modem chipsets which are not yet supported.
  Devices 5457 and 5459 have Agere Systems soft modem chipsets. 
    supported by SmartLink slmodem-2.9.n driver. 

END
      if [ "$Device" = "5457" ] || [ "$Device" = "5459" ]  ; then
        smart=1
      fi
    fi 
    # PCTEL section
    if [ "$v" = "134d" ] || [ "$v" = "134c" ] || [ -n "$CM8738" ] ; then
      smart=1
      if test -n  "$CM8738" ; then 
        echo  " CM8738 modem chipsets may be supported by PCTel drivers.">>$RECORD
      fi
      cat<<END>>$RECORD

 Vendor=134d is PCTEL and Vendor=134c is Chori Joho System Co. Ltd, 
 which market idenitcal devices including with deviceIDs:
        7890    PCT789T-C1 HSP MicroModem 56
        7891    PCT 789T HSP MicroModem 56
        7892    PCT 789T-A HSP MicroModem 56
        7893    S911 K017 HSP MicroModem 56
        7894    FT13 HSP MicroModem 56
        7895    PCT789T-C1 HSP MicroModem 56
        7896    pct789t-c1 HSP MicroModem 56
        7897    97860963 HSP MicroModem 56
        9714    PCT 288-1A PCTEL
        D800    pct388p-a pctel 56k modem
 check for support at:  http://pctelcompdb.sourceforge.net/ and read the
 PCTel minHOWTO:  http://www.peacefulaction.org/sayamindu/docs.php
 IMPORTANT - Fedora users should use the pctel-0.9.6.1 at:
         http://hepunx.rl.ac.uk/~wmurray/pctel/pctel.html

 A device node is made during driver installation:
     mknod /dev/ttyS15 c 62 79

 After properly configuring your kernel sources (see $RECORD.2),
 Giacomo Comes supplies a neat compiling installation script at:
   http://linmodems.technion.ac.il/archive-third/msg01539.html
   It compenstes for the nuisnace that the current 
   PCTEL pre-compiled binary component was compiled with gcc 2.95
   But most recent Linux releases (RedHat 8.0 , Mandrake 9.0 , etc.)
   have been compiled with gcc 3.xx .
 A pctel.o insertion failure consequently results, with a warning message.
 However it can be bypassed by forcing (-f): 
   insmod -f pctel
 followed by
   insmod ptserial 
 Automation of modules insertion and ppp related modules can be achieved 
 with the following block in /etc/modules.conf,
   or for Debian style systems in a new file /etc/modutils/pctel
#################################################
# for pctel modem
alias char-major-62 pctel
install pctel /sbin/insmod "-f" "pctel"
post-install pctel /sbin/insmod ptserial
# country code for pctel modem
options ptserial country_code=1 #USA
######## pctel end ####

  After the edit, inform the System with:
   # depmod -a
  or for Debian style systems with:
   # update-modules

 For some Systems, PCTel function requires disablement of apmd power monitoring function. 

 IMPORTANT: there are some incorrect PCI_ids in hardware. 
 Use the SIL_id information if any, it is NOT if agreement with the PCI_id information.
 See: http://phep2.technion.ac.il/linmodems/archive-third/msg00337.html
 
 System problems of various severity have been reported after modem usage.
 These may be alleviated by the following steps after a modem usage session.
 Log into a console as:
 # su - root
 # lsmod
 to display loaded modules. 
 # modprobe -r ptserial
 # lsmod
 # modprobe -r Names_of_ppp_related_drivers
 # lsmod

 If such unloading does not solve problems, there is an alternative.
 Some of the Pctel HSP modems are well supported by the SmartLink slmodem-2.9.n drivers.
 But before testing them, remove from /etc/modules.conf:
# for pctel modem
alias char-major-62 pctel
install pctel /sbin/insmod "-f" "pctel"
post-install pctel /sbin/insmod ptserial
# country code for pctel modem
options ptserial country_code=1 #USA
######## pctel end ####

END
      if [ "$Device" = "7897" ] ; then 
        cat<<END>>$RECORD
 For a case of a  VIA686 motherboard PCTEL drivers compiled with
     hal=via686 
  did NOT provide effective drivers while the drivers were effective when compiled with
     hal=pct789 .
END
      fi
    fi # End PCTEL section

    if [ "$v" = "127a" ] ||  [ "$v" = "14f1" ] ||  [ "$v" = "148d" ] || [ "$CNX" = "1" ] ; then
      cat<<END>>$RECORD

 Vendors 127a and 14f1 are Conexant, successor to Vendor=148d Rockwell technology.
 Additional modems with the following PCI_IDs have Conexant HCF (Controller free) chipsets.
  1024:1024 (Zenith Data Systems) 
  148D:1003 (DIGICOM Systems) 
  158B:0015 (Allied Data Technologies Tornado  VFM56x-PRC) 
  141A:1035 (Apache Micro) 
 Subsystem HSF Conexant soft modems serve under AC'97 or MC97 controllers.
 Download driver kits:   http://www.linuxant.com/drivers
  As of September 2004, Linuxant is providing for free test drivers for low speed CONNECTs.
  There is a one time subscription fee for high speed support.
 Should a HCF driver installation fail to serve, then uninstall and instead try
      the HSF driver resource. Some PCI_ID mis-labeling has been reported with
      the HCF 127a:1025 most suspect.
 A post install suggestion for adjusting PCI latency is:
         http://phep2.technion.ac.il/linmodems/archive/msg05210.html

END
    fi

    if [ "$v" = "8086" ] || [ "$v" = "1813" ] || test -n "$INTEL537" || test -n "$INTEL536ep" ; then
      INTEL=1
      cat<<END>>$RECORD

 Vendor=8086 is Intel, Inc. producing HaM and 536ep host controller free (HCF) modems, the 537 soft modem
 and AC'97 and MC97 controllers managing a varierty of non-Intel soft modem subSystems.
 These subSystems will in have PCI_IDs assigned by the modem assembler, not Intel.
 Download available drivers from:  http://developer.intel.com/design/modems/support/drivers.htm
 Also check at: http://linmodems.technion.ac.il/resources.html
 for early releases and perhaps Already compiled drivers for some Linux distributions

END
    fi
#  To help identify the modems with PCI_ID 8086:1040 ,
#   see 
    if [ "$PCIDEV" = "8086:1040" ] || test -n "$INTEL536ep" ; then
      cat<<END>>$RECORD

 Some and perhaps all modems with:
   PCI_ID    8086:1040
   subSystem 8086:1000
 have the supported Intel 536ep chipset.
 Their drivers have a dependency on one other.
 with result that these messages may be seen upon driver loading: 
        depmod****Unable to resolve symbol in 536ep.o
        depmod****Unable to resolve symbol in 536epcore.o
 but function is NOT affected.
 Bur when the message is any longer, the drivers probably have not been properly compiled.
   In which case carefully read COMPILING DRIVERS with ModemData.txt.2

 A problem maintaining CONNECT under the version 4.62 drivers was resolved
 by dropping back to the 4.60 version. See:
    http://linmodems.technion.ac.il/archive-third/msg02127.html

END
    fi
    if test -n "$INTEL537" ; then
      smart=1
      cat<<END>>$RECORD

 The Intel 537 chipsets are sold to a variety of modem assemblers.
 Linux support from Intel is expected by the Fall of 2003.

END
    fi
    if [ "$v" = "1813" ] ; then
      cat<<END>>$RECORD

 Vendor=1813 Ambient Tech was acquired by Intel with its HaM (Host assisted Modem) chipsets.
 Intel-v92ham-453.tgz is the most recent update.
 It is also the last code release for this older chipset (relates Intel maintainer Dorian Araneda).
 Thus HaM code failures can be expected under the emerging 2.6.nn kernels
 But under the 2.4.nn kernels, all HaM chipsets are supported,
 with EXCEPTION of the odd PCI_ID 1813:4100 modems. For the explanation see message: 
     http://linmodems.org/cgi-bin/ezmlm-cgi?1:mss:9448:200210:fbhcoigfcimgkjdedjad

END
    fi # End Intel section
    if  [ "$v" = "1013" ] ; then
      cat<<END>>$RECORD

 There is NO SUPPORT the Vendor=1013 chipsets of CML, Cirrus Logic Modems.
 See message: http://linmodems.org/cgi-bin/ezmlm-cgi?1:mss:9448:200210:fbhcoigfcimgkjdedjad 

END
    fi

    if [ "$v" = "11c1" ] ; then
      cat<<END>>$RECORD

 Vendor=$v corresponds to Lucent Technologies or subsidiary Agere Systems, Inc.
 Information is at:  http://www.agere.com/support/client/modem_drivers.html
   but without any relevant to Linux. 
END
      if test -n "$AMR" -a -n "$smart" ; then
        cat<<END>>$RECORD
     
 AC'97/MC97 link modems may evoke a modem_codec with SIL_id = 39.
 While awaiting formal support from Agere Systems, the SmartLink slmodem-2.9.n may serve. 
 A success report is:  http://phep2.technion.ac.il/linmodems/archive-third/msg00120.html

END
      elif [ "$Device" = "0462" ] ; then 
        cat<<END>>$RECORD 

 56K.V90/ADSL Wildfire Modem with PCI_ID 11c1:0462 
 currently lacks support under Linux.

END
      elif [ "$Device" = "048c" ] || [ "$Device" = "048e" ] ||[ "$Device" = "048f" ] ; then
         cat<<END>>$RECORD

  Device=$Device has a soft modem chipset within a PCI slot.
  Support is eventually expected for the the following chipsets, but probably not within 2003.
         048C has a "Levana" silicon line
         048E has a  Mercury transformer line interface and  external Rx gain components,
             used in worldwide designs that support complex and real impedance.
         048F , SV92P-T00 is like 048E, but using internal Rx gain.  048F is used in designs
             that support only real line impedance, typically for sale only in USA.
  These soft modems are NOT supported by the resources at http://ltmodem.heby.de ,
  for modems with digital signal processing chipsets.  The drivers lack additional code needed by soft modems
  A dialout terminates with "No Carrier" if usage of the ltmodem drivers is attempted.

END
      elif  [ "$Device" = "0480" ] ; then
        echo " The Venus controller chipset 1673JV7 modems use the serial.o driver." >>$RECORD
      elif test -n "$DSP" ; then
        cat<<EOF>>$RECORD

 Hacked support for 2.6.0-testN kernels is temporarily served from:
   http://linmodems.technion.ac.il/resources.html

EOF
       if [ "$DISTR" = "SuSE"  ] ; then
        cat<<EOF>>$RECORD

  SuSE has a ltmodem package for 8.X with pre-compiled drivers:
       ftp.suse.com/pub/suse/i386/8.2/suse/i586/ltmodem-8.26a-0.i586.rpm

EOF
       fi
# Setting up board.info for grepping MODEL_DATA
        cat<<END > $TMPM.2
 0x0440 -- Mars 2 - data/fax/voice 
 0x0441 -- Mars 2 - data/fax only 
 0x0442 -- Mars 2 - data/fax/tam only 
 0x0448 -- Mars 2 Global Board - data/fax/voice 
 0x0449 -- Mars 2 Global Board - data/fax only 
 0x044A -- Mars 2 Global Board - data/fax/tam only 
 0x0444 -- Apollo 2 data/fax only : Modem/LAN combo board Apollo behind an Intel 82559 
 0x0445 -- Apollo 2 Global Board data/fax only : Modem/LAN combo board Apollo behind an Intel 82559 
 0x0446 -- Apollo 2 data/fax/voice : Modem/LAN combo board Apollo behind an Intel 82559 
 0x0447 -- Apollo 2 Global Board data/fax/voice : Modem/LAN combo board Apollo behind an Intel 82559 
 0x044C -- Mars 3 Perseus data/fax only:North America and Global board 
 0x044E -- Mars 3 Mercury data fax only 
 0x0450 -- Mars 3 Mercury data fax Global board 
 0x0451 -- Mars 3 Mercury data/fax/voice 
 0x0452 -- Mars 3 Mercury data/fax/voice Global board 
 0x0455 -- Mars 3 Perseus data/fax/voice: North America and Global board 
 0x0458 -- Mars 3 Mercury data/fax/tam only. 
 0x0459 -- Mars 3 Mercury data/fax/tam only. Global board. 
 0x045A -- Mars 3 Perseus data/fax/tam only.: North America and Global board 
 0x045B -- Apollo 3 Perseus data/fax only : Modem/LAN combo board Apollo behind an Intel 82559 
 0x045C -- Apollo 3 Mercury data/fax only : Modem/LAN combo board Apollo behind an Intel 82559 
 0x045D -- Mars 3 Mercury data/fax/tam only. Global board for Cardbus modem product. 
 0x044C -- Mars 3.2 Mercury data fax only when no eeprom is present: North America DAA 
##############
END
        if grep $MODEM_DEVICE $TMPM.2 > /dev/null ; then
          grep $MODEM_DEVICE $TMPM.2   >>$RECORD
        fi
   
        if [ "$Device" = "0442" ] ; then  
    echo "The device=$Device  modems have an electro-optical coupling" >>$RECORD
    echo "which in some hardware is Not adequately supported by these drivers." >>$RECORD
    echo >>$RECORD
        fi
     else
        echo  >>$RECORD
      fi
    fi # Lucent

    if [ "$v" = "115d" ] || [ "$PCIDEV" = "11c1:0420" ]  ; then
      cat<<END>>$RECORD

 Vendor=$v corresponds to Xircom, now an Intel subsidiary. 
   http://www.intel.com/support/peripherals/xc/modems/index.htm 
   http://appsr.intel.com/scripts-df/support_intel2.asp
   http://support.intel.com/
      These                 Device ID Range
                            -------------
    XIRCOM 0x115d          0x0000-0x000F
    XIRCOM 0x115d          0x0440-0x045c
    XIRCOM 0x115d          0x0010-0x03ff
   --------------------------------------
 are supported by the resources at http://ltmodem.heby.de/

 Some other Xircom modems and Lucent 11c1:0420 modems
    MAY BE accessed by Insertion Options
 Download from http://ltmodem.heby.de/  the:   ltmodem-"$LT_VERSION".tar.gz
 Open with:    tar zxvf  ltmodem-"$LT_VERSION".tar.gz
 Within the ltmodem/DOCs/  folder read the Insertion-param files
 and for fun, the history:   andreas.txt

 To get a recommendation for an Installer kit, run
    $BN  kit

END
    fi # Xircom
    if test -n "$smart" && ! [ "$v" = "163c" ] ; then
        cat<<END>>$RECORD

 The soft modem $SUBS
 serving under the controller:
   PCI_ID=$PCIDEV, $CNTRL
 may be supported by the SmartLink slmodem-2.9.n drivers.
 See the related support table listing in $RECORD.2

END
    fi
    if [ "$v" = "163c" ] || test -n "$smart" || test -n "$SMART" ; then
      cat<<END>>$RECORD 

 Vendor 163c is SmartLink,  http://www.smlink.com/ with EXCELLENT Linux support!
 Downloads from ftp://ftp.smlink.com/linux/unsupported/  with some backups at:
    http://linmodems.technion.ac.il/packages/smartlink/
 The slmodem-2.9.n drivers  support several non-SmartLink soft modem chipsets
 under AC'97 Controllers.  The slmodem series is compatible with 2.6.nn Linux kernels
 If there should be mis-dialing problems either use slmdm-2.7.10 or upgrade to a 2.6.nn kernel.
 The modem port is /dev/ttySL0
 Please see the support compatibility table within $RECORD.2
 The controllers with an in line  +   are compatible.
 There may be a warning about a not-SmartLink modem as the drivers load.
 But just proceed with modem functionality tests as described at the end of $RECORD.2

END
      SMART=
      smart=
    fi
    done # with Vendor and SUBven
    echo  >>$RECORD
  done
fi  #  TESTS
echo "  ======= PCI_ID checking completed ====== ">>$RECORD

cat<<END>>$RECORD.2

 If the Primary and Subsystem Vendor information was not adeqaute,
 it may be useful to download  http://www.yourvote.com/pci/vendors.txt
 and search it for the Vendor IDs with and without caps, for example:  both  114d  and  114D

END
# Just to be sure the Update is reported:
echo " Update=$UPDATE">>$RECORD 
# DSP=011c:0442 
if test -n "$DSP" || [ "$1" = "kit" ] ; then
  if ! [ "$DISTR" = "Not_identified" ] ; then 
    # No use if the distribution is not known
    if [ "$DISTR" = "slackware" ] ; then
      echo Installers are not available for Slackware Linux  >>$RECORD
    fi
    # echo DISTR=$DISTR
    # pick out the Distro section
    echo >  $TMPM
    if [ "$DISTR" = "conectiva" ] ; then
      if [ "$GCCmajor" != "3" ] ; then
        cat<<EOF > $TMPM

ltmodem-6.00b7.i386.rpm
ltmodem-kv_2.2.19_15cl-6.00b15-1.i386.rpm
ltmodem-kv_2.2.19_25U70_3cl-6.00c2-1.i386.rpm
ltmodem-kv_2.4.12_4U70_2cl-6.00c2-1.i386.rpm
ltmodem-kv_2.4.18_3U8_4cl-8.22a4-1.i386.rpmq
ltmodem-kv_2.4.19_1U80_5cl-8.22a5-1.i386.rpm

ltmodem-kv_2.4.18_586-6.28a8-1.i386.rpm

ltmodem-kv_2.4.19_1U80_2cl-8.26a9-1.i386.rpm
ltmodem-kv_2.4.19_1U80_5cl-8.26a9-1.i386.rpm
ltmodem-kv_2.4.19_1U80_8cl-8.26a9-1.i386.rpm

EOF

      else
        cat<<EOF

  Waiting for GCC=3 deposits  > $TMPM

EOF
      fi
    fi 
    if [ "$DISTR" = "debian" ] ; then
      if ! [ "$GCCmajor" = "3" ] ; then
        cat<<EOF > $TMPM
ltmodem-2.2.20-compact_6.00c2_i386.deb
ltmodem-2.2.20-idepci_6.00c2_i386.deb
ltmodem-2.2.20-reiserfs_6.00c_i386.deb
ltmodem-2.2.20_6.00c2_i386.deb
ltmodem-2.2.21-compact_6.00c2_i386.deb
ltmodem-2.2.21-idepci_6.00c2_i386.deb
ltmodem-2.2.22_6.00c_i386.deb
ltmodem-2.2.22-compact_6.00c_i386.deb
ltmodem-2.2.22-idepci_6.00c_i386.deb
ltmodem-2.2.25_6.00c_i386.deb
ltmodem-2.2.25-compact_6.00c_i386.deb  
ltmodem-2.2.25-idepci_6.00c_i386.deb

ltmodem-2.4.0-test11_8.00a3_i386.deb
ltmodem-2.4.4-386_8.00a3_i386.deb
ltmodem-2.4.4-586_8.00a3_i386.deb
ltmodem-2.4.4-586tsc_8.00a3_i386.deb
ltmodem-2.4.4-686-smp_8.00a3_i386.deb
ltmodem-2.4.4-686_8.00a3_i386.deb
ltmodem-2.4.4-k6_8.00a3_i386.deb
ltmodem-2.4.4-k7_8.00a3_i386.deb
ltmodem-2.4.4_8.00a3_i386.deb
ltmodem-2.4.5-386_8.00a3_i386.deb
ltmodem-2.4.5-586_8.00a3_i386.deb
ltmodem-2.4.5-586tsc_8.00a3_i386.deb
ltmodem-2.4.5-686-smp_8.00a3_i386.deb
ltmodem-2.4.5-686_8.00a3_i386.deb
ltmodem-2.4.5-k6_8.00a3_i386.deb
ltmodem-2.4.5_8.00a3_i386.deb
ltmodem-2.4.7-386_8.00a3_i386.deb
ltmodem-2.4.7-586_8.00a3_i386.deb
ltmodem-2.4.7-586tsc_8.00a3_i386.deb
ltmodem-2.4.7-686-smp_8.00a3_i386.deb
ltmodem-2.4.7-686_8.00a3_i386.deb
ltmodem-2.4.7-k6_8.00a3_i386.deb
ltmodem-2.4.7_8.00a3_i386.deb
ltmodem-2.4.9-386_8.00a3_i386.deb
ltmodem-2.4.9-586_8.00a3_i386.deb
ltmodem-2.4.9-586tsc_8.00a3_i386.deb
ltmodem-2.4.9-686-smp_8.00a3_i386.deb
ltmodem-2.4.9-686_8.00a3_i386.deb
ltmodem-2.4.9-k6_8.00a3_i386.deb
ltmodem-2.4.9_8.00a3_i386.deb

ltmodem-2.4.10-386_8.00a3_i386.deb
ltmodem-2.4.10-586_8.00a3_i386.deb
ltmodem-2.4.10-586tsc_8.00a3_i386.deb
ltmodem-2.4.10-686-smp_8.00a3_i386.deb
ltmodem-2.4.10-686_8.00a3_i386.deb
ltmodem-2.4.10-k6_8.00a3_i386.deb
ltmodem-2.4.10_8.00a3_i386.deb
ltmodem-2.4.12-386_8.00a3_i386.deb
ltmodem-2.4.12-586_8.00a3_i386.deb
ltmodem-2.4.12-586tsc_8.00a3_i386.deb
ltmodem-2.4.12-686-smp_8.00a3_i386.deb
ltmodem-2.4.12-686_8.00a3_i386.deb
ltmodem-2.4.12-k6_8.00a3_i386.deb
ltmodem-2.4.12_8.00a3_i386.deb
ltmodem-2.4.13-386_8.00a3_i386.deb
ltmodem-2.4.13-586-ext3_8.00a3_i386.deb
ltmodem-2.4.13-586_8.00a3_i386.deb
ltmodem-2.4.13-586tsc_8.00a3_i386.deb
ltmodem-2.4.13-686-smp_8.00a3_i386.deb
ltmodem-2.4.13-686_8.00a3_i386.deb
ltmodem-2.4.13-k6_8.00a3_i386.deb
ltmodem-2.4.13_8.00a3_i386.deb
ltmodem-2.4.14-386_8.00a3_i386.deb
ltmodem-2.4.14-586-ext3_8.00a3_i386.deb
ltmodem-2.4.14-586_8.00a3_i386.deb
ltmodem-2.4.14-586tsc_8.00a3_i386.deb
ltmodem-2.4.14-686-smp_8.00a3_i386.deb
ltmodem-2.4.14-686_8.00a3_i386.deb
ltmodem-2.4.14-k6_8.00a3_i386.deb
ltmodem-2.4.14-k7_8.00a3_i386.deb
ltmodem-2.4.14_8.00a3_i386.deb
ltmodem-2.4.16-386_8.00a3_i386.deb
ltmodem-2.4.16-586_8.00a3_i386.deb
ltmodem-2.4.16-586tsc_8.00a3_i386.deb
ltmodem-2.4.16-686-smp_8.00a3_i386.deb
ltmodem-2.4.16-686_8.00a3_i386.deb
ltmodem-2.4.16-k6_8.00a3_i386.deb
ltmodem-2.4.16-k7_8.00a3_i386.deb
ltmodem-2.4.16_8.00a3_i386.deb
ltmodem-2.4.17-386_8.00a3_i386.deb
ltmodem-2.4.17-586tsc_8.00a3_i386.deb
ltmodem-2.4.17-686-smp_8.00a3_i386.deb
ltmodem-2.4.17-686_8.00a3_i386.deb
ltmodem-2.4.17-bf2.4_8.00a3_i386.deb
ltmodem-2.4.17-k6_8.00a3_i386.deb
ltmodem-2.4.17-k7_8.00a3_i386.deb
ltmodem-2.4.17_8.00a3_i386.deb
ltmodem-2.4.18-386_8.00a3_i386.deb
ltmodem-2.4.18-586tsc_8.00a3_i386.deb
ltmodem-2.4.18-686-smp_8.00a3_i386.deb
ltmodem-2.4.18-686_8.00a3_i386.deb
ltmodem-2.4.18-bf2.4_8.00a3_i386.deb
ltmodem-2.4.18-k6_8.00a3_i386.deb
ltmodem-2.4.18-k7_8.00a3_i386.deb
ltmodem-2.4.18_8.00a3_i386.deb

ltmodem-2.4.19-386_8.26a9_i386.deb
ltmodem-2.4.19-586tsc_8.26a9_i386.deb
ltmodem-2.4.19-686-smp_8.26a9_i386.deb
ltmodem-2.4.19-686_8.26a9_i386.deb
ltmodem-2.4.19-k6_8.26a9_i386.deb
ltmodem-2.4.19-k7_8.26a9_i386.deb
ltmodem-2.4.19-k7-smp_8.26a9_i386.deb
ltmodem-2.4.19_8.26a9_i386.deb

ltmodem-2.4.20_8.26a9_i386.deb
ltmodem-2.4.20-speakup_8.26a9_i386.deb
ltmodem-2.4.20-1-386_8.26a9_i386.deb 
ltmodem-2.4.20-1-586tsc_8.26a9_i386.deb
ltmodem-2.4.20-1-686_8.26a9_i386.deb  
ltmodem-2.4.20-1-k6_8.26a9_i386.deb
ltmodem-2.4.20-1-k7_8.26a9_i386.deb 
ltmodem-2.4.20-1-k7-smp_8.26a9_i386.deb

ltmodem-2.4.18-k7_8.26a9_i386.deb

EOF
      else
      cat<<EOF>$TMPM

ltmodem-2.4.21-5-386_8.26a9_i386.deb
ltmodem-2.4.21-5-586tsc_8.26a9_i386.deb
ltmodem-2.4.21-5-686-smp_8.26a9_i386.deb
ltmodem-2.4.21-5-k6_8.26a9_i386.deb
ltmodem-2.4.21-5-k7-smp_8.26a9_i386.deb
ltmodem-2.4.21-5-k7_8.26a9_i386.deb
ltmodem-2.4.21-5_8.26a9_i386.deb

ltmodem-2.4.22-1-386_8.26a9_i386.deb
ltmodem-2.4.22-1-586tsc_8.26a9_i386.deb
ltmodem-2.4.22-1-686-smp_8.26a9_i386.deb
ltmodem-2.4.22-1-k6_8.26a9_i386.deb
ltmodem-2.4.22-1-k7-smp_8.26a9_i386.deb
ltmodem-2.4.22-1-k7_8.26a9_i386.deb
ltmodem-2.4.22-speakup_8.26a9_i386.deb

EOF
      fi
    fi
    if [ "$DISTR" = "mandrake" ] ; then
      if ! [ "$GCCmajor" = "3" ] ; then
        cat<<EOF > $TMPM

ltmodem-kv_2.2.17_21mdk-6.00b4-1.i686.rpm
ltmodem-kv_2.2.19_4.1mdk-6.00b4-1.i686.rpm

ltmodem-kv_2.2.19_6.3mdk-6.00b15-1.i586.rpm
ltmodem-kv_2.2.19_6.3mdk-6.00b15-1.i686.rpm

ltmodem-kv_2.2.19_20.1mdk-6.00b7-1.i586.rpm
ltmodem-kv_2.2.19_20.1mdk-6.00b7-1.i686.rpm

ltmodem-kv_2.2.20_9.1mdk-6.00c2-1.i586.rpm
ltmodem-kv_2.2.20_9mdk-6.00c2-1.i586.rpm
ltmodem-kv_2.2.20_9mdk-6.00c2-1.i686.rpm

ltmodem-kv_2.4.3_20mdk-6.00b15-1.i586.rpm
ltmodem-kv_2.4.3_20mdk-6.00a1-1.i686.rpm

ltmodem-kv_2.4.7_13mdk-6.00a1-1.i586.rpm

ltmodem-kv_2.4.8_34.1mdk-6.00b15-1.i586.rpm
ltmodem-kv_2.4.8_34.1mdk-6.00b15-1.i686.rpm
ltmodem-kv_2.4.8_26mdk-6.00b7-1.i586.rpm
ltmodem-kv_2.4.8_26mdk-6.00b7-1.i686.rpm

ltmodem-kv_2.4.18_6mdksmp-8.22a4-1.486.rpm

ltmodem-kv_2.4.18_6mdk-8.22a5-1.i586.rpm
ltmodem-kv_2.4.18_6mdk-8.22a5-1.i686.rpm
ltmodem-kv_2.4.18_6mdksmp-8.22a5-1.i586.rpm
ltmodem-kv_2.4.18_6mdksmp-8.22a5-1.i686.rpm
ltmodem-kv_2.4.18_8.1mdk-8.22a5-1.i586.rpm
ltmodem-kv_2.4.18_8.1mdk-8.22a5-1.i686.rpm
ltmodem-kv_2.4.18_8.1mdksmp-8.22a5-1.i586.rpm
ltmodem-kv_2.4.18_8.1mdksmp-8.22a5-1.i686.rpm
ltmodem-kv_2.4.19_16mdk-8.22a5-1.i586.rpm

ltmodem-kv_2.4.18_8.1mdk-8.26a9-1.i586.rpm
ltmodem-kv_2.4.18_8.1mdk-8.26a9-1.i686.rpm


EOF
      else
        cat<<EOF> $TMPM

ltmodem-kv_2.4.19_16mdk-8.26a9-1.i586.rpm
ltmodem-kv_2.4.19_24mdk-8.26a9-1.i586.rpm
ltmodem-kv_2.4.19_24mdk-8.26a9-1.i686.rpm

ltmodem-kv_2.4.21_0.11mdk-8.26a9-1.i586.rpm
ltmodem-kv_2.4.21_0.13mdk-8.26a9-1.i586.rpm
ltmodem-kv_2.4.21_0.18mdk-8.26a9-1.i586.rpm
ltmodem-kv_2.4.21_0.25mdk-8.26a9-1.i586.rpm
ltmodem-kv_2.4.21_0.25mdk-8.26a9-1.i686.rpm

ltmodem-kv_2.4.22_10mdk-8.26a9-1.i586.rpm
ltmodem-kv_2.4.22_21mdk-8.26a9-1.i586.rpm

EOF
      fi
    fi

    if [ "$DISTR" = "redhat" ] ; then
      if ! [ "$GCCmajor" = "3" ] ; then
        cat<<END > $TMPM

ltmodem-kv_2.2.16_22-6.00a1-1.i386.rpm
ltmodem-kv_2.2.19_7.0.8-6.00a1-1.i386.rpm

ltmodem-kv_2.4.2_2-8.22a3-1.i386.rpm
ltmodem-kv_2.4.3_12-6.00a1-1.i386.rpm
ltmodem-kv_2.4.3_SGI_XFS_1.0.1-6.00a1-1.i386.rpm
ltmodem-kv_2.4.6_2.4-6.00a1-1.i386.rpm
ltmodem-kv_2.4.7-6.00a1-1.i386.rpm

ltmodem-kv_2.4.9_0.5-6.00b4-1.i386.rpm
ltmodem-kv_2.4.9_6-6.00b4-1.i386.rpm
ltmodem-kv_2.4.9_7-6.00b4-1.i386.rpm

ltmodem-kv_2.4.7_10-6.00b15-1.athlon.rpm
ltmodem-kv_2.4.7_10-6.00b15-1.i386.rpm
ltmodem-kv_2.4.7_10-6.00b15-1.i586.rpm
ltmodem-kv_2.4.7_10-6.00b15-1.i686.rpm

ltmodem-kv_2.4.9_12-6.00b7-1.i386.rpm
ltmodem-kv_2.4.9_13-6.00b7-1.i386.rpm

ltmodem-kv_2.4.9_21-6.00b15-1.athlon.rpm
ltmodem-kv_2.4.9_21-6.00b15-1.i386.rpm
ltmodem-kv_2.4.9_21-6.00b15-1.i586.rpm
ltmodem-kv_2.4.9_21-6.00b15-1.i686.rpm

ltmodem-kv_2.4.9_31-6.00c2-1.i386.rpm

ltmodem-kv_2.4.9_31-6.00b14-1.athlon.rpm
ltmodem-kv_2.4.9_31-6.00b14-1.i686.rpm

ltmodem-kv_2.4.9_34-8.22a5-1.i386.rpm

ltmodem-kv_2.4.12_0.1-6.00b4-1.i386.rpm

ltmodem-kv_2.4.17_0.13-6.00b15-1.athlon.rpm
ltmodem-kv_2.4.17_0.13-6.00b15-1.i386.rpm
ltmodem-kv_2.4.17_0.13-6.00b15-1.i586.rpm
ltmodem-kv_2.4.17_0.13-6.00b15-1.i686.rpm

ltmodem-kv_2.4.18_0.13-8.22a3-1.i386.rpm
ltmodem-kv_2.4.18_3-8.22a3-1.athlon.rpm
ltmodem-kv_2.4.18_3-8.22a3-1.i586.rpm
ltmodem-kv_2.4.18_3-8.22a3-1.i686.rpm
ltmodem-kv_2.4.18_3-8.26a9-1.i386.rpm 
 
ltmodem-kv_2.4.18_3-8.22a5-1.i386.rpm
ltmodem-kv_2.4.18_5-8.22a5-1.athlon.rpm
ltmodem-kv_2.4.18_5-8.22a5-1.i386.rpm
ltmodem-kv_2.4.18_5-8.22a5-1.i486.rpm
ltmodem-kv_2.4.18_5-8.22a5-1.i586.rpm
ltmodem-kv_2.4.18_5-8.22a5-1.i686.rpm

ltmodem-kv_2.4.18_10-8.22a5-1.athlon.rpm
ltmodem-kv_2.4.18_10-8.22a5-1.i386.rpm
ltmodem-kv_2.4.18_10-8.22a5-1.i486.rpm
ltmodem-kv_2.4.18_10-8.22a5-1.i586.rpm
ltmodem-kv_2.4.18_10-8.22a5-1.i686.rpm

ltmodem-kv_2.4.18_18.7.x-8.26a9-1.athlon.rpm 
ltmodem-kv_2.4.18_18.7.x-8.26a9-1.duron.rpm 
ltmodem-kv_2.4.18_18.7.x-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.18_18.7.x-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.18_18.7.x-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.18_18.7.x-8.26a9-1.i686.rpm
ltmodem-kv_2.4.18_18.7.x-8.26a9-1.k6.rpm

END
      else
        cat<<END > $TMPM

ltmodem-kv_2.4.18_14-8.26a9-1.athlon.rpm
ltmodem-kv_2.4.18_14-8.26a9-1.i386.rpm
ltmodem-kv_2.4.18_14-8.26a9-1.i586.rpm
ltmodem-kv_2.4.18_14-8.26a9-1.i686.rpm
ltmodem-kv_2.4.18_14bigmem-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.18_14smp-8.26a9-1.i386.rpm 

ltmodem-kv_2.4.18_18.8.0-8.26a9-1.athlon.rpm
ltmodem-kv_2.4.18_18.8.0-8.26a9-1.duron.rpm
ltmodem-kv_2.4.18_18.8.0-8.26a9-1.i386.rpm
ltmodem-kv_2.4.18_18.8.0-8.26a9-1.i486.rpm
ltmodem-kv_2.4.18_18.8.0-8.26a9-1.i586.rpm
ltmodem-kv_2.4.18_18.8.0-8.26a9-1.i686.rpm
ltmodem-kv_2.4.18_18.8.0-8.26a9-1.k6.rpm

ltmodem-kv_2.4.18_19.8.0-8.26a9-1.1.i386.rpm 
ltmodem-kv_2.4.18_19.8.0-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.18_19.8.0-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.18_19.8.0-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.18_19.8.0-8.26a9-1.i686.rpm 

ltmodem-kv_2.4.18_24.8.0-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.18_24.8.0-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.18_24.8.0-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.18_24.8.0-8.26a9-1.i686.rpm 

ltmodem-kv_2.4.18_26.8.0-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.18_26.8.0-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.18_26.8.0-8.26a9-1.i686.rpm 

ltmodem-kv_2.4.18_27.7.x-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.18_27.8.0-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.18_27.8.0-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.18_27.8.0-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.18_27.8.0-8.26a9-1.i686.rpm 

ltmodem-kv_2.4.20_2.2-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.20_2.2-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.20_2.2-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.20_2.2-8.26a9-1.i686.rpm 

ltmodem-kv_2.4.20_6-8.26a9-1.athlon.rpm
 
ltmodem-kv_2.4.20_8-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.20_8-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.20_8-8.26a9-1.i586.rpm
ltmodem-kv_2.4.20_8-8.26a9-1.i686.rpm
 
ltmodem-kv_2.4.20_9-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.20_9-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.20_9-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.20_9-8.26a9-1.i686.rpm 

ltmodem-kv_2.4.20_13.9-8.26a9-1.i386.rpm
ltmodem-kv_2.4.20_13.9-8.26a9-1.i486.rpm
ltmodem-kv_2.4.20_13.9-8.26a9-1.i586.rpm
ltmodem-kv_2.4.20_13.9-8.26a9-1.i686.rpm

ltmodem-kv_2.4.20_18.9-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.20_18.9-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.20_18.9-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.20_18.9-8.26a9-1.i686.rpm 

ltmodem-kv_2.4.20_19.9-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.20_19.9-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.20_19.9-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.20_19.9-8.26a9-1.i686.rpm 

ltmodem-kv_2.4.20_20.7-8.26a9-1.i686.rpm

ltmodem-kv_2.4.20_20.8-8.26a9-1.i386.rpm
ltmodem-kv_2.4.20_20.8-8.26a9-1.i686.rpm

ltmodem-kv_2.4.20_20.9-8.26a9-1.i386.rpm 
ltmodem-kv_2.4.20_20.9-8.26a9-1.i486.rpm 
ltmodem-kv_2.4.20_20.9-8.26a9-1.i586.rpm 
ltmodem-kv_2.4.20_20.9-8.26a9-1.i686.rpm 

END
      fi
    fi 
 
    if [ "$DISTR" = "SuSE" ] ; then
      echo " Installer packages are also available from SuSE repositories, search for ltmodem at:">>$RECORD
      echo "  http://rpm.pbone.net/ " >>$RECORD
      if ! [ "$GCCmajor" = "3" ] ; then
        cat<<END > $TMPM
ltmodem-kv_2.4.10_4GB-6.00b4-1.i386.rpm
ltmodem-kv_2.4.16_4GB-6.00b9-1.i386.rpm

ltmodem-kv_2.4.18_4GB-8.22a3-1.i386.rpm

ltmodem-kv_2.4.19_4GB-8.22a5-1.i386.rpm

ltmodem-kv_2.4.18_4GB-8.26a9-1.i386.rpm
ltmodem-kv_2.4.19_4GB-8.26a9-1.i386.rpm

END
      else
        cat<<END > $TMPM

        ltmodem-kv_2.4.20_4GB-8.26a9-1.i386.rpm,  SuSE 8.2
	
END
      fi
    fi

################### Listing from http://ltmodem.heby.de/ ends 

    fi #  Done choosing DISTR block
    # for testing 
    # PVER=2.4.18_5
    # CPU=i786
    #   cat $TMPM
    echo >>$RECORD
    echo "  The desired installer name is like:" >>$RECORD
    echo "========================================"  >>$RECORD 
    # echo Checking for suitable ltmodem Installers
    if [ "$DISTR" = "debian" ] ; then
      echo ltmodem-"$FILTER""$LT_VERSION"_i386.deb >>$RECORD
      # FILTER=2.4.18-6_
      if grep $FILTER $TMPM > /dev/null ; then
        grep $FILTER $TMPM > $TMPM.1
        BEST=$TMPM.1
      fi
    else
      # conectiva mandrake redhat SuSE,  all .rpm
      if [ "$DISTR" = "mandrake" ] || [ "$DISTR" = "redhat" ] ; then
        echo ltmodem-kv-$PVER-$LT_VERSION-1.$CPU.rpm >>$RECORD
      fi
      if [ "$DISTR" = "conectiva" ] || [ "$DISTR" = "SuSE" ] ; then
        echo "ltmodem-kv-$PVER-$LT_VERSION-i386.rpm" >>$RECORD
      fi
      grep $PVER $TMPM  > $TMPM.2
      grep $CPU $TMPM.2 >  $TMPM.1
      if grep "ltmodem-" $TMPM.1 >/dev/null ; then
        BEST=$TMPM.1
      elif grep "ltmodem-" $TMPM.2 >/dev/null ; then
        BEST=$TMPM.2
      else
        BEST=
      fi
    fi
    AGERE=`echo $LT_VERSION | cut -da -f1`
    cat<<END>>$RECORD
---------------------------------------- 
 ltmodem-kv-Kernel_FL-LTver--.CPU.rpm   explains the versioning.
 For your System 
            `echo Kernel_FL is  $SYS , the full kernel version displayed by:  uname -r` 
                      `echo LTver is $LT_VERSION, the release of the compiler kit` 
                               `echo $AGERE is the Agere core code designation.`           
       The proccesor type or CPU is:  $CPU      dispayed by:  uname -m   
 used in compiling and assembling driver packages.

END

    # Results
    if [ "$BEST" = "$TMPM.1" ] ; then
        cat<<END > $TMPM.3
  A suitable Installer is at    http://ltmodem.heby.de/
    in the section:	$DISTR
       `cat $BEST`

END
    cat $TMPM.3 >>$RECORD
    cat $TMPM.3
    elif [ "$BEST" = "$TMPM.2" ] ; then
        cat<<END > $TMPM.3
 Installers that may suffice are at http://ltmodem.heby.de/
 in the section:	$DISTR
------------------------------------------------------
 `cat $BEST`
------------------------------------------------------
 The closest match to your   $CPU=CPU   is recommended.
 For example replacements in order of preference for an
    i686 would be i586, i486 and i386
 The Kernel_FLavor section MUST match.
 If not the ltmodem-$LT_VERSION.tar.gz compiler MUST BE USED.

END
    cat $TMPM.3 >>$RECORD
    cat $TMPM.3
    else
      cat<<END>>$RECORD
 A suitable installer is not available as of this $UPDATE update.
 Check in the section $DISTR at  http://ltmodem.heby.de/
 for a subsequent Installer submission.
 If not present use the ltmodem-$LT_VERSION.tar.gz compiler kit.

 The list of available Installers for $DISTR
 is inserted into to $RECORD.2
END
      cat<<END>>$RECORD.2

GCCmajor=$GCCmajor
-----------Installer list for $DISTR -------- 
`cat $TMPM`
------- end Installer List ------------------
END
    fi
  fi # DISTR not recognized
  if [ "$DISTR" = "redhat" ] || [ "$DISTR" = "SuSE" ] ; then
      echo >>$RECORD
      echo "  Some installers may alternately be found by searching for   ltmodem   at:">>$RECORD
      echo "    http://rpm.pbone.net/">>$RECORD
      echo >>$RECORD
  fi
  if grep smp $TMPM >/dev/null ; then
###########
cat<<END>>$RECORD.2

   Symmetric Multi Processors (SMP) issues
----------------------------------------------------------------------------------
  Beginning with the Agere version 8.00 core code, the ltmodem drivers are 
  functional on Systems with SMP kernels such as your kernel-$SYS ,
  so far as supporting dialout and initiation of ppp. 
  However these dialout sessions  inevitable stall, 
  evidently because of inadequate interrupt handling by the core ltmodem code.  
  This problem can be bypassed with some loss of performance by
  using the bootup option: NOAPCI

END
############
fi # DSP
# fi # FAILED  lspci -s scan

# echo Scanning for a PCI bridge to a CardBus with:  "$LSPCI | grep CardBus"
echo ---------------------------------------- > $TMPM
CARDBUS=`$LSPCI | grep -E CardBus | cut -d' ' -f1`
if test -z "$CARDBUS" ; then
  CARDBUS=`$LSPCI | grep Cardbus | cut -d' ' -f1`
fi
if test -z "$CARDBUS" ; then
 echo A PCI CardBus is not detected on this System. >> $TMPM
else
    port=0
    for i in $CARDBUS ; do
        echo Analyzing information for PCMCIA device at PCI Bus $i >> $TMPM
        $LSPCI -s $i -v >> $TMPM
        echo "GREPping for an inserted PCMCIA modem with filter:        ommunication"  >> $TMPM
        MODEM=`$LSPCI  -v | grep Communication`
        if test -n "$MODEM" ; then
            port=1
        fi
    done
    if test $port -gt 0 ; then
       cat<<END>>$TMPM

  A PCMCIA modem is detected.  >> $TMPM
     `$LSPCI -s $i -v | grep ommunication`
 The stardard ltmodem resources should suffice for modem support:
     http://ltmodem.heby.de/ 
 if the modem has a Lucent/Agere digital processing chipset. 
END
    else
       cat<<END>>$TMPM
 If a PCMCIA modem is currently inserted and the sockets activated by
    /etc/init.d/pcmcia start
 then the PCMCIA bridge is NOT transparent.

 If the modem is known to have a Lucent digital signal processing chipset,
 then PCMCIA.tar.gz variant assembled by Joern Wustenfeld is necessary,
 rather than the standard ltmodem-$LT_VERSION.tar.gz at  http://ltmodem.heby.de/
END
     fi
     cat $TMPM >>$RECORD.2
     echo 
fi

# gcc problem
if [ "$GCCmajor" = "3" ] ; then
  echo GCCversion=$GCC >>$RECORD
#########
  cat<<END>>$RECORD.2
 			
 ---------------------------------------------------------------------------------------------
 The proprietary Binary component of the some current winmodem drivers were compiled with
 version 2.9n gcc compiler.  Red Hat 8.0 and Mandrake 9.0 releases utilize 
 version 3.nn gcc compilers.  This currently is causing difficulties either 
 in compiling and/or insertion of updated winmodem drivers.

 The gcc compiler version of this System is:   $GCC
 It will likely be necessary to force (-f) insertion of winmodem drivers, with credit to
 Jos Vos: http://phep2.technion.ac.il/linmodems/archive/msg04510.html
 
 For the ltmodem drivers with proprietary binary provided by Agere Systems,
 compiling with versions gcc=3.nn is successful.
 A minor edit required to compile PCTEL drivers has also been reported:
     http://phep2.technion.ac.il/linmodems/archive/msg04684.html

  Simple driver insertion fails in these cases with a message like: 
----begin error----
% insmod lt_modem
Using /lib/modules/2.4.18-14/ltmodem/lt_modem.o
/lib/modules/2.4.18-14/ltmodem/lt_modem.o: The module you are trying to
load (/lib/modules/2.4.18-14/ltmodem/lt_modem.o) is compiled with a gcc
version 2 compiler, while the kernel you are running is compiled with
a gcc version 3 compiler. This is known to not work.
-----end error-----

 It is necessary as Root to force (-f) loading with commands like:
     insmod -f pctel
     
 respecting the dependency ordering of the drivers.
 Then check for insertion with:
    lsmod

 If driver insertion is successful, the forcing can be automated
 by putting the lines (credit to Bhaskaran Raman)  like the following,
    install pctel  /sbin/insmod --force pctel

 In order of preference depending on your particular Linux installation.
 Put these lines into ONLY ONE of the following files,
 within any modem loading subsection if present: 
    /etc/modutils/ltmodem
    /etc/modutils/aliases
    /etc/modules.conf

 Then inform your System of the edit for Debian like Systems with
    update-modules
 which rewrites and reads /etc/modules.conf . For other System types 
    depmod -a
 re-reads the edited      /etc/modules.conf .

 Thereafter module loading should behave as previously.
 For the ltmodem drivers loading,
 it should suffice to either start a ppp session or
    modprobe ptserial
      
END
###############
fi

# A general Advisory
ETHER=`$LSPCI | grep Ether | cut -d' ' -f1`
if test -n "$ETHER" ; then
cat<<END>>$RECORD.2

  -----------------------------------------------------
  The System has Ethernet capability. If not expert, 
  shut down ethernet before initiated modem usage with:
  # ifconfig eth0 down

END
  $LSPCI -s $ETHER -v >>$RECORD.2
  echo >>$RECORD.2
fi
############

echo >>$RECORD
echo  The following information blocks just query some ppp support items. >>$RECORD
echo "===================================================================="  >>$RECORD
echo  "   grep ppp /etc/modules.conf" >>$RECORD
echo -------------------------------- >>$RECORD
grep ppp /etc/modules.conf >>$RECORD
echo -------------------------------- >>$RECORD
if ! grep ppp /etc/modules.conf >/dev/null ; then
  echo
  echo Be sure to read the section about ppp related modules and aliases in $RECORD.2 >>$RECORD
  cat<<END>>$RECORD.2

 Within /lib/modules/You_Kernel_Version/kernel/drivers/net/
 at least the following modules needed for communication should be found
   ppp_deflate.o
   zlib_inflate.o 
   zlib_deflate.o 
   bsd_comp.o
   ppp_async.o
   ppp_generic.o
   slhc.o
 BUT they may be present instead as ModuleName.o.gz
 If so unpack them with a commands like:
   # gzip /lib/modules/You_Kernel_Version/kernel/drivers/net/ModuleName.o.gz
 Alternatively, installing the dialer package KPPP may force their unpacking.
 
 Following a dialout attempt, display loaded modules with:
# /sbin/lsmod
 If there are not displayed lines like:

ppp_deflate             3512   1  (autoclean)
zlib_inflate           18980   0  (autoclean) [ppp_deflate]
zlib_deflate           18648   0  (autoclean) [ppp_deflate]
bsd_comp                4440   0  (autoclean)
ppp_async               7744   1  (autoclean)
ppp_generic            16380   3  (autoclean) [ppp_deflate bsd_comp ppp_async]
slhc                    5264   1  (autoclean) [ppp_generic

addition of the following lines to   /etc/module.conf may be needed:

### automate ppp modules loading ###
alias /dev/ppp          ppp_generic
alias char-major-108    ppp_generic
alias tty-ldisc-3       ppp_async  
alias tty-ldisc-14      ppp_synctty
alias ppp-compress-21   bsd_comp   
alias ppp-compress-24   ppp_deflate
alias ppp-compress-26   ppp_deflate
### end ppp block ####

 After any edit of /etc/modules.conf , 
 inform the System by logging into a console with
 # su - root
 and running the update command:
 #  depmod -a
 which re-reads /etc/modules.conf and parses all the modules dependencies.
 
END
fi
# ethernet and isdn can hinder DNS acquisition
if test -x /sbin/ifconfig ; then
  /sbin/ifconfig | grep Link> $TMPM
  echo === ifconfig test ==== >>$RECORD
  cat $TMPM >>$RECORD
  echo  >>$RECORD
  if grep tap $TMPM>/dev/null ; then
    echo ISDN function should be stopped before initiating modem usage>>$RECORD
    echo >>$RECORD
  fi   
fi

if test -e /dev/ppp ; then
  DEVPPP=`ls -l /dev/ppp`
  echo DEVPPP=$DEVPPP  >>$RECORD
else
  cat<<END>>$RECORD

  A port needed for the PPP protocol is absent!!!
  echo "  crw-------    1 root     root     108,   0 Dec 31  1969 /dev/ppp"

END
fi



if test -e /dev/.devfsd ; then
  DEVFS=active
  echo DEVFS=$DEVFS >>$RECORD
# Check for /dev/modem link
elif [ -L /dev/modem ] ; then
  MODEM=`ls -l /dev/modem | cut -d'>' -f2- | cut -d" " -f2-`
  cat<<END>> $RECORD

  The current modem symbolic link is: /dev/modem -> $MODEM"
  The ports /dev/ttyS0 or 1,2,3 are for standard Controller chip modems

END
else
  echo A /dev/modem symbolic link is not present >>$RECORD
fi

if test -f /etc/devfsd.conf ; then
  DEVFSD=/etc/devfsd.conf
elif test -f /etc/devfs/devfsd.conf ; then
  DEVFSD=/etc/devfs/devfsd.conf
else
  cat<<END>>$RECORD

 No devfsd.conf file sound, indicated absense of the devfsd daemon package 
 for device file system (devfs) symbolic link support.

END
fi
echo DEVFSD=$DEVFSD>>$RECORD

if [ "$DEVFSD" != "" ] ; then
  DEVFSD_PPP=`grep PPP $DEVFSD` >>$RECORD
  echo tts/0 > $TMPM
  echo tts/1 >> $TMPM
  echo tts/2 >> $TMPM
  echo tts/3 >> $TMPM
  echo
  MODEM=`grep -f $TMPM $DEVFSD`
  if test -z "$MODEM" ; then
    if test -d /etc/devfs ; then
      MODEM=`grep -rs modem /etc/devfs/ | grep -f $TMPM | grep :REGISTER`
    fi
  fi
  if test -n "$MODEM" ; then
    FILE=`grep -rs modem /etc/devfs/ | grep -f $TMPM | grep :REGISTER | cut -d: -f1`
#    echo $FILE
    cat<<EOF>>$RECORD

 Supporting /dev/modem symbolic link:
 $FILE
------------------------------
`cat $FILE`
------------------------------

EOF
    cat<<END>>$RECORD.2

 Supporting /dev/modem symbolic link:
 $FILE
------------------------------
`cat $FILE`
------------------------------
 is for device file system support of Controller chip modems
 and will conflict with usages of any other modem requiring a 
 symbolic link:  /dev/modem --> /dev/SomeNode

 It will for example conflict with support for the Lucent chip modems 
 with support file /etc/devfs/conf.d/ltmodem.conf
---------------------------------
### /dev/modem symbolic link to /dev/tts/LT0 
REGISTER        ^tts/LT0$       CFUNCTION GLOBAL symlink $devname modem
UNREGISTER      ^tts/LT0$       CFUNCTION GLOBAL unlink modem
---------------------------------
 Thus unless use of a Controller chip modem is anticipated,
 either comment out those lines with a leading #
 or move $FILE somewhere else, say /root/
 to avoid conflict with other modems!!

 Inform the devfsd (device file system) daemon of the edit with
 # killall -HUP devfsd
 See http://linmodems.technion.ac.il/archive-third/msg00869.html

END
  fi
fi

cat<<END>>ModemDriverCompiling.txt
 
 ================================================================
          COMPILING DRIVERS, for Linux Newbies

This text provides a very minimal introduction to compiling drivers,
particularly WinModem drivers under Linux.  Must points are covered in
much more detail in the Linux HOWTO documentation set.

WinModem drivers commonly include:
1) a readible Open Source component, which can be readily debugged by
experts in code. This component provides "wrappers" to common 
kernel functions for the binary and a Closed Source component of the modem code.

2) A Closed Source component compiled into BINARY form
in which the original source code is not available
to the public to protect its proprietary information.
The binary format precludes incorporation of the modem
drivers in many Linux distributions (Debian, Mandrake, Red hat, etc.) 
for legal reasons, practical reasons, and/or reasons of principle. 

Thus the modem user must commonly COMPILE his own drivers, 
and properly install these drivers into their Linux System.
Fully pre-compiled modem binaries are generally not provided. 
The administrative cost is too high, for maintaining drivers for 
all the different customized variations to the linux kernel distributions use.
Pre-compiled binaries are usually only found for 
the most common and generic distributions on the market.

Since almost all the newer PCs are now equipped with WinModems,
most everyone will have to compile theirown linux modem drivers.
Exceptions are the more expensive modems with Controller chipsets,
characteristic of the earliest modems.
They are supported by Open Source serial code included in Linux
distributions (Distros hereafter).  Winmodems are less expensive
because of greatly reduced hardware costs (ie: no Digital Signal Processing, DSP, and/or no controller chips).   Some of the functions of the older
Controller based chipsets are replaced by a combination of software code and/or other System hardware. Modems without a controller are referred to as "controllerless modems" and modems without a DSP and controller are referred to as "soft modems".

With faster central processor units (CPU), some processing tasks are performed
by the CPU for the HCF (host controller free) modems.
For the soft modems serving under ac97_codec audio singnal processing rules
the digital audio card does some of the signal processing. 

COMPILING is the process of converting human readable source code
into compact binary code that the Operating System (OS) can process quickly. 
For winmodems, code components from the modem chipset provider 
are combined with KERNEL-HEADERS, thus generating one or
more complementary drivers. They are commonly compiled as Modules and
installed as ModuleNames.o into sub-folders of:
   /lib/modules/kernel-version/ 
Therefrom they can be dynamically inserted into the boot kernel of the
Operating System (OS) when needed, sometimes with auxiliary instructions from
   /etc/modules.conf 
They can be removed from the kernel when no longer serving, thus
economizing on System resources.

The KERNEL-HEADERs have FileNames.h can can be read with a text browser.
Some are installed to 
  /usr/include/
For systems with RPM package managers, they are provided by a package
  kernel-headers-SomeVersion.rpm 
They specify:
 1) code bits to be incorporated by various of your installed programs, and
 2) the dependencies within the set of FileNames.h 
However the whole set of
  /usr/include/FileNames.h
Are in general TOO FEW to support compiling. Exceptions to note are
the kernel-header-version.deb packages of Debian style Distros, 
which are designed to support compiling.

A KERNEL-SOURCE package must more generally be installed,
and processed to produce needed kernel headers.
The kernel-source is some 20-30 MB now even in compressed form.  
The kernel-source package provided by your Linux Distro SHOULD preferentially be used.
It will usually have some differences from that initially released at http://www.kernel.org .
Typically the installation process will set a symbolic link:
  /usr/src/linux --> PATH_to/kernel-source-version/
Check with:
  ls -l /usr/src/linux
Move into it with:
  cd /usr/src/linux
Look at the first few lines of the Makefile with:
  more Makefile
They will look like:
--------------------
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 21
EXTRAVERSION = -Some.Extraversion.Designation
--------------------
wherein -Some.Extraversion.Designation was that last used by your Linux Distro for 
a specialization of the more general kernel-release 2.4.21 .
For Mandrake Linux their will generally be an include an "mdk", such as:
 EXTRAVERSION = -3.1mdk
These four makefile lines specify that:
1)  the compiled kernel will have a version name like:
 vmlinuz-2.4.21-3.1mkd
2)  the complementary kernel modules will have an encoded version label: 2.4.21-3.1mkd
3)  the modules will be installed by:
  make modules-install
to sub-folders of /lib/modules/2.4.21-3.1mkd/
 
Some  kernel-headers from a prior usage may be resident from the Last.Usage of the kernel-source/.  
Check with:
  ls include/linux/
which may display abundant FileNames.h
The version of these headers will be in the UTS line displayed (for example) by
  cat include/linux/version.h 
     #define UTS_RELEASE "2.4.21-3.1mdk"
Next, list completely the contents of your current folder /usr/src/linux  with:
  ls -a 
Where the " -a " additionally reveals ".dot-prefixed-confguration-files" such as
    .config  .hdepend .depends 
which may be left over from the prior usage of the kernel-source.

IMPORTANT: the kernel-source as installed  generally WILL NOT
represent your current kernel version as displayed with:
  uname -r
even if the kernel-version is the same. For example, in the RedHat Distro kernel-source/
there is a set of kernel-configuration files within 
   /usr/src/linux/configs/
Each is specialized for a different CPU (i586, i686, K6, etc),
Yet each will be represented by the VERY SAME version.h and "uname -r" .
!!!! Thus a PROPER CONFIGURATION MUST BE DONE by You, before any usage of kernel-source !!!!

Configuration of the kernel-source is where almost all the Mistakes occur!!!
Here is a way to do it correctly (but read through EXCEPTIONAL CASES below). 
1)Within /usr/src/linux, browse the README file for general guidance.  
It will relate the usage:
#    make mrproper
cleans up leftovers from any previous usage .dot-files and the include/linux/ folder.
Additionally you may need to do an edit within Makefile, but ONLY that 4th line.  
If the general source release version is say 2.4.21 and
#   uname -r
Displays
   2.4.21-8.1enterprise
This EXTRAVERSION mis-match must be corrected.
Otherwise, compiled drivers would not be installed to the matching:
   /lib/modules/kernel_version/
2) If necessary to edit, FIRST make a backup:
  cp Makefile Makefile.backup
then edit ONLY the 4th line of Makefile to 
   EXTRAVERSION = -8.1enterprise
NEVER change anything else within the Makefile. 

3) Copy the config file of the current kernel to 
#   /usr/src/linux/.config
and DO SPECIFY that " . "
But where is it? For many Distros, it will be the file like
   /boot/config-2.4.21-Current.Kernel.Extraversion
matching the output of:
#  uname -r 
Or it may be the target of a symbolic link:  /boot/config -->
So
#  cp /boot/config-2.4.21-Current.Kernel.Extraversion /usr/src/linux/.config
For SuSE linux it is:
#  cp /boot/vmlinuz.config  /usr/src/linux/.config
PLEASE do not omit that "." in  .config as it is crucially necessary.
View .config with a text browser.  
It is simply a listing of the code components used in the kernel and its modules. 

4) The  .config file will be read during
#  make oldconfig
which feeds its specifications through a process specifying 
the SAME inter-dependencies previously used in compiling your kernel,
and generating fresh .dot-config files . They can be displayed with:
#   ls -al

5) Though it may be redundant after "make mrproper", it will do no harm to:
   make clean 
5a) If your Linux Distribution is SuSE, there will exist files:
  /boot/vmlinuz.autoconf.h
  /boot/vmlinuz.version.h
They MUST be copied as:
  cp /boot/vmlinuz.autoconf.h  /usr/src/linux/include/linux/autoconf.h
  cp /boot/vmlinuz.version.h   /usr/src/linux/include/linux/version.h

6) Now rebuild kernel headers with:
   make dep  
7) Check with:
   ls  include/linux/
and
   cat include/linux/version.h
to verify the version.  

EXCEPTIONAL CASES

For Distros with a Debian style package management system,
a kernel-header-Version.deb package matched with your kernel-version is available.
If may suffice to set a symbolic link:
  ln -s /usr/src/kernel-header-Version /usr/src/linux
and then compile the modem drivers.  If a custom kernel is to be compiled,
the kernel-package.deb software will GREATLY simplify the task.
Here is a typical command line: 
   make-kpkg --revision 2:test.1 --append_to_version -MySpecial --arch_in_name --initrd kernel_headers kernel_image
wherein "--append_to_version -MySpecial" replaces the need for an edit of the Makefile 4th line:  EXTRAVERSION =

For the 2.4.nn kernels, a symbolic link is set during initial module installations:
  /lib/modules/kernel-version/build --> /usr/src/linux
The driver resources from Intel (and others?) have a Makefile using this build link.
So if your compile fails, check with:
  ls -l /lib/modules/kernel-version/build
Then establish the build link if necessary with:
  ln -s PATH-To/kernel-source or headers folder/ /lib/modules/kernel-version/build
Do NOT forget the "-s" for symbolic, or you will Duplicate folder contents

As already mentioned above, for the SuSE distribution, there may be files:
  version.h   autoconfig.h 
located in the /boot/ folder.  Before beginning a compile,
they should be copied to /usr/src/linux/include/linux/
Someone reported that a critical header file:  modversions.h
is written to /usr/src/linux/include/linux  ONLY if the
kernel-source package has been installed with the YAST package manager.


COMPILING the MODEM DRIVERS can now finally be done.
Unpack the compiler kit for your modem drivers,
cd into its folder, read any README files,
   make clean
FINALLY, your modem drivers will compiled by a command like
   make ModuleName
or perhaps
   make all
During this process, some of the kernel-header code with be joined
with the supplied modem specific code, and ModemDrivers.o will be produced. 
Follow and further instructions in the modem code resource
to install the drivers, often with:
   make install

## end COMPILING DRIVERS 

===================================================
     FOLLOW UP STEPS.

1)  Check for a symbolic link:
   ls -l /dev/modem
which should display something like
   /dev/modem --> /dev/WinModemPort
Some Distros may set a default
   /dev/modem --> /dev/ttyS0 (or 1,2,3)
which are for Controller Chip modems only.
If represent,as Root:
# rm -f /dev/modem
# ln -s /dev/WinModemPort /dev/modem
If may prove necessary to disable a default BOOT UP setup for Controller Chip modems,
to prevent resetting of the unwanted default link.

2) Loading drivers
Depending upon your installation, the modem drivers may/may_not be autoloaded.
Login as Root in a console with:
# su - root
# lsmod
If the modem drivers are not already loaded onto the kernel, insert them with command
# modprobe ModuleDriver 

3) Testing drivers.
For a first test of the drivers, it is Very Usefull to have installed the package: wvdial
Do read "man wvdial" and sometime browse the documentation that is written to /usr/share/doc/wvdial/
The first step in setting up wvdial is to run its configuration program as Root.

Below is the output from a System with a Lucent/Agere modem
wvdialconf will either follow a symbolic link /dev/modem --> /dev/ModemPort
or check through ports with name style:  /dev/ttyS*
Below ttySLT0 is the modem port name,
replacing /dev/ttyLTO when the Device Files System (devfs) is in use.  
%% begun lines below are my added comments.

# wvdialconf /etc/wvdial.conf
Scanning your serial ports for a modem.

ttySLT0<*1>: ATQ0 V1 E1 -- OK
ttySLT0<*1>: ATQ0 V1 E1 Z -- OK
ttySLT0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttySLT0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttySLT0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttySLT0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
%%    in the AT* tests above Only the lt_modem.o driver is  being interrogated
ttySLT0<*1>: Modem Identifier: ATI -- LT V.92 Data+Fax Modem Version 8.26a
%%    The ATI test queries the modem firmware, concurrently prompting loading of the lt_serial.o driver
ttySLT0<*1>: Speed 4800: AT -- OK
ttySLT0<*1>: Speed 9600: AT -- OK
ttySLT0<*1>: Speed 19200: AT -- OK
ttySLT0<*1>: Speed 38400: AT -- OK
ttySLT0<*1>: Speed 57600: AT -- OK
ttySLT0<*1>: Speed 115200: AT -- OK
ttySLT0<*1>: Max speed is 115200; that should be safe.
ttySLT0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
Found a modem on /dev/ttySLT0.
<Warn>: Can't read config file /etc/wvdial.conf : No such file or directory
Modem configuration written to  /etc/wvdial.conf 
ttySLT0<Info>: Speed 115200; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"

%%% This wvdialconf action if successful generates the files:
 /etc/ppp/peers/wvdial
 /etc/ppp/peers/wvdial-pipe
and for further editing, /etc/wvdial.conf 
[Dialer Defaults]
Modem = /dev/ttySLT0
Baud = 115200
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ISDN = 0
Modem Type = Analog Modem
; Phone = <Target Phone Number>
; Username = <Your Login Name>
; Password = <Your Password>

Note that if your IP is the MicroSoft Network, then use syntax:
Username = MSN/<Your Login Name>
Edit these lines and remove the ";" to activate them.

Many Users prefer to use the dialout utility KPPP. This is fine.
But each User MUST run the configuration process separately.  
In principle, different Users on the same Linux System could
have different Internet providers and/or use different modems.

4) Preparation for your first dialout.
Concurrent ethernet capability will compete for 
the Domain Name Service (DNS) needed for browser naviagation. So as root:
# /sbin/ifconfig eth0 down
before starting a dialout!
With a Mandrake installation, it will be necessary to:
# /etc/init.d/network stop

5) Internet clients such as Netscape, Mozilla, Explorer etc.
should be CLOSED during your first dial out trials.  
Should a URL on the Internet be specifed as the default URL/connect,
then the Client may compete with ppp for connectivity functions.
After PPP functionality has been verified, the effects of opened
or launched browsers can be checked

If you have installed the DIALD (dial on demand) package, stop it for initial tests:
# /etc/init.d/diald stop
Otherwise diald function will be initiated with modem usage,
and could compilate issues. Test diald only after ppp by itself is fine.

If your internet provider assigns DNS dynamically then add to /etc/ppp/options:
 usepeerdns

To analyze a dialout attempt, it is useful to display kernel messages with:
# tail -f /var/log/messages &
or to achieve some prefix trimming:
# tail -f /var/log/messages | cut -d: -f4- &
The & puts the commanded process in the "background" allowing recovery of the command prompt.

Some dialer packages (kppp etc) may automate the above steps.

6) A dail out with wvdial will then display like:

# wvdial &
--> WvDial: Internet dialer version 1.53
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 M1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 M1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATDT3019178111
--> Waiting for carrier.
ATDT3019178111
CONNECT 53333 V42bis
--> Carrier detected.  Waiting for prompt.
** APX1.LNH.MD.RCN.NET Terminal Server **
Login: 
--> Looks like a login prompt.
--> Sending: marvstod
marvstod
Password: 
--> Looks like a password prompt.
--> Sending: (password)
    Entering PPP Session.
    IP address is 66.44.1.6
    MTU is 1006.
--> Looks like a welcome message.
--> Starting pppd at Sat Jul 26 13:59:03 2003
--> pid of pppd: 2404
: pppd 2.4.1 started by root, uid 0
: Using interface ppp0
: Connect: ppp0 <--> /dev/tts/LT0
: kernel does not support PPP filtering
Jul 26 13:59:08 stodolsklap kernel: PPP BSD Compression module registered
Jul 26 13:59:08 stodolsklap kernel: PPP Deflate Compression module registered
: local  IP address 66.44.1.6
: remote IP address 208.59.89.132
: primary   DNS address 207.172.3.8

7) Note that for some Linux distributions (Mandrake for one),
maintain modules in compressed module.gz format, if modem service was not specified
during the Linux installation. A subsequent installation of any dialer package:
  wvdial - PPP dialer with built-in intelligence.
  kppp - PPP dialer for KDE
  dtmfdial - A DTMF Tone Dialer
  gkdial - Gtk-based PPP dial-up configuration tool.
  gkdial-gnome - GNOME-based PPP dial-up configuration tool.
  masqdialer - daemon for remote control of masqueraded dialup links
will stimulate unpacking of ppp related modules during bootup.

The cogent ppp related modules loaded during such a CONNECT are displayed within the output from:
# lsmod
ppp_deflate             3512   1  (autoclean)
zlib_inflate           18980   0  (autoclean) [ppp_deflate]
zlib_deflate           18648   0  (autoclean) [ppp_deflate]
bsd_comp                4440   0  (autoclean)
ppp_async               7744   1  (autoclean)
ppp_generic            16380   3  (autoclean) [ppp_deflate bsd_comp ppp_async]
slhc                    5264   1  (autoclean) [ppp_generic

For ealier 2.4.nn kernels, loading of these modules may be need the following lines within 
  /etc/module.conf :
### automate ppp modules loading ###
alias /dev/ppp          ppp_generic
alias char-major-108    ppp_generic
alias tty-ldisc-3       ppp_async  
alias tty-ldisc-14      ppp_synctty
alias ppp-compress-21   bsd_comp   
alias ppp-compress-24   ppp_deflate
alias ppp-compress-26   ppp_deflate
### end ppp block ####
For more recent kernels with their modutils,
these lines are no longer needed.

8) For  potential causes of a NO DIALTONE failure, read the Post-install.html
at  http://linmodems.technion.ac.il/  Not setting the Country Code may be 
and additional problem.

 COUNTRY CODE Issues
 ====================
 The modem which you purchase locally or abroad may not be preset
 with the proper Country Code setting.  An incorrect setting can
 hinder acquisition of dial tone.
 Inclusion of an X3 (dial without wainting) in the modem Init string 
 of under wvdial, including in /etc/wvdial.conf a line
   Stupid Modem = yes
  
 Dialtone recognition depends on the setting of country 
 and/or local phone line equipment.

 To properly get dialtone for your country phone experiment use
 AT+GCI=xx  where xx=00..FF hex number
 Theoretically there could be 256 different countries but
 not all are valid. Tables in manuals are way off date, 
 you have to write a small script to try all combinations
 for yourself if you can't guess by chance.

 After country select you can check textual name of the country it represents.
 For example: 
   at+gci=00
   OK
   ati9
   Japan

 If you can't find exact contry, choose the nearest one available.
 Nearby countries tend to have similar equipment and compatible dialtones.

 These comments from:   Emard <emard@softhome.net>
 =================

9) After a successful CONNECT, the Domain Name Service (DNS) needed
 for Browser navigation can be checked with:
# ping corel.com
PING corel.com (206.47.20.85): 56 data bytes
64 bytes from 206.47.20.85: icmp_seq=0 ttl=52 time=209.1 ms
64 bytes from 206.47.20.85: icmp_seq=1 ttl=52 time=189.9 ms
64 bytes from 206.47.20.85: icmp_seq=2 ttl=52 time=180.0 ms
64 bytes from 206.47.20.85: icmp_seq=3 ttl=52 time=179.9 ms
# Ctrl-C
     aborts ping
--- corel.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 179.9/189.7/209.1 ms

# ping 206.47.20.85
PING 206.47.20.85 (206.47.20.85): 56 data bytes
64 bytes from 206.47.20.85: icmp_seq=0 ttl=52 time=179.8 ms
64 bytes from 206.47.20.85: icmp_seq=1 ttl=52 time=190.0 ms
64 bytes from 206.47.20.85: icmp_seq=2 ttl=52 time=170.0 ms
# Ctrl-C
     aborts ping

Should there be a success with: 
# ping 206.47.20.85 
BUT a failure with the named address:
ping corel.com
Then DNS has not been acquired.
Note that failure to stop ethernet service
# /sbin/ifconfig eth0 down
before starting a dialout, will commonly block DNS under ppp.

To terminate the wvdial session, bring the action to the foreground (fg):
# fg wvdial
  Ctrl-C    to terminate:
wvdial
Caught signal #2!  Attempting to exit gracefully...
: secondary DNS address 207.172.3.9
: Terminating on signal 15.
: Connection terminated.
: Connect time 7.8 minutes.
--> Disconnecting at Sat Jul 26 14:06:53 2003

10) The Debian distribution provides a utility:
# pppconfig
for setting up a chatscript for ppp initiation.
Most dialers do use chatscripts and will produce similar records.
Below is the record of a dial out initiated by:

# pon
: pppd 2.4.1 started by marv, uid 1000
: abort on (BUSY)
: abort on (NO CARRIER)
: abort on (VOICE)
: abort on (NO DIALTONE)
: abort on (NO DIAL TONE)
: abort on (NO ANSWER)
: abort on (DELAYED)
: send (ATZ^M)
: expect (OK)
: ATZ^M^M
: OK
:  -- got it 
: send (ATQ0V1E1M0S0=0W2&C1&D2+FCLASS=0^M)
: expect (OK)
: ^M
: ATQ0V1E1M0S0=0W2&C1&D2+FCLASS=0^M^M
: OK
:  -- got it 
: send (ATDT3019178111^M)
: expect (CONNECT)
: ^M
: ATDT3019178111^M^M
: CONNECT
:  -- got it 
: send (\d)
: Serial connection established.
: Using interface ppp0
: Connect: ppp0 <--> /dev/modem
: kernel does not support PPP filtering
Jul 26 14:08:39 stodolsklap kernel: PPP BSD Compression module registered
Jul 26 14:08:39 stodolsklap kernel: PPP Deflate Compression module registered
: local  IP address 66.44.1.195
: remote IP address 208.59.89.132
: primary   DNS address 207.172.3.8


11) GENERAL ITEMS

 If attemped insertion of a modem driver evokes a complaint like:
         unresolved symbol do_SAK_R9a0bcb74
 then the kernel-headers using in compiling the modem drivers 
 do not match those of your current kernel whose KernelVersion is displayed by:
    uname -r
 and whose kernel config file is often located at /boot/config-KernelVersion
 The section above "COMPILING DRIVERS, for Newbies" relates how to make corrections.

 There are definitely IPs whose login protocols are Linux hostile.
 If you cannot achieve a login, try another Internet Provider (IP).
 or ask for someone on discuss@linmodems.org to test your IP.
 
  For general upto date advice:   
    http://linmodems.technion.ac.il/ 
    http://linmodems.technion.ac.il/resources.html 
 for a general PCI_ID database
    http://www.yourvote.com/pci/ 
    The Vendor listing is  http://www.yourvote.com/pci/vendors.txt 
      with some Device IDs too.
 the original Linux winmodems URL is: 
    http://linmodems.org 
 with a mailing list on Winmodems: 
    discuss@linmodems.org 
 whose archives can be searched at: 
    http://linmodems.technion.ac.il/wgindex.html 
 There is an extensive modem database at: 
   
 USB modem information:  http://www.linux-usb.org/USB-guide/x332.html  
   http://start.at/modem/
 If your IP is MSN, the Microsoft Network, 
   then for UserName in dialup scripts under Linux, instead use:
     MSN/UserName

---------- end FOLLOW UP STEPS ---------------
 
END
cat<<END>>$RECORD

 The COMPILING DRIVERS section of $RECORD.2 is a MUST READ,
 if you are not experienced in configuring kernel-source/ .
 Configuration is an ESSENTIAL step, prior to modem driver compiling.

END
if [ "$DISTR" = "debian" ] && ! [ "$BEST"  =  "" ] ; then
    echo " For Debian users, the kernel-headers-$SYS.deb can be used instead of kernel-source/" >> $RECORD
    echo >>  $RECORD
fi

if [ "$BN" = "scanModem" ] ; then
  if [ "`pwd`" != "/" ] ; then
    echo  "  Please read $RECORD, $RECORD.2 , and ModemDriverCompiling.txt"
  fi

  if test -z $FAST ; then
    rm $TMPM $TMPM.* &> /dev/null
  fi
else 
  echo  -------------- ending SCANMODEM section ---------------- >>$RECORD
fi
echo


