[ar7] update acx-mac80211 to a newer snapshot and fix its compilation wrt new includes path

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20015 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Florian Fainelli 2010-03-06 12:22:41 +00:00
parent 7b851328e6
commit 1e0ccaa871
8 changed files with 176 additions and 371 deletions

View File

@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=acx-mac80211
PKG_REV:=11edba2
PKG_VERSION:=20080805
PKG_REV:=e7a55711
PKG_VERSION:=20100302
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=git://gitorious.org/acx-mac80211/mainline.git
PKG_SOURCE_URL:=git://gitorious.org/~oli1417/acx-mac80211/oli1417-clone.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=$(PKG_REV)
@ -68,6 +68,7 @@ define Build/Compile
$(PKG_EXTRA_KCONFIG) \
EXTRA_CFLAGS="$(PKG_EXTRA_CFLAGS)" \
LINUXINCLUDE="-I$(STAGING_DIR)/usr/include/mac80211 -I$(LINUX_DIR)/include \
-Iarch/$(LINUX_KARCH)/include \
-include linux/autoconf.h" \
V="$(V)" \
modules

View File

@ -1,11 +0,0 @@
--- a/Makefile
+++ b/Makefile
@@ -28,7 +28,7 @@ ifneq ($(KERNELRELEASE),)
obj-$(CONFIG_ACX_MAC80211) += acx-mac80211.o
acx-mac80211-obj-$(CONFIG_ACX_MAC80211_PCI) += pci.o
acx-mac80211-obj-$(CONFIG_ACX_MAC80211_USB) += usb.o
- acx-mac80211-objs := common.o $(acx-mac80211-obj-y)
+ acx-mac80211-objs := common.o $(acx-mac80211-obj-m)
else
# Otherwise we were called directly from the command line: the the kernel build
# system must be explicitly invoked.

View File

