MultiTech PCI Modems on Solaris 10 x86

March 2008

As of Solaris 10 8/07, support for PCI-based modems is not included. With the latest patches, the asy driver will now attempt to probe for modems on the PCI bus, but the code does not work with all PCI modems. Specifically, a solution was needed for the the MultiTech Systems MT5634ZPX PCI modem. Solaris Express supports PCI modems, but enterprise users may not be able to move away from Solaris 10 yet.

However, it turns out that the asy driver can be built from the sources on the Open Solaris project. This driver will support PCI modems, including the MultiTech models. The driver has been tested with the MultiTech MT5634ZPX PCI modem, but may work for other models as well.

Warning! Altering drivers in the /kernel tree could potentially cause your system to be unable to boot. Always back up your system before making system changes, and have a bootable CD available to recover your system if necessary.

These instructions assume a 64-bit x86 system. The driver can also be built for a 32-bit system, with the appropriate changes to the Makefile and installation directory.

To build the asy driver as a standalone project, first download the two source files you will need:

(The hyperlinks are to the OpenSolaris CVS repository.)

Organize a directory tree that looks like:

asy/
	asy.c
	sys/
		asy.h

Create a makefile with the following contents

SRCS    =       asy.c
OBJS    =       asy.o
CPPFLAGS=       -I. -D_KERNEL
CFLAGS  =       -m64 -xarch=sse2 -xmodel=kernel

all:            $(OBJS)
                /usr/ccs/bin/ld -r -o asy asy.o

.c.o:
                $(CC) -c $(CPPFLAGS) $(CFLAGS) $<

The compiler flags shown above assume the use of Sun Studio 12.

After building the binary with make, save the original serial driver:

# cp /kernel/drv/amd64/asy /somewhere/asy_orig

Unload the asy driver if it is currently loaded:

# modinfo | grep asy
117 fffffffff3f80000   bae8 106   1  asy (ASY driver)
# modunload -i 117

Copy the new driver into the kernel directory and load it:

# cp asy /kernel/drv/amd64/asy
# modload -p drv/asy

If you are unsure of whether the driver built correctly, you can perform a temporary installation in /tmp, with a symbolic link in the kernel tree. In the event that the driver panics the system, the driver will not exist after a reboot.

# cp asy /tmp/asy
# ln -s /tmp/asy /kernel/drv/amd64/asy
# modload -p drv/asy

Update /dev and /devices:

# devfsadm -i asy -v
devfsadm[2755]: verbose: symlink /dev/term/0 -> ../../devices/pci@0,0/pci8086,244e@1e/pci11c1,5656@2:1
devfsadm[2755]: verbose: symlink /dev/cua/0 -> ../../devices/pci@0,0/pci8086,244e@1e/pci11c1,5656@2:1,cu
devfsadm[2755]: verbose: SUNW_port_link: port monitor ttymon0 added
devfsadm[2755]: verbose: SUNW_port_link: /dev/term/0 added to sacadm

If the asy driver fails to recognize your modem, you may need to add the following line to the end of /etc/driver_aliases, and run devfsadm again.

asy "pci11c1,5656"

Sun's patches may overwrite the asy driver at any point, so be sure to save the new asy driver so that you can reload it later.


(c) 2008 Pegasus Network Technologies, Inc.