Problem with unauthorized MiniPCI network card

From ThinkWiki
Revision as of 19:12, 14 December 2005 by Tonko (Talk | contribs) (Problem Description)
Jump to: navigation, search

Problem Description

Although the MiniPCI slot is an industry standard and can accept any MiniPCI adapter, the IBM BIOS is set to only allow you to boot with an 'authorized' adapter installed. Attempts to install an unsupported card will result in the following message:

  1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card.

This is because the card's sub-vendor PCI-ID (which can be seen using lspci -v) are checked against a whitelist in the BIOS. IBM's reasoning for this is that the combination of MiniPCI card and the integrated antenna in the ThinkPad needs to be certified by the US FCC (Federal Communications Commission).1 or similar agencies in other countries.

Affected Models

All series 3x, 4x, and 5x models (A, T, R, X)

Affected Operating Systems

All - problem is in the BIOS

Status

  • Workarounds exist for most affected models.
  • There was a report that none of these solutions work on the T43.

Solutions

It may be possible to use the computer with the unauthorized card deactivated (but not removed). Press F1 to enter the BIOS and deactivate the WLAN card, then attempt to boot with the card disabled. This does not make the wireless card work, but it may allow you to boot the computer normally.

NOTE!
Any of the following solutions should suffice to make the wireless card useable. You only need to perform one of them.
  • You may can modify the BIOS whitelist to include the PCI-ID of the card you wish to use. The complete instructions for this procedure are here.
ATTENTION!
It is dangerous to mess with your BIOS, you can easily make your machine unbootable, proceed with caution!
  • You can use the DOS no-1802 utility, written by Tisheng Chen.2 It will set a certain bit in the CMOS memory which disables the whitelist check.
  • You can compile and run (as root) the following C-code, which was written by Vojtech Pavlik3, based on the assembly used in the no-1802 program:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <asm/fcntl.h>

int main(void)
{
 int fd;
 unsigned char data;

 fd=open("/dev/nvram", O_RDWR);

 if (fd < 0) {
   fprintf(stderr, "Error\n");
 }
 lseek(fd,0x5c, SEEK_SET);
 read(fd, &data, 1);
 printf("index: 0x5c 0x%02x", data);
 data |= 0x80;
 lseek(fd,0x5c, SEEK_SET);
 write(fd, &data, 1);
 printf("-> 0x%02x\n", data);
 close(fd);
}

External Sources


FOOTNOTES [Δ]
  1. This is explained in a message to the LKML and subsequently clarified.
  2. The no-1802 tool was announced and explaned in a message to the Linux-Thinkpad ML.
  3. The C-code was posted in a message to the LKML.