IBM Thinkpad T40


Actually, I didn't install FreeBSD right on this machine, I had a working 5.1-CURRENT installation (from November 2003) on a larger harddisk on my old laptop, so I just swapped drives and booted FreeBSD on the new machine - which surprisingly worked fine (Windows XP, which I have on a second partition, didn't like that and needed to be reinstalled... *evilgrin*).

Kernel configuration

My custom kernel configuration includes support for the soundcard (device pcm), support for the CardBus WLAN card I have and USB2.0 support (although I don't have any USB2.0 devices). Of course, I removed all the drivers and options that I don't need.

You probably need to put

into /boot/device.hints in order to detect the CardBus slots properly.


This laptop comes with an ATI Mobility Radeon 7500 which has 32MB of Video RAM. It runs fine with XFree 4.3.0, and it even supports hardware acceleration (I get about 500-600 fps with glxgears). The only problem is that X doesn't survive a suspend/resume cycle if you have hardware acceleration enabled, so I disabled it in my XF86Config file (I don't have a big need for DRI anyway). I hope this gets better with the next XFree86 release.


ACPI support on the T40 is quite good. S3 works (suspend/resume), S5 works too (soft power-off), and I can control CPU speed via various hw.acpi.cpu sysctls.

I patched my DSDT since compiling the ASL output from acpidump with iasl gave some warnings and one error, but I'm not sure if this is really necessary, the original DSDT booted fine without errors, too.

I've uploaded the ASL file, so you can see what I changed. I also hardcoded that I'm running "Windows 2001" (there's a tunable hw.acpi.os_name that is intended to do this without ASL patching, but it somehow doesn't work on my box), because there are many checks for Windows in the code. I also added some comments, as far as I could find out which control method is called at which event.

There are some problems with ACPI, though:



The integrated 'Intel 82801DB (ICH4) Pro/100 VE Ethernet' card is detected as device fxp0 and works as expected.


As this laptop is a true Centrino type machine, it features an integrated Intel WLAN card ('Intel PRO/Wireless LAN 2100 3B Mini PCI Adapter'). There is no Open Source driver for this card (yet), but if you're running a very recent -CURRENT, you can try Bill Paul's NDIS miniport driver wrapper, which allows to run Windows binary drivers.

First, download and unpack the Windows XP driver for the WLAN card from IBM's Device Driver Matrix. Unfortunately, this is a .exe file, so you will need to unpack the file in Windows.

Once you have unpacked the driver, locate the .INF and .SYS file which come with this package (I used the Windows XP version and not the Windows 2K version of the driver).

Then you need to compile the ndis.ko and if_ndis.ko modules:

# cd /sys/modules/ndis ; make ; make install
# cd /sys/modules/if_ndis
# ndiscvt -i /path/to/driver.INF -s /path/to/driver.SYS -o ndis_driver_data.h
# make ; make install

First load ndis.ko, then if_ndis.ko, and you should see messages like these on your console:

ndis0: <Intel(R) PRO/Wireless LAN 2100 3B Mini PCI Adapter> mem 0xc0200000-0xc0200fff irq 6 at device 2.0 on pci2
can't re-use a leaf (ESS_ID)!
ndis0: NDIS API version: 5.1
ndis0: status: 400100fe
ndis0: status complete
ndis0: status: 4001000c
ndis0: status complete
ndis0: 802.11 address: aa:bb:cc:dd:ee:ff
ndis0: 11b rates: 11Mbps 2Mbps 1Mbps
ndis0: link up

The small WLAN status LED at the bottom of the lid starts to blink and you can use ifconfig ndis0 to configure the device as you would with any other network interface, like setting IP address, netmask, SSID, WEP key etc.


The integrated modem is a WinModem and unfortunately, there's no FreeBSD driver available.

Cardbus, USB, Infrared, parallel, S-Video-Out

Cardbus works, USB seems to have a problem with suspend/resume (see above), parallel should work; I haven't tested the Infrared and the S-Video-Out ports, but I guess they don't work.


The laptop is equipped with the so-called 'UltraNav' device - which is basically a Trackpoint (the red nipple in the center of the keyboard) and a separate Touchpad. If you have both of them enabled in the BIOS, the third mouse button doesn't work, so I disabled the Touchpad (which I don't like anyway - Trackpoint rocks! :-) ).

On boot, I see some error messages like these:

start (b0000000) < sc->membase (c0200000)
start (b0000000) < sc->pmembase (e8000000)
They seem to be Cardbus related, but since everything seems to work fine, I don't care.