@ -0,0 +1,95 @@
Index: acx-mac80211-20100302/acx_func.h
===================================================================
--- acx-mac80211-20100302.orig/acx_func.h 2010-03-06 12:57:25.000000000 +0100
+++ acx-mac80211-20100302/acx_func.h 2010-03-06 12:58:10.000000000 +0100
@@ -704,9 +704,9 @@
void acx_free_modes(acx_device_t *adev);
int acx_i_op_tx(struct ieee80211_hw *ieee, struct sk_buff *skb);
int acx_e_op_add_interface(struct ieee80211_hw* ieee,
- struct ieee80211_if_init_conf *conf);
+ struct ieee80211_vif *vif);
void acx_e_op_remove_interface(struct ieee80211_hw* ieee,
- struct ieee80211_if_init_conf *conf);
+ struct ieee80211_vif *vif);
int acx_net_reset(struct ieee80211_hw *ieee);
int acx_e_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
struct ieee80211_vif *vif, struct ieee80211_sta *sta,
Index: acx-mac80211-20100302/common.c
===================================================================
--- acx-mac80211-20100302.orig/common.c 2010-03-06 12:57:31.000000000 +0100
+++ acx-mac80211-20100302/common.c 2010-03-06 12:59:51.000000000 +0100
@@ -4402,7 +4402,7 @@
}
int acx_e_op_add_interface(struct ieee80211_hw *ieee,
- struct ieee80211_if_init_conf *conf)
+ struct ieee80211_vif *vif)
{
acx_device_t *adev = ieee2adev(ieee);
unsigned long flags;
@@ -4414,14 +4414,14 @@
acx_sem_lock(adev);
acx_lock(adev, flags);
- if (conf->type == NL80211_IFTYPE_MONITOR) {
+ if (vif->type == NL80211_IFTYPE_MONITOR) {
adev->interface.monitor++;
} else {
if (adev->interface.operating)
goto out_unlock;
adev->interface.operating = 1;
- adev->interface.mac_addr = conf->mac_addr;
- adev->interface.type = conf->type;
+ adev->interface.mac_addr = vif->addr;
+ adev->interface.type = vif->type;
}
// adev->mode = conf->type;
@@ -4436,8 +4436,8 @@
printk(KERN_INFO "acx: Virtual interface added "
"(type: 0x%08X, MAC: %s)\n",
- conf->type,
- acx_print_mac(mac, conf->mac_addr));
+ vif->type,
+ acx_print_mac(mac, vif->addr));
out_unlock:
acx_unlock(adev, flags);
@@ -4448,7 +4448,7 @@
}
void acx_e_op_remove_interface(struct ieee80211_hw *hw,
- struct ieee80211_if_init_conf *conf)
+ struct ieee80211_vif *vif)
{
acx_device_t *adev = ieee2adev(hw);
@@ -4457,23 +4457,23 @@
FN_ENTER;
acx_sem_lock(adev);
- if (conf->type == NL80211_IFTYPE_MONITOR) {
+ if (vif->type == NL80211_IFTYPE_MONITOR) {
adev->interface.monitor--;
// assert(bcm->interface.monitor >= 0);
} else {
adev->interface.operating = 0;
}
- log(L_DEBUG, "acx: %s: interface.operating=%d, conf->type=%d\n",
+ log(L_DEBUG, "acx: %s: interface.operating=%d, vif->type=%d\n",
__func__,
- adev->interface.operating, conf->type);
+ adev->interface.operating, vif->type);
if (adev->initialized)
acx_s_select_opmode(adev);
log(L_ANY, "acx: Virtual interface removed: "
"type=%d, MAC=%s\n",
- conf->type, acx_print_mac(mac, conf->mac_addr));
+ vif->type, acx_print_mac(mac, vif->addr));
acx_sem_unlock(adev);

View File

@ -1,105 +0,0 @@
--- a/common.c
+++ b/common.c
@@ -1452,60 +1452,66 @@ void acx_free_modes(acx_device_t * adev)
// adev->modes = NULL;
}
-/*
-#define RATETAB_ENT(_rate, _rateid, _flags) \
- { \
- .rate = (_rate), \
- .val = (_rateid), \
- .val2 = (_rateid), \
- .flags = (_flags), \
- }
-*/
-
static struct ieee80211_rate acx_rates[] = {
{ .bitrate = 10, .hw_value = 0, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
{ .bitrate = 20, .hw_value = 1, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
{ .bitrate = 55, .hw_value = 2, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
{ .bitrate = 110, .hw_value = 3, .flags = IEEE80211_RATE_SHORT_PREAMBLE },
- { .bitrate = 60, .hw_value = 4, },
- { .bitrate = 90, .hw_value = 5, },
- { .bitrate = 120, .hw_value = 6, },
- { .bitrate = 180, .hw_value = 7, },
- { .bitrate = 240, .hw_value = 8, },
- { .bitrate = 360, .hw_value = 9, },
- { .bitrate = 480, .hw_value = 10, },
- { .bitrate = 540, .hw_value = 11, },
+ { .bitrate = 60, .hw_value = 4, .flags = 0 },
+ { .bitrate = 90, .hw_value = 5, .flags = 0 },
+ { .bitrate = 120, .hw_value = 6, .flags = 0 },
+ { .bitrate = 180, .hw_value = 7, .flags = 0 },
+ { .bitrate = 240, .hw_value = 8, .flags = 0 },
+ { .bitrate = 360, .hw_value = 9, .flags = 0 },
+ { .bitrate = 480, .hw_value = 10, .flags = 0 },
+ { .bitrate = 540, .hw_value = 11, .flags = 0 },
};
+#define CHAN4G(_channel, _freq, _flags) { \
+ .band = IEEE80211_BAND_2GHZ, \
+ .center_freq = (_freq), \
+ .hw_value = (_channel), \
+ .flags = (_flags), \
+ .max_antenna_gain = 0, \
+ .max_power = 30, \
+}
static struct ieee80211_channel channels[] = {
- { .center_freq = 2412, .hw_value = 1, },
- { .center_freq = 2417, .hw_value = 2, },
- { .center_freq = 2422, .hw_value = 3, },
- { .center_freq = 2427, .hw_value = 4, },
- { .center_freq = 2432, .hw_value = 5, },
- { .center_freq = 2437, .hw_value = 6, },
- { .center_freq = 2442, .hw_value = 7, },
- { .center_freq = 2447, .hw_value = 8, },
- { .center_freq = 2452, .hw_value = 9, },
- { .center_freq = 2457, .hw_value = 10, },
- { .center_freq = 2462, .hw_value = 11, },
- { .center_freq = 2467, .hw_value = 12, },
- { .center_freq = 2472, .hw_value = 13, },
- { .center_freq = 2484, .hw_value = 14, },
+ CHAN4G(1, 2412, 0),
+ CHAN4G(2, 2417, 0),
+ CHAN4G(3, 2422, 0),
+ CHAN4G(4, 2427, 0),
+ CHAN4G(5, 2432, 0),
+ CHAN4G(6, 2437, 0),
+ CHAN4G(7, 2442, 0),
+ CHAN4G(8, 2447, 0),
+ CHAN4G(9, 2452, 0),
+ CHAN4G(10, 2457, 0),
+ CHAN4G(11, 2462, 0),
+ CHAN4G(12, 2467, 0),
+ CHAN4G(13, 2472, 0),
+ CHAN4G(14, 2484, 0),
};
+#undef CHAN4G
+
+#define acx_b_ratetable (acx_rates + 0)
+#define acx_b_ratetable_size 4
+#define acx_g_ratetable (acx_rates + 0)
+#define acx_g_ratetable_size 12
static struct ieee80211_supported_band g_band_2GHz = {
+ .band = IEEE80211_BAND_2GHZ,
.channels = channels,
.n_channels = ARRAY_SIZE(channels),
- .bitrates = acx_rates,
- .n_bitrates = 12,
+ .bitrates = acx_b_ratetable,
+ .n_bitrates = acx_g_ratetable_size,
};
static struct ieee80211_supported_band b_band_2GHz = {
+ .band = IEEE80211_BAND_2GHZ,
.channels = channels,
.n_channels = ARRAY_SIZE(channels),
- .bitrates = acx_rates,
- .n_bitrates = 4,
+ .bitrates = acx_g_ratetable,
+ .n_bitrates = acx_b_ratetable_size,
};
int acx_setup_modes(acx_device_t * adev)

View File

@ -0,0 +1,77 @@
Index: acx-mac80211-20100302/acx_func.h
===================================================================
--- acx-mac80211-20100302.orig/acx_func.h 2010-03-06 13:01:36.000000000 +0100
+++ acx-mac80211-20100302/acx_func.h 2010-03-06 13:01:56.000000000 +0100
@@ -714,7 +714,6 @@
int acx_e_op_config(struct ieee80211_hw *hw, u32 changed);
void acx_e_op_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif, struct ieee80211_bss_conf *info, u32 changed);
-int acx_e_op_get_tx_stats(struct ieee80211_hw* ieee, struct ieee80211_tx_queue_stats *stats);
int acx_e_conf_tx(struct ieee80211_hw* ieee, u16 queue,
const struct ieee80211_tx_queue_params *params);
//int acx_passive_scan(struct net_device *net_dev, int state, struct ieee80211_scan_conf *conf);
Index: acx-mac80211-20100302/common.c
===================================================================
--- acx-mac80211-20100302.orig/common.c 2010-03-06 13:01:38.000000000 +0100
+++ acx-mac80211-20100302/common.c 2010-03-06 13:02:37.000000000 +0100
@@ -4662,24 +4662,6 @@
return;
}
-int acx_e_op_get_tx_stats(struct ieee80211_hw *hw,
- struct ieee80211_tx_queue_stats *stats)
-{
- acx_device_t *adev = ieee2adev(hw);
- int err = -ENODEV;
-
- FN_ENTER;
- acx_sem_lock(adev);
-
- stats->len = 0;
- stats->limit = TX_CNT;
- stats->count = 0;
-
- acx_sem_unlock(adev);
- FN_EXIT0;
- return err;
-}
-
int acx_e_conf_tx(struct ieee80211_hw *hw,
u16 queue, const struct ieee80211_tx_queue_params *params)
{
Index: acx-mac80211-20100302/mem.c
===================================================================
--- acx-mac80211-20100302.orig/mem.c 2010-03-06 13:01:46.000000000 +0100
+++ acx-mac80211-20100302/mem.c 2010-03-06 13:02:28.000000000 +0100
@@ -2321,7 +2321,6 @@
.bss_info_changed = acx_e_op_bss_info_changed,
.set_key = acx_e_op_set_key,
.get_stats = acx_e_op_get_stats,
- .get_tx_stats = acx_e_op_get_tx_stats,
};
Index: acx-mac80211-20100302/pci.c
===================================================================
--- acx-mac80211-20100302.orig/pci.c 2010-03-06 13:01:40.000000000 +0100
+++ acx-mac80211-20100302/pci.c 2010-03-06 13:02:18.000000000 +0100
@@ -1482,7 +1482,6 @@
.bss_info_changed = acx_e_op_bss_info_changed,
.set_key = acx_e_op_set_key,
.get_stats = acx_e_op_get_stats,
- .get_tx_stats = acx_e_op_get_tx_stats,
};
Index: acx-mac80211-20100302/usb.c
===================================================================
--- acx-mac80211-20100302.orig/usb.c 2010-03-06 13:01:44.000000000 +0100
+++ acx-mac80211-20100302/usb.c 2010-03-06 13:02:22.000000000 +0100
@@ -757,7 +757,6 @@
.bss_info_changed = acx_e_op_bss_info_changed,
.set_key = acx_e_op_set_key,
.get_stats = acx_e_op_get_stats,
- .get_tx_stats = acx_e_op_get_tx_stats,
};
/***********************************************************************

View File

@ -1,91 +0,0 @@
--- a/acx_mac80211.h
+++ b/acx_mac80211.h
@@ -36,7 +36,7 @@ struct acx_interface {
/* Current BSSID (if any). */
u8 *bssid;
- /* Interface type. (IEEE80211_IF_TYPE_XXX) */
+ /* Interface type. (NL80211_IFTYPE_XXX) */
int type;
/* Counter of active monitor interfaces. */
int monitor;
--- a/common.c
+++ b/common.c
@@ -4111,28 +4111,28 @@ static void acx_s_select_opmode(acx_devi
if (adev->interface.operating) {
switch (adev->interface.type) {
- case IEEE80211_IF_TYPE_AP:
+ case NL80211_IFTYPE_AP:
if (adev->mode != ACX_MODE_3_AP)
{
adev->mode = ACX_MODE_3_AP;
changed = 1;
}
break;
- case IEEE80211_IF_TYPE_IBSS:
+ case NL80211_IFTYPE_ADHOC:
if (adev->mode != ACX_MODE_0_ADHOC)
{
adev->mode = ACX_MODE_0_ADHOC;
changed = 1;
}
break;
- case IEEE80211_IF_TYPE_STA:
+ case NL80211_IFTYPE_STATION:
if (adev->mode != ACX_MODE_2_STA)
{
adev->mode = ACX_MODE_2_STA;
changed = 1;
}
break;
- case IEEE80211_IF_TYPE_WDS:
+ case NL80211_IFTYPE_WDS:
default:
if (adev->mode != ACX_MODE_OFF)
{
@@ -4142,7 +4142,7 @@ static void acx_s_select_opmode(acx_devi
break;
}
} else {
- if (adev->interface.type == IEEE80211_IF_TYPE_MNTR)
+ if (adev->interface.type == NL80211_IFTYPE_MONITOR)
{
if (adev->mode != ACX_MODE_MONITOR)
{
@@ -4186,7 +4186,7 @@ int acx_add_interface(struct ieee80211_h
FN_ENTER;
acx_lock(adev, flags);
- if (conf->type == IEEE80211_IF_TYPE_MNTR) {
+ if (conf->type == NL80211_IFTYPE_MONITOR) {
adev->interface.monitor++;
} else {
if (adev->interface.operating)
@@ -4232,7 +4232,7 @@ void acx_remove_interface(struct ieee802
FN_ENTER;
acx_sem_lock(adev);
- if (conf->type == IEEE80211_IF_TYPE_MNTR) {
+ if (conf->type == NL80211_IFTYPE_MONITOR) {
adev->interface.monitor--;
// assert(bcm->interface.monitor >= 0);
} else {
@@ -4386,7 +4386,7 @@ extern int acx_config_interface(struct i
acx_lock(adev, flags);
- if ((vif->type != IEEE80211_IF_TYPE_MNTR)
+ if ((vif->type != NL80211_IFTYPE_MONITOR)
&& (adev->vif == vif)) {
if (conf->bssid)
{
@@ -4394,7 +4394,7 @@ extern int acx_config_interface(struct i
MAC_COPY(adev->bssid,conf->bssid);
}
}
- if ((vif->type == IEEE80211_IF_TYPE_AP)
+ if ((vif->type == NL80211_IFTYPE_AP)
&& (adev->vif == vif)) {
if ((conf->ssid_len > 0) && conf->ssid)
{

View File

@ -1,91 +0,0 @@
--- a/acx_func.h
+++ b/acx_func.h
@@ -619,9 +619,10 @@ int acx_net_set_key(struct ieee80211_hw
enum set_key_cmd cmd,
const u8 *local_addr, const u8 *addr,
struct ieee80211_key_conf *key);
-extern int acx_config_interface(struct ieee80211_hw* ieee,
+void acx_config_interface(struct ieee80211_hw* ieee,
struct ieee80211_vif *vif,
- struct ieee80211_if_conf *conf);
+ struct ieee80211_bss_conf *info,
+ u32 changes);
int acx_net_config(struct ieee80211_hw* ieee, struct ieee80211_conf *conf);
int acx_net_get_tx_stats(struct ieee80211_hw* ieee, struct ieee80211_tx_queue_stats *stats);
int acx_net_conf_tx(struct ieee80211_hw* ieee, u16 queue,
--- a/common.c
+++ b/common.c
@@ -4370,9 +4370,10 @@ int acx_net_config(struct ieee80211_hw *
**
*/
-extern int acx_config_interface(struct ieee80211_hw* ieee,
+void acx_config_interface(struct ieee80211_hw* ieee,
struct ieee80211_vif *vif,
- struct ieee80211_if_conf *conf)
+ struct ieee80211_bss_conf *info,
+ u32 changes)
{
acx_device_t *adev = ieee2adev(ieee);
unsigned long flags;
@@ -4388,22 +4389,22 @@ extern int acx_config_interface(struct i
if ((vif->type != NL80211_IFTYPE_MONITOR)
&& (adev->vif == vif)) {
- if (conf->bssid)
+ if (info->bssid)
{
- adev->interface.bssid = conf->bssid;
- MAC_COPY(adev->bssid,conf->bssid);
+ adev->interface.bssid = info->bssid;
+ MAC_COPY(adev->bssid, info->bssid);
}
}
if ((vif->type == NL80211_IFTYPE_AP)
&& (adev->vif == vif)) {
- if ((conf->ssid_len > 0) && conf->ssid)
+ if (info->bssid)
{
- adev->essid_len = conf->ssid_len;
- memcpy(adev->essid, conf->ssid, conf->ssid_len);
+ adev->essid_len = ETH_ALEN;
+ memcpy(adev->essid, info->bssid, ETH_ALEN);
SET_BIT(adev->set_mask, SET_TEMPLATES);
}
}
- if (conf->changed & IEEE80211_IFCC_BEACON)
+ if (changes & BSS_CHANGED_BSSID)
{
adev->beacon_interval = DEFAULT_BEACON_INTERVAL;
adev->beacon_cache = ieee80211_beacon_get(ieee, vif);
@@ -4418,7 +4419,7 @@ extern int acx_config_interface(struct i
err = 0;
err_out:
FN_EXIT1(err);
- return err;
+ return;
}
/**
--- a/pci.c
+++ b/pci.c
@@ -1469,7 +1469,7 @@ static const struct ieee80211_ops acxpci
.configure_filter = acx_i_set_multicast_list,
.stop = acxpci_e_close,
.config = acx_net_config,
- .config_interface = acx_config_interface,
+ .bss_info_changed = acx_config_interface,
.set_key = acx_net_set_key,
.get_stats = acx_e_get_stats,
.get_tx_stats = acx_net_get_tx_stats,
--- a/usb.c
+++ b/usb.c
@@ -741,7 +741,7 @@ static const struct ieee80211_ops acxusb
.configure_filter = acx_i_set_multicast_list,
.stop = acxusb_e_close,
.config = acx_net_config,
- .config_interface = acx_config_interface,
+ .bss_info_changed = acx_config_interface,
.set_key = acx_net_set_key,
.get_stats = acx_e_get_stats,
.get_tx_stats = acx_net_get_tx_stats,

View File

@ -1,70 +0,0 @@
Index: acx-mac80211-20080805/acx_func.h
===================================================================
--- acx-mac80211-20080805.orig/acx_func.h 2009-05-26 20:58:10.000000000 +0200
+++ acx-mac80211-20080805/acx_func.h 2009-05-26 20:58:11.000000000 +0200
@@ -623,7 +623,7 @@
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
u32 changes);
-int acx_net_config(struct ieee80211_hw* ieee, struct ieee80211_conf *conf);
+int acx_net_config(struct ieee80211_hw* ieee, u32 changed);
int acx_net_get_tx_stats(struct ieee80211_hw* ieee, struct ieee80211_tx_queue_stats *stats);
int acx_net_conf_tx(struct ieee80211_hw* ieee, u16 queue,
const struct ieee80211_tx_queue_params *params);
Index: acx-mac80211-20080805/common.c
===================================================================
--- acx-mac80211-20080805.orig/common.c 2009-05-26 20:58:10.000000000 +0200
+++ acx-mac80211-20080805/common.c 2009-05-26 20:58:11.000000000 +0200
@@ -4300,9 +4300,10 @@
** Derived from mac80211 code, p54, bcm43xx_mac80211
**
*/
-int acx_net_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf)
+int acx_net_config(struct ieee80211_hw *hw, u32 changed)
{
acx_device_t *adev = ieee2adev(hw);
+ struct ieee80211_conf *conf = &hw->conf;
unsigned long flags;
FN_ENTER;
Index: acx-mac80211-20080805/pci.c
===================================================================
--- acx-mac80211-20080805.orig/pci.c 2009-05-26 20:58:10.000000000 +0200
+++ acx-mac80211-20080805/pci.c 2009-05-30 20:44:29.000000000 +0200
@@ -3105,7 +3105,7 @@
/* let chip do RTS/CTS handshaking before sending
* in case packet size exceeds threshold */
- if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS)
+ if (info->flags & IEEE80211_TX_RC_USE_RTS_CTS)
SET_BIT(Ctl2_8, DESC_CTL2_RTS);
else
CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
@@ -3120,7 +3120,7 @@
/* put_txcr(adev, txdesc, clt, rate_cur); deprecated by mac80211 */
txdesc->total_length = cpu_to_le16(len);
- wlhdr_len = ieee80211_get_hdrlen(le16_to_cpu(wireless_header->frame_control));
+ wlhdr_len = ieee80211_hdrlen(le16_to_cpu(wireless_header->frame_control));
hostdesc2->length = cpu_to_le16(len - wlhdr_len);
/*
if (!ieeectl->do_not_encrypt && ieeectl->key_idx>= 0)
@@ -3444,8 +3444,8 @@
/* And finally report upstream */
if (hostdesc)
{
- info->status.excessive_retries = rts_failures;
- info->status.retry_count = ack_failures;
+ //info->status.excessive_retries = rts_failures;
+ //info->status.retry_count = ack_failures;
ieee80211_tx_status(adev->ieee, hostdesc->skb);
}
/* update pointer for descr to be cleaned next */
@@ -4303,6 +4303,7 @@
}
acx_init_task_scheduler(adev);
+ adev->ieee->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
result = ieee80211_register_hw(adev->ieee);
if (OK != result) {
printk("acx: ieee80211_register_hw() FAILED: %d\n", result);