Problem with error 01C9 - More than one Ethernet devices

From ThinkWiki
Revision as of 07:50, 17 May 2008 by Danage (Talk | contribs) (Solution)
Jump to: navigation, search

Problem Description

Certain ThinkPads show a warning message during POST when a WLAN card with an Atheros chipset is present in the MiniPCI slot:

  WARNING
  01C9: More than one Ethernet devices are found. Remove one of them.
  Press <Esc> to continue.

Also, boot-up during POST may be taking longer than expected.

At POST, the BIOS conducts a scan for ethernet devices. It does this by reading the "PCI Class Codes" of every connected device. If more than one ethernet device is found, it produces the 01C9 error message. Unlike other wireless cards, which identify themselves as "other" network adapters, Atheros classify themselves as "ethernet". This collides with the internal ethernet controller (also a PCI device) and causes the 01C9 to appear. BIOS processing of the situation and generating the error message noticeably slow down boot-up time, at least in some models.

Affected Models

Not affected are

  • ThinkPad T4x series
  • ThinkPad X4x series

Solution

The solution is to modify the Atheros EEPROM so that the card correctly identifies itself as an "other" instead of an "ethernet" network adapter. A Linux Live CD to do both this and remove the 1802 error message is now available. [1] (~ 4 MB).

ATTENTION!
This software was designed FOR ATHEROS CARDS ONLY. Even though most users confirm it working fine, it can potentially harm your computer. The authors are in no way to be held liable for damage caused by this program. There is no warranty given, either express or implied for any fitness for any kind of purpose. YOU AGREE TO USE THIS ENTIRELY AT YOUR OWN RISK. Please also be aware that ath_info is still under development, and is not yet a part of the official madwifi release at the time of this writing. When in doubt read the source.

Functionality. This patch changes the PCI Class ID from 0x0200 to 0x0280, which corresponds "network device: other". It manipulates neither the PCI vendor ID nor the device ID. Therefore, functionality of drivers and operating systems will not be affected. Uninstalling drivers is not necessary before using this patch. The Live CD detects whether an Atheros adapter is installed and will only then proceed.

Usage.

  1. Burn the .ISO file to a CD/DVD. Make sure not to burn it as a file within a filesystem, but as an image.
  2. If you want to remove the 01C9 error only, skip to step 8.
  3. To remove the 1802 error, make sure you do not have the Atheros card installed in the MiniPCI slot.
  4. Boot from the disc.
  5. Choose to remove the 1802 error.
  6. Shut down after pressing Ctrl-Alt-Del.
  7. (Physically) install the Atheros card now.
  8. Boot from the disc (again).
  9. Choose not to apply the no-1802.
  10. Shut down after pressing Ctrl-Alt-Del. Upon 'cold' reboot, the 01C9 should be gone.

Limitations

Many newer Atheros adapters (chipsets equal to and newer than AR5004x) incorporate an EEPROM write protection by default. The Live CD may or may not be able to automatically patch these devices.

Possible solutions

Depending on your adapter, setting a GPIO (general purpose input/output) bit may enable write access. Should writing fail, you can try activating the EEPROM write-enable channel manually. After the Live CD finishes, you will be presented with a Linux shell prompt. This you can use to manually manpulate the GPIO channels. Try typing the following:

lspci -vd 168c: |sed -n 's/.*Memory at \([^ ]*\).*/0x\1/p'

This will present you with the EEPROM base address. This you can use to switch the GPIO:

/root/ath_info -g 4:0 -w <base_address>

In this example, you are setting GPIO 4 to low. Then, restart the patch script to see whether this enabled patching.

/root/patch.sh

After writing you may dump the complete eeprom with "-d" and find the new pci class at (16 bit) offset 2 for verification.

The manual method: Using ath_info from a LiveCD

The Linux Live CD depends on ath_info, a tool derived from the Madwifi Atheros driver project. You can also install ath_info yourself and manually replicate the steps laid out above. If you cannot use ath_info from your current operating system (say if you use FreeBSD), you can use grml to perform this "operation". The grml Live CD contains a C compiler, the Subversion client and loads the Madwifi drivers on boot. So all you need to do is to fetch the source and build ath_info:

svn co http://svn.madwifi.org/ath_info/trunk ath_info
cd ath_info
make

Read this manual page [2] to find out how to change the pci_class for your card. Again, you need to find the address at which your card can be accessed. Using ath_info -v -w <0xcard_base_address> pci_class 0x0280 seems to do the trick.

Successful applications

  • Askey Computer Corp AR2413A (802.11b/g) FCC ID:PPD-AR5BMB5 IC:4104A-AR5BMB5 (AR5005GS chipset)
  • SMC2835W, FCC ID: HED2835WACC (Cardbus card)
  • Gigabyte GN-WI01HT (802.11abg), AR5006SX-based