PC Cardbus

Summary

The cardbus appears to be really well supported, and everything is ready to go. I currently have two cards -- a slow modem and a network card, neither of which is useful. You can look for gadgets that can run off it, such as:

  • a bluetooth card
  • a TV card, which should allow you to capture TV on travels
  • a GPRS card, for connecting to the Internet
  • a radio card (do they exist?)
A Bluetooth card would be useful if you don't need the slot for anything else -- it would make it seem built-in, better than the USB dongle. However, if you want the slot for another card, it's no improvement.

A GPRS card may be a good idea -- especially if you find out that there are SIM cards for GPRS with special rates for lots of modem data. 

A TV card would be useful if you continue to vacation in Europe, or if you find a card that can handle the different transmission formats (PAL, NTSC, etc.) -- what about digital television?

Software and guides

  • Kernel
    • PCMCIA driver
    • You need <M> 8250/16550 PCMCIA device support for the Megahertz modem --
        see Drivers | Character devices | Serial (module serial_cs)
    • For the Ark Sky-Link Express PA2100 card you need a pcnet_cs module
  • Debian packages
    • pcmcia-cs
      • provides support for 16-bit (non-Cardbus) cards (possibly my megahertz modem?)
      • provides cardctl for ejecting / inserting cards
    • pcmcia-source has kernel modules and is not needed for 2.6 kernels
    • nictools-nopci has a diagnostics and setup for the Ark Sky-Link Express PA2100 card
  • Instructions
  • Configuration files
    • /etc/pcmcia/config.opts
  • Modules
    • rsrc_nonstatic
    • pcmcia
    • yenta_socket
    • pcmcia_core
    • serial_cs
  • Commands
    • cardmgr -- PCMCIA device manager (new system?)
    • just start pcmcia
    • just stop pcmcia
    • cardinfo  (pops up a window with details and control buttons!)
    • cardctl ident (the command is in the pcmcia-cs package)
    • cat /proc/iomem

PCMCIA NIC

I have a Ark Sky-Link Express PA2100 PCMCIA networking card. I struggled hard to find a Windows driver for it, but succeeded at last (later, I found the floppy disk with a driver -- never used).

