4. HSF

4.1. History

A HSF driver first appeared out of the blue in mid-2000 when Olitec released unto the world a binary only driver for their Olitec PCI modem for 2.2.14 kernel, it wasn't long before someone realized that the Olitec modem was based on the Rockwell/Conexant HSF Chipset. Inquiries to Olitec revealed that the driver should work with any HSF chipset as there was nothing in the driver that was specific to the Olitec modems. Many people tried to get the driver to work with non-Olitec modem unfortunately without success, however a few months later and after many hours of work by many people trying a variety of tricks to get the driver to work, several people managed to stumble across the solution. It was a simple one line change to file which solved the problem and the world was left with a working HSF driver, at the time it only worked on 2.2.14 Kernels and Olitec had refused to release the source code to let others try to get it to work with other kernels.

A few months later Olitec released the driver for 2.2.16 and 2.2.17 kernels, this kept the HSF winmodem community satisfied until we came to the day when the 2.4 kernel was released. None of the previous drivers appeared to work with the 2.4 kernel and this caused problems for all those who wanted to upgrade and also for the large number of new users who were using 2.4.* kernel based distributions such as Mandrake 8 and RedHat 7.1. Not a word had been heard out of Olitec since the 2.4 kernel was released, but Conexant had announced that they intended to develop a Linux driver. After many months of waiting for a 2.4.* driver Marc Boucher decided to something about it and wrote a wrapper which allowed an old version of the driver to be used with 2.4.* kernels.

That's where we are now, Marc's wrapper is still in experimental development stage but it works and many people are using it to connect to the internet under Linux.

From the history you'll understand why the next section has to be split into two sections one for 2.2.14 - 2.2.18 kernels and one for 2.4.* kernels. If you don't know what kernel version you have you can find out by using the 'uname -r' command at the console window before proceeding to the appropriate section of this HOWTO.

4.2. Kernel 2.2.14 - 18

4.2.1. Requirements

Having either a 2.2.14, 2.2.16 or 2.2.17 kernel. It has been reported that the driver for 2.2.17 kernels also works with 2.2.18 kernels.

4.2.2. Getting IDs

To get the modem to work you'll need to get the Vendor ID and Device ID. The easiest way to do this is to use the command "less /proc/pci" and scroll until you find the PCI card which has a vendor ID of either 14F1 (Conexant) or 127A (Rockwell) and note the Device ID.

You'll need to make an %HSFModem% line.

Copy down the following line somewhere,

%HSFModem% = ModemX, PCI\VEN_XXXX&DEV_YYYY&SUBSYS_YYYYXXXX

Replacing the XXXX's with your Vendor ID and the YYYY's with your Device ID, so if your Vendor ID is 127A and Device ID is 2015 your line would be,

%HSFModem% = ModemX, PCI\VEN_127A&DEV_2015&SUBSYS_2015127A

You'll need to use this line later on to allow the driver to detect your modem, the next steps you need to take vary slightly depending on what kernel you have so you'll need to refer to the appropriate section depending on whether your kernel version is 2.2.14, 2.2.16 or 2.2.17

4.2.3. If you have a 2.2.14 kernel

Installing a HSF driver on a 2.2.14 kernel

  1. Download the file HSF_V1.01.02_K2.2.14-5.0.tar, it can be obtained from Olitec's site or the mirror.

  2. Copy it to your home directory

  3. In a console window change to your home directory

    [user@localhost]$ cd ~

  4. Decompress the file

    [user@localhost]$ tar xzvf HSF_V1.01.02_K2.2.14-5.0.tar

  5. Enter into the drivers directory

    [user@localhost]$ cd pci_56k_v2

  6. Load up the lin_hsf.inf file in your favorite text editor, under the section [generic] you'll see a few of lines like "%HSFModem% = ModemX, PCI\VEN_127A&DEV_1025&SUBSYS_1025127A" under theses lines add your own %HSFModem% line which you made earlier.

  7. Switch to root

    [user@localhost]$ su

  8. Run the ins_all script to install the driver

    [user@localhost]$ ./ins_all

You will now be able to access the internet by telling your dial-up software that your modem is located at /dev/modem.

The ins_all will only temporarily load the modem driver and the modem driver will be removed when you reboot. So if you re boot you will need to run the ./ins_all program to reload the driver, if you reboot on a regular basis you may want to set the . /ins_all command to automatically run every time your computer loads up.

4.2.4. If you have a 2.2.16 kernel

Installing a HSF driver on a 2.2.16 kernel

  1. Download the file PCI_56K_V2_K2.2.16.tar.gz, it can be obtained from Olitec's site or the mirror Mirror.

  2. Copy it to your home directory

  3. In a console window change to your home directory

    [user@localhost]$ cd ~

  4. Decompress the file

    [user@localhost]$ tar xzvf PCI_56K_V2_K2.2.16.tar.gz

  5. Enter into the drivers directory

    [user@localhost]$ cd pci_56k_v2_k2.2.16

  6. Load up the lin_hsf.inf file in your favorite text editor, under the section [generic] you'll see a few of lines like "%HSFModem% = ModemX, PCI\VEN_127A&DEV_1025&SUBSYS_1025127A" under theses lines add your own %HSFModem% line which you made earlier.

  7. Switch to root

    [user@localhost]$ su

  8. Run the ins_all script to install the driver

    [user@localhost]$ ./ins_all

