Cisco Airo PLX PCI9052 driver for Linux

This is a Linux driver for Cisco wireless PCMCIA cards to operate on a PCI bus with the common and cheap PLX PCI9052 chipset cards that are everywhere now.

It's current state is very alpha but it's designed to work with the cards supported by airo.c in the kernel.  I'd appreciate it very much if anyone who's interested would check it out and help debug or point out any kernel driver nasties.  I am very new to Linux driver writing.  This code is derived from orinoco_plx.c .

Grab v0.01b of  airo_plx.c

WARNING: It's alpha driver code and may hang your system completely.  Don't try it if you can't live with this risk.

gcc -D__KERNEL__ -I/usr/src/linux-2.4.18/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=athlon  -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.18/include/linux/modversions.h  -DKBUILD_BASENAME=airo_plx  -DEXPORT_SYMTAB -c airo_plx.c

I also built airo.c, placed both in the proper modules directory and loaded them with insmod.

dmesg reports:

airo_plx: pci enabled
airo_plx: attribmem = 0xe08e7000
airo_plx: pdev2 = 0xe3001000
airo_plx: Cisco Airo 352 detected
<7>airo_plx: CIS COR found at 0x300
airo_plx: PLX Local Interrupt already enabled
airo_plx: Detected Airo PLX device at 00:08.0 irq:11, io addr:0xe000
airo: Doing fast bap_reads
airo: MAC enabled eth1 0:7:85:92:5b:fa

I can bring up the interface, eth1 in my case thus:

eth1      Link encap:Ethernet  HWaddr 00:07:85:92:5B:FA
          inet addr:192.168.3.1  Bcast:192.168.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:245 dropped:0 overruns:0 frame:245
          TX packets:7 errors:4 dropped:0 overruns:0 carrier:4
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:336 (336.0 b)
          Interrupt:11 Base address:0xe000

/proc/driver/aironet/eth1/Status says:

Status: CFG ACT
Mode: f
Signal Strength: 100
Signal Quality: 15
SSID:
AP:
Freq: 0
BitRate: 11mbs
Driver Version: airo.c 0.3 (Ben Reed & Javier Achirica)
Device: 350 Series
Manufacturer: Cisco Systems
Firmware Version: 4.25.30
Radio type: 2
Country: 0
Hardware Version: 22
Software Version: 425
Software Subversion: 1e
Boot block version: 150

iwconfig gives:

eth1      IEEE 802.11-DS  ESSID:"Spam"
          Mode:Ad-Hoc  Frequency:2.412GHz  Cell: 66:00:5F:00:70:00
          Bit Rate:11Mb/s   Tx-Power=0 dBm   Sensitivity=0/65535
          Retry limit:16   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:13/10  Signal level:-10 dBm  Noise level:-256 dBm
          Rx invalid nwid:377  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:26  Invalid misc:839   Missed beacon:0
 

I have been able to successfully run the Linux Cisco Client Utility v1.6.7 and update the firmware from 4.25.05 to 4.25.30.  The 0.01a driver looks like it was fine.  0.01b just gets rid of some compiler warnings.  At this stage I have been able to get this Airo/PLX combo talking to my DWL-520 in the same box.  They swap 802.11b stuff but it's hardly ideal to properly test IP packets. 

So, at this stage, I would say Cisco Airo PCMCIA cards and PLX adapters are a go in PCI2.1/2.2 systems.  I haven't been able to get it to work in my Super 7 FIC PA-2007 board. Nothing PCI2.2 works on this board.

This driver has only been successfully tested against Linux kernel 2.4.18.

Update: I have disposed of the PLX adapter as I am now taking the USB path. I'll leave this here for anyone else who wants to try PLX and Cisco cards. This code is a good basis for trying to get other PCMCIA devices working in a PLX adapter in Linux.

Note, this driver will work on a 2.4 series kernel. It will need to be modified to work on a 2.6 series kernel.

(C) 2003 Jason Hecker
Email: Manually enter the address

2-March-2004