This site says this card works with the pcnet_cs driver, which is in the kernel as "NE2000 compatible" CONFIG_PCMCIA_PCNET and builds pcnet_cs.o. I included this in the 2.5.69 kernel configuration (not built) and the 2.6.0-test1-ac2 kernel configuration (won't boot) on 20 July 2003. Now that I know which driver it needs, I don't really need to include it; this is just-in-case information.

The nictools-nopci Debian package has a ne2k-diag program for diagnostics and EEPROM setup for NE2000 clones.

PCMCIA modem

I relied on the Megahertz 14.4k pcmcia data/fax modem card from January through May 2003, before I got the built-in modem to work.

  • Use wvdial from a console to connect outside of X11
  • Use kppp, the KDE modem dialer, in X11

I had to do two things in Linux to make this work:

  • Turn off host identification (this was on by default)
  • Close down eth0 (and any other active eth)

Installation history for the 2.6 kernel

Update 24 July 2005

I started looking into pcmcia in Istanbul, when compiling a new kernel. I activated

<M> 8250/16550 PCMCIA device support for the PCMCIA modem

in Drivers | Character devices | Serial, which gives me module serial_cs. I also downloaded the package pcmcia-cs, after asking the maintainer of the pcmcia-source for details -- turns out pcmcia-cs provides cardctl (I had wondered what had happened to it).  After arriving in Cambridge I had a closer look at the package and found it contained the command cardinfo -- and was shocked to discover it's an x-windows program, a window with information about the inserted card (the Megahertz modem) and several control buttons. I've never seen that before.

Update 17 May 2004

Using the 2.6.6 kernel, I kept getting the "unable to map card memory!" error.

After uninstalling these packages

  discover discover-data libdiscover

I got a tidy result on the PCMCIA memory probe:

Starting PCMCIA services: cardmgr[2061]: watching 1 socket
done.
cs: memory probe 0x0c0000-0x0cffff: excluding 0xc0000-0xcffff
cs: memory probe 0x0d0000-0x0dffff: excluding 0xd4000-0xd7fff 0xdc000-0xdffff

Incidentally, Knoppix 3.4 boots a clean cardbus:

Linux Kernel Card Services 3.1.22
  options:  [pci] [cardbus] [pm]
  Yenta ISA IRQ mask 0x00f8, PCI irq 10
  Socket status: 30000010
  cs: IO port probe 0x0c00-0x0cff: clean.
  cs: IO port probe 0x0820-0x08ff: clean.
  cs: IO port probe 0x0800-0x080f: clean.
  cs: IO port probe 0x0100-0x04ff: excluding 0x378-0x37f 0x408-0x40f 0x480-0x48f 0x4d0-0x4d7
  cs: IO port probe 0x0a00-0x0aff: clean.
  cs: memory probe 0xa0000000-0xa0ffffff: clean.
  Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI ISAPNP enabled

This excludes more memory than is required to exclude, however.

Note that the settings in /etc/pcmcia/config.opts are actually largely irrelevant -- they only affect ISA bus interrupts assigned to 16-bit cards, which I don't use.

Here's what I get on the PCMCIA bus:
# cardctl ident
Socket 0:
  product info: "MEGAHERTZ", "XJ3144", "A0", "PCMCIA MODEM"
  manfid: 0x0102, 0x000d
  function: 2 (serial)

Update December 2003

lspci

CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller

Under 2.6.5, the cardbus doesn't seem to behave properly:

Detecting hardware: cs: unable to map card memory!
cs: unable to map card memory!

Linux Kernel Card Services
  options:  [pci] [cardbus] [pm]

Yenta: CardBus bridge found at 0000:00:0a.0 [152d:2201]
Yenta: Enabling burst memory read transactions
Yenta: Using CSCINT to route CSC interrupts to PCI
Yenta: Routing CardBus interrupts to PCI
Yenta: ISA IRQ mask 0x08f8, PCI irq 10
Socket status: 30000010

cs: unable to map card memory!
cs: unable to map card memory!

PCI: Enabling device 0000:00:08.0 (0000 -> 0003)
ttyS0 at I/O 0x1428 (irq = 10) is a 8250
ttyS1 at I/O 0x1440 (irq = 10) is a 8250
ttyS2 at I/O 0x1450 (irq = 10) is a 8250
ttyS3 at I/O 0x1460 (irq = 10) is a 8250
ttyS4 at I/O 0x1470 (irq = 10) is a 8250
A message suggests,
Check /etc/pcmcia/config.opts for "include memory" and "exclude memory" statements.
I checked /etc/pcmcia/config.opts and found several include and exclude statements -- among others, some that excluded irq 4 and 7 because they are normally used for serial ports. Since I don't have any serial ports, I commented those out. I also commented out a port for IBM Token Ring. That leaves this:
include port 0x100-0x4ff, port 0x800-0x8ff, port 0xc00-0xcff
include memory 0xc0000-0xfffff
include memory 0xa0000000-0xa0ffffff, memory 0x60000000-0x60ffffff
Likely the cause of the problem -- why not an issue in 2.4? Note the bolded string -- a typo in 2.6?

# cat cardmng
Here's 2.6.5:
Starting PCMCIA services: cardmgr[1689]: watching 1 socket
done.
Here's 2.4.20:
Starting PCMCIA services: cardmgr[913]: watching 1 socket
cs: IO port probe 0x0c00-0x0cff: clean.
cs: IO port probe 0x0800-0x08ff: clean.
cs: IO port probe 0x0100-0x04ff: excluding 0x200-0x207 0x408-0x40f 0x480-0x48f 0x4d0-0x4d7
cs: warning: no high memory space available!
cs: memory probe 0x0d0000-0x0dffff: excluding 0xd4000-0xd7fff 0xdc000-0xdffff
cs: memory probe 0x0c0000-0x0cffff: excluding 0xc0000-0xcffff
done.
So clearly the memory probes work in 2.4. Maybe /etc/pcmcia/config.opts values should just be commented out? I added in from the above:
# Values stolen from the 2.4.20 dmesg
include port 0x0c00-0x0cff, port 0x0800-0x08ff, port 0x0100-0x04ff
exclude port 0x200-0x207 0x408-0x40f 0x480-0x48f 0x4d0-0x4d7

include memory 0x0d0000-0x0dffff
exclude memory 0xd4000-0xd7fff 0xdc000-0xdffff
include memory 0x0c0000-0x0cffff
exclude memory 0xc0000-0xcffff
Not tested.
The kernel instructions read,
CardBus yenta-compatible bridge support (YENTA)

CardBus is a bus mastering architecture for PC-cards, which allows
for 32 bit PC-cards (the original PCMCIA standard specifies only
a 16 bit wide bus). Many newer PC-cards are actually CardBus cards.

This option enables support for CardBus PC Cards, as well as support
for CardBus host bridges. Virtually all modern PCMCIA bridges are
CardBus compatible. A "bridge" is the hardware inside your computer
that PCMCIA cards are plugged into.

To use your PC-cards, you will need supporting software from David
Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
for location).

