Wednesday, May 24, 2006

CVS checkin

I've checked in my working version of the code. This means anyone can see my code now and I no longer fear losing the code due to a crash of this laptop! :)

To check out the code, follow the instructions at


Tuesday, May 23, 2006

EEPROM reading and touching base with tuxx

It's done! :)

I've ironed out all the problems I could find. I was able to retrieve the MAC address of my card and it matches the back of my laptop! :)

The weirdest bug I had was with the following code:

UInt16 eeprom[127];
int i;

for (i=0; i<128; i++)
// do stuff

This thing would go all the way from 0 to 126 then loop back to 0. In conjection with the fact that at the time all the values I tried to read from the eeprom were returned as 0, this makes perfect sense! Because my array was 127 elements and I was trying to access the 128th element, I was actually setting the value of my counter i back to 0!

But, stuff like that aside, I've gotten in touch with tuxx. He made me admin of the iwi2200 project, so soon I should chcek in my work so far. That's all good now!

Next will be firmware and microcode loading. After that will come the hard part which is figuring out how to make packets flow around...

Also, I'm still trying to figure out which work can be delegated to other people who wanted to help.


Monday, May 22, 2006

Mircowire EEPROM

Turns out that the IPW2200 has an EEPROM with a Microwire serial interface. This EEPROM stores basic information such as MAC address, hardware version, etc.

I'm currently working on that... I've hardlocked/rebooted my laptop SO many times! :) But it's all good hehe....

What I'm struggling with is reading from the EEPROM. A Microwire EEPROM will receive a read command which consists of the bits '110' followed by a 8-bit address, MSB first. In my code, I send the command, '110', but when I start a for loop to send the address my driver stops responding... weird! I'll have to debug that later on.

Meanwhile, I've gotten in touch with tuxx who developed the initial partially working driver, and he's agreed to help me out! :) I've also gotten a few people saying they want to help me out coding. I'm trying to se what needs to be done and how work could be delegated...


Saturday, May 20, 2006

Is that an AirPort card in my Network Preferences panel?

Yes it is! I got my driver to create an 80211 interface so that it shows up as an AirPort in the Network Preferences panel. Doesn't do anything yet, but for now that's good progress!

Next comes firmware loading. The IPW2200 cards need to load some firmware, after which they can be talked to like any other hardware.


Friday, May 12, 2006


10.4.6 is installed on my laptop. I've also verified that the IPW2200 driver I'm working on loads correctly!

Development contiues!

Wednesday, May 10, 2006

Bumpy road

I've started working on the skeleton of a driver which inherits from the IO80211Controller class in the IO80211 IOKit Family. After getting the driver to compile (though it does NOTHING), I noticed that it would not load.

I asked around on IRC and Joey who had 10.4.6 tried to load it and it worked. I have 10.4.5 on my laptop, so I will have to upgrade this weekend. Meanwhile, the learning experience continues :)

Tuesday, May 09, 2006

Starting out

This blog aims to track the development of a Mac OS X ipw2200 wireless driver (Intel PRO/Wireless 2200BG). This miniPCI adapter has drivers for Linux (developed open source by Intel), *BSD, Solaris (through OpenSolaris), and of course Windows (but who cares about that? :P). The main challenges are:

* Determine how this card interacts with software (ie. what commands it takes, setting up packet flows, etc.)
* Design a Mac OS X driver for it, which means I need to figure out which IOKit family an AirPort card would fit in (this driver aims to simulate an actual AirPort so that users can seamlessly configure their networks)

Currently, I'm working on the first step and, in parallel, learning about AirPort IOKit families.

Now, let's look at what we know about this card. It requires that firmware be loaded onto it. What this firmware does, according to Intel, is that it makes sure that it does not exceed maximum RF device specifications in different parts of the globe. The firmware controls transmission strength, range and a couple of other things. The Linux driver readme provides more information. After the device has firmware loaded, it can be "talked to" just like any other hardware device. Again, the linux drivers are fairly comprehensive with (I think) mostly enough comments in the code.

As for the AirPort IOKit families, I'm still too early in the process to talk about it, but don't worry, I will talk about it once I mostly figure it out.

If you wish to help, please contact me at alex dot roman at gmail dot com.