Free Solaris device drivers

This page contains an assortment of free device drivers, and driver writing tips for Solaris, exclusive to bolthole.com


USB drivers

Featured drivers

Wacom USB Graphire 2 tablet driver (June 14th, 2002)

Includes low-level driver, and Xsun extension module

USB wheel-mouse driver (Last update May 1st, 2003)

Includes low-level driver, and Xsun extension module

USB WingMan attack 2 driver (Last update Oct 27, 2003)

'js' emulates the linux joystick type driver "/dev/js".
Source code here. Binary driver packages available from http://www.opencsw.org/, as "jsdrv".
xmame, the most popular joystick "application", requires a patch to joy_i386.c to make it not assume only linux has "joystick.h".
You will also have to tweak the top-level makefile carefully. Or, just get the xmame binary package from opencsw

Epson USB scanner driver (June 20th, 2002)

Epson USB Scanner driver, written primarily for a "Perfection 610", but may work with other USB scanners.

Logitech USB wheel driver (Nov 23rd, 2001)

Logitech "driving force" USB wheel driver, written in conjunction with my playstation 2 wheel :-)

USB base driver (Nov 23rd, 2001)

Basic USB driver. This can be a starting point for any new USB driver. Or it can simply be a diagnostic tool to tell you what type of endpoints are available on a USB device that does not have a driver already.

USB driver writer's primer

As an additional resource for anyone else interested in writing USB drivers for solaris, I am writing a USB driver orientation guide.

If running Solaris 8, Be sure to install the latest version of patch 109897

Other drivers

ACPI driver (intel only)

Unfortunately, the only thing this "acpi" driver lets you do, is power off your x86 system using software. But it is currently the ONLY way to do that. Plus, since it maps all the ACPI registers, it could be expanded to do full ACPI handling, by someone with enough motivation.

CPU temperature monitoring(intel only)

If you have a "winbond w83781d" chip in your system, you can use my "health" driver.

"SB128/SB16" driver

(Jointly developed with Juergen Keil)

If you have a "soundblaster PCI 128" or PCI 16 card lying around , you can take a look at the sbpci driver. It is a sample non-streams audio card driver, that may be useful for anyone interested in writing a sound card driver from scratch.

However, for day-to-day use, you will probably be more interested in Juergen's more recent work on his newer audio framework drivers, that support the soundblaster PCI, and many other sound cards as well.

Historical AGP driver

I am keeping a tarball here of my old agp driver. It was the first public agp driver for solaris. It was specifically written for intel 440bx based motherboards. It had a bug in it somewhere, where it couldnt quit FULLY support the xorg calls to use it, but it is 99% feature-complete. AGP-accessible memory has appeared to be successfully be allocated and de-allocated.

Download: agpgart0.9.1.tar.gz (March 15 2003)
I'm happy to note that Sun has made use of this as a starting point, and there is now a WORKING agpgart in opensolaris:
http://cvs.opensolaris.org/source/xref/usr/src/uts/i86pc/io/agpgart/agpgart.c
I was very happy to note that one of the Sun engineers wrote a very informative blog entry about the new sun agpgart driver, which also mentions its specific roots as being originally from my humble driver, above :-)
Side note: My driver could most likely be compiled for earlier versions of solaris than sol10, (unlike the opensolaris driver), but this has not been confirmed.

OpenGL hardware acceleration

Related to AGP: I'm reviving Utah-GLX. It's an older GLX module for xfree86 that used to only work under xfree3.x. I've ported it to work under xfree4. Other people have also rejoined the project, to improve support for some older cards. There are binaries available for limited 3d hardware acceleration, for use with a stock xfree86 4.2 X server.

Volunteers are still needed for the UTAH-GLX project!!

dmamem

Primarily for future versions of utah-glx, the purpose of /dev/dmamem is to allow a userspace program to request allocation of a contiguous chunk of physical memory. (The size available is dependant on your actual system use of memory at the time of request).