If unsure, say Y.
The pcmcia-cs package in Debian has some user-space utilities that you may need. The package won't compile, saying the modules are already in the kernel. I issued
cd /usr/src/modules/pcmcia-cs
debian/rules binary-modules
and got lots of stuff, including
Build 'trusting' versions of card utilities (y/n) [n]
Include 32-bit (CardBus) card support (y/n) [y]
Include PnP BIOS resource checking (y/n) [y]
Module install directory [/lib/modules/2.6.5]
Kernel configuration options:
    Kernel-tree PCMCIA support is enabled.
    Symmetric multiprocessing support is disabled.
    Preemptive kernel support is enabled.
    High memory support is disabled.
    PCI BIOS support is enabled.
    Power management (APM) support is enabled.
    SCSI support is enabled.
    IEEE 1394 (FireWire) support is disabled.
    Networking support is enabled.
     Radio network interface support is enabled.
     Token Ring device support is disabled.
     Fast switching is disabled.
     Frame Diverter is disabled.
    Module version checking is disabled.
    Kernel debugging support is disabled.
    Preemptive kernel patch is enabled.
    /proc filesystem support is enabled.
    PAE support is disabled.
I wonder why it says ieee1394 is disabled; it is not. More from the output:
** Your kernel is configured with PCMCIA driver support.  Therefore,
** 'make all' will compile the PCMCIA utilities but not the drivers.
** See README-2.4 if this is not what you intended!

IMPORTANT NOTE FOR DEBIAN USERS:
This means that a pcmcia-modules package will not be built.
The card looks fine:
# cardctl ident
Socket 0:
  product info: "MEGAHERTZ", "XJ3144", "A0", "PCMCIA MODEM"
  manfid: 0x0102, 0x000d
  function: 2 (serial)


Installation history for the 2.4 kernel

Here's the Cardbus modem in a 2.4 kernel:

Linux Kernel Card Services 3.1.22
options: [pci] [cardbus] [pm]
PCI: Found IRQ 5 for device 00:0a.0
PCI: Sharing IRQ 5 with 00:0b.2
Yenta IRQ list 00d8, PCI irq5
Socket status: 30000010
cardmgr[9831]: watching 1 sockets
kernel: cs: IO port probe 0x0c00-0x0cff: clean.
kernel: cs: IO port probe 0x0800-0x08ff: clean.
kernel: cs: IO port probe 0x0100-0x04ff: excluding 0x200-0x207 0x408-0x40f 0x480-0x48f 0x4d0-0x4d7
kernel: cs: IO port probe 0x0a00-0x0aff: clean.
cardmgr[9832]: starting, version is 3.2.2
kernel: cs: memory probe 0xa0000000-0xa0ffffff: clean.
cardmgr[9832]: socket 0: Serial or Modem
cardmgr[9832]: executing: 'modprobe serial_cs'
kernel: ttyS00 at port 0x03f8 (irq = 3) is a 16550A
cardmgr[9832]: executing: './serial start ttyS0'

That could be useful for checking mail from home (and in fact it proved to work fine, until I got the built-in modem to work).



 

 

top
Debate
Evolution
CogSci

Maintained by Francis F. Steen, Communication Studies, University of California Los Angeles


CogWeb