You will now be able to access the internet by telling your dial-up software that your modem is located at /dev/modem.

The ins_all will only temporarily load the modem driver and the modem driver will be removed when you reboot. So if you reboot you will need to run the ./ins_all program to reload the driver, if you reboot on a regular basis you may want to set the ./ins_all command to automatically run every time your computer loads up.

4.2.5. If you have a 2.2.17 or 2.2.18 kernel

Installing a HSF driver on a 2.2.17 or 2.2.18 kernel

  1. Download the file PCI_56K_V2_K2.2.17.tar.gz , it can be obtained from Olitec's site or the mirror Mirror.

  2. Copy it to your home directory

  3. In a console window change to your home directory

    [user@localhost]$ cd ~

  4. Decompress the file

    [user@localhost]$ tar xzvf PCI_56K_V2_K2.2.17.tar.gz

  5. Enter into the drivers directory

    [user@localhost]$ cd pci_56k_v2_k2.2.17

  6. Load up the lin_hsf.inf file in your favorite text editor, under the section [generic] you'll see a few of lines like "%HSFModem% = ModemX, PCI\VEN_127A&DEV_1025&SUBSYS_1025127A" under theses lines add your own %HSFModem% line which you made earlier.

  7. Switch to root

    [user@localhost]$ su

  8. Run the ins_all script to install the driver

    [user@localhost]$ ./ins_all

You will now be able to access the internet by telling your dial-up software that your modem is located at /dev/modem.

The ins_all will only temporarily load the modem driver and the modem driver will be removed when you reboot. So if you reboot you will need to run the ./ins_all program to reload the driver, if you reboot on a regular basis you may want to set the ./ins_all command to automatically run every time your computer loads up.

4.3. Kernel 2.4.*

4.3.1. Requirements

  • You need a 2.4.* kernel which does not have SMP support.

  • You will also need to have your kernel source available, if you don't have them installed already you can probably find them on your distributions CD.

  • At least version 2.4.0 of ppp (you can find what version of ppp you have installed by using the command pppd --version)

To get the modem working under a 2.4.* kernel you'll need to use the driver intended for 2.2.17 kernels alongside Marc Boucher's hsfcompat wrapper program which lets the driver work with 2.4.* kernels. At the time of writing the hsfcompat driver is on version 1.0d and is still experimental and may cause problem with your system. However I haven't seen anyone have any problem from using the wrapper. For the latest details see hsfcompat's homepage.

4.3.2. Installing

  1. Copy the hsfcompat_24-1.0d.tar.gz file to your home directory

  2. In a console window change to your home directory

    [user@localhost]$ cd ~

  3. Extract the hcfcompat program by using:

    [user@localhost]$ tar xzvf hsfcompat_24-1.0d.tar.gz

  4. Copy the PCI_56K_V2_K2.2.17.tar.gz file into the hsfcompat_24-1.0d directory.

  5. Extract the driver by using:

    [user@localhost]$ tar xzvf PCI_56K_V2_K2.2.17.tar.gz

  6. Load up the file Makefile (Found in the hsfcompat_24-1.0d directory) in a text editor and scroll down to the line which reads SBINDIR=/usr/sbin and replace /usr/sbin with the location of your system bin directory, then scroll down to the line which reads KERNELSRC=/usr/src/linux and replace /usr/src/linux with the location of your kernel source files.

  7. Switch to superuser (root) by using:

    [user@localhost]$ su

  8. In the hsfcompat_24-1.0d directory compile hsfcompat by using:

    [user@localhost]$ make

  9. Install the driver by running: [user@localhost]$ make install

  10. Follow the on-screen instruction which explain how to load the driver into memory and how to have this done automatically.

4.4. Troubleshooting FAQ

4.4.1. When running ./ins_all I get a kernel mismatch error ?
4.4.2. When installing the driver when it tries to load myserial.o I get a segmentation fault ?
4.4.3. On my Laptop the driver seemed to install fine but I can't access my modem on /dev/modem ?

4.4.1. When running ./ins_all I get a kernel mismatch error ?

This means that the driver thinks that you don't have the appropriate kernel version, if you have a variant of the kernel (such as the one that has non-standard name) then you can still get the driver to work by loading up the file ins_all in a text editor and replacing all of the 'insmod -m' commands with 'insmod -f -m'.

4.4.2. When installing the driver when it tries to load myserial.o I get a segmentation fault ?

This is caused by your computer trying to get Plug-and-Play to work with your modem. You can stop it doing this by going to your BIOS and setting an option which tells it not to do that. The settings name varies from BIOS to BIOS but is normally something like PnP OS.

4.4.3. On my Laptop the driver seemed to install fine but I can't access my modem on /dev/modem ?

This is often caused by the modem's device number clashing with that of PCMCIA, you can check if this is the case by entering the command,

[user@localhost]$ ls -l /dev/ | grep 254

You'll see the hsf0 device listed with the major number of 254, if any other device also has the major number of 254 it means there is a clash. You can fix this problem by loading up the ins_all file and change the line which reads "mknod /dev/cnxt c 254 64" to "mknod /dev/cnxt c 253 64".