It is assumed that the userspace program has mmaped access to some kind of hardware device that wants to use physical memory, for DMA (Dynamic Memory Access) purposes. The driver also lets you mmap the allocated memory into the program's address space. It is presumed that the process is a ROOT process, since only root should have direct access to things that can read and write from arbitrary physical memory!!

I'm not aware of any other application for this driver. But if you have one, feel free to use my driver, and let me know that someone else is getting use out of it!

dmamem.tar (July 15th, 2003)

Warning: due to limitations in the current sun DDI framework, it does not use a clean method of handling the mmap. See my fb driver for a cleaner example, if you are looking for how to do general mmap handling from a driver.


Driver tools and partial frameworks

Generic PCI driver base

PCIbase.tar (Nov 21, 2003)

This is a generic starting point for all non-STREAMS drivers that will be controlling a PCI device. Amoung other things, it contains a utility script called "printregs" that will print out possible register mappings for any particular PCI device on your system that you specify. It also has a TIPS HTML doc which I copy from time to time here for easy reference.

Contributed GLD driver "framework"

Michael Rice was kind enough to contribute RGDT, the "Rice GLD Driver Template" :-)

If you're looking to start your own GLD driver, his generic template is a lot more commented than my one below!

Example for mmaping card memory

Once you've looked through my pcibase framework, and you want an example of how to do device memory mapping, see my fb driver. Note that sun's "sample framebuffer driver" driver source code, does it WRONG.

Unfinished drivers

Partial GLD-based netgear network driver

I have the framework of a GLD-based driver. It uses's Sun's "Generic Link Device" API. It loads as a GLD-compliant driver, but doesnt do anything, since three's nothing specific to any hardware. I originally intended it as a starting point for all those unsupported dlink/netgear cards, so I call it my fanet driver, after the "fa310" card. Its untested, and may have a few bugs in it. You may be better off with Michael Rice's template, above.

If you're more ambitious and you want to write a full "DLPI" driver for some network hardware, I recomment you use the "psli" sample driver from sun as a base., rather than the "ae" sample driver. But it is still probably wise to LOOK at how the sample ae driver handles things.

UDMA driver for HPT controller

Details about my HPT driver can now be found on the separate Highpoint 366 Solaris driver page.

Aiptek USB videocam driver (OV511/OV7260 hardware)

This one seems to have a little trouble doing reads of the main USB bridge hardware. There are registers that have default values, that are showing up as 0. There are checks in the code that show it is failing. For example,
"USB reg at 1a should be 0x4f: is ..."
If someone can find a way to get that bit working, it should be almost done. I have it transmitting isochronous packages of the expected size. Trouble is, they're all zero length right now.

Download aipcam.tar.gz


Drivers I have not written

Maxim Sadovski has provide a USB ethernet driver, usbnet.tar.gz. It should work on the following types of hardware: Note that it does not support hot-plugging or power management.

The "aperture driver" from xfree86 is NOT written by me, but by Doug Anson and David Holland. I have it here because it is not easy to find, otherwise. The "aperture" driver does essentially what "xsvc" does in solaris 2.5.1 and later. But xsvc source is not publically available, whereas this source IS available. So I put it here in hopes of aiding anyone looking to do a DRI port for Solaris.

Along those lines, I have a page with guesses on what is needed to do a DRI port for Solaris. Feel up to a challenge?

To aide in that effort, I am working on a driver to provide /dev/agpgart under Solaris. See my AGP driver, above.


Sun used to have a "certified by sun" driver page, at http://www.sun.com/io_technologies/ihv-drivers.html. It also had driver test suites, which were freely downloadable! Unfortunately, sun.com no longer exists.

Did your system crash?

Well, I'm sorry about that. I dont guarantee my drivers to be bug-free. I dont get paid for this, ya know :-) But if you'd like to help me get rid of the bug, see my page on generating a kernel stack trace


PS: If you're looking for a part-time consultant, you can look at my resume :-)
Bolthole Top - Solaris Pages - Search Bolthole.com
Written by:Philip Brown