Items of Interest
Dell Inspiron 3800 and Debian GNU/Linux: Revisited

I have been using Linux for some time now, but I have yet to take it for a test drive on a laptop, so I decided it was finally time. (The last Slashdot Meetup at Maude's certainly peaked my curiority, too. I had no idea a WiFi card could be so much fun.)

What kind of hardware does the Inspiron 3800 pack?

The 3800 series was available in a couple screen sizes, but other than that it's pretty standard. That's good, as this guide will be valid for configurations somewhat different from my own. As to PC Cards, we all have our own favourite cards and I'll discuss playing with mine. Yours will no doubt differ.

My system has the 12.1" 800x600 Active Matrix TFT display, a 500MHz Celeron (66MHz FSB) processor, 160MB PC100 (128MB + 32MB) RAM, 4.8GB Fujitsu IDE hard disk, ATI Rage Mobility M1/P 8MB AGP 2x video card, a Maestro 3i sound card coupled with an ActionTek 56K internal modem, and a Samsung 24X modular CD-ROM drive. My assorted PC Cards include a Xircom 10/100 (half duplex) card and a Linksys 802.11b WiFi card. (Not from Dell, of course.)

When it comes down to configuration, these are the items of most interest:

Component Compatibility Status
ATI Rage Mobility M1/P 8MB AGP 2X Yes (1)
ESS Maestro 3i Yes (OSS & ALSA) (2)
ALPS Glidepad/Stickpointer Yes
USB Yes
PCMCIA slots (2 x II or 1 x III) Yes
Infrared (IR) port Yes
BIOS interface Yes (3)
Advanced Power Management Yes (4)
ActionTek 56K (combined with ESS) No Support (5)
Ultra DMA mode 2 IDE controller Yes

  1. Despite the Rage prefix, it is actually a Mach64 based graphics card. It works out of the box with XFree86 v4.x. If you want accelerated 2D/3D support you will need to patch your kernel and compile and install the mach64 DRI branch. There is experimental support for the S-Video TV out.
  2. Works with OSS since Linux 2.4.3.
  3. There is kernel support for both controling the fan and monitoring CPU temperature.
  4. The suspend to disk function of the 3800 requires you to have a special disk partition to which it will save the state of your system. I never use this and I have no space left to build such a partition, so I will not be covering this option. It is covered by others, however. (You can use suspend key that shares the ESC key, which is suspend to RAM, without incident, however.)
  5. The ActionTek 56K internal modem is coupled with the ESS Maestro sound card. At this time there is still no known support for this device.

Here's a quick list of kernel options to enable for full support of the 3800's hardware (other options are up to you):

Motherboard Chipset Support (Recommended)
CONFIG_BLK_DEV_PIIX CONFIG_PIIX_TUNING
ATI Rage Mobility M1/P
CONFIG_AGP CONFIG_MTRR CONFIG_DRM_NEW
ESS Maestro i3
CONFIG_SOUND CONFIG_SOUND_OSS CONFIG_SOUND_MAESTRO3
ALPS Glidepad/Stickpointer
CONFIG_PSMOUSE
USB Support
CONFIG_USB CONFIG_USB_UHCI_ALT CONFIG_INPUT CONFIG_INPUT_MOUSEDEV CONFIG_USB_HID
PCMCIA Support
CONFIG_PCMCIA
IRda Support
CONFIG_IRDA CONFIG_IRLAN
BIOS Interfacee
CONFIG_I8K
Advanced Power Managment (APM) Support
CONFIG_PM CONFIG_APM

While I am going to discuss configuring drivers for the components above in that order, keep in mind that many of those items require specific kernel options be enabled. I recommend you read everything and not just dive right in. Where applicable, I am going to discuss Debian specific possibilities and shortcuts since that's my distribution of choice.

Configuring the ATI Rage Mobility M1 (Mach64 chipset)

The M1 will work happily with XF86 v4.x and the ati driver option. If you want access to the chipset's more interesting features you will need to download and compile some things, however.

I am pleased to report that both S-Video (TV) out and VGA are supported on i386. It works nearly out-of-the-box with Lennart Poettering's atitvout utility. His card is virtually identical to those that shipped with the Inspiron 3800.

Simply download a copy of version 0.4. Then, untar it and run make.

jasonb@rachael:~/src$ tar -zxvf atitvout-0.4.tar.gz
atitvout/
atitvout/lrmi-0.6/
...
atitvout/vbecall.c
atitvout/mach64.h
atitvout/mach64.c
jasonb@rachael:~/src$ cd atitvout && make

Once that's complete, you can verify the utility works for you. I recommend running it with the help argument (./atitvout help). It will give you a list of supported commands and other helpful notes. If you want to dive right into testing it, grab your S-Video cable or a VGA cable and plug either into the corresponding port on your laptop. Ensure either is plugged into a powered-on device you wish to test with. (I used a close VGA monitor.)

Now, run atitvout in detect mode (you'll want to do this as root or change the permissions on /dev/mem accordingly for your user):

rachael:/home/jasonb/src/atitvout# ./atitvout detect
CRT is attached.
LCD is attached.

If you see output similiar to the above, you are good to go. Now run:

rachael:/home/jasonb/src/atitvout# ./atitvout auto
rachael:/home/jasonb/src/atitvout# ./atitvout c
rachael:/home/jasonb/src/atitvout# ./atitvout l

There is no status output, but you will receive visual feedback in the form of your other device coming to life. In the commands shown above my secondary device came to life (a CRT), then I deactivated my LCD, then finally I deactivated the CRT in favour of the LCD. All in all, extremely cool. This is definately one feature I was pleased to find is now supported under Linux on the Rage Mobility M1.

Next up is accelerated 2D/3D support and this item is still a bit of a challenge. Hardware acceleration is provided via the Direct Rendering Infrastructure for X which consists of two important components: the X driver for your video card and a Direct Rendering Manager kernel driver for your card. Mach64 chipset support is available, but as of X 4.2.1 it is still not part of the standard distribution. Instead, it is a branch in X CVS.

Fortunately, many people have old Mach64 graphics cards and desire Direct Rendering Infrastructure support, so there are now serveral ways of acquiring support for this card. I am going to walk through two ways, the first of which I consider the brute force method, and the other the easy way. The brute force method is to simply checkout the Mach64 X DRI branch and compile X. The easy way to is to download a Debian package compiled against the latest X package in Debian and simply use that. The former is available to all. The latter is Debian specific.

Either method will require you to enable AGP support (/dev/agpgart) (CONFIG_AGP)in your kernel. You will also benefit from enabling MTRR (Memory Type Range Register) (CONFIG_MTRR) support; It improves performance. You will want to compile both into your kernel. Upon boot up, your logs will have something like this:

rachael kernel: mtrr: v1.40 (20010327) Richard Gooch
  (rgooch@atnf.csiro.au)
rachael kernel: mtrr: detected mtrr type: Intel
...
rachael kernel: Linux agpgart interface v0.99
  (c) Jeff Hartmann
rachael kernel: agpgart: Maximum main memory to use for
  agp memory: 122M
rachael kernel: agpgart: Detected Intel 440BX chipset
rachael kernel: agpgart: AGP aperture is 64M @ 0xf4000000

First, let's walk through the brute force way. Fortunately, this path has been walked by many before, and among them is Colin Leroy, who has written an excellent tutorial to get the Mach64 X CVS branch compiled. As a bonus he provides a shell script that will nearly do it all for you!

To build X, you will need the typical assortment of compiler tools, glide2, glide3, ncurses5, bison, flex, libfreetype6, libz, and 400MB of free space. With those in hand, download Leroy's build script and put it in your favourite build directory. You will also need wget installed for the downloading and cvs installed to fetch the Mach64 branch. The script will insist that you not build as root, so your home directory is a good choice. I used ~/src. (If cvs complains about a missing .cvspass file just touch one in your home directory.)

jasonb@rachael:~$ touch ~/.cvspass
jasonb@rachael:~$ mv driplusxv.sh ~/src
jasonb@rachael:~/src$ chmod 755 driplusxv.sh
jasonb@rachael:~/src$ ./driplusxv.sh
...

The script will download the Mach64 CVS branch, patch it with support for the X Video extension, which it lacks, and finally begin a compile. Once complete, it will move your current XFree86 tree to /usr/X11R6-bck and then copy your newly compiled X to /usr/X11R6. This will break any package management system you have on your system. Consider yourself warned!

Finally, the script will build the DRM kernel module for your running kernel. Your kernel headers must match your running kernel for this to work. If they do not, build a new kernel and install it so things sync up. The compiled module, mach64.o, will be copied into /lib/modules/`uname -r`/kernel/drivers/char/drm.

When you next start X, you will have full DRI support for your Mach64 card!

On a Debian GNU/Linux box, things are much simpler, thanks to Michel Daenzer. He has compiled Debian packages for i386 and PowerPC that seemlessly install along side your existing X packages (and replace others as necessary) Add the following line to your /etc/apt/sources.list and run apt-get update. You will likely need to be using Debian's Testing distribution, which is 'Sarge' as of this writing, for this to work.

deb http://people.debian.org/~daenzer/dri-mach64/ ./

The package you want to install is xserver-xfree86-dri-mach64 which will pull down xlibmesa3-dri-mach64 as a dependancy. You will see a few warnings, but do not worry about those. Things are being installed correctly.

You're half way there. Now you need to install the kernel module source package. Your running kernel and the headers in /usr/src/linux must match. If your kernel is in another directory, you will need to symlink it to that location. (Alternately, you can specify a command line like make TREE=/usr/src/linux-2.4.18 -f Makefile.linux and that will ensure that your running kernel's include/ directory is found.)

rachael:/# cd /usr/src
rachael:/usr/src# apt-get install drm-mach64-module-src
...
rachael:/usr/src# tar -zxvf drm-mach64.tar.gz
modules/drm-mach64/
modules/drm-mach64/Config.in
modules/drm-mach64/debian/
modules/drm-mach64/debian/buildpkg
...
modules/drm-mach64/mach64.h
modules/drm-mach64/mach64_dma.c
modules/drm-mach64/mach64_drm.h
modules/drm-mach64/mach64_drv.c
modules/drm-mach64/mach64_drv.h
modules/drm-mach64/mach64_state.c
...
rachael:/usr/src#

rachael:/usr/src# cd modules/drm-mach64

rachael:/usr/src/modules/drm-mach64# make -f Makefile.linux
=== KERNEL HEADERS IN /lib/modules/2.4.18/build/include
=== SMP=0 MODULES=1 MODVERSIONS=1 AGP=1
=== Compiling for machine i686
=== WARNING
=== WARNING Use 2.4.x kernels ONLY !
=== WARNING
cc -O2 -c gamma_drv.c -o gamma_drv.o
...
rachael:/usr/src/modules/drm-mach64#

After a much more impressive looking compile phase than what I have above, your new mach64.o kernel module will be ready. After that, you'll need to copy it into your kernel modules directory (and optionally clean the build).

rachael:/usr/src/modules/drm-mach64# mkdir -p \
    /lib/modules/`uname -r`/kernel/drivers/char/drm
rachael:/usr/src/modules/drm-mach64# cp mach64.o \
    /lib/modules/`uname -r`/kernel/drivers/char/drm
rachael:/usr/src/modules/drm-mach64# make -f Makefile.linux \
    clean
rm -f *.o *.a *~ core
rachael:/usr/src/modules/drm-mach64#

Regardless of which method you select, your final step will be to run startx as your user to verify X is working. You ough to see something like this in your XFree86.0.log:

(II) Primary Device is: PCI 01:00:0
(II) ATI:  Candidate "Device" section "Generic Video Card".
(II) ATI:  Shared PCI/AGP Mach64 in slot 1:0:0 detected.
...
(II) ATI(0): [drm] installed DRM signal handler
(II) ATI(0): [DRI] installation complete
(II) ATI(0): [drm] Added 128 16384 byte DMA buffers
(II) ATI(0): [drm] Mapped 128 DMA buffers at 0x41301000
(II) ATI(0): Direct rendering enabled

Once you're up, you can experiment with the DMAMode option for the ati driver, though you need not do this under normal circumstances. The possible options are "async", "sync", and "mmio" in order from best to worst performance. You can play with these DMA modes in your XF86Config-4 file as shown below:

Section "Device"
  Identifier  "Generic Video Card"
  Driver  "ati"
  Option  "DMAMode"  "async"
EndSection

The output you receive from the kernel DRM will appear much like this:

[drm] Setting 32-bit pci dma mask
[drm] Allocating dma descriptor ring
[drm] descriptor ring: cpu addr 0xc7ef8000,
    bus addr: 0x07ef8000
[drm] Starting DMA test...
[drm] starting DMA transfer...
[drm] waiting for idle...
[drm] waiting for idle...done
[drm] DMA test succeeded,
    using asynchronous DMA mode

Your best bet, and the default if you do not specify a DMAMode, should be asynchronous DMA mode.

Congratulations! X is now using your Mach64 based Rage Mobility to its fullest extent.

(If you're curious, and I know you are, here is my glxgears scorecard without and with DRI. The scores without DRI are actually worse because attempting to drag the glxgears window around results in a lagged window following your mouse several seconds after you've moved it.)

jasonb@rachael:~$ glxgears
511 frames in 5.0 seconds = 102.200 FPS
500 frames in 5.0 seconds = 100.000 FPS
400 frames in 5.0 seconds = 80.000 FPS
500 frames in 5.0 seconds = 100.000 FPS

jasonb@rachael:~$ glxgears
1054 frames in 5.0 seconds = 210.800 FPS
1018 frames in 5.0 seconds = 203.600 FPS
1065 frames in 5.0 seconds = 213.000 FPS
1065 frames in 5.0 seconds = 213.000 FPS
1064 frames in 5.0 seconds = 212.800 FPS

ESS Maestro 3i

The Maestro 3i chipset is supported under Linux since early 2.4. When you compile, you will want to select the option ESS Maestro3/Allegro (CONFIG_SOUND_MAESTRO3), not Maestro/Maestr2. The driver is experimental, so you will need to toggle prompting for development drivers on, as this driver is considered experimental.

I compiled support as a module, so it was necessary for me to add an entry for maestro3 to my /etc/modules file. Alternately you can install the discover package under Debian and on start up it will automagically probe your hardware and load modules as needed. Either method works.

Upon loading, you will see output like the following in your logs:

maestro3: version 1.22 built at 20:54:30 Dec 28 2002
PCI: Found IRQ 5 for device 00:08.0
PCI: Sharing IRQ 5 with 00:08.1
maestro3: Configuring ESS Maestro3(i) found at IO 0xD800 IRQ 5
maestro3:  subvendor id: 0x00bb1028
ac97_codec: AC97 Audio codec, id: 0x8384:0x7609 (SigmaTel STAC9721/23)

The careful reader will notice IRQ 5 is being shared with another device. That's the ActionTek 56K modem which is not yet supported under Linux.

And that's all there is to sound support, enjoy!

ALPS Glidepad/Stickpointer

You will want to include PS/2 mouse support (CONFIG_PSMOUSE) in your kernel to use the ALPS device. Thereafter you will be able to use the glidepad and the stickpointer in X or from the console.

You can install tpconfig to configure the device, though by default it works fine. If you're running Debian, the package name is the same and you can install tpconfig via the usual method.

The only thing you can currently do with an ALPS touchpad is to completely disable tapping mode, meaning you cannot tap the pad to simulate a left mouse click. This may be desirable if you never use the feature, but sometimes trigger it accidently.

You can accomplish this by running tpconfig as root as shown below:

rachael:/home/jasonb# tpconfig --tapmode=0
...
Found ALPS Dual StickPoint/Glidepad.
ALPS Tap is OFF

You cannot do this from within the X Window System and the GPM Mouse Manager must not be running. This command is best run from a startup script before you load GPM.

USB Support

USB is fully supported. You will want to use the UHCI USB controller option for proper support. (CONFIG_USB_UHCI_ALT) Upon bootup you should see something like this in your kernel log:

rachael kernel: uhci.c: USB Universal Host Controller
  Interface driver v1.1
rachael kernel: uhci.c: USB UHCI at I/O 0xdce0, IRQ 11
rachael kernel: usb.c: new USB bus registered, assigned
  bus number 1
rachael kernel: hub.c: USB hub found
rachael kernel: hub.c: 2 ports detected

As to devices, I am using a Microsoft IntelliEye Mouse. The easiest way to set it up for usage under X along with the ALPS touch device is to read the USB device configuration guide.

My own XF86Config-4 sections for pointing devices looks like this:

# Entry to support USB mouse
# You need input.o, mousedev.o, and hid.o from 2.4.x series
# for this to work properly.

Section "InputDevice"
  Identifier  "Secondary Mouse"
  Driver  "mouse"
  Option  "SendCoreEvents"
  Option  "Device"  "/dev/input/mice"
  Option  "Protocol"  "IMPS/2"
  Option  "ZAxisMapping"  "4 5"
  Option  "Buttons"  "5"
EndSection

Section "InputDevice"
  Identifier  "Configured Mouse"
  Driver  "mouse"
  Option  "CorePointer"
  Option  "Device"  "/dev/psaux"
  Option  "Protocol"  "PS/2"
  Option  "Emulate3Buttons" "true"
  Option  "ZAxisMapping"  "4 5"
EndSection

Section "ServerLayout"
  Identifier  "Default Layout"
  Screen    "Default Screen"
  InputDevice  "Generic Keyboard"
  InputDevice  "Configured Mouse"
  InputDevice  "Secondary Mouse"
EndSection

PCMCIA Support

I am using the Linux kernel PCMCIA card services. It seems to work fine. You will need to have the pcmcia-cs package installed to get very far. It provides the binaries necessary to do interesting things with your cards.

You'll want to enable the PCMCIA option (CONFIG_PCMCIA) during kernel configuration. (You can ignore the CardBus option, as the Inspiron 3800 does not support CardBus.) When PCMCIA support initializes, it should look something like the following:

rachael kernel: Linux Kernel Card Services 3.1.22
rachael kernel:   options:  [pci] [cardbus] [pm]
rachael kernel: PCI: Found IRQ 11 for device 00:03.0
rachael kernel: PCI: Sharing IRQ 11 with 00:03.1
rachael kernel: PCI: Sharing IRQ 11 with 00:07.2
rachael kernel: PCI: Found IRQ 11 for device 00:03.1
rachael kernel: PCI: Sharing IRQ 11 with 00:03.0
rachael kernel: PCI: Sharing IRQ 11 with 00:07.2
rachael kernel: Yenta IRQ list 0698, PCI irq11
rachael kernel: Socket status: 30000010
rachael kernel: Yenta IRQ list 0698, PCI irq11
rachael kernel: Socket status: 30000006
rachael cardmgr[246]: starting, version is 3.1.33
rachael cardmgr[246]: watching 2 sockets
rachael cardmgr[246]: Card Services release does not match
rachael kernel: cs: IO port probe 0x0c00-0x0cff: clean.
rachael kernel: cs: IO port probe 0x0800-0x08ff: clean.
rachael kernel: cs: IO port probe 0x0100-0x04ff:
    excluding 0x270-0x277 0x4d0-0x4d7
rachael kernel: cs: IO port probe 0x0a00-0x0aff: clean.

If you've never used PCMCIA under Linux before, it's actually fairly easy. You can generally insert and eject cards physically as often as you'd like. The cardctl command allows you to do software inserts and ejects of the card of your choice or all cards. For example:

rachael:/home/jasonb# cardctl status
Socket 0:
  5V 16-bit PC Card
  function 0: [ready]
Socket 1:
  no card

I have a small pile of PCMCIA cards, but the only ones I currently use on this laptop are the Xircom 100Mbps (half duplex) ethernet adapter and a Linksys WPC11v3 802.11b WiFi card. For an extensive discussion on configuring Prism2 chipset based WiFi cards, like my Linksys card, you can read my second Linux wireless article or my HostAP configuration guide.

As to the Xircom PCMCIA card, it uses the xirc2ps_cs.o module which you can obtain by enabling the CONFIG_PCMCIA_XIRC2PS option during kernel configuration.

The only quirk I have encountered using PCMCIA under Linux 2.4 (2.4.18 specifically thus far) is inserted cards are not recognized when the machine is first powered on. It's necessary to reinsert them manually (or via cardctl eject && cardclt insert) for them to be recognized and initialized. Otherwise, they are detected as anonymous flash memory cards.

Infrared (IR) Port

I used an IR port for networking for the first time only a few months ago (yeah, at a Slashdot Meetup). It was quite cool, and I cover this mostly for the coolness factor.

The 3800 does have an IR port and you can enable it in the BIOS (Fn-F1). You will need to compile your kernel with quite a few options for this to work. I recommend:

CONFIG_IRDA=m
CONFIG_IRLAN=m
CONFIG_IRNET=m
CONFIG_IRCOMM=m
CONFIG_IRDA_CACHE_LAST_LSAP=y
CONFIG_IRDA_FAST_RR=y
CONFIG_IRDA_DEBUG=y
CONFIG_IRTTY_SIR=m
CONFIG_IRPORT_SIR=m

To speak to the IR port, you will want to download and compile the irDA Utils. If you are using Debian, the irda-tools and irda-common packages will suffice. (There's no depends on irda-common, so you need to specify both explicitly.)

To verify your IR port is being detected, run findchip:

rachael:/usr/src/linux# findchip -v
Found SMC FDC37N958FR Controller at 0x3f0,
  DevID=0x01, Rev. 1
    SIR Base 0x3f8, FIR Base 0x270
    IRQ = 4, DMA = 3
    Enabled: yes, Suspended: no
    UART compatible: yes
    Half duplex delay = 3 us

After that, you need another properly configured device to connect to, such as another laptop. For complete configuration of irDA and irNET, I refer you to Jean Tourrilhes' irDA quick tutorial.

Inspiron 3800 BIOS interaction

Much to my surprise, there is a kernel module that allows you to interact with the Inspiron's BIOS. You can toggle the exhaust fan mode between off, low, and high states. You can also, it naturally follows, monitor the current CPU temperature. Both these feats can be accomplished using Massimo Dal Zotto's i8kutils package. Additionally, you can remap the volume keys such that a sound mixer (or any other program) can be run, allowing you to increase, decrease, and (un)mute sound. Nifty indeed.

You can either fetch i8kutils from Zotto's directory or install the Debian package by the same name using the usual procedure. As of this writing, the most recent version of the package is available on Debian mirrors, but not in Zotto's directory.

Dell laptop support (CONFIG_I8K) must be compiled either into your kernel or as a module. If you compiled it as a module, make sure you have i8k in your /etc/modules file so it's loaded on startup.

With that out of the way, you can use i8kctl to manipulate the speed of your fan to your liking. It accepts fan speeds for both left and right fans, but the Inspiron 3800 only has a right fan, so you will want to substitute the dash (-) character for the left fan speed. For example:

rachael:/usr/src/linux# i8kctl fan - 1
-1 1

The above command will set the speed of the right fan to low and ignore the left fan entirely. Running the command without any arguments at all will return in a nicely formatted fashion the contents of the /proc/i8k entry.

If you would like to take a more hands off approach, you can use i8kmon in daemon mode and specify in its configuration file at what temperature values you wish it to change the fan speed. The i8kutils package comes with an example configuration file which you can use. If you are using Debian, placing it in your /etc directory as /etc/i8kmon with the daemon option enabled will allow the daemon to run at startup.

As to the Inspiron sound keys (Fn-PgUp, Fn-PgDn, Fn-End), you can use the i8kbuttons program to detect each keyboard event and run the application of your choice. A sample configuration file for this also comes with i8kutils. Again, placing this configuration file in your /etc directory as /etc/i8kbuttons on Debian will allow the daemon to run on startup. My configuration uses the aumix package available in Debian by the same name. The file has these entries:

# Change these sample commands with your mixer commands!!!
I8KBUTTONS_UP_CMD="aumix -v +10"
I8KBUTTONS_DOWN_CMD="aumix -v -10"
I8KBUTTONS_MUTE_CMD="aumix -v 0"

i8kutils comes with a detailed README that explains other methods of mapping your Inspiron volume keys such that they're available under the X-Window System to do with as you please. You can map them to the media player of your choice or to entirely different applications.

Advanced Power Management (APM Support)

The Inspiron works happily with Linux's APM support. (CONFIG_APM) You can view the status of your battery(ies) via the usual Fn-F3, even under X. You can also suspend to RAM using Fn-Esc. This also works under X. The very top of the LCD display will be messed up when you resume under X, but switching virtual desktops and back resolves it.

The Linux APM tools will be necessary for some APM options to exist. You can obtain APM from here or install the package by the same name via the usual method in Debian.

Suspend to disk (Fn-A) is said to work, but as I noted at the beginning of the article, I have not setup the necessary hidden partition on my disk and thus I cannot verify this. Setup is explained in detail in several of the links in the resource section at the end of this tutorial.

When the system is suspended to RAM, PCMCIA cards cease to fuction. You will need to reinsert them either manually or via cardctl after your machine is awoken. I imagine this is true if you suspend to disk as well, but I cannot verify it.

If you wish for your machine to remain on when you close the lid for transport, as I do, you can set the status of the Display Close BIOS option to Active and your machine will no longer suspend when the lid is closed. This makes me happy. One word of warning, however: If you allow your laptop to power down when you close the lid and you are currently in X, when the machine resumes X will not come back to life. It will be black and you'll have to switch to a virtual console and kill it.

Ultra DMA mode 2 IDE controller

Last, but not least, you can improve your disk performance with the hdparm utility. I use the following with good success on my 3800:

rachael:~# hdparm -u 1 -d 1 -c 1 -X 66

That'll enable DMA (which is likely done for you by default by the kernel driver in 2.4.x), enable IRQ unmasking, and enables 32-bit transfers across the PCI bus. The final option enables Ultra DMA mode 2, often referred to as ATA33. The kernel driver will likely kick that on for you as well at start up. The other options, if you like them, will need to be run at start up from an init.d script. (The 66 number is, from the man page, the desired Ultra DMA mode number plus the number 64. So if the 3800 supported UDMA mode 4, you could specify -X 68, but I digress.)

You'll want to test these settings in single user mode, first, to verify everything is okay.

Links and Useful Resources

  • Mach64 DRI CVS branch compiling mini-HOWTO
  • Mach64 DRI and XVideo support patch and information
  • Mach64 DRI CVS guide with autocompile script
  • Suspend to disk notes that will save your bacon
  • Suspend to disk while dual booting discussed in great detail
  • Tutorial explaining setup for irNET for irDA on Linux
  • Discussion of Gentoo Linux and Debian GNU/Linux on an Inspiron 8000/8100, including information about i8kutils
  • A power management tutorial for Linux's APM and ACPI interfaces
  • A linux kernel patch that allows experimental suspend to disk functionality without the need for a special partition
  • Another tutorial on setting up Linux, Slackware 8.0, on an Inspiron 3800. Includes WiFi and LS-120.
  • An entire page linking to Dell Inspiron Linux tutorials for various models.

Copyright and Revision Information

12-25-02 - Initial Draft

12-28-02 - Added basic USB configuration stuff

12-29-02 - Added Mach64 stuff

12-30-02 - Finished discussion of brute force and Debian X configurations

12-31-02 - Added MTRR and AGPART note; PCMCIA configuration; ALPS stuff

01-12-03 - Added kernel module quick list; Added ESS Maestro 3i section

01-13-03 - Completed BIOS interaction section and a portion of the APM section

01-19-03 - Finished the APM section

03-05-03 - Added section on Ultra DMA mode 2, for completeness

This document is copyright (c) Jason Boxman, 2002-2003. All rights reserved.