* [PATCH] compat-2.6: adding notes on installing to non-running kernel
From: Hin-Tak Leung @ 2009-09-28 19:08 UTC (permalink / raw)
To: linux-wireless, lrodriguez; +Cc: Hin-Tak Leung, Hin-Tak Leung
adding notes on installing to non-running kernel
Signed-off-by: Hin-Tak Leung <htl10@users.sourceforge.net>
---
README | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/README b/README
index 7c6c2cd..380fc5a 100644
--- a/README
+++ b/README
@@ -142,6 +142,15 @@ compat-wireless-2.6 drivers for it you can use this syntax:
make KLIB=/home/mcgrof/kernels/linux-2.6.23.9 KLIB_BUILD=/home/mcgrof/kernels/linux-2.6.23.9
+If you have a kernel installed, which is not your currently running kernel (e.g. via
+distro updates; plus its corresponding kernel-dev package), you can use this syntax:
+
+make KLIB=/lib/modules/2.6.30.6-53.fc11.x86_64
+
+ and to install to your system's root path for the non-running kernel:
+
+make KLIB=/lib/modules/2.6.30.6-53.fc11.x86_64 KMODPATH_ARG='INSTALL_MOD_PATH=' install
+
Bugs
-----
--
1.6.2.5
^ permalink raw reply related
* [PATCH] compat-2.6: adding driver-select script support for rtl818x
From: Hin-Tak Leung @ 2009-09-28 19:08 UTC (permalink / raw)
To: linux-wireless, lrodriguez; +Cc: Hin-Tak Leung, Hin-Tak Leung
adding driver-select script support for rtl818x
Signed-off-by: Hin-Tak Leung <htl10@users.sourceforge.net>
---
scripts/driver-select | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/scripts/driver-select b/scripts/driver-select
index e0d7305..dcb777c 100755
--- a/scripts/driver-select
+++ b/scripts/driver-select
@@ -44,6 +44,7 @@ function usage {
echo -e "\t${CYAN}ath${NORMAL} < ${PURPLE} ath5k ath9k ar9170 ${NORMAL}>"
echo -e "\t${CYAN}intel${NORMAL} < ${PURPLE} iwl3945 iwlagn ipw2100 ipw2200 ${NORMAL}>"
echo -e "\t${CYAN}iwlwifi${NORMAL} < ${PURPLE} iwl3945 iwlagn ${NORMAL}>"
+ echo -e "\t${CYAN}rtl818x${NORMAL} < ${PURPLE} rtl8180 rtl8187 ${NORMAL}>"
echo -e "\t${CYAN}wl12xx${NORMAL} < ${PURPLE} wl1251 (SPI and SDIO) wl1271 ${NORMAL}>"
echo -e "Restoring compat-wireless:"
@@ -127,6 +128,13 @@ function disable_var_01 {
disable_var
}
+function disable_var_02 {
+ #var_01 with eeprom not disabled
+ disable_lib80211
+ disable_ssb
+ disable_usbnet
+}
+
function select_ath_driver
{
backup_file $ATH_MAKEFILE
@@ -227,6 +235,10 @@ case $1 in
select_driver CONFIG_ATH_COMMON
select_ath_driver CONFIG_AR9170_USB
;;
+ rtl818x)
+ select_drivers CONFIG_RTL8180 CONFIG_RTL8187
+ disable_var_02
+ ;;
zd1211rw)
select_driver CONFIG_ZD1211RW
disable_var_01
--
1.6.2.5
^ permalink raw reply related
* Re: Problems with "cfg80211: fix SME connect" commit
From: Johannes Berg @ 2009-09-28 18:55 UTC (permalink / raw)
To: Albert Herranz; +Cc: Holger Schurig, linville, linux-wireless
In-Reply-To: <29413.68229.qm@web28307.mail.ukl.yahoo.com>
[-- Attachment #1: Type: text/plain, Size: 514 bytes --]
On Mon, 2009-09-28 at 11:04 -0700, Albert Herranz wrote:
> [ 15.624121] wlan1: starting authentication with 00:12:17:15:e7:79
> [ 15.630717] wlan1: deauthenticating from 00:12:17:15:e7:79 by local choice (reason=3)
> [ 15.645151] wlan1: starting authentication with 00:12:17:15:e7:79
> I'm using wpa_supplicant _without_ NM.
Yeah, I since figured out why that's happening, and it's not so strange
after all. Shouldn't be a big deal. At least I see you're getting
connected too now.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* Re: [PATCH] ar9170: implement frequency calibration for one-stage/openfw
From: John W. Linville @ 2009-09-28 18:41 UTC (permalink / raw)
To: Joerg Albert
Cc: Andrew Morton, Christian Lamparter, linux-wireless,
David S. Miller
In-Reply-To: <4AB4CCD0.5080003@gmx.de>
On Sat, Sep 19, 2009 at 02:21:36PM +0200, Joerg Albert wrote:
> On 09/19/2009 02:02 AM, Andrew Morton wrote:
> > On Thu, 3 Sep 2009 20:25:31 +0200
> > Christian Lamparter <chunkeey@googlemail.com> wrote:
> >
> >> This patch ports some code from the vendor driver, which is
> >> supposed to upload the right calibration values for the
> >> chosen frequency.
> >>
> >> In theory, this should give a better range and throughput
> >> for all users with the open, or one-stage firmware.
> >>
> >> ...
> >>
> >> + for (i = 0; i < 76; i++) {
> >> + u32 phy_data;
> >> + u8 tmp;
> >> +
> >> + if (i < 25) {
> >> + tmp = ar9170_interpolate_val(i, &pwrs[0][0],
> >> + &vpds[0][0]);
> >> + } else {
> >> + tmp = ar9170_interpolate_val(i - 12,
> >> + &pwrs[1][0],
> >> + &vpds[1][0]);
> >> + }
> >> +
> >> + phy_data |= tmp << ((i & 3) << 3);
> >
> > Clearly buggy and the compiler warns. The value of phy_data is unknown
> > here.
> >
> > How did this get all the way into mainline?
>
> Strangely it compiles without any warning for me with the latest linux-wireless:
That is strange -- no warning here (F-11) either...
Christian, care to propose a patch? Or maybe just something like this?
diff --git a/drivers/net/wireless/ath/ar9170/phy.c b/drivers/net/wireless/ath/ar9170/phy.c
index b3e5cf3..49c10cb 100644
--- a/drivers/net/wireless/ath/ar9170/phy.c
+++ b/drivers/net/wireless/ath/ar9170/phy.c
@@ -1220,7 +1220,7 @@ static int ar9170_set_freq_cal_data(struct ar9170 *ar,
&vpds[1][0]);
}
- phy_data |= tmp << ((i & 3) << 3);
+ phy_data = tmp << ((i & 3) << 3);
if ((i & 3) == 3) {
ar9170_regwrite(0x1c6280 + chain * 0x1000 +
(i & ~3), phy_data);
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply related
* Re: Makefile ref to non-existent CONFIG_ATHEROS_AR71XX
From: John W. Linville @ 2009-09-28 18:29 UTC (permalink / raw)
To: Florian Fainelli; +Cc: Robert P. J. Day, linux-wireless, ath9k-devel
In-Reply-To: <200909182004.54398.florian@openwrt.org>
On Fri, Sep 18, 2009 at 08:04:51PM +0200, Florian Fainelli wrote:
> Hi Robert,
>
> Le vendredi 18 septembre 2009 16:01:25, Robert P. J. Day a écrit :
> > searching for Makefile references to Kconfig variables that don't
> > exist, and i find:
> >
> > ===== ATHEROS_AR71XX =====
> > ./drivers/net/wireless/ath/ath9k/Makefile:ath9k-$(CONFIG_ATHEROS_AR71XX) +=
> > ahb.o
>
> We need it in OpenWrt and plan to send Atheros AR71xx SoC support soon, do not
> consider this for removal. Thanks
Sure, fine...estimate when it will arrive?
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: Problems with "cfg80211: fix SME connect" commit
From: Albert Herranz @ 2009-09-28 18:04 UTC (permalink / raw)
To: Johannes Berg; +Cc: Holger Schurig, linville, linux-wireless
In-Reply-To: <1253779538.3868.14.camel@johannes.local>
Johannes Berg wrote:
> On Mon, 2009-09-21 at 18:11 +0200, Albert Herranz wrote:
>
>> Adding back "cfg80211: fix SME connect" and applying "cfg80211: don't
>> overwrite privacy setting" fixes the connection issue, but with a
>> introduces a small difference vs the previous working version.
>> There is now an extra "deauthenticating by local choice (reason=3)"
>> message in the logs.
>
>> [ 13.969153] b43-phy0 debug: Adding Interface type 2
>> [ 16.679249] wlan1: direct probe to AP 00:12:17:15:e7:79 (try 1)
>
>> * master-20090916 + "cfg80211: don't overwrite privacy setting"
>
>> [ 13.218613] b43-phy0 debug: Adding Interface type 2
>> [ 15.832582] wlan1: deauthenticating by local choice (reason=3)
>> [ 16.131599] wlan1: direct probe to AP 00:12:17:15:e7:79 (try 1)
>
> Very odd. Can you edit the deauthenticating message to show the
> BSSID/MAC address?
>
> johannes
Hi,
Sorry if this comes too late (I was on vacation).
Here's the output showing the BSSID/MAC address for completeness.
[ 1.307985] b43-sdio mmc1:0001:1: Chip ID 14e4:4318
[ 1.344244] b43-phy0: Broadcom 4318 WLAN found (core revision 9)
[ 1.372627] b43-phy0 debug: Found PHY: Analog 3, Type 2, Revision 7
[ 1.377416] b43-phy0 debug: Found Radio: Manuf 0x17F, Version 0x2050, Revision 8
[ 1.417302] phy0: Selected rate control algorithm 'minstrel'
[ 4.462416] udev: renamed network interface wlan0 to wlan1
[ 11.064949] b43 ssb0:0: firmware: requesting b43/ucode5.fw
[ 11.118177] b43 ssb0:0: firmware: requesting b43-open/ucode5.fw
[ 11.197385] b43 ssb0:0: firmware: requesting b43-open/pcm5.fw
[ 11.268949] b43 ssb0:0: firmware: requesting b43-open/b0g0initvals5.fw
[ 11.347623] b43 ssb0:0: firmware: requesting b43-open/b0g0bsinitvals5.fw
[ 12.353406] b43-phy0: Loading OpenSource firmware version 410.31754
[ 12.359142] b43-phy0: Hardware crypto acceleration not supported by firmware
[ 12.369827] b43-phy0: QoS not supported by firmware
[ 12.741767] b43-phy0 debug: Chip initialized
[ 12.757540] b43-phy0 debug: PIO initialized
[ 12.764455] b43-phy0 debug: QoS disabled
[ 12.945116] b43-phy0 debug: Wireless interface started
[ 13.053151] b43-phy0 debug: Adding Interface type 2
[ 15.624121] wlan1: starting authentication with 00:12:17:15:e7:79
[ 15.630717] wlan1: deauthenticating from 00:12:17:15:e7:79 by local choice (reason=3)
[ 15.645151] wlan1: starting authentication with 00:12:17:15:e7:79
[ 15.665811] wlan1: direct probe to AP 00:12:17:15:e7:79 (try 1)
[ 15.681132] wlan1: direct probe responded
[ 15.687261] wlan1: authenticate with AP 00:12:17:15:e7:79 (try 1)
[ 15.701105] wlan1: authenticated
[ 15.707860] wlan1: starting association with 00:12:17:15:e7:79
[ 15.713877] wlan1: associate with AP 00:12:17:15:e7:79 (try 1)
[ 15.726949] wlan1: RX AssocResp from 00:12:17:15:e7:79 (capab=0x431 status=0 aid=1)
[ 15.740953] wlan1: associated
I'm using wpa_supplicant _without_ NM.
Cheers,
Albert
^ permalink raw reply
* Re: [RFC] libertas: first stab at cfg80211 support
From: Holger Schurig @ 2009-09-28 15:24 UTC (permalink / raw)
To: libertas-dev; +Cc: linux-wireless, Dan Williams
In-Reply-To: <200909281321.21600.h.schurig@mn-solutions.de>
Hmm, I see two problems with my code:
> +struct wireless_dev *lbs_wdev_alloc(int sizeof_priv, struct
device *dev)
> +{
...
> + wdev->wiphy = wiphy_new(&lbs_cfg80211_ops,
> + sizeof(struct lbs_private) + sizeof_priv);
...
and later:
> + wdev = lbs_wdev_alloc(sizeof(struct lbs_private), dmdev);
That's rubbish, I now allocate "sizeof(lbs_private)" bytes twice.
Another thing is that it might be necessary to unbundle the
call of "wiphy_new()" and wiphy_register().
I need lbs_private allocated and usable, e.g. in
lbs_start_card().
Later, in lbs_start_card(), when I query the firmware about it's
capabilites I know enought to populate wiphy->bands. Only then
should I call wiphy_register().
--
http://www.holgerschurig.de
^ permalink raw reply
* Re: [RFC] libertas: first stab at cfg80211 support
From: Holger Schurig @ 2009-09-28 15:07 UTC (permalink / raw)
To: Johannes Berg; +Cc: libertas-dev, linux-wireless, Dan Williams
In-Reply-To: <1254149857.3151.5.camel@johannes.local>
> It might make sense to support adding interfaces with nl80211,
> since apparently it has mesh and monitor interfaces.
Yes, this will eventually be added.
In the end I'd like to have all WEXT code in it's own file or
#ifdef'd and I'd like to have a working libertas_cs and
libertas_usb that don't need WEXT at all. But that will take
considerable time :-) One step towards this goal will be
monitor mode via NL80211.
Mesh-support via NL80211 must be done by someone else, I don't
have neither the knowledge, mesh nodes nor a mesh-capable
firmware. And I don't really care about mesh. So if no one else
does it, the CFG80211-only libertas-driver won't have mesh at
all.
--
M&N Solutions GmbH Ein Unternehmen der Datagroup AG
Holger Schurig
Raiffeisenstr. 10
61191 Rosbach
Tel: 06003/9141-15 Fax 06003/9141-49
http://www.mn-solutions.de/
Handelsregister Friedberg, HRB 5903
Geschäftsführer: P.Schrittenlocher
^ permalink raw reply
* Re: [RFC] libertas: first stab at cfg80211 support
From: Johannes Berg @ 2009-09-28 14:57 UTC (permalink / raw)
To: Holger Schurig; +Cc: libertas-dev, linux-wireless, Dan Williams
In-Reply-To: <200909281654.08859.h.schurig@mn-solutions.de>
[-- Attachment #1: Type: text/plain, Size: 1794 bytes --]
On Mon, 2009-09-28 at 16:54 +0200, Holger Schurig wrote:
> Yes, it has three netdevs, but they aren't all setup at
> card-initialization time.
>
>
> Some details: "struct private" contains:
>
> struct net_device *dev;
> struct net_device *mesh_dev; /* Virtual device */
> struct net_device *rtap_net_dev;
>
> The old code did have an
>
> dev = alloc_etherdev(sizeof(struct lbs_private));"
>
> and the other two netdevs got initialized at some other location:
>
> * priv->lbs_add_mesh() in lbs_add_mesh()
> via "alloc_netdev(0, "msh%d", ether_setup)". And lbs_add_mesh()
> is called only when the hardware supports this.
> * rtap_net_dev is created in lbs_add_rtap() and again I haven't
> change the creation of this thingy.
>
> Please note that when I'm using the card in station mode, both
> mesh_dev and rtap_net_dev are NULL. My firmware doesn't have
> mesh code, and only when I set the card into monitor mode will
> the rtap_net_dev created.
>
>
> I kept this behavior for now: at initialzation I call:
>
> wdev = lbs_wdev_alloc(sizeof(struct lbs_private), dmdev);
> wdev->xyz = initialization;
> ...
> dev = alloc_netdev()
>
>
> For me it's not clear if I should create wdev's for mesh_dev and
> rtap_net_dev as well. However, I'm not able to check the mesh
> code anyway: my firmware doesn't support this. And for
> rtap_net_dev I'm not sure if this shouldn't be handled
> differently in a cfg80211 scenario, e.g. via
> lbs_cfg80211_change_iface().
Interesting.
> A hint of what I should then would be most welcome :-)
It might make sense to support adding interfaces with nl80211, since
apparently it has mesh and monitor interfaces.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* Re: [RFC] libertas: first stab at cfg80211 support
From: Holger Schurig @ 2009-09-28 14:54 UTC (permalink / raw)
To: Johannes Berg; +Cc: libertas-dev, linux-wireless, Dan Williams
In-Reply-To: <1254144714.3151.1.camel@johannes.local>
> This seems wrong -- doesn't libertas have multiple netdevs?
> You're treating wdev == wiphy it seems here, rather than wdev
> == netdev.
Yes, it has three netdevs, but they aren't all setup at
card-initialization time.
Some details: "struct private" contains:
struct net_device *dev;
struct net_device *mesh_dev; /* Virtual device */
struct net_device *rtap_net_dev;
The old code did have an
dev = alloc_etherdev(sizeof(struct lbs_private));"
and the other two netdevs got initialized at some other location:
* priv->lbs_add_mesh() in lbs_add_mesh()
via "alloc_netdev(0, "msh%d", ether_setup)". And lbs_add_mesh()
is called only when the hardware supports this.
* rtap_net_dev is created in lbs_add_rtap() and again I haven't
change the creation of this thingy.
Please note that when I'm using the card in station mode, both
mesh_dev and rtap_net_dev are NULL. My firmware doesn't have
mesh code, and only when I set the card into monitor mode will
the rtap_net_dev created.
I kept this behavior for now: at initialzation I call:
wdev = lbs_wdev_alloc(sizeof(struct lbs_private), dmdev);
wdev->xyz = initialization;
...
dev = alloc_netdev()
For me it's not clear if I should create wdev's for mesh_dev and
rtap_net_dev as well. However, I'm not able to check the mesh
code anyway: my firmware doesn't support this. And for
rtap_net_dev I'm not sure if this shouldn't be handled
differently in a cfg80211 scenario, e.g. via
lbs_cfg80211_change_iface().
A hint of what I should then would be most welcome :-)
--
M&N Solutions GmbH Ein Unternehmen der Datagroup AG
Holger Schurig
Raiffeisenstr. 10
61191 Rosbach
Tel: 06003/9141-15 Fax 06003/9141-49
http://www.mn-solutions.de/
Handelsregister Friedberg, HRB 5903
Geschäftsführer: P.Schrittenlocher
^ permalink raw reply
* Re: Problems with "cfg80211: fix SME connect" commit
From: Johannes Berg @ 2009-09-28 14:41 UTC (permalink / raw)
To: Hin-Tak Leung; +Cc: Albert Herranz, Holger Schurig, linville, linux-wireless
In-Reply-To: <3ace41890909261657s53b38a2fl7939740fc53dd594@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 848 bytes --]
On Sun, 2009-09-27 at 00:57 +0100, Hin-Tak Leung wrote:
> I suppose (together with some of the newly added printk you mentioned
> could be removed in the final version) the dmesg messages are somewhat
> confusing, because as a user, I would rather have a deauth message
> that's actually associated with a user action (e.g. if I switch AP or
> rfkill). Is it possible to distinguish situation where a user action
> is involved versus one that isn't? or is the distinction between any
> consequence of 'user-action' vs wpa_supplicant doing-it-on-its-own too
> much buried down in the layers?
Yeah, it'd be nice to avoid that completely. Or even just avoid telling
the driver, maybe with some delay akin iwcommit. Alas, I haven't looked
at it yet and right now it seems to just be a message (and possibly a
deauth frame)
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* Re: [bisected] Wireless regression in 2.6.32-git
From: John W. Linville @ 2009-09-28 13:59 UTC (permalink / raw)
To: Johannes Berg
Cc: Arjan van de Ven, Hugh Dickins, netdev, linux-kernel,
linux-wireless
In-Reply-To: <1254077199.6583.8.camel@johannes.local>
On Sun, Sep 27, 2009 at 08:46:39PM +0200, Johannes Berg wrote:
> On Sun, 2009-09-27 at 20:45 +0200, Arjan van de Ven wrote:
>
> > > Subject: cfg80211: don't set privacy w/o key
> > >
> > > When wpa_supplicant is used to connect to open networks,
> > > it causes the wdev->wext.keys to point to key memory, but
> > > that key memory is all empty. Only use privacy when there
> > > is a default key to be used.
> >
> >
> > indeed it does
> >
> > can we get this into mainline soon ?
>
> John's on his way home I suppose.
Yes, I'll get to it today -- sorry for the delays related to my travel!
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: [RFC] libertas: first stab at cfg80211 support
From: Johannes Berg @ 2009-09-28 13:31 UTC (permalink / raw)
To: Holger Schurig; +Cc: libertas-dev, linux-wireless, Dan Williams
In-Reply-To: <200909281321.21600.h.schurig@mn-solutions.de>
[-- Attachment #1: Type: text/plain, Size: 2068 bytes --]
On Mon, 2009-09-28 at 13:21 +0200, Holger Schurig wrote:
> Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
>
> ---
>
> This patch currently just create a wdev, so you can do "iw list".
>
> I'd like to get comments if the position where I create/destroy
> the wdev makes sense.
>
> Index: linux-wl/drivers/net/wireless/Kconfig
> ===================================================================
> --- linux-wl.orig/drivers/net/wireless/Kconfig 2009-09-28 12:06:02.000000000 +0200
> +++ linux-wl/drivers/net/wireless/Kconfig 2009-09-28 12:06:30.000000000 +0200
> @@ -138,6 +138,7 @@ config LIBERTAS
> depends on WLAN_80211
> select WIRELESS_EXT
> select LIB80211
> + select CFG80211
> select FW_LOADER
> ---help---
> A library for Marvell Libertas 8xxx devices.
> Index: linux-wl/drivers/net/wireless/libertas/Makefile
> ===================================================================
> --- linux-wl.orig/drivers/net/wireless/libertas/Makefile 2009-09-28 12:06:02.000000000 +0200
> +++ linux-wl/drivers/net/wireless/libertas/Makefile 2009-09-28 12:06:30.000000000 +0200
> @@ -1,5 +1,5 @@
> libertas-objs := main.o wext.o rx.o tx.o cmd.o cmdresp.o scan.o 11d.o \
> - debugfs.o persistcfg.o ethtool.o assoc.o
> + debugfs.o persistcfg.o ethtool.o assoc.o cfg.o
>
> usb8xxx-objs += if_usb.o
> libertas_cs-objs += if_cs.o
> Index: linux-wl/drivers/net/wireless/libertas/dev.h
> ===================================================================
> --- linux-wl.orig/drivers/net/wireless/libertas/dev.h 2009-09-28 12:06:02.000000000 +0200
> +++ linux-wl/drivers/net/wireless/libertas/dev.h 2009-09-28 12:06:30.000000000 +0200
> @@ -100,6 +100,7 @@ struct lbs_mesh_stats {
>
> /** Private structure for the MV device */
> struct lbs_private {
> + struct wireless_dev *wdev;
> int mesh_open;
> int mesh_fw_ver;
> int infra_open;
This seems wrong -- doesn't libertas have multiple netdevs? You're
treating wdev == wiphy it seems here, rather than wdev == netdev.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* [PATCH v2] wext: add back wireless/ dir in sysfs for cfg80211 interfaces
From: Johannes Berg @ 2009-09-28 13:26 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, Hugh Dickins
In-Reply-To: <1254130453.6583.22.camel@johannes.local>
The move away from having drivers assign wireless handlers,
in favour of making cfg80211 assign them, broke the sysfs
registration (the wireless/ dir went missing) because the
handlers are now assigned only after registration, which is
too late.
Fix this by special-casing cfg80211-based devices, all
of which are required to have an ieee80211_ptr, in the
sysfs code, and also using get_wireless_stats() to have
the same values reported as in procfs.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reported-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Tested-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
---
v2: reworded commit log
include/net/wext.h | 1 +
net/core/net-sysfs.c | 12 +++++-------
net/wireless/wext.c | 2 +-
3 files changed, 7 insertions(+), 8 deletions(-)
--- wireless-testing.orig/net/core/net-sysfs.c 2009-09-28 10:41:50.000000000 +0200
+++ wireless-testing/net/core/net-sysfs.c 2009-09-28 11:24:12.000000000 +0200
@@ -16,7 +16,7 @@
#include <net/sock.h>
#include <linux/rtnetlink.h>
#include <linux/wireless.h>
-#include <net/iw_handler.h>
+#include <net/wext.h>
#include "net-sysfs.h"
@@ -363,15 +363,13 @@ static ssize_t wireless_show(struct devi
char *))
{
struct net_device *dev = to_net_dev(d);
- const struct iw_statistics *iw = NULL;
+ const struct iw_statistics *iw;
ssize_t ret = -EINVAL;
read_lock(&dev_base_lock);
if (dev_isalive(dev)) {
- if (dev->wireless_handlers &&
- dev->wireless_handlers->get_wireless_stats)
- iw = dev->wireless_handlers->get_wireless_stats(dev);
- if (iw != NULL)
+ iw = get_wireless_stats(dev);
+ if (iw)
ret = (*format)(iw, buf);
}
read_unlock(&dev_base_lock);
@@ -505,7 +503,7 @@ int netdev_register_kobject(struct net_d
*groups++ = &netstat_group;
#ifdef CONFIG_WIRELESS_EXT_SYSFS
- if (net->wireless_handlers && net->wireless_handlers->get_wireless_stats)
+ if (net->wireless_handlers || net->ieee80211_ptr)
*groups++ = &wireless_group;
#endif
#endif /* CONFIG_SYSFS */
--- wireless-testing.orig/include/net/wext.h 2009-09-28 10:41:50.000000000 +0200
+++ wireless-testing/include/net/wext.h 2009-09-28 11:09:06.000000000 +0200
@@ -14,6 +14,7 @@ extern int wext_handle_ioctl(struct net
void __user *arg);
extern int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
unsigned long arg);
+extern struct iw_statistics *get_wireless_stats(struct net_device *dev);
#else
static inline int wext_proc_init(struct net *net)
{
--- wireless-testing.orig/net/wireless/wext.c 2009-09-28 10:41:50.000000000 +0200
+++ wireless-testing/net/wireless/wext.c 2009-09-28 11:09:07.000000000 +0200
@@ -470,7 +470,7 @@ static iw_handler get_handler(struct net
/*
* Get statistics out of the driver
*/
-static struct iw_statistics *get_wireless_stats(struct net_device *dev)
+struct iw_statistics *get_wireless_stats(struct net_device *dev)
{
/* New location */
if ((dev->wireless_handlers != NULL) &&
^ permalink raw reply
* [RFC] libertas: first stab at cfg80211 support
From: Holger Schurig @ 2009-09-28 11:21 UTC (permalink / raw)
To: libertas-dev; +Cc: linux-wireless, Dan Williams
Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de>
---
This patch currently just create a wdev, so you can do "iw list".
I'd like to get comments if the position where I create/destroy
the wdev makes sense.
Index: linux-wl/drivers/net/wireless/Kconfig
===================================================================
--- linux-wl.orig/drivers/net/wireless/Kconfig 2009-09-28 12:06:02.000000000 +0200
+++ linux-wl/drivers/net/wireless/Kconfig 2009-09-28 12:06:30.000000000 +0200
@@ -138,6 +138,7 @@ config LIBERTAS
depends on WLAN_80211
select WIRELESS_EXT
select LIB80211
+ select CFG80211
select FW_LOADER
---help---
A library for Marvell Libertas 8xxx devices.
Index: linux-wl/drivers/net/wireless/libertas/Makefile
===================================================================
--- linux-wl.orig/drivers/net/wireless/libertas/Makefile 2009-09-28 12:06:02.000000000 +0200
+++ linux-wl/drivers/net/wireless/libertas/Makefile 2009-09-28 12:06:30.000000000 +0200
@@ -1,5 +1,5 @@
libertas-objs := main.o wext.o rx.o tx.o cmd.o cmdresp.o scan.o 11d.o \
- debugfs.o persistcfg.o ethtool.o assoc.o
+ debugfs.o persistcfg.o ethtool.o assoc.o cfg.o
usb8xxx-objs += if_usb.o
libertas_cs-objs += if_cs.o
Index: linux-wl/drivers/net/wireless/libertas/dev.h
===================================================================
--- linux-wl.orig/drivers/net/wireless/libertas/dev.h 2009-09-28 12:06:02.000000000 +0200
+++ linux-wl/drivers/net/wireless/libertas/dev.h 2009-09-28 12:06:30.000000000 +0200
@@ -100,6 +100,7 @@ struct lbs_mesh_stats {
/** Private structure for the MV device */
struct lbs_private {
+ struct wireless_dev *wdev;
int mesh_open;
int mesh_fw_ver;
int infra_open;
Index: linux-wl/drivers/net/wireless/libertas/cfg.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-wl/drivers/net/wireless/libertas/cfg.h 2009-09-28 12:07:23.000000000 +0200
@@ -0,0 +1,9 @@
+#ifndef __LBS_CFG80211_H__
+#define __LBS_CFG80211_H__
+
+#include "dev.h"
+
+struct wireless_dev *lbs_wdev_alloc(int sizeof_priv, struct device *dev);
+void lbs_wdev_free(struct lbs_private *lbs);
+
+#endif
Index: linux-wl/drivers/net/wireless/libertas/cfg.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-wl/drivers/net/wireless/libertas/cfg.c 2009-09-28 12:09:06.000000000 +0200
@@ -0,0 +1,160 @@
+/*
+ * Implement cfg80211 ("iw") support.
+ *
+ * Copyright (C) 2009 M&N Solutions GmbH, 61191 Rosbach, Germany
+ * Holger Schurig <hs4233@mail.mn-solutions.de>
+ *
+ * Based on cfg80211.h:
+ * Copyright (C) 2009 Intel Corporation <ilw@linux.intel.com>
+ * Samuel Ortiz <samuel.ortiz@intel.com>
+ * Zhu Yi <yi.zhu@intel.com>
+ */
+
+#include <net/cfg80211.h>
+
+#include "cfg.h"
+
+
+#define CHAN2G(_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 lbs_2ghz_channels[] = {
+ CHAN2G(1, 2412, 0),
+ CHAN2G(2, 2417, 0),
+ CHAN2G(3, 2422, 0),
+ CHAN2G(4, 2427, 0),
+ CHAN2G(5, 2432, 0),
+ CHAN2G(6, 2437, 0),
+ CHAN2G(7, 2442, 0),
+ CHAN2G(8, 2447, 0),
+ CHAN2G(9, 2452, 0),
+ CHAN2G(10, 2457, 0),
+ CHAN2G(11, 2462, 0),
+ CHAN2G(12, 2467, 0),
+ CHAN2G(13, 2472, 0),
+ CHAN2G(14, 2484, 0),
+};
+
+#define RATETAB_ENT(_rate, _rateid, _flags) \
+ { \
+ .bitrate = (_rate), \
+ .hw_value = (_rateid), \
+ .flags = (_flags), \
+ }
+
+
+static struct ieee80211_rate lbs_rates[] = {
+ RATETAB_ENT(10, 0x1, 0),
+ RATETAB_ENT(20, 0x2, 0),
+ RATETAB_ENT(55, 0x4, 0),
+ RATETAB_ENT(110, 0x8, 0),
+ RATETAB_ENT(60, 0x10, 0),
+ RATETAB_ENT(90, 0x20, 0),
+ RATETAB_ENT(120, 0x40, 0),
+ RATETAB_ENT(180, 0x80, 0),
+ RATETAB_ENT(240, 0x100, 0),
+ RATETAB_ENT(360, 0x200, 0),
+ RATETAB_ENT(480, 0x400, 0),
+ RATETAB_ENT(540, 0x800, 0),
+};
+
+static struct ieee80211_supported_band lbs_band_2ghz = {
+ .channels = lbs_2ghz_channels,
+ .n_channels = ARRAY_SIZE(lbs_2ghz_channels),
+ .bitrates = lbs_rates,
+ .n_bitrates = ARRAY_SIZE(lbs_rates),
+};
+
+
+static const u32 cipher_suites[] = {
+ WLAN_CIPHER_SUITE_WEP40,
+ WLAN_CIPHER_SUITE_WEP104,
+ WLAN_CIPHER_SUITE_TKIP,
+ WLAN_CIPHER_SUITE_CCMP,
+};
+
+
+
+static struct cfg80211_ops lbs_cfg80211_ops = {
+/* TODO
+ .change_virtual_intf = iwm_cfg80211_change_iface,
+ .add_key = iwm_cfg80211_add_key,
+ .get_key = iwm_cfg80211_get_key,
+ .del_key = iwm_cfg80211_del_key,
+ .set_default_key = iwm_cfg80211_set_default_key,
+ .get_station = iwm_cfg80211_get_station,
+ .scan = iwm_cfg80211_scan,
+ .set_wiphy_params = iwm_cfg80211_set_wiphy_params,
+ .connect = iwm_cfg80211_connect,
+ .disconnect = iwm_cfg80211_disconnect,
+ .join_ibss = iwm_cfg80211_join_ibss,
+ .leave_ibss = iwm_cfg80211_leave_ibss,
+ .set_tx_power = iwm_cfg80211_set_txpower,
+ .get_tx_power = iwm_cfg80211_get_txpower,
+ .set_power_mgmt = iwm_cfg80211_set_power_mgmt,
+*/
+};
+
+struct wireless_dev *lbs_wdev_alloc(int sizeof_priv, struct device *dev)
+{
+ int ret = 0;
+ struct wireless_dev *wdev;
+
+ wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
+ if (!wdev) {
+ dev_err(dev, "Couldn't allocate wireless device\n");
+ return ERR_PTR(-ENOMEM);
+ }
+
+ wdev->wiphy = wiphy_new(&lbs_cfg80211_ops,
+ sizeof(struct lbs_private) + sizeof_priv);
+ if (!wdev->wiphy) {
+ dev_err(dev, "Couldn't allocate wiphy device\n");
+ ret = -ENOMEM;
+ goto out_err_new;
+ }
+
+ set_wiphy_dev(wdev->wiphy, dev);
+ wdev->wiphy->max_scan_ssids = 1; /* TODO */
+ wdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
+ BIT(NL80211_IFTYPE_ADHOC);
+ wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &lbs_band_2ghz;
+ wdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
+ wdev->wiphy->cipher_suites = cipher_suites;
+ wdev->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
+
+ ret = wiphy_register(wdev->wiphy);
+ if (ret < 0) {
+ dev_err(dev, "Couldn't register wiphy device\n");
+ goto out_err_register;
+ }
+
+ return wdev;
+
+ out_err_register:
+ wiphy_free(wdev->wiphy);
+
+ out_err_new:
+ kfree(wdev);
+
+ return ERR_PTR(ret);
+}
+
+
+void lbs_wdev_free(struct lbs_private *lbs)
+{
+ struct wireless_dev *wdev = lbs->wdev;
+
+ if (!wdev)
+ return;
+
+ wiphy_unregister(wdev->wiphy);
+ wiphy_free(wdev->wiphy);
+ kfree(wdev);
+}
Index: linux-wl/drivers/net/wireless/libertas/main.c
===================================================================
--- linux-wl.orig/drivers/net/wireless/libertas/main.c 2009-09-28 12:06:02.000000000 +0200
+++ linux-wl/drivers/net/wireless/libertas/main.c 2009-09-28 12:11:22.000000000 +0200
@@ -14,11 +14,13 @@
#include <linux/stddef.h>
#include <linux/ieee80211.h>
#include <net/iw_handler.h>
+#include <net/cfg80211.h>
#include "host.h"
#include "decl.h"
#include "dev.h"
#include "wext.h"
+#include "cfg.h"
#include "debugfs.h"
#include "scan.h"
#include "assoc.h"
@@ -1168,31 +1170,42 @@ static const struct net_device_ops lbs_n
*/
struct lbs_private *lbs_add_card(void *card, struct device *dmdev)
{
- struct net_device *dev = NULL;
+ struct net_device *dev;
+ struct wireless_dev *wdev;
struct lbs_private *priv = NULL;
lbs_deb_enter(LBS_DEB_MAIN);
/* Allocate an Ethernet device and register it */
- dev = alloc_etherdev(sizeof(struct lbs_private));
- if (!dev) {
+ wdev = lbs_wdev_alloc(sizeof(struct lbs_private), dmdev);
+ if (IS_ERR(wdev)) {
lbs_pr_err("init wlanX device failed\n");
goto done;
}
- priv = netdev_priv(dev);
- dev->ml_priv = priv;
+ /* TODO? */
+ wdev->iftype = NL80211_IFTYPE_STATION;
+ priv = wdev_priv(wdev);
+ priv->wdev = wdev;
if (lbs_init_adapter(priv)) {
lbs_pr_err("failed to initialize adapter structure.\n");
- goto err_init_adapter;
+ goto err_wdev;
+ }
+
+ //TODO? dev = alloc_netdev_mq(0, "wlan%d", ether_setup, IWM_TX_QUEUES);
+ dev = alloc_netdev(0, "wlan%d", ether_setup);
+ if (!dev) {
+ dev_err(dmdev, "no memory for network device instance\n");
+ goto err_adapter;
}
+ dev->netdev_ops = &lbs_netdev_ops;
+ dev->ieee80211_ptr = wdev;
+ dev->ml_priv = priv;
+ SET_NETDEV_DEV(dev, dmdev);
+ wdev->netdev = dev;
priv->dev = dev;
- priv->card = card;
- priv->mesh_open = 0;
- priv->infra_open = 0;
- /* Setup the OS Interface to our functions */
dev->netdev_ops = &lbs_netdev_ops;
dev->watchdog_timeo = 5 * HZ;
dev->ethtool_ops = &lbs_ethtool_ops;
@@ -1201,7 +1214,14 @@ struct lbs_private *lbs_add_card(void *c
#endif
dev->flags |= IFF_BROADCAST | IFF_MULTICAST;
- SET_NETDEV_DEV(dev, dmdev);
+
+ // TODO: kzalloc + iwm_init_default_profile(iwm, iwm->umac_profile); ??
+
+
+ priv->card = card;
+ priv->mesh_open = 0;
+ priv->infra_open = 0;
+
priv->rtap_net_dev = NULL;
strcpy(dev->name, "wlan%d");
@@ -1211,7 +1231,7 @@ struct lbs_private *lbs_add_card(void *c
priv->main_thread = kthread_run(lbs_thread, dev, "lbs_main");
if (IS_ERR(priv->main_thread)) {
lbs_deb_thread("Error creating main thread.\n");
- goto err_init_adapter;
+ goto err_ndev;
}
priv->work_thread = create_singlethread_workqueue("lbs_worker");
@@ -1228,9 +1248,15 @@ struct lbs_private *lbs_add_card(void *c
goto done;
-err_init_adapter:
- lbs_free_adapter(priv);
+ err_ndev:
free_netdev(dev);
+
+ err_adapter:
+ lbs_free_adapter(priv);
+
+ err_wdev:
+ lbs_wdev_free(priv);
+
priv = NULL;
done:
@@ -1277,6 +1303,7 @@ void lbs_remove_card(struct lbs_private
kthread_stop(priv->main_thread);
lbs_free_adapter(priv);
+ lbs_wdev_free(priv);
priv->dev = NULL;
free_netdev(dev);
--
M&N Solutions GmbH Ein Unternehmen der Datagroup AG
Holger Schurig
Raiffeisenstr. 10
61191 Rosbach
Tel: 06003/9141-15 Fax 06003/9141-49
http://www.mn-solutions.de/
Handelsregister Friedberg, HRB 5903
Geschäftsführer: P.Schrittenlocher
^ permalink raw reply
* Re: [PATCH] wext: add back wireless/ dir in sysfs for cfg80211 interfaces
From: Hugh Dickins @ 2009-09-28 11:06 UTC (permalink / raw)
To: Johannes Berg; +Cc: John Linville, linux-wireless
In-Reply-To: <1254130453.6583.22.camel@johannes.local>
On Mon, 28 Sep 2009, Johannes Berg wrote:
> The move away from wireless handlers the drivers assign
> to wireless handlers being assigned by cfg80211 broke
> the sysfs registration (the wireless/ dir went missing)
> because the handlers were assigned only after sysfs
> registration and thus the registration never noticed a
> device was wireless.
I couldn't make much sense of that: too much assigning!
>
> Fix this by special-casing cfg80211-based devices, all
> of which are required to have an ieee80211_ptr, in the
> sysfs code, and also using get_wireless_stats() to have
> the same values reported as in procfs.
>
> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
> Reported-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
I confirm this works for me too: I won't venture an ignorant opinion
on which is the right solution; but my failed boots do suggest that
keeping away from the notifier infrastructure may make a wiser fix.
Thanks a lot for all your efforts on this, Johannes.
Hugh
^ permalink raw reply
* [PATCH] wext: add back wireless/ dir in sysfs for cfg80211 interfaces
From: Johannes Berg @ 2009-09-28 9:34 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, Hugh Dickins
The move away from wireless handlers the drivers assign
to wireless handlers being assigned by cfg80211 broke
the sysfs registration (the wireless/ dir went missing)
because the handlers were assigned only after sysfs
registration and thus the registration never noticed a
device was wireless.
Fix this by special-casing cfg80211-based devices, all
of which are required to have an ieee80211_ptr, in the
sysfs code, and also using get_wireless_stats() to have
the same values reported as in procfs.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reported-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
---
include/net/wext.h | 1 +
net/core/net-sysfs.c | 12 +++++-------
net/wireless/wext.c | 2 +-
3 files changed, 7 insertions(+), 8 deletions(-)
--- wireless-testing.orig/net/core/net-sysfs.c 2009-09-28 10:41:50.000000000 +0200
+++ wireless-testing/net/core/net-sysfs.c 2009-09-28 11:24:12.000000000 +0200
@@ -16,7 +16,7 @@
#include <net/sock.h>
#include <linux/rtnetlink.h>
#include <linux/wireless.h>
-#include <net/iw_handler.h>
+#include <net/wext.h>
#include "net-sysfs.h"
@@ -363,15 +363,13 @@ static ssize_t wireless_show(struct devi
char *))
{
struct net_device *dev = to_net_dev(d);
- const struct iw_statistics *iw = NULL;
+ const struct iw_statistics *iw;
ssize_t ret = -EINVAL;
read_lock(&dev_base_lock);
if (dev_isalive(dev)) {
- if (dev->wireless_handlers &&
- dev->wireless_handlers->get_wireless_stats)
- iw = dev->wireless_handlers->get_wireless_stats(dev);
- if (iw != NULL)
+ iw = get_wireless_stats(dev);
+ if (iw)
ret = (*format)(iw, buf);
}
read_unlock(&dev_base_lock);
@@ -505,7 +503,7 @@ int netdev_register_kobject(struct net_d
*groups++ = &netstat_group;
#ifdef CONFIG_WIRELESS_EXT_SYSFS
- if (net->wireless_handlers && net->wireless_handlers->get_wireless_stats)
+ if (net->wireless_handlers || net->ieee80211_ptr)
*groups++ = &wireless_group;
#endif
#endif /* CONFIG_SYSFS */
--- wireless-testing.orig/include/net/wext.h 2009-09-28 10:41:50.000000000 +0200
+++ wireless-testing/include/net/wext.h 2009-09-28 11:09:06.000000000 +0200
@@ -14,6 +14,7 @@ extern int wext_handle_ioctl(struct net
void __user *arg);
extern int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
unsigned long arg);
+extern struct iw_statistics *get_wireless_stats(struct net_device *dev);
#else
static inline int wext_proc_init(struct net *net)
{
--- wireless-testing.orig/net/wireless/wext.c 2009-09-28 10:41:50.000000000 +0200
+++ wireless-testing/net/wireless/wext.c 2009-09-28 11:09:07.000000000 +0200
@@ -470,7 +470,7 @@ static iw_handler get_handler(struct net
/*
* Get statistics out of the driver
*/
-static struct iw_statistics *get_wireless_stats(struct net_device *dev)
+struct iw_statistics *get_wireless_stats(struct net_device *dev)
{
/* New location */
if ((dev->wireless_handlers != NULL) &&
^ permalink raw reply
* Re: [PATCH 2/2] cfg80211: fix wireless handlers assignment
From: Johannes Berg @ 2009-09-28 9:29 UTC (permalink / raw)
To: netdev; +Cc: Hugh Dickins, linux-wireless
In-Reply-To: <1254126117.6583.19.camel@johannes.local>
[-- Attachment #1: Type: text/plain, Size: 456 bytes --]
On Mon, 2009-09-28 at 10:21 +0200, Johannes Berg wrote:
> The point we assign dev->wireless_handlers at is too
> late, we need to do that before netdev_register_kobject()
> gets called, so use the new NETDEV_PRE_INIT notifier.
> The result of adding wireless_handlers too late is the
> disappearance of /sys/class/net/wlan0/wireless which a
> bunch of distro scripts still require.
Ignore please, I have a better, self-contained fix.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* Re: [PATCH 1/2] net: introduce NETDEV_POST_INIT notifier
From: Johannes Berg @ 2009-09-28 9:29 UTC (permalink / raw)
To: netdev; +Cc: linux-wireless, Hugh Dickins, Marcel Holtmann
In-Reply-To: <1254126089.6583.18.camel@johannes.local>
[-- Attachment #1: Type: text/plain, Size: 668 bytes --]
On Mon, 2009-09-28 at 10:21 +0200, Johannes Berg wrote:
> For various purposes including a wireless extensions
> bugfix, we need to hook into the netdev creation before
> before netdev_register_kobject(). This will also ease
> doing the dev type assignment that Marcel was working
> on for cfg80211 drivers w/o touching them all.
>
> Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
> ---
> I decided that it doesn't make a lot of sense to be after ndo_init but
> before the other name/... checks.
Ignore this patch please, I have something better. Marcel, feel free to
pick this up once you continue working on your devtype thing.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
* [PATCH 2/2] cfg80211: fix wireless handlers assignment
From: Johannes Berg @ 2009-09-28 8:21 UTC (permalink / raw)
To: netdev; +Cc: Hugh Dickins, linux-wireless
The point we assign dev->wireless_handlers at is too
late, we need to do that before netdev_register_kobject()
gets called, so use the new NETDEV_PRE_INIT notifier.
The result of adding wireless_handlers too late is the
disappearance of /sys/class/net/wlan0/wireless which a
bunch of distro scripts still require.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
net/wireless/core.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
--- wireless-testing.orig/net/wireless/core.c 2009-09-28 09:54:52.000000000 +0200
+++ wireless-testing/net/wireless/core.c 2009-09-28 10:18:47.000000000 +0200
@@ -641,6 +641,12 @@ static int cfg80211_netdev_notifier_call
WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED);
switch (state) {
+ case NETDEV_POST_INIT:
+#ifdef CONFIG_WIRELESS_EXT
+ if (!dev->wireless_handlers)
+ dev->wireless_handlers = &cfg80211_wext_handler;
+#endif
+ break;
case NETDEV_REGISTER:
/*
* NB: cannot take rdev->mtx here because this may be
@@ -666,8 +672,6 @@ static int cfg80211_netdev_notifier_call
wdev->sme_state = CFG80211_SME_IDLE;
mutex_unlock(&rdev->devlist_mtx);
#ifdef CONFIG_WIRELESS_EXT
- if (!dev->wireless_handlers)
- dev->wireless_handlers = &cfg80211_wext_handler;
wdev->wext.default_key = -1;
wdev->wext.default_mgmt_key = -1;
wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC;
^ permalink raw reply
* [PATCH 1/2] net: introduce NETDEV_POST_INIT notifier
From: Johannes Berg @ 2009-09-28 8:21 UTC (permalink / raw)
To: netdev; +Cc: linux-wireless, Hugh Dickins
For various purposes including a wireless extensions
bugfix, we need to hook into the netdev creation before
before netdev_register_kobject(). This will also ease
doing the dev type assignment that Marcel was working
on for cfg80211 drivers w/o touching them all.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
I decided that it doesn't make a lot of sense to be after ndo_init but
before the other name/... checks.
include/linux/notifier.h | 1 +
net/core/dev.c | 5 +++++
2 files changed, 6 insertions(+)
--- wireless-testing.orig/include/linux/notifier.h 2009-09-28 10:14:54.000000000 +0200
+++ wireless-testing/include/linux/notifier.h 2009-09-28 10:16:07.000000000 +0200
@@ -201,6 +201,7 @@ static inline int notifier_to_errno(int
#define NETDEV_PRE_UP 0x000D
#define NETDEV_BONDING_OLDTYPE 0x000E
#define NETDEV_BONDING_NEWTYPE 0x000F
+#define NETDEV_POST_INIT 0x0010
#define SYS_DOWN 0x0001 /* Notify of system down */
#define SYS_RESTART SYS_DOWN
--- wireless-testing.orig/net/core/dev.c 2009-09-28 10:14:54.000000000 +0200
+++ wireless-testing/net/core/dev.c 2009-09-28 10:20:46.000000000 +0200
@@ -4785,6 +4785,11 @@ int register_netdevice(struct net_device
if (dev->features & NETIF_F_SG)
dev->features |= NETIF_F_GSO;
+ ret = call_netdevice_notifiers(NETDEV_POST_INIT, dev);
+ ret = notifier_to_errno(ret);
+ if (ret)
+ goto err_uninit;
+
netdev_initialize_kobject(dev);
ret = netdev_register_kobject(dev);
if (ret)
^ permalink raw reply
* Re: Massive packet loss with ath9k, AR9280, hostapd in 802.11n mode
From: Luis R. Rodriguez @ 2009-09-28 8:17 UTC (permalink / raw)
To: Holger Schurig; +Cc: Rene Mayrhofer, Bob Copeland, linux-wireless
In-Reply-To: <200909280956.23887.hs4233@mail.mn-solutions.de>
On Mon, Sep 28, 2009 at 12:56 AM, Holger Schurig
<hs4233@mail.mn-solutions.de> wrote:
>> [ 1698.498801] ath: EEPROM regdomain: 0x0
>>
>> Does this indicate that the EEPROM is locked to country code
>> 0x0 (whatever that is, probably US)? "iw reg" doesn't seem to
>> change anything:
>
> Yep, that's the case.
>
> However, "iw XXX reg set XX" should *STILL* change some things,
For atheros cards 'iw reg set XX' will help compliance further, it
will never enable new channels.
> Regarding the wrong info in your EEPROM: check the README file
> from ath_info (svn co
> http://madwifi-project.org/svn/ath_info/trunk).
>
> I currently have the feeling, that about 50% of all WLAN cards
> bought in Germany have a "wrong" EEPROM country. Maybe importers
> simply don't care about this.
The regulatory domain on most cards actually ship with a world
regulatory domain, if they ship with a different country regulatory
domain that is up to the manufacturer not Atheros, but most likely
they are actually not incorrect. When you do have more channels than
you are supposed you can restrict this further with 'iw reg set' but
enabling new channels is not something that is that easy from a
regulatory perspective which is why this is not something that is
done. A manufacturer typically tests only the channels enabled on
their regulatory domain and programs the EEPROM with CTL information
for those settings, not for other regulatory domains. Modifying the
EEPROM is something up to manufacturers to do under current testing
scenarios and due to current legislation, this is not supported nor it
is intended to be.
If world roaming we provide world roaming enhancements to help with
the default passive scan an no beaconing on some channels. This
currently consists of lifting passive scan flags and no-beaconing
flags from channels you see APs on. This should increase the time it
takes to scan for your AP after the first time or for other APs on
that channel. It also means you can start hostapd or adhoc on these
channels.
Luis
^ permalink raw reply
* Re: Massive packet loss with ath9k, AR9280, hostapd in 802.11n mode
From: Rene Mayrhofer @ 2009-09-28 8:07 UTC (permalink / raw)
To: Holger Schurig; +Cc: Bob Copeland, linux-wireless
In-Reply-To: <200909280956.23887.hs4233@mail.mn-solutions.de>
Am Montag, 28. September 2009 09:56:23 schrieb Holger Schurig:
> Oh, and what I'm not yet getting: how can a wrong country setting
> lead to so much packet-loss?
I don't think these two are connected - the erroneous country setting is
probably just the reason why I can't try the 5GHz band and thus can't verify
if the packet loss occurs there as well.
Thanks for your explanations - I will try to get CRDA and regdb running and
will try again with the 5GHz band.
One other thing comes to mind: this 802.11n card has two antenna connectors,
and both are actually connected to pigtails (which are probably not mounted in
correct distance according to wavelenght, but that shouldn't cause packet
loss). However, it might be possible that one of the antennas has a poor
connection, is misaligned with the clients, or whatever. What I couldn't find
in ath9k is an option for user-controlled antenna diversity (comparable to
madwifi). How can I selectively disable antenna usage and/or set them for RX or
TX mode only?
best regards,
Rene
^ permalink raw reply
* Re: Massive packet loss with ath9k, AR9280, hostapd in 802.11n mode
From: Holger Schurig @ 2009-09-28 7:56 UTC (permalink / raw)
To: Rene Mayrhofer; +Cc: Bob Copeland, linux-wireless
In-Reply-To: <200909252329.01897.rene.mayrhofer@gibraltar.at>
> [ 1698.498801] ath: EEPROM regdomain: 0x0
>
> Does this indicate that the EEPROM is locked to country code
> 0x0 (whatever that is, probably US)? "iw reg" doesn't seem to
> change anything:
Yep, that's the case.
However, "iw XXX reg set XX" should *STILL* change some things,
so I guess that crda/regdb isn't still correctly installed. And
you should still see something in your "dmesg" output. Hey,
even "COUNTRY=AT crda" should change/produce something, e.g.
check "dmesg" and "iw list".
However, I've now switched my kernel to no longer include
> [ 1686.542910] cfg80211: Using static regulatory domain info
You probably should either use CRDA ("the new way") or some
static reg info in your kernel. I personally opted for CRDA, as
this gives me more correct channel settings.
Regarding the wrong info in your EEPROM: check the README file
from ath_info (svn co
http://madwifi-project.org/svn/ath_info/trunk).
I currently have the feeling, that about 50% of all WLAN cards
bought in Germany have a "wrong" EEPROM country. Maybe importers
simply don't care about this.
Oh, and what I'm not yet getting: how can a wrong country setting
lead to so much packet-loss?
^ permalink raw reply
* Re: [PATCH 2/2] cfg80211: fix wireless handlers assignment
From: Johannes Berg @ 2009-09-28 7:54 UTC (permalink / raw)
To: Hugh Dickins; +Cc: netdev, linux-wireless
In-Reply-To: <Pine.LNX.4.64.0909272237190.4098@sister.anvils>
[-- Attachment #1: Type: text/plain, Size: 1320 bytes --]
On Sun, 2009-09-27 at 22:50 +0100, Hugh Dickins wrote:
> On Sun, 27 Sep 2009, Hugh Dickins wrote:
> >
> > I've experimented by moving your NETDEV_PRE_INIT hunk later in the
> > sequence, just before the netdev_initialize_kobject(dev) (so I also
> > changed the "goto out" to "goto err_uninit"): both* machines then boot
> > correctly, and this mail leaves me wirelessly.
> >
> > I'll now experiment to see how early I can move that hunk.
>
> Both machines boot (and do wireless) correctly with your NETDEV_PRE_INIT
> hunk placed just after the ndo_init block, instead of just before where
> you placed it. That's i386 kernels on both.
>
> But curiouser and curiouser... the laptop can do 64-bit, so I built
> my 64-bit kernel, and went through the motions to reproduce the
> early boot crash with the patch as you had it: but the x86_64 kernel
> boots (and does wireless) correctly with the NETDEV_PRE_INIT hunk
> just where you placed it, before the ndo_init block.
>
> Perhaps there's a difference in the 32- and 64-bit startup sequence
> with respect to notifiers; or perhaps your change tickles another bug.
> I don't know, I'm turning off now.
Interesting, thanks for taking the time to test. I'll post an updated
patchset that calls it POST_INIT and moves it to there.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox