
Linux Wireless compatibility package
=====================================

This is a Linux wireless compatibility package which provides the latest
Linux wireless subsystem enhancements for kernels 2.6.24 and above.
It is technically possible to support kernels < 2.6.24 but more
work is required for that.
It also provides Linux bluetooth subsystem enhancements for kernels 2.6.27 and above.

With a local git repository you can update the compatibility package yourself. 
For more information on how to do this please refer the Developers section below.

Documentation
------------

This package is also documented online and has more-up-to date
information online than on this README file. You should read the wiki page
and not rely on this README:

http://wireless.kernel.org/en/users/Download

Subscribe to the wiki page to get updates on the documentation.

Where to get the latest
-----------------------

This package lets you build your own 'latest', all you need is a local git
repository. The process is documented in the Developers section of this document.
However since not many users are expected to keep a local git repository we 
provide daily snapshots of this package + the wireless and bluetooth subsystem
code. You can find the latest snapshot at:

linux-next.git version:
http://wireless.kernel.org/en/users/Download

stable version:
http://wireless.kernel.org/en/users/Download/stable/

Versions
--------

There are two different versions of this package available. 
 * Version based on latest linux-next.git tree named compat-wireless-YYYY-MM-DD.tar.bz2
 * Version based on linux-2.6-stable.git tree named compat-wireless-2.6.CC.DD.tar.bz2

Both versions should work for every kernel > 2.6.24. The differences are the
code they are containing. The version based on linux-next.git contains the
wireless and bluetooth subsystem out of linux-next.git and the stable version
the wireless subsystem out of the corresponding linux stable version.

Selecting your driver
---------------------

If you know the driver you want you can select it with our
helper script:

./scripts/driver-select

Run that script to see more information. 
Not all drivers are currently enabled via driver-select.

Building, and installing
------------------------

Build: compile the latest linux wireless subsystem

	make

Install:

We use the updates/ directory so your distribution's drivers are left intact.

	sudo make install

Uninstall:

This nukes our changes to updates/ so you can go back to using your
distribution's supported drivers.

	sudo make uninstall

Load:

Reboot unless you know what you are doing.
(Usually modprobe 'driver-name' is the way to go)


Bluetooth modules can be separately compiled and installed using below commands
Bluetooth drivers are also available via ./scripts/driver-select
 
Build:
	make bt

Install:
	sudo make btinstall

Uninstall:
	sudo make btuninstall

Unload:
	sudo make btunload

Load:
	modprobe driver-name. If unsure, reboot.

Drivers
-------

This is the list of drivers the package currently provides. It adds
all new drivers or drivers which keep being updated which you might
be interested in.

Drivers list:

adm8211
ar9170usb
at76c50x-usb
ath5k
ath6kl
ath9k
ath9k_htc
b43
b43legacy
b44
carl9170
brcm80211
ipw2100
ipw2200
iwl3945
iwlagn
iwlcore
iwmc3200wifi
libertas
libertas_cs
libertas_sdio
libertas_spi
libertas_tf
libertas_tf_usb
libipw
mwl8k
orinoco_cs
orinoco_nortel
orinoco_pci
orinoco_plx
orinoco_tld
orinoco_usb
orinoco
p54common
p54pci
p54spi
p54usb
rt2400pci
rt2500pci
rt2500usb
rt2800pci
rt2800usb
rt61pci
rt73usb
rtl8180
rtl8187
rtlwifi
rtl8192ce
spectrum_cs
ssb
wl1251
wl12xx
zd1211rw

This package also provides more drivers which may be documented here

For a complete list see:

http://wireless.kernel.org/en/users/Download

Non-wireless drivers
--------------------

Atheros Ethernet drivers:

atl1
atl1c
atl1e
atl2

To support b43 ssb is also provided, and since ssb is also provided
we provide b44 (the ethernet driver).

The new rfkill drivers also provided and backported.

Bluetooth drivers:

ath3k           
bcm203x
bluecard_cs
bluetooth
bnep
bpa10x
bt3c_cs
btmrvl
btmrvl_sdio
btsdio
btusb
btuart_cs
cmtp
dtl1_cs
hidp
hci_vhci
hci_uart
l2cap
rfcomm
sco

Firmware:
---------

If your driver needs firmware please be sure to check the driver page
for that driver here:

http://wireless.kernel.org/en/users/Drivers

Why?
----

For users or developers stuck on older kernels that want to help test or 
patch wireless work. Additionally if you're on a recent kernel this lets
you get the latest and greatest linux-next git work without much effort.
This may mean new drivers for some users. Last but not least we hope this
will encourage vendors and developers to post patches upstream first
rather than forking or maintaining their own mac80211 releases with
their own patches for their own drivers.

Building for external kernels
----------------------------------

If you have a kernel you do not have installed but yet want to build the
compat-wireless-2.6 drivers for it you can use this syntax:

make KLIB=/home/mcgrof/kernels/linux-2.6.23.9 KLIB_BUILD=/home/mcgrof/kernels/linux-2.6.23.9

If you have a kernel installed, which is not your currently running kernel (e.g. via
distro updates; plus its corresponding kernel-dev package), you can use this syntax:

make  KLIB=/lib/modules/2.6.30.6-53.fc11.x86_64

  and to install to your system's root path for the non-running kernel:

make  KLIB=/lib/modules/2.6.30.6-53.fc11.x86_64 KMODPATH_ARG='INSTALL_MOD_PATH=' install

Bugs
-----

If you've found a bug please report it to our linux-wireless mailing list:

