Problem with error 01C9 - More than one Ethernet devices
Certain ThinkPads show a warning message during POST when a WLAN card with an Atheros chipset is present in the MiniPCI or PCMCIA 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.
Not affected are
- ThinkPad T4x series
- ThinkPad X4x series
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 that automates this and can also remove the 1802 error message is now available.
NOTICE: The Live CD Version 2 is released now. Download it via Bittorrent here. (~ 4 MB). Download links appear to break regularly but will be fixed whenever necessity arises.
Functionality. The 01C9-patch changes the PCI Class ID from 0x0200 to 0x0280, which corresponds "network device: other". It manipulates the Atheros card, not the computer/BIOS/CMOS. It changes 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 auto-detects whether an Atheros adapter is installed and will only then proceed. NOTE: Read the Problem_with_unauthorized_MiniPCI_network_card article on functionality of the 1802 patch.
- Burn the .ISO file to a CD/DVD. Make sure not to burn it as a file within a filesystem, but as an image.
- If you want to remove the 01C9 error only, skip to step 8.
- To remove the 1802 error, make sure you do not have the Atheros card plugged into the slot.
- Boot from the disc.
- Choose to remove the 1802 error.
- Shut down after pressing Ctrl-Alt-Del.
- Plug in the Atheros card now.
- Boot from the disc (again).
- Choose not to apply the no-1802.
- Choose to apply the 01C9 patch.
- Shut down after pressing Ctrl-Alt-Del. Upon 'cold' reboot, the 01C9 should be gone.
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.
Should the automated solution fail, you can try to manually set a GPIO (general purpose input/output) bit to enable write access. Depending on your adapter, this might activate the EEPROM write-enable channel. After the Live CD finishes, it will drop to a Linux shell prompt. 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. Restart the patch script to see whether this enabled patching.
After writing you may dump the complete eeprom with "-d" and find the new pci class at (16 bit) offset 2 for verification.
Manual method: 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://madwifi-project.org/svn/ath_info/trunk ath_info cd ath_info make
Again, you need to find the address at which your card can be accessed (see above). Once you know it. instead of using the script, run
ath_info -v -w <base_address> pci_class 0x0280
Read this manual page  for further details.
Please add PCI IDs to this list. In Linux, type (case sensitive!):
lspci |grep Ath && lspci -n |grep 168c
- 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
- Generic unbranded AR5006X (802.11abg, 108Mbps super a/g+) , PCI ID: 168c:001b (rev 01), Subsystem: 10cf:1329
- Compex Wireless 802.11 b/g MiniPCI Adapter, Rev A1 [WLM54G]
- Atheros Communications Inc. AR5212/AR5213 Multiprotocol MAC/baseband processor [168c:0013] (rev 01)
- Atheros Communications Inc. AR2413 802.11bg NIC (rev 01)
- IBM 11a/b/g Wireless LAN Mini PCI Adapter (168c:1014 rev 01) (AR5001X+ chipset)