diff options
| author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
|---|---|---|
| committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
| commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
| tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/wlan-ng | |
| parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) | |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/wlan-ng')
36 files changed, 1469 insertions, 0 deletions
diff --git a/recipes/wlan-ng/files/might-sleep.patch b/recipes/wlan-ng/files/might-sleep.patch new file mode 100644 index 0000000000..a156229331 --- /dev/null +++ b/recipes/wlan-ng/files/might-sleep.patch @@ -0,0 +1,16 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- linux-wlan-ng-0.2.2/src/include/wlan/wlan_compat.h~might_sleep ++++ linux-wlan-ng-0.2.2/src/include/wlan/wlan_compat.h +@@ -584,7 +584,7 @@ + #endif + + #ifndef might_sleep +-#define might_sleep(a) do { } while (0) ++#define might_sleep() do { } while (0) + #endif + + /* Apparently 2.4.2 ethtool is quite different, maybe newer too? */ diff --git a/recipes/wlan-ng/files/more-compat.patch b/recipes/wlan-ng/files/more-compat.patch new file mode 100644 index 0000000000..4ce8173f93 --- /dev/null +++ b/recipes/wlan-ng/files/more-compat.patch @@ -0,0 +1,7 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- linux-wlan-ng-0.2.2/wlan_compat.h ++++ /dev/null diff --git a/recipes/wlan-ng/files/msleep-vs-mdelay.patch b/recipes/wlan-ng/files/msleep-vs-mdelay.patch new file mode 100644 index 0000000000..d98116b07c --- /dev/null +++ b/recipes/wlan-ng/files/msleep-vs-mdelay.patch @@ -0,0 +1,16 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- linux-wlan-ng-0.2.2/src/prism2/driver/prism2_usb.c~msleep-vs-mdelay ++++ linux-wlan-ng-0.2.2/src/prism2/driver/prism2_usb.c +@@ -279,7 +279,7 @@ + * is "wake up", so that's easy. + * (I'd like a better way to do this, really.) + */ +- msleep(100); ++ mdelay(100); + + /* Now delete the CTLXs, because no-one else can now. */ + list_for_each_safe(entry, temp, &cleanlist) { diff --git a/recipes/wlan-ng/files/no-compat.patch b/recipes/wlan-ng/files/no-compat.patch new file mode 100644 index 0000000000..4f59f0fa5d --- /dev/null +++ b/recipes/wlan-ng/files/no-compat.patch @@ -0,0 +1,47 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- linux-wlan-ng-0.2.1pre21/src/include/wlan/wlan_compat.h~no-compat ++++ linux-wlan-ng-0.2.1pre21/src/include/wlan/wlan_compat.h +@@ -351,14 +351,14 @@ + + #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,20)) + #ifdef _LINUX_LIST_H +- ++/* + static inline void list_move_tail(struct list_head *list, + struct list_head *head) + { + __list_del(list->prev, list->next); + list_add_tail(list, head); + } +- ++*/ + static inline void __list_splice(struct list_head *list, + struct list_head *head) + { +@@ -372,13 +372,13 @@ + last->next = at; + at->prev = last; + } +- ++/* + static inline void list_move(struct list_head *list, struct list_head *head) + { + __list_del(list->prev, list->next); + list_add(list, head); + } +- ++*/ + static inline void list_splice_init(struct list_head *list, + struct list_head *head) + { +@@ -388,7 +388,6 @@ + } + } + +- + #endif // LIST_H + #endif diff --git a/recipes/wlan-ng/files/pcmciasrc.patch b/recipes/wlan-ng/files/pcmciasrc.patch new file mode 100644 index 0000000000..ea76baa98b --- /dev/null +++ b/recipes/wlan-ng/files/pcmciasrc.patch @@ -0,0 +1,45 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- linux-wlan-ng-0.2.2/Configure~pcmciasrc ++++ linux-wlan-ng-0.2.2/Configure +@@ -358,37 +358,6 @@ + # kernel PCMCIA. + + if [ $WLAN_KERN_PCMCIA != "y" ] ; then +- if [ ! "$PCMCIA_SRC" ] ; then +- if [ -f /sbin/cardctl ] ; then +- PCMCIA_SRC=`/sbin/cardctl -V 2>&1 | sed -e 's/cardctl version //'` +- PCMCIA_SRC=/usr/src/pcmcia-cs-$PCMCIA_SRC +- fi +- fi +- ask_str "pcmcia-cs source dir" PCMCIA_SRC +- +- if [ ! -f $PCMCIA_SRC/Makefile ] ; then +- $ECHO "pcmcia-cs source tree $PCMCIA_SRC is incomplete or missing!" +- $ECHO "The wlan driver for pcmcia cannot be built without " +- $ECHO "the pcmcia-cs source tree present and configured." +- fail +- fi +- if [ ! -f $PCMCIA_SRC/include/pcmcia/config.h ] ; then +- $ECHO "The pcmcia-cs source tree does not appear to be configured." +- $ECHO "The wlan driver for pcmcia cannot be built without "\ +- $ECHO "the pcmcia-cs source tree present and configured." +- fail +- fi +- $ECHO "" +- +- # Now we need to generate the module options flags. +- # It's only relevant if modversions is turned on. +- grep CONFIG_MODVERSIONS=y < $PCMCIA_SRC/config.mk > /dev/null +- if [ $? = 0 ] ; then +- PCMCIA_MODFLAGS="-DMODULE -DMODVERSIONS -include $PCMCIA_SRC/include/linux/modversions.h" +- else +- PCMCIA_MODFLAGS="-DMODULE" +- fi +- + # new versions of pcmcia-cs don't generate their own modversion.h + # if they don't have it, use the kernel module flags instead. + if [ ! -f $PCMCIA_SRC/include/linux/modversions.h ] ; then diff --git a/recipes/wlan-ng/files/post-down b/recipes/wlan-ng/files/post-down new file mode 100755 index 0000000000..bf4ba0ae60 --- /dev/null +++ b/recipes/wlan-ng/files/post-down @@ -0,0 +1,31 @@ +#!/bin/sh +# +# This script takes care of bringing down wlan-ng devices. +# It is run by ifdown. + +WLANCTL=/sbin/wlanctl-ng + +if [ ! -x $WLANCTL ] ; then + exit 0 +fi + +case $IFACE in +wlan?) + # Reset device to make sure it is not trying to generate + # interrupts. + result=`$WLANCTL $IFACE lnxreq_ifstate ifstate=disable` + + # Remove modules. Of course, for all I know they are still in use + # by another interface, in which case these rmmods will fail. Also, + # depending on how modutils is set up, different prism2 modules + # might be loaded. + ( + rmmod prism2_pci || rmmod prism2_cs || rmmod prism2_usb || \ + rmmod prism2_plx || true + rmmod p80211 || true + ) 2>/dev/null + + # Remove lock file, just in case. + rm -f /var/lock/wlan-$IFACE.lock +;; +esac diff --git a/recipes/wlan-ng/files/pre-up b/recipes/wlan-ng/files/pre-up new file mode 100755 index 0000000000..0ae410edfa --- /dev/null +++ b/recipes/wlan-ng/files/pre-up @@ -0,0 +1,227 @@ +#!/bin/sh + +case "$METHOD" in loopback) exit 0 ;; esac + +# +# This script takes care of bringing up wlan-ng device. +# It is run by ifup, and gets information from the +# /etc/network/interfaces file. It is derived from the +# init.d/wlan script in the wlan-ng distribution + +WLANCTL=/sbin/wlanctl-ng +PRIV_GENERATOR=/sbin/nwepgen + +if [ ! -x $WLANCTL ] ; then + exit 0 +fi + +# Detect and act only on linux-wlan-ng interfaces +if [ "$IF_WIRELESS_TYPE" != "wlan-ng" ]; then + exit 0 +fi + +# Create a lock file; remove on script exit. This is a fairly crummy lock, +# but all it needs to do is prevent hotplug from calling this script, +# which may happen when the module is loaded below. Since it should only +# happen when the module is loaded, I don't need a proper lock. +if [ -e /var/lock/wlan-$IFACE.lock ]; then + exit 0 +fi +touch /var/lock/wlan-$IFACE.lock +cleanup () { + rm -f /var/lock/wlan-$IFACE.lock +} +trap cleanup 0 + +if [ -z "$IF_WIRELESS_MODE" ]; then + IF_WIRELESS_MODE="ad_hoc" +fi + +if [ -z "$IF_WLAN_NG_HOSTWEP" ]; then + IF_WLAN_NG_HOSTWEP=false +fi + +if [ -z "$IF_WLAN_NG_DEFAULT_KEY_ID" ]; then + IF_WLAN_NG_DEFAULT_KEY_ID=0 +fi + +if [ -z "$IF_WLAN_NG_EXCLUDE_UNENCRYPTED" ]; then + IF_WLAN_NG_EXCLUDE_UNENCRYPTED=true +fi + +if [ -z "$IF_WLAN_NG_PRIV_KEY128" ]; then + IF_WLAN_NG_PRIV_KEY128=false +fi + +if [ -z "$IF_WLAN_NG_BCINT" ]; then + IF_WLAN_NG_BCINT=100 +fi + +if [ -z "$IF_WLAN_NG_BASICRATES" ]; then + IF_WLAN_NG_BASICRATES="2 4" +fi + +if [ -z "$IF_WLAN_NG_OPRATES" ]; then + IF_WLAN_NG_OPRATES="2 4 11 22" +fi + +if [ -z "$IF_WLAN_NG_AUTHTYPE" ]; then + IF_WLAN_NG_AUTHTYPE="opensystem" +fi + +if [ -z "$IF_WIRELESS_CHANNEL" ]; then + IF_WIRELESS_CHANNEL=1 +fi + +if ! modprobe p80211; then + echo "Failed to load p80211.o." >&2 + exit 1 +fi + +# NOTE: We don't explicitly insmod the card driver here. The +# best thing to do is to specify an alias in /etc/modules.conf. +# Then, the first time we call wlanctl with the named device, +# the kernel module autoload stuff will take over. +# But, if you prefer, you could modprobe it here. + + +# Bring the card up into an operable state. +result=`$WLANCTL $IFACE lnxreq_ifstate ifstate=enable` +if [ $? = 0 ] ; then + eval $result + if [ $resultcode != "success" ]; then + echo "Failed to enable the device, resultcode=" $resultcode "." >&2 + exit 1 + fi +else + echo "Failed to enable the device, exitcode=" $? "." >&2 + exit 1 +fi + +# Set user-specified MIB items. +for i in $IF_WLAN_NG_USER_MIBS; do + result=`$WLANCTL $IFACE dot11req_mibset "mibattribute=$i"` + + if [ $? = 0 ] ; then + eval $result + if [ $resultcode != "success" ] ; then + echo "Failed to set user MIB $i." >&2 + exit 1 + fi + else + echo "Failed to set user MIB $i." >&2 + exit 1 + fi +done + +if [ "$IF_WIRELESS_ENC" = "on" ]; then + # Set up WEP. + result=`$WLANCTL $IFACE dot11req_mibget mibattribute=dot11PrivacyOptionImplemented` + if [ $? = 0 ] ; then + eval $result + eval $mibattribute + else + echo "mibget failed." >&2 + exit 1 + fi + + if [ "$dot11PrivacyOptionImplemented" != "true" ]; then + echo "Cannot enable privacy, dot11PrivacyOptionImplemented=$dot11PrivacyOptionImplemented." >&2 + exit 1 + fi + + $WLANCTL $IFACE lnxreq_hostwep decrypt=$IF_WLAN_NG_HOSTWEP encrypt=$IF_WLAN_NG_HOSTWEP >/dev/null + + $WLANCTL $IFACE dot11req_mibset \ + mibattribute=dot11WEPDefaultKeyID=$IF_WLAN_NG_DEFAULT_KEY_ID \ + >/dev/null + + $WLANCTL $IFACE dot11req_mibset \ + mibattribute=dot11ExcludeUnencrypted=$IF_WLAN_NG_EXCLUDE_UNENCRYPTED \ + >/dev/null + + $WLANCTL $IFACE dot11req_mibset \ + mibattribute=dot11PrivacyInvoked=true >/dev/null + + if [ -e "$IF_WLAN_NG_KEYFILE" ]; then + IF_WLAN_NG_PRIV_GENSTR=`cat $IF_WLAN_NG_KEYFILE` + fi + if [ ! -z "$IF_WLAN_NG_PRIV_GENSTR" ]; then + if [ "$IF_WLAN_NG_PRIV_KEY128" = "false" ]; then + keys=`$PRIV_GENERATOR "$IF_WLAN_NG_PRIV_GENSTR" 5` + else + keys=`$PRIV_GENERATOR "$IF_WLAN_NG_PRIV_GENSTR" 13` + fi + + knum=0 + for i in $keys; do + $WLANCTL $IFACE dot11req_mibset \ + mibattribute=dot11WEPDefaultKey$knum=$i \ + >/dev/null + knum=$(expr $knum + 1) + done + else + $WLANCTL $IFACE dot11req_mibset \ + mibattribute=dot11WEPDefaultKey0=$IF_WLAN_NG_KEY0 \ + >/dev/null + $WLANCTL $IFACE dot11req_mibset \ + mibattribute=dot11WEPDefaultKey1=$IF_WLAN_NG_KEY1 \ + >/dev/null + $WLANCTL $IFACE dot11req_mibset \ + mibattribute=dot11WEPDefaultKey2=$IF_WLAN_NG_KEY2 \ + >/dev/null + $WLANCTL $IFACE dot11req_mibset \ + mibattribute=dot11WEPDefaultKey3=$IF_WLAN_NG_KEY3 \ + >/dev/null + fi +fi + +# MAC startup +if [ "$IF_WIRELESS_MODE" = "ad_hoc" ] || + [ "$IF_WIRELESS_MODE" = "ad-hoc" ]; then + startcmd="$WLANCTL $IFACE dot11req_start " + startcmd="$startcmd ssid=$IF_WIRELESS_ESSID" + startcmd="$startcmd bsstype=independent" + startcmd="$startcmd beaconperiod=$IF_WLAN_NG_BCINT" + startcmd="$startcmd dtimperiod=3" + startcmd="$startcmd cfpollable=false" + startcmd="$startcmd cfpollreq=false" + startcmd="$startcmd cfpperiod=3" + startcmd="$startcmd cfpmaxduration=100" + startcmd="$startcmd probedelay=100" + startcmd="$startcmd dschannel=$IF_WIRELESS_CHANNEL" + j=1 + for i in $IF_WLAN_NG_BASICRATES; do + startcmd="$startcmd basicrate$j=$i" + j=$(expr $j + 1) + done + j=1 + for i in $IF_WLAN_NG_OPRATES; do + startcmd="$startcmd operationalrate$j=$i" + j=$(expr $j + 1) + done + + results=`$startcmd` + if [ $? = 0 ]; then + eval $results + if [ $resultcode != "success" ] ; then + echo "IBSS not started, resultcode=$resultcode" >&2 + exit 1 + fi + else + echo FAILED: $startcmd >&2 + exit 1 + fi +else + # Infrastructure mode. + results=`$WLANCTL $IFACE lnxreq_autojoin \ + "ssid=$IF_WIRELESS_ESSID" \ + authtype=$IF_WLAN_NG_AUTHTYPE | sed 's/\([^=]*\)=\(.*\)/\1="\2"/'` + if [ $? = 0 ]; then + eval $results + if [ ${resultcode:-"failure"} != "success" ]; then + echo 'error: Autojoin indicated failure!' >&2 + exit 1 + fi + fi +fi diff --git a/recipes/wlan-ng/files/resume b/recipes/wlan-ng/files/resume new file mode 100755 index 0000000000..f875939da6 --- /dev/null +++ b/recipes/wlan-ng/files/resume @@ -0,0 +1,22 @@ +#!/bin/sh +# This script is run on resume to force a down and up of any linux-wlanng +# iterfaces. Otherwise they could get into a weird state. +IFACES=$(ifconfig | grep -B 1 ^wlan | cut -d ' ' -f 1) +for iface in $IFACES; do + echo down $ifcase >>/tmp/log + ifdown $iface || ifconfig $iface down +done + +rmmod prism2_pci 2>/dev/null +rmmod prism2_usb 2>/dev/null +rmmod prism2_cs 2>/dev/null +rmmod prism2_plx 2>/dev/null +rmmod p80211 2>/dev/null + +# There is a race here for some reason. +sleep 2 + +for iface in $IFACES; do + ifup $iface +done + diff --git a/recipes/wlan-ng/files/scripts-makefile-hostcc.patch b/recipes/wlan-ng/files/scripts-makefile-hostcc.patch new file mode 100644 index 0000000000..1746b8a359 --- /dev/null +++ b/recipes/wlan-ng/files/scripts-makefile-hostcc.patch @@ -0,0 +1,16 @@ + +# +# Patch managed by http://www.holgerschurig.de/patcher.html +# + +--- linux-wlan-ng-0.2.2/scripts/Makefile~scripts-makefile-hostcc ++++ linux-wlan-ng-0.2.2/scripts/Makefile +@@ -24,7 +24,7 @@ + exit 1;\ + fi + +- $(CC) -I$(KERNEL_SOURCE)/include get_version.c -o get_version ++ $(BUILD_CC) -I$(KERNEL_SOURCE)/include get_version.c -o get_version + + get_options: + $(MAKE) -f $(CURR_DIR)/Makefile.get_options -C $(KERNEL_SOURCE) get_version_target diff --git a/recipes/wlan-ng/files/usbctl b/recipes/wlan-ng/files/usbctl Binary files differnew file mode 100755 index 0000000000..5a34b03c39 --- /dev/null +++ b/recipes/wlan-ng/files/usbctl diff --git a/recipes/wlan-ng/files/wlan-ng.modutils b/recipes/wlan-ng/files/wlan-ng.modutils new file mode 100644 index 0000000000..010e20d375 --- /dev/null +++ b/recipes/wlan-ng/files/wlan-ng.modutils @@ -0,0 +1 @@ +alias wlan0 prism2_usb diff --git a/recipes/wlan-ng/files/wlan.agent b/recipes/wlan-ng/files/wlan.agent new file mode 100644 index 0000000000..945d646984 --- /dev/null +++ b/recipes/wlan-ng/files/wlan.agent @@ -0,0 +1,107 @@ +#!/bin/sh +# +# p80211/wlan hotplug policy agent. +# +# wlan hotplug params include: +# +# ACTION=%s [register|remove|shutdown|startup|suspend|resume] +# INTERFACE=%s +# NSDNAME=%s +# + +cd /etc/hotplug +# must have ./ here or busybox shell barfs +. ./hotplug.functions + +#DEBUG=yes export DEBUG + +if [ "$INTERFACE" = "" ]; then + mesg Bad WLAN invocation: \$INTERFACE is not set + exit 1 +fi + +if [ "$NSDNAME" = "" ]; then + mesg Bad WLAN invocation: \$NSDNAME is not set + exit 1 +fi + +debug_mesg WLAN $ACTION on $INTERFACE \($NSDNAME\) + +if [ "$NSDNAME" = "prism2_cs" ] ; then + mesg "WLAN Hotplug bypassed for pcmcia" + exit 0 +fi + +# load up the shared scripts +if [ ! -f /etc/wlan/shared ] ; then + mesg "/etc/wlan/shared not present, aborting" + exit 1 +fi + +ECHO=mesg +. /etc/wlan/shared + +case $ACTION in +'register'|'resume') + eval 'WLAN_ENABLE=$ENABLE_'$INTERFACE + if ! is_true $WLAN_ENABLE ; then + mesg "WLAN $ACTION - interface $INTERFACE not enabled, aborting" + exit 1 + fi + debug_mesg WLAN $INTERFACE registered. + wlan_bring_it_up $INTERFACE + if [ $? = 0 ] ; then + mesg WLAN $INTERFACE brought up successfully. + if [ -x /etc/wlan/network ] ; then + mesg "WLAN bringing up layer 3+ with /etc/wlan/network" + /etc/wlan/network start $INTERFACE + elif [ -x /etc/wlan/pre-ifup ] ; then + # pre-ifup is presumed to call ifup if it + # wants to...it may choose to skip it. + mesg "WLAN bringing up layer 3+ with /etc/wlan/pre-ifup" + /etc/wlan/pre-ifup $INTERFACE + else + mesg "WLAN bringing up layer 3+ with /sbin/ifup" + /sbin/ifup $INTERFACE + fi + else + mesg WLAN Could not bring up $INTERFACE + exit 1 + fi + # eventually invoke net.agent on $INTERFACE w/ REGISTER +;; +'remove'|'suspend') + debug_mesg WLAN $INTERFACE removed. + eval 'WLAN_ENABLE=$ENABLE_'$INTERFACE + if ! is_true $WLAN_ENABLE ; then + mesg "WLAN $ACTION - interface $INTERFACE not enabled, aborting" + exit 1 + fi + if [ -x /etc/wlan/network ] ; then + mesg "WLAN taking down layer 3+ with /etc/wlan/network" + /etc/wlan/network stop $INTERFACE + elif [ -x /etc/wlan/post-ifdown ] ; then + # post-ifdown is presumed to call ifdown if it + # wants to...it may choose to skip it. + mesg "WLAN taking down layer 3+ with /etc/wlan/post-ifdown" + /etc/wlan/post-ifdown $INTERFACE + else + mesg "WLAN taking down layer 3+ with /sbin/ifdown" + /sbin/ifdown $INTERFACE + fi + wlan_disable $INTERFACE +;; +'startup') + # kick off wland. + debug_mesg WLAN p80211 starting! + start_wland +;; +'shutdown') + debug_mesg WLAN p80211 shutting down! + stop_wland +;; +*) + debug_mesg WLAN $ACTION event not supported + exit 1 ;; + +esac diff --git a/recipes/wlan-ng/wlan-ng-modules-0.2.7/2.6.22-fixes.patch b/recipes/wlan-ng/wlan-ng-modules-0.2.7/2.6.22-fixes.patch new file mode 100644 index 0000000000..affc6567dc --- /dev/null +++ b/recipes/wlan-ng/wlan-ng-modules-0.2.7/2.6.22-fixes.patch @@ -0,0 +1,221 @@ +Index: linux-wlan-ng-0.2.7/src/prism2/driver/prism2sta.c +=================================================================== +--- linux-wlan-ng-0.2.7.orig/src/prism2/driver/prism2sta.c 2007-11-13 15:09:52.686428934 +0300 ++++ linux-wlan-ng-0.2.7/src/prism2/driver/prism2sta.c 2007-11-13 16:44:19.386567678 +0300 +@@ -1438,9 +1438,15 @@ + return; + } + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) ++void prism2sta_processing_defer(struct work_struct *work) ++{ ++ hfa384x_t *hw = container_of(work, hfa384x_t, link_bh); ++#else + void prism2sta_processing_defer(void *data) + { + hfa384x_t *hw = (hfa384x_t *) data; ++#endif + wlandevice_t *wlandev = hw->wlandev; + hfa384x_bytestr32_t ssid; + int result; +@@ -1540,7 +1546,11 @@ + WLAN_MACMODE_IBSS_STA : WLAN_MACMODE_ESS_STA; + + /* Get the ball rolling on the comms quality stuff */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) ++ prism2sta_commsqual_defer(&hw->commsqual_bh); ++#else + prism2sta_commsqual_defer(hw); ++#endif + } + break; + +@@ -2413,9 +2423,15 @@ + } + #endif + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) ++void prism2sta_commsqual_defer(struct work_struct *work) ++{ ++ hfa384x_t *hw = container_of(work, hfa384x_t, commsqual_bh); ++#else + void prism2sta_commsqual_defer(void *data) + { + hfa384x_t *hw = (hfa384x_t *) data; ++#endif + wlandevice_t *wlandev = hw->wlandev; + hfa384x_bytestr32_t ssid; + int result = 0; +Index: linux-wlan-ng-0.2.7/src/p80211/p80211conv.c +=================================================================== +--- linux-wlan-ng-0.2.7.orig/src/p80211/p80211conv.c 2007-11-13 14:33:27.646440199 +0300 ++++ linux-wlan-ng-0.2.7/src/p80211/p80211conv.c 2007-11-13 14:56:45.678436613 +0300 +@@ -497,7 +497,11 @@ + } + + skb->protocol = eth_type_trans(skb, netdev); ++#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) ) + skb->mac.raw = (unsigned char *) e_hdr; /* new MAC header */ ++#else ++ skb->mac_header = (unsigned char *) e_hdr; ++#endif + + /* jkriegl: process signal and noise as set in hfa384x_int_rx() */ + /* jkriegl: only process signal/noise if requested by iwspy */ +Index: linux-wlan-ng-0.2.7/src/p80211/p80211netdev.c +=================================================================== +--- linux-wlan-ng-0.2.7.orig/src/p80211/p80211netdev.c 2007-11-13 14:56:08.098439975 +0300 ++++ linux-wlan-ng-0.2.7/src/p80211/p80211netdev.c 2007-11-13 14:57:22.326437672 +0300 +@@ -389,7 +389,11 @@ + + /* set up various data fields */ + skb->dev = dev; ++#if ( LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) ) + skb->mac.raw = skb->data ; ++#else ++ skb_reset_mac_header(skb); ++#endif + skb->ip_summed = CHECKSUM_NONE; + skb->pkt_type = PACKET_OTHERHOST; + skb->protocol = htons(ETH_P_80211_RAW); +Index: linux-wlan-ng-0.2.7/src/prism2/driver/hfa384x_usb.c +=================================================================== +--- linux-wlan-ng-0.2.7.orig/src/prism2/driver/hfa384x_usb.c 2007-11-13 14:58:29.000000000 +0300 ++++ linux-wlan-ng-0.2.7/src/prism2/driver/hfa384x_usb.c 2007-11-13 16:41:35.914446535 +0300 +@@ -128,6 +128,9 @@ + #include <linux/netdevice.h> + #include <linux/timer.h> + #include <asm/io.h> ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) ++#include <linux/workqueue.h> ++#endif + #include <linux/delay.h> + #include <asm/byteorder.h> + #include <asm/bitops.h> +@@ -246,8 +249,13 @@ + wlandevice_t *wlandev, + hfa384x_usb_rxfrm_t *rxfrm); + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) ++static void ++hfa384x_usb_defer(struct work_struct *work); ++#else + static void + hfa384x_usb_defer(void *hw); ++#endif + + static int + submit_rx_urb(hfa384x_t *hw, int flags); +@@ -257,7 +265,7 @@ + + /*---------------------------------------------------*/ + /* Callbacks */ +-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) ++#if ( (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) ) + static void + hfa384x_usbout_callback(struct urb *urb); + static void +@@ -578,10 +586,17 @@ + * Call context: + * process (by design) + ----------------------------------------------------------------*/ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) + static void +-hfa384x_usb_defer(void *data) ++hfa384x_usb_defer(struct work_struct *work) ++{ ++ hfa384x_t *hw = container_of(work, hfa384x_t, usb_work); ++#else ++static void ++hfa384x_usb_defer(void *hw) + { + hfa384x_t *hw = data; ++#endif + struct net_device *netdev = hw->wlandev->netdev; + + DBFENTER; +@@ -711,8 +726,13 @@ + tasklet_init(&hw->completion_bh, + hfa384x_usbctlx_completion_task, + (unsigned long)hw); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) ++ INIT_WORK(&hw->link_bh, prism2sta_processing_defer); ++ INIT_WORK(&hw->usb_work, hfa384x_usb_defer); ++#else + INIT_WORK(&hw->link_bh, prism2sta_processing_defer, hw); + INIT_WORK(&hw->usb_work, hfa384x_usb_defer, hw); ++#endif + + init_timer(&hw->throttle); + hw->throttle.function = hfa384x_usb_throttlefn; +@@ -733,7 +753,11 @@ + hw->link_status = HFA384x_LINK_NOTCONNECTED; + hw->state = HFA384x_STATE_INIT; + ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) ++ INIT_WORK(&hw->commsqual_bh, prism2sta_com |
