Penguin
Diff: HowToPCMCIAHOWTO
EditPageHistoryDiffInfoLikePages

Differences between current version and predecessor to the previous major change of HowToPCMCIAHOWTO.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Monday, November 1, 2004 11:38:11 pm by AristotlePagaltzis
Older page: version 2 Last edited on Friday, June 7, 2002 1:07:14 am by perry Revert
@@ -1,4967 +1 @@
-  
-  
-  
-Linux PCMCIA HOWTO  
-  
-  
-  
-----  
-  
-!!!Linux PCMCIA HOWTO  
-  
-!!David Hinds,  
-dahinds@users.sourceforge.net. v2.91, 29 May 2001  
-  
-  
-----  
-''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  
-http://pcmcia-cs.sourceforge.net.''  
-----  
-  
-  
-  
-  
-!!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 Why don't you distribute binaries?  
-  
-*1.9 Why is the package so darned big?  
-  
-  
-  
-  
-  
-!!2. Compilation and installation  
-  
-  
-*2.1 Prerequisites and kernel setup  
-  
-*2.2 Installation  
-  
-*2.3 Startup options  
-  
-*2.4 System resource settings  
-  
-*2.5 Notes about specific Linux distributions  
-  
-  
-  
-  
-  
-!!3. Resolving installation and configuration problems  
-  
-  
-*3.1 Base PCMCIA kernel modules do not load  
-  
-*3.2 Some client driver modules do not load  
-  
-*3.3 Interrupt scan failures  
-  
-*3.4 IO port scan failures  
-  
-*3.5 Memory probe failures  
-  
-*3.6 Failure to detect card insertions and removals  
-  
-*3.7 Interrupt delivery problems  
-  
-*3.8 System resource starvation  
-  
-*3.9 Resource conflict only with two cards inserted  
-  
-*3.10 Device configuration does not complete  
-  
-  
-  
-  
-  
-!!4. Usage and features  
-  
-  
-*4.1 Tools for configuring and monitoring PCMCIA devices  
-  
-*4.2 Overview of the PCMCIA configuration scripts  
-  
-*4.3 PCMCIA network adapters  
-  
-*4.4 PCMCIA serial and modem devices  
-  
-*4.5 PCMCIA parallel port devices  
-  
-*4.6 PCMCIA SCSI adapters  
-  
-*4.7 PCMCIA memory cards  
-  
-*4.8 PCMCIA ATA/IDE card drives  
-  
-*4.9 Multifunction cards  
-  
-  
-  
-  
-  
-!!5. Advanced topics  
-  
-  
-*5.1 Resource allocation for PCMCIA devices  
-  
-*5.2 PCI interrupt configuration problems and solutions  
-  
-*5.3 How can I have separate device setups for home and work?  
-  
-*5.4 Booting from a PCMCIA device  
-  
-  
-  
-  
-  
-!!6. Dealing with unsupported cards  
-  
-  
-*6.1 Configuring unrecognized cards  
-  
-*6.2 Adding support for an NE2000-compatible ethernet card  
-  
-*6.3 PCMCIA floppy interface cards  
-  
-  
-  
-  
-  
-!!7. Debugging tips and programming information  
-  
-  
-*7.1 Submitting useful bug reports  
-  
-*7.2 Interpreting kernel trap reports  
-  
-*7.3 Low level PCMCIA debugging aids  
-  
-*7.4 /proc/bus/pccard  
-  
-*7.5 Writing Card Services drivers for new cards  
-  
-*7.6 Guidelines for PCMCIA client driver authors  
-  
-*7.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 continually under development. It probably 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 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.1, and minor  
-updates or bug fixes are numbered 3.1.1, 3.1.2, and so on.  
-  
-  
-Source code for the latest version is available on the web at  
-http://pcmcia-cs.sourceforge.net, as  
-pcmcia-cs-3.1.?.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.  
-  
-  
-The Linux PCMCIA FTP site is mirrored at sunsite.unc.edu  
-(and all sunsite mirror sites) in /pub/Linux/kernel/pcmcia.  
-  
-  
-If you do not feel up to compiling the drivers from scratch,  
-pre-compiled drivers are included with current releases of most of the  
-major Linux distributions, including Slackware, Debian, Red Hat,  
-Caldera, SuSE, and Yggdrasil, among others.  
-  
-  
-  
-  
-!!1.4 What systems are supported?  
-  
-  
-  
-This package should run on almost Intel-based Linux-capable laptop.  
-It also runs on Alpha-based platforms (i.e., the DEC Multia). Work is  
-being done to make the package fully dual-endian, so that it will also  
-support PowerPC-based platforms (i.e., Apple Powerbooks). 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:  
-  
-  
-  
-  
-  
-*Cirrus Logic (now Basis Communications) PD6710, PD6720, PD6722,  
-PD6729, PD6730, PD6832  
-*  
-  
-*ENE Technology CB1211, CB1225, CB1410, CB1420  
-*  
-  
-*Intel i82365sl B, C, and DF steps, 82092AA  
-*  
-  
-*O2Micro OZ6729, OZ6730, OZ6812, OZ6832, OZ6833, OZ6836, OZ6860  
-*  
-  
-*Omega Micro 82C365G, 82C092G  
-*  
-  
-*Ricoh RF5C296, RF5C396, RL5C465, RL5C466, RL5C475, RL5C476, RL5C478  
-*  
-  
-*SMC 34C90  
-*  
-  
-*Texas Instruments PCI1031, PCI1130, PCI1131, PCI1210, PCI1211,  
-PCI1220, PCI1221, PCI1225, PCI1250A, PCI1251A, PCI1251B, PCI1410,  
-PCI1410A, PCI1420, PCI1450, PCI1451A, PCI4410, PCI4410A, PCI4450,  
-PCI4451  
-*  
-  
-*Toshiba ToPIC95, ToPIC97, ToPIC100 (experimental, incomplete)  
-*  
-  
-*Vadem VG465, VG468, VG469  
-*  
-  
-*VLSI Technologies 82C146, VCF94365  
-*  
-  
-*VIA VT83C469  
-*  
-  
-*Databook DB86082, DB86082A, DB86084, DB86084A, DB86072, DB86082B  
-*  
-  
-  
-  
-Other controllers that are register compatible with the Intel i82365sl  
-will generally work, as well.  
-  
-  
-Support for 32-bit !CardBus cards is still somewhat experimental.  
-Drivers prior to version 3.0 only support 16-bit cards in !CardBus  
-sockets. 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 now started giving  
-direct technical help on some of these issues and I expect that the  
-major ones will soon be resolved.  
-  
-  
-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.  
-  
-  
-Manufacturers interested in helping provide Linux support for their  
-products can contact me about consulting arrangements.  
-  
-  
-  
-  
-!!1.7 Mailing lists and other information sources  
-  
-  
-  
-I used to maintain a database and mailing list of Linux PCMCIA users.  
-More recently, I've turned my web page for Linux PCMCIA information  
-into a ``!HyperNews'' site, with a set of message lists for Linux  
-PCMCIA issues. There are lists for installation and configuration  
-issues, for different types of cards, and for programming and  
-debugging issues. The Linux PCMCIA information page is at  
-http://pcmcia-cs.sourceforge.net.  
-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.  
-  
-  
-There is a Linux mailing list devoted to laptop issues, the  
-``linux-laptop'' list. For more information, send a message  
-containing the word ``help'' to majordomo@vger.rutgers.edu. To  
-subscribe, send a message containing ``subscribe linux-laptop'' to the  
-same address. This mailing list might be a good forum for discussion  
-of Linux PCMCIA issues.  
-  
-  
-The Linux Laptop Home Page at  
-http://www.cs.utexas.edu/users/kharker/linux-laptop has links  
-to many sites that have information about configuring specific types  
-of laptops for Linux. There is also a searchable database of system  
-configuration information.  
-  
-  
-  
-  
-!!1.8 Why don't you distribute binaries?  
-  
-  
-  
-For me, distributing binaries would be a significant hassle. It is  
-complicated because some features can only be selected at compile  
-time, and because the modules are somewhat dependent on having  
-the ``right'' kernel configuration. So, I would probably need to  
-distribute precompiled modules along with matching kernels. Beyond  
-this, the greatest need for precompiled modules is when installing  
-Linux on a clean system. This typically requires setting up drivers so  
-they can be used in the installation process for a particular Linux  
-distribution. Each Linux distribution has its own ideosyncracies, and  
-it is not feasible for me to provide boot and root disks for even just  
-the common combinations of drivers and distributions.  
-  
-  
-PCMCIA is now a part of many of the major Linux distributions,  
-including Red Hat, Caldera, Slackware, Yggdrasil, Craftworks, and  
-Nascent Technology.  
-  
-  
-  
-  
-!!1.9 Why is the package so darned big?  
-  
-  
-  
-Well, first of all, it isn't actually that large. All the driver  
-modules together take up about 500K of disk space. The utility  
-programs add up to about 70K, and the scripts in /etc/pcmcia  
-are about 50K. The core driver modules take up about 55K of system  
-memory. The cardmgr daemon will generally be swapped out except  
-when cards are inserted or removed. The total package size is  
-comparable to DOS/Windows Card Services implementations.  
-  
-  
-Compared to DOS ``point enablers'', this may still seem like a lot of  
-overhead, especially for people that don't plan on using many of the  
-features of PCMCIA, such as power management or hot swapping. Point  
-enablers can be tiny because they generally support only one or a  
-small set of cards, and also generally support a restricted set of  
-host controllers. If someone were to write a genuinely ``generic''  
-modem enabler, it would end up incorporating much of the functionality  
-of Card Services, to handle cards from different vendors and the full  
-range of host controller variants.  
-  
-  
-  
-----  
-  
-!! 2. Compilation and installation  
-  
-!!2.1 Prerequisites and kernel setup  
-  
-  
-  
-Before starting, you should think about whether you really need to  
-compile the PCMCIA package yourself. All common Linux distributions  
-come with pre-compiled driver packages. Generally, you only need to  
-install the drivers from scratch if you need a new feature of the  
-current drivers, or if you've updated and/or reconfigured your kernel  
-in a way that is incompatible with the drivers included with your  
-Linux distribution. While compiling the package is not technically  
-difficult, it does require some general Linux familiarity.  
-  
-  
-The following things should be installed on your system before you  
-begin:  
-  
-  
-*A 2., 2.2, 2.3, or 2.4 series kernel source tree.  
-*  
-  
-*An appropriate set of module utilities.  
-*  
-  
-*(Optional) the ``XForms'' X11 user interface toolkit.  
-*  
-  
-  
-  
-You need to have a complete linux source tree for your kernel, not  
-just an up-to-date kernel image. The driver modules contain some  
-references to kernel source files. While you may want to build a new  
-kernel to remove unnecessary drivers, installing PCMCIA does not  
-require you to do so.  
-  
-  
-Current ``stable'' kernel sources and patches are available from  
-ftp://ftp.kernel.org/pub/linux/kernel/v2.2.  
-Development kernels can be found in the corresponding v2.3 or  
-v2.4 subdirectories. Current module utilities can be found in  
-the same locations.  
-  
-  
-In the Linux kernel source tree, the Documentation/Changes  
-file describes the versions of all sorts of other system components  
-that are required for that kernel release. You may want to check  
-through this and verify that your system is up to date, especially if  
-you have updated your kernel. If you are using a development kernel,  
-be sure that you are using the right combination of shared libraries  
-and module tools.  
-  
-  
-When configuring your kernel, if you plan on using a PCMCIA ethernet  
-card, you should turn on networking support but turn off the normal  
-Linux network card drivers, including the ``pocket and portable  
-adapters''. The PCMCIA network card drivers are all implemented as  
-loadable modules. Any drivers compiled into your kernel will only  
-waste space.  
-  
-  
-If you want to use SLIP, PPP, or PLIP, you do need to either configure  
-your kernel with these enabled, or use the loadable module versions of  
-these drivers. There is an unfortunate deficiency in the kernel  
-config process in 1.2.X kernels, in that it is not possible to set  
-configuration options (like SLIP compression) for a loadable module,  
-so it is probably better to just link SLIP into the kernel if you  
-need it.  
-  
-  
-In order to use a PCMCIA token ring adapter, your kernel should be  
-configured with ``Token Ring driver support'' (CONFIG_TR)  
-enabled, though you should leave CONFIG_IBMTR off.  
-  
-  
-If you want to use a PCMCIA IDE adapter, your kernel should be  
-configured with CONFIG_BLK_DEV_IDE_PCMCIA enabled, for 2..*  
-through 2.1.7 kernels. Older kernels do not support removeable IDE  
-devices; newer kernels do not require a special configuration  
-setting.  
-  
-  
-If you will be using a PCMCIA SCSI adapter, then enable  
-CONFIG_SCSI when configuring your kernel. Also, enable any top  
-level drivers (SCSI disk, tape, cdrom, generic) that you expect to  
-use. All low-level drivers for particular host adapters should be  
-disabled, as they will just take up space.  
-  
-  
-If you want to modularize a driver that is needed for a PCMCIA device,  
-you must modify /etc/pcmcia/config to specify what modules  
-need to be loaded for what card types. For example, if the serial  
-driver is modularized, then the serial device definition should be:  
-  
-  
-  
-  
-  
-device "serial_cs"  
-class "serial" module "misc/serial", "serial_cs"  
-  
-  
-  
-  
-This package includes an X-based card status utility called  
-cardinfo. This utility is based on a freely distributed user  
-interface toolkit called the XForms Library. This library is  
-available as a separate package with most Linux distributions. If you  
-would like to build cardinfo, you should install XForms and all  
-the normal X header files and libraries before configuring the PCMCIA  
-package.  
-  
-  
-  
-  
-!!2.2 Installation  
-  
-  
-  
-Here is a synopsis of the installation process:  
-  
-  
-  
-  
-  
-*Unpack pcmcia-cs-3.1.?.tar.gz in /usr/src.  
-*  
-  
-*Run ``make config'' in the new pcmcia-cs-3.1.? directory.  
-*  
-  
-*Run ``make all'', then ``make install''.  
-*  
-  
-*Customize the startup script and the option files in  
-/etc/pcmcia for your site, if needed.  
-*  
-  
-  
-  
-If you plan to install any contributed client drivers not included in  
-the core PCMCIA distribution, unpack each of them in the top-level  
-directory of the PCMCIA source tree. Then follow the normal build  
-instructions. The extra drivers will be compiled and installed  
-automatically.  
-  
-  
-Running ``make config'' prompts for a few configuration options,  
-and checks out your system to verify that it satisfies all  
-prerequisites for installing PCMCIA support. In most cases, you'll be  
-able to just accept all the default configuration options. Be sure to  
-carefully check the output of this command in case there are problems.  
-The following options are available:  
-  
-  
-  
-  
-; __Alternate target install directory?__:  
-  
-If you are compiling the package for installation on another machine,  
-specify an alternate target directory when prompted. This should be  
-an absolute path. All files will be installed relative to this  
-directory. You will then be able to tar this directory tree and  
-copy to your target machine, and unpack relative to its root directory  
-to install everything in the proper places. Newer PCMCIA releases do  
-not ask for this; instead it can be set with the --target= command  
-line option to the Configure script.  
-  
-  
-  
-; __Build 'trusting' versions of card utilities?__:  
-  
-Some of the support utilities (cardctl and cardinfo) can be  
-compiled either in ``safe'' or ``trusting'' forms. The ``safe'' forms  
-prevent non-root users from modifying card configurations. The  
-``trusting'' forms permit ordinary users to issue commands to suspend  
-and resume cards, reset cards, and change the current configuration  
-scheme. The default is to build the safe forms.  
-  
-  
-  
-; __Include 32-bit (!CardBus) card support?__:  
-  
-This option must be selected if you wish to use 32-bit !CardBus cards.  
-It is not required for !CardBus bridge support, if you only plan to use  
-16-bit PC Cards.  
-  
-  
-  
-; __Include PnP BIOS resource checking?__:  
-  
-This builds additional code into the PCMCIA core module to communicate  
-with a system's PnP BIOS to obtain resource information for built-in  
-``motherboard'' devices (serial and parallel ports, sound, etc), to  
-help avoid resource conflicts. If enabled, some extra resource files  
-will be created under /proc/bus/pccard, and the lspnp  
-and setpnp tools can be used to view and manipulate PnP BIOS  
-devices. However, this setting causes problems on some laptops and is  
-not turned on by default.  
-  
-  
-  
-; __Module install directory?__:  
-  
-The directory that new kernel modules will be installed into.  
-Normally this should be the subdirectory of /lib/modules that  
-matches your kernel version.  
-  
-  
-  
-; __How to set kernel-specific options?__:  
-  
-There are a few kernel configuration options that affect the PCMCIA  
-tools. The configuration script can deduce these from the running  
-kernel (the default and most common case). Alternatively, if you are  
-compiling for installation on another machine, it can read the  
-configuration from a kernel source tree, or each option can be set  
-interactively.  
-  
-  
-  
-  
-  
-  
-The Configure script can also be executed non-interactively, for  
-automatic builds or to quickly reconfigure after a kernel update.  
-Some additional less-frequently-used options can be only be set from  
-the command line. Running ``Configure --help'' lists all  
-available options.  
-  
-  
-Running ``make all'' followed by ``make install'' will build  
-and then install the kernel modules and utility programs. Kernel  
-modules are installed under /lib/modules/<version>/pcmcia.  
-The cardmgr and cardctl programs are installed in  
-/sbin. If cardinfo is built, it is installed in  
-/usr/bin/X11.  
-  
-  
-Configuration files will be installed in the /etc/pcmcia  
-directory. If you are installing over an older version, your old  
-config scripts will be backed up before being replaced. The saved  
-scripts will be given an *.O extension.  
-  
-  
-If you don't know what kind of host controller your system uses, you  
-can use the probe utility in the cardmgr/ subdirectory to  
-determine this. There are two major types: the Databook TCIC-2 type  
-and the Intel i82365SL-compatible type.  
-  
-  
-In a few cases, the probe command will be unable to determine  
-your controller type automatically. If you have a Halikan NBD 486  
-system, it has a TCIC-2  
-controller at an unusual location: you'll need to edit rc.pcmcia  
-to load the tcic module, and also set the PCIC_OPTS  
-parameter to ``tcic_base=0x02c0''.  
-  
-  
-On some systems using Cirrus controllers, including the NEC Versa M,  
-the BIOS puts the controller in a special suspended state at system  
-startup time. On these systems, the probe command will fail to  
-find any known host controller. If this happens, edit rc.pcmcia  
-and set PCIC to i82365, and PCIC_OPTS to  
-``wakeup=1''.  
-  
-  
-  
-  
-!! 2.3 Startup options  
-  
-  
-  
-The PCMCIA startup script recognizes several groups of startup  
-options, set via environment variables. Multiple options should be  
-separated by spaces and enclosed in quotes. Placement of startup  
-options depends on the Linux distribution used. They may be placed  
-directly in the startup script, or they may be kept in a separate  
-option file. See the  
-Notes about specific Linux distributions for specifics. The following variables  
-can be set:  
-  
-  
-  
-  
-; __PCMCIA__:  
-  
-This variable specifies whether PCMCIA support should be started up,  
-or not. If it is set to anything other than ``yes'', then the startup  
-script will be disabled.  
-; __PCIC__:  
-  
-This identifies the PC Card Interface Controller driver module. There  
-are two options: ``tcic'' or ``i82365''. Virtually all current  
-controllers are in the ``i82365'' group. This is the only mandatory  
-option setting.  
-; __PCIC_OPTS__:  
-  
-This specifies options for the PCIC module. Some host controllers  
-have optional features that may or may not be implemented in a  
-particular system. In some cases, it is impossible for the socket  
-driver to detect if these features are implemented. See the  
-corresponding man page for a complete description of the available  
-options.  
-; __CORE_OPTS__:  
-  
-This specifies options for the pcmcia_core module, which  
-implements the core PC Card driver services. See ``man  
-pcmcia_core'' for more information.  
-; __CARDMGR_OPTS__:  
-  
-This specifies options to be passed to the cardmgr daemon. See  
-``man cardmgr'' for more information.  
-; __SCHEME__:  
-  
-If set, then the PC Card configuration scheme will be initialized to  
-this at driver startup time. See the  
-Overview of the PCMCIA configuration scripts for a discussion of schemes.  
-  
-  
-  
-The low level socket drivers, tcic and i82365, have various  
-bus timing parameters that may need to be adjusted for certain systems  
-with unusual bus clocking. Symptoms of timing problems can include  
-card recognition problems, lock-ups under heavy loads, high error  
-rates, or poor device performance. Only certain host bridges have  
-adjustable timing parameters: check the corresponding man page to see  
-what options are available for your controller. Here is a brief  
-summary:  
-  
-  
-  
-  
-  
-*Cirrus controllers have numerous configurable timing parameters. The  
-most important seems to be the cmd_time flag, which determines the  
-length of PCMCIA bus cycles. Fast 486 systems (i.e., DX4-100) seem to  
-often benefit from increasing this from 6 (the default) to 12 or 16.  
-*  
-  
-*The Cirrus PD6729 PCI controller has the fast_pci flag, which  
-should be set if the PCI bus speed is greater than 25 MHz.  
-*  
-  
-*For Vadem VG-468 controllers, the async_clock flag changes the  
-relative clocking of PCMCIA bus and host bus cycles. Setting this  
-flag adds extra wait states to some operations. However, I have yet  
-to hear of a laptop that needs this.  
-*  
-  
-*The pcmcia_core module has the cis_speed parameter for  
-changing the memory speed used for accessing a card's Card Information  
-Structure (CIS). On some systems, increasing this parameter (i.e.,  
-slowing down card accesses) may fix card recognition problems.  
-*  
-  
-*Another pcmcia_core parameter, io_speed, can be used to slow  
-down accesses to IO cards. It may help in certain cases with systems  
-that have out-of-spec PCMCIA bus timing.  
-*  
-  
-*This is not a timing issue, but if you have more than one ISA-to-PCMCIA  
-controller in your system or extra sockets in a laptop docking station,  
-the i82365 module should be loaded  
-with the extra_sockets parameter set to 1. This should not be  
-necessary for detection of PCI-to-PCMCIA or PCI-to-!CardBus bridges.  
-*  
-  
-  
-  
-Here are some timing settings for specific systems:  
-  
-  
-  
-  
-  
-*On the ARM Pentium-90 or Midwest Micro Soundbook Plus, use  
-``freq_bypass=1 cmd_time=8''.  
-*  
-  
-*On a Compaq Presario 1220, try ``setup_time=1''.  
-*  
-  
-*On a Midwest Micro Soundbook Elite, use ``cmd_time=12''.  
-*  
-  
-*On a Gateway Liberty, try ``cmd_time=16''.  
-*  
-  
-*On a Samsung SENS 810, use ``fast_pci=1''.  
-*  
-  
-  
-  
-  
-  
-!Card readers for desktop systems  
-  
-  
-While almost all PCMCIA card readers and card docks work fine under  
-Linux, some require special startup options because they do not behave  
-exactly like laptop PCMCIA bridges. PCI card readers, in particular,  
-may handle interrupts differently.  
-  
-  
-  
-  
-  
-*The Linksys !ProConnect PCMRDWR and Antec !DataChute card readers are  
-``ISA Plug and Play'' devices. To use these, you must first  
-activate them with the Linux isapnp tools. See the man pages for  
-pnpdump and isapnp for more information.  
-*  
-  
-*For Elan P-series PCI card readers based on the Cirrus PD6729  
-PCI-to-PCMCIA bridge chip, the i82365 driver requires a  
-``irq_mode=1'' parameter.  
-*  
-  
-*For the Sycard PCChost1200 host adapter, the i82365 driver  
-requires a ``p2cclk=1'' parameter.  
-*  
-  
-*For the Alex Electronics PCICBI host adapter based on the TI 1221  
-bridge, the i82365 driver requires ``p2cclk=1 irq_mode=''  
-as well as PCMCIA driver release 3.1.23 or later.  
-*  
-  
-*With SCM Microsystems SBP series PCI card readers (which are also  
-being distributed with Lucent WaveLAN IEEE cards), and for the  
-Synchrotech PCM-CR-PC2IF and PCM-CR-PC2IR, it is necessary to  
-specify ``irq_mode='' for the i82365 module, to force use  
-of PCI interrupts.  
-*  
-  
-*For the !ActionTec PC 750 card reader, the i82365 driver requires  
-a ``irq_list='' parameter, to indicate that ISA interrupts are  
-unavailable.  
-*  
-  
-*The PLX Technologies PCI9052 (also sold as the Linksys WDT11) is not a  
-general purpose PCMCIA card reader at all: it is a PCI interface card  
-for use with certain wireless adapters, that makes them look like  
-ordinary PCI devices. These devices are not supported.  
-*  
-  
-  
-  
-  
-  
-!!2.4 System resource settings  
-  
-  
-  
-Card Services should automatically avoid allocating IO ports and  
-interrupts already in use by other standard devices. It will also  
-attempt to detect conflicts with unknown devices, but this is not  
-completely reliable. In some cases, you may need to explicitly  
-exclude resources for a device in /etc/pcmcia/config.opts.  
-  
-  
-Here are some resource settings for specific laptop types. View this  
-list with suspicion: it may give useful hints for solving problems,  
-but it is inevitably out of date and certainly contains mistakes.  
-Corrections and additions are welcome.  
-  
-  
-  
-  
-  
-*On the AMS !SoundPro, exclude irq 10.  
-*  
-  
-*On some AMS !TravelPro 5300 models, use memory 0xc8000-0xcffff.  
-*  
-  
-*On the BMX 486DX2-66, exclude irq 5, irq 9.  
-*  
-  
-*On the Chicony NB5, use memory 0xda000-0xdffff.  
-*  
-  
-*On the Compaq Presario 1020, exclude port 0x2f8-0x2ff, irq 3, irq 5.  
-*  
-  
-*On the Dell Inspiron 7000, exclude irq 3, irq 5.  
-*  
-  
-*On the Fujitsu C series, exclude port 0x200-0x27f.  
-*  
-  
-*On the HP Omnibook 4000C, exclude port 0x300-0x30f.  
-*  
-  
-*On the HP Omnibook 4100, exclude port 0x220-0x22f.  
-*  
-  
-*On the IBM !ThinkPad 380, and maybe the 385 and 600 series, exclude  
-port 0x230-0x233, and irq 5.  
-*  
-  
-*On IBM !ThinkPad 600 and 770 models with internal modems, exclude port  
-0x2f8-0x2ff.  
-*  
-  
-*On the IBM !ThinkPad 600E and 770Z, change the high memory window to  
-0x60000000-0x60ffffff.  
-*  
-  
-*On the Micron Millenia Transport, exclude irq 5, irq 9.  
-*  
-  
-*On the NEC Versa M, exclude irq 9, port 0x2e0-2ff.  
-*  
-  
-*On the NEC Versa P/75, exclude irq 5, irq 9.  
-*  
-  
-*On the NEC Versa S, exclude irq 9, irq 12.  
-*  
-  
-*On the NEC Versa 6000 series, exclude port 0x2f8-0x33f, irq 9, irq 10.  
-*  
-  
-*On the NEC Versa SX, exclude port 0x300-0x31f.  
-*  
-  
-*On the !ProStar 9200, Altima Virage, and Acquiline Hurricane DX4-100,  
-exclude irq 5, port 0x330-0x35f. Maybe use memory 0xd8000-0xdffff.  
-*  
-  
-*On the Siemens Nixdorf SIMATIC PG 720C, use memory 0xc0000-0xcffff,  
-port 0x300-0x3bf.  
-*  
-  
-*On the TI !TravelMate 5000, use memory 0xd4000-0xdffff.  
-*  
-  
-*On the Toshiba Satellite 4030CDS, exclude irq 9.  
-*  
-  
-*On the Toshiba T4900 CT, exclude irq 5, port 0x2e0-0x2e8, port  
-0x330-0x338.  
-*  
-  
-*On the Toshiba Tecra 8000, exclude irq 3, irq 5, irq 9.  
-*  
-  
-*On the Twinhead 5100, HP 4000, Sharp PC-8700 and PC-8900, exclude  
-irq 9 (sound), irq 12.  
-*  
-  
-*On an MPC 800 Series, exclude irq 5, port 0x300-0x30f for the CD-ROM.  
-*  
-  
-  
-  
-  
-  
-!!PowerBook specific settings  
-  
-  
-On PowerPC based !PowerBook systems, the default system resources in  
-/etc/pcmcia/config.opts file are no good at all. Replace all  
-the IO port and window definitions with something like:  
-  
-  
-  
-  
-  
-include port 0x100-0x4ff, port 0x1000-0x17ff  
-include memory 0x80000000-0x80ffffff  
-  
-  
-  
-  
-  
-  
-!! 2.5 Notes about specific Linux distributions  
-  
-  
-  
-This section is incomplete. Corrections and additions are welcome.  
-  
-  
-  
-  
-!Debian  
-  
-  
-Debian uses a System V boot script arrangement. The PCMCIA startup  
-script is installed as /etc/init.d/pcmcia. New packages use  
-/etc/default/pcmcia for startup options; older versions used  
-/etc/pcmcia.conf for this purpose. Debian's syslog  
-configuration will place kernel messages in /var/log/messages  
-and cardmgr messages in /var/log/daemon.log.  
-  
-  
-Debian distributes the PCMCIA system in two packages: the  
-``pcmcia-cs'' package contains cardmgr and other tools, man  
-pages, and configuration scripts; and the ``pcmcia-modules''  
-package contains the kernel driver modules.  
-  
-  
-Starting with 3.1.25, a clean PCMCIA install will identify Debian  
-systems and create a special network.opts file that, in the  
-absence of other network configuration settings, uses Debian's  
-ifup and ifdown commands to configure a network card based  
-on settings in /etc/network/interfaces.  
-  
-  
-  
-  
-!Red Hat, Caldera, Mandrake  
-  
-  
-These distributions use a System V boot script organization. The  
-PCMCIA startup script is installed as  
-/etc/rc.d/init.d/pcmcia, and boot options are kept in  
-/etc/sysconfig/pcmcia. Beware that installing the Red Hat  
-package may install a default boot option file that has PCMCIA  
-disabled. To enable PCMCIA, the ``PCMCIA'' variable should be  
-set to ``yes''. Red Hat's default syslogd configuration will  
-record all interesting messages in /var/log/messages.  
-  
-  
-Red Hat's PCMCIA package contains a replacement for the network setup  
-script, /etc/pcmcia/network, which meshes with the Red Hat  
-linuxconf configuration system. This is convenient for the case  
-where just one network adapter is used, with one set of network  
-parameters, but does not have the full flexibility of the regular  
-PCMCIA network script. Compiling and installing a clean PCMCIA source  
-distribution will overwrite the network script, breaking the link to  
-the Red Hat tools. If you prefer using the Red Hat tools, either use  
-only Red Hat RPM's, or replace /etc/pcmcia/network.opts with  
-the following:  
-  
-  
-  
-  
-  
-if [[ -f /etc/sysconfig/network-scripts/ifcfg-$2 ] ; then  
-start_fn () {  
-. /etc/sysconfig/network-scripts/ifcfg-$1  
-if [[ "$ONBOOT" = "yes" ] ; then /sbin/ifup $1 ; fi  
-}  
-stop_fn () {  
-/sbin/ifdown $1  
-}  
-fi  
-  
-  
-  
-  
-Starting with the 3.1.22 release, the PCMCIA installation script will  
-automatically append a variant of this to the default  
-network.opts file, so this problem should no longer be an issue.  
-  
-  
-If you do use linuxconf (or netconf) to configure your  
-network interface, leave the ``kernel module'', ``I/O port'', and  
-``irq'' parameters blank. Setting these parameters may interfere with  
-proper operation of the PCMCIA subsystem.  
-  
-  
-At boot time, when the Red Hat network subsystem starts up, it may say  
-``Delaying eth0 initialization'' and ``[[FAILED]''. This is actually  
-not a failure: it means that this network interface will not be  
-initialized until after the PCMCIA network device is configured.  
-  
-  
-Red Hat bundles their slightly modified PCMCIA source distribution  
-with their kernel sources, rather than as a separate source package.  
-When preparing to build a new set of PCMCIA drivers, you will  
-generally want to install Red Hat's kernel-source RPM  
-(kernel-source-*.i386.rpm), and not the kernel SRPM  
-(kernel-*.src.rpm). The SRPM is tailored for building their  
-kernel RPM files, which is not exactly what you want. With Red Hat  
-7., the kernel-source RPM also includes a mis-configured PCMCIA  
-source tree; if you want to use it, delete their PCMCIA config.out  
-file and re-do "make config".  
-  
-  
-  
-  
-!Slackware  
-  
-  
-Slackware uses a BSD boot script arrangement. The PCMCIA startup  
-script is installed as /etc/rc.d/rc.pcmcia, and boot options  
-are specified in rc.pcmcia itself. The PCMCIA startup script  
-is invoked from /etc/rc.d/rc.S.  
-  
-  
-  
-  
-!SuSE  
-  
-  
-SuSE uses a System V init script arrangement, with init scripts stored  
-under /sbin/init.d. The PCMCIA startup script is installed as  
-/sbin/init.d/pcmcia, and startup options are kept in  
-/etc/rc.config. The SuSE startup script is somewhat limited  
-and does not allow PCMCIA startup variables to be overridden from the  
-lilo boot prompt.  
-  
-  
-  
-----  
-  
-!!3. Resolving installation and configuration problems  
-  
-  
-This section describes some of the most common failure modes for the  
-PCMCIA subsystem. Try to match your symptoms against the examples.  
-This section only describes general failures that are not specific  
-to a particular client driver or type of card.  
-  
-  
-Before trying to diagnose a problem, you have to know where your  
-system log is kept (see  
-Notes about specific Linux distributions). You should also be familiar with  
-basic diagnostic tools like dmesg and lsmod. Also, be aware  
-that most driver components (including all the kernel modules) have  
-their own individual man pages.  
-  
-  
-In 3.1.15 and later releases, the debug-tools subdirectory of the  
-PCMCIA source tree has a few scripts to help diagnose some of the most  
-common configuration problems. The test_setup script checks your  
-PCMCIA installation for completeness. The test_network and  
-test_modem scripts will try to diagnose problems with PCMCIA  
-network and modem cards. These scripts can be particularly helpful if  
-you are unfamiliar with Linux and are not sure how to approach a  
-problem.  
-  
-  
-Try to define your problem as narrowly as possible. If you have  
-several cards, try each card in isolation, and in different  
-combinations. Try cold Linux boots, versus warm boots from Windows.  
-Compare booting with cards inserted, versus inserting cards after  
-boot. If you normally use your laptop docked, try it undocked. And  
-sometimes, two sockets will behave differently.  
-  
-  
-For debugging problems in the device configuration scripts, it may be  
-useful to start cardmgr with the ``-v'' option. With a  
-3.1.23 or later PCMCIA package, this will cause most important script  
-actions to be recorded in the system log.  
-  
-  
-It is nearly impossible to debug driver problems encountered when  
-attempting to install Linux via a PCMCIA device. Even if you can  
-identify the problem based on its symptoms, installation disks are  
-difficult to modify, especially without access to a running Linux  
-system. Customization of installation disks is completely dependent  
-on the choice of Linux distribution, and is beyond the scope of this  
-document. In general, the best course of action is to install Linux  
-using some other means, obtain the latest drivers, and then debug the  
-problem if it persists.  
-  
-  
-  
-  
-!!3.1 Base PCMCIA kernel modules do not load  
-  
-  
-  
-Symptoms:  
-  
-  
-*Kernel version mismatch errors are reported when the PCMCIA  
-startup script runs.  
-*  
-  
-*After startup, lsmod does not show any PCMCIA modules.  
-*  
-  
-*cardmgr reports ``no pcmcia driver in  
-/proc/devices'' in the system log.  
-*  
-  
-  
-  
-Kernel modules contain version information that is checked against the  
-current kernel when a module is loaded. The type of checking depends  
-on the setting of the CONFIG_MODVERSIONS kernel option. If this  
-is false, then the kernel version number is compiled into each module,  
-and insmod checks this for a match with the running kernel. If  
-CONFIG_MODVERSIONS is true, then each symbol exported by the  
-kernel is given a sort of checksum. These codes are all compared  
-against the corresponding codes compiled into a module. The intent  
-was for this to make modules less version-dependent, because the  
-checksums would only change if a kernel interface changed, and would  
-generally stay the same across minor kernel updates. In practice, the  
-checksums have turned out to be even more restrictive, because many  
-kernel interfaces depend on compile-time kernel option settings.  
-Also, the checksums turned out to be an excessively pessimistic judge  
-of compatibility.  
-  
-  
-The practical upshot of this is that kernel modules are closely tied  
-to both the kernel version, and the setting of many kernel  
-configuration options. Generally, a set of modules compiled for one  
-2..31 kernel will not load against some other 2..31 kernel unless  
-special care is taken to ensure that the two were built with similar  
-configurations. This makes distribution of precompiled kernel modules  
-a tricky business.  
-  
-  
-You have several options:  
-  
-  
-  
-  
-  
-*If you obtained precompiled drivers as part of a Linux  
-distribution, verify that you are using an unmodified kernel as  
-supplied with that distribution. If you intend to use precompiled  
-modules, you generally must stick with the corresponding kernel.  
-*  
-  
-*If you have reconfigured or upgraded your kernel, you will  
-probably need to compile and install the PCMCIA package from scratch.  
-This is easily done if you already have the kernel source tree  
-installed. See  
-Compilation and installation  
-for detailed instructions.  
-*  
-  
-*In some cases, incompatibilities in other system components can  
-prevent correct loading of kernel modules. If you have upgraded your  
-own kernel, pay attention to the ``minimal requirements'' for module  
-utilities and binutils listed in the Documentation/Changes  
-file in the kernel source code tree.  
-  
-*  
-  
-  
-  
-  
-  
-!!3.2 Some client driver modules do not load  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*The base modules (pcmcia_core, ds, i82365) load correctly.  
-*  
-  
-*Inserting a card gives a high beep + low beep pattern.  
-*  
-  
-*cardmgr reports version mismatch errors in the system log.  
-*  
-  
-  
-  
-Some of the driver modules require kernel services that may or may not  
-be present, depending on kernel configuration. For instance, the SCSI  
-card drivers require that the kernel be configured with SCSI support,  
-and the network drivers require a networking kernel. If a kernel  
-lacks a necessary feature, insmod may report undefined symbols  
-and refuse to load a particular module. Note that insmod error  
-messages do not distinguish between version mismatch errors and  
-missing symbol errors.  
-  
-  
-Specifically:  
-  
-  
-*The serial client driver serial_cs requires the kernel  
-serial driver to be enabled with CONFIG_SERIAL. This driver may  
-be built as a module.  
-*  
-  
-*Support for multiport serial cards or multifunction cards that  
-include serial or modem devices requires CONFIG_SERIAL_SHARE_IRQ  
-to be enabled.  
-*  
-  
-*The SCSI client drivers require that CONFIG_SCSI be  
-enabled, along with the appropriate top level driver options  
-(CONFIG_BLK_DEV_SD, CONFIG_BLK_DEV_SR, etc for 2.1  
-kernels). These may be built as modules.  
-*  
-  
-*The network client drivers require that CONFIG_INET is  
-enabled. Kernel networking support cannot be compiled as a module.  
-*  
-  
-*The token-ring client requires that the kernel be compiled with  
-CONFIG_TR enabled.  
-*  
-  
-  
-  
-There are two ways to proceed:  
-  
-  
-*Rebuild your kernel with the necessary features enabled.  
-*  
-  
-*If the features have been compiled as modules, then modify  
-/etc/pcmcia/config to preload these modules.  
-*  
-  
-  
-  
-The /etc/pcmcia/config file can specify that additional  
-modules need to be loaded for a particular client. For example, for  
-the serial driver, one would use:  
-  
-  
-  
-  
-  
-device "serial_cs"  
-class "serial" module "misc/serial", "serial_cs"  
-  
-  
-  
-  
-Module paths are specified relative to the top-level module directory  
-for the current kernel version; if no relative path is given, then the  
-path defaults to the pcmcia subdirectory.  
-  
-  
-  
-  
-!! 3.3 Interrupt scan failures  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*The system locks up when the PCMCIA drivers are loaded, even  
-with no cards present.  
-*  
-  
-*The system log shows a successful host controller probe just  
-before the lock-up, but does not show interrupt probe results.  
-*  
-  
-  
-  
-After identifying the host controller type, the socket driver probes  
-for free interrupts. The probe involves programming the controller for  
-each apparently free interrupt, then generating a ``soft'' interrupt,  
-to see if the interrupt can be detected correctly. In some cases,  
-probing a particular interrupt can interfere with another system  
-device.  
-  
-  
-The reason for the probe is to identify interrupts which appear to be  
-free (i.e., are not reserved by any other Linux device driver), yet  
-are either not physically wired to the host controller, or are  
-connected to another device that does not have a driver.  
-  
-  
-In the system log, a successful probe might look like:  
-  
-  
-  
-  
-  
-Intel PCIC probe:  
-TI 1130 !CardBus at mem 0x10211000, 2 sockets  
-...  
-ISA irqs (scanned) = 5,7,9,10 status change on irq 10  
-  
-  
-  
-  
-There are two ways to proceed:  
-  
-  
-*The interrupt probe can be restricted to a list of interrupts  
-using the irq_list parameter for the socket drivers. For  
-example, ``irq_list=5,9,10'' would limit the scan to three  
-interrupts. All PCMCIA devices will be restricted to using these  
-interrupts (assuming they pass the probe). You may need to use trial  
-and error to find out which interrupts can be safely probed.  
-*  
-  
-*The interrupt probe can be disabled entirely by loading the  
-socket driver with the ``do_scan='' option. In this case, a default  
-interrupt list will be used, which avoids interrupts already  
-allocated for other devices.  
-*  
-  
-  
-  
-In either case, the probe options can be specified using the  
-PCIC_OPTS definition in the PCMCIA startup script, for example:  
-  
-  
-  
-  
-  
-PCIC_OPTS="irq_list=5,9,10"  
-  
-  
-  
-  
-It should be noted that /proc/interrupts is completely  
-useless when it comes to diagnosing interrupt probe problems. The  
-probe is sensible enough to never attempt to use an interrupt that is  
-already in use by another Linux driver. So, the PCMCIA drivers are  
-already using all the information in /proc/interrupts.  
-Depending on system design, an inactive device can still occupy an  
-interrupt and cause trouble if it is probed for PCMCIA.  
-  
-  
-  
-  
-!! 3.4 IO port scan failures  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*The system locks up when cardmgr is first started. For  
-3.1.24, the lockup happens even with no cards present; for 3.1.25, a  
-card must be inserted.  
-*  
-  
-*The system log shows a successful host controller probe,  
-including interrupt probe results, but does not show IO probe  
-results.  
-*  
-  
-*In some cases, the IO probe will succeed, but report large  
-numbers of random exclusions.  
-*  
-  
-  
-  
-When cardmgr processes IO port ranges listed in  
-/etc/pcmcia/config.opts, the kernel probes these ranges to  
-detect latent devices that occupy IO space but are not associated  
-with a Linux driver. The probe is read-only, but in rare cases,  
-reading from a device may interfere with an important system function,  
-resulting in a lock-up.  
-  
-  
-Your system user's guide may include a map of system devices, showing  
-their IO and memory ranges. These can be explicitly excluded in  
-config.opts.  
-  
-  
-Alternatively, if the probe is unreliable on your  
-system, it can be disabled by setting CORE_OPTS to  
-``probe_io=''. In this case, you should be very careful to  
-specify only genuinely available ranges of ports in config.opts,  
-instead of using the default settings.  
-  
-  
-  
-  
-!!3.5 Memory probe failures  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*The core drivers load correctly when no cards are present, with  
-no errors in the system log.  
-*  
-  
-*The system freezes and/or reboots as soon as any card is  
-inserted, before any beeps are heard.  
-*  
-  
-  
-  
-Or alternately:  
-  
-  
-*All card insertions generate a high beep followed by a low beep.  
-*  
-  
-*All cards are identified as ``anonymous memory cards''.  
-*  
-  
-*The system log reports that various memory ranges have been  
-excluded.  
-*  
-  
-  
-  
-The core modules perform a memory scan at the time of first 16-bit  
-card insertion. This scan can potentially interfere with other memory  
-mapped devices. Also, pre-3..0 driver packages perform a more  
-aggressive scan than more recent drivers. The memory window is  
-defined in /etc/pcmcia/config.opts. The default window is  
-large, so it may help to restrict the scan to a narrower range.  
-Reasonable ranges to try include 0xd0000-0xdffff, 0xc0000-0xcffff,  
-0xc8000-0xcffff, or 0xd8000-0xdffff.  
-  
-  
-If you have DOS or Windows PCMCIA drivers, you may be able to deduce  
-what memory region those drivers use. Note that DOS memory addresses  
-are often specified in ``segment'' form, which leaves off the final  
-hex digit (so an absolute address of 0xd0000 might be given as  
-0xd000). Be sure to add the extra digit back when making changes to  
-config.opts.  
-  
-  
-In unusual cases, a memory probe failure can indicate a timing  
-register setup problem with the host controller. See the  
-Startup options section for information about  
-dealing with common timing problems.  
-  
-  
-  
-  
-  
-*cs: warning: no high memory space available!  
-*  
-  
-  
-  
-!CardBus bridges can allocate memory windows outside of the 640KB-1MB  
-``memory hole'' in the ISA bus architecture. It is generally a good  
-idea to configure !CardBus bridges to use high memory windows, because  
-these are unlikely to conflict with other devices. Also, !CardBus  
-cards may require large memory windows, which may be difficult or  
-impossible to fit into low memory. Card Services will preferentially  
-allocate windows in high memory for !CardBus bridges, if both low and  
-high memory windows are defined in config.opts.  
-The default config.opts now includes a high memory window of  
-0xa0000000-0xa0ffffff. If you have a !CardBus bridge and have upgraded  
-from an older PCMCIA driver release, add this memory window if it is  
-not already defined.  
-  
-  
-In some cases, the default high memory window is not usable. On some  
-IBM Thinkpad models, a window of 0x60000000-0x60ffffff will work in  
-place of the default window.  
-  
-  
-  
-  
-!!3.6 Failure to detect card insertions and removals  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*Cards are detected and configured properly if present at boot  
-time.  
-*  
-  
-*The drivers do not respond to insertion and removal events,  
-either by recording events in the system log, or by beeping.  
-*  
-  
-  
-  
-In most cases, the socket driver (i82365 or tcic) will  
-automatically probe and select an appropriate interrupt to signal card  
-status changes. The automatic interrupt probe doesn't work on some  
-Intel-compatible controllers, including Cirrus chips and the chips  
-used in some IBM !ThinkPads. If a device is inactive at probe time,  
-its interrupt may also appear to be available. In these cases, the  
-socket driver may pick an interrupt that is used by another device.  
-  
-  
-With the i82365 and tcic drivers, the irq_list option  
-can be used to limit the interrupts that will be tested. This list  
-limits the set of interrupts that can be used by PCMCIA cards as well  
-as for monitoring card status changes. The cs_irq option can  
-also be used to explicitly set the interrupt to be used for monitoring  
-card status changes.  
-  
-  
-If you can't find an interrupt number that works, there is also a  
-polled status mode: both i82365 and tcic will accept a  
-poll_interval=100 option, to poll for card status changes once  
-per second. This option should also be used if your system has a  
-shortage of interrupts available for use by PCMCIA cards. Especially  
-for systems with more than one host controller, there is little  
-point in dedicating interrupts for monitoring card status changes.  
-  
-  
-All these options should be set in the PCIC_OPTS= line in either  
-/etc/rc.d/rc.pcmcia or /etc/sysconfig/pcmcia,  
-depending on your site setup.  
-  
-  
-  
-  
-!!3.7 Interrupt delivery problems  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*Cards appear to be configured successfully, but don't work.  
-*  
-  
-*Serial and modem cards may respond very sluggishly.  
-*  
-  
-*Network cards may report ``interrupt(s) dropped'', and/or  
-transmit timeouts.  
-*  
-  
-  
-  
-The most simple interrupt delivery problems are due to conflicts with  
-other system devices. These can generally be resolved by excluding  
-problem interrupts in /etc/pcmcia/config.opts. To test, just  
-exclude interrupts one by one until either the problem is fixed or you  
-run out of interrupts. If no interrupts work, then device conflicts  
-are probably not the problem.  
-  
-  
-For !CardBus bridges, a variety of other interrupt delivery issues may  
-come into play. For a complete discussion, see  
-PCI interrupt delivery problems.  
-  
-  
-  
-  
-!!3.8 System resource starvation  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*When a card is inserted, it is identified correctly but cannot  
-be configured (high/low beep pattern).  
-*  
-  
-*One of the following messages will appear in the system log:  
-  
-  
-RequestIO: Resource in use  
-RequestIRQ: Resource in use  
-!RequestWindow: Resource in use  
-!GetNextTuple: No more items  
-could not allocate nn IO ports for !CardBus socket n  
-could not allocate nnK memory for !CardBus socket n  
-could not allocate interrupt for !CardBus socket n  
-  
-  
-  
-*  
-  
-  
-  
-Interrupt starvation often indicates a problem with the interrupt  
-probe (see  
-Interrupt scan failures). In  
-some cases, the probe will seem to work, but only report one or two  
-available interrupts. Check your system log to see if the scan  
-results look sensible. Disabling the probe and selecting interrupts  
-manually should help.  
-  
-  
-If the interrupt probe is not working properly, the socket driver may  
-allocate an interrupt for monitoring card insertions, even when  
-interrupts are too scarce for this to be a good idea. You can switch  
-the controller to polled mode by setting PCIC_OPTS to  
-``poll_interval=100'. Or, if you have a !CardBus controller and  
-an older version of the PCMCIA drivers, try ``pci_csc=1'', which  
-selects a PCI interrupt (if available) for card status changes.  
-  
-  
-IO port starvation is fairly uncommon, but sometimes happens with  
-cards that require large, contiguous, aligned regions of IO port  
-space, or that only recognize a few specific IO port positions. The  
-default IO port ranges in /etc/pcmcia/config.opts are  
-normally sufficient, but may be extended. If this is the problem,  
-try uncommenting the ``include port 0x1000-0x17ff'' line in  
-config.opts. In rare cases, starvation may indicate that the IO  
-port probe failed (see  
-IO port scan failures).  
-  
-  
-Memory starvation is also uncommon with the default memory window  
-settings in config.opts. !CardBus cards may require larger memory  
-regions than typical 16-bit cards. Since !CardBus memory windows can  
-be mapped anywhere in the host's PCI address space (rather than just  
-in the 640K-1MB ``hole'' in PC systems), it is helpful to specify  
-large memory windows in high memory, such as 0xa0000000-0xa0ffffff.  
-  
-  
-  
-  
-!!3.9 Resource conflict only with two cards inserted  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*Two cards each work fine when used separately.  
-*  
-  
-*When both cards are inserted, only one works.  
-*  
-  
-  
-  
-This usually indicates a resource conflict with a system device that  
-Linux does not know about. PCMCIA devices are dynamically configured,  
-so, for example, interrupts are allocated as needed, rather than  
-specifically assigned to particular cards or sockets. Given a list of  
-resources that appear to be available, cards are assigned resources in  
-the order they are configured. In this case, the card configured last  
-is being assigned a resource that in fact is not free.  
-  
-  
-Check the system log to see what resources are used by the non-working  
-card. Exclude these in /etc/pcmcia/config.opts, and restart  
-the cardmgr daemon to reload the resource database.  
-  
-  
-  
-  
-!!3.10 Device configuration does not complete  
-  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*When a card is inserted, exactly one high beep is heard.  
-*  
-  
-*Subsequent card insertions and removals may be ignored.  
-*  
-  
-  
-  
-This indicates that the card was identified successfully, however,  
-cardmgr has been unable to complete the configuration process for  
-some reason. The most likely reason is that a step in the card setup  
-script has blocked. A good example would be the network script  
-blocking if a network card is inserted with no actual network hookup  
-present.  
-  
-  
-To pinpoint the problem, you can manually run a setup script to see  
-where it is blocking. The scripts are in the /etc/pcmcia  
-directory. They take two parameters: a device name, and an action.  
-The cardmgr daemon records the configuration commands in the  
-system log. For example, if the system log shows that the command  
-``./network start eth0'' was the last command executed by  
-cardmgr, the following command would trace the script:  
-  
-  
-  
-  
-  
-sh -x /etc/pcmcia/network start eth0  
-  
-  
-  
-  
-  
-----  
-  
-!!4. Usage and features  
-  
-!!4.1 Tools for configuring and monitoring PCMCIA devices  
-  
-  
-  
-If the modules are all loaded correctly, the output of the lsmod  
-command should look like the following, when no cards are inserted:  
-  
-  
-  
-  
-  
-Module Size Used by  
-ds 5640 2  
-i82365 15452 2  
-pcmcia_core 30012 3 [[ds i82365]  
-  
-  
-  
-  
-The system log should also include output from the socket driver  
-describing the host controller(s) found and the number of sockets  
-detected.  
-  
-  
-  
-  
-!The cardmgr configuration daemon  
-  
-  
-The cardmgr daemon is responsible for monitoring  
-PCMCIA sockets,  
-loading client drivers when needed, and running user-level scripts in  
-response to card insertions and removals. It records its actions in  
-the system log, but also uses beeps to signal card status changes.  
-The tones of the beeps indicate success or failure of particular  
-configuration steps. Two high beeps indicate that a card was  
-identified and configured successfully. A high beep followed by a low  
-beep indicates that a card was identified, but could not be configured  
-for some reason. One low beep indicates that a card could not be  
-identified.  
-  
-  
-The cardmgr daemon configures cards based on a database of known  
-card types kept in /etc/pcmcia/config. This file  
-describes the various client drivers, then describes how to identify  
-various cards, and which driver(s) belong with which cards. The  
-format of this file is described in the pcmcia(5) man page.  
-  
-  
-  
-  
-!The socket status file, stab  
-  
-  
-  
-  
-  
-Cardmgr records device information for each socket in  
-/var/lib/pcmcia/stab. Here is a sample  
-stab listing:  
-  
-  
-  
-  
-  
-Socket : Adaptec APA-1460 SlimSCSI  
-0 scsi aha152x_cs 0 sda 8  
-0 scsi aha152x_cs 1 scd0 11  
-Socket 1: Serial or Modem Card  
-1 serial serial_cs 0 ttyS1 5 65  
-  
-  
-  
-  
-For the lines describing devices, the first field is the socket, the  
-second is the device class, the third is the driver name, the fourth  
-is used to number multiple devices associated with the same driver,  
-the fifth is the device name, and the final two fields are the major  
-and minor device numbers for this device (if applicable). See the  
-stab man page for more info.  
-  
-  
-  
-  
-!The cardctl and cardinfo utilities  
-  
-  
-  
-  
-  
-The cardctl command can be used to check the status of a  
-socket, or to see how it is configured. It can also be used to alter  
-the configuration status of a card. Here is an example of the  
-output of the ``cardctl config'' command:  
-  
-  
-  
-  
-  
-Socket :  
-not configured  
-Socket 1:  
-Vcc = 5., Vpp1 = ., Vpp2 = .  
-Card type is memory and I/O  
-IRQ 3 is dynamic shared, level mode, enabled  
-Speaker output is enabled  
-Function :  
-Config register base = 0x0800  
-Option = 0x63, status = 0x08  
-I/O window 1: 0x0280 to 0x02bf, auto sized  
-I/O window 2: 0x02f8 to 0x02ff, 8 bit  
-  
-  
-  
-  
-Or ``cardctl ident'', to get card identification information:  
-  
-  
-  
-  
-  
-Socket :  
-no product info available  
-Socket 1:  
-product info: "LINKSYS", "PCMLM336", "A", "0040052D6400"  
-manfid: 0x0143, 0xc0ab  
-function: 0 (multifunction)  
-  
-  
-  
-  
-The ``cardctl suspend'' and ``cardctl resume'' commands can  
-be used to shut down a card without unloading its associated drivers.  
-The ``cardctl reset'' command attempts to reset and reconfigure a  
-card. ``cardctl insert'' and ``cardctl eject'' mimic the  
-actions performed when a card is physically inserted or ejected,  
-including loading or unloading drivers, and configuring or shutting  
-down devices.  
-  
-  
-If you are running X, the cardinfo utility produces  
-a graphical display showing the current status of all PCMCIA sockets,  
-similar in content to ``cardctl config''. It also provides a  
-graphical interface to most other cardctl functions.  
-  
-  
-  
-  
-!Inserting and ejecting cards  
-  
-  
-In theory, you can insert and remove PCMCIA cards at any time.  
-However, it is a good idea not to eject a card that is currently being  
-used by an application program. Kernels older than 1.1.77 would often  
-lock up when serial/modem cards were ejected, but this should be fixed  
-now.  
-  
-  
-Some card types cannot be safely hot ejected. Specifically, ATA/IDE  
-and SCSI interface cards are not hot-swap-safe. This is unlikely to  
-be fixed, because a complete solution would require significant  
-changes to the Linux block device model. Also, it is generally not  
-safe to hot eject !CardBus cards of any type. This is likely to  
-improve gradually as hot swap bugs in the !CardBus drivers are found  
-and fixed. For these card types (IDE, SCSI, !CardBus), it is  
-recommended that you always use ``cardctl eject'' before  
-ejecting.  
-  
-  
-  
-  
-!Card Services and Advanced Power Management  
-  
-  
-Card Services can be compiled with support for APM  
-(Advanced Power Management) if you've configured your  
-kernel with APM support. The APM kernel driver is maintained by  
-Stephen Rothwell (Stephen.Rothwell@canb.auug.org.au). The apmd  
-daemon is maintained by Avery Pennarun (apenwarr@worldvisions.ca), with  
-more information available at  
-http://www.worldvisions.ca/~apenwarr/apmd/. The PCMCIA  
-modules will automatically be configured for APM if a compatible  
-version is detected on your system.  
-  
-  
-Whether or not APM is configured, you can use ``cardctl suspend''  
-before suspending your laptop, and ``cardctl resume'' after  
-resuming, to cleanly shut down and restart your PCMCIA cards. This  
-will not work with a modem that is in use, because the serial driver  
-isn't able to save and restore the modem operating parameters.  
-  
-  
-APM seems to be unstable on some systems. If you experience trouble  
-with APM and PCMCIA on your system, try to narrow down the problem to  
-one package or the other before reporting a bug.  
-  
-  
-Some drivers, notably the PCMCIA SCSI drivers, cannot recover from a  
-suspend/resume cycle. When using a PCMCIA SCSI card, always use  
-``cardctl eject'' prior to suspending the system.  
-  
-  
-  
-  
-!Shutting down the PCMCIA system  
-  
-  
-To unload the entire PCMCIA package, invoke rc.pcmcia with:  
-  
-  
-  
-  
-  
-/etc/rc.d/rc.pcmcia stop  
-  
-  
-  
-  
-This script will take several seconds to run, to give all client  
-drivers time to shut down gracefully. If a device is currently in  
-use, the shutdown will be incomplete, and some kernel modules may not  
-be unloaded. To avoid this, use ``cardctl eject'' to shut down  
-all sockets before invoking rc.pcmcia. The exit status of the  
-cardctl command will indicate if any sockets could not be shut  
-down.  
-  
-  
-  
-  
-!! 4.2 Overview of the PCMCIA configuration scripts  
-  
-  
-  
-Each PCMCIA device has an associated ``class'' that describes how it  
-should be configured and managed. Classes are associated with device  
-drivers in /etc/pcmcia/config. There are currently five IO  
-device classes (network, SCSI, cdrom, fixed disk, and serial) and  
-two memory device classes (memory and FTL). For each class,  
-there are two  
-scripts in /etc/pcmcia: a main configuration script  
-(i.e., /etc/pcmcia/scsi for SCSI devices), and an options  
-script (i.e., /etc/pcmcia/scsi.opts). The main script for a  
-device will be invoked to configure that device when a card is  
-inserted, and to shut down the device when the card is removed. For  
-cards with several associated devices, the script will be invoked for  
-each device.  
-  
-  
-The config scripts start by extracting some information about a device  
-from the stab file. Each script constructs a ``device address'',  
-that uniquely describes the device it has been asked to configure, in  
-the ADDRESS shell variable. This is passed to the *.opts  
-script, which should return information about how a device at this  
-address should be configured. For some devices, the device address is  
-just the socket number. For others, it includes extra information  
-that may be useful in deciding how to configure the device. For  
-example, network devices pass their hardware ethernet address as part  
-of the device address, so the network.opts script could use this  
-to select from several different configurations.  
-  
-  
-The first part of all device addresses is the current PCMCIA  
-``scheme''. This parameter is used to support multiple sets of device  
-configurations based on a single external user-specified variable.  
-One use of schemes would be to have a ``home'' scheme, and a ``work''  
-scheme, which would include different sets of network configuration  
-parameters. The current scheme is selected using the ``cardctl  
-scheme'' command. The default if no scheme is set is ``default''.  
-  
-  
-There are a few additional shell variables that can be used in  
-*.opts files in addition to ADDRESS. The most useful are  
-DEVICE, the current device name or network interface name; and  
-DRIVER, the driver name, sometimes useful for distinguishing  
-different sorts of network devices. As the *.opts files are just  
-shell scripts, it is not required that they follow the form of the  
-examples, which just return settings based on ADDRESS.  
-  
-  
-As a general rule, when configuring Linux for a laptop, PCMCIA devices  
-should only be configured from the PCMCIA device scripts. Do not try  
-to configure a PCMCIA device the same way you would configure a  
-permanently attached device. However, some Linux distributions  
-provide PCMCIA packages that are hooked into those distributions' own  
-device configuration tools. In that case, some of the following  
-sections may not apply; ideally, this will be documented by the  
-distribution maintainers.  
-  
-  
-  
-  
-!!4.3 PCMCIA network adapters  
-  
-  
-  
-Linux ethernet-type network interfaces normally have names like  
-eth0, eth1, and so on. Token-ring adapters are handled  
-similarly, however they are named tr0, tr1, and so on.  
-The ifconfig command is used to  
-view or modify the state of a network interface. A peculiarity of  
-Linux is that network interfaces do not have corresponding device  
-files under /dev, so do not be surprised when you do not find  
-them.  
-  
-  
-When an ethernet card is detected, it will be assigned the first free  
-interface name, which will normally be eth0. Cardmgr will  
-run the /etc/pcmcia/network script to configure the  
-interface, which normally reads network settings from  
-/etc/pcmcia/network.opts. The network and  
-network.opts scripts will be executed only when your ethernet  
-card is actually present. If your system has an automatic network  
-configuration facility, it may or may not be PCMCIA-aware. Consult  
-the documentation of your Linux distribution and the  
-Notes about specific Linux distributions to determine if PCMCIA network devices should be  
-configured with the automatic tools, or by editing network.opts.  
-  
-  
-The device address passed to network.opts consists of four  
-comma-separated fields: the scheme, the socket number, the device  
-instance, and the card's hardware ethernet address. The device  
-instance is used to  
-number devices for cards that have several network interfaces, so it  
-will usually be . If you have several network cards used for  
-different purposes, one option would be to configure the cards based  
-on socket position, as in:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,,*,*)  
-# definitions for network card in socket  
-;;  
-*,1,*,*)  
-# definitions for network card in socket 1  
-;;  
-esac  
-  
-  
-  
-  
-Alternatively, they could be configured using their hardware  
-addresses, as in:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,*,*,00:80:C8:76:00:B1)  
-# definitions for a D-Link card  
-;;  
-*,*,*,08:00:5A:44:80:01)  
-# definitions for an IBM card  
-esac  
-  
-  
-  
-  
-  
-  
-!Network device parameters  
-  
-  
-The following parameters can be defined in network.opts:  
-  
-  
-  
-  
-; __IF_PORT__:  
-  
-Specifies the ethernet transceiver type, for certain 16-bit cards that  
-do not autodetect. See ``man ifport'' for more information.  
-; __BOOTP__:  
-  
-A boolean (y/n) value: indicates if the host's IP address and routing  
-information should be obtained using the BOOTP protocol, with  
-bootpc or pump.  
-; __DHCP__:  
-  
-A boolean (y/n) value: indicates if the host's IP address and routing  
-information should be obtained from a DHCP server. The network script  
-first looks for dhcpcd, then dhclient, then pump.  
-; __DHCP_HOSTNAME__:  
-  
-Specifies a hostname to be passed to dhcpcd or pump, for  
-inclusion in DHCP messages.  
-; __IPADDR__:  
-  
-The IP address for this interface.  
-; __NETMASK, BROADCAST, NETWORK__:  
-  
-Basic network parameters: see the networking HOWTO for more  
-information.  
-; __GATEWAY__:  
-  
-The IP address of a gateway for this host's subnet. Packets with  
-destinations outside this subnet will be routed to this gateway.  
-; __DOMAIN__:  
-  
-The local network domain name for this host, to be used in creating  
-/etc/resolv.conf.  
-; __SEARCH__:  
-  
-A search list for host name lookup, to be added to  
-/etc/resolv.conf. DOMAIN and SEARCH are mutually  
-exclusive: see ``man resolver'' for more information.  
-; __DNS_1, DNS_2, DNS_3__:  
-  
-Host names or IP addresses for nameservers for this interface, to be  
-added to /etc/resolv.conf  
-; __MOUNTS__:  
-  
-A space-separated list of NFS mount points to be mounted for this interface.  
-; __IPX_FRAME, IPX_NETNUM__:  
-  
-For IPX networks: the frame type and network number, passed to the  
-ipx_interface command.  
-; __NO_CHECK, NO_FUSER__:  
-  
-Boolean (y/n) settings for card eject policy. If NO_CHECK is  
-set, then ``cardctl eject'' will shut down a device even if  
-there are open connections. If NO_FUSER is set, then the script  
-will not check for busy NFS mounts or kill processes using those mounts.  
-  
-  
-  
-For example:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,*,*,*)  
-IF_PORT="10base2"  
-BOOTP="n"  
-IPADDR="10...1"  
-NETMASK="255.255.255."  
-NETWORK="10..."  
-BROADCAST="10...255"  
-GATEWAY="10...1"  
-DOMAIN="domain.org"  
-DNS_1="dns1.domain.org"  
-;;  
-esac  
-  
-  
-  
-  
-To automatically mount and unmount NFS filesystems, first add all  
-these filesystems to /etc/fstab, but include noauto  
-in the mount options. In network.opts, list the filesystem  
-mount points in the MOUNTS variable. It is especially  
-important to use either cardctl or cardinfo to shut down a  
-network card when NFS mounts are active. It is not possible to  
-cleanly unmount NFS filesystems if a network card is simply ejected  
-without warning.  
-  
-  
-In addition to the usual network configuration parameters, the  
-network.opts script can specify extra actions to be taken after  
-an interface is configured, or before an interface is shut down. If  
-network.opts defines a shell function called start_fn, it  
-will be invoked by the network script after the interface is  
-configured, and the interface name will be passed to the function as its  
-first (and only) argument. Similarly, if it is defined, stop_fn  
-will be invoked before shutting down an interface.  
-  
-  
-The transceiver type for some cards can be selected using the  
-IF_PORT setting. This can either be a numeric value, or a  
-keyword identifying the transceiver type. All the network drivers  
-default to either autodetect the interface if possible, or 10baseT  
-otherwise. The ifport command can be used to check or set the  
-current transceiver type. For example:  
-  
-  
-  
-  
-  
-# ifport eth0 10base2  
-#  
-# ifport eth0  
-eth0 2 (10base2)  
-  
-  
-  
-  
-The current (3..10 or later) 3c589 driver should quickly autodetect  
-transceiver changes at any time. Earlier releases of the 3c589 driver  
-had a somewhat slow and flaky transceiver autodetection algorithm.  
-For these releases, the appropriate network cable should be connected  
-to the card when the card is configured, or you can force  
-autodetection with:  
-  
-  
-  
-  
-  
-ifconfig eth0 down up  
-  
-  
-  
-  
-  
-  
-!Comments about specific cards  
-  
-  
-  
-  
-  
-  
-  
-  
-*With IBM CCAE and Socket EA cards, the transceiver type (10base2,  
-10baseT, AUI) needs to be set when the network device is configured.  
-Make sure that the transceiver type reported in the system log matches  
-your connection.  
-*  
-  
-*The Farallon !EtherWave is actually based on the 3Com 3c589, with a  
-special transceiver. Though the !EtherWave uses 10baseT-style  
-connections, its transceiver requires that the 3c589 be configured in  
-10base2 mode.  
-*  
-  
-*If you have trouble with an IBM CCAE, NE4100, Thomas Conrad, or  
-Kingston adapter, try increasing the memory access  
-time with the mem_speed=# option to the pcnet_cs module.  
-An example of how to do this is given in the standard config.opts  
-file. Try speeds of up to 1000 (in nanoseconds).  
-*  
-  
-*For the New Media Ethernet adapter, on some systems, it may be  
-necessary to increase the IO port access time with the  
-io_speed=# option when the pcmcia_core module is loaded.  
-Edit CORE_OPTS in the startup script to set this option.  
-*  
-  
-*The multicast support in the New Media Ethernet driver is incomplete.  
-The latest driver will function with multicast kernels, but will ignore  
-multicast packets. Promiscuous mode should work properly.  
-*  
-  
-*The driver used by the IBM and 3Com token ring adapters  
-seems to behave very badly if the cards are not connected to a ring  
-when they get initialized. Always connect these cards to the net  
-before they are powered up. If ifconfig reports the hardware  
-address as all 's, this is likely to be due to a memory window  
-configuration problem.  
-*  
-  
-*Some Linksys, D-Link, and IC-Card 10baseT/10base2 cards have a unique  
-way of selecting the transceiver type that isn't handled by the Linux  
-drivers. One workaround is to boot DOS and use the vendor-supplied  
-utility to select the transceiver, then warm boot Linux.  
-Alternatively, a Linux utility to perform this function is available  
-at  
-http://pcmcia-cs.sourceforge.net/ftp/extras/dlport.c.  
-*  
-  
-*16-bit PCMCIA cards have a maximum performance of 1.5-2 MB/sec. That  
-means that any 16-bit 100baseT card (i.e., any card that uses the  
-pcnet_cs, 3c574_cs, smc91c92_cs, or xirc2ps_cs  
-driver) will never achieve full 100baseT throughput. Only !CardBus  
-network adapters can fully exploit 100baseT data rates.  
-*  
-  
-*For WaveLAN wireless network adapters, Jean Tourrilhes  
-(jt@hpl.hp.com) has put together a wireless HOWTO at  
-http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/.  
-*  
-  
-  
-  
-  
-  
-!Diagnosing problems with network adapters  
-  
-  
-  
-  
-  
-  
-  
-  
-*In 3.1.15 and later PCMCIA releases, the test_network script in  
-the debug-tools subdirectory of the PCMCIA source tree will spot  
-some common problems.  
-*  
-  
-*Is your card recognized as an ethernet card? Check the system log and  
-make sure that cardmgr identifies the card correctly and starts  
-up one of the network drivers. If it doesn't, your card might still  
-be usable if it is compatible with a supported card. This will be  
-most easily done if the card claims to be ``NE2000 compatible''.  
-*  
-  
-*Is the card configured properly? If you are using a supported card,  
-and it was recognized by cardmgr, but still doesn't work, there  
-might be an interrupt or port conflict with another device. Find out  
-what resources the card is using (from the system log),  
-and try excluding these in /etc/pcmcia/config.opts to force  
-the card to use something different.  
-*  
-  
-*If your card seems to be configured properly, but sometimes locks up,  
-particularly under high load, you may need to try changing your socket  
-driver timing parameters. See the  
-Startup options section for more information.  
-*  
-  
-*If you get ``Network is unreachable'' messages when you try to  
-access the network, then the routing information specified in  
-/etc/pcmcia/network.opts is incorrect. This exact message is  
-an absolutely foolproof indication of a routing error. On the other  
-hand, mis-configured cards will usually fail silently.  
-*  
-  
-*If you are trying to use DHCP to configure your network interface, try  
-testing things with a static IP address instead, to rule out a DHCP  
-configuration problem.  
-*  
-  
-*To diagnose problems in /etc/pcmcia/network.opts, start by  
-trying to ping other systems on the same subnet using their IP  
-addresses. Then try to ping your gateway, and then machines on other  
-subnets. Ping machines by name only after trying these simpler tests.  
-*  
-  
-*Make sure your problem is really a PCMCIA one. It may help to see see  
-if the card works under DOS with the vendor's drivers. Double check  
-your modifications to the /etc/pcmcia/network.opts script.  
-Make sure your drop cable, ``T'' jack, terminator, etc are working.  
-*  
-  
-*Use real network cables. Don't even think about using that old phone  
-cord you found in your basement. And this means Category 5 cable for  
-100baseT. It really matters.  
-*  
-  
-  
-  
-  
-  
-!!4.4 PCMCIA serial and modem devices  
-  
-  
-  
-Linux serial devices are accessed via the /dev/ttyS* and  
-/dev/cua* special device files. In pre-2.2 kernels, the  
-ttyS* devices were for incoming connections, such as directly  
-connected terminals, and the cua* devices were for outgoing  
-connections, such as modems. Use of cua* devices is deprecated  
-in current kernels, and ttyS* can be used for all applications.  
-The configuration of a serial device can be examined and modified with  
-the setserial command.  
-  
-  
-When a serial or modem card is detected, it will be assigned to the  
-first available serial device slot. This will usually be  
-/dev/ttyS1 (cua1) or /dev/ttyS2 (cua2),  
-depending on the number of built-in serial ports. The ttyS*  
-device is the one reported in stab. The default  
-serial device option script, /etc/pcmcia/serial.opts, will  
-link the device file to /dev/modem as a convenience. For  
-pre-2.2 kernels, the link is made to the cua* device.  
-  
-  
-Do not try to use /etc/rc.d/rc.serial to configure a PCMCIA  
-modem. This script should only be used to configure non-removable  
-devices. Modify /etc/pcmcia/serial.opts if you want to do  
-anything special to set up your modem. Also, do not try to change the  
-IO port and interrupt settings of a serial device using  
-setserial. This would tell the serial driver to look for the  
-device in a different place, but would not change how the card's  
-hardware is actually configured. The serial configuration script  
-allows you to specify other setserial options, as well as whether  
-a line should be added to /etc/inittab for this port.  
-  
-  
-The device address passed to serial.opts has three  
-comma-separated fields: the first is the scheme, the second is the  
-socket number, and the third is the device instance. The device  
-instance may take several values for cards that support multiple  
-serial ports, but for single-port cards, it will always be . If you  
-commonly use more than one modem, you may want to specify different  
-settings based on socket position, as in:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,,*)  
-# Options for modem in socket  
-LINK=/dev/modem0  
-;;  
-*,1,*)  
-# Options for modem in socket 1  
-LINK=/dev/modem1  
-;;  
-esac  
-  
-  
-  
-  
-If a PCMCIA modem is already configured when Linux boots, it may be  
-incorrectly identified as an ordinary built-in serial port. This is  
-harmless, however, when the PCMCIA drivers take control of the modem,  
-it will be assigned a different device slot. It is best to either  
-parse stab or use /dev/modem, rather than  
-expecting a PCMCIA modem to always have the same device assignment.  
-  
-  
-If you configure your kernel to load the basic Linux serial port  
-driver as a module, you must edit /etc/pcmcia/config to  
-indicate that this module must be loaded. Edit the serial device  
-entry to read:  
-  
-  
-  
-  
-  
-device "serial_cs"  
-class "serial" module "misc/serial", "serial_cs"  
-  
-  
-  
-  
-  
-  
-!Serial device parameters  
-  
-  
-The following parameters can be defined in serial.opts:  
-  
-; __LINK__:  
-  
-Specifies a path for a symbolic link to be created to the ``callout''  
-device (e.g., /dev/cua* for pre-2.2, or /dev/ttyS*  
-for 2.2 kernels).  
-; __SERIAL_OPTS__:  
-  
-Specifies options to be passed to the setserial command.  
-; __INITTAB__:  
-  
-If specified, this will be used to construct an inittab entry for  
-the device.  
-; __NO_CHECK, NO_FUSER__:  
-  
-Boolean (y/n) settings for card eject policy. If NO_CHECK is  
-true, then ``cardctl eject'' will shut down a device even if it  
-is busy. If NO_FUSER is true, then the script will not try to  
-kill processes using an ejected device.  
-  
-  
-  
-For example:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,*,*,*)  
-LINK="/dev/modem"  
-SERIAL_OPTS=""  
-INITTAB="/sbin/getty"  
-  
-  
-  
-  
-  
-  
-!Comments about specific cards  
-  
-  
-  
-  
-  
-  
-  
-  
-*The Uniden Data 2000 Wireless CDPD card has some special dialing  
-strings for initiating SLIP and PPP mode. For SLIP, use ``ATDT2'';  
-for PPP, "ATDT0".  
-*  
-  
-  
-  
-  
-  
-!Diagnosing problems with serial devices  
-  
-  
-  
-  
-  
-  
-  
-  
-*In 3.1.15 and later PCMCIA releases, the test_modem script in the  
-debug-tools subdirectory of the PCMCIA source tree will spot some  
-common problems.  
-*  
-  
-*Is your card recognized as a modem? Check the system log and  
-make sure that cardmgr identifies the card correctly and starts up the  
-serial_cs driver. If it doesn't, you may need to add a new entry to  
-your /etc/pcmcia/config file so that it will be identified properly.  
-See the  
-Configuring unrecognized cards  
-section for details.  
-*  
-  
-*Is the modem configured successfully by serial_cs? Again, check  
-the system log and look for messages from the serial_cs driver. If  
-you see ``register_serial() failed'', you may have an I/O port conflict  
-with another device. Another  
-tip-off of a conflict is if the device is reported to be an 8250; most  
-modern modems should be identified as 16550A UART's. If you  
-think you're seeing a port conflict, edit /etc/pcmcia/config.opts  
-and exclude the port range that was allocated for the modem.  
-*  
-  
-*Is there an interrupt conflict? If the system log looks good,  
-but the modem just doesn't seem to work, try using setserial to  
-change the irq to , and see if the modem works. This causes the  
-serial driver to use a slower polled mode instead of using interrupts.  
-If this seems to fix the problem, it is likely that some other device  
-in your system is using the interrupt selected by serial_cs. You  
-should add a line to /etc/pcmcia/config.opts to exclude this  
-interrupt.  
-*  
-  
-*If the modem seems to work only very, very slowly, this is an  
-almost certain indicator of an interrupt conflict.  
-*  
-  
-*Make sure your problem is really a PCMCIA one. It may help to see  
-if the card works under DOS with the vendor's drivers. Also, don't  
-test the card with something complex like SLIP or PPP until you are  
-sure you can make simple connections. If simple things work but SLIP  
-does not, your problem is most likely with SLIP, not with PCMCIA.  
-*  
-  
-*If you get kernel messages indicating that the serial_cs module cannot  
-be loaded, it means that your kernel does not have serial device  
-support. If you have compiled the serial driver as a module, you must  
-modify /etc/pcmcia/config to indicate that the  
-serial module should be loaded before serial_cs.  
-*  
-  
-  
-  
-  
-  
-!!4.5 PCMCIA parallel port devices  
-  
-  
-  
-The Linux parallel port driver is layered so that several high-level  
-device types can share use of the same low level port driver. Printer  
-devices are accessed via the /dev/lp* special device files.  
-The configuration of a printer device can be examined and modified with  
-the tunelp command.  
-  
-  
-The parport_cs module depends on the parport and  
-parport_pc drivers, which may be either compiled into the kernel  
-or compiled as modules. The layered driver structure means that any  
-top-level parallel drivers (such as the plip driver, the printer  
-driver, etc) must be compiled as modules. These drivers only  
-recognize parallel port devices at module startup time, so they need  
-to be loaded after any PC Card parallel devices are configured.  
-  
-  
-The device address passed to parport.opts has three  
-comma-separated fields: the first is the scheme, the second is the  
-socket number, and the third is the device instance. The device  
-instance may take several values for cards that support multiple  
-parallel ports, but for single-port cards, it will always be . If  
-you commonly use more than one such card, you may want to specify  
-different settings based on socket position, as in:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,,*)  
-# Options for card in socket  
-LINK=/dev/printer0  
-;;  
-*,1,*)  
-# Options for card in socket 1  
-LINK=/dev/printer1  
-;;  
-esac  
-  
-  
-  
-  
-If you configure your kernel to load the basic Linux parallel port  
-driver as a module, you must edit /etc/pcmcia/config to  
-indicate that the appropriate modules must be loaded. Edit the  
-parallel device entry to read:  
-  
-  
-  
-  
-  
-device "parport_cs"  
-class "parport" module "misc/parport", "misc/parport_pc", "parport_cs"  
-  
-  
-  
-  
-  
-  
-!Parallel device parameters  
-  
-  
-The following parameters can be defined in parport.opts:  
-  
-; __LINK__:  
-  
-Specifies a path for a symbolic link to be created to the printer  
-port.  
-; __LP_OPTS__:  
-  
-Specifies options to be passed to the tunelp command.  
-; __NO_CHECK, NO_FUSER__:  
-  
-Boolean (y/n) settings for card eject policy. If NO_CHECK is  
-true, then ``cardctl eject'' will shut down a device even if it  
-is busy. If NO_FUSER is true, then the script will not try to  
-kill processes using an ejected device.  
-  
-  
-  
-For example:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,*,*,*)  
-LINK="/dev/printer"  
-LP_OPTS=""  
-  
-  
-  
-  
-  
-  
-!Diagnosing problems with parallel port devices  
-  
-  
-  
-  
-  
-  
-  
-  
-*Is there an interrupt conflict? If the system log looks good,  
-but the port just doesn't seem to work, try using tunelp to  
-change the irq to , and see if things improve. This switches the  
-driver to polling mode. If this seems to fix the problem, it is  
-likely that some other device in your system is using the interrupt  
-selected by parport_cs. You should add a line to  
-/etc/pcmcia/config.opts to exclude this interrupt.  
-*  
-  
-*If you get kernel messages indicating that the parport_cs module  
-cannot be loaded, it means that your kernel does not have parallel  
-device support. If you have compiled the parallel driver as a module,  
-you may need to modify /etc/pcmcia/config to indicate that the  
-parport and parport_pc modules should be loaded before  
-parport_cs.  
-*  
-  
-  
-  
-  
-  
-!!4.6 PCMCIA SCSI adapters  
-  
-  
-  
-All the currently supported PCMCIA SCSI cards are work-alikes of one  
-of the following ISA bus cards: the Qlogic, the Adaptec AHA-152X, or  
-the Future Domain TMC-16x0. The PCMCIA drivers are built by linking  
-some PCMCIA-specific code (in qlogic_cs.c, aha152x_cs.c, or  
-fdomain_cs.c) with the normal Linux SCSI driver, pulled from the  
-Linux kernel source tree. The Adaptec APA1480 !CardBus driver is based  
-on the kernel aic7xxx PCI driver. Due to limitations in the Linux  
-SCSI driver model, only one removable card per driver is supported.  
-  
-  
-When a new SCSI host adapter is detected, the SCSI drivers will probe  
-for devices. Check the system log to make sure your devices are  
-detected properly. New SCSI devices will be assigned to the first  
-available SCSI device files. The first SCSI disk will be  
-/dev/sda, the first SCSI tape will be /dev/st0, and  
-the first CD-ROM will be /dev/scd0.  
-  
-  
-A list of SCSI devices connected to this host adapter will be shown in  
-stab, and the SCSI configuration script,  
-/etc/pcmcia/scsi, will be called once for each attached  
-device, to either configure or shut down that device. The default  
-script does not take any actions to configure SCSI devices, but will  
-properly unmount filesystems on SCSI devices when a card is removed.  
-  
-  
-The device addresses passed to scsi.opts are complicated, because  
-of the variety of things that can be attached to a SCSI adapter.  
-Addresses consist of either six or seven comma-separated fields: the  
-current scheme, the  
-device type, the socket number, the SCSI channel, ID, and logical unit  
-number, and optionally, the partition number. The device type will be  
-``sd'' for disks, ``st'' for tapes, ``sr'' for CD-ROM devices, and  
-``sg'' for generic SCSI devices. For most setups, the SCSI channel  
-and logical unit number will be . For disk devices with several  
-partitions, scsi.opts will first be called for the whole device,  
-with a five-field address. The script should set the PARTS  
-variable to a list of partitions. Then, scsi.opts will be called  
-for each partition, with the longer seven-field addresses.  
-  
-  
-If your kernel does not have a top-level driver (disk, tape, etc) for  
-a particular SCSI device, then the device will not be configured by  
-the PCMCIA drivers. As a side effect, the device's name in  
-stab will be something like ``sd#nnnn'' where ``nnnn''  
-is a four-digit hex number. This happens when cardmgr is unable  
-to translate a SCSI device ID into a corresponding Linux device name.  
-  
-  
-It is possible to modularize the top-level SCSI drivers so that they  
-are loaded on demand. To do so, you need to edit  
-/etc/pcmcia/config to tell cardmgr which extra modules  
-need to be loaded when your adapter is configured. For example:  
-  
-  
-  
-  
-  
-device "aha152x_cs"  
-class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"  
-  
-  
-  
-  
-would say to load the core SCSI module and the top-level disk driver  
-module before loading the regular PCMCIA driver module. The PCMCIA  
-Configure script will not automatically detect modularized SCSI  
-modules, so you will need use the manual configure option to enable  
-SCSI support.  
-  
-  
-Always turn on SCSI devices before powering up your laptop, or before  
-inserting the adapter card, so that the SCSI bus is properly  
-terminated when the adapter is configured. Also be very careful about  
-ejecting a SCSI adapter. Be sure that all associated SCSI devices are  
-unmounted and closed before ejecting the card. The best way to ensure  
-this is to use either cardctl or cardinfo to request card  
-removal before physically ejecting the card. For now, all SCSI  
-devices should be powered up before plugging in a SCSI adapter, and  
-should stay connected until after you unplug the adapter and/or power  
-down your laptop.  
-  
-  
-There is a potential complication when using these cards that does not  
-arise with ordinary ISA bus adapters. The SCSI bus carries a  
-``termination power'' signal that is necessary for proper operation of  
-ordinary passive SCSI terminators. PCMCIA SCSI adapters do not supply  
-termination power, so if it is required, an external device must  
-supply it. Some external SCSI devices may be configured to supply  
-termination power. Others, such as the Zip Drive and the Syquest  
-EZ-Drive, use active terminators that do not depend on it. In some  
-cases, it may be necessary to use a special terminator block such as  
-the APS SCSI Sentry 2, which has an external power supply. When  
-configuring your SCSI device chain, be aware of whether or not any of  
-your devices require or can provide termination power.  
-  
-  
-  
-  
-!SCSI device parameters  
-  
-  
-The following parameters can be defined in scsi.opts:  
-  
-; __LINK__:  
-  
-Specifies a path for a symbolic link to be created to this device.  
-; __DO_FSTAB__:  
-  
-A boolean (y/n) setting: specifies if an entry should be added to  
-/etc/fstab for this device.  
-; __DO_FSCK__:  
-  
-A boolean (y/n) setting: specifies if the filesystem should be checked  
-before being mounted, with ``fsck -Ta''.  
-; __DO_MOUNT__:  
-  
-A boolean (y/n) setting: specifies if this device should be  
-automatically mounted at card insertion time.  
-; __FSTYPE, OPTS, MOUNTPT__:  
-  
-The filesystem type, mount options, and mount point to be used for the  
-fstab entry and/or mounting the device.  
-; __NO_CHECK, NO_FUSER__:  
-  
-Boolean (y/n) settings for card eject policy. If NO_CHECK is  
-true, then ``cardctl eject'' will shut down a device even if it  
-is busy. If NO_FUSER is true, then the script will not try to  
-kill processes using an ejected device.  
-  
-  
-  
-For example, here is a script for configuring a disk device at SCSI ID  
-3, with two partitions, and a CD-ROM at SCSI ID 6:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,sd,*,,3,)  
-# This device has two partitions...  
-PARTS="1 2"  
-;;  
-*,sd,*,,3,,1)  
-# Options for partition 1:  
-# update /etc/fstab, and mount an ext2 fs on /usr1  
-DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"  
-FSTYPE="ext2"  
-OPTS=""  
-MOUNTPT="/usr1"  
-;;  
-*,sd,*,,3,,2)  
-# Options for partition 2:  
-# update /etc/fstab, and mount an MS-DOS fs on /usr2  
-DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"  
-FSTYPE="msdos"  
-OPTS=""  
-MOUNTPT="/usr2"  
-;;  
-*,sr,*,,6,)  
-# Options for CD-ROM at SCSI ID 6  
-PARTS=""  
-DO_FSTAB="y" ; DO_FSCK="n" ; DO_MOUNT="y"  
-FSTYPE="iso9660"  
-OPTS="ro"  
-MOUNTPT="/cdrom"  
-;;  
-esac  
-  
-  
-  
-  
-  
-  
-!Comments about specific cards  
-  
-  
-  
-  
-  
-  
-  
-  
-*The Adaptec APA-1480 !CardBus card needs a large IO port window (256  
-contiguous ports aligned on a 256-port boundary). It may be necessary  
-to expand the IO port regions in /etc/pcmcia/config.opts to  
-guarantee that such a large window can be found.  
-*  
-  
-*The Adaptec APA-460 SlimSCSI adapter is not supported. This card was  
-originally sold under the Trantor name, and when Adaptec merged with  
-Trantor, they continued to sell the Trantor card with an Adaptec  
-label. The APA-460 is not compatible with any existing Linux driver.  
-*  
-  
-*I have had one report of a bad interaction between the New Media Bus  
-Toaster and a UMAX Astra 1200s scanner. Due to the complexity of the  
-SCSI protocol, when diagnosing problems with SCSI devices, it is worth  
-considering that incompatible combinations like this may exist and may  
-not be documented.  
-*  
-  
-  
-  
-  
-  
-!Diagnosing problems with SCSI adapters  
-  
-  
-  
-  
-  
-*With the aha152x_cs driver (used by Adaptec, New Media, and  
-a few others), it seems that SCSI disconnect/reconnect support is a  
-frequent source of trouble with tape drives. To disable this ``feature,''  
-add the following to /etc/pcmcia/config.opts:  
-  
-  
-module "aha152x_cs" opts "reconnect="  
-  
-  
-  
-*  
-  
-*Also with the aha152x_cs driver, certain devices seem to require  
-a longer startup delay, controlled via the reset_delay module  
-parameter. The Yamaha 4416S CDR drive is one such device. The result  
-is the device is identified successfully, then hangs the system. In  
-such cases, try:  
-  
-  
-module "aha152x_cs" opts "reset_delay=500"  
-  
-  
-  
-*  
-  
-*Another potential source of SCSI device probe problems is probing of  
-multiple LUN's. If you see successful detection of a device, followed  
-by SCSI bus timeouts when LUN 1 for that device is probed, then  
-disable the kernel's CONFIG_SCSI_MULTI_LUN option.  
-*  
-  
-*If you have compiled SCSI support as modules (CONFIG_SCSI is  
-``m''), you may need to modify /etc/pcmcia/config to load the  
-SCSI modules before the appropriate *_cs driver is loaded.  
-*  
-  
-*If you get ``aborting command due to timeout'' messages when the SCSI  
-bus is probed, you almost certainly have an interrupt conflict.  
-*  
-  
-*If the host driver reports ``no SCSI devices found'', verify that your  
-kernel was compiled with the appropriate top-level SCSI drivers for  
-your devices (i.e., disk, tape, CD-ROM, and/or generic). If a  
-top-level driver is missing, devices of that type will be ignored.  
-*  
-  
-  
-  
-  
-  
-!!4.7 PCMCIA memory cards  
-  
-  
-  
-The memory_cs driver handles all types of memory cards, as well  
-as providing direct access to the PCMCIA memory address space for  
-cards that have other functions. When loaded, it creates a  
-combination of character and block devices. See the man page for the  
-module for a complete description of the device naming scheme. Block  
-devices are used for disk-like access (creating and mounting  
-filesystems, etc). The character devices are for "raw" unbuffered  
-reads and writes at arbitrary locations.  
-  
-  
-The device address passed to memory.opts consists of two fields:  
-the scheme, and the socket number. The options are applied to the  
-first common memory partition on the corresponding memory card.  
-  
-  
-Some flash memory cards, and most simple static RAM cards, lack a  
-``Card Information Structure'' (CIS), which is the system PCMCIA cards  
-use to identify themselves. Normally, cardmgr will assume that  
-any card that lacks a CIS is a simple memory card, and load the  
-memory_cs driver. Thus, a common side effect of a general card  
-identification problem is that other types of cards may be misdetected  
-as memory cards.  
-  
-  
-There is another issue to consider when handling memory cards that do  
-not have CIS information. At startup time, the PCMCIA package tries  
-to use the first detected card to determine what memory regions are  
-usable for PCMCIA. The memory scan can be fooled if that card is a  
-simple memory card. If you plan to use memory cards often, it is best  
-to limit the memory windows in /etc/pcmcia/config.opts to  
-known-good regions.  
-  
-  
-The memory_cs driver uses a heuristic to guess the capacity of  
-these cards. The heuristic does not work for write protected cards,  
-and may make mistakes in some other cases as well. If a card is  
-misdetected, its size should then be explicitly specified when using  
-commands such as dd or mkfs. The memory_cs module also  
-has a parameter for overriding the size detection. See the man page.  
-  
-  
-  
-  
-!Memory device parameters  
-  
-  
-  
-  
-  
-The following parameters can be specified in memory.opts:  
-  
-  
-  
-  
-; __DO_FSTAB__:  
-  
-A boolean (y/n) setting: specifies if an entry should be added to  
-/etc/fstab for this device.  
-; __DO_FSCK__:  
-  
-A boolean (y/n) setting: specifies if the filesystem should be checked  
-before being mounted, with ``fsck -Ta''.  
-; __DO_MOUNT__:  
-  
-A boolean (y/n) setting: specifies if this device should be  
-automatically mounted at card insertion time.  
-; __FSTYPE, OPTS, MOUNTPT__:  
-  
-The filesystem type, mount options, and mount point to be used for the  
-fstab entry and/or mounting the device.  
-; __NO_CHECK, NO_FUSER__:  
-  
-Boolean (y/n) settings for card eject policy. If NO_CHECK is  
-true, then ``cardctl eject'' will shut down a device even if it  
-is busy. If NO_FUSER is true, then the script will not try to  
-kill processes using an ejected device.  
-  
-  
-  
-Here is an example of a script that will automatically mount memory  
-cards based on which socket they are inserted into:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,,)  
-# Mount filesystem, but don't update /etc/fstab  
-DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"  
-FSTYPE="ext2" ; OPTS=""  
-MOUNTPT="/mem0"  
-;;  
-*,1,)  
-# Mount filesystem, but don't update /etc/fstab  
-DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"  
-FSTYPE="ext2" ; OPTS=""  
-MOUNTPT="/mem1"  
-;;  
-esac  
-  
-  
-  
-  
-  
-  
-!Using linear flash memory cards  
-  
-  
-The following information applies only to so-called ``linear flash''  
-memory cards. Many flash cards, including all !SmartMedia and  
-!CompactFlash cards, actually include circuitry to emulate an IDE disk  
-device. Those cards are thus handled as IDE devices, not memory  
-cards.  
-  
-  
-There are two major formats for flash memory cards: the FTL  
-or ``flash translation layer'' style, and the Microsoft  
-Flash File System. The FTL format is generally more  
-flexible because it allows any ordinary high-level filesystem (ext2,  
-ms-dos, etc) to be used on a flash card as if it were an ordinary disk  
-device. The FFS is a completely different filesystem type. Linux  
-cannot currently handle cards formated with FFS.  
-  
-  
-To use a flash memory card as an ordinary disk-like block device,  
-first create an FTL partition on the device with the  
-ftl_format command. This layer hides the  
-device-specific details of flash memory programming and make the card  
-look like a simple block device. For example:  
-  
-  
-  
-  
-  
-ftl_format -i /dev/mem0c0c  
-  
-  
-  
-  
-Note that this command accesses the card through the ``raw'' memory  
-card interface. Once formatted, the card can be accessed as an  
-ordinary block device via the ftl_cs driver. For example:  
-  
-  
-  
-  
-  
-mke2fs /dev/ftl0c0  
-mount -t ext2 /dev/ftl0c0 /mnt  
-  
-  
-  
-  
-Device naming for FTL devices is tricky. Minor device numbers have  
-three parts: the card number, the region number on that card, and  
-optionally, the partition within that region. A region can either be  
-treated as a single block device with no partition table (like a  
-floppy), or it can be partitioned like a hard disk device. The  
-``ftl0c0'' device is card , common memory region , the entire  
-region. The ``ftl0c0p1'' through ``ftl0c0p4'' devices are primary  
-partitions 1 through 4 if the region has been partitioned.  
-  
-  
-Configuration options for FTL partitions can be given in  
-ftl.opts, which is similar in structure to memory.opts.  
-The device address passed to ftl.opts consists of three or four  
-fields: the scheme, the socket number, the region number, and  
-optionally, the partition number. Most flash cards have just one  
-flash memory region, so the region number will generally always be  
-zero.  
-  
-  
-Intel Series 100 flash cards use the first 128K flash block to store  
-the cards' configuration information. To prevent accidental erasure  
-of this information, ftl_format will automatically detect this  
-and skip the first block when creating an FTL partition.  
-  
-  
-  
-  
-!!4.8 PCMCIA ATA/IDE card drives  
-  
-  
-  
-ATA/IDE drive support is based on the regular kernel IDE driver. This  
-includes !SmartMedia and !CompactFlash devices: these flash memory cards  
-are set up so that they emulate an IDE interface. The PCMCIA-specific  
-part of the driver is ide_cs. Be sure to use cardctl or  
-cardinfo to shut down an ATA/IDE card before ejecting it, as the  
-driver has not been made ``hot-swap-proof''.  
-  
-  
-The device addresses passed to ide.opts consist of either three  
-or four fields: the current scheme, the socket number, the drive's  
-serial number, and an optional partition number. The ide_info  
-command can be used to obtain an IDE device's serial number. As with  
-SCSI devices, ide.opts is first called for the entire device. If  
-ide.opts returns a list of partitions in the PARTS  
-variable, the script will then be called for each partition.  
-  
-  
-  
-  
-!ATA/IDE fixed-disk device parameters  
-  
-  
-  
-  
-  
-The following parameters can be specified in ide.opts:  
-  
-  
-  
-  
-; __DO_FSTAB__:  
-  
-A boolean (y/n) setting: specifies if an entry should be added to  
-/etc/fstab for this device.  
-; __DO_FSCK__:  
-  
-A boolean (y/n) setting: specifies if the filesystem should be checked  
-before being mounted, with ``fsck -Ta''.  
-; __DO_MOUNT__:  
-  
-A boolean (y/n) setting: specifies if this device should be  
-automatically mounted at card insertion time.  
-; __FSTYPE, OPTS, MOUNTPT__:  
-  
-The filesystem type, mount options, and mount point to be used for the  
-fstab entry and/or mounting the device.  
-; __NO_CHECK, NO_FUSER__:  
-  
-Boolean (y/n) settings for card eject policy. If NO_CHECK is  
-true, then ``cardctl eject'' will shut down a device even if it  
-is busy. If NO_FUSER is true, then the script will not try to  
-kill processes using an ejected device.  
-  
-  
-  
-Here is an example ide.opts file to mount the first partition  
-of any ATA/IDE card on /mnt.  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-*,*,*,1)  
-DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"  
-FSTYPE="msdos"  
-OPTS=""  
-MOUNTPT="/mnt"  
-;;  
-*,*,*)  
-PARTS="1"  
-;;  
-esac  
-  
-  
-  
-  
-  
-  
-!Diagnosing problems with ATA/IDE adapters  
-  
-  
-  
-  
-  
-*An IO port conflict may cause the IDE driver to misdetect the drive  
-geometry and report ``INVALID GEOMETRY: 0 PHYSICAL HEADS?''. To  
-fix, try excluding the selected IO port range in  
-/etc/pcmcia/config.opts.  
-*  
-  
-*Some IDE drives violate the PCMCIA specification by requiring more  
-time to spin up than the maximum allowed card setup time. This may  
-result in ``timed out during reset'' messages at card detect time.  
-Adjust the unreset_delay and/or unreset_limit parameters for  
-the pcmcia_core module to give a drive more time to spin up; see  
-the pcmcia_core man page for parameter details. For example:  
-  
-  
-CORE_OPTS="unreset_delay=400"  
-  
-  
-  
-*  
-  
-*To use an ATA/IDE CD-ROM device, your kernel must be compiled with  
-CONFIG_BLK_DEV_IDECD enabled. This will normally be the case for  
-standard kernels, however it is something to be aware of if you  
-compile a custom kernel.  
-*  
-  
-*A common error when using IDE drives is try to mount the wrong device  
-file. Generally, you want to mount a partition of the device, not the  
-entire device (i.e., /dev/hde1, not /dev/hde).  
-*  
-  
-*The Linux IDE driver may have trouble configuring certain  
-removable-media drives if no media is present at insertion time. The  
-IBM Portable !DriveBay has this problem.  
-*  
-  
-*Some kernels will report a pair of ``drive_cmd'' errors at insertion  
-time. These errors can be ignored: they pop up when a removable IDE  
-device does not accept the IDE ``door lock'' command.  
-*  
-  
-  
-  
-  
-  
-!!4.9 Multifunction cards  
-  
-  
-  
-A single interrupt can be shared by several drivers, such as the  
-serial driver and an ethernet driver: in fact, the PCMCIA  
-specification requires all card functions to share the same interrupt.  
-Normally, all card functions are available without having to swap  
-drivers. Any remotely recent Linux kernel (i.e., 1.3.72 or later)  
-supports this kind of interrupt sharing.  
-  
-  
-Simultaneous use of two card functions is ``tricky'' and various  
-hardware vendors have implemented interrupt sharing in their own  
-incompatible (and sometimes proprietary) ways. The drivers for some  
-cards (Ositech Jack of Diamonds, 3Com 3c562 and related cards, Linksys  
-cards) properly support simultaneous access, but others (older  
-Megahertz cards in particular) do not. If you have trouble using a  
-card with both functions active, try using each function in isolation.  
-That may require explicitly doing an ``ifconfig down'' to shut  
-down a network interface and use a modem on the same card.  
-  
-  
-  
-----  
-  
-!!5. Advanced topics  
-  
-  
-  
-  
-  
-  
-  
-!!5.1 Resource allocation for PCMCIA devices  
-  
-  
-  
-In theory, it should not really matter which interrupt is allocated to  
-which device, as long as two devices are not configured to use the  
-same interrupt. In /etc/pcmcia/config.opts you'll find  
-a place for excluding interrupts that are used by non-PCMCIA devices.  
-  
-  
-Similarly, there is no way to directly specify the I/O addresses for a  
-card to use. The /etc/pcmcia/config.opts file allows  
-you to specify ranges of ports available for use by any card, or to  
-exclude ranges that conflict with other devices.  
-  
-  
-After modifying /etc/pcmcia/config.opts, you can reinitialize  
-cardmgr with ``kill -HUP''.  
-  
-  
-The interrupt used to monitor card status changes is chosen  
-by the low-level socket driver module (i82365 or tcic)  
-before cardmgr parses /etc/pcmcia/config, so it is not  
-affected by changes to this file. To set this interrupt, use the  
-cs_irq= option when the socket driver is loaded, by setting  
-the PCIC_OPTS variable in /etc/rc.d/rc.pcmcia.  
-  
-  
-All the client card drivers have a parameter called irq_list for  
-specifying which interrupts they may try to allocate.  
-These driver options should be set in  
-your /etc/pcmcia/config file. For example:  
-  
-  
-  
-  
-  
-device "serial_cs"  
-module "serial_cs" opts "irq_list=8,12"  
-...  
-  
-  
-  
-  
-would specify that the serial driver should only use irq 8 or irq 12.  
-Regardless of irq_list settings, Card Services will never  
-allocate an interrupt that is already in use by another device, or an  
-interrupt that is excluded in the config file.  
-  
-  
-  
-  
-!!5.2 PCI interrupt configuration problems and solutions  
-  
-  
-  
-  
-  
-  
-  
-  
-!An overview of PCI interrupt routing issues  
-  
-  
-Each PCI slot has four PCI interrupt pins, INTA through INTD. Single  
-function devices will only use the INTA pin; multifunction devices may  
-use multiple INT pins. On the processor side, on x86 single processor  
-systems, incoming hardware interrupts are directed to interrupt  
-requests (irq's) numbered ..15. The PCI interrupt router, usually  
-part of the PCI-to-ISA host bridge, determines how incoming PCI  
-interrupts are mapped to CPU irq numbers. Most modern bridge chips  
-have several PCI interrupt inputs, known as PIRQ1, PIRQ2, etc, each of  
-which can be routed to any CPU irq number. So we might have something  
-like:  
-  
-  
-  
-  
-  
-PCI slot 1 INTA --> router PIRQ1 --> CPU irq 9  
-PCI slot 1 INTB --> router PIRQ2 --> CPU irq 10  
-PCI slot 2 INTA --> router PIRQ2 --> CPU irq 10  
-PCI slot 2 INTB --> router PIRQ1 --> CPU irq 9  
-  
-  
-  
-  
-Multiple INT pins are often connected to the same PIRQ pin. Usually,  
-the connections from INT pins to PIRQ pins are arranged to spread  
-installed devices out as much as possible, to give the OS the most  
-flexibility for choosing how interrupts are shared. The mapping from  
-bridge PIRQ pins to CPU irq numbers can be obtained by reading  
-registers in the interrupt router. The mapping from INT pins to the  
-router's PIRQ pins, however, depends on how the board designer decided  
-to connect things up, and cannot be directly determined by driver  
-software.  
-  
-  
-For most PCI devices, the OS does not need to understand the interrupt  
-router details. Each PCI device has a configuration register, the PCI  
-Interrupt Line Register, that the BIOS initializes with the  
-appropriate CPU irq number for that device. Unfortunately, the BIOS  
-generally will not configure PCI interrupts for !CardBus bridge devices.  
-  
-  
-The PCI BIOS's Interrupt Routing Table is a data structure that  
-contains information about the mapping from PCI INT pins to the PIRQ  
-pins on the PCI interrupt router. The routing information in the  
-table is stored in a somewhat unhelpful form, however. For each  
-device's INT pins, the table specifies a ``link value''. All  
-interrupts with the same link value are wired to the same PIRQ pin;  
-however, the meaning of the link values is defined by the chipset  
-vendor.  
-  
-  
-Several tools are available for examining PCI interrupt routing  
-information:  
-  
-  
-  
-  
-  
-  
-  
-; __lspci, /proc/pci__:  
-  
-These will show you resource information (including interrupt  
-assignments, where they are known) for all your PCI devices.  
-  
-  
-  
-; __dump_pirq__:  
-  
-This is in the debug-tools directory of the PCMCIA source  
-distribution. It dumps the contents of your PCI interrupt routing  
-table, if available. It also scans for known interrupt routers and  
-dumps their current interrupt steering settings.  
-  
-  
-  
-  
-  
-  
-Several PCMCIA module parameters affect PCI interrupt routing:  
-  
-  
-  
-  
-  
-  
-  
-; __pcmcia_core module: cb_pci_irq=n__:  
-  
-This option specifies one interrupt number to be used to program the  
-PCI interrupt router for all !CardBus sockets that do not already have  
-an interrupt assignment. It only has any effect on systems that have a  
-PCI irq routing table, and a known interrupt router.  
-  
-  
-  
-; __i82365 module: irq_mode=n__:  
-  
-Most !CardBus bridges offer several methods for delivering interrupts  
-to the host. The i82365 module by default assumes that a bridge can  
-deliver both PCI and ISA interrupts, since this is normal for laptops.  
-A setting of ``irq_mode='' can be used to force a bridge to use only  
-PCI interrupts. See the man page for the i82365 module for a  
-description of what other values mean for different bridge types.  
-  
-  
-  
-; __i82365 module: irq_list=n,n,...__:  
-  
-This parameter lists which ISA interrupt(s) can be used for PCMCIA.  
-If no ISA interrupts are available, specify ``irq_list=''. Note  
-that ``irq_mode='' implies ``irq_list=''.  
-  
-  
-  
-; __i82365 module: pci_irq_list=n,n,...__:  
-  
-This option specifies a list of PCI interrupt numbers to use for  
-!CardBus sockets. It differs from cb_pci_irq, because it does not  
-actually program the PCI interrupt router; it can be used when you  
-know the PCI interrupts are already set up a certain way, even if you  
-do not know how the router works.  
-  
-  
-  
-  
-  
-  
-If you are having problems that you think may be related to PCI  
-interrupt configuration, you should first verify that you have a  
-reasonably current PCMCIA driver package. Also carefully look at the  
-startup messages when the PCMCIA kernel modules are loaded. You  
-should see something like:  
-  
-  
-  
-  
-  
-Linux PCMCIA Card Services 3.1.18  
-kernel build: 2.2.14-5.0 #1 Tue May 9 10:44:24 PDT 2000  
-options: [[pci] [[cardbus] [[apm] [[pnp]  
-PCI routing table version 1.0 at 0xfdf30  
-Intel PCIC probe:  
-TI 1125 rev 02 PCI-to-!CardBus at slot 00:07, mem 0x20000000  
-host opts [[]: [[ring] [[serial pci & irq] [[pci irq 11] ...  
-host opts [[]: [[ring] [[serial pci & irq] [[pci irq 11] ...  
-ISA irqs (scanned) = 3,4,7 PCI status changes  
-  
-  
-  
-  
-The ``PCI routing table'' message indicates that a valid routing  
-table was found. The ``host opts'' lines indicate the interrupt  
-delivery mode and whether or not a PCI interrupt could be determined  
-for each socket. And the final line indicates the results of the scan  
-for available interrupts.  
-  
-  
-  
-  
-!!CardBus bridge is not detected by the PCI BIOS  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*Intel PCIC probe: not found.  
-*  
-  
-*The bridge does not show up in lspci or in /proc/pci.  
-*  
-  
-  
-  
-The Lucent/SCM PCI-to-!CardBus adapters seem to confuse the PCI BIOS on  
-some older systems. Lucent says that this card is only supported  
-on systems that have a BIOS that supports the PCI 2.2 specification,  
-or are PC99 compliant. Some older systems will not detect the Lucent  
-card at all, and if the system can't detect it, the Linux drivers  
-cannot use it. The only possible resolutions are a BIOS upgrade, or  
-using a different motherboard or !CardBus adapter.  
-  
-  
-  
-  
-! PCI interrupt delivery problems  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*Cards seem to be configured correctly, but do not work.  
-*  
-  
-*/proc/interrupts shows a count of 0 for interrupts  
-assigned to PCMCIA drivers.  
-*  
-  
-  
-  
-!CardBus bridges usually support two types of interrupts, PCI and ISA.  
-Partly for historical reasons, it has become conventional to use PCI  
-interrupts for signaling card insertion and removal events, and for  
-!CardBus card interrupts; and ISA interrupts for 16-bit cards. Since  
-version 3.1.9, this is the scheme that the Linux PCMCIA system will  
-use by default. Most !CardBus bridges support multiple methods for  
-delivering interrupts to the host CPU. Methods include ``parallel''  
-interrupts, where each supported irq has a dedicated pin on the  
-bridge; various serial interrupt protocols, where one or two pins are  
-used to communicate with an interrupt controller; and hybrids, where  
-PCI interrupts might be signalled using dedicated pins, while ISA  
-interrupts are delivered via a serial controller.  
-  
-  
-In general, it is the responsibility of the BIOS to program a bridge  
-for the appropriate interrupt delivery method. However, there are  
-systems that do this incorrectly, and in some cases, there is no way  
-for software to safely detect the correct delivery method. The  
-i82365 module reports the bridge mode at startup time, and has a  
-parameter, irq_mode, that can be used to reconfigure it. Not all  
-bridges support this parameter, and the meaning of irq_mode  
-depends on the bridge type. See the i82365 man page for a  
-description of what values are supported by your bridge. In some  
-cases, a bridge may function correctly in more than one interrupt  
-mode.  
-  
-  
-Most PCMCIA card readers that fit in a PCI bus slot only provide PCI  
-interrupt routing. The Linux drivers assume that all bridges have ISA  
-interrupt capability, since that is generally correct on laptops.  
-With a card reader, it will generally be necessary to use the  
-irq_mode parameter to specify a ``PCI only'' interrupt delivery  
-mode; the value of the parameter depends on the bridge type, so check  
-the i82365 man page. A few PCI card readers require an  
-irq_mode that permits ISA interrupts, but those interrupts are  
-not actually connected; in that case, use ``irq_list=''.  
-  
-  
-Check the system log and verify that the !CardBus bridge has a PCI  
-interrupt assignment. If it does not, then resolve that problem  
-first, then return here if the symptoms persist. Next, experiment  
-with different values for the irq_mode parameter.  
-  
-  
-  
-  
-!No PCI interrupt assignment; valid routing table  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*The Intel PCIC probe reports ``no pci irq'' for each socket.  
-*  
-  
-*There is a routing table, and the router type is supported.  
-*  
-  
-  
-  
-When a routing table is present, the pcmcia_core module will try  
-to automatically configure the PCI interrupt router, but only does so  
-when it has a safe and unambiguous choice for what PCI interrupt to  
-use. If there are several valid choices, then you must use the  
-``cb_pci_irq=...'' option to specify which interrupt to assign.  
-Your best bet is to pick the most lightly used interrupt that is  
-already assigned to another PCI device.  
-  
-  
-Moving the card to another slot sometimes offers a quick solution. If  
-that slot shares its interrupt with an already-configured device, then  
-the PCMCIA drivers will have no trouble figuring out the assignment.  
-  
-  
-  
-  
-!No PCI interrupt assignment; unknown interrupt router  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*The Intel PCIC probe reports ``no pci irq'' for each socket.  
-*  
-  
-*There is a routing table, but the router is an unknown type.  
-*  
-  
-  
-  
-Adding support for a new interrupt router is tricky but not a big  
-job. First determine, from a datasheet, how your interrupt router  
-steers PCI interrupts. Then, see if you can guess the meaning of the  
-link values from the output of dump_pirq. Usually this is  
-reasonably obvious. Most routers have four PIRQ pins, and the link  
-values might be something like 1,2,3,4, or 0x10,0x18,0x20,0x28, or  
-0x60,0x61,0x62,0x63. The values are usually chosen so that they can  
-be easily converted to the location of the appropriate interrupt  
-steering register. Finally, add small functions to  
-modules/pci_fixup.c to get/set the interrupt steering  
-information for this router, using the other routers as examples.  
-  
-  
-  
-  
-!No PCI interrupt assignment; no routing table  
-  
-  
-  
-  
-  
-Symptoms:  
-  
-  
-*The Intel PCIC probe reports ``no pci irq'' for each socket.  
-*  
-  
-*No interrupt routing table is found.  
-*  
-  
-  
-  
-Without an interrupt routing table, we cannot tell how interrupts from  
-the !CardBus bridge are directed to CPU irq numbers. All hope is not  
-lost: you may be able to guess the PCI interrupt assignment and use  
-the ``pci_irq_list=...'' option to pass this information to the  
-i82365 module. Good guesses might include the interrupt(s)  
-assigned to other PCI devices, the interrupt(s) used under Windows, or  
-any other interrupts that are unaccounted for.  
-  
-  
-You may also want to experiment with putting the adapter in different  
-PCI slots, for each pci_irq_list you try. You are trying to find  
-a slot that shares its interrupt with an already-configured device,  
-and might need to try several slots to find one.  
-  
-  
-  
-  
-!!5.3 How can I have separate device setups for home and work?  
-  
-  
-  
-This is fairly easy using ``scheme'' support.  
-Use two configuration schemes, called ``home'' and ``work''. Here is  
-an example of a network.opts script with scheme-specific  
-settings:  
-  
-  
-  
-  
-  
-case "$ADDRESS" in  
-work,*,*,*)  
-# definitions for network card in work scheme  
-...  
-;;  
-home,*,*,*|default,*,*,*)  
-# definitions for network card in home scheme  
-...  
-;;  
-esac  
-  
-  
-  
-  
-The first part of a device address is always the configuration  
-scheme. In this example, the second ``case'' clause will select for  
-both the ``home'' and ``default'' schemes. So, if the scheme is unset  
-for any reason, it will default to the ``home'' setup.  
-  
-  
-Now, to select between the two sets of settings, run either:  
-  
-  
-  
-  
-  
-cardctl scheme home  
-  
-  
-  
-  
-or  
-  
-  
-  
-  
-  
-cardctl scheme work  
-  
-  
-  
-  
-The cardctl command does the equivalent of shutting down all your  
-cards and restarting them. The command can be safely executed whether  
-or not the PCMCIA system is loaded, but the command may fail if you  
-are using other PCMCIA devices at the time (even if their  
-configurations are not explicitly dependant on the scheme setting).  
-  
-  
-To find out the current scheme setting, run:  
-  
-  
-  
-  
-  
-cardctl scheme  
-  
-  
-  
-  
-By default, the scheme setting is persistent across boots. This can  
-have undesirable effects if networking is initialized for the wrong  
-environment. Optionally, you can set the initial scheme value with  
-the SCHEME startup option (see  
-Startup options for details). It is also possible to set the scheme from  
-the lilo boot prompt. Since lilo passes unrecognized  
-options to init as environment variables, a value for SCHEME  
-(or any other PCMCIA startup option) at the boot prompt will be  
-propagated into the PCMCIA startup script.  
-  
-  
-To save even more keystrokes, schemes can be specified in lilo's  
-configuration file. For instance, you could have:  
-  
-  
-  
-  
-  
-root = /dev/hda1  
-read-only  
-image = /boot/vmlinuz  
-label = home  
-append = "SCHEME=home"  
-image = /boot/vmlinuz  
-label = work  
-append = "SCHEME=work"  
-  
-  
-  
-  
-Typing ``home'' or ``work'' at the boot prompt would then boot into  
-the appropriate scheme.  
-  
-  
-  
-  
-!!5.4 Booting from a PCMCIA device  
-  
-  
-  
-  
-  
-  
-Having the root filesystem on a PCMCIA device is tricky because the  
-Linux PCMCIA system is not designed to be linked into the kernel. Its  
-core components, the loadable kernel modules and the user mode cardmgr  
-daemon, depend on an already running system. The kernel's  
-``initrd'' facility works around this requirement by  
-allowing Linux to boot using a temporary ram disk as a minimal root  
-image, load drivers, and then re-mount a different root filesystem.  
-The temporary root can configure PCMCIA devices and then re-mount a  
-PCMCIA device as root.  
-  
-  
-The initrd image absolutely must reside on a bootable device: this  
-generally cannot be put on a PCMCIA device. This is a BIOS  
-limitation, not a kernel limitation. It is useful here to distinguish  
-between ``boot-able'' devices (i.e., devices that can be booted), and  
-``root-able'' devices (i.e., devices that can be mounted as root).  
-``Boot-able'' devices are determined by the BIOS, and are generally  
-limited to internal floppy and hard disk drives. ``Root-able''  
-devices are any block devices that the kernel supports once it has  
-been loaded. The initrd facility makes more devices ``root-able'',  
-not ``boot-able''.  
-  
-  
-Some Linux distributions will allow installation to a device connected  
-to a PCMCIA SCSI adapter, as an unintended side-effect of their  
-support for installs from PCMCIA SCSI CD-ROM devices. However, at  
-present, no Linux installation tools support configuring an  
-appropriate ``initrd'' to boot Linux with a PCMCIA root filesystem.  
-Setting up a system with a PCMCIA root thus requires that you use  
-another Linux system to create the ``initrd'' image. If another Linux  
-system is not available, another option would be to temporarily  
-install a minimal Linux setup on a non-PCMCIA drive, create an initrd  
-image, and then reinstall to the PCMCIA target.  
-  
-  
-The Linux Bootdisk-HOWTO has some general information about setting up  
-boot disks but nothing specific to initrd. The main initrd document  
-is included with recent kernel source code distributions, in  
-linux/Documentation/initrd.txt. Before beginning, you should  
-read this document. A familiarity with lilo is also helpful.  
-Using initrd also requires that you have a kernel compiled with  
-CONFIG_BLK_DEV_RAM and CONFIG_BLK_DEV_INITRD enabled.  
-  
-  
-This is an advanced configuration technique, and requires a high level  
-of familiarity with Linux and the PCMCIA system. Be sure to read all  
-the relevant documentation before starting. The following cookbook  
-instructions should work, but deviations from the examples will  
-quickly put you in uncharted and ``unsupported'' territory, and you  
-will be on your own.  
-  
-  
-This method absolutely requires that you use a PCMCIA driver release  
-of 2.9.5 or later. Older PCMCIA packages or individual components  
-will not work in the initrd context. Do not mix components from  
-different releases.  
-  
-  
-  
-  
-!The pcinitrd helper script  
-  
-  
-The pcinitrd script creates a basic initrd image for booting with  
-a PCMCIA root partition. The image includes a minimal directory  
-heirarchy, a handful of device files, a few binaries, shared  
-libraries, and a set of PCMCIA driver modules. When invoking  
-pcinitrd, you specify the driver modules that you want to be  
-included in the image. The core PCMCIA components, pcmcia_core  
-and ds, are automatically included.  
-  
-  
-As an example, say that your laptop uses an i82365-compatible  
-host controller, and you want to boot Linux with the root filesystem  
-on a hard drive attached to an Adaptec SlimSCSI adapter. You could  
-create an appropriate initrd image with:  
-  
-  
-  
-  
-  
-pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o  
-  
-  
-  
-  
-To customize the initrd startup sequence, you could mount the image  
-using the ``loopback'' device with a command like:  
-  
-  
-  
-  
-  
-mount -o loop -t ext2 initrd /mnt  
-  
-  
-  
-  
-and then edit the linuxrc script. The configuration files  
-will be installed under /etc in the image, and can also be  
-customized. See the man page for pcinitrd for more information.  
-  
-  
-  
-  
-!Creating an initrd boot floppy  
-  
-  
-  
-  
-  
-After creating an image with pcinitrd, you can create a boot  
-floppy by copying the kernel, the compressed initrd image, and a few  
-support files for lilo to a clean floppy. In the following  
-example, we assume that the desired PCMCIA root device is  
-/dev/sda1:  
-  
-  
-  
-  
-  
-mke2fs /dev/fd0  
-mount /dev/fd0 /mnt  
-mkdir /mnt/etc /mnt/boot /mnt/dev  
-cp -a /dev/fd0 /dev/sda1 /mnt/dev  
-cp [[kernel-image] /mnt/vmlinuz  
-cp /boot/boot.b /mnt/boot/boot.b  
-gzip < [[initrd-image] > /mnt/initrd  
-  
-  
-  
-  
-Create /mnt/etc/lilo.conf with the contents:  
-  
-  
-  
-  
-  
-boot=/dev/fd0  
-compact  
-image=/vmlinuz  
-label=linux  
-initrd=/initrd  
-read-only  
-root=/dev/sda1  
-  
-  
-  
-  
-Finally, invoke lilo with:  
-  
-  
-  
-  
-  
-lilo -r /mnt  
-  
-  
-  
-  
-When lilo is invoked with -r, it performs all actions  
-relative to the specified alternate root directory. The reason for  
-creating the device files under /mnt/dev was that lilo  
-will not be able to use the files in /dev when it is running  
-in this alternate-root mode.  
-  
-  
-  
-  
-!Installing an initrd image on a non-Linux drive  
-  
-  
-One common use of the initrd facility would be on systems where the  
-internal hard drive is dedicated to another operating system. The  
-Linux kernel and initrd image can be placed in a non-Linux partition,  
-and lilo or LOADLIN can be set up to boot Linux from these  
-images.  
-  
-  
-Assuming that you have a kernel has been configured for the  
-appropriate root device, and an initrd image created on another  
-system, the easiest way to get started is to boot Linux using  
-LOADLIN, as:  
-  
-  
-  
-  
-  
-LOADLIN <kernel> initrd=<initrd-image>  
-  
-  
-  
-  
-Once you can boot Linux on your target machine, you could then  
-install lilo to allow booting Linux directly.  
-For example, say that /dev/hda1 is the non-Linux target  
-partition and /mnt can be used as a mount point. First,  
-create a subdirectory on the target for the Linux files:  
-  
-  
-  
-  
-  
-mount /dev/hda1 /mnt  
-mkdir /mnt/linux  
-cp [[kernel-image] /mnt/linux/vmlinuz  
-cp [[initrd-image] /mnt/linux/initrd  
-  
-  
-  
-  
-In this example, say that /dev/sda1 is the desired Linux root  
-partition, a SCSI hard drive mounted via a PCMCIA SCSI adapter. To  
-install lilo, create a lilo.conf file with the contents:  
-  
-  
-  
-  
-  
-boot=/dev/hda  
-map=/mnt/linux/map  
-compact  
-image=/mnt/linux/vmlinuz  
-label=linux  
-root=/dev/sda1  
-initrd=/mnt/linux/initrd  
-read-only  
-other=/dev/hda1  
-table=/dev/hda  
-label=windows  
-  
-  
-  
-  
-The boot= line says to install the boot loader in the master boot  
-record of the specified device. The root= line identifies the  
-desired root filesystem to be used after loading the initrd image, and  
-may be unnecessary if the kernel image is already configured this way.  
-The other= section is used to describe the other operating system  
-installed on /dev/hda1.  
-  
-  
-To install lilo in this case, use:  
-  
-  
-  
-  
-  
-lilo -C lilo.conf  
-  
-  
-  
-  
-Note that in this case, the lilo.conf file uses absolute paths  
-that include /mnt. I did this in the example because the target  
-filesystem may not support the creation of Linux device files for the  
-boot= and root= options.  
-  
-  
-  
-----  
-  
-!!6. Dealing with unsupported cards  
-  
-  
-  
-  
-  
-  
-  
-!! 6.1 Configuring unrecognized cards  
-  
-  
-  
-  
-  
-  
-Assuming that your card is supported by an existing driver, all  
-that needs to be done is to add an entry to  
-/etc/pcmcia/config to tell cardmgr how to identify the card,  
-and which driver(s) need to be linked up to this card. Check the man  
-page for pcmcia for more information about the config file format.  
-If you insert an unknown card, cardmgr will normally record some  
-identification information in the system log that can be  
-used to construct the config entry. This information can also be  
-displayed with the ``cardctl ident'' command.  
-  
-  
-Here is an example of how cardmgr will report an unsupported card in  
-/usr/adm/messages.  
-  
-  
-  
-  
-  
-cardmgr[[460]: unsupported card in socket 1  
-cardmgr[[460]: product info: "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"  
-cardmgr[[460]: manfid: 0x0101, 0x1234 function: 2 (serial)  
-  
-  
-  
-  
-The corresponding entry in /etc/pcmcia/config would be:  
-  
-  
-  
-  
-  
-card "Megahertz XJ2288 V.34 Fax Modem"  
-version "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"  
-bind "serial_cs"  
-  
-  
-  
-  
-or using the more compact product ID codes:  
-  
-  
-  
-  
-  
-card "Megahertz XJ2288 V.34 Fax Modem"  
-manfid 0x0101, 0x1234  
-bind "serial_cs"  
-  
-  
-  
-  
-You can use ``*'' to match strings that don't need to match exactly,  
-like version numbers. When making new config entries, be careful  
-to copy the strings exactly, preserving case and blank spaces.  
-Also be sure that the config entry has the same number of strings as  
-are reported in the log file.  
-  
-  
-Beware that you can specify just about any driver for a card, but if  
-you're just shooting in the dark, there is not much reason to expect  
-this to be productive. You may get lucky and find that your card is  
-supported by an existing driver. However, the most likely outcome is  
-that the driver won't work, and may have unfortunate side effects  
-like locking up your system. Unlike most ordinary device drivers,  
-which probe for an appropriate card, the probe for a PCMCIA device is  
-done by cardmgr, and the driver itself may not do much validation  
-before attempting to communicate with the device.  
-  
-  
-After editing /etc/pcmcia/config, you can signal cardmgr  
-to reload the file with:  
-  
-  
-  
-  
-  
-kill -HUP `cat /var/run/cardmgr.pid`  
-  
-  
-  
-  
-If you do set up an entry for a new card, please send me a copy so  
-that I can include it in the standard config file.  
-  
-  
-  
-  
-!!6.2 Adding support for an NE2000-compatible ethernet card  
-  
-  
-  
-Before you begin: this procedure will only work for simple ethernet  
-cards. Multifunction cards (i.e., ethernet/modem combo cards) have an  
-extra layer of complexity regarding how the two functions are  
-integrated, and generally cannot be supported without obtaining some  
-configuration information from the card vendor. Using the following  
-procedure for a multifunction card will not be productive.  
-  
-  
-First, see if the card is already recognized by cardmgr. Some  
-cards not listed in SUPPORTED.CARDS are actually OEM versions of  
-cards that are supported. If you find a card like this, let me know  
-so I can add it to the list.  
-  
-  
-If your card is not recognized, follow the instructions in the  
-Configuring unrecognized cards section to  
-create a config entry for your card,  
-and bind the card to the pcnet_cs driver. Restart cardmgr  
-to use the updated config file.  
-  
-  
-If the pcnet_cs driver says that it is unable to determine your  
-card's hardware ethernet address, then edit your new config entry to  
-bind the card to the memory card driver, memory_cs.  
-Restart cardmgr to use the new updated config file.  
-You will need to know your card's hardware ethernet address. This  
-address is a series of six two-digit hex numbers, often printed on the  
-card itself. If it is not printed on the card, you may be able to use  
-a DOS driver to display the address. In any case, once you know it,  
-run:  
-  
-  
-  
-  
-  
-dd if=/dev/mem0a count=20 | od -Ax -t x1  
-  
-  
-  
-  
-and search the output for your address. Only the even bytes are  
-defined, so ignore the odd bytes in the dump. Record the hex offset of the  
-first byte of the address. Now, edit clients/pcnet_cs.c and  
-find the hw_info structure. You'll need to create a new entry  
-for your card. The first field is the memory offset. The  
-next three fields are the first three bytes of the hardware address.  
-The final field contains some flags for specific card features; to  
-start, try setting it to .  
-  
-  
-After editing pcnet_cs.c, compile and install the new module.  
-Edit /etc/pcmcia/config again, and change the card binding  
-from memory_cs to pcnet_cs. Follow the instructions for  
-reloading the config file, and you should be all set. Please send me  
-copies of your new hw_info and config entries.  
-  
-  
-If you can't find your card's hardware address in the hex dump, as a  
-method of last resort, it is possible to ``hard-wire'' the address when  
-the pcnet_cs module is initialized. Edit  
-/etc/pcmcia/config.opts and add a hw_addr= option, like  
-so:  
-  
-  
-  
-  
-  
-module "pcnet_cs" opts "hw_addr=0x00,0x80,0xc8,0x01,0x02,0x03"  
-  
-  
-  
-  
-Substitute your own card's hardware address in the appropriate spot,  
-of course. Beware that if you've gotten this far, it is very unlikely  
-that your card is genuinely NE2000 compatible. In fact, I'm not sure  
-if there are ''any'' cards that are not handled by one of the first  
-two methods.  
-  
-  
-  
-  
-!!6.3 PCMCIA floppy interface cards  
-  
-  
-  
-The PCMCIA floppy interface used in the Compaq Aero and a few other  
-laptops is not yet supported by this package. The snag in supporting  
-the Aero floppy is that the Aero seems to use a customized  
-PCMCIA controller to support DMA to the floppy. Without  
-knowing exactly how this is done, there isn't any way to implement  
-support under Linux.  
-  
-  
-If the floppy adapter card is present when an Aero is booted, the Aero  
-BIOS will configure the card, and Linux will identify it as a normal  
-floppy drive. When the Linux PCMCIA drivers are loaded, they will  
-notice that the card is already configured and attached to a Linux  
-driver, and this socket will be left alone. So, the drive can be used  
-if it is present at boot time, but the card is not hot swappable.  
-  
-  
-  
-----  
-  
-!!7. Debugging tips and programming information  
-  
-!!7.1 Submitting useful bug reports  
-  
-  
-  
-The best way to submit bug reports is to use the !HyperNews message  
-lists on the Linux PCMCIA information site. That way, other people  
-can see current problems (and fixes or workarounds, if available).  
-Here are some things that should be included in all bug reports:  
-  
-  
-  
-  
-  
-*Your system brand and model.  
-*  
-  
-*What PCMCIA card(s) you are using.  
-*  
-  
-*Your Linux kernel version (i.e., ``uname -rv''), and PCMCIA  
-driver version (i.e., ``cardctl -V'').  
-*  
-  
-*Any changes you have made to the startup files in  
-/etc/pcmcia, or to the PCMCIA startup script.  
-*  
-  
-*All PCMCIA-related messages in your system log file. That  
-includes startup messages, and messages generated when your  
-cards are configured.  
-*  
-  
-  
-  
-All the PCMCIA modules and the cardmgr daemon send status  
-messages to the system log. This will usually be something like  
-/var/log/messages or /usr/adm/messages. This file  
-should be the first place to look when tracking down a problem. When  
-submitting a bug report, always include the relevant contents of this  
-file. If you are having trouble finding your system messages, check  
-/etc/syslog.conf to see how different classes of messages  
-are handled.  
-  
-  
-Before submitting a bug report, please check to make sure that you are  
-using an up-to-date copy of the driver package. While it is somewhat  
-gratifying to read bug reports for things I've already fixed, it isn't  
-a particularly constructive use of my time.  
-  
-  
-If you do not have web access, bug reports can be sent to me at  
-  
-dahinds@users.sourceforge.net. However, I prefer  
-that bug reports be posted to the PCMCIA web site, so that they can be  
-seen by others.  
-  
-  
-  
-  
-!!7.2 Interpreting kernel trap reports  
-  
-  
-  
-If your problem involves a kernel fault, the register dump from the  
-fault is only useful if you can translate the fault address, EIP, to  
-something meaningful. Recent versions of klogd attempt to  
-translate fault addresses based on the current kernel symbol map, but  
-this may not work if the fault is in a module, or if the problem is  
-severe enough that klogd cannot finish writing the fault  
-information to the system log.  
-  
-  
-If a fault is in the main kernel, the fault address can be looked up  
-in the System.map file. This may be installed in  
-/System.map or /boot/System.map. If a fault is in a  
-module, the nm command gives the same information, however, the  
-fault address has to be adjusted based on the module's load address.  
-Let's say that you have the following kernel fault:  
-  
-  
-  
-  
-  
-Unable to handle kernel NULL pointer dereference  
-current->tss.cr3 = 014c9000, %cr3 = 014c9000  
-*pde = 00000000  
-Oops: 0002  
-CPU:  
-EIP: 0010:[[<c2026081>]  
-EFLAGS: 00010282  
-  
-  
-  
-  
-The fault address is 0xc2026081. Looking at System.map, we  
-see that this is past the end of the kernel, i.e., is in a kernel  
-module. To determine which module, check the output of  
-``ksyms -m | sort'':  
-  
-  
-  
-  
-  
-Address Symbol Defined by  
-c200d000 (35k) [[pcmcia_core]  
-c200d10c register_ss_entry [[pcmcia_core]  
-c200d230 unregister_ss_entry [[pcmcia_core]  
-...  
-c2026000 (9k) [[3c574_cs]  
-c202a000 (4k) [[serial_cs]  
-  
-  
-  
-  
-So, 0xc2026081 is in the 3c574_cs module, and is at an offset of  
-0x0081 from the start of the module. We cannot look up this offset in  
-3c574_cs.o yet: when the kernel loads a module, it inserts a  
-header at the module load address, so the real start of the module is  
-offset from the address shown in ksyms. The size of the header  
-varies with kernel version: to find out the size for your kernel,  
-check a module that exports symbols (like pcmcia_core above), and  
-compare a symbol address with nm output for that symbol. In this  
-example, register_ss_entry is loaded at an offset of 0xc200d10c -  
-0xc200d000 = 0x010c, while ``nm pcmcia_core.o'' shows the offset  
-as 0x00c0, so the header size is 0x010c - 0x00c0 = 0x004c bytes.  
-  
-  
-Back to 3c574_cs, our fault offset is 0x0081, and subtracting the  
-0x004c header, the real module offset is 0x0035. Now looking at  
-``nm 3c574_cs.o | sort'', we see:  
-  
-  
-  
-  
-  
-0000002c d if_names  
-0000002c t tc574_attach  
-00000040 d mii_preamble_required  
-00000041 d dev_info  
-  
-  
-  
-  
-So, the fault is located in tc574_attach().  
-  
-  
-In this example, the fault did not cause a total system lockup, so  
-ksyms could be executed after the fault happened. In other  
-cases, you may have to infer the module load addresses indirectly.  
-The same sequence of events will normally load modules in the same  
-order and at the same addresses. If a fault happens when a certain  
-card is inserted, get the ksyms output before inserting the card,  
-or with a different card inserted. You can also manually load the  
-card's driver modules with insmod and run ksyms before  
-inserting the card.  
-  
-  
-For more background, see ``man insmod'', ``man ksyms'', and  
-``man klogd''. In the kernel source tree,  
-Documentation/oops-tracing.txt is also relevant. Here are a  
-few more kernel debugging hints:  
-  
-  
-  
-  
-  
-*Depending on the fault, it may also be useful to translate  
-addresses in the ``Call Trace'', using the same procedure as for the  
-main fault address.  
-*  
-  
-*To diagnose a silent lock-up, try to provoke the problem with X  
-disabled, since kernel messages sent to the text console will not be  
-visible under X.  
-*  
-  
-*If you kill klogd, most kernel messages will be echoed  
-directly on the text console, which may be helpful if the problem  
-prevents klogd from writing to the system log.  
-*  
-  
-*To cause all kernel messages to be sent to the console, for 2.1  
-kernels, if /proc/sys/kernel/printk exists, do:  
-  
-  
-echo 8 > /proc/sys/kernel/printk  
-  
-  
-  
-*  
-  
-*The key combination <!RightAlt><!ScrLk> prints a  
-register dump on the text console. This may work even if the system  
-is otherwise completely unresponsive, and the EIP address can be  
-interpreted as for a kernel fault.  
-*  
-  
-*For 2.1 kernels configured with CONFIG_MAGIC_SYSRQ enabled,  
-various emergency functions are available via special  
-<Alt><!SysRq> key combinations, documented in  
-Documentation/sysrq.txt in the kernel source tree.  
-*  
-  
-  
-  
-  
-  
-!! 7.3 Low level PCMCIA debugging aids  
-  
-  
-  
-The PCMCIA modules contain a lot of conditionally-compiled debugging  
-code. Most of this code is under control of the PCMCIA_DEBUG  
-preprocessor define. If this is undefined, debugging code will  
-not be compiled. If set to , the code is compiled but inactive.  
-Larger numbers specify increasing levels of verbosity. Each module  
-built with PCMCIA_DEBUG defined will have an integer parameter,  
-pc_debug, that controls the verbosity of its output. This  
-can be adjusted when the module is loaded, so output can be controlled  
-on a per-module basis without recompiling.  
-  
-  
-Your default configuration for syslogd may discard kernel  
-debugging messages. To ensure that they are recorded, edit  
-/etc/syslog.conf to ensure that ``kern.debug'' messages  
-are recorded somewhere. See ``man syslog.conf'' for details.  
-  
-  
-There are a few register-level debugging tools in the  
-debug_tools/ subdirectory of the PCMCIA distribution. The  
-dump_tcic and dump_i365 utilities generate register dumps  
-for ISA-to-PCMCIA controllers. In 3.1.15 and later releases,  
-dump_i365 is replaced by dump_exca, which is similar but  
-also works for PCI-to-!CardBus bridges. Also new in 3.1.15 for !CardBus  
-bridges is the dump_cardbus tool, which interprets the  
-!CardBus-specific registers. These are all most useful if you have  
-access to a datasheet for the corresponding controller chip. The  
-dump_cis utility (dump_tuples in pre-3..2 distributions)  
-lists the contents of a card's CIS (Card Information Structure), and  
-decodes most of the important bits. And the dump_cisreg utility  
-displays a card's local configuration registers.  
-  
-  
-The memory_cs memory card driver is also sometimes useful for  
-debugging problems with 16-bit PC Cards. It can be bound to any card,  
-and does not interfere with other drivers. It can be used to directly  
-access any card's attribute memory or common memory. Similarly for  
-!CardBus cards, the memory_cb driver can be bound to any 32-bit  
-card, to give direct access to that card's address spaces. See the  
-man pages for more information.  
-  
-  
-  
-  
-!!7.4 /proc/bus/pccard  
-  
-  
-  
-Starting with 2.1.103 kernels, the PCMCIA package will create a tree  
-of status information under /proc/bus/pccard.  
-Much of the information can only be interpreted using the data sheets  
-for the PCMCIA host controller. Its contents may depend on how the  
-drivers were configured, but may include all or some of the following:  
-  
-  
-  
-  
-; __/proc/bus/pccard/{irq,ioport,memory}__:  
-  
-If present, these files contain resource allocation information to  
-supplement the normal kernel resource tables. Recent versions of  
-the PCMCIA system may obtain additional resource information from  
-the Plug and Play BIOS if configured to do so.  
-; __/proc/bus/pccard/drivers__:  
-  
-In recent releases, this lists all currently loaded PCMCIA client  
-drivers. Unlike /proc/modules, it also lists drivers that  
-may be statically linked into the kernel.  
-; __/proc/bus/pccard/*/info__:  
-  
-For each socket, describes that socket's host controller and its  
-capabilities.  
-; __/proc/bus/pccard/*/exca__:  
-  
-This contains a dump of a controller's ``ExCA'' Intel  
-i82365sl-compatible register set.  
-; __/proc/bus/pccard/*/{pci,cardbus}__:  
-  
-For !CardBus bridges, a dump of the bridge's PCI configuration space,  
-and a dump of the bridge's !CardBus configuration registers.  
-  
-  
-  
-  
-  
-!!7.5 Writing Card Services drivers for new cards  
-  
-  
-  
-The Linux PCMCIA Programmer's Guide is the best documentation for the  
-client driver interface. The latest version is always available from  
-projects.sourceforge.net in /pub/pcmcia-cs/doc, or on  
-the web at  
-http://pcmcia-cs.sourceforge.net.  
-  
-  
-For devices that are close relatives of normal ISA devices, you will  
-probably be able to use parts of existing Linux drivers. In some  
-cases, the biggest stumbling block will be modifying an existing  
-driver so that it can handle adding and removing devices after boot  
-time. Of the current drivers, the memory card driver is the only  
-``self-contained'' driver that does not depend on other parts of the  
-Linux kernel to do most of the dirty work.  
-  
-  
-In many cases, the largest barrier to supporting a new card type is  
-obtaining technical information from the manufacturer. It may be  
-difficult to figure out who to ask, or to explain exactly what  
-information is needed. However, with a few exceptions, it is very  
-difficult if not impossible to implement a driver for a card without  
-technical information from the manufacturer.  
-  
-  
-I have written a dummy driver with lots of comments that explains a  
-lot of how a driver communicates with Card Services; you will find  
-this in the PCMCIA source distribution in clients/dummy_cs.c.  
-  
-  
-  
-  
-!!7.6 Guidelines for PCMCIA client driver authors  
-  
-  
-  
-  
-  
-  
-I have decided that it is not really feasible for me to distribute all  
-PCMCIA client drivers as part of the PCMCIA package. Each new driver  
-makes the main package incrementally harder to maintain, and including  
-a driver inevitably transfers some of the maintenance work from the  
-driver author to me. Instead, I will decide on a case by case basis  
-whether or not to include contributed drivers, based on user demand as  
-well as maintainability. For drivers not included in the core  
-package, I suggest that driver authors adopt the following scheme for  
-packaging their drivers for distribution.  
-  
-  
-Driver files should be arranged in the same directory scheme used in  
-the PCMCIA source distribution, so that the driver can be unpacked on  
-top of a complete PCMCIA source tree. A driver should include source  
-files (in ./modules/), a man page (in ./man/), and  
-configuration files (in ./etc/). The top level directory  
-should also include a README file.  
-  
-  
-The top-level directory should include a makefile, set up so  
-that ``make -f ... all'' and ``make -f ... install'' compile the  
-driver and install all appropriate files. If this makefile is given  
-an extension of .mk, then it will automatically be invoked by the  
-top-level Makefile for the all and install targets.  
-Here is an example of how such a makefile could be constructed:  
-  
-  
-  
-  
-  
-# Sample Makefile for contributed client driver  
-FILES = sample_cs.mk README.sample_cs \  
-modules/sample_cs.c modules/sample_cs.h \  
-etc/sample.conf etc/sample etc/sample.opts \  
-man/sample_cs.4  
-all:  
-$(MAKE) -C modules MODULES=sample_cs.o  
-install:  
-$(MAKE) -C modules install-modules MODULES=sample_cs.o  
-$(MAKE) -C etc install-clients CLIENTS=sample  
-$(MAKE) -C man install-man4 MAN4=sample_cs.4  
-dist:  
-tar czvf sample_cs.tar.gz $(FILES)  
-  
-  
-  
-  
-This makefile uses install targets defined in 2.9.10 and later  
-versions of the PCMCIA package. This makefile also includes a  
-``dist'' target for the convenience of the driver author. You would  
-probably want to add a version number to the final package filename  
-(for example, sample_cs-1.5.tar.gz). A complete distribution  
-could look like:  
-  
-  
-  
-  
-  
-sample_cs.mk  
-README.sample_cs  
-modules/sample_cs.c  
-modules/sample_cs.h  
-etc/sample.conf  
-etc/sample  
-etc/sample.opts  
-man/sample_cs.4  
-  
-  
-  
-  
-With this arrangement, when the contributed driver is unpacked, it  
-becomes essentially part of the PCMCIA source tree. It can make use  
-of the PCMCIA header files, as well as the machinery for checking the  
-user's system configuration, and automatic dependency checking, just  
-like a ``normal'' client driver.  
-  
-  
-In this example, etc/sample and etc/sample.opts  
-would be the new driver's configuration scripts (if needed), and  
-etc/sample.conf would contain any additions to the PCMCIA  
-card configuration file. Starting with the 3.1.6 release,  
-cardmgr will automatically process any *.conf files  
-installed in /etc/pcmcia, so installation of contributed  
-drivers should no longer require hand editing configuration files.  
-  
-  
-I will accept client drivers prepared according to this specification  
-and place them in the /pub/pcmcia-cs/contrib directory on  
-projects.sourceforge.net. The README in this directory will  
-describe how to unpack a contributed driver.  
-  
-  
-The client driver interface has not changed much over time, and has  
-almost always preserved backwards compatibility. A client driver will  
-not normally need to be updated for minor revisions in the main  
-package. I will try to notify authors of contributed drivers of  
-changes that require updates to their drivers.  
-  
-  
-  
-  
-!!7.7 Guidelines for Linux distribution maintainers  
-  
-  
-  
-  
-  
-  
-If your distribution has system configuration tools that you would  
-like to be PCMCIA-aware, please use the *.opts files in  
-/etc/pcmcia for your ``hooks.'' These files will not be  
-modified if a user compiles and installs a new release of the PCMCIA  
-package. If you modify the main configuration scripts, then a fresh  
-install will silently overwrite your custom scripts and break the  
-connection with your configuration tools. Contact me if you are not  
-sure how to write an appropriate option script, or if you need  
-additional capabilities.  
-  
-  
-It is helpful for users (and for me) if you can document how your  
-distribution deviates from the PCMCIA package as described in this  
-document. In particular, please document changes to the startup  
-script and configuration scripts. If you send me the appropriate  
-information, I will include it in the  
-Notes about specific Linux distributions.  
-  
-  
-When building PCMCIA for distribution, consider including contributed  
-drivers that are not part of the main PCMCIA package. For reasons of  
-maintainability, I am trying to limit the core package size, by only  
-adding new drivers if I think they are of particularly broad interest.  
-Other drivers will be distributed separately, as described in the  
-previous section. The split between integral and separate drivers is  
-somewhat arbitrary and partly historical, and should not imply a  
-difference in quality .  
-  
-  
-  
-----  
+Describe [HowToPCMCIAHOWTO ] here.