Linux PCMCIA HOWTO David Hinds, dahinds@users.sourceforge.net. v2.119, 29 December 2003 This document describes how to install and use PCMCIA Card Services for Linux, and answers some frequently asked questions. The latest version of this document can always be found at . ______________________________________________________________________ Table of Contents 1. General information and hardware requirements 1.1 Introduction 1.2 Copyright notice and disclaimer 1.3 What is the latest version, and where can I get it? 1.4 What systems are supported? 1.5 What cards are supported? 1.6 When will my favorite (unsupported) card become supported? 1.7 Mailing lists and other information sources 1.8 Prerequisites and kernel setup 1.9 Kernel PCMCIA support 1.10 Installation 1.11 Startup options 1.11.1 Card readers for desktop systems 1.12 System resource settings 1.12.1 PowerBook specific settings 1.13 Notes about specific Linux distributions 1.13.1 Debian 1.13.2 Red Hat, Caldera, Mandrake 1.13.3 Slackware 1.13.4 SuSE 2. Resolving installation and configuration problems 2.1 Base PCMCIA kernel modules do not load 2.2 Some client driver modules do not load 2.3 ISA interrupt scan failures 2.4 IO port scan failures 2.5 Memory probe failures 2.6 Failure to detect card insertions and removals 2.7 Interrupt delivery problems 2.8 System resource starvation 2.9 Resource conflict only with two cards inserted 2.10 Device configuration does not complete 3. Usage and features 3.1 Tools for configuring and monitoring PCMCIA devices 3.1.1 The cardmgr configuration daemon 3.1.2 The socket status file, stab 3.1.3 The cardctl and cardinfo utilities 3.1.4 Inserting and ejecting cards 3.1.5 Card Services and Advanced Power Management 3.1.6 Shutting down the PCMCIA system 3.2 Overview of the PCMCIA configuration scripts 3.3 PCMCIA network adapters 3.3.1 Network device parameters 3.3.2 Comments about specific cards 3.3.3 Diagnosing problems with network adapters 3.4 PCMCIA serial and modem devices 3.4.1 Serial device parameters 3.4.2 Comments about specific cards 3.4.3 Diagnosing problems with serial devices 3.5 PCMCIA parallel port devices 3.5.1 Parallel device parameters 3.5.2 Diagnosing problems with parallel port devices 3.6 PCMCIA SCSI adapters 3.6.1 SCSI device parameters 3.6.2 Comments about specific cards 3.6.3 Diagnosing problems with SCSI adapters 3.7 PCMCIA memory cards 3.7.1 Memory device parameters 3.7.2 Using linear flash memory cards 3.8 PCMCIA ATA/IDE card drives 3.8.1 ATA/IDE fixed-disk device parameters 3.8.2 Diagnosing problems with ATA/IDE adapters 3.9 Multifunction cards 4. Advanced topics 4.1 Resource allocation for PCMCIA devices 4.2 PCI interrupt configuration problems and solutions 4.2.1 An overview of PCI interrupt routing issues 4.2.2 CardBus bridge is not detected by the PCI BIOS 4.2.3 PCI interrupt delivery problems 4.2.4 No PCI interrupt assignment; valid routing table 4.2.5 No PCI interrupt assignment; unknown interrupt router 4.2.6 No PCI interrupt assignment; no routing table 4.3 How can I have separate device setups for home and work? 4.4 Booting from a PCMCIA device 4.4.1 The pcinitrd helper script 4.4.2 Creating an initrd boot floppy 4.4.3 Installing an initrd image on a non-Linux drive 5. Dealing with unsupported cards 5.1 Configuring unrecognized cards 5.2 Adding support for an NE2000-compatible ethernet card 5.3 PCMCIA floppy interface cards 6. Debugging tips and programming information 6.1 Submitting useful problem reports 6.2 Interpreting kernel trap reports 6.3 Low level PCMCIA debugging aids 6.4 /proc/bus/pccard 6.5 Writing Card Services drivers for new cards 6.6 Guidelines for PCMCIA client driver authors 6.7 Guidelines for Linux distribution maintainers ______________________________________________________________________ 1. General information and hardware requirements 1.1. Introduction Card Services for Linux is a complete PCMCIA or ``PC Card'' support package. It includes a set of loadable kernel modules that implement a version of the Card Services applications program interface, a set of client drivers for specific cards, and a card manager daemon that can respond to card insertion and removal events, loading and unloading drivers on demand. It supports ``hot swapping'' of most card types, so cards can be safely inserted and ejected at any time. This software is a work in progress. It contains bugs, and should be used with caution. I'll do my best to fix problems that are reported to me, but if you don't tell me, I may never know. If you use this code, I hope you will send me your experiences, good or bad! If you have any suggestions for how this document could be improved, please let me know (dahinds@users.sourceforge.net). 1.2. Copyright notice and disclaimer Copyright (c) 1998-2002 David A. Hinds This document may be reproduced or distributed in any form without my prior permission. Modified versions of this document, including translations into other languages, may be freely distributed, provided that they are clearly identified as such, and this copyright is included intact. This document may be included in commercial distributions without my prior consent. While it is not required, I would like to be informed of such usage. If you intend to incorporate this document in a published work, please contact me to make sure you have the latest available version. This document is provided ``AS IS'', with no express or implied warranties. Use the information in this document at your own risk. 1.3. What is the latest version, and where can I get it? The current major release of Card Services is version 3.2, and minor updates or bug fixes are numbered 3.2.1, 3.2.2, and so on. Source code for the latest version is available on the web at , as pcmcia-cs-3.2.?.tar.gz. You may find more than one release number here. It is up to you to decide which version is more appropriate, but the CHANGES file will summarize the most important differences. Pre-compiled drivers are included with current releases of essentially all major Linux distributions, including Slackware, Debian, Red Hat, Caldera, and SuSE, among others. So generally there is no need to compile the drivers from scratch. 1.4. What systems are supported? This package should run on almost Intel-based Linux-capable laptop. It also runs on some Alpha, PowerPC, ARM, and MIPS platforms. Most common socket controllers are supported. Card docks for desktop systems should work as long as they use a supported controller, and are plugged directly into the ISA or PCI bus, as opposed to SCSI-to- PCMCIA or IDE-to-PCMCIA adapters. The following controllers are recognized by the supplied socket drivers: +o Cirrus Logic (now Basis Communications) PD6710, PD6720, PD6722, PD6729, PD6730, PD6832 +o ENE Technology CB1211, CB1225, CB1410, CB1420 +o Intel i82365sl B, C, and DF steps, 82092AA +o O2Micro OZ6729, OZ6730, OZ6812, OZ6832, OZ6833, OZ6836, OZ6860, OZ6922, OZ6933, OZ6912 +o Omega Micro 82C365G, 82C092G +o Ricoh RF5C296, RF5C396, RL5C465, RL5C466, RL5C475, RL5C476, RL5C477, RL5C478 +o SMC 34C90 +o Texas Instruments PCI1031, PCI1130, PCI1131, PCI1210, PCI1211, PCI1220, PCI1221, PCI1225, PCI1250A, PCI1251A, PCI1251B, PCI1410, PCI1410A, PCI1420, PCI1450, PCI1451A, PCI1510, PCI1520, PCI1620, PCI4410, PCI4410A, PCI4450, PCI4451, PCI4510, PCI4520, PCI7410, PCI7510, PCI7610 +o Toshiba ToPIC95, ToPIC97, ToPIC100 (experimental, incomplete) +o Vadem VG465, VG468, VG469 +o VLSI Technologies 82C146, VCF94365 +o VIA VT83C469 +o Databook DB86082, DB86082A, DB86084, DB86084A, DB86072, DB86082B Other controllers that are register compatible with the Intel i82365sl will generally work, as well. Due to the rapid pace of technological change for laptop hardware, new controllers appear frequently, and there may be delays between when a new model appears on the market, and when driver support becomes available. Support for Toshiba's ToPIC bridges was hindered for a long time by a lack of sufficiently detailed technical documentation. While some datasheets have been available, a few idiosyncracies of the ToPIC chips were not adequately explained. Toshiba has given some direct technical help on some of these issues, and I think the major ones have been resolved. However, with the introduction of kernel PCMCIA support in 2.4.* and later kernels, some new Toshiba bugs may have cropped up in the new socket driver code. The Motorola 6AHC05GA controller used in some Hyundai laptops is not supported. The custom host controller in the HP Omnibook 600 is also unsupported. 1.5. What cards are supported? The current release includes drivers for a variety of ethernet cards, a driver for modem and serial port cards, several SCSI adapter drivers, a driver for ATA/IDE drive cards, and memory card drivers that should support most SRAM cards and some flash cards. The SUPPORTED.CARDS file included with each release of Card Services lists all cards that are known to work in at least one actual system. The likelihood that a card not on the supported list will work depends on the type of card. Essentially all modems should work with the supplied driver. Some network cards may work if they are OEM versions of supported cards. Other types of IO cards (frame buffers, sound cards, etc) will not work until someone writes the appropriate drivers. 1.6. When will my favorite (unsupported) card become supported? Unfortunately, they usually don't pay me to write device drivers, so if you would like to have a driver for your favorite card, you are probably going to have to do at least some of the work. Ideally, I'd like to work towards a model like the Linux kernel, where I would be responsible mainly for the ``core'' driver code and other authors would contribute and maintain client drivers for specific cards. The SUPPORTED.CARDS file mentions some cards for which driver work is currently in progress. I will try to help where I can, but be warned that debugging kernel device drivers by email is not particularly effective. 1.7. Mailing lists and other information sources The Linux PCMCIA information page is at , and has bug tracking, support and feature requests, and a variety of PCMCIA related message forums. Users can request email notification of new responses to particular questions, or notification for all new messages in a given category. I hope that this will become a useful repository of information, for questions that go beyond the scope of the HOWTO. The Linux Laptop Page at has links to a vast number of sites that have information about configuring specific types of laptops for Linux. There is also a searchable database of system configuration information, and pointers to a variety of laptop-related mailing lists. There is also a mailing list for ongoing development of the kernel PCMCIA driver subsystem, at . Compilation and installation