* Re: RTL 8187b - naughty behaviour
From: Rogerio Luz Coelho @ 2010-06-03 15:40 UTC (permalink / raw)
To: Gábor Stefanik; +Cc: linux-wireless, Herton Ronaldo Krzesinski
In-Reply-To: <q2k69e28c911004110635nac8100f6pe014361ed0a516a5@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4715 bytes --]
You need to enable MMIO tracing support in your kernel config, and
> recompile your kernel (assuming it is not enabled already - distros
> usually disable the entire tracing framework by default). Then:
> -Mount debugfs to /debug. (Usually it is mounted by default, but some
> distros like to mount it @ /sys/kernel/debug instead - remount it to
> /debug.)
> -"echo mmiotrace > /debug/tracing/current_tracer"
> -"cat /debug/tracing/trace_pipe > trace.txt &" - at this point, tracing begins.
> -Load r8187b and connect.
> -"echo "Driver loaded!" > /debug/tracing/trace_marker"
> -"echo nop
Ok here are some news:
1) The rtl8187b problem is a know bug in Ubuntu since forever - bug
#215802 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/215802
2) Tryied the Realtek driver found in:
http://ubuntuforums.org/showthread.php?t=1446894
(rtl8187B_linux_26.1056.1112.2009.release.tar.gz )
- as seno said here on the list in 14-05-2010 17:20:02
It installs a module called r8187b, witch I managed to use ONCE, after
it installed, then after it disconnected it would not connect again, and
after I rebooted there was no more wi-fi interface (!!!) ifconfig and
iwconfig confirm that my wi-fi card (wlan0) is nowhere to be found
5) Rate seems weird on this card. If I define the rate with
"iwconfig wlan0 rate 11M" it gives the best download speed, even if I
rase this to 24M or 54M I get at least a 40% difference, same if I lower
the rate.
Maybe what Hin-Tak Leung (2010-04-03) said about the Minstrel algorithm?
Could we try to install both Minstrel and older algorithms side by side
and make a comparison? from what I read here:
http://wireless.kernel.org/en/developers/Documentation/mac80211/RateControl/minstrel
"Further, it means that the 1 Mbps rate (which typically has a high
probability of successful transmission) will not be used in preference
to the 11 Mbps rate."
But my rate is always a defaulted 1Mb/s on bootup. I put it to 11M
manually and the connection improves dramatically
4) Ran the mmiotrace on the rtl8187 driver, it all seems gibberish to
me ;)
one while it was at 1m from the router giving me top speed (same as
Win7): trace1.txt:
VERSION 20070824
PCIDEV 0000 10390671 0 d0000000 0 0 0 0 0 0 8000000 0 0 0 0 0 0
agpgart-sis
PCIDEV 0008 10390003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PCIDEV 0010 10390968 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PCIDEV 0015 10395513 10 1f0 3f6 170 376 1081 0 0 8 0 8 0 10 0 0 pata_sis
PCIDEV 0018 10397001 14 d8404000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ohci_hcd
PCIDEV 0019 10397001 15 d8405000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ohci_hcd
PCIDEV 001b 10397002 16 d8406000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ehci_hcd
PCIDEV 0020 10390191 13 d8407000 1001 0 0 0 0 0 80 80 0 0 0 0 0 sis190
PCIDEV 0028 10391183 11 10c9 10bd 10c1 10b9 10a1 0 0 8 4 8 4 10 0 0
sata_sis
PCIDEV 0030 1039000a 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0038 1039000a 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0078 10397502 12 d8400000 0 0 0 0 0 0 4000 0 0 0 0 0 0 HDA Intel
PCIDEV 00f8 10390004 1a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0100 10396351 10 c0000008 d8000000 9001 0 0 0 2 10000000 20000 80
0 0 0 0
PCIDEV 0300 197b2382 10 d8100000 0 0 0 0 0 d8500000 100 0 0 0 0 0 10000
sdhci-pci
PCIDEV 0302 197b2381 10 d8100400 0 0 0 0 0 0 100 0 0 0 0 0 0
PCIDEV 0303 197b2383 10 d8100800 0 0 0 0 0 0 100 0 0 0 0 0 0 jmb38x_ms
** then when it was about 10m - failed to connect (Windows 7 connects
normally) trace2.txt
VERSION 20070824
PCIDEV 0000 10390671 0 d0000000 0 0 0 0 0 0 8000000 0 0 0 0 0 0
agpgart-sis
PCIDEV 0008 10390003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PCIDEV 0010 10390968 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PCIDEV 0015 10395513 10 1f0 3f6 170 376 1081 0 0 8 0 8 0 10 0 0 pata_sis
PCIDEV 0018 10397001 14 d8404000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ohci_hcd
PCIDEV 0019 10397001 15 d8405000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ohci_hcd
PCIDEV 001b 10397002 16 d8406000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ehci_hcd
PCIDEV 0020 10390191 13 d8407000 1001 0 0 0 0 0 80 80 0 0 0 0 0 sis190
PCIDEV 0028 10391183 11 10c9 10bd 10c1 10b9 10a1 0 0 8 4 8 4 10 0 0
sata_sis
PCIDEV 0030 1039000a 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0038 1039000a 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0078 10397502 12 d8400000 0 0 0 0 0 0 4000 0 0 0 0 0 0 HDA Intel
PCIDEV 00f8 10390004 1a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0100 10396351 10 c0000008 d8000000 9001 0 0 0 2 10000000 20000 80
0 0 0 0
PCIDEV 0300 197b2382 10 d8100000 0 0 0 0 0 d8500000 100 0 0 0 0 0 10000
sdhci-pci
PCIDEV 0302 197b2381 10 d8100400 0 0 0 0 0 0 100 0 0 0 0 0 0
PCIDEV 0303 197b2383 10 d8100800 0 0 0 0 0 0 100 0 0 0 0 0 0 jmb38x_ms
*** All the steps asked by Gábor were done.
Thanks all you guys.
Rogerio
[-- Attachment #2: trace2.txt --]
[-- Type: text/plain, Size: 1183 bytes --]
VERSION 20070824
PCIDEV 0000 10390671 0 d0000000 0 0 0 0 0 0 8000000 0 0 0 0 0 0 agpgart-sis
PCIDEV 0008 10390003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PCIDEV 0010 10390968 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PCIDEV 0015 10395513 10 1f0 3f6 170 376 1081 0 0 8 0 8 0 10 0 0 pata_sis
PCIDEV 0018 10397001 14 d8404000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ohci_hcd
PCIDEV 0019 10397001 15 d8405000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ohci_hcd
PCIDEV 001b 10397002 16 d8406000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ehci_hcd
PCIDEV 0020 10390191 13 d8407000 1001 0 0 0 0 0 80 80 0 0 0 0 0 sis190
PCIDEV 0028 10391183 11 10c9 10bd 10c1 10b9 10a1 0 0 8 4 8 4 10 0 0 sata_sis
PCIDEV 0030 1039000a 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0038 1039000a 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0078 10397502 12 d8400000 0 0 0 0 0 0 4000 0 0 0 0 0 0 HDA Intel
PCIDEV 00f8 10390004 1a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0100 10396351 10 c0000008 d8000000 9001 0 0 0 2 10000000 20000 80 0 0 0 0
PCIDEV 0300 197b2382 10 d8100000 0 0 0 0 0 d8500000 100 0 0 0 0 0 10000 sdhci-pci
PCIDEV 0302 197b2381 10 d8100400 0 0 0 0 0 0 100 0 0 0 0 0 0
PCIDEV 0303 197b2383 10 d8100800 0 0 0 0 0 0 100 0 0 0 0 0 0 jmb38x_ms
[-- Attachment #3: trace1.txt --]
[-- Type: text/plain, Size: 1183 bytes --]
VERSION 20070824
PCIDEV 0000 10390671 0 d0000000 0 0 0 0 0 0 8000000 0 0 0 0 0 0 agpgart-sis
PCIDEV 0008 10390003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PCIDEV 0010 10390968 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
PCIDEV 0015 10395513 10 1f0 3f6 170 376 1081 0 0 8 0 8 0 10 0 0 pata_sis
PCIDEV 0018 10397001 14 d8404000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ohci_hcd
PCIDEV 0019 10397001 15 d8405000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ohci_hcd
PCIDEV 001b 10397002 16 d8406000 0 0 0 0 0 0 1000 0 0 0 0 0 0 ehci_hcd
PCIDEV 0020 10390191 13 d8407000 1001 0 0 0 0 0 80 80 0 0 0 0 0 sis190
PCIDEV 0028 10391183 11 10c9 10bd 10c1 10b9 10a1 0 0 8 4 8 4 10 0 0 sata_sis
PCIDEV 0030 1039000a 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0038 1039000a 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0078 10397502 12 d8400000 0 0 0 0 0 0 4000 0 0 0 0 0 0 HDA Intel
PCIDEV 00f8 10390004 1a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 pcieport
PCIDEV 0100 10396351 10 c0000008 d8000000 9001 0 0 0 2 10000000 20000 80 0 0 0 0
PCIDEV 0300 197b2382 10 d8100000 0 0 0 0 0 d8500000 100 0 0 0 0 0 10000 sdhci-pci
PCIDEV 0302 197b2381 10 d8100400 0 0 0 0 0 0 100 0 0 0 0 0 0
PCIDEV 0303 197b2383 10 d8100800 0 0 0 0 0 0 100 0 0 0 0 0 0 jmb38x_ms
^ permalink raw reply
* iwl3945 oops with latest git
From: Miklos Szeredi @ 2010-06-03 15:01 UTC (permalink / raw)
To: Reinette Chatre; +Cc: linux-kernel, linux-wireless
Hi,
This oops comes shortly after booting machine and using wireless
network. Reproduced two times now.
Please let me know if you need more info.
Thanks,
Miklos
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<ffffffffa022738f>] iwl3945_request_scan+0x961/0xd68 [iwl3945]
PGD 0
Oops: 0000 [#1] PREEMPT SMP
last sysfs file: /sys/class/rfkill/rfkill1/state
CPU 0
Modules linked in: nfs lockd nfs_acl sunrpc rfcomm sco bnep l2cap acpi_cpufreq mperf nf_conntrack_netbios_ns fuse iwl3945 iwlcore thinkpad_acpi nsc_ircc mac80211 backlight btusb led_class uinput ac irda battery crc_ccitt thermal cfg80211 bluetooth button processor e1000e rfkill kvm_intel kvm
Pid: 1493, comm: iwl3945 Not tainted 2.6.35-rc1-00194-gaef4b9a #76 2007FUG/2007FUG
RIP: 0010:[<ffffffffa022738f>] [<ffffffffa022738f>] iwl3945_request_scan+0x961/0xd68 [iwl3945]
RSP: 0018:ffff8800b4d71d10 EFLAGS: 00010287
RAX: ffff8800bea80c00 RBX: ffff8800b4171380 RCX: 0000000000000021
RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8800b4171380
RBP: ffff8800b4d71de0 R08: 000000000000030e R09: 00000000ffffffff
R10: 000000000ad21900 R11: 0000000000000292 R12: 0000000000000000
R13: ffff8800b60950f2 R14: 0000000000000000 R15: 0000000000000058
FS: 0000000000000000(0000) GS:ffff880001a00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 0000000000000000 CR3: 0000000001612000 CR4: 00000000000006f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process iwl3945 (pid: 1493, threadinfo ffff8800b4d70000, task ffff8800b6790940)
Stack:
ffff880001a12f40 0000000000012f40 ffff8800b64f8800 ffffffff8161a378
<0> 0000000000000000 ffff8800b6095000 00578800b4d71e20 0000005800000021
<0> ffff8800b4d71fd8 00ff8800b4175128 ffff8800b4d71fd8 002188ffb6790940
Call Trace:
[<ffffffffa01f9bb5>] iwl_bg_start_internal_scan+0x34f/0x371 [iwlcore]
[<ffffffff8104e175>] worker_thread+0x1fc/0x2a3
[<ffffffffa01f9866>] ? iwl_bg_start_internal_scan+0x0/0x371 [iwlcore]
[<ffffffff81051d96>] ? autoremove_wake_function+0x0/0x34
[<ffffffff813f4590>] ? _raw_spin_unlock_irqrestore+0x27/0x29
[<ffffffff8104df79>] ? worker_thread+0x0/0x2a3
[<ffffffff810518db>] kthread+0x7a/0x82
[<ffffffff81002c94>] kernel_thread_helper+0x4/0x10
[<ffffffff81051861>] ? kthread+0x0/0x82
[<ffffffff81002c90>] ? kernel_thread_helper+0x0/0x10
Code: 48 b5 00 00 48 89 45 80 48 89 85 70 ff ff ff 41 8d 47 ff 66 89 85 66 ff ff ff e9 43 02 00 00 48 63 55 a8 4c 8b 64 d0 38 8b 55 a4 <41> 39 14 24 0f 85 2a 02 00 00 66 41 8b 54 24 06 48 89 df 41 88
RIP [<ffffffffa022738f>] iwl3945_request_scan+0x961/0xd68 [iwl3945]
RSP <ffff8800b4d71d10>
CR2: 0000000000000000
---[ end trace 63fe07b50f147114 ]---
^ permalink raw reply
* Re: iwl3945 oops with latest git
From: Michal Hocko @ 2010-06-03 15:17 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: Reinette Chatre, linux-kernel, linux-wireless
In-Reply-To: <E1OKBva-00080h-8E@pomaz-ex.szeredi.hu>
On Thu 03-06-10 17:01:50, Miklos Szeredi wrote:
> Hi,
Hi,
>
> This oops comes shortly after booting machine and using wireless
> network. Reproduced two times now.
>
> Please let me know if you need more info.
>
> Thanks,
> Miklos
>
>
> BUG: unable to handle kernel NULL pointer dereference at (null)
> IP: [<ffffffffa022738f>] iwl3945_request_scan+0x961/0xd68 [iwl3945]
Sounds pretty much like https://patchwork.kernel.org/patch/103596/
I have similar problem but didn't get to testing the patch.
> PGD 0
> Oops: 0000 [#1] PREEMPT SMP
> last sysfs file: /sys/class/rfkill/rfkill1/state
> CPU 0
> Modules linked in: nfs lockd nfs_acl sunrpc rfcomm sco bnep l2cap acpi_cpufreq mperf nf_conntrack_netbios_ns fuse iwl3945 iwlcore thinkpad_acpi nsc_ircc mac80211 backlight btusb led_class uinput ac irda battery crc_ccitt thermal cfg80211 bluetooth button processor e1000e rfkill kvm_intel kvm
>
> Pid: 1493, comm: iwl3945 Not tainted 2.6.35-rc1-00194-gaef4b9a #76 2007FUG/2007FUG
> RIP: 0010:[<ffffffffa022738f>] [<ffffffffa022738f>] iwl3945_request_scan+0x961/0xd68 [iwl3945]
> RSP: 0018:ffff8800b4d71d10 EFLAGS: 00010287
> RAX: ffff8800bea80c00 RBX: ffff8800b4171380 RCX: 0000000000000021
> RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8800b4171380
> RBP: ffff8800b4d71de0 R08: 000000000000030e R09: 00000000ffffffff
> R10: 000000000ad21900 R11: 0000000000000292 R12: 0000000000000000
> R13: ffff8800b60950f2 R14: 0000000000000000 R15: 0000000000000058
> FS: 0000000000000000(0000) GS:ffff880001a00000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
> CR2: 0000000000000000 CR3: 0000000001612000 CR4: 00000000000006f0
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
> Process iwl3945 (pid: 1493, threadinfo ffff8800b4d70000, task ffff8800b6790940)
> Stack:
> ffff880001a12f40 0000000000012f40 ffff8800b64f8800 ffffffff8161a378
> <0> 0000000000000000 ffff8800b6095000 00578800b4d71e20 0000005800000021
> <0> ffff8800b4d71fd8 00ff8800b4175128 ffff8800b4d71fd8 002188ffb6790940
> Call Trace:
> [<ffffffffa01f9bb5>] iwl_bg_start_internal_scan+0x34f/0x371 [iwlcore]
> [<ffffffff8104e175>] worker_thread+0x1fc/0x2a3
> [<ffffffffa01f9866>] ? iwl_bg_start_internal_scan+0x0/0x371 [iwlcore]
> [<ffffffff81051d96>] ? autoremove_wake_function+0x0/0x34
> [<ffffffff813f4590>] ? _raw_spin_unlock_irqrestore+0x27/0x29
> [<ffffffff8104df79>] ? worker_thread+0x0/0x2a3
> [<ffffffff810518db>] kthread+0x7a/0x82
> [<ffffffff81002c94>] kernel_thread_helper+0x4/0x10
> [<ffffffff81051861>] ? kthread+0x0/0x82
> [<ffffffff81002c90>] ? kernel_thread_helper+0x0/0x10
> Code: 48 b5 00 00 48 89 45 80 48 89 85 70 ff ff ff 41 8d 47 ff 66 89 85 66 ff ff ff e9 43 02 00 00 48 63 55 a8 4c 8b 64 d0 38 8b 55 a4 <41> 39 14 24 0f 85 2a 02 00 00 66 41 8b 54 24 06 48 89 df 41 88
> RIP [<ffffffffa022738f>] iwl3945_request_scan+0x961/0xd68 [iwl3945]
> RSP <ffff8800b4d71d10>
> CR2: 0000000000000000
> ---[ end trace 63fe07b50f147114 ]---
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
Michal Hocko
L3 team
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9
Czech Republic
^ permalink raw reply
* rt73usb & Mesh network
From: Ivo Van Doorn @ 2010-06-03 10:49 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless
Hi Johannes,
There is a kernel bugzilla report regarding rt73usb and mesh networks:
https://bugzilla.kernel.org/show_bug.cgi?id=16099
The stacktrace indicates the problem is a scheduling while atomic bug,
however this seems to be triggerd by mac80211 making the bss_info_changed()
callback function in atomic context. But the current documentation of mac80211
implies that this callback function is allowed to sleep.
Could you check the stacktrace to see if this is indeed a mac80211 bug rather
then rt73usb?
Thanks,
Ivo
^ permalink raw reply
* [PATCH] mac80211: Add interface for driver to temporarily disable dynamic ps
From: Juuso Oikarinen @ 2010-06-03 10:44 UTC (permalink / raw)
To: linville; +Cc: linux-wireless
This mechanism introduced in this patch applies (at least) for hardware
designs using a single shared antenna for both WLAN and BT. In these designs,
the antenna must be toggled between WLAN and BT.
In those hardware, managing WLAN co-existence with Bluetooth requires WLAN
full power save whenever there is Bluetooth activity in order for WLAN to be
able to periodically relinquish the antenna to be used for BT. This is because
BT can only access the shared antenna when WLAN is idle or asleep.
Some hardware, for instance the wl1271, are able to indicate to the host
whenever there is BT traffic. In essence, the hardware will send an indication
to the host whenever there is, for example, SCO traffic or A2DP traffic, and
will send another indication when the traffic is over.
The hardware gets information of Bluetooth traffic via hardware co-existence
control lines - these lines are used to negotiate the shared antenna
ownership. The hardware will give the antenna to BT whenever WLAN is sleeping.
This patch adds the interface to mac80211 to facilitate temporarily disabling
of dynamic power save as per request of the WLAN driver. This interface will
immediately force WLAN to full powersave, hence allowing BT coexistence as
described above.
In these kind of shared antenna desings, when WLAN powersave is fully disabled,
Bluetooth will not work simultaneously with WLAN at all. This patch does not
address that problem. This interface will not change PSM state, so if PSM is
disabled it will remain so. Solving this problem requires knowledge about BT
state, and is best done in user-space.
Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
---
include/net/mac80211.h | 36 +++++++++++++++++++++++++++++++++++-
net/mac80211/mlme.c | 31 +++++++++++++++++++++++++++++--
2 files changed, 64 insertions(+), 3 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index de22cbf..81e0b5f 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -675,7 +675,12 @@ enum ieee80211_smps_mode {
* has been received and the DTIM period is known.
* @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the
* powersave documentation below. This variable is valid only when
- * the CONF_PS flag is set.
+ * the CONF_PS flag is set. This value may change dynamically to zero if
+ * the driver temporarily requires no dynamic ps to allow Bluetooth
+ * co-existence management.
+ * @dynamic_ps_user_timeout: The dynamic powersave timeout (in ms) configured
+ * for the device. This value is used for dynamic_ps_timeout whenever
+ * not set to zero due to driver request.
* @dynamic_ps_forced_timeout: The dynamic powersave timeout (in ms) configured
* by cfg80211 (essentially, wext) If set, this value overrules the value
* chosen by mac80211 based on ps qos network latency.
@@ -699,6 +704,8 @@ enum ieee80211_smps_mode {
struct ieee80211_conf {
u32 flags;
int power_level, dynamic_ps_timeout, dynamic_ps_forced_timeout;
+ int dynamic_ps_user_timeout;
+ bool disable_dynamic_ps;
int max_sleep_period;
u16 listen_interval;
@@ -1260,6 +1267,15 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
* dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS
* enabled whenever user has enabled powersave.
*
+ * Some hardware need to toggle a single shared antenna between WLAN and
+ * Bluetooth to facilitate co-existence. These types of hardware set
+ * limitations on the use of host controlled dynamic powersave whenever there
+ * is simultaneous WLAN and Bluetooth traffic. For these types of hardware, the
+ * driver may request temporarily going into full power save, in order to
+ * enable toggling the antenna between BT and WLAN. If the driver requests
+ * disabling dynamic powersave, the @dynamic_ps_timeout value will be
+ * temporarily set to zero until the driver re-enables dynamic powersave.
+ *
* Driver informs U-APSD client support by enabling
* %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the
* uapsd paramater in conf_tx() operation. Hardware needs to send the QoS
@@ -2460,6 +2476,24 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif);
void ieee80211_connection_loss(struct ieee80211_vif *vif);
/**
+ * ieee80211_disable_dyn_ps - force mac80211 to temporarily disable dynamic psm
+ *
+ * @vif: &struct ieee80211_vif pointer from the add_interface callback.
+ *
+ * Some hardware require full power save to manage simultaneous BT traffic
+ * on the WLAN frequency. Full PSM is required periodically, whenever there are
+ * burst of BT traffic. The hardware gets information of BT traffic via
+ * hardware co-existence lines, and consequentially requests mac80211 to
+ * (temporarily) enter full psm.
+ * This function will only temporarily disable dynamic PS, not enable PSM if
+ * it was not already enabled.
+ * The driver must make sure to re-enable dynamic PS if the driver has disabled
+ * it.
+ *
+ */
+void ieee80211_disable_dyn_ps(struct ieee80211_vif *vif, bool disable);
+
+/**
* ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring
* rssi threshold triggered
*
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 0839c4e..9ad0d90 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -478,6 +478,29 @@ static void ieee80211_handle_pwr_constr(struct ieee80211_sub_if_data *sdata,
}
}
+void ieee80211_disable_dyn_ps(struct ieee80211_vif *vif, bool disable)
+{
+ struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
+ struct ieee80211_local *local = sdata->local;
+ struct ieee80211_conf *conf = &local->hw.conf;
+
+ WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION ||
+ !(local->hw.flags & IEEE80211_HW_SUPPORTS_PS) ||
+ (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS));
+
+ conf->disable_dynamic_ps = disable;
+
+ if (disable) {
+ conf->dynamic_ps_timeout = 0;
+ del_timer_sync(&local->dynamic_ps_timer);
+ ieee80211_queue_work(&local->hw,
+ &local->dynamic_ps_enable_work);
+ } else {
+ conf->dynamic_ps_timeout = conf->dynamic_ps_user_timeout;
+ }
+}
+EXPORT_SYMBOL(ieee80211_disable_dyn_ps);
+
/* powersave */
static void ieee80211_enable_ps(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata)
@@ -553,6 +576,7 @@ void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency)
found->u.mgd.associated->beacon_ies &&
!(found->u.mgd.flags & (IEEE80211_STA_BEACON_POLL |
IEEE80211_STA_CONNECTION_POLL))) {
+ struct ieee80211_conf *conf = &local->hw.conf;
s32 beaconint_us;
if (latency < 0)
@@ -561,7 +585,7 @@ void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency)
beaconint_us = ieee80211_tu_to_usec(
found->vif.bss_conf.beacon_int);
- timeout = local->hw.conf.dynamic_ps_forced_timeout;
+ timeout = conf->dynamic_ps_forced_timeout;
if (timeout < 0) {
/*
* The 2 second value is there for compatibility until
@@ -579,7 +603,10 @@ void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency)
else
timeout = 0;
}
- local->hw.conf.dynamic_ps_timeout = timeout;
+ conf->dynamic_ps_user_timeout = timeout;
+ if (!conf->disable_dynamic_ps)
+ conf->dynamic_ps_timeout =
+ conf->dynamic_ps_user_timeout;
if (beaconint_us > latency) {
local->ps_sdata = NULL;
--
1.6.3.3
^ permalink raw reply related
* Re: IWL3945 problems in 2.6.35-rc1
From: Sedat Dilek @ 2010-06-03 9:18 UTC (permalink / raw)
To: reinette chatre
Cc: Kolekar, Abhijeet, Maxim Levitsky, linux-wireless,
iwlwifi maling list
In-Reply-To: <1275544803.2091.30386.camel@rchatre-DESK>
The good news at first:
Your patch applies against 2.6.35-rc1 vanilla (tested with linux-2.6 GIT).
BUT....
This patch should be renamed to "iwl3945-fix-internal-scan-2.6.35-rc1.patch".
It differs from the one in iwiwifi-2.6 (see below).
Thus, I said to myself let's dig deeper into it.
First, here is my GIT workflow (I use linux-2.6 rcX, later pull in
wireless-2.6 and finally iwlwifi-2.6 master GIT)
[CODE]
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
$ git reset --hard v2.6.35-rc1
$ git pull git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
master:wireless-2.6
$ git pull http://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
master:iwlwifi-2.6
[/CODE]
If I do so, I get NON-iwlwifi related stuff pulled in and that should
not be the case?
I am not a git tool expert, there might be some magic tricks I do not know.
Thanks for any hints on git tool :-).
It would be very helpfull (if you want people to follow iwlwifi
development) to have something similiar like in linux-wireless GIT
trees - just a proposal:
iwlwifi-2.6 -> wireless-2.6 -> net-2.6 -> linux-2.6
iwlwifi-next-2.6 -> wireless-next-2.6 -> net-next-2.6 -> linux-next
iwlwifi-testing -> wireless-testing
As I said I am no git expert, so I don't know if you want to setup 3
diverse GIT repsoitories (as John did for wireless-* trees) or have 3
different GIT branches within existing iwlwifi-2.6 GIT repository as
in drm-2.6 [1].
Me thinks your (re)base in development should be the counterpart in
wireless GIT tree (see above).
Just my two coins.
Kind Regards,
- Sedat -
[1] "drm git branches revisited"
http://article.gmane.org/gmane.comp.video.dri.devel/40626
[ GIT PULL iwlwifi-2.6 master ]
...
Merge made by recursive.
Documentation/feature-removal-schedule.txt | 20 +
drivers/net/wireless/ath/ath9k/ar5008_phy.c | 2 +
drivers/net/wireless/iwlwifi/Kconfig | 6 +-
drivers/net/wireless/iwlwifi/iwl-1000.c | 2 +
drivers/net/wireless/iwlwifi/iwl-3945-debugfs.c | 28 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 198 +-------
drivers/net/wireless/iwlwifi/iwl-4965.c | 87 +++-
drivers/net/wireless/iwlwifi/iwl-5000.c | 60 ++-
drivers/net/wireless/iwlwifi/iwl-6000.c | 345 ++++++++++++-
drivers/net/wireless/iwlwifi/iwl-agn-debugfs.c | 91 ++--
drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c | 26 +-
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 255 +++-------
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 72 ++-
drivers/net/wireless/iwlwifi/iwl-agn-ucode.c | 123 +++++
drivers/net/wireless/iwlwifi/iwl-agn.c | 635 +++++++++++++++--------
drivers/net/wireless/iwlwifi/iwl-agn.h | 34 ++
drivers/net/wireless/iwlwifi/iwl-commands.h | 3 +-
drivers/net/wireless/iwlwifi/iwl-core.c | 301 +++++------
drivers/net/wireless/iwlwifi/iwl-core.h | 25 +-
drivers/net/wireless/iwlwifi/iwl-debugfs.c | 94 ++---
drivers/net/wireless/iwlwifi/iwl-dev.h | 84 ++--
drivers/net/wireless/iwlwifi/iwl-helpers.h | 27 +
drivers/net/wireless/iwlwifi/iwl-rx.c | 63 ++--
drivers/net/wireless/iwlwifi/iwl-scan.c | 40 +-
drivers/net/wireless/iwlwifi/iwl-sta.c | 76 ++--
drivers/net/wireless/iwlwifi/iwl-sta.h | 29 +
drivers/net/wireless/iwlwifi/iwl-tx.c | 17 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 195 +++----
drivers/net/wireless/libertas_tf/main.c | 1 -
drivers/net/wireless/rt2x00/rt2800usb.c | 2 +-
localversion-wireless | 1 +
net/mac80211/scan.c | 1 +
32 files changed, 1782 insertions(+), 1161 deletions(-)
create mode 100644 localversion-wireless
$ diff -Naur iwl3945-fix-internal-scan-2.6.35-rc1.patch
iwl3945-fix-internal-scan-from-iwlwifi-2.6.patch
--- iwl3945-fix-internal-scan-2.6.35-rc1.patch 2010-06-03
10:13:25.000000000 +0200
+++ iwl3945-fix-internal-scan-from-iwlwifi-2.6.patch 2010-06-03
10:41:08.435292314 +0200
@@ -1,27 +1,4 @@
-From patchwork Thu Jun 3 06:00:03 2010
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: IWL3945 problems in 2.6.35-rc1
-Date: Thu, 03 Jun 2010 06:00:03 -0000
-From: reinette chatre <reinette.chatre@intel.com>
-X-Patchwork-Id: 104010
-Message-Id: <1275544803.2091.30386.camel@rchatre-DESK>
-To: "sedat.dilek@gmail.com" <sedat.dilek@gmail.com>
-Cc: "Kolekar, Abhijeet" <abhijeet.kolekar@intel.com>,
- Maxim Levitsky <maximlevitsky@gmail.com>,
- linux-wireless <linux-wireless@vger.kernel.org>,
- iwlwifi maling list <ipw3945-devel@lists.sourceforge.net>
-
-On Wed, 2010-06-02 at 01:35 -0700, Sedat Dilek wrote:
-> This patch seems to be done against iwlwifi-2.6 GIT master.
->
-> Can you please offer a patch against vanilla 2.6.35-rc1 as requested
-> so we can try and give feedback?
-
-Sorry that you did not get this. Please try this patch:
-
->From 364614af1fbabe2989bb3e1434d50255a631546b Mon Sep 17 00:00:00 2001
+From 364614af1fbabe2989bb3e1434d50255a631546b Mon Sep 17 00:00:00 2001
From: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Date: Wed, 2 Jun 2010 21:15:10 -0700
Subject: [PATCH] iwl3945: fix internal scan
@@ -34,9 +11,8 @@
Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
-
---
-drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 30 +-------------
+ drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 30 +-------------
drivers/net/wireless/iwlwifi/iwl-core.c | 39 ++++++++++++++++++
drivers/net/wireless/iwlwifi/iwl-core.h | 2 +
drivers/net/wireless/iwlwifi/iwl3945-base.c | 56 +++++++++++++++++++++++++-
@@ -152,9 +128,9 @@
int iwl_set_rxon_channel(struct iwl_priv *priv, struct ieee80211_channel *ch);
+u8 iwl_get_single_channel_number(struct iwl_priv *priv,
+ enum ieee80211_band band);
- void iwl_set_rxon_ht(struct iwl_priv *priv, struct iwl_ht_config *ht_conf);
- u8 iwl_is_ht40_tx_allowed(struct iwl_priv *priv,
- struct ieee80211_sta_ht_cap *sta_ht_inf);
+ void iwl_set_flags_for_band(struct iwl_priv *priv,
+ enum ieee80211_band band,
+ struct ieee80211_vif *vif);
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c
b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index a527895..2366394 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -229,3 +205,6 @@
if (scan->channel_count == 0) {
IWL_DEBUG_SCAN(priv, "channel count %d\n", scan->channel_count);
+--
+1.7.1
+
--- EOT ---
On Thu, Jun 3, 2010 at 8:00 AM, reinette chatre
<reinette.chatre@intel.com> wrote:
> On Wed, 2010-06-02 at 01:35 -0700, Sedat Dilek wrote:
>> This patch seems to be done against iwlwifi-2.6 GIT master.
>>
>> Can you please offer a patch against vanilla 2.6.35-rc1 as requested
>> so we can try and give feedback?
>
> Sorry that you did not get this. Please try this patch:
>
> >From 364614af1fbabe2989bb3e1434d50255a631546b Mon Sep 17 00:00:00 2001
> From: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
> Date: Wed, 2 Jun 2010 21:15:10 -0700
> Subject: [PATCH] iwl3945: fix internal scan
>
> Port of internal scan to iwl3945 missed introduction
> of iwl3945_get_single_channel_for_scan.
>
> Fix the following bug by introducing the iwl3945_get_single_channel_for_scan
> http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2208
>
> Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
> ---
> drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 30 +-------------
> drivers/net/wireless/iwlwifi/iwl-core.c | 39 ++++++++++++++++++
> drivers/net/wireless/iwlwifi/iwl-core.h | 2 +
> drivers/net/wireless/iwlwifi/iwl3945-base.c | 56 +++++++++++++++++++++++++-
> 4 files changed, 96 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
> index 59aeb2e..ac4031e 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
> @@ -1031,10 +1031,9 @@ static int iwl_get_single_channel_for_scan(struct iwl_priv *priv,
> struct iwl_scan_channel *scan_ch)
> {
> const struct ieee80211_supported_band *sband;
> - const struct iwl_channel_info *ch_info;
> u16 passive_dwell = 0;
> u16 active_dwell = 0;
> - int i, added = 0;
> + int added = 0;
> u16 channel = 0;
>
> sband = iwl_get_hw_mode(priv, band);
> @@ -1049,32 +1048,7 @@ static int iwl_get_single_channel_for_scan(struct iwl_priv *priv,
> if (passive_dwell <= active_dwell)
> passive_dwell = active_dwell + 1;
>
> - /* only scan single channel, good enough to reset the RF */
> - /* pick the first valid not in-use channel */
> - if (band == IEEE80211_BAND_5GHZ) {
> - for (i = 14; i < priv->channel_count; i++) {
> - if (priv->channel_info[i].channel !=
> - le16_to_cpu(priv->staging_rxon.channel)) {
> - channel = priv->channel_info[i].channel;
> - ch_info = iwl_get_channel_info(priv,
> - band, channel);
> - if (is_channel_valid(ch_info))
> - break;
> - }
> - }
> - } else {
> - for (i = 0; i < 14; i++) {
> - if (priv->channel_info[i].channel !=
> - le16_to_cpu(priv->staging_rxon.channel)) {
> - channel =
> - priv->channel_info[i].channel;
> - ch_info = iwl_get_channel_info(priv,
> - band, channel);
> - if (is_channel_valid(ch_info))
> - break;
> - }
> - }
> - }
> + channel = iwl_get_single_channel_number(priv, band);
> if (channel) {
> scan_ch->channel = cpu_to_le16(channel);
> scan_ch->type = SCAN_CHANNEL_TYPE_PASSIVE;
> diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
> index 3ed3dbf..11b20ba 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-core.c
> +++ b/drivers/net/wireless/iwlwifi/iwl-core.c
> @@ -855,6 +855,45 @@ void iwl_set_rxon_chain(struct iwl_priv *priv)
> }
> EXPORT_SYMBOL(iwl_set_rxon_chain);
>
> +/* Return valid channel */
> +u8 iwl_get_single_channel_number(struct iwl_priv *priv,
> + enum ieee80211_band band)
> +{
> + const struct iwl_channel_info *ch_info;
> + int i;
> + u8 channel = 0;
> +
> + /* only scan single channel, good enough to reset the RF */
> + /* pick the first valid not in-use channel */
> + if (band == IEEE80211_BAND_5GHZ) {
> + for (i = 14; i < priv->channel_count; i++) {
> + if (priv->channel_info[i].channel !=
> + le16_to_cpu(priv->staging_rxon.channel)) {
> + channel = priv->channel_info[i].channel;
> + ch_info = iwl_get_channel_info(priv,
> + band, channel);
> + if (is_channel_valid(ch_info))
> + break;
> + }
> + }
> + } else {
> + for (i = 0; i < 14; i++) {
> + if (priv->channel_info[i].channel !=
> + le16_to_cpu(priv->staging_rxon.channel)) {
> + channel =
> + priv->channel_info[i].channel;
> + ch_info = iwl_get_channel_info(priv,
> + band, channel);
> + if (is_channel_valid(ch_info))
> + break;
> + }
> + }
> + }
> +
> + return channel;
> +}
> +EXPORT_SYMBOL(iwl_get_single_channel_number);
> +
> /**
> * iwl_set_rxon_channel - Set the phymode and channel values in staging RXON
> * @phymode: MODE_IEEE80211A sets to 5.2GHz; all else set to 2.4GHz
> diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
> index 87dd573..244d163 100644
> --- a/drivers/net/wireless/iwlwifi/iwl-core.h
> +++ b/drivers/net/wireless/iwlwifi/iwl-core.h
> @@ -347,6 +347,8 @@ int iwl_check_rxon_cmd(struct iwl_priv *priv);
> int iwl_full_rxon_required(struct iwl_priv *priv);
> void iwl_set_rxon_chain(struct iwl_priv *priv);
> int iwl_set_rxon_channel(struct iwl_priv *priv, struct ieee80211_channel *ch);
> +u8 iwl_get_single_channel_number(struct iwl_priv *priv,
> + enum ieee80211_band band);
> void iwl_set_rxon_ht(struct iwl_priv *priv, struct iwl_ht_config *ht_conf);
> u8 iwl_is_ht40_tx_allowed(struct iwl_priv *priv,
> struct ieee80211_sta_ht_cap *sta_ht_inf);
> diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
> index a527895..2366394 100644
> --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
> +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
> @@ -1785,6 +1785,49 @@ static void iwl3945_irq_tasklet(struct iwl_priv *priv)
> #endif
> }
>
> +static int iwl3945_get_single_channel_for_scan(struct iwl_priv *priv,
> + struct ieee80211_vif *vif,
> + enum ieee80211_band band,
> + struct iwl3945_scan_channel *scan_ch)
> +{
> + const struct ieee80211_supported_band *sband;
> + u16 passive_dwell = 0;
> + u16 active_dwell = 0;
> + int added = 0;
> + u8 channel = 0;
> +
> + sband = iwl_get_hw_mode(priv, band);
> + if (!sband) {
> + IWL_ERR(priv, "invalid band\n");
> + return added;
> + }
> +
> + active_dwell = iwl_get_active_dwell_time(priv, band, 0);
> + passive_dwell = iwl_get_passive_dwell_time(priv, band, vif);
> +
> + if (passive_dwell <= active_dwell)
> + passive_dwell = active_dwell + 1;
> +
> +
> + channel = iwl_get_single_channel_number(priv, band);
> +
> + if (channel) {
> + scan_ch->channel = channel;
> + scan_ch->type = 0; /* passive */
> + scan_ch->active_dwell = cpu_to_le16(active_dwell);
> + scan_ch->passive_dwell = cpu_to_le16(passive_dwell);
> + /* Set txpower levels to defaults */
> + scan_ch->tpc.dsp_atten = 110;
> + if (band == IEEE80211_BAND_5GHZ)
> + scan_ch->tpc.tx_gain = ((1 << 5) | (3 << 3)) | 3;
> + else
> + scan_ch->tpc.tx_gain = ((1 << 5) | (5 << 3));
> + added++;
> + } else
> + IWL_ERR(priv, "no valid channel found\n");
> + return added;
> +}
> +
> static int iwl3945_get_channels_for_scan(struct iwl_priv *priv,
> enum ieee80211_band band,
> u8 is_active, u8 n_probes,
> @@ -2935,9 +2978,16 @@ void iwl3945_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
> /* select Rx antennas */
> scan->flags |= iwl3945_get_antenna_flags(priv);
>
> - scan->channel_count =
> - iwl3945_get_channels_for_scan(priv, band, is_active, n_probes,
> - (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)], vif);
> + if (priv->is_internal_short_scan) {
> + scan->channel_count =
> + iwl3945_get_single_channel_for_scan(priv, vif, band,
> + (void *)&scan->data[le16_to_cpu(
> + scan->tx_cmd.len)]);
> + } else {
> + scan->channel_count =
> + iwl3945_get_channels_for_scan(priv, band, is_active, n_probes,
> + (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)], vif);
> + }
>
> if (scan->channel_count == 0) {
> IWL_DEBUG_SCAN(priv, "channel count %d\n", scan->channel_count);
> --
> 1.7.0.4
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* RE: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
From: Stephen Chen @ 2010-06-03 6:10 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: Sujith Manoharan, linville@tuxdriver.com,
linux-wireless@vger.kernel.org
In-Reply-To: <AANLkTimyXZ5dGb_9GlJJgjNf5fpWsrieUTjfzxuqmDzS@mail.gmail.com>
None on the market today, maybe in Q3.
Thank you.
Stephen Chen
-----Original Message-----
From: Luis R. Rodriguez [mailto:mcgrof@gmail.com]
Sent: Thursday, June 03, 2010 12:58 PM
To: Stephen Chen
Cc: Sujith Manoharan; linville@tuxdriver.com; linux-wireless@vger.kernel.org
Subject: Re: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
On Wed, Jun 2, 2010 at 7:53 PM, Stephen Chen <Stephen.Chen@atheros.com> wrote:
> You meant UB94?
Yeap.
Luis
^ permalink raw reply
* Re: IWL3945 problems in 2.6.35-rc1
From: reinette chatre @ 2010-06-03 6:00 UTC (permalink / raw)
To: sedat.dilek@gmail.com
Cc: Kolekar, Abhijeet, Maxim Levitsky, linux-wireless,
iwlwifi maling list
In-Reply-To: <AANLkTimRt-8d5RkBtGVyReASZqBFIjSzOHPFV6RVjYlV@mail.gmail.com>
On Wed, 2010-06-02 at 01:35 -0700, Sedat Dilek wrote:
> This patch seems to be done against iwlwifi-2.6 GIT master.
>
> Can you please offer a patch against vanilla 2.6.35-rc1 as requested
> so we can try and give feedback?
Sorry that you did not get this. Please try this patch:
>From 364614af1fbabe2989bb3e1434d50255a631546b Mon Sep 17 00:00:00 2001
From: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Date: Wed, 2 Jun 2010 21:15:10 -0700
Subject: [PATCH] iwl3945: fix internal scan
Port of internal scan to iwl3945 missed introduction
of iwl3945_get_single_channel_for_scan.
Fix the following bug by introducing the iwl3945_get_single_channel_for_scan
http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2208
Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 30 +-------------
drivers/net/wireless/iwlwifi/iwl-core.c | 39 ++++++++++++++++++
drivers/net/wireless/iwlwifi/iwl-core.h | 2 +
drivers/net/wireless/iwlwifi/iwl3945-base.c | 56 +++++++++++++++++++++++++-
4 files changed, 96 insertions(+), 31 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 59aeb2e..ac4031e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -1031,10 +1031,9 @@ static int iwl_get_single_channel_for_scan(struct iwl_priv *priv,
struct iwl_scan_channel *scan_ch)
{
const struct ieee80211_supported_band *sband;
- const struct iwl_channel_info *ch_info;
u16 passive_dwell = 0;
u16 active_dwell = 0;
- int i, added = 0;
+ int added = 0;
u16 channel = 0;
sband = iwl_get_hw_mode(priv, band);
@@ -1049,32 +1048,7 @@ static int iwl_get_single_channel_for_scan(struct iwl_priv *priv,
if (passive_dwell <= active_dwell)
passive_dwell = active_dwell + 1;
- /* only scan single channel, good enough to reset the RF */
- /* pick the first valid not in-use channel */
- if (band == IEEE80211_BAND_5GHZ) {
- for (i = 14; i < priv->channel_count; i++) {
- if (priv->channel_info[i].channel !=
- le16_to_cpu(priv->staging_rxon.channel)) {
- channel = priv->channel_info[i].channel;
- ch_info = iwl_get_channel_info(priv,
- band, channel);
- if (is_channel_valid(ch_info))
- break;
- }
- }
- } else {
- for (i = 0; i < 14; i++) {
- if (priv->channel_info[i].channel !=
- le16_to_cpu(priv->staging_rxon.channel)) {
- channel =
- priv->channel_info[i].channel;
- ch_info = iwl_get_channel_info(priv,
- band, channel);
- if (is_channel_valid(ch_info))
- break;
- }
- }
- }
+ channel = iwl_get_single_channel_number(priv, band);
if (channel) {
scan_ch->channel = cpu_to_le16(channel);
scan_ch->type = SCAN_CHANNEL_TYPE_PASSIVE;
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 3ed3dbf..11b20ba 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -855,6 +855,45 @@ void iwl_set_rxon_chain(struct iwl_priv *priv)
}
EXPORT_SYMBOL(iwl_set_rxon_chain);
+/* Return valid channel */
+u8 iwl_get_single_channel_number(struct iwl_priv *priv,
+ enum ieee80211_band band)
+{
+ const struct iwl_channel_info *ch_info;
+ int i;
+ u8 channel = 0;
+
+ /* only scan single channel, good enough to reset the RF */
+ /* pick the first valid not in-use channel */
+ if (band == IEEE80211_BAND_5GHZ) {
+ for (i = 14; i < priv->channel_count; i++) {
+ if (priv->channel_info[i].channel !=
+ le16_to_cpu(priv->staging_rxon.channel)) {
+ channel = priv->channel_info[i].channel;
+ ch_info = iwl_get_channel_info(priv,
+ band, channel);
+ if (is_channel_valid(ch_info))
+ break;
+ }
+ }
+ } else {
+ for (i = 0; i < 14; i++) {
+ if (priv->channel_info[i].channel !=
+ le16_to_cpu(priv->staging_rxon.channel)) {
+ channel =
+ priv->channel_info[i].channel;
+ ch_info = iwl_get_channel_info(priv,
+ band, channel);
+ if (is_channel_valid(ch_info))
+ break;
+ }
+ }
+ }
+
+ return channel;
+}
+EXPORT_SYMBOL(iwl_get_single_channel_number);
+
/**
* iwl_set_rxon_channel - Set the phymode and channel values in staging RXON
* @phymode: MODE_IEEE80211A sets to 5.2GHz; all else set to 2.4GHz
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index 87dd573..244d163 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -347,6 +347,8 @@ int iwl_check_rxon_cmd(struct iwl_priv *priv);
int iwl_full_rxon_required(struct iwl_priv *priv);
void iwl_set_rxon_chain(struct iwl_priv *priv);
int iwl_set_rxon_channel(struct iwl_priv *priv, struct ieee80211_channel *ch);
+u8 iwl_get_single_channel_number(struct iwl_priv *priv,
+ enum ieee80211_band band);
void iwl_set_rxon_ht(struct iwl_priv *priv, struct iwl_ht_config *ht_conf);
u8 iwl_is_ht40_tx_allowed(struct iwl_priv *priv,
struct ieee80211_sta_ht_cap *sta_ht_inf);
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index a527895..2366394 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -1785,6 +1785,49 @@ static void iwl3945_irq_tasklet(struct iwl_priv *priv)
#endif
}
+static int iwl3945_get_single_channel_for_scan(struct iwl_priv *priv,
+ struct ieee80211_vif *vif,
+ enum ieee80211_band band,
+ struct iwl3945_scan_channel *scan_ch)
+{
+ const struct ieee80211_supported_band *sband;
+ u16 passive_dwell = 0;
+ u16 active_dwell = 0;
+ int added = 0;
+ u8 channel = 0;
+
+ sband = iwl_get_hw_mode(priv, band);
+ if (!sband) {
+ IWL_ERR(priv, "invalid band\n");
+ return added;
+ }
+
+ active_dwell = iwl_get_active_dwell_time(priv, band, 0);
+ passive_dwell = iwl_get_passive_dwell_time(priv, band, vif);
+
+ if (passive_dwell <= active_dwell)
+ passive_dwell = active_dwell + 1;
+
+
+ channel = iwl_get_single_channel_number(priv, band);
+
+ if (channel) {
+ scan_ch->channel = channel;
+ scan_ch->type = 0; /* passive */
+ scan_ch->active_dwell = cpu_to_le16(active_dwell);
+ scan_ch->passive_dwell = cpu_to_le16(passive_dwell);
+ /* Set txpower levels to defaults */
+ scan_ch->tpc.dsp_atten = 110;
+ if (band == IEEE80211_BAND_5GHZ)
+ scan_ch->tpc.tx_gain = ((1 << 5) | (3 << 3)) | 3;
+ else
+ scan_ch->tpc.tx_gain = ((1 << 5) | (5 << 3));
+ added++;
+ } else
+ IWL_ERR(priv, "no valid channel found\n");
+ return added;
+}
+
static int iwl3945_get_channels_for_scan(struct iwl_priv *priv,
enum ieee80211_band band,
u8 is_active, u8 n_probes,
@@ -2935,9 +2978,16 @@ void iwl3945_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
/* select Rx antennas */
scan->flags |= iwl3945_get_antenna_flags(priv);
- scan->channel_count =
- iwl3945_get_channels_for_scan(priv, band, is_active, n_probes,
- (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)], vif);
+ if (priv->is_internal_short_scan) {
+ scan->channel_count =
+ iwl3945_get_single_channel_for_scan(priv, vif, band,
+ (void *)&scan->data[le16_to_cpu(
+ scan->tx_cmd.len)]);
+ } else {
+ scan->channel_count =
+ iwl3945_get_channels_for_scan(priv, band, is_active, n_probes,
+ (void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)], vif);
+ }
if (scan->channel_count == 0) {
IWL_DEBUG_SCAN(priv, "channel count %d\n", scan->channel_count);
--
1.7.0.4
^ permalink raw reply related
* [PATCH] iwlwifi: use the DMA state API instead of the pci equivalents
From: FUJITA Tomonori @ 2010-06-03 5:19 UTC (permalink / raw)
To: yi.zhu, reinette.chatre, ilw; +Cc: linux-wireless, linville
This can be cleanly applied to wireless-2.6 and iwlwifi git trees.
=
From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Subject: [PATCH] iwlwifi: use the DMA state API instead of the pci equivalents
This replace the PCI DMA state API (include/linux/pci-dma.h) with the
DMA equivalents since the PCI DMA state API will be obsolete.
No functional change.
For further information about the background:
http://marc.info/?l=linux-netdev&m=127037540020276&w=2
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
---
drivers/net/wireless/iwlwifi/iwl-3945.c | 4 ++--
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 4 ++--
drivers/net/wireless/iwlwifi/iwl-agn.c | 4 ++--
drivers/net/wireless/iwlwifi/iwl-dev.h | 4 ++--
drivers/net/wireless/iwlwifi/iwl-tx.c | 16 ++++++++--------
drivers/net/wireless/iwlwifi/iwl3945-base.c | 4 ++--
6 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 253d032..0fa1d51 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -696,8 +696,8 @@ void iwl3945_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
/* Unmap tx_cmd */
if (counter)
pci_unmap_single(dev,
- pci_unmap_addr(&txq->meta[index], mapping),
- pci_unmap_len(&txq->meta[index], len),
+ dma_unmap_addr(&txq->meta[index], mapping),
+ dma_unmap_len(&txq->meta[index], len),
PCI_DMA_TODEVICE);
/* unmap chunks if any */
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
index 7e68517..fa82f86 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
@@ -705,8 +705,8 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
txcmd_phys = pci_map_single(priv->pci_dev,
&out_cmd->hdr, len,
PCI_DMA_BIDIRECTIONAL);
- pci_unmap_addr_set(out_meta, mapping, txcmd_phys);
- pci_unmap_len_set(out_meta, len, len);
+ dma_unmap_addr_set(out_meta, mapping, txcmd_phys);
+ dma_unmap_len_set(out_meta, len, len);
/* Add buffer containing Tx command and MAC(!) header to TFD's
* first entry */
priv->cfg->ops->lib->txq_attach_buf_to_tfd(priv, txq,
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index ef05f63..776ef2e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -475,8 +475,8 @@ void iwl_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
/* Unmap tx_cmd */
if (num_tbs)
pci_unmap_single(dev,
- pci_unmap_addr(&txq->meta[index], mapping),
- pci_unmap_len(&txq->meta[index], len),
+ dma_unmap_addr(&txq->meta[index], mapping),
+ dma_unmap_len(&txq->meta[index], len),
PCI_DMA_BIDIRECTIONAL);
/* Unmap chunks, if any. */
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 401ce2e..57cddab 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -114,8 +114,8 @@ struct iwl_cmd_meta {
* structure is stored at the end of the shared queue memory. */
u32 flags;
- DECLARE_PCI_UNMAP_ADDR(mapping)
- DECLARE_PCI_UNMAP_LEN(len)
+ DEFINE_DMA_UNMAP_ADDR(mapping);
+ DEFINE_DMA_UNMAP_LEN(len);
};
/*
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
index 788dcf1..a81989c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@ -154,15 +154,15 @@ void iwl_cmd_queue_free(struct iwl_priv *priv)
}
pci_unmap_single(priv->pci_dev,
- pci_unmap_addr(&txq->meta[i], mapping),
- pci_unmap_len(&txq->meta[i], len),
+ dma_unmap_addr(&txq->meta[i], mapping),
+ dma_unmap_len(&txq->meta[i], len),
PCI_DMA_BIDIRECTIONAL);
}
if (huge) {
i = q->n_window;
pci_unmap_single(priv->pci_dev,
- pci_unmap_addr(&txq->meta[i], mapping),
- pci_unmap_len(&txq->meta[i], len),
+ dma_unmap_addr(&txq->meta[i], mapping),
+ dma_unmap_len(&txq->meta[i], len),
PCI_DMA_BIDIRECTIONAL);
}
@@ -516,8 +516,8 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
phys_addr = pci_map_single(priv->pci_dev, &out_cmd->hdr,
fix_size, PCI_DMA_BIDIRECTIONAL);
- pci_unmap_addr_set(out_meta, mapping, phys_addr);
- pci_unmap_len_set(out_meta, len, fix_size);
+ dma_unmap_addr_set(out_meta, mapping, phys_addr);
+ dma_unmap_len_set(out_meta, len, fix_size);
trace_iwlwifi_dev_hcmd(priv, &out_cmd->hdr, fix_size, cmd->flags);
@@ -611,8 +611,8 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)
meta = &txq->meta[cmd_index];
pci_unmap_single(priv->pci_dev,
- pci_unmap_addr(meta, mapping),
- pci_unmap_len(meta, len),
+ dma_unmap_addr(meta, mapping),
+ dma_unmap_len(meta, len),
PCI_DMA_BIDIRECTIONAL);
/* Input error checking is done when commands are added to queue. */
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index a527895..a1bac61 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -619,8 +619,8 @@ static int iwl3945_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
len, PCI_DMA_TODEVICE);
/* we do not map meta data ... so we can safely access address to
* provide to unmap command*/
- pci_unmap_addr_set(out_meta, mapping, txcmd_phys);
- pci_unmap_len_set(out_meta, len, len);
+ dma_unmap_addr_set(out_meta, mapping, txcmd_phys);
+ dma_unmap_len_set(out_meta, len, len);
/* Add buffer containing Tx command and MAC(!) header to TFD's
* first entry */
--
1.6.5
^ permalink raw reply related
* Re: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
From: Luis R. Rodriguez @ 2010-06-03 4:58 UTC (permalink / raw)
To: Stephen Chen
Cc: Sujith Manoharan, linville@tuxdriver.com,
linux-wireless@vger.kernel.org
In-Reply-To: <2C7E3D9F044EE14CAA55964B610057BDF7317285@TAEXMB-01.global.atheros.com>
On Wed, Jun 2, 2010 at 7:53 PM, Stephen Chen <Stephen.Chen@atheros.com> wrote:
> You meant UB94?
Yeap.
Luis
^ permalink raw reply
* Re: [ath5k-devel] New developer to linux and ath5k, request for assistance :)
From: Bruno Randolf @ 2010-06-03 4:52 UTC (permalink / raw)
To: Ray; +Cc: ath5k-devel, linux-wireless
In-Reply-To: <F2E5E871-ED3F-42DB-A34B-3C9B46233F9F@gmail.com>
On Thursday 03 June 2010 11:43:47 Ray wrote:
> Hi fellow developers,
>
> I have just started to look into Linux and would like to get my hands dirty
> with the ATH5k development.
>
> As of now, I have installed Ubuntu LTS 10.04 and some software packages I
> believe would be necessary for development (i.e. Build-essentials,
> linux-libc-dev and linux-source-2.6.32). The next step I suppose is to
> download the ATH5k source and start to look into the codes. But I have
> several questions in mind and would appreciate if some of you can shed me
> some light and point me to the right direction.
>
> I understand that this version is Ubuntu already comes with ATH5k installed
> by default. My understanding is that I have to first disable it and then
> download the ATH5K source off the internet and work on the downloaded copy
> instead. In that case, may I know how can I unload the default ATH5K from
> Ubuntu? I tried using the blacklist method as suggested by some folks in a
> forum but I am wondering if that will effectively blacklist my home-brewed
> ATH5K as a result subsequently.
>
> Lastly, may I know if theres any online guide on how do I get started with
> ATH5K development for a new developer who has little Linux experience? I'm
> a relatively quick learner, so if theres an online guide somewhere, I
> should be able to follow it through and hopefully get up to speed quickly.
>
> Thanks for reading and I appreciate all the help I can get. Cheers! :)
hi simon!
we can definetly need some help with ath5k... :)
the best way to work on ath5k is to compile your own kernel based on the
wirless-testing git tree. this is where all wireless drivers are developed and
using it you can make sure you get all latest changes to mac80211 (the driver
independet mac-layer part) and ath5k. just compile the kernel, install it and
boot into it. you can use the ubuntu kernel configuration
(/boot/config-2.6.32-22-generic) as a start for your kernel, but you can
disable a lot of drivers and optimize it quite a bit to have faster compile
times (and better optimization for your machine).
a good start to read is:
http://wireless.kernel.org/en/developers/Documentation
http://wireless.kernel.org/en/users/Drivers/ath5k
if you have any more questions, feel free to ask...
bruno
^ permalink raw reply
* New developer to linux and ath5k, request for assistance :)
From: Ray @ 2010-06-03 3:02 UTC (permalink / raw)
To: linville, linux-wireless
Hi fellow developers,
I have just started to look into Linux and would like to get my hands dirty with the ATH5k development.
As of now, I have installed Ubuntu LTS 10.04 and some software packages I believe would be necessary for development (i.e. Build-essentials, linux-libc-dev and linux-source-2.6.32). The next step I suppose is to download the ATH5k source and start to look into the codes. But I have several questions in mind and would appreciate if some of you can shed me some light and point me to the right direction.
I understand that this version is Ubuntu already comes with ATH5k installed by default. My understanding is that I have to first disable it and then download the ATH5K source off the internet and work on the downloaded copy instead. In that case, may I know how can I unload the default ATH5K from Ubuntu? I tried using the blacklist method as suggested by some folks in a forum but I am wondering if that will effectively blacklist my home-brewed ATH5K as a result subsequently.
Lastly, may I know if theres any online guide on how do I get started with ATH5K development for a new developer who has little Linux experience? I'm a relatively quick learner, so if theres an online guide somewhere, I should be able to follow it through and hopefully get up to speed quickly.
Thanks for reading and I appreciate all the help I can get. Cheers! :)
Best,
Simon
^ permalink raw reply
* RE: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
From: Stephen Chen @ 2010-06-03 2:53 UTC (permalink / raw)
To: Sujith Manoharan, Luis R. Rodriguez
Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org
In-Reply-To: <19462.65521.350785.861619@gargle.gargle.HOWL>
You meant UB94?
Thank you.
Stephen Chen
-----Original Message-----
From: Sujith Manoharan
Sent: Thursday, June 03, 2010 9:06 AM
To: Luis R. Rodriguez
Cc: Stephen Chen; linville@tuxdriver.com; linux-wireless@vger.kernel.org
Subject: Re: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
Luis R. Rodriguez wrote:
> Adding Stephen. Stephen, this is a public e-mail.
>
> On Wed, Jun 2, 2010 at 5:58 PM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> > Luis R. Rodriguez wrote:
> >> On Wed, Jun 2, 2010 at 3:23 AM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> >> > The supported MCS rate set has to be setup properly
> >> > for 2-stream devices.
> >> >
> >> > Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> >>
> >> Awesome, are these being sold yet?
> >
> > Yep.
>
> What are the names of a few products in the market with these devices?
Hm, not sure, maybe Stephen knows ?
Sujith
^ permalink raw reply
* Re: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
From: Sujith @ 2010-06-03 1:05 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: Stephen Chen, linville@tuxdriver.com,
linux-wireless@vger.kernel.org
In-Reply-To: <AANLkTikumUaxrXti3F8gPbb1NMAcVQNqmnKpmqSicD5g@mail.gmail.com>
Luis R. Rodriguez wrote:
> Adding Stephen. Stephen, this is a public e-mail.
>
> On Wed, Jun 2, 2010 at 5:58 PM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> > Luis R. Rodriguez wrote:
> >> On Wed, Jun 2, 2010 at 3:23 AM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> >> > The supported MCS rate set has to be setup properly
> >> > for 2-stream devices.
> >> >
> >> > Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> >>
> >> Awesome, are these being sold yet?
> >
> > Yep.
>
> What are the names of a few products in the market with these devices?
Hm, not sure, maybe Stephen knows ?
Sujith
^ permalink raw reply
* Re: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
From: Luis R. Rodriguez @ 2010-06-03 1:00 UTC (permalink / raw)
To: Sujith, Stephen Chen
Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org
In-Reply-To: <19462.65093.260306.326262@gargle.gargle.HOWL>
Adding Stephen. Stephen, this is a public e-mail.
On Wed, Jun 2, 2010 at 5:58 PM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> Luis R. Rodriguez wrote:
>> On Wed, Jun 2, 2010 at 3:23 AM, Sujith <Sujith.Manoharan@atheros.com> wrote:
>> > The supported MCS rate set has to be setup properly
>> > for 2-stream devices.
>> >
>> > Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
>>
>> Awesome, are these being sold yet?
>
> Yep.
What are the names of a few products in the market with these devices?
Luis
^ permalink raw reply
* Re: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
From: Sujith @ 2010-06-03 0:58 UTC (permalink / raw)
To: Luis R. Rodriguez; +Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org
In-Reply-To: <AANLkTilTTMEHGQj0Y4roSOjf69ufynaV-jmtb2g6n181@mail.gmail.com>
Luis R. Rodriguez wrote:
> On Wed, Jun 2, 2010 at 3:23 AM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> > The supported MCS rate set has to be setup properly
> > for 2-stream devices.
> >
> > Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
>
> Awesome, are these being sold yet?
Yep.
Sujith
^ permalink raw reply
* Re: [PATCH 1/8] ath9k: Determine Firmware on probe
From: Sujith @ 2010-06-03 0:58 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: Marcel Holtmann, linville@tuxdriver.com,
linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org
In-Reply-To: <AANLkTiky9UF-aqeZCFleOFSIVw3vDiYbLUdTkkYEWN2B@mail.gmail.com>
Luis R. Rodriguez wrote:
> I had done some something similar for ar9170 a while back [1] when
> adding AVM FRITZ support to ar9170 and then got complaints from Marcel
> on this approach since it requires synching the PCI device IDs in two
> places. I frankly don't care how we do this but we should try to at
> least stick to one way of doing this.
>
> [1] http://osdir.com/ml/linux-wireless/2009-05/msg01219.html
I did look at using the device_id table (using USB_DEVICE_VER),
but our case is like this:
* for prodId, version 2.2 load foo_1_1.fw
* for prodId, version everything else, load foo.fw
This requires a bit of handling in the driver, hence this patch.
But thinking about it, will this work ?
USB_DEVICE_VER(vend, 0x7010, 2, 2); [set .driver_info to "foo_1_1.fw]
USB_DEVICE(vend, 0x7010); [set .driver_info to "foo.fw"]
That is, will the second registration be the fallback case in case
bcdLo and bcdHi are _anything_ other than 2.2 ?
Sujith
^ permalink raw reply
* [PATCH v2] ath9k: Fix bug in rate table
From: Vasanthakumar Thiagarajan @ 2010-06-03 0:22 UTC (permalink / raw)
To: linville; +Cc: linux-wireless
The following commit added an entry in 11na and 11ng rate
table but missed to update its rate count field. This
inconsistency between the rate count and the actual number
of rates in the table will leave out the final rate entry
(mcs15 with half gi in ht40) while forming the valid
rate indices. Not having mcs15+shortGI in ht40 will have
a performance impact (on max throughput) of about 10% both
in nght40 and naht40 mode.
Author: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Date: Thu May 13 18:42:38 2010 -0700
ath9k: Enable Short GI in 20 Mhz for ar9287 and later chips
This patch enables short GI rx at all rates and tx at mcs15
for 20 Mhz channel width also.
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
---
drivers/net/wireless/ath/ath9k/rc.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index f5180d3..02b6052 100644
--- a/drivers/net/wireless/ath/ath9k/rc.c
+++ b/drivers/net/wireless/ath/ath9k/rc.c
@@ -20,7 +20,7 @@
#include "ath9k.h"
static const struct ath_rate_table ar5416_11na_ratetable = {
- 42,
+ 43,
8, /* MCS start */
{
{ VALID, VALID, WLAN_RC_PHY_OFDM, 6000, /* 6 Mb */
@@ -118,7 +118,7 @@ static const struct ath_rate_table ar5416_11na_ratetable = {
* for HT are the 64K max aggregate limit */
static const struct ath_rate_table ar5416_11ng_ratetable = {
- 46,
+ 47,
12, /* MCS start */
{
{ VALID_ALL, VALID_ALL, WLAN_RC_PHY_CCK, 1000, /* 1 Mb */
--
1.7.0.4
^ permalink raw reply related
* Re: [PATCH] ath9k: Fix bug in rate table
From: Luis R. Rodriguez @ 2010-06-02 23:40 UTC (permalink / raw)
To: Vasanthakumar Thiagarajan; +Cc: linville, linux-wireless
In-Reply-To: <1275519046-8709-1-git-send-email-vasanth@atheros.com>
On Wed, Jun 2, 2010 at 3:50 PM, Vasanthakumar Thiagarajan
<vasanth@atheros.com> wrote:
> The following commit added an entry in 11na and 11ng rate
> table but missed to update its rate count field.
>
> Author: Vasanthakumar Thiagarajan <vasanth@atheros.com>
> Date: Thu May 13 18:42:38 2010 -0700
>
> ath9k: Enable Short GI in 20 Mhz for ar9287 and later chips
>
> This patch enables short GI rx at all rates and tx at mcs15
> for 20 Mhz channel width also.
>
What impact did this bug have though?
Luis
^ permalink raw reply
* iwlwifi 6050 uCode available
From: reinette chatre @ 2010-06-02 23:20 UTC (permalink / raw)
To: linux-wireless@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net
Hi,
uCode for Intel® Wireless WiFi Link 6250AGN Adapter is now available for
download from http://intellinuxwireless.org/?n=Downloads
Intel® Centrino® Advanced N + WiMax 6250 is a multi-comm WiFi and WiMax
product. This release only supports the WiFi portion of this product.
The WiMax portion of this product is connected via internal USB
interface, which on power up is actively drawing power from the USB bus.
If you are working with a platform software configuration which is not
loading the WiMax driver for the Intel® Centrino® Advanced N + WiMax
6250 device, then the WiMax portion of this device should be put into
power save mode. Please refer to the README included with the firmware
for the details.
Reinette
^ permalink raw reply
* Re: [PATCH V2] ath9k: Enable Short GI in 20 Mhz for ar9287 and later chips
From: Vasanthakumar Thiagarajan @ 2010-06-02 22:55 UTC (permalink / raw)
To: linville@tuxdriver.com; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <1275503034-5794-1-git-send-email-vasanth@atheros.com>
On Wed, Jun 02, 2010 at 11:53:54PM +0530, Vasanthakumar Thiagarajan wrote:
> This patch enables short GI rx at all rates and tx at mcs15
> for 20 Mhz channel width also.
>
> Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
> ---
>
> V2 Update respective rate count
Please ignore this v2, i've sent a separate patch fixing this
bug.
Vasanth
^ permalink raw reply
* [PATCH] ath9k: Fix bug in rate table
From: Vasanthakumar Thiagarajan @ 2010-06-02 22:50 UTC (permalink / raw)
To: linville; +Cc: linux-wireless
The following commit added an entry in 11na and 11ng rate
table but missed to update its rate count field.
Author: Vasanthakumar Thiagarajan <vasanth@atheros.com>
Date: Thu May 13 18:42:38 2010 -0700
ath9k: Enable Short GI in 20 Mhz for ar9287 and later chips
This patch enables short GI rx at all rates and tx at mcs15
for 20 Mhz channel width also.
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
---
drivers/net/wireless/ath/ath9k/rc.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index f5180d3..02b6052 100644
--- a/drivers/net/wireless/ath/ath9k/rc.c
+++ b/drivers/net/wireless/ath/ath9k/rc.c
@@ -20,7 +20,7 @@
#include "ath9k.h"
static const struct ath_rate_table ar5416_11na_ratetable = {
- 42,
+ 43,
8, /* MCS start */
{
{ VALID, VALID, WLAN_RC_PHY_OFDM, 6000, /* 6 Mb */
@@ -118,7 +118,7 @@ static const struct ath_rate_table ar5416_11na_ratetable = {
* for HT are the 64K max aggregate limit */
static const struct ath_rate_table ar5416_11ng_ratetable = {
- 46,
+ 47,
12, /* MCS start */
{
{ VALID_ALL, VALID_ALL, WLAN_RC_PHY_CCK, 1000, /* 1 Mb */
--
1.7.0.4
^ permalink raw reply related
* Re: [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
From: Luis R. Rodriguez @ 2010-06-02 21:55 UTC (permalink / raw)
To: Sujith; +Cc: linville, linux-wireless
In-Reply-To: <19462.12588.699806.245206@gargle.gargle.HOWL>
On Wed, Jun 2, 2010 at 3:23 AM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> The supported MCS rate set has to be setup properly
> for 2-stream devices.
>
> Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Awesome, are these being sold yet?
Luis
^ permalink raw reply
* Re: [PATCH 1/8] ath9k: Determine Firmware on probe
From: Luis R. Rodriguez @ 2010-06-02 21:54 UTC (permalink / raw)
To: Sujith, Marcel Holtmann; +Cc: linville, linux-wireless, linux-kernel, netdev
In-Reply-To: <19462.12578.143627.398866@gargle.gargle.HOWL>
On Wed, Jun 2, 2010 at 3:23 AM, Sujith <Sujith.Manoharan@atheros.com> wrote:
> Do not assign the FW name to driver_info but determine
> it dynamically on device probe. This facilitates adding new
> firmware.
>
> Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> ---
> drivers/net/wireless/ath/ath9k/hif_usb.c | 39 ++++++++++++++++++++----------
> drivers/net/wireless/ath/ath9k/hif_usb.h | 1 +
> 2 files changed, 27 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
> index 77b3591..7da55eb 100644
> --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
> +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
> @@ -16,12 +16,9 @@
>
> #include "htc.h"
>
> -#define ATH9K_FW_USB_DEV(devid, fw) \
> - { USB_DEVICE(0x0cf3, devid), .driver_info = (unsigned long) fw }
> -
> static struct usb_device_id ath9k_hif_usb_ids[] = {
> - ATH9K_FW_USB_DEV(0x9271, "ar9271.fw"),
> - ATH9K_FW_USB_DEV(0x1006, "ar9271.fw"),
> + { USB_DEVICE(0x0cf3, 0x9271) },
> + { USB_DEVICE(0x0cf3, 0x1006) },
> { },
> };
>
> @@ -790,21 +787,21 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
> return -EIO;
>
> dev_info(&hif_dev->udev->dev, "ath9k_htc: Transferred FW: %s, size: %ld\n",
> - "ar9271.fw", (unsigned long) hif_dev->firmware->size);
> + hif_dev->fw_name, (unsigned long) hif_dev->firmware->size);
>
> return 0;
> }
>
> -static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev,
> - const char *fw_name)
> +static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
> {
> int ret;
>
> /* Request firmware */
> - ret = request_firmware(&hif_dev->firmware, fw_name, &hif_dev->udev->dev);
> + ret = request_firmware(&hif_dev->firmware, hif_dev->fw_name,
> + &hif_dev->udev->dev);
> if (ret) {
> dev_err(&hif_dev->udev->dev,
> - "ath9k_htc: Firmware - %s not found\n", fw_name);
> + "ath9k_htc: Firmware - %s not found\n", hif_dev->fw_name);
> goto err_fw_req;
> }
>
> @@ -820,7 +817,8 @@ static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev,
> ret = ath9k_hif_usb_download_fw(hif_dev);
> if (ret) {
> dev_err(&hif_dev->udev->dev,
> - "ath9k_htc: Firmware - %s download failed\n", fw_name);
> + "ath9k_htc: Firmware - %s download failed\n",
> + hif_dev->fw_name);
> goto err_fw_download;
> }
>
> @@ -847,7 +845,6 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
> {
> struct usb_device *udev = interface_to_usbdev(interface);
> struct hif_device_usb *hif_dev;
> - const char *fw_name = (const char *) id->driver_info;
> int ret = 0;
>
> hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL);
> @@ -872,7 +869,23 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
> goto err_htc_hw_alloc;
> }
>
> - ret = ath9k_hif_usb_dev_init(hif_dev, fw_name);
> + /* Find out which firmware to load */
> +
> + switch(hif_dev->device_id) {
> + case 0x9271:
> + case 0x1006:
> + hif_dev->fw_name = "ar9271.fw";
> + break;
> + default:
> + break;
> + }
> +
> + if (!hif_dev->fw_name) {
> + dev_err(&udev->dev, "Can't determine firmware !\n");
> + goto err_htc_hw_alloc;
> + }
> +
> + ret = ath9k_hif_usb_dev_init(hif_dev);
> if (ret) {
> ret = -EINVAL;
> goto err_hif_init_usb;
> diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
> index 0aca49b..b2647e8 100644
> --- a/drivers/net/wireless/ath/ath9k/hif_usb.h
> +++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
> @@ -90,6 +90,7 @@ struct hif_device_usb {
> struct usb_anchor regout_submitted;
> struct usb_anchor rx_submitted;
> struct sk_buff *remain_skb;
> + const char *fw_name;
> int rx_remain_len;
> int rx_pkt_len;
> int rx_transfer_len;
I had done some something similar for ar9170 a while back [1] when
adding AVM FRITZ support to ar9170 and then got complaints from Marcel
on this approach since it requires synching the PCI device IDs in two
places. I frankly don't care how we do this but we should try to at
least stick to one way of doing this.
[1] http://osdir.com/ml/linux-wireless/2009-05/msg01219.html
Luis
^ permalink raw reply
* Re: WARNING: at drivers/base/core.c:130 device_release+0x82/0x90()
From: Luis R. Rodriguez @ 2010-06-02 21:42 UTC (permalink / raw)
To: Fabio Rossi; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <201006021129.43621.rossi.f@inwind.it>
On Wed, Jun 2, 2010 at 2:29 AM, Fabio Rossi <rossi.f@inwind.it> wrote:
> Compiling the kernel without ACPI (CONFIG_ACPI=n) gives the following warning:
>
> cfg80211: Calling CRDA to update world regulatory domain
> cfg80211: World regulatory domain updated:
> (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
> (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
> ath5k 0000:08:01.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
> ath5k 0000:08:01.0: registered as 'phy0'
> ath5k phy0: request_irq failed
> ------------[ cut here ]------------
Since traces are printed reversed you will have to read my logic from
bottom to top:
Seems we need to implement the dev_release() op for the class of our devices.
> WARNING: at drivers/base/core.c:130 device_release+0x82/0x90()
> Hardware name: System Product Name
> Device 'phy0' does not have a release() function, it is broken and must be
> fixed.
> Modules linked in: ath5k(+) mac80211 ath cfg80211 vmnet vsock vmci vmmon
> gspca_zc3xx gspca_main [last unloaded: cfg80211]
> Pid: 8607, comm: modprobe Tainted: G W 2.6.35-rc1-wl #50
> Call Trace:
> [<ffffffff8103917a>] warn_slowpath_common+0x7a/0xb0
> [<ffffffff81039251>] warn_slowpath_fmt+0x41/0x50
> [<ffffffff8138c4a2>] device_release+0x82/0x90
> [<ffffffff81225fc7>] kobject_release+0x47/0x90
> [<ffffffff81225f80>] ? kobject_release+0x0/0x90
> [<ffffffff81227187>] kref_put+0x37/0x70
> [<ffffffff81225e87>] kobject_put+0x27/0x60
> [<ffffffff8138be22>] put_device+0x12/0x20
Here is cfg80211's cleanup.
> [<ffffffffa00eb790>] wiphy_free+0x10/0x20 [cfg80211]
And something on probe failed, which triggered it to bail out and free
the struct.
> [<ffffffffa011102d>] ieee80211_free_hw+0xd/0x10 [mac80211]
OK so the device was probed.
> [<ffffffffa016f891>] ath5k_pci_probe+0x16da/0x1710 [ath5k]
> [<ffffffff811089da>] ? __sysfs_add_one+0x2a/0xe0
> [<ffffffff81108b07>] ? sysfs_add_one+0x27/0xd0
> [<ffffffff8123e322>] local_pci_probe+0x12/0x20
> [<ffffffff8123e5d0>] pci_device_probe+0x80/0xb0
> [<ffffffff8138f98a>] ? driver_sysfs_add+0x5a/0x90
> [<ffffffff8138facd>] driver_probe_device+0x8d/0x1a0
> [<ffffffff8138fc73>] __driver_attach+0x93/0xa0
> [<ffffffff8138fbe0>] ? __driver_attach+0x0/0xa0
> [<ffffffff8138f1e8>] bus_for_each_dev+0x68/0x90
> [<ffffffff8138f929>] driver_attach+0x19/0x20
> [<ffffffff8138e9a8>] bus_add_driver+0xb8/0x260
> [<ffffffff8138ff68>] driver_register+0x78/0x140
> [<ffffffff8123e841>] __pci_register_driver+0x51/0xd0
> [<ffffffff811f2996>] ? debugfs_create_dir+0x16/0x20
> [<ffffffffa0180000>] ? init_ath5k_pci+0x0/0x43 [ath5k]
> [<ffffffffa0180028>] init_ath5k_pci+0x28/0x43 [ath5k]
> [<ffffffff810001d7>] do_one_initcall+0x37/0x190
> [<ffffffff81066fc6>] sys_init_module+0xd6/0x250
> [<ffffffff810023ab>] system_call_fastpath+0x16/0x1b
> ---[ end trace a6ef611dbd725746 ]---
> ath5k 0000:08:01.0: PCI INT A disabled
> ath5k: probe of 0000:08:01.0 failed with error -22
>
> It is not possible to use the wireless network.
>
> Fabio
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ 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