The following binary firmware files are (c) Conexant, and do not fall
under the GPL or MPL.  They are assumed to have the same license as
their windows client drivers, ie everyone who bought a card that came
with a windows driver already has a copy of and license to use the
necessary firmware, albeit possibly an older version.  These are bundled
with linux-wlan-ng for convenience only, as many newer adapters 
(eg Prism 3 w/SSF) require a firmware download in order to function at 
all.

Primary (Basic hardware functionality) firmware images:

af010104.hex   Prism 2.5/3  AMD Flash
ak010104.hex   Prism 2.5/3  SST Flash
pm010102.hex   Prism 3      Short Serial Flash

Secondary (STA/Adhoc/HostAP mode) firmware images:  

r1010701.hex   Prism 2 PCMCIA adapters
rf010804.hex   Prism 2.5/3 PCI/PCMCIA adapters
ru010803.hex   Prism 2/3 USB adapters

Tertiary firmware images (Firmware-based AP mode) are not bundled, as 
that requires an explicit license from Conexant to use, with explicit 
limitations on redistribution.

The cx23418 firmware files:

v4l-cx23418-apu.fw
v4l-cx23418-cpu.fw
v4l-cx23418-dig.fw

are covered by the following license:

Conexant grants permission to use and redistribute these firmware
files for use with Conexant devices, but not as a part of the Linux
kernel or in any other form which would require these files themselves
to be covered by the terms of the GNU General Public License.
These firmware files are distributed in the hope that they will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
