[Specification] [TitleIndex] [WordIndex

This website attempts to document what I learned about the Conexant wireless chip, mostly motivated by wanting to have a free driver for my N810.


The Conexant wireless chips come in various form factors connected via (as far as I know) USB, PCI or SPI. For USB and PCI the device contains an EEPROM with device configuration, for SPI this configuration must be stored externally. Hence, a driver that is prepared to handle SPI devices must accept configuration from userspace. On the N810, this is done via sysfs files on the "wlan_omap" platform device.

All devices require firmware to run. In the past, there were chips with enough memory that the whole 802.11 stack could be implemented in the firmware, but with rising 802.11 requirements (and making chips cheaper by removing memory) newer chips were manufactured to be "softmac" chips. Conexant refers to this as a split between the "lower MAC" (LMAC, the firmware) and the "upper MAC" (UMAC).

The upper and lower MAC communicate using a command-based protocol. Each command is written into device memory by a DMA engine. The location of the command structure (in device memory!) must be determined by the driver.

Because of varying chips, it appears that there are different versions of the command protocol that the upper and lower MAC use to communicate. This site attempts to document all known versions of this protocol. Additionally, I'm currently not sure how the required firmware depends on the chip type, but it definitely does. Possibly the chip type is encoded in the EEPROM, on my N810 it is passed in the boot loader configuration (see cx3110x driver, sm_drv_spi_probe().)


2014-06-05 10:30