This adds orinoco driver and fixes some build and load problems of
recent comapt-wireless.
This series was compile tested with kernel 2.6.27 to 2.6.34
For kernel older than 2.6.27 qdisc_all_tx_empty must be backported.
Hauke Mehrtens (5):
compat-wireless: rename {free,alloc}_ieee80211 to {free,alloc}_libipw
compat-wireless: add orinoco to compat-wireless
compat-wireless: fix building of iwmc3200wifi
compat-wireless: remove some uneeded header files
compat-wireless: update config symbols
config.mk | 29 ++++++-
patches/01-netdev.patch | 73 +++++++++++++----
patches/02-ksize.patch | 25 ++++++
patches/13-trace.patch | 19 +++++
patches/23-ipw.patch | 161 +++++++++++++++++++++++++++++++++++++
patches/24-pcmcia.patch | 14 +++
patches/99-change-makefiles.patch | 8 +-
scripts/admin-update.sh | 5 +-
8 files changed, 306 insertions(+), 28 deletions(-)
create mode 100644 patches/23-ipw.patch
create mode 100644 patches/24-pcmcia.patch
Hauke Mehrtens (2):
compat: update bitops.h
compat: backport PCMCIA_DEVICE_PROD_ID3
include/linux/bitops.h | 33 ++++++++++++++++++++++++++++++---
include/linux/compat-2.6.34.h | 7 +++++++
2 files changed, 37 insertions(+), 3 deletions(-)
orinoco now depends on cfg80211. If compat-wireless was installed it
will install its own version of cfg80211 and orinoco will not work any
more because it wants to use the version shipped with the kernel.
Signed-off-by: Hauke Mehrtens <[email protected]>
---
config.mk | 14 +++++++
patches/01-netdev.patch | 73 ++++++++++++++++++++++++++++---------
patches/02-ksize.patch | 25 +++++++++++++
patches/24-pcmcia.patch | 14 +++++++
patches/99-change-makefiles.patch | 8 ++---
scripts/admin-update.sh | 1 +
6 files changed, 112 insertions(+), 23 deletions(-)
create mode 100644 patches/24-pcmcia.patch
diff --git a/config.mk b/config.mk
index f4f019f..431940e 100644
--- a/config.mk
+++ b/config.mk
@@ -303,6 +303,20 @@ CONFIG_ATL2=m
CONFIG_ATL1E=m
CONFIG_ATL1C=m
+CONFIG_HERMES=m
+CONFIG_HERMES_CACHE_FW_ON_INIT=y
+ifneq ($(CONFIG_PPC_PMAC),)
+CONFIG_APPLE_AIRPORT=m
+endif
+CONFIG_PLX_HERMES=m
+CONFIG_TMD_HERMES=m
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+ifneq ($(CONFIG_PCMCIA),)
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+endif
+
endif
## end of PCI
diff --git a/patches/01-netdev.patch b/patches/01-netdev.patch
index 5ba7e41..f976013 100644
--- a/patches/01-netdev.patch
+++ b/patches/01-netdev.patch
@@ -72,7 +72,7 @@ without creating a headache on maintenance of the pathes.
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
-@@ -2703,6 +2703,7 @@ static int bcm4320b_early_init(struct us
+@@ -3047,6 +3047,7 @@ static int bcm4320b_early_init(struct us
return 0;
}
@@ -80,7 +80,7 @@ without creating a headache on maintenance of the pathes.
/* same as rndis_netdev_ops but with local multicast handler */
static const struct net_device_ops rndis_wlan_netdev_ops = {
.ndo_open = usbnet_open,
-@@ -2713,6 +2714,7 @@ static const struct net_device_ops rndis
+@@ -3057,6 +3058,7 @@ static const struct net_device_ops rndis
.ndo_validate_addr = eth_validate_addr,
.ndo_set_multicast_list = rndis_wlan_set_multicast_list,
};
@@ -88,7 +88,7 @@ without creating a headache on maintenance of the pathes.
static int rndis_wlan_bind(struct usbnet *usbdev, struct usb_interface *intf)
{
-@@ -2760,7 +2762,11 @@ static int rndis_wlan_bind(struct usbnet
+@@ -3104,7 +3106,11 @@ static int rndis_wlan_bind(struct usbnet
* rndis_host wants to avoid all OID as much as possible
* so do promisc/multicast handling in rndis_wlan.
*/
@@ -181,7 +181,7 @@ without creating a headache on maintenance of the pathes.
sdata->u.mntr_flags = MONITOR_FLAG_CONTROL |
MONITOR_FLAG_OTHER_BSS;
break;
-@@ -831,6 +858,8 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -943,6 +970,8 @@ int ieee80211_if_add(struct ieee80211_lo
return -ENOMEM;
dev_net_set(ndev, wiphy_net(local->hw.wiphy));
@@ -190,7 +190,7 @@ without creating a headache on maintenance of the pathes.
ndev->needed_headroom = local->tx_headroom +
4*6 /* four MAC addresses */
+ 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */
-@@ -839,6 +868,7 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -951,6 +980,7 @@ int ieee80211_if_add(struct ieee80211_lo
- ETH_HLEN /* ethernet hard_header_len */
+ IEEE80211_ENCRYPT_HEADROOM;
ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM;
@@ -198,7 +198,7 @@ without creating a headache on maintenance of the pathes.
ret = dev_alloc_name(ndev, ndev->name);
if (ret < 0)
-@@ -884,6 +914,10 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -996,6 +1026,10 @@ int ieee80211_if_add(struct ieee80211_lo
if (ret)
goto fail;
@@ -359,7 +359,7 @@ without creating a headache on maintenance of the pathes.
priv->wireless_data.libipw = priv->ieee;
--- a/drivers/net/wireless/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/ipw2x00/ipw2200.c
-@@ -11635,6 +11635,7 @@ static netdev_tx_t ipw_prom_hard_start_x
+@@ -11650,6 +11650,7 @@ static netdev_tx_t ipw_prom_hard_start_x
return NETDEV_TX_OK;
}
@@ -367,7 +367,7 @@ without creating a headache on maintenance of the pathes.
static const struct net_device_ops ipw_prom_netdev_ops = {
.ndo_open = ipw_prom_open,
.ndo_stop = ipw_prom_stop,
-@@ -11643,6 +11644,7 @@ static const struct net_device_ops ipw_p
+@@ -11658,6 +11659,7 @@ static const struct net_device_ops ipw_p
.ndo_set_mac_address = eth_mac_addr,
.ndo_validate_addr = eth_validate_addr,
};
@@ -375,7 +375,7 @@ without creating a headache on maintenance of the pathes.
static int ipw_prom_alloc(struct ipw_priv *priv)
{
-@@ -11663,7 +11665,13 @@ static int ipw_prom_alloc(struct ipw_pri
+@@ -11678,7 +11680,13 @@ static int ipw_prom_alloc(struct ipw_pri
memcpy(priv->prom_net_dev->dev_addr, priv->mac_addr, ETH_ALEN);
priv->prom_net_dev->type = ARPHRD_IEEE80211_RADIOTAP;
@@ -389,7 +389,7 @@ without creating a headache on maintenance of the pathes.
priv->prom_priv->ieee->iw_mode = IW_MODE_MONITOR;
SET_NETDEV_DEV(priv->prom_net_dev, &priv->pci_dev->dev);
-@@ -11691,6 +11699,7 @@ static void ipw_prom_free(struct ipw_pri
+@@ -11706,6 +11714,7 @@ static void ipw_prom_free(struct ipw_pri
#endif
@@ -397,7 +397,7 @@ without creating a headache on maintenance of the pathes.
static const struct net_device_ops ipw_netdev_ops = {
.ndo_init = ipw_net_init,
.ndo_open = ipw_net_open,
-@@ -11701,6 +11710,7 @@ static const struct net_device_ops ipw_n
+@@ -11716,6 +11725,7 @@ static const struct net_device_ops ipw_n
.ndo_change_mtu = libipw_change_mtu,
.ndo_validate_addr = eth_validate_addr,
};
@@ -405,7 +405,7 @@ without creating a headache on maintenance of the pathes.
static int __devinit ipw_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
-@@ -11802,7 +11812,15 @@ static int __devinit ipw_pci_probe(struc
+@@ -11817,7 +11827,15 @@ static int __devinit ipw_pci_probe(struc
priv->ieee->perfect_rssi = -20;
priv->ieee->worst_rssi = -85;
@@ -423,7 +423,7 @@ without creating a headache on maintenance of the pathes.
net_dev->wireless_handlers = &ipw_wx_handler_def;
--- a/drivers/net/wireless/ipw2x00/libipw_module.c
+++ b/drivers/net/wireless/ipw2x00/libipw_module.c
-@@ -157,6 +157,10 @@ struct net_device *alloc_ieee80211(int s
+@@ -154,6 +154,10 @@ struct net_device *alloc_ieee80211(int s
goto failed;
}
ieee = netdev_priv(dev);
@@ -436,7 +436,7 @@ without creating a headache on maintenance of the pathes.
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
-@@ -881,6 +881,7 @@ static void lbs_free_adapter(struct lbs_
+@@ -885,6 +885,7 @@ static void lbs_free_adapter(struct lbs_
lbs_deb_leave(LBS_DEB_MAIN);
}
@@ -444,7 +444,7 @@ without creating a headache on maintenance of the pathes.
static const struct net_device_ops lbs_netdev_ops = {
.ndo_open = lbs_dev_open,
.ndo_stop = lbs_eth_stop,
-@@ -891,6 +892,7 @@ static const struct net_device_ops lbs_n
+@@ -895,6 +896,7 @@ static const struct net_device_ops lbs_n
.ndo_change_mtu = eth_change_mtu,
.ndo_validate_addr = eth_validate_addr,
};
@@ -452,7 +452,7 @@ without creating a headache on maintenance of the pathes.
/**
* @brief This function adds the card. it will probe the
-@@ -936,7 +938,16 @@ struct lbs_private *lbs_add_card(void *c
+@@ -940,7 +942,16 @@ struct lbs_private *lbs_add_card(void *c
wdev->netdev = dev;
priv->dev = dev;
@@ -469,7 +469,7 @@ without creating a headache on maintenance of the pathes.
dev->watchdog_timeo = 5 * HZ;
dev->ethtool_ops = &lbs_ethtool_ops;
#ifdef WIRELESS_EXT
-@@ -1242,11 +1253,13 @@ out:
+@@ -1246,11 +1257,13 @@ out:
lbs_deb_leave(LBS_DEB_MAIN);
}
@@ -483,7 +483,7 @@ without creating a headache on maintenance of the pathes.
static int lbs_add_rtap(struct lbs_private *priv)
{
-@@ -1267,7 +1280,13 @@ static int lbs_add_rtap(struct lbs_priva
+@@ -1271,7 +1284,13 @@ static int lbs_add_rtap(struct lbs_priva
memcpy(rtap_dev->dev_addr, priv->current_addr, ETH_ALEN);
rtap_dev->type = ARPHRD_IEEE80211_RADIOTAP;
@@ -573,6 +573,43 @@ without creating a headache on maintenance of the pathes.
dev->destructor = free_netdev;
ether_setup(dev);
dev->tx_queue_len = 0;
+--- a/drivers/net/wireless/orinoco/main.c
++++ b/drivers/net/wireless/orinoco/main.c
+@@ -2077,6 +2077,7 @@ int orinoco_init(struct orinoco_private
+ }
+ EXPORT_SYMBOL(orinoco_init);
+
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
+ static const struct net_device_ops orinoco_netdev_ops = {
+ .ndo_open = orinoco_open,
+ .ndo_stop = orinoco_stop,
+@@ -2088,6 +2089,7 @@ static const struct net_device_ops orino
+ .ndo_tx_timeout = orinoco_tx_timeout,
+ .ndo_get_stats = orinoco_get_stats,
+ };
++#endif
+
+ /* Allocate private data.
+ *
+@@ -2210,7 +2212,18 @@ int orinoco_if_add(struct orinoco_privat
+
+ /* Setup / override net_device fields */
+ dev->ieee80211_ptr = wdev;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
+ dev->netdev_ops = &orinoco_netdev_ops;
++#else
++ dev->open = orinoco_open;
++ dev->stop = orinoco_stop;
++ dev->hard_start_xmit = orinoco_xmit;
++ dev->set_multicast_list = orinoco_set_multicast_list;
++ dev->change_mtu = orinoco_change_mtu;
++ dev->set_mac_address = eth_mac_addr;
++ dev->tx_timeout = orinoco_tx_timeout;
++ dev->get_stats = orinoco_get_stats;
++#endif
+ dev->watchdog_timeo = HZ; /* 1 second timeout */
+ dev->wireless_handlers = &orinoco_handler_def;
+ #ifdef WIRELESS_SPY
--- a/net/bluetooth/bnep/netdev.c
+++ b/net/bluetooth/bnep/netdev.c
@@ -167,8 +167,12 @@ static inline int bnep_net_proto_filter(
diff --git a/patches/02-ksize.patch b/patches/02-ksize.patch
index 28bacba..5f4e039 100644
--- a/patches/02-ksize.patch
+++ b/patches/02-ksize.patch
@@ -10,6 +10,31 @@ define ksize(bleh) SOME_LARGE_NUMBER
but doing it this way emphasis careful review
of the situation.
+--- a/drivers/net/wireless/orinoco/wext.c
++++ b/drivers/net/wireless/orinoco/wext.c
+@@ -28,8 +28,22 @@ static int orinoco_set_key(struct orinoc
+ enum orinoco_alg alg, const u8 *key, int key_len,
+ const u8 *seq, int seq_len)
+ {
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,28)
++ int len;
++ if (!unlikely(ZERO_OR_NULL_PTR(priv->keys[index].key))) {
++ len = priv->keys[index].key_len;
++ memset(priv->keys[index].key, 0, len);
++ kfree(priv->keys[index].key);
++ }
++ if (!unlikely(ZERO_OR_NULL_PTR(priv->keys[index].seq))) {
++ len = priv->keys[index].seq_len;
++ memset(priv->keys[index].seq, 0, len);
++ kfree(priv->keys[index].seq);
++ }
++#else
+ kzfree(priv->keys[index].key);
+ kzfree(priv->keys[index].seq);
++#endif
+
+ if (key_len) {
+ priv->keys[index].key = kzalloc(key_len, GFP_ATOMIC);
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -426,9 +426,14 @@ cfg80211_bss_update(struct cfg80211_regi
diff --git a/patches/24-pcmcia.patch b/patches/24-pcmcia.patch
new file mode 100644
index 0000000..5ffaa7a
--- /dev/null
+++ b/patches/24-pcmcia.patch
@@ -0,0 +1,14 @@
+--- a/drivers/net/wireless/orinoco/orinoco_cs.c
++++ b/drivers/net/wireless/orinoco/orinoco_cs.c
+@@ -81,7 +81,11 @@ orinoco_cs_hard_reset(struct orinoco_pri
+ /* We need atomic ops here, because we're not holding the lock */
+ set_bit(0, &card->hard_reset_in_progress);
+
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27)
++ err = pcmcia_reset_card(link, NULL);
++#else
+ err = pcmcia_reset_card(link->socket);
++#endif
+ if (err)
+ return err;
+
diff --git a/patches/99-change-makefiles.patch b/patches/99-change-makefiles.patch
index 2fe68e5..7d59537 100644
--- a/patches/99-change-makefiles.patch
+++ b/patches/99-change-makefiles.patch
@@ -40,12 +40,10 @@ only the wireless stuff.
--- a/drivers/net/wireless/Makefile
+++ b/drivers/net/wireless/Makefile
-@@ -5,33 +5,16 @@
- obj-$(CONFIG_IPW2100) += ipw2x00/
- obj-$(CONFIG_IPW2200) += ipw2x00/
+@@ -7,31 +7,16 @@ obj-$(CONFIG_IPW2200) += ipw2x00/
+
+ obj-$(CONFIG_HERMES) += orinoco/
--obj-$(CONFIG_HERMES) += orinoco/
--
-obj-$(CONFIG_AIRO) += airo.o
-obj-$(CONFIG_AIRO_CS) += airo_cs.o airo.o
-
diff --git a/scripts/admin-update.sh b/scripts/admin-update.sh
index c75af30..29dd460 100755
--- a/scripts/admin-update.sh
+++ b/scripts/admin-update.sh
@@ -96,6 +96,7 @@ DRIVERS="$DRIVERS drivers/net/wireless/libertas_tf"
DRIVERS="$DRIVERS drivers/net/wireless/ipw2x00"
DRIVERS="$DRIVERS drivers/net/wireless/wl12xx"
DRIVERS="$DRIVERS drivers/net/wireless/iwmc3200wifi"
+DRIVERS="$DRIVERS drivers/net/wireless/orinoco"
# Ethernet drivers
DRIVERS="$DRIVERS drivers/net/atl1c"
--
1.6.3.3
On Thu, 2010-03-11 at 22:32 +0100, Hauke Mehrtens wrote:
> orinoco now depends on cfg80211. If compat-wireless was installed it
> will install its own version of cfg80211 and orinoco will not work any
> more because it wants to use the version shipped with the kernel.
>
> Signed-off-by: Hauke Mehrtens <[email protected]>
If orinoco is in compat-wireless and hostap is not, I'm concerned that
users with hostap would end up with a less capable orinoco driver.
I'm going to make a patch that would disable support for Prism chipset
in Orinoco by default. It should have been done long ago, but I never
had a chance, and patches proposed by others had quality issues.
--
Regards,
Pavel Roskin
wireless.h and wext.h must not be shipped with compat-wireless.
Signed-off-by: Hauke Mehrtens <[email protected]>
---
scripts/admin-update.sh | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/admin-update.sh b/scripts/admin-update.sh
index 29dd460..af4479a 100755
--- a/scripts/admin-update.sh
+++ b/scripts/admin-update.sh
@@ -21,7 +21,7 @@ GIT_COMPAT_URL="git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/compat.git"
INCLUDE_NET_BT="hci_core.h l2cap.h bluetooth.h rfcomm.h hci.h"
NET_BT_DIRS="bluetooth bluetooth/bnep bluetooth/cmtp bluetooth/rfcomm bluetooth/hidp"
-INCLUDE_LINUX="ieee80211.h nl80211.h wireless.h"
+INCLUDE_LINUX="ieee80211.h nl80211.h"
INCLUDE_LINUX="$INCLUDE_LINUX pci_ids.h eeprom_93cx6.h"
INCLUDE_LINUX="$INCLUDE_LINUX ath9k_platform.h"
@@ -32,7 +32,7 @@ INCLUDE_LINUX_SPI="wl12xx.h libertas_spi.h"
# The good new yummy stuff
INCLUDE_NET="cfg80211.h ieee80211_radiotap.h"
-INCLUDE_NET="$INCLUDE_NET mac80211.h wext.h lib80211.h regulatory.h"
+INCLUDE_NET="$INCLUDE_NET mac80211.h lib80211.h regulatory.h"
# Pretty colors
GREEN="\033[01;32m"
--
1.6.3.3
Remove some not used config symbols and add some new ones
Signed-off-by: Hauke Mehrtens <[email protected]>
---
config.mk | 15 ++++++++++++---
1 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/config.mk b/config.mk
index 431940e..357cae9 100644
--- a/config.mk
+++ b/config.mk
@@ -110,7 +110,6 @@ endif
CONFIG_MAC80211=m
# CONFIG_MAC80211_DEBUGFS=y
-# CONFIG_MAC80211_DEBUG_MENU=y
# CONFIG_MAC80211_NOINLINE=y
# CONFIG_MAC80211_VERBOSE_DEBUG=y
# CONFIG_MAC80211_HT_DEBUG=y
@@ -150,8 +149,6 @@ CONFIG_LIB80211_CRYPT_CCMP=m
CONFIG_LIB80211_CRYPT_TKIP=m
# CONFIG_LIB80211_DEBUG=y
-CONFIG_WIRELESS_OLD_REGULATORY=n
-
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
@@ -217,6 +214,7 @@ endif
CONFIG_B43_LEDS=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_NPHY=y
+# CONFIG_B43_FORCE_PIO=y
# CONFIG_B43_DEBUG=y
CONFIG_B43LEGACY=m
@@ -284,6 +282,9 @@ CONFIG_RT2500PCI=m
ifneq ($(CONFIG_CRC_CCITT),)
CONFIG_RT2800PCI=m
CONFIG_RT2800PCI_PCI=y
+# CONFIG_RT2800PCI_RT30XX=y
+# CONFIG_RT2800PCI_RT35XX=y
+# CONFIG_RT2800PCI_SOC=y
endif
NEED_RT2X00=y
@@ -376,6 +377,9 @@ endif
CONFIG_RT2500USB=m
ifneq ($(CONFIG_CRC_CCITT),)
CONFIG_RT2800USB=m
+# CONFIG_RT2800USB_RT30XX=y
+# CONFIG_RT2800USB_RT35XX=y
+# CONFIG_RT2800USB_UNKNOWN=y
endif
CONFIG_RT2X00_LIB_USB=m
NEED_RT2X00=y
@@ -403,6 +407,7 @@ CONFIG_WL1251=m
ifneq ($(CONFIG_CRC7),)
CONFIG_WL1251_SPI=m
endif
+CONFIG_WL1271_SPI=m
CONFIG_P54_SPI=m
ifdef CONFIG_COMPAT_KERNEL_27
@@ -421,6 +426,10 @@ CONFIG_SSB_SDIOHOST=y
CONFIG_B43_SDIO=y
CONFIG_WL1251_SDIO=m
+ifneq ($(CONFIG_ARM),)
+CONFIG_WL1271_SDIO=m
+endif
+
ifdef CONFIG_COMPAT_KERNEL_27
CONFIG_LIBERTAS_SDIO=n
NEED_LIBERTAS=n
--
1.6.3.3
On Thu, Mar 11, 2010 at 1:32 PM, Hauke Mehrtens <[email protected]> wrote:
> Remove some not used config symbols and add some new ones
>
> Signed-off-by: Hauke Mehrtens <[email protected]>
Thanks! Applied all of the compat-wireless patches too.
Luis
{free,alloc}_ieee80211 are also defined by ieee80211 module for example
used on kernel 2.6.26. Without this patch ipwlib will not load on this
kernel, because of a duplicate symbol.
Signed-off-by: Hauke Mehrtens <[email protected]>
---
patches/23-ipw.patch | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 161 insertions(+), 0 deletions(-)
create mode 100644 patches/23-ipw.patch
diff --git a/patches/23-ipw.patch b/patches/23-ipw.patch
new file mode 100644
index 0000000..179ad39
--- /dev/null
+++ b/patches/23-ipw.patch
@@ -0,0 +1,161 @@
+rename {free,alloc}_ieee80211 to {free,alloc}_libipw
+
+{free,alloc}_ieee80211 are also defined by ieee80211 module for example
+used on kernel 2.6.26. Without this patch ipwlib will not load on this
+kernel, because of a duplicate symbol.
+
+--- a/drivers/net/wireless/ipw2x00/ipw2100.c
++++ b/drivers/net/wireless/ipw2x00/ipw2100.c
+@@ -6114,7 +6114,7 @@ static struct net_device *ipw2100_alloc_
+ struct ipw2100_priv *priv;
+ struct net_device *dev;
+
+- dev = alloc_ieee80211(sizeof(struct ipw2100_priv), 0);
++ dev = alloc_libipw(sizeof(struct ipw2100_priv), 0);
+ if (!dev)
+ return NULL;
+ priv = libipw_priv(dev);
+@@ -6440,7 +6440,7 @@ static int ipw2100_pci_init_one(struct p
+ sysfs_remove_group(&pci_dev->dev.kobj,
+ &ipw2100_attribute_group);
+
+- free_ieee80211(dev, 0);
++ free_libipw(dev, 0);
+ pci_set_drvdata(pci_dev, NULL);
+ }
+
+@@ -6498,10 +6498,10 @@ static void __devexit ipw2100_pci_remove
+ if (dev->base_addr)
+ iounmap((void __iomem *)dev->base_addr);
+
+- /* wiphy_unregister needs to be here, before free_ieee80211 */
++ /* wiphy_unregister needs to be here, before free_libipw */
+ wiphy_unregister(priv->ieee->wdev.wiphy);
+ kfree(priv->ieee->bg_band.channels);
+- free_ieee80211(dev, 0);
++ free_libipw(dev, 0);
+ }
+
+ pci_release_regions(pci_dev);
+--- a/drivers/net/wireless/ipw2x00/ipw2200.c
++++ b/drivers/net/wireless/ipw2x00/ipw2200.c
+@@ -11668,7 +11668,7 @@ static int ipw_prom_alloc(struct ipw_pri
+ if (priv->prom_net_dev)
+ return -EPERM;
+
+- priv->prom_net_dev = alloc_ieee80211(sizeof(struct ipw_prom_priv), 1);
++ priv->prom_net_dev = alloc_libipw(sizeof(struct ipw_prom_priv), 1);
+ if (priv->prom_net_dev == NULL)
+ return -ENOMEM;
+
+@@ -11693,7 +11693,7 @@ static int ipw_prom_alloc(struct ipw_pri
+
+ rc = register_netdev(priv->prom_net_dev);
+ if (rc) {
+- free_ieee80211(priv->prom_net_dev, 1);
++ free_libipw(priv->prom_net_dev, 1);
+ priv->prom_net_dev = NULL;
+ return rc;
+ }
+@@ -11707,7 +11707,7 @@ static void ipw_prom_free(struct ipw_pri
+ return;
+
+ unregister_netdev(priv->prom_net_dev);
+- free_ieee80211(priv->prom_net_dev, 1);
++ free_libipw(priv->prom_net_dev, 1);
+
+ priv->prom_net_dev = NULL;
+ }
+@@ -11737,7 +11737,7 @@ static int __devinit ipw_pci_probe(struc
+ struct ipw_priv *priv;
+ int i;
+
+- net_dev = alloc_ieee80211(sizeof(struct ipw_priv), 0);
++ net_dev = alloc_libipw(sizeof(struct ipw_priv), 0);
+ if (net_dev == NULL) {
+ err = -ENOMEM;
+ goto out;
+@@ -11757,7 +11757,7 @@ static int __devinit ipw_pci_probe(struc
+ mutex_init(&priv->mutex);
+ if (pci_enable_device(pdev)) {
+ err = -ENODEV;
+- goto out_free_ieee80211;
++ goto out_free_libipw;
+ }
+
+ pci_set_master(pdev);
+@@ -11892,8 +11892,8 @@ static int __devinit ipw_pci_probe(struc
+ out_pci_disable_device:
+ pci_disable_device(pdev);
+ pci_set_drvdata(pdev, NULL);
+- out_free_ieee80211:
+- free_ieee80211(priv->net_dev, 0);
++ out_free_libipw:
++ free_libipw(priv->net_dev, 0);
+ out:
+ return err;
+ }
+@@ -11960,11 +11960,11 @@ static void __devexit ipw_pci_remove(str
+ pci_release_regions(pdev);
+ pci_disable_device(pdev);
+ pci_set_drvdata(pdev, NULL);
+- /* wiphy_unregister needs to be here, before free_ieee80211 */
++ /* wiphy_unregister needs to be here, before free_libipw */
+ wiphy_unregister(priv->ieee->wdev.wiphy);
+ kfree(priv->ieee->a_band.channels);
+ kfree(priv->ieee->bg_band.channels);
+- free_ieee80211(priv->net_dev, 0);
++ free_libipw(priv->net_dev, 0);
+ free_firmware();
+ }
+
+--- a/drivers/net/wireless/ipw2x00/libipw.h
++++ b/drivers/net/wireless/ipw2x00/libipw.h
+@@ -905,7 +905,7 @@ struct libipw_device {
+ struct libipw_reassoc_request * req);
+
+ /* This must be the last item so that it points to the data
+- * allocated beyond this structure by alloc_ieee80211 */
++ * allocated beyond this structure by alloc_libipw */
+ u8 priv[0];
+ };
+
+@@ -1018,8 +1018,8 @@ static inline int libipw_is_cck_rate(u8
+ }
+
+ /* ieee80211.c */
+-extern void free_ieee80211(struct net_device *dev, int monitor);
+-extern struct net_device *alloc_ieee80211(int sizeof_priv, int monitor);
++extern void free_libipw(struct net_device *dev, int monitor);
++extern struct net_device *alloc_libipw(int sizeof_priv, int monitor);
+ extern int libipw_change_mtu(struct net_device *dev, int new_mtu);
+
+ extern void libipw_networks_age(struct libipw_device *ieee,
+--- a/drivers/net/wireless/ipw2x00/libipw_module.c
++++ b/drivers/net/wireless/ipw2x00/libipw_module.c
+@@ -140,7 +140,7 @@ int libipw_change_mtu(struct net_device
+ }
+ EXPORT_SYMBOL(libipw_change_mtu);
+
+-struct net_device *alloc_ieee80211(int sizeof_priv, int monitor)
++struct net_device *alloc_libipw(int sizeof_priv, int monitor)
+ {
+ struct libipw_device *ieee;
+ struct net_device *dev;
+@@ -227,7 +227,7 @@ failed:
+ return NULL;
+ }
+
+-void free_ieee80211(struct net_device *dev, int monitor)
++void free_libipw(struct net_device *dev, int monitor)
+ {
+ struct libipw_device *ieee = netdev_priv(dev);
+
+@@ -336,5 +336,5 @@ MODULE_PARM_DESC(debug, "debug output ma
+ module_exit(libipw_exit);
+ module_init(libipw_init);
+
+-EXPORT_SYMBOL(alloc_ieee80211);
+-EXPORT_SYMBOL(free_ieee80211);
++EXPORT_SYMBOL(alloc_libipw);
++EXPORT_SYMBOL(free_libipw);
--
1.6.3.3
On Thu, Mar 11, 2010 at 5:05 PM, Pavel Roskin <[email protected]> wrote:
> On Thu, 2010-03-11 at 22:32 +0100, Hauke Mehrtens wrote:
>> orinoco now depends on cfg80211. If compat-wireless was installed it
>> will install its own version of cfg80211 and orinoco will not work any
>> more because it wants to use the version shipped with the kernel.
>>
>> Signed-off-by: Hauke Mehrtens <[email protected]>
>
> If orinoco is in compat-wireless and hostap is not, I'm concerned that
> users with hostap would end up with a less capable orinoco driver.
Curious, is anyone planning on porting hostap to cfg80211?
Our todo list for conversion lists it as having a partial conversion:
http://wireless.kernel.org/en/developers/todo-list/cfg80211-conversion
Who is doing such conversion? I don't see anything on wireless-testing for this.
> I'm going to make a patch that would disable support for Prism chipset
> in Orinoco by default. It should have been done long ago, but I never
> had a chance, and patches proposed by others had quality issues.
Great.
Luis
Signed-off-by: Hauke Mehrtens <[email protected]>
---
include/linux/compat-2.6.34.h | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/include/linux/compat-2.6.34.h b/include/linux/compat-2.6.34.h
index d189bee..1cb3e06 100644
--- a/include/linux/compat-2.6.34.h
+++ b/include/linux/compat-2.6.34.h
@@ -155,6 +155,13 @@ static inline void device_unlock(struct device *dev)
up(&dev->sem);
}
+#if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
+#define PCMCIA_DEVICE_PROD_ID3(v3, vh3) { \
+ .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID3, \
+ .prod_id = { NULL, NULL, (v3), NULL }, \
+ .prod_id_hash = { 0, 0, (vh3), 0 }, }
+#endif
+
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) */
#endif /* LINUX_26_34_COMPAT_H */
--
1.6.3.3
On Thu, Mar 11, 2010 at 10:32 PM, Hauke Mehrtens <[email protected]> wrote:
> {free,alloc}_ieee80211 are also defined by ieee80211 module for example
> used on kernel 2.6.26. Without this patch ipwlib will not load on this
> kernel, because of a duplicate symbol.
>
> Signed-off-by: Hauke Mehrtens <[email protected]>
I believe this should be done upstream for 2.6.35 as well - this
"_ieee80211" is not a reference to the name of the IEEE 802.11
specification, but rather to the old name of libipw - "ieee80211";
this was somehow missed during the libipw rename.
--
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
Copy header from recent linux-next
Signed-off-by: Hauke Mehrtens <[email protected]>
---
include/linux/bitops.h | 33 ++++++++++++++++++++++++++++++---
1 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 8469d35..b62de8c 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -18,16 +18,18 @@
*/
#include <asm/bitops.h>
-#define for_each_bit(bit, addr, size) \
+#define for_each_set_bit(bit, addr, size) \
for ((bit) = find_first_bit((addr), (size)); \
(bit) < (size); \
(bit) = find_next_bit((addr), (size), (bit) + 1))
+/* Temporary */
+#define for_each_bit(bit, addr, size) for_each_set_bit(bit, addr, size)
static __inline__ int get_bitmask_order(unsigned int count)
{
int order;
-
+
order = fls(count);
return order; /* We could be slightly more clever with -1 here... */
}
@@ -35,7 +37,7 @@ static __inline__ int get_bitmask_order(unsigned int count)
static __inline__ int get_count_order(unsigned int count)
{
int order;
-
+
order = fls(count) - 1;
if (count & (count - 1))
order++;
@@ -47,6 +49,31 @@ static inline unsigned long hweight_long(unsigned long w)
return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
}
+/*
+ * Clearly slow versions of the hweightN() functions, their benefit is
+ * of course compile time evaluation of constant arguments.
+ */
+#define HWEIGHT8(w) \
+ ( BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + \
+ (!!((w) & (1ULL << 0))) + \
+ (!!((w) & (1ULL << 1))) + \
+ (!!((w) & (1ULL << 2))) + \
+ (!!((w) & (1ULL << 3))) + \
+ (!!((w) & (1ULL << 4))) + \
+ (!!((w) & (1ULL << 5))) + \
+ (!!((w) & (1ULL << 6))) + \
+ (!!((w) & (1ULL << 7))) )
+
+#define HWEIGHT16(w) (HWEIGHT8(w) + HWEIGHT8((w) >> 8))
+#define HWEIGHT32(w) (HWEIGHT16(w) + HWEIGHT16((w) >> 16))
+#define HWEIGHT64(w) (HWEIGHT32(w) + HWEIGHT32((w) >> 32))
+
+/*
+ * Type invariant version that simply casts things to the
+ * largest type.
+ */
+#define HWEIGHT(w) HWEIGHT64((u64)(w))
+
/**
* rol32 - rotate a 32-bit value left
* @word: value to rotate
--
1.6.3.3
On Thu, Mar 11, 2010 at 1:32 PM, Hauke Mehrtens <[email protected]> wrote:
> Signed-off-by: Hauke Mehrtens <[email protected]>
Sweet thanks, applied and pushed out the two compat patches.
Luis
On Fri, 2010-03-12 at 03:16 +0100, Gábor Stefanik wrote:
> I believe this should be done upstream for 2.6.35 as well - this
> "_ieee80211" is not a reference to the name of the IEEE 802.11
> specification, but rather to the old name of libipw - "ieee80211";
> this was somehow missed during the libipw rename.
Also the "ieee80211" prefix is used in libipw messages, and should be
replaced as well.
However, one thing may need to keep the original name. If
CONFIG_LIBIPW_DEBUG is enabled, /proc/net/ieee80211 is created. Perhaps
it would be unhelpful to break that user interface for aesthetic
purposes.
--
Regards,
Pavel Roskin
Signed-off-by: Hauke Mehrtens <[email protected]>
---
patches/13-trace.patch | 19 +++++++++++++++++++
1 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/patches/13-trace.patch b/patches/13-trace.patch
index 8c000f3..82b2643 100644
--- a/patches/13-trace.patch
+++ b/patches/13-trace.patch
@@ -23,6 +23,25 @@ in or compat headers.
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30))
#include <trace/define_trace.h>
+#endif
+--- a/drivers/net/wireless/iwmc3200wifi/trace.h
++++ b/drivers/net/wireless/iwmc3200wifi/trace.h
+@@ -1,7 +1,9 @@
+ #if !defined(__IWM_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ)
+ #define __IWM_TRACE_H__
+
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
+ #include <linux/tracepoint.h>
++#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)) */
+
+ #if !defined(CONFIG_IWM_TRACING)
+ #undef TRACE_EVENT
+@@ -280,4 +282,6 @@ TRACE_EVENT(iwm_rx_packet,
+ #define TRACE_INCLUDE_PATH .
+ #undef TRACE_INCLUDE_FILE
+ #define TRACE_INCLUDE_FILE trace
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30))
+ #include <trace/define_trace.h>
++#endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)) */
--- a/net/mac80211/driver-trace.h
+++ b/net/mac80211/driver-trace.h
@@ -1,7 +1,9 @@
--
1.6.3.3