linux-wireless@vger.kernel.org

Report the bug if you are working with the latest and greatest.
If your bug is compatibility-related then we should still try to fix
it within the compat.[ch] work.

ChangeLog
---------

Here you see the list of changes to all wireless drivers, the wireless core and mac80211.

http://git.kernel.org/?p=linux/kernel/git/linville/wireless-testing.git;a=log;

This views all the changes on wireless-testing.git.

License
-------

This work is a subset of the Linux kernel as such we keep the kernel's
Copyright practice. Some files have their own copyright and in those
cases the license is mentioned in the file. All additional work made
to building this package is licensed under the GPLv2.

Developers
----------

Compatibility work goes into compat/compat.[ch]. If using those files do 
not suffice additional actual code changes can go into patches/*.patch.

An extended and more up to date version can be found at:

http://wireless.kernel.org/en/users/Download/hacking

This section deals with development details of compat-wireless and the other
trees it uses. If you want to make your own compat-wireless tarballs, or if you
see something busted with compat-wireless or just want to add something new or
an enhancement this is the guide for you.

Git trees you will need
-----------------------

compat-wireless backports both the bluetooth and 802.11 subsystems down to older
kernels. To be able to synchronize backporting the latest and greatest the
linux-next.git tree is used as its main source for kernel updates. General Linux
kernel compatibility is addressed through a general kernel compatibility tree,
compat.git. compat-wireless then has its own tree for specific wireless
compatibility. You will then need to checkout three trees to start hacking on
compat-wireless:

git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/compat.git
git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/compat-wireless-2.6.git

Linux next
----------

The linux-next.git tree brings all subsystems being worked on for the next
kernel release into one tree. So if the current rc kernel is 2.6.33-rc5, this
means linux-next will have what people today are working on for the 2.6.34
kernel release.

compat.git
----------

The compat git tree is a general kernel compatibility layer which can be shared
amongst different compatibility projects, or drivers. compat-wireless is just
one of the kernel compatibility projects using compat.git. compat.git builds a
general compatibility module, compat, and any additional modules to let you get
new general kernel updates from future kernels on your old kernels.

compat.git modules
------------------

compat.git provides a few modules and headers to help with general kernel
compatibility.

compat
------

Provides all exported symbols implemented in each respective kernel
compat-2.6.xy.c files. Upon module load it just initializes the Linux kernel's
''power management Quality Of Service'' (aka '''pm-qos''') Interface interface
added as of the 2.6.24 kernel. No other things are initialized, the rest of the
compat module just acts as a library of exported symbols.

compat_firmware_class
---------------------

Another module which compat.git provides is a backport of the firmware_class
module which got updated recently newer with a new request_firmware_nowait()
to allow better asynchronous firmware uploading. This was added as of the 2.6.33
kernel. The firmware_class module has been backported into a new module called
compat_firmware_class. A separate module has been defined instead of a direct
replacement for firmware_class since your system may have old drivers which use
the old request_firmware_nowait() and would bust if they used the new
request_firmware_nowait(). The compat_firmware_class module registers its own
sysfs subsystem and as such also gets udev events sent through a separate
subsystem. Because of this a new udev rules file is required and provided.

compat-wireless.git
-------------------

Anything that is not general kernel compatibility but instead specific to 802.11
or bluetooth goes into compat-wireless.git. After you've cloned all three trees,
linux-next.git, compat.git and compat-wireless.git you need to change into the
compat-wireless directory and tell compat-wireless where you linux-next and
compat.git trees are. You do this with environment variables GIT_TREE and
GIT_COMPAT_TREE. You can do for example:

export GIT_TREE=/home/user/wireless-testing/
export GIT_COMPAT_TREE=/home/users/compat.git/

Then you can update your local sources based on these linux-next.git and
compat.git trees:

scripts/admin-clean.sh   - Cleans the compat-wireless-2.6 tree
scripts/admin-update.sh  - Updates compat-wireless-2.6 with your git tree
scripts/admin-refresh.sh - Does the above two

Adding new drivers
------------------

Most new drivers are enabled for compilation. If see a driver you would like
enabled try it into the mix, test them and if they work enable them and send
the respective patches.

Sending patches
---------------

Remember there are three trees. linux-next itself is a conglomeration of kernel
git trees itself, so patches for linux-next.git should be sent to each
respective subsystem for which the patches are targeted for. So for example for
802.11 you will want to send them to John Linville and cc linux-wireless, for
further guidelines on this see the Submitting Patches guidelines for 802.11.
http://wireless.kernel.org/en/developers/Documentation/SubmittingPatches
As another example, for bluetooth you will want to send them to Marcel
Holtmann and cc the linux-bluetooth mailing list. If your patch touches on
others areas of the kernel refer to the MAINTAINERS file on the kernel.

For compat.git and compat-wireless.git please send patches against to:

To: Luis R. Rodriguez <mcgrof@kernel.org>
CC: linux-wireless@vger.kernel.org, linux-bluetooth@vger.kernel.org
Subject: [PATCH] compat-2.6: fix foo

For patches for compat.git please use a subject like the following:

Subject: [PATCH] compat: fix foo

For compat-wireless.git please use a subject like the following:

Subject: [PATCH] compat-wireless: fix foo

Patches are preferred sent with a clear commit log entry, if unfamiliar with
how to send patches please refer to
http://wireless.kernel.org/en/developers/Documentation/git-guide.


TODO
-----
 * Dialog (make menuconfig) option for this package
 * Compatibility work for 2.6.18 --> 2.6.24

