aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuis R. Rodriguez <mcgrof@pogo.(none)>2007-11-16 18:47:42 -0500
committerLuis R. Rodriguez <mcgrof@pogo.(none)>2007-11-16 18:47:42 -0500
commit0f49a69d1d950db60df4fbb186685577a408725a (patch)
treec96b0c94022a82c8d191efc7e68481e91d7aad6b
parent22584118445f7bf1ba54049fbb8a1fe7c1f2315b (diff)
downloadcompat-wireless-2.6-old-0f49a69d1d950db60df4fbb186685577a408725a.tar.gz
Adds these modules:
adm8211 iwl4965 p54pci p54usb rt2400pci rt2500pci rt61pci rt2500usb rt73usb rtl8180 rtl8187 b43 b43legacy Tested successfully these: p54pci (on FullMAC card) rt2500pci rtl8180 b43 As with athload we add a b43load script lets you: b43load bcm43xx or b43load b43 libertas was tested but I have 31.02 on bcdDevice and the new device fails with: usb8xxx: URB in failure status: -71 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb 4-1: reset high speed USB device using ehci_hcd and address 3 usb8xxx: probe of 4-1:1.0 failed with error -12 usbcore: registered new interface driver usb8xxx Adds some more backport code. Signed-off-by: Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
-rw-r--r--Makefile23
-rw-r--r--compat/compat.c26
-rw-r--r--compat/compat.diff389
-rw-r--r--compat/compat.h36
-rw-r--r--config.mk84
-rwxr-xr-xscripts/admin-update.sh38
-rwxr-xr-xscripts/athenable83
-rwxr-xr-xscripts/athload12
-rwxr-xr-xscripts/b43enable50
-rwxr-xr-xscripts/b43load62
-rwxr-xr-xscripts/load.sh11
-rwxr-xr-xscripts/modlib.sh88
-rwxr-xr-xscripts/unload.sh15
13 files changed, 801 insertions, 116 deletions
diff --git a/Makefile b/Makefile
index af1e02f..9b6eb11 100644
--- a/Makefile
+++ b/Makefile
@@ -16,10 +16,9 @@ ifneq ($(KERNELRELEASE),)
NOSTDINC_FLAGS := -I$(PWD)/include/ $(CFLAGS)
obj-y := net/wireless/ net/mac80211/ \
- drivers/net/wireless/ath5k/ \
- drivers/net/wireless/iwlwifi/ \
- drivers/net/wireless/zd1211rw-mac80211/ \
- drivers/net/wireless/b43/ drivers/ssb/ \
+ drivers/ssb/ \
+ drivers/misc/ \
+ drivers/net/wireless/
else
export PWD := $(shell pwd)
@@ -48,7 +47,7 @@ install:
echo ;\
echo -n "Note: madwifi detected, we're going to disable it. " ;\
echo "If you would like to enable it later you can run:" ;\
- echo -e "\tsudo ./scripts/athenable madwifi" ;\
+ echo " sudo ./scripts/athenable madwifi" ;\
echo ;\
echo Running scripts/athenable ath5k...;\
./scripts/athenable ath5k ;\
@@ -68,11 +67,20 @@ install:
@# This needs testing before we add it
@#modprobe -l iwl4965
@modprobe -l zd1211rw-mac80211
+ @# All the scripts we can use
+ @mkdir -p /usr/lib/compat-wireless/
+ @install scripts/modlib.sh /usr/lib/compat-wireless/
@install scripts/madwifi-unload /usr/sbin/
@# This is to allow switching between drivers without blacklisting
@install scripts/athenable /usr/sbin/
+ @install scripts/b43enable /usr/sbin/
@install scripts/athload /usr/sbin/
+ @install scripts/b43load /usr/sbin/
@echo
+ @echo Now run: make load
+ @echo
+ @echo " sudo make load"
+ @echo
uninstall:
@# New location, matches upstream
@@ -81,7 +89,8 @@ uninstall:
@rm -rf $(KLIB)/$(KMODDIR)/drivers/ssb/
@rm -rf $(KLIB)/$(KMODDIR)/drivers/net/wireless/
@depmod -ae
- @./scripts/athenable madwifi
+ @/usr/sbin/athenable madwifi
+ @/usr/sbin/b43enable bcm43xx
@echo
@echo "Your old wireless subsystem modules were left intact:"
@echo
@@ -92,12 +101,14 @@ uninstall:
@modprobe -l ath5k
@modprobe -l ssb
@modprobe -l b43
+ @modprobe -l b43legacy
@modprobe -l iwl3945
@modprobe -l iwl4965
@modprobe -l ipw3945
@modprobe -l ath_pci
@modprobe -l ath_hal
@modprobe -l zd1211rw-mac80211
+ @modprobe -l bcm43xx
@echo
unload:
diff --git a/compat/compat.c b/compat/compat.c
index 4925b00..6d8be72 100644
--- a/compat/compat.c
+++ b/compat/compat.c
@@ -16,6 +16,7 @@
#include <linux/rtnetlink.h>
#include <linux/audit.h>
#include <linux/workqueue.h>
+#include <linux/pci.h>
#include <net/arp.h>
#include <net/compat.h>
@@ -378,5 +379,30 @@ void __dev_set_rx_mode(struct net_device *dev)
dev->set_multicast_list(dev);
}
+#ifdef PCI_DISABLE_MWI
+int pci_try_set_mwi(struct pci_dev *dev)
+{
+ return 0;
+}
+EXPORT_SYMBOL(pci_try_set_mwi);
+#else
+/**
+ * pci_try_set_mwi - enables memory-write-invalidate PCI transaction
+ * @dev: the PCI device for which MWI is enabled
+ *
+ * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
+ * Callers are not required to check the return value.
+ *
+ * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
+ */
+int pci_try_set_mwi(struct pci_dev *dev)
+{
+ int rc = pci_set_mwi(dev);
+ return rc;
+}
+EXPORT_SYMBOL(pci_try_set_mwi);
+#endif
+
+
#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)) */
diff --git a/compat/compat.diff b/compat/compat.diff
index 0cff82f..0b93241 100644
--- a/compat/compat.diff
+++ b/compat/compat.diff
@@ -179,3 +179,392 @@
#include <net/cfg80211.h>
#include "ieee80211_i.h"
#include "cfg.h"
+--- a/drivers/net/wireless/adm8211.h 2007-11-15 19:12:07.000000000 -0500
++++ b/drivers/net/wireless/adm8211.h 2007-11-15 20:01:20.000000000 -0500
+@@ -416,8 +416,13 @@
+ #define TDES1_CONTROL_RBS1 (0x00000fff)
+
+ /* SRAM offsets */
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++#define ADM8211_SRAM(x) (priv->revid < ADM8211_REV_BA ? \
++ ADM8211_SRAM_A_ ## x : ADM8211_SRAM_B_ ## x)
++#else
+ #define ADM8211_SRAM(x) (priv->pdev->revision < ADM8211_REV_BA ? \
+ ADM8211_SRAM_A_ ## x : ADM8211_SRAM_B_ ## x)
++#endif
+
+ #define ADM8211_SRAM_INDIV_KEY 0x0000
+ #define ADM8211_SRAM_A_SHARE_KEY 0x0160
+@@ -622,6 +627,9 @@
+ u8 lnags_threshold;
+ struct adm8211_eeprom *eeprom;
+ size_t eeprom_len;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ u8 revid;
++#endif
+
+ u32 nar;
+
+--- a/drivers/net/wireless/adm8211.c 2007-11-15 19:11:53.000000000 -0500
++++ b/drivers/net/wireless/adm8211.c 2007-11-15 20:03:15.000000000 -0500
+@@ -117,7 +117,11 @@
+ break;
+
+ default:
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid < ADM8211_REV_CA)
++#else
+ if (priv->pdev->revision < ADM8211_REV_CA)
++#endif
+ priv->rf_type = ADM8211_TYPE_RFMD;
+ else
+ priv->rf_type = ADM8211_TYPE_AIROHA;
+@@ -135,7 +139,11 @@
+ case ADM8211_TYPE_ADMTEK:
+ break;
+ default:
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid < ADM8211_REV_CA)
++#else
+ if (priv->pdev->revision < ADM8211_REV_CA)
++#endif
+ priv->bbp_type = ADM8211_TYPE_RFMD;
+ else
+ priv->bbp_type = ADM8211_TYPE_ADMTEK;
+@@ -175,7 +183,11 @@
+ break;
+
+ default:
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid < ADM8211_REV_CA)
++#else
+ if (priv->pdev->revision < ADM8211_REV_CA)
++#endif
+ priv->specific_bbptype = ADM8211_BBP_RFMD3000;
+ else
+ priv->specific_bbptype = ADM8211_BBP_ADM8011;
+@@ -194,11 +206,23 @@
+ break;
+
+ default:
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid == ADM8211_REV_BA)
++#else
+ if (priv->pdev->revision == ADM8211_REV_BA)
++#endif
+ priv->transceiver_type = ADM8211_RFMD2958_RF3000_CONTROL_POWER;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ else if (priv->revid == ADM8211_REV_CA)
++#else
+ else if (priv->pdev->revision == ADM8211_REV_CA)
++#endif
+ priv->transceiver_type = ADM8211_AL2210L;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ else if (priv->revid == ADM8211_REV_AB)
++#else
+ else if (priv->pdev->revision == ADM8211_REV_AB)
++#endif
+ priv->transceiver_type = ADM8211_RFMD2948;
+
+ printk(KERN_WARNING "%s (adm8211): Unknown transceiver: %d\n",
+@@ -220,7 +244,11 @@
+ struct adm8211_priv *priv = dev->priv;
+
+ ADM8211_CSR_WRITE(WEPCTL, addr | ADM8211_WEPCTL_TABLE_WR |
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ (priv->revid < ADM8211_REV_BA ?
++#else
+ (priv->pdev->revision < ADM8211_REV_BA ?
++#endif
+ 0 : ADM8211_WEPCTL_SEL_WEPTABLE ));
+ ADM8211_CSR_READ(WEPCTL);
+ msleep(1);
+@@ -238,7 +266,11 @@
+ u32 reg = ADM8211_CSR_READ(WEPCTL);
+ unsigned int i;
+
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid < ADM8211_REV_BA) {
++#else
+ if (priv->pdev->revision < ADM8211_REV_BA) {
++#endif
+ for (i = 0; i < len; i += 2) {
+ u16 val = buf[i] | (buf[i + 1] << 8);
+ adm8211_write_sram(dev, addr + i / 2, val);
+@@ -420,7 +452,11 @@
+ if (skb) {
+ struct ieee80211_rx_status rx_status = {0};
+
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid < ADM8211_REV_CA)
++#else
+ if (priv->pdev->revision < ADM8211_REV_CA)
++#endif
+ rx_status.ssi = rssi;
+ else
+ rx_status.ssi = 100 - rssi;
+@@ -702,7 +738,11 @@
+ adm8211_rf_write_syn_rfmd2958(dev, 0x0A, reg);
+ /* set TXRX TX_GAIN */
+ adm8211_rf_write_syn_rfmd2958(dev, 0x09, 0x00050 |
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ (priv->revid < ADM8211_REV_CA ? tx_power : 0));
++#else
+ (priv->pdev->revision < ADM8211_REV_CA ? tx_power : 0));
++#endif
+ } else {
+ reg = ADM8211_CSR_READ(PLCPHD);
+ reg &= 0xff00ffff;
+@@ -721,7 +761,11 @@
+ tx_power<<2);
+ adm8211_write_bbp(dev, RF3000_LOW_GAIN_CALIB, lpf_cutoff);
+ adm8211_write_bbp(dev, RF3000_HIGH_GAIN_CALIB, lnags_thresh);
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ adm8211_write_bbp(dev, 0x1c, priv->revid == ADM8211_REV_BA ?
++#else
+ adm8211_write_bbp(dev, 0x1c, priv->pdev->revision == ADM8211_REV_BA ?
++#endif
+ priv->eeprom->cr28 : 0);
+ adm8211_write_bbp(dev, 0x1d, priv->eeprom->cr29);
+
+@@ -760,7 +804,11 @@
+ priv->nar |= ADM8211_NAR_EA | ADM8211_NAR_ST | ADM8211_NAR_SR;
+
+ /* don't trust the error bits on rev 0x20 and up in adhoc */
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid >= ADM8211_REV_BA)
++#else
+ if (priv->pdev->revision >= ADM8211_REV_BA)
++#endif
+ priv->soft_rx_crc = 1;
+ break;
+ case IEEE80211_IF_TYPE_MNTR:
+@@ -861,7 +909,11 @@
+ break;
+ }
+
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ switch (priv->revid) {
++#else
+ switch (priv->pdev->revision) {
++#endif
+ case ADM8211_REV_CA:
+ if (priv->transceiver_type == ADM8211_RFMD2958 ||
+ priv->transceiver_type == ADM8211_RFMD2958_RF3000_CONTROL_POWER ||
+@@ -919,7 +971,11 @@
+ adm8211_write_bbp(dev, 0x1c, 0x00);
+ adm8211_write_bbp(dev, 0x1d, 0x80);
+ } else {
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid == ADM8211_REV_BA)
++#else
+ if (priv->pdev->revision == ADM8211_REV_BA)
++#endif
+ adm8211_write_bbp(dev, 0x1c, priv->eeprom->cr28);
+ else
+ adm8211_write_bbp(dev, 0x1c, 0x00);
+@@ -1051,7 +1107,11 @@
+ u8 rate_buf[12] = {0};
+
+ /* write supported rates */
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid != ADM8211_REV_BA) {
++#else
+ if (priv->pdev->revision != ADM8211_REV_BA) {
++#endif
+ rate_buf[0] = ARRAY_SIZE(adm8211_rates);
+ for (i = 0; i < ARRAY_SIZE(adm8211_rates); i++)
+ rate_buf[i + 1] = (adm8211_rates[i].rate / 5) | 0x80;
+@@ -1135,7 +1195,11 @@
+ * PWR0PE2 = 13 us
+ * PWR1PE2 = 1 us
+ * PWR0TXPE = 8 or 6 */
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid < ADM8211_REV_CA)
++#else
+ if (priv->pdev->revision < ADM8211_REV_CA)
++#endif
+ ADM8211_CSR_WRITE(TOFS2, 0x8815cd18);
+ else
+ ADM8211_CSR_WRITE(TOFS2, 0x8535cd16);
+@@ -1164,7 +1228,11 @@
+
+ /* SLOT=20 us, SIFS=110 cycles of 22 MHz (5 us),
+ * DIFS=50 us, EIFS=100 us */
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid < ADM8211_REV_CA)
++#else
+ if (priv->pdev->revision < ADM8211_REV_CA)
++#endif
+ ADM8211_CSR_WRITE(IFST, (20 << 23) | (110 << 15) |
+ (50 << 9) | 100);
+ else
+@@ -1223,13 +1291,21 @@
+
+ ADM8211_CSR_WRITE(PAR, tmp);
+
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid == ADM8211_REV_BA &&
++#else
+ if (priv->pdev->revision == ADM8211_REV_BA &&
++#endif
+ (priv->transceiver_type == ADM8211_RFMD2958_RF3000_CONTROL_POWER ||
+ priv->transceiver_type == ADM8211_RFMD2958)) {
+ reg = ADM8211_CSR_READ(CSR_TEST1);
+ reg |= (1 << 4) | (1 << 5);
+ ADM8211_CSR_WRITE(CSR_TEST1, reg);
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ } else if (priv->revid == ADM8211_REV_CA) {
++#else
+ } else if (priv->pdev->revision == ADM8211_REV_CA) {
++#endif
+ reg = ADM8211_CSR_READ(CSR_TEST1);
+ reg &= ~((1 << 4) | (1 << 5));
+ ADM8211_CSR_WRITE(CSR_TEST1, reg);
+@@ -1866,6 +1942,9 @@
+ pci_name(pdev));
+ goto err_iounmap;
+ }
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ pci_read_config_byte(pdev, PCI_CLASS_REVISION, &priv->revid);
++#endif
+
+ *(u32 *)perm_addr = le32_to_cpu((__force __le32)ADM8211_CSR_READ(PAR0));
+ *(u16 *)&perm_addr[4] =
+@@ -1901,7 +1980,11 @@
+ priv->mode = IEEE80211_IF_TYPE_INVALID;
+
+ /* Power-on issue. EEPROM won't read correctly without */
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ if (priv->revid >= ADM8211_REV_BA) {
++#else
+ if (pdev->revision >= ADM8211_REV_BA) {
++#endif
+ ADM8211_CSR_WRITE(FRCTL, 0);
+ ADM8211_CSR_READ(FRCTL);
+ ADM8211_CSR_WRITE(FRCTL, 1);
+@@ -1934,7 +2017,11 @@
+
+ printk(KERN_INFO "%s: hwaddr %s, Rev 0x%02x\n",
+ wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr),
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
++ priv->revid);
++#else
+ pdev->revision);
++#endif
+
+ return 0;
+
+--- a/drivers/net/wireless/Makefile 2007-11-15 20:36:34.000000000 -0500
++++ b/drivers/net/wireless/Makefile 2007-11-15 20:37:26.000000000 -0500
+@@ -2,52 +2,10 @@
+ # Makefile for the Linux Wireless network device drivers.
+ #
+
+-obj-$(CONFIG_IPW2100) += ipw2100.o
+-
+-obj-$(CONFIG_IPW2200) += ipw2200.o
+-
+-obj-$(CONFIG_STRIP) += strip.o
+-obj-$(CONFIG_ARLAN) += arlan.o
+-
+-arlan-objs := arlan-main.o arlan-proc.o
+-
+-# Obsolete cards
+-obj-$(CONFIG_WAVELAN) += wavelan.o
+-obj-$(CONFIG_PCMCIA_NETWAVE) += netwave_cs.o
+-obj-$(CONFIG_PCMCIA_WAVELAN) += wavelan_cs.o
+-
+-obj-$(CONFIG_HERMES) += orinoco.o hermes.o
+-obj-$(CONFIG_PCMCIA_HERMES) += orinoco_cs.o
+-obj-$(CONFIG_APPLE_AIRPORT) += airport.o
+-obj-$(CONFIG_PLX_HERMES) += orinoco_plx.o
+-obj-$(CONFIG_PCI_HERMES) += orinoco_pci.o
+-obj-$(CONFIG_TMD_HERMES) += orinoco_tmd.o
+-obj-$(CONFIG_NORTEL_HERMES) += orinoco_nortel.o
+-obj-$(CONFIG_PCMCIA_SPECTRUM) += spectrum_cs.o
+-
+-obj-$(CONFIG_AIRO) += airo.o
+-obj-$(CONFIG_AIRO_CS) += airo_cs.o airo.o
+-
+-obj-$(CONFIG_ATMEL) += atmel.o
+-obj-$(CONFIG_PCI_ATMEL) += atmel_pci.o
+-obj-$(CONFIG_PCMCIA_ATMEL) += atmel_cs.o
+-
+-obj-$(CONFIG_USB_ATMEL) += at76_usb.o
+-
+-obj-$(CONFIG_PRISM54) += prism54/
+-
+-obj-$(CONFIG_HOSTAP) += hostap/
+-obj-$(CONFIG_BCM43XX) += bcm43xx/
+ obj-$(CONFIG_B43) += b43/
+ obj-$(CONFIG_B43LEGACY) += b43legacy/
+-obj-$(CONFIG_ZD1211RW) += zd1211rw/
+ obj-$(CONFIG_ZD1211RW_MAC80211) += zd1211rw-mac80211/
+
+-# 16-bit wireless PCMCIA client drivers
+-obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o
+-obj-$(CONFIG_PCMCIA_WL3501) += wl3501_cs.o
+-
+-obj-$(CONFIG_USB_ZD1201) += zd1201.o
+ obj-$(CONFIG_LIBERTAS) += libertas/
+
+ rtl8180-objs := rtl8180_dev.o rtl8180_rtl8225.o
+--- a/drivers/net/wireless/libertas/dev.h 2007-11-15 20:19:33.000000000 -0500
++++ b/drivers/net/wireless/libertas/dev.h 2007-11-15 20:27:51.000000000 -0500
+@@ -11,6 +11,7 @@
+ #include <linux/ethtool.h>
+ #include <linux/debugfs.h>
+ #include <net/ieee80211.h>
++#include <net/compat.h>
+
+ #include "defs.h"
+ #include "scan.h"
+--- a/drivers/net/wireless/libertas/ethtool.c 2007-11-15 20:41:59.000000000 -0500
++++ b/drivers/net/wireless/libertas/ethtool.c 2007-11-15 20:44:28.000000000 -0500
+@@ -143,6 +143,7 @@
+ lbs_deb_enter(LBS_DEB_ETHTOOL);
+ }
+
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
+ static int libertas_ethtool_get_sset_count(struct net_device * dev, int sset)
+ {
+ switch (sset) {
+@@ -152,6 +153,7 @@
+ return -EOPNOTSUPP;
+ }
+ }
++#endif
+
+ static void libertas_ethtool_get_strings (struct net_device * dev,
+ u32 stringset,
+@@ -177,7 +179,9 @@
+ .get_drvinfo = libertas_ethtool_get_drvinfo,
+ .get_eeprom = libertas_ethtool_get_eeprom,
+ .get_eeprom_len = libertas_ethtool_get_eeprom_len,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
+ .get_sset_count = libertas_ethtool_get_sset_count,
++#endif
+ .get_ethtool_stats = libertas_ethtool_get_stats,
+ .get_strings = libertas_ethtool_get_strings,
+ };
+--- a/drivers/misc/Makefile 2007-11-15 22:15:29.000000000 -0500
++++ b/drivers/misc/Makefile 2007-11-15 22:15:45.000000000 -0500
+@@ -3,17 +3,4 @@
+ #
+ obj- := misc.o # Dummy rule to force built-in.o to be made
+
+-obj-$(CONFIG_IBM_ASM) += ibmasm/
+-obj-$(CONFIG_HDPU_FEATURES) += hdpuftrs/
+-obj-$(CONFIG_MSI_LAPTOP) += msi-laptop.o
+-obj-$(CONFIG_ASUS_LAPTOP) += asus-laptop.o
+-obj-$(CONFIG_ATMEL_SSC) += atmel-ssc.o
+-obj-$(CONFIG_LKDTM) += lkdtm.o
+-obj-$(CONFIG_TIFM_CORE) += tifm_core.o
+-obj-$(CONFIG_TIFM_7XX1) += tifm_7xx1.o
+-obj-$(CONFIG_PHANTOM) += phantom.o
+-obj-$(CONFIG_SGI_IOC4) += ioc4.o
+-obj-$(CONFIG_SONY_LAPTOP) += sony-laptop.o
+-obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o
+-obj-$(CONFIG_FUJITSU_LAPTOP) += fujitsu-laptop.o
+ obj-$(CONFIG_EEPROM_93CX6) += eeprom_93cx6.o
diff --git a/compat/compat.h b/compat/compat.h
index 6ae32ef..f61c16f 100644
--- a/compat/compat.h
+++ b/compat/compat.h
@@ -19,22 +19,27 @@
#define CONFIG_IWL3945 1
#define CONFIG_IWL4965 1
#define CONFIG_ZD1211RW_MAC80211 1
-/*
+#if 1
#define CONFIG_B43
-#define CONFIG_B43_RFKILL 1
-#define CONFIG_B43_LEDS 1
+//#define CONFIG_B43_RFKILL 1
+//#define CONFIG_B43_LEDS 1
#define CONFIG_B43_PCMCIA 1
-#define CONFIG_B43_DEBUG 1
+//#define CONFIG_B43_DEBUG 1
#define CONFIG_B43_DMA 1
#define CONFIG_B43_PIO 1
+
#define CONFIG_SSB 1
#define CONFIG_SSB_PCIHOST 1
#define CONFIG_SSB_PCMCIAHOST 1
-#define CONFIG_SSB_DRIVER_MIPS 1
-#define CONFIG_SSB_DRIVER_EXTIF 1
+#undef CONFIG_SSB_DRIVER_MIPS
+//#define CONFIG_SSB_DRIVER_EXTIF 1
#define CONFIG_SSB_DRIVER_PCICORE 1
#define CONFIG_SSB_PCIHOST 1
-*/
+/* For mips */
+#undef CONFIG_SSB_PCICORE_HOSTMODE
+#endif
+
+#define CONFIG_RT2X00_LIB_FIRMWARE 1
/* Compat work for 2.6.22 and 2.6.23 */
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
@@ -140,6 +145,23 @@ struct genl_multicast_group
u32 id;
};
+/* Added as of 2.6.23 */
+int pci_try_set_mwi(struct pci_dev *dev);
+
+/* Added as of 2.6.23 */
+#ifdef CONFIG_PM_SLEEP
+/*
+ * Tell the freezer that the current task should be frozen by it
+ */
+static inline void set_freezable(void)
+{
+ current->flags &= ~PF_NOFREEZE;
+}
+
+#else
+static inline void set_freezable(void) {}
+#endif
+
#endif
#endif
diff --git a/config.mk b/config.mk
index 4fc875e..26f4187 100644
--- a/config.mk
+++ b/config.mk
@@ -7,6 +7,11 @@
# build time.
export
+# Intel's ipws, needs the old ieee80211, eh, not yet. This will
+# requires some work.
+CONFIG_IPW2100=n
+CONFIG_IPW2200=n
+
# Wireless subsystem stuff
CONFIG_MAC80211=m
CONFIG_MAC80211_RCSIMPLE=y
@@ -17,23 +22,76 @@ CONFIG_NL80211=n
# Drivers
CONFIG_ATH5K=m
CONFIG_IWL3945=m
-# This guy just needs testing
-CONFIG_IWL4965=n
+CONFIG_IWL4965=m
CONFIG_ZD1211RW_MAC80211=m
+# CONFIG_ZD1211RW_MAC80211_DEBUG is not set
# Not yet, set to m when ready
-CONFIG_B43=n
-CONFIG_B43_RFKILL=n
-CONFIG_B43_LEDS=n
-CONFIG_B43_PCMCIA=n
-CONFIG_B43_DEBUG=n
+CONFIG_B43=m
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
+#CONFIG_B43_RFKILL=n
+#CONFIG_B43_LEDS=n
+# B43 uses PCMCIA only for Compact Flash. The Cardbus cards uses PCI
+# Example, bcm4318:
+# http://www.multicap.biz/wireless-lan/indoor-wlan-hardware/sdc-cf10g-80211g-compact-flash-module
+CONFIG_B43_PCMCIA=y
+# CONFIG_B43_DEBUG is not set
CONFIG_B43_DMA=y
CONFIG_B43_PIO=y
+CONFIG_B43_DMA_AND_PIO_MODE=y
+
+CONFIG_B43LEGACY=n
+CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+
+# Libertas
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_CS=m
+
+# This is required for some cards
+CONFIG_EEPROM_93CX6=m
+
+# Realtek
+CONFIG_RTL8180=m
+CONFIG_RTL8187=m
+CONFIG_ADM8211=m
+
+# rt2x00
+# Not enabled yet, needs some more compat work
+CONFIG_RT2X00=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_PCI=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2400PCI=m
+# CONFIG_RT2400PCI_RFKILL is not set
+CONFIG_RT2500PCI=m
+# CONFIG_RT2500PCI_RFKILL is not set
+CONFIG_RT61PCI=m
+# CONFIG_RT61PCI_RFKILL is not set
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+# CONFIG_RT2X00_LIB_DEBUGFS is not set
+# CONFIG_RT2X00_DEBUG is not se
+
+# p54
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_P54_PCI=m
-CONFIG_SSB=n
-CONFIG_SSB_PCIHOST=n
-CONFIG_SSB_PCMCIAHOST=n
+# Sonics Silicon Backplane
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_PCMCIAHOST=y
+# CONFIG_SSB_DEBUG is not set
CONFIG_SSB_DRIVER_MIPS=n
-CONFIG_SSB_DRIVER_EXTIF=n
-CONFIG_SSB_DRIVER_PCICORE=n
-CONFIG_SSB_PCIHOST=n
+# CONFIG_SSB_DRIVER_EXTIF=y
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
diff --git a/scripts/admin-update.sh b/scripts/admin-update.sh
index 6beca23..ec6967c 100755
--- a/scripts/admin-update.sh
+++ b/scripts/admin-update.sh
@@ -9,7 +9,8 @@
# We assume you have it on your ~/devel/wireless-2.6/ directory. If you do,
# just run this script from the compat-wireless-2.6 directory.
-INCLUDE_LINUX="ieee80211.h nl80211.h wireless.h pci_ids.h bitops.h"
+INCLUDE_LINUX="ieee80211.h nl80211.h wireless.h"
+INCLUDE_LINUX="$INCLUDE_LINUX pci_ids.h bitops.h eeprom_93cx6.h"
INCLUDE_NET="cfg80211.h ieee80211_radiotap.h iw_handler.h"
INCLUDE_NET="$INCLUDE_NET mac80211.h wext.h wireless.h"
@@ -17,10 +18,26 @@ INCLUDE_NET="$INCLUDE_NET mac80211.h wext.h wireless.h"
NET_DIRS="wireless mac80211"
GIT_TREE="/home/$USER/devel/wireless-2.6"
+# Drivers that have their own directory
DRIVERS="drivers/net/wireless/ath5k"
-DRIVERS="$DRIVERS drivers/ssb drivers/net/wireless/b43"
+DRIVERS="$DRIVERS drivers/ssb"
+DRIVERS="$DRIVERS drivers/net/wireless/b43"
+DRIVERS="$DRIVERS drivers/net/wireless/b43legacy"
DRIVERS="$DRIVERS drivers/net/wireless/iwlwifi"
+DRIVERS="$DRIVERS drivers/net/wireless/rt2x00"
DRIVERS="$DRIVERS drivers/net/wireless/zd1211rw-mac80211"
+DRIVERS="$DRIVERS drivers/net/wireless/libertas"
+
+# Drivers that belong the the wireless directory
+DRIVER_FILES="rtl818x.h"
+DRIVER_FILES="$DRIVER_FILES rtl8180.h rtl8180_rtl8225.h"
+DRIVER_FILES="$DRIVER_FILES rtl8180_dev.c rtl8180_rtl8225.c"
+DRIVER_FILES="$DRIVER_FILES rtl8187.h rtl8187_rtl8225.h"
+DRIVER_FILES="$DRIVER_FILES rtl8187_dev.c rtl8187_rtl8225.c"
+DRIVER_FILES="$DRIVER_FILES adm8211.c adm8211.h"
+DRIVER_FILES="$DRIVER_FILES p54.h p54common.h p54common.c net2280.h"
+DRIVER_FILES="$DRIVER_FILES p54pci.h p54pci.c"
+DRIVER_FILES="$DRIVER_FILES p54usb.h p54usb.c"
mkdir -p include/linux/ include/net/ \
net/mac80211/ net/wireless/ \
@@ -51,13 +68,26 @@ for i in $NET_DIRS; do
rm -f net/$i/*.mod.c
done
-# drivers
+# Drivers in their own directory
for i in $DRIVERS; do
mkdir -p $i
cp $GIT_TREE/$i/*.[ch] $i/
cp $GIT_TREE/$i/Makefile $i/
- rm -f net/$i/*.mod.c
+ rm -f $i/*.mod.c
+done
+
+# Misc
+mkdir -p drivers/misc/
+cp $GIT_TREE/drivers/misc/eeprom_93cx6.c drivers/misc/
+cp $GIT_TREE/drivers/misc/Makefile drivers/misc/
+
+DIR="drivers/net/wireless"
+# Drivers part of the wireless directory
+for i in $DRIVER_FILES; do
+ cp $GIT_TREE/$DIR/$i $DIR/
done
+# Top level wireless driver Makefile
+cp $GIT_TREE/$DIR/Makefile $DIR
# Compat stuff
cp compat/compat.c net/mac80211/
diff --git a/scripts/athenable b/scripts/athenable
index 8d033b2..176e320 100755
--- a/scripts/athenable
+++ b/scripts/athenable
@@ -5,6 +5,8 @@
# Makes sure either ath5k or MadWifi are ready to be used. This allows
# us to choose any driver without blacklisting each other.
+. /usr/lib/compat-wireless/modlib.sh
+
if [[ $UID -ne 0 ]]; then
echo "Run with root privileges"
exit
@@ -14,85 +16,8 @@ ATH5K="ath5k"
MADWIFI="ath_pci"
# Appended to module file at the end when we want to ignore one
IGNORE_SUFFIX=".ignore"
-VER=`uname -r`
USAGE="Usage: $0 [ ath5k | madwifi ]"
-# If 'module' is found, its renamed to 'module.ignore'
-function module_disable {
- # Basic check to see if this is a module available for loading
- MODULE_CHECK=`modprobe -l $1`
- if [ -z $MODULE_CHECK ]; then
- echo "Module $1 not detected -- this is fine"
- return
- fi
- MODULE=$1
- MODULE_KO=${MODULE}.ko
- # In case there are more than one of these modules. This can
- # happen, for example if your distribution provides one and you have
- # compiled one in yourself later.
- MODULE_COUNT=`find /lib/modules/$VER/ -name $MODULE_KO | wc -l`
- ALL_MODULES=`find /lib/modules/$VER/ -name $MODULE_KO`
- COUNT=1
- CHECK=`modprobe -l $MODULE`
- while [ ! -z $CHECK ]; do
- if [[ $MODULE_COUNT -gt 1 ]]; then
- if [[ $COUNT -eq 1 ]]; then
- echo -en "$MODULE_COUNT $MODULE modules found "
- echo -e "we'll disable all of them"
- fi
- echo -en "Disabling $MODULE ($COUNT) ..."
- else
- echo -en "Disabling $MODULE ..."
- fi
- mv -f $CHECK ${CHECK}${IGNORE_SUFFIX}
- depmod -ae
- CHECK_AGAIN=`modprobe -l $MODULE`
- if [ "$CHECK" != "$CHECK_AGAIN" ]; then
- echo -e "\t[OK]\tModule disabled:"
- echo "$CHECK"
- else
- echo -e "[ERROR]\tModule is still being detected:"
- echo "$CHECK"
- fi
- let COUNT=$COUNT+1
- CHECK=$CHECK_AGAIN
- done
-}
-
-# If 'module.ignore' is found, rename it back to 'module'
-function module_enable {
- MODULE=$1
- MODULE_KO=${MODULE}.ko
- IGNORED_MODULE=${MODULE_KO}${IGNORE_SUFFIX}
- # In case there are more than one of these modules. This can
- # happen, for example if your distribution provides one and you have
- # compiled one in yourself later.
- ALL_MODULES=`find /lib/modules/$VER/ -name $IGNORED_MODULE`
- for i in $ALL_MODULES; do
- echo -en "Enabling $MODULE ..."
- DIR=`dirname $i`
- mv $i $DIR/$MODULE_KO
- depmod -ae
- CHECK=`modprobe -l $MODULE`
- if [ "$DIR/$MODULE_KO" != $CHECK ]; then
- if [ -z $CHECK ]; then
- echo -e "\t[ERROR]\tModule could not be enabled"
- else
- echo -en "\t[OK]\tModule renamed but another "
- echo "module file is being preferred"
- echo -e "Renamed module:\t\t$DIR/$MODULE_KO"
- echo -e "Preferred module:\t$CHECK"
- fi
- else
- echo -e "\t[OK]\tModule enabled: "
- echo "$DIR/$MODULE_KO"
- fi
- # Lets only do this for the first module found
- break
- done
-}
-
-
# Default behavior: disables any MadWifi driver present and makes sure
# ath5k is enabled
if [ $# -eq 0 ]; then
@@ -100,8 +25,8 @@ if [ $# -eq 0 ]; then
module_enable $ATH5K
exit
elif [ $# -ne 1 ]; then
- echo "$USAGE"
- exit
+ echo "$USAGE"
+ exit
fi
MODULE=$1
diff --git a/scripts/athload b/scripts/athload
index 4713dea..84b5103 100755
--- a/scripts/athload
+++ b/scripts/athload
@@ -3,6 +3,8 @@
#
# Loads ath5k or madwifi
+. /usr/lib/compat-wireless/modlib.sh
+
if [[ $UID -ne 0 ]]; then
echo "Run with root privileges"
exit
@@ -13,7 +15,7 @@ USAGE="Usage: $0 [ ath5k | madwifi ]"
# Default behavior: unload MadWifi and load ath5k
if [ $# -eq 0 ]; then
- ./scripts/athenable ath5k
+ athenable ath5k
exit
elif [ $# -ne 1 ]; then
echo "$USAGE"
@@ -22,8 +24,8 @@ fi
MODULE=$1
if [ "$MODULE" == "ath5k" ]; then
- ./scripts/madwifi-unload
- ./scripts/athenable ath5k
+ madwifi-unload
+ athenable ath5k
modprobe ath5k
CHECK=`modprobe -l ath5k`
if [ ! -z $CHECK ]; then
@@ -35,10 +37,10 @@ elif [ "$MODULE" == "madwifi" ]; then
echo "ath5k currently loaded, going to try to unload the module..."
modprobe -r --ignore-remove ath5k
fi
- ./scripts/athenable madwifi
+ athenable madwifi
# MadWifi may be loaded, but it doesn't mean devices
# currently available were picked up
- ./scripts/madwifi-unload 2>&1 > /dev/null
+ madwifi-unload 2>&1 > /dev/null
modprobe ath_pci
CHECK=`modprobe -l ath_pci`
if [ ! -z $CHECK ]; then
diff --git a/scripts/b43enable b/scripts/b43enable
new file mode 100755
index 0000000..5ecf65a
--- /dev/null
+++ b/scripts/b43enable
@@ -0,0 +1,50 @@
+#!/bin/bash
+#
+# Copyright 2007 Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
+#
+# Makes sure either b43, b43legacy (new mac80211 drivers) or bcm43xx
+# is enabled to be used. This allows us to choose any driver without
+# blacklisting each other.
+
+. /usr/lib/compat-wireless/modlib.sh
+
+if [[ $UID -ne 0 ]]; then
+ echo "Run with root privileges"
+ exit
+fi
+
+B43S="b43 b43legacy"
+B43_OLD="bcm43xx"
+
+# Appended to module file at the end when we want to ignore one
+USAGE="Usage: $0 [ b43 | bcm43xx ]"
+
+function enable_b43 {
+ module_disable $B43_OLD
+ for i in $B43S; do
+ module_enable $i
+ done
+}
+
+# Default behavior: disables the old bcm43xx driver and enables b43
+# and b43legacy
+if [ $# -eq 0 ]; then
+ enable_b43
+ exit
+elif [ $# -ne 1 ]; then
+ echo "$USAGE"
+ exit
+fi
+
+MODULE=$1
+if [ "$MODULE" == "bcm43xx" ]; then
+ for i in $B43S; do
+ module_disable $i
+ done
+ module_enable $B43_OLD
+elif [ "$MODULE" == "b43" ]; then
+ enable_b43
+else
+ echo "$USAGE"
+ exit
+fi
diff --git a/scripts/b43load b/scripts/b43load
new file mode 100755
index 0000000..0b9fb83
--- /dev/null
+++ b/scripts/b43load
@@ -0,0 +1,62 @@
+#!/bin/bash
+# Copyright 2007 Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
+#
+# Loads new broadcom drivers (b43 and b43legacy) or the old ones (bcm43xx)
+
+. /usr/lib/compat-wireless/modlib.sh
+
+if [[ $UID -ne 0 ]]; then
+ echo "Run with root privileges"
+ exit
+fi
+
+
+USAGE="Usage: $0 [ b43 | bcm43xx ]"
+
+# Default behavior: unload bcm43xx and load b43 and b43legacy
+if [ $# -eq 0 ]; then
+ b43enable b43
+ exit
+elif [ $# -ne 1 ]; then
+ echo "$USAGE"
+ exit
+fi
+
+MODULE=$1
+if [ "$MODULE" == "b43" ]; then
+ modprobe -r --ignore-remove bcm43xx
+ # Enables both b43 and b43legacy
+ b43enable b43
+ modprobe b43
+ modprobe b43legacy
+ CHECK=`modprobe -l b43`
+ if [ ! -z $CHECK ]; then
+ echo "b43 loaded successfully"
+ fi
+ CHECK=`modprobe -l b43legacy`
+ if [ ! -z $CHECK ]; then
+ echo "b43legacy loaded successfully"
+ fi
+elif [ "$MODULE" == "bcm43xx" ]; then
+ CHECK=`modprobe -l b43`
+ if [ ! -z $CHECK ]; then
+ echo "b43 currently loaded, going to try to unload the module..."
+ modprobe -r --ignore-remove b43
+ fi
+ CHECK=`modprobe -l b43legacy`
+ if [ ! -z $CHECK ]; then
+ echo "b43legacy currently loaded, going to try to unload the module..."
+ modprobe -r --ignore-remove b43legacy
+ fi
+ b43enable bcm43xx
+ # bcm43xx may be loaded already lets remove them first
+ modprobe -r --ignore-remov bcm43xx 2>&1 > /dev/null
+ modprobe bcm43xx
+ CHECK=`modprobe -l bcm43xx`
+ if [ ! -z $CHECK ]; then
+ echo "bcm43xx loaded successfully!"
+ fi
+else
+ echo "$USAGE"
+ exit
+fi
diff --git a/scripts/load.sh b/scripts/load.sh
index 8e2c5dd..a115fa5 100755
--- a/scripts/load.sh
+++ b/scripts/load.sh
@@ -1,8 +1,17 @@
#!/bin/bash
-MODULES="iwl3945 zd1211rw-mac80211"
+MODULES="p54pci p54usb"
+MODULES="$MODULES zd1211rw-mac80211 rtl8180 rtl8187"
+MODULES="$MODULES p54pci p54usb iwl3945 zd1211rw-mac80211 rtl8180 rtl8187"
+MODULES="$MODULES iwl3945 iwl4965"
+MODULES="$MODULES rtl8180 rtl8187"
+MODULES="$MODULES rtl8180 rtl8187"
+MODULES="$MODULES rt2400pci rt2500pci rt61pci"
+MODULES="$MODULES rt2500usb rt73usb"
for i in $MODULES; do
echo Loading $i...
modprobe $i
done
# For ath5k we must be sure to unload MadWifi first
athload ath5k
+# For b43 we must make sure to unload bcm43xx first
+b43load b43
diff --git a/scripts/modlib.sh b/scripts/modlib.sh
new file mode 100755
index 0000000..4f072b3
--- /dev/null
+++ b/scripts/modlib.sh
@@ -0,0 +1,88 @@
+#!/bin/bash
+#
+# Copyright 2007 Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
+#
+# You can use these to enable/disable modules without blacklisting them
+
+# Make sure our imporant paths are included
+PATH=$PATH:/usr/sbin:/sbin
+
+# Appended to module file at the end when we want to ignore one
+IGNORE_SUFFIX=".ignore"
+VER=`uname -r`
+
+# If 'module' is found, its renamed to 'module.ignore'
+function module_disable {
+ # Basic check to see if this is a module available for loading
+ MODULE_CHECK=`modprobe -l $1`
+ if [ -z $MODULE_CHECK ]; then
+ echo "Module $1 not detected -- this is fine"
+ return
+ fi
+ MODULE=$1
+ MODULE_KO=${MODULE}.ko
+ # In case there are more than one of these modules. This can
+ # happen, for example if your distribution provides one and you have
+ # compiled one in yourself later.
+ MODULE_COUNT=`find /lib/modules/$VER/ -name $MODULE_KO | wc -l`
+ ALL_MODULES=`find /lib/modules/$VER/ -name $MODULE_KO`
+ COUNT=1
+ CHECK=`modprobe -l $MODULE`
+ while [ ! -z $CHECK ]; do
+ if [[ $MODULE_COUNT -gt 1 ]]; then
+ if [[ $COUNT -eq 1 ]]; then
+ echo -en "$MODULE_COUNT $MODULE modules found "
+ echo -e "we'll disable all of them"
+ fi
+ echo -en "Disabling $MODULE ($COUNT) ..."
+ else
+ echo -en "Disabling $MODULE ..."
+ fi
+ mv -f $CHECK ${CHECK}${IGNORE_SUFFIX}
+ depmod -ae
+ CHECK_AGAIN=`modprobe -l $MODULE`
+ if [ "$CHECK" != "$CHECK_AGAIN" ]; then
+ echo -e "\t[OK]\tModule disabled:"
+ echo "$CHECK"
+ else
+ echo -e "[ERROR]\tModule is still being detected:"
+ echo "$CHECK"
+ fi
+ let COUNT=$COUNT+1
+ CHECK=$CHECK_AGAIN
+ done
+}
+
+# If 'module.ignore' is found, rename it back to 'module'
+function module_enable {
+ MODULE=$1
+ MODULE_KO=${MODULE}.ko
+ IGNORED_MODULE=${MODULE_KO}${IGNORE_SUFFIX}
+ # In case there are more than one of these modules. This can
+ # happen, for example if your distribution provides one and you have
+ # compiled one in yourself later.
+ ALL_MODULES=`find /lib/modules/$VER/ -name $IGNORED_MODULE`
+ for i in $ALL_MODULES; do
+ echo -en "Enabling $MODULE ..."
+ DIR=`dirname $i`
+ mv $i $DIR/$MODULE_KO
+ depmod -ae
+ CHECK=`modprobe -l $MODULE`
+ if [ "$DIR/$MODULE_KO" != $CHECK ]; then
+ if [ -z $CHECK ]; then
+ echo -e "\t[ERROR]\tModule could not be enabled"
+ else
+ echo -en "\t[OK]\tModule renamed but another "
+ echo "module file is being preferred"
+ echo -e "Renamed module:\t\t$DIR/$MODULE_KO"
+ echo -e "Preferred module:\t$CHECK"
+ fi
+ else
+ echo -e "\t[OK]\tModule enabled: "
+ echo "$DIR/$MODULE_KO"
+ fi
+ # Lets only do this for the first module found
+ break
+ done
+}
+
diff --git a/scripts/unload.sh b/scripts/unload.sh
index e7e743c..2e979e7 100755
--- a/scripts/unload.sh
+++ b/scripts/unload.sh
@@ -1,7 +1,20 @@
#!/bin/bash
+# The old stack drivers and the mac80211 rc80211_simple modules
+# which is no longer on recent kernels (its internal)
OLD_MODULES="zd1211rw rc80211_simple"
-MODULES="$OLD_MODULES ath5k iwl3945 zd1211rw-mac80211"
+MODULES="$OLD_MODULES"
+MODULES="$MODULES iwl3945 iwl4965"
+MODULES="$MODULES ath5k zd1211rw-mac80211"
+MODULES="$MODULES p54pci p54usb p54common"
+MODULES="$MODULES libertas libertas_cs usb8xxx"
+MODULES="$MODULES rt2400pci rt2500pci rt61pci"
+MODULES="$MODULES rt2500usb rt73usb"
+MODULES="$MODULES rt2x00usb rt2x00lib"
+MODULES="$MODULES rtl8180 rtl8187"
+# eeprom_93cx6 is used by rt2x00 (rt61pci, rt2500pci, rt2400pci)
+# and Realtek drivers ( rtl8187, rtl8180)
+MODULES="$MODULES eeprom_93cx6"
MODULES="$MODULES mac80211 cfg80211"
MADWIFI_MODULES="ath_pci ath_rate_sample wlan_scan_sta wlan ath_hal"
IPW3945D="/sbin/ipw3945d-`uname -r`"