1. Some progress with implementing the HW commands

    OK, today we have some progress to report on. The generic “IWI_CMD” is ported — that means we can send various commands to the card. This has not been tested well yet, however, because we need to add a lot of other things before this part of the code will be able to function and yield anything useful.

    Acknowledging the CMD_DONE interrupt is also done, but I still have to make it wait on a mutex. This is the part where command gates will be needed because (according to IOKit docs) simply locking the mutex in one thread and unlocking it in the interrupt thread when we get the CMD_DONE signal from the card will not work in OS X kernel (unlike as in FreeBSD where this is the method used).

    Quick Roadmap

    Anyway, so with this out of the way, we still need to —

    • Implement the more specialized commands. This needs heavy Airport reverse engineering :(
    • Create the background ‘command processing’ thread. Turns out that we still need to create a background thread and then use IOCommandGate to control that thread’s access to the hardware :(
    • Test all this

    So with two frowning emoticons you can see this is where things have started to get messier than earlier, but we’ll get through it slow and steady.

    Once all the hardware commands are done, the driver will be more than 50% finished (right now I’d say it’s about 45% done). Stage 2 will have been done then and stage 3 will begin in which we have to —

    • Map all hardware commands to their AirPort equivalents (like set WEP key, scan a channel, associate etc.).
    • Configure the card (e.g. Tx power, RTS threshold etc.) I was going to do this during stage 2 itself as it’s a pretty straightforward task from the hardware side, but today I’ve realized that the driver will need to gather a lot of info from Airport utility.
    • Once scan and associate etc. are working, we need to implement Rx/Tx of packets. I expect this to take a whole lot of time.
    • When Rx/Tx is also done… the driver will be done :)
    • Lastly we need to test and debug the whole thing well, and also add some useful features like LED blinking etc.

    Timelog / Changelog

    Currently time spent stands at 105 hours. I expect another 100 hours before the driver will be finished. No changelog or other details right now because my internet is not working.

    That’s all for this update.