Linux wireless drivers development
 help / color / mirror / Atom feed
* Re: [PATCH] p54spi: replace internal "cx3110x" name with "p54spi"
From: Johannes Berg @ 2010-06-02  7:54 UTC (permalink / raw)
  To: Luke-Jr; +Cc: linux-wireless, linux-kernel, torvalds
In-Reply-To: <201006012117.00432.luke@dashjr.org>

On Tue, 2010-06-01 at 21:16 -0500, Luke-Jr wrote:

>  static struct spi_driver p54spi_driver = {
>  	.driver = {
> -		/* use cx3110x name because board-n800.c uses that for the
> -		 * SPI port */
> -		.name		= "cx3110x",
> +		.name		= "p54spi",
>  		.bus		= &spi_bus_type,

maybe that comment wasn't clear enough ... it needs to be that way to be
properly linked up against SPI.

johannes


^ permalink raw reply

* Re: IWL3945 problems in 2.6.35-rc1
From: Sedat Dilek @ 2010-06-02  8:35 UTC (permalink / raw)
  To: Abhijeet Kolekar; +Cc: Maxim Levitsky, linux-wireless, iwlwifi maling list
In-Reply-To: <1275419000.5225.0.camel@abhi-desktop>

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?

- Sedat -

[...]
Applying patch iwlwifi-fix/0001-iwl3945-fix-internal-scan.patch
patching file drivers/net/wireless/iwlwifi/iwl-agn-lib.c
Hunk #1 succeeded at 1119 (offset 127 lines).
Hunk #2 succeeded at 1136 (offset 127 lines).
patching file drivers/net/wireless/iwlwifi/iwl-core.c
Hunk #1 succeeded at 854 (offset -2 lines).
patching file drivers/net/wireless/iwlwifi/iwl-core.h
Hunk #1 FAILED at 347.
1 out of 1 hunk FAILED -- rejects in file
drivers/net/wireless/iwlwifi/iwl-core.h
patching file drivers/net/wireless/iwlwifi/iwl3945-base.c
Hunk #1 succeeded at 1844 (offset 61 lines).
Hunk #2 succeeded at 3035 (offset 59 lines).
Patch iwlwifi-fix/0001-iwl3945-fix-internal-scan.patch does not apply
(enforce with -f)
ERROR: failed to apply patch series!
[...]

On Tue, Jun 1, 2010 at 9:03 PM, Abhijeet Kolekar
<abhijeet.kolekar@intel.com> wrote:
> Hello,
>   Please check the following version of the patch.
>
> Abhijeet
> On Tue, 2010-06-01 at 08:21 -0700, Sedat Dilek wrote:
>> Hi Maxim,
>>
>> that's a known issue... and there were several mails to LKML and here
>> on the ML (as I see you are very active on both lists :-)).
>> Unfortunately, the patch in [1] didnt go into any (GIT) reposoitory. I know.
>>
>> I am attaching the original patch and give it a meaningfull name, so
>> people see it on patchwork.kernel.org (linux-wireless).
>>
>> Kind Regards,
>> - Sedat -
>>
>> [1] http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2208
>>
>> On Tue, Jun 1, 2010 at 4:57 PM, Maxim Levitsky <maximlevitsky@gmail.com> wrote:
>> > On Tue, 2010-06-01 at 15:25 +0300, Maxim Levitsky wrote:
>> >> Hi,
>> >>
>> >> in 2.6.35-rc1 the wireless became just unusable.
>> >>
>> >> These are problems that I have:
>> >>
>> >> 1. very frequent oopses.This appears to be mention on the list already,
>> >> but patches I tried don't help.
>> >>
>> >> I currently use this bandaid patch, and I still get some crashes:
>> >
>> >
>> > The crash happens here:
>> >
>> > 0xec3d is in iwl3945_request_scan (/home/maxim/software/kernel/linux-2.6/drivers/net/wireless/iwlwifi/iwl3945-base.c:1878).
>> > 1873                    if (chan->band != band)
>> > 1874                            continue;
>> > 1875
>> > 1876                    scan_ch->channel = chan->hw_value;
>> > 1877
>> > 1878                    ch_info = iwl_get_channel_info(priv, band, scan_ch->channel);
>> > 1879                    if (!is_channel_valid(ch_info)) {
>> > 1880                            IWL_DEBUG_SCAN(priv, "Channel %d is INVALID for this band.\n",
>> > 1881                                           scan_ch->channel);
>> > 1882                            continue;
>> >
>> >
>> > The backtrace:
>> >
>> > <1>[14212.708840] BUG: unable to handle kernel paging request at 00000002ffffffb1
>> > <1>[14212.709870] IP: [<ffffffffa0305c0d>] iwl3945_request_scan+0x61d/0xf90 [iwl3945]
>> > <4>[14212.710763] PGD 0
>> > <0>[14212.711636] Oops: 0000 [#1] PREEMPT SMP
>> > <0>[14212.712519] last sysfs file: /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon1/temp1_input
>> > <4>[14212.713416] CPU 0
>> > <4>[14212.713432] Modules linked in: tg3 libphy iwl3945 iwlcore mac80211 cfg80211 ntfs vfat msdos fat lirc_ene0100 lirc_dev af_packet nfsd exportfs nfs lockd nfs_acl auth_rpcgss usb_storage usb_libusual cpufreq_powersave cpufreq_conservative r852 snd_hda_codec_realtek uvcvideo sm_common cpufreq_userspace acpi_cpufreq snd_hda_intel videodev mperf nand snd_hda_codec nand_ids sdhci_pci iTCO_wdt v4l2_compat_ioctl32 joydev snd_hwdep nand_ecc uhci_hcd sunrpc iTCO_vendor_support sdhci ehci_hcd psmouse snd_pcm mmc_core mtd usbcore coretemp ac sg battery evdev serio_raw snd_page_alloc video nouveau ttm drm_kms_helper drm i2c_algo_bit [last unloaded: cfg80211]
>> > <4>[14212.718797]
>> > <4>[14212.718797] Pid: 4263, comm: iwl3945 Not tainted 2.6.35-rc1 #30 Nettiling/Aspire 5720
>> > <4>[14212.718797] RIP: 0010:[<ffffffffa0305c0d>]  [<ffffffffa0305c0d>] iwl3945_request_scan+0x61d/0xf90 [iwl3945]
>> > <4>[14212.718797] RSP: 0018:ffff88006ce91c80  EFLAGS: 00010297
>> > <4>[14212.718797] RAX: ffff880066e74100 RBX: ffff88001b2c1dc0 RCX: 00000002ffffffb1
>> > <4>[14212.718797] RDX: 0000000000000000 RSI: 00000000ffff8800 RDI: ffff88001b2c1dc0
>> > <4>[14212.718797] RBP: ffff88006ce91d70 R08: 000000000000030e R09: 00000000ffffffff
>> > <4>[14212.718797] R10: 0000000000000058 R11: 0000000000000001 R12: 0000000000000000
>> > <4>[14212.718797] R13: ffff88001b295800 R14: 0000000000000000 R15: ffff88001b2958f2
>> > <4>[14212.718797] FS:  0000000000000000(0000) GS:ffff880002400000(0000) knlGS:0000000000000000
>> > <4>[14212.718797] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
>> > <4>[14212.718797] CR2: 00000002ffffffb1 CR3: 000000000155b000 CR4: 00000000000006f0
>> > <4>[14212.718797] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
>> > <4>[14212.718797] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
>> > <4>[14212.718797] Process iwl3945 (pid: 4263, threadinfo ffff88006ce90000, task ffff88006d04a280)
>> > <0>[14212.718797] Stack:
>> > <4>[14212.718797]  ffffffffa02c3810 ffff88006d04a2f0 ffff88006ce91cb0 ffffffff81036911
>> > <4>[14212.718797] <0> 0000000000000000 0000000000000001 ffff88006ce91cd0 ffffffff00000000
>> > <4>[14212.718797] <0> 0057000000000246 0000005800000021 ffff88006ce91fd8 0058ffff813a07bf
>> > <0>[14212.718797] Call Trace:
>> > <4>[14212.718797]  [<ffffffffa02c3810>] ? iwl_bg_start_internal_scan+0x0/0x3d0 [iwlcore]
>> > <4>[14212.718797]  [<ffffffff81036911>] ? get_parent_ip+0x11/0x50
>> > <4>[14212.718797]  [<ffffffffa02c3810>] ? iwl_bg_start_internal_scan+0x0/0x3d0 [iwlcore]
>> > <4>[14212.718797]  [<ffffffffa02c3b2a>] iwl_bg_start_internal_scan+0x31a/0x3d0 [iwlcore]
>> > <4>[14212.718797]  [<ffffffff81056dfe>] ? worker_thread+0x1ce/0x390
>> > <4>[14212.718797]  [<ffffffff81056e50>] worker_thread+0x220/0x390
>> > <4>[14212.718797]  [<ffffffff81056dfe>] ? worker_thread+0x1ce/0x390
>> > <4>[14212.718797]  [<ffffffff8105bc80>] ? autoremove_wake_function+0x0/0x40
>> > <4>[14212.718797]  [<ffffffff81056c30>] ? worker_thread+0x0/0x390
>> > <4>[14212.718797]  [<ffffffff8105b7fe>] kthread+0xae/0xc0
>> > <4>[14212.718797]  [<ffffffff81003b94>] kernel_thread_helper+0x4/0x10
>> > <4>[14212.718797]  [<ffffffff8105b750>] ? kthread+0x0/0xc0
>> > <4>[14212.718797]  [<ffffffff81003b90>] ? kernel_thread_helper+0x0/0x10
>> > <0>[14212.718797] Code: ff ff 41 8d 52 ff 66 89 95 56 ff ff ff eb 14 0f 1f 80 00 00 00 00 41 ff c4 44 3b 60 0c 0f 83 eb 00 00 00 49 63 d4 48 8b 4c d0 38 <44> 3b 31 75 e6 0f b7 41 06 44 89 f6 41 88 47 01 0f b6 d0 48 89
>> > <1>[14212.718797] RIP  [<ffffffffa0305c0d>] iwl3945_request_scan+0x61d/0xf90 [iwl3945]
>> > <4>[14212.718797]  RSP <ffff88006ce91c80>
>> > <0>[14212.718797] CR2: 00000002ffffffb1
>> > <4>[14212.760163] ---[ end trace 7075fd19298c88a3 ]---
>> > <0>[14212.761267] Kernel panic - not syncing: Fatal exception
>> > <4>[14212.762226] Pid: 4263, comm: iwl3945 Tainted: G      D     2.6.35-rc1 #30
>> > <4>[14212.763193] Call Trace:
>> > <4>[14212.764143]  [<ffffffff8139e487>] panic+0x90/0x10a
>> > <4>[14212.765084]  [<ffffffff8100737c>] oops_end+0xcc/0xe0
>> > <4>[14212.765095]  [<ffffffff81027c13>] no_context+0xf3/0x260
>> > <4>[14212.765106]  [<ffffffff810622e5>] ? sched_clock_local+0x25/0x90
>> > <4>[14212.765116]  [<ffffffff81027e95>] __bad_area_nosemaphore+0x115/0x1d0
>> > <4>[14212.765128]  [<ffffffff81027f5e>] bad_area_nosemaphore+0xe/0x10
>> > <4>[14212.765138]  [<ffffffff810283c6>] do_page_fault+0x2e6/0x390
>> > <4>[14212.765148]  [<ffffffff810622e5>] ? sched_clock_local+0x25/0x90
>> > <4>[14212.765158]  [<ffffffff81062410>] ? sched_clock_cpu+0xc0/0x110
>> > <4>[14212.765169]  [<ffffffff8100add7>] ? native_sched_clock+0x27/0x80
>> > <4>[14212.765179]  [<ffffffff810622e5>] ? sched_clock_local+0x25/0x90
>> > <4>[14212.765191]  [<ffffffff813a309f>] page_fault+0x1f/0x30
>> > <4>[14212.765207]  [<ffffffffa0305c0d>] ? iwl3945_request_scan+0x61d/0xf90 [iwl3945]
>> > <4>[14212.765232]  [<ffffffffa02c3810>] ? iwl_bg_start_internal_scan+0x0/0x3d0 [iwlcore]
>> > <4>[14212.765246]  [<ffffffff81036911>] ? get_parent_ip+0x11/0x50
>> > <4>[14212.765266]  [<ffffffffa02c3810>] ? iwl_bg_start_internal_scan+0x0/0x3d0 [iwlcore]
>> > <4>[14212.765286]  [<ffffffffa02c3b2a>] iwl_bg_start_internal_scan+0x31a/0x3d0 [iwlcore]
>> > <4>[14212.765299]  [<ffffffff81056dfe>] ? worker_thread+0x1ce/0x390
>> > <4>[14212.765310]  [<ffffffff81056e50>] worker_thread+0x220/0x390
>> > <4>[14212.765320]  [<ffffffff81056dfe>] ? worker_thread+0x1ce/0x390
>> > <4>[14212.765333]  [<ffffffff8105bc80>] ? autoremove_wake_function+0x0/0x40
>> > <4>[14212.765344]  [<ffffffff81056c30>] ? worker_thread+0x0/0x390
>> > <4>[14212.765353]  [<ffffffff8105b7fe>] kthread+0xae/0xc0
>> > <4>[14212.765365]  [<ffffffff81003b94>] kernel_thread_helper+0x4/0x10
>> > <4>[14212.765376]  [<ffffffff8105b750>] ? kthread+0x0/0xc0
>> > <4>[14212.765386]  [<ffffffff81003b90>] ? kernel_thread_helper+0x0/0x10
>> > <3>[14212.765402] [drm:drm_fb_helper_panic] *ERROR* panic occurred, switching back to text console
>> >>
>> >> diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
>> >> index 3e5bffb..1aef988 100644
>> >> --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
>> >> +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
>> >> @@ -1861,6 +1861,11 @@ static int iwl3945_get_channels_for_scan(struct iwl_priv *priv,
>> >>         if (!sband)
>> >>                 return 0;
>> >>
>> >> +       if(!priv->scan_request) {
>> >> +               WARN_ON(1);
>> >> +               return 0;
>> >> +       }
>> >> +
>> >>         active_dwell = iwl_get_active_dwell_time(priv, band, n_probes);
>> >>         passive_dwell = iwl_get_passive_dwell_time(priv, band, vif);
>> >>
>> >>
>> >> 2. mulicast/broadcast is broken.
>> >> this results in DHCP non working on open access point.
>> >> It seems that DHCP does work on my home wireless, but avahi-autoipd doesn't see any neighbours, and this is annoying.
>> >> It can be worked around by doing (sudo ifconfig wlan0 promisc)
>> >>
>> >>
>> > Best regards,
>> >        Maxim Levitsky
>> >
>> > --
>> > 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: pull request: wireless-2.6 2010-05-28
From: Sedat Dilek @ 2010-06-02  8:42 UTC (permalink / raw)
  To: reinette chatre
  Cc: John W. Linville, davem@davemloft.net,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, Zheng, Jiajia, Kolekar, Abhijeet,
	Berg, Johannes
In-Reply-To: <1275409361.2091.27208.camel@rchatre-DESK>

On Tue, Jun 1, 2010 at 6:22 PM, reinette chatre
<reinette.chatre@intel.com> wrote:
> Hi Sedat,
>
> On Sat, 2010-05-29 at 06:34 -0700, Sedat Dilek wrote:
>> Two people confirmed the patch in [2] fixes:
>> 1. iwlwifi-2.6 GIT master (commit f10a237c95abd6d64a3a24553bd1d3bcddd9108b)
>> 2. compat-wireless (2010-05-21)
>>
>> And it fixes also the above mentionned combination.
>
> We are working on getting this patch upstream. The version tested
> contains a significant amount of duplicated code as well as some cleanup
> code mixed in. It is thus not appropriate for an upstream submission at
> this time.
>

What do you mean by "upstream"?
upstream for me is Linus-tree (linux-2.6 GIT master).
Patches against iwlwifi-2.6 GIT trees are not very helpful in my case.

>> As a suggestion:
>> What about "copying" bug-reports (incl. its history) from IWL-BTS into
>> linux-wireless ML?
>> For example (dri-devel related) bug-reports from
>> bugzilla.freedesktop.org are "copied" into dri-devel ML.
>
> Pointing people to the bug report seems to work ok. What benefit does
> the above have?
>

[+] People - not subscribed to the BR - can follow "on change".
[-] Blow up linux-wireless ML?

- Sedat -

^ permalink raw reply

* WARNING: at drivers/base/core.c:130 device_release+0x82/0x90()
From: Fabio Rossi @ 2010-06-02  9:29 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org

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 ]------------
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
 [<ffffffffa00eb790>] wiphy_free+0x10/0x20 [cfg80211]
 [<ffffffffa011102d>] ieee80211_free_hw+0xd/0x10 [mac80211]
 [<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

^ permalink raw reply

* [PATCH 1/8] ath9k: Determine Firmware on probe
From: Sujith @ 2010-06-02 10:23 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

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;
-- 
1.7.1


^ permalink raw reply related

* [PATCH 3/8] ath9k_htc: Add support for AR7010
From: Sujith @ 2010-06-02 10:23 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

Add the USB device IDs for AR7010 and handle
firmware loading properly.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/hif_usb.c |   15 ++++++++++++++-
 drivers/net/wireless/ath/ath9k/hif_usb.h |    1 +
 2 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
index 7da55eb..1b75b1b 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
@@ -19,6 +19,7 @@
 static struct usb_device_id ath9k_hif_usb_ids[] = {
 	{ USB_DEVICE(0x0cf3, 0x9271) },
 	{ USB_DEVICE(0x0cf3, 0x1006) },
+	{ USB_DEVICE(0x0cf3, 0x7010) },
 	{ },
 };
 
@@ -753,6 +754,7 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
 	size_t len = hif_dev->firmware->size;
 	u32 addr = AR9271_FIRMWARE;
 	u8 *buf = kzalloc(4096, GFP_KERNEL);
+	u32 firm_offset;
 
 	if (!buf)
 		return -ENOMEM;
@@ -776,13 +778,18 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
 	}
 	kfree(buf);
 
+	if (hif_dev->device_id == 0x7010)
+		firm_offset = AR7010_FIRMWARE_TEXT;
+	else
+		firm_offset = AR9271_FIRMWARE_TEXT;
+
 	/*
 	 * Issue FW download complete command to firmware.
 	 */
 	err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0),
 			      FIRMWARE_DOWNLOAD_COMP,
 			      0x40 | USB_DIR_OUT,
-			      AR9271_FIRMWARE_TEXT >> 8, 0, NULL, 0, HZ);
+			      firm_offset >> 8, 0, NULL, 0, HZ);
 	if (err)
 		return -EIO;
 
@@ -876,6 +883,12 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
 	case 0x1006:
 		hif_dev->fw_name = "ar9271.fw";
 		break;
+	case 0x7010:
+		if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202)
+			hif_dev->fw_name = "ar7010_1_1.fw";
+		else
+			hif_dev->fw_name = "ar7010.fw";
+		break;
 	default:
 		break;
 	}
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
index b2647e8..2daf97b 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.h
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
@@ -19,6 +19,7 @@
 
 #define AR9271_FIRMWARE       0x501000
 #define AR9271_FIRMWARE_TEXT  0x903000
+#define AR7010_FIRMWARE_TEXT  0x906000
 
 #define FIRMWARE_DOWNLOAD       0x30
 #define FIRMWARE_DOWNLOAD_COMP  0x31
-- 
1.7.1


^ permalink raw reply related

* [PATCH 4/8] ath9k_common: Move count_streams to common module
From: Sujith @ 2010-06-02 10:23 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

This can be used by ath9k_htc.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/common.c |   13 +++++++++++++
 drivers/net/wireless/ath/ath9k/common.h |    1 +
 drivers/net/wireless/ath/ath9k/init.c   |   16 ++--------------
 3 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/common.c b/drivers/net/wireless/ath/ath9k/common.c
index 27f9ae5..4ae9e34 100644
--- a/drivers/net/wireless/ath/ath9k/common.c
+++ b/drivers/net/wireless/ath/ath9k/common.c
@@ -380,6 +380,19 @@ void ath9k_cmn_key_delete(struct ath_common *common,
 }
 EXPORT_SYMBOL(ath9k_cmn_key_delete);
 
+int ath9k_cmn_count_streams(unsigned int chainmask, int max)
+{
+	int streams = 0;
+
+	do {
+		if (++streams == max)
+			break;
+	} while ((chainmask = chainmask & (chainmask - 1)));
+
+	return streams;
+}
+EXPORT_SYMBOL(ath9k_cmn_count_streams);
+
 static int __init ath9k_cmn_init(void)
 {
 	return 0;
diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h
index 283cca8..97809d3 100644
--- a/drivers/net/wireless/ath/ath9k/common.h
+++ b/drivers/net/wireless/ath/ath9k/common.h
@@ -64,3 +64,4 @@ int ath9k_cmn_key_config(struct ath_common *common,
 			 struct ieee80211_key_conf *key);
 void ath9k_cmn_key_delete(struct ath_common *common,
 			  struct ieee80211_key_conf *key);
+int ath9k_cmn_count_streams(unsigned int chainmask, int max);
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index f388dcc..18d76ed 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -175,18 +175,6 @@ static const struct ath_ops ath9k_common_ops = {
 	.write = ath9k_iowrite32,
 };
 
-static int count_streams(unsigned int chainmask, int max)
-{
-	int streams = 0;
-
-	do {
-		if (++streams == max)
-			break;
-	} while ((chainmask = chainmask & (chainmask - 1)));
-
-	return streams;
-}
-
 /**************************/
 /*     Initialization     */
 /**************************/
@@ -227,8 +215,8 @@ static void setup_ht_cap(struct ath_softc *sc,
 
 	/* set up supported mcs set */
 	memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
-	tx_streams = count_streams(common->tx_chainmask, max_streams);
-	rx_streams = count_streams(common->rx_chainmask, max_streams);
+	tx_streams = ath9k_cmn_count_streams(common->tx_chainmask, max_streams);
+	rx_streams = ath9k_cmn_count_streams(common->rx_chainmask, max_streams);
 
 	ath_print(common, ATH_DBG_CONFIG,
 		  "TX streams %d, RX streams: %d\n",
-- 
1.7.1


^ permalink raw reply related

* [PATCH 5/8] ath9k_htc: Setup HT capabilites for 2-stream devices
From: Sujith @ 2010-06-02 10:23 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

The supported MCS rate set has to be setup properly
for 2-stream devices.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/htc_drv_init.c |   23 ++++++++++++++++++++++-
 1 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index ff6c080..acd9cb9 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -398,6 +398,10 @@ static const struct ath_bus_ops ath9k_usb_bus_ops = {
 static void setup_ht_cap(struct ath9k_htc_priv *priv,
 			 struct ieee80211_sta_ht_cap *ht_info)
 {
+	struct ath_common *common = ath9k_hw_common(priv->ah);
+	u8 tx_streams, rx_streams;
+	int i;
+
 	ht_info->ht_supported = true;
 	ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
 		       IEEE80211_HT_CAP_SM_PS |
@@ -413,7 +417,24 @@ static void setup_ht_cap(struct ath9k_htc_priv *priv,
 	ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
 
 	memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
-	ht_info->mcs.rx_mask[0] = 0xff;
+
+	/* ath9k_htc supports only 1 or 2 stream devices */
+	tx_streams = ath9k_cmn_count_streams(common->tx_chainmask, 2);
+	rx_streams = ath9k_cmn_count_streams(common->rx_chainmask, 2);
+
+	ath_print(common, ATH_DBG_CONFIG,
+		  "TX streams %d, RX streams: %d\n",
+		  tx_streams, rx_streams);
+
+	if (tx_streams != rx_streams) {
+		ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
+		ht_info->mcs.tx_params |= ((tx_streams - 1) <<
+					   IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
+	}
+
+	for (i = 0; i < rx_streams; i++)
+		ht_info->mcs.rx_mask[i] = 0xff;
+
 	ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
 }
 
-- 
1.7.1


^ permalink raw reply related

* [PATCH 6/8] ath9k_htc: Configure dual stream rates
From: Sujith @ 2010-06-02 10:23 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

The rate information on the target has to be updated
for 2-stream devices, along with the correct chainmask.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/htc_drv_main.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index 569b9c0..b7ce902 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -325,9 +325,9 @@ static int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv)
 	tcap.flags_ext = 0x80601000;
 	tcap.ampdu_limit = 0xffff0000;
 	tcap.ampdu_subframes = 20;
-	tcap.tx_chainmask_legacy = 1;
+	tcap.tx_chainmask_legacy = priv->ah->caps.tx_chainmask;
 	tcap.protmode = 1;
-	tcap.tx_chainmask = 1;
+	tcap.tx_chainmask = priv->ah->caps.tx_chainmask;
 
 	WMI_CMD_BUF(WMI_TARGET_IC_UPDATE_CMDID, &tcap);
 
@@ -365,6 +365,11 @@ static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv,
 		trate->rates.ht_rates.rs_nrates = j;
 
 		caps = WLAN_RC_HT_FLAG;
+		if (priv->ah->caps.tx_chainmask != 1 &&
+		    ath9k_hw_getcapability(priv->ah, ATH9K_CAP_DS, 0, NULL)) {
+			if (sta->ht_cap.mcs.rx_mask[1])
+				caps |= WLAN_RC_DS_FLAG;
+		}
 		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
 			caps |= WLAN_RC_40_FLAG;
 		if (conf_is_ht40(&priv->hw->conf) &&
-- 
1.7.1


^ permalink raw reply related

* [PATCH 7/8] ath9k_htc: Setup 5GHz channels
From: Sujith @ 2010-06-02 10:23 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

AR7010 is dual-band. Setup the channels and rateset
for 5GHz band.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/htc_drv_init.c |   55 +++++++++++++++++++++++++
 drivers/net/wireless/ath/ath9k/htc_drv_main.c |    3 +-
 2 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index acd9cb9..cda3041 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -34,6 +34,13 @@ MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
 	.max_power = 20, \
 }
 
+#define CHAN5G(_freq, _idx) { \
+	.band = IEEE80211_BAND_5GHZ, \
+	.center_freq = (_freq), \
+	.hw_value = (_idx), \
+	.max_power = 20, \
+}
+
 static struct ieee80211_channel ath9k_2ghz_channels[] = {
 	CHAN2G(2412, 0), /* Channel 1 */
 	CHAN2G(2417, 1), /* Channel 2 */
@@ -51,6 +58,37 @@ static struct ieee80211_channel ath9k_2ghz_channels[] = {
 	CHAN2G(2484, 13), /* Channel 14 */
 };
 
+static struct ieee80211_channel ath9k_5ghz_channels[] = {
+	/* _We_ call this UNII 1 */
+	CHAN5G(5180, 14), /* Channel 36 */
+	CHAN5G(5200, 15), /* Channel 40 */
+	CHAN5G(5220, 16), /* Channel 44 */
+	CHAN5G(5240, 17), /* Channel 48 */
+	/* _We_ call this UNII 2 */
+	CHAN5G(5260, 18), /* Channel 52 */
+	CHAN5G(5280, 19), /* Channel 56 */
+	CHAN5G(5300, 20), /* Channel 60 */
+	CHAN5G(5320, 21), /* Channel 64 */
+	/* _We_ call this "Middle band" */
+	CHAN5G(5500, 22), /* Channel 100 */
+	CHAN5G(5520, 23), /* Channel 104 */
+	CHAN5G(5540, 24), /* Channel 108 */
+	CHAN5G(5560, 25), /* Channel 112 */
+	CHAN5G(5580, 26), /* Channel 116 */
+	CHAN5G(5600, 27), /* Channel 120 */
+	CHAN5G(5620, 28), /* Channel 124 */
+	CHAN5G(5640, 29), /* Channel 128 */
+	CHAN5G(5660, 30), /* Channel 132 */
+	CHAN5G(5680, 31), /* Channel 136 */
+	CHAN5G(5700, 32), /* Channel 140 */
+	/* _We_ call this UNII 3 */
+	CHAN5G(5745, 33), /* Channel 149 */
+	CHAN5G(5765, 34), /* Channel 153 */
+	CHAN5G(5785, 35), /* Channel 157 */
+	CHAN5G(5805, 36), /* Channel 161 */
+	CHAN5G(5825, 37), /* Channel 165 */
+};
+
 /* Atheros hardware rate code addition for short premble */
 #define SHPCHECK(__hw_rate, __flags) \
 	((__flags & IEEE80211_RATE_SHORT_PREAMBLE) ? (__hw_rate | 0x04) : 0)
@@ -552,6 +590,17 @@ static void ath9k_init_channels_rates(struct ath9k_htc_priv *priv)
 		priv->sbands[IEEE80211_BAND_2GHZ].n_bitrates =
 			ARRAY_SIZE(ath9k_legacy_rates);
 	}
+
+	if (test_bit(ATH9K_MODE_11A, priv->ah->caps.wireless_modes)) {
+		priv->sbands[IEEE80211_BAND_5GHZ].channels = ath9k_5ghz_channels;
+		priv->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
+		priv->sbands[IEEE80211_BAND_5GHZ].n_channels =
+			ARRAY_SIZE(ath9k_5ghz_channels);
+		priv->sbands[IEEE80211_BAND_5GHZ].bitrates =
+			ath9k_legacy_rates + 4;
+		priv->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
+			ARRAY_SIZE(ath9k_legacy_rates) - 4;
+	}
 }
 
 static void ath9k_init_misc(struct ath9k_htc_priv *priv)
@@ -683,11 +732,17 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv,
 	if (test_bit(ATH9K_MODE_11G, priv->ah->caps.wireless_modes))
 		hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
 			&priv->sbands[IEEE80211_BAND_2GHZ];
+	if (test_bit(ATH9K_MODE_11A, priv->ah->caps.wireless_modes))
+		hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
+			&priv->sbands[IEEE80211_BAND_5GHZ];
 
 	if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
 		if (test_bit(ATH9K_MODE_11G, priv->ah->caps.wireless_modes))
 			setup_ht_cap(priv,
 				     &priv->sbands[IEEE80211_BAND_2GHZ].ht_cap);
+		if (test_bit(ATH9K_MODE_11A, priv->ah->caps.wireless_modes))
+			setup_ht_cap(priv,
+				     &priv->sbands[IEEE80211_BAND_5GHZ].ht_cap);
 	}
 
 	SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index b7ce902..7aefbc6 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -343,8 +343,7 @@ static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv,
 	u32 caps = 0;
 	int i, j;
 
-	/* Only 2GHz is supported */
-	sband = priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ];
+	sband = priv->hw->wiphy->bands[priv->hw->conf.channel->band];
 
 	for (i = 0, j = 0; i < sband->n_bitrates; i++) {
 		if (sta->supp_rates[sband->band] & BIT(i)) {
-- 
1.7.1


^ permalink raw reply related

* [PATCH 8/8] ath9k_htc: Configure credit size for AR7010
From: Sujith @ 2010-06-02 10:23 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

For non-AR9271 chips, the credit size is different
and has to be configured appropriately.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/htc_drv_init.c |   30 ++++++++++++++++++++++--
 drivers/net/wireless/ath/ath9k/htc_hst.c      |    3 +-
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index cda3041..7339439 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -179,7 +179,7 @@ static inline int ath9k_htc_connect_svc(struct ath9k_htc_priv *priv,
 	return htc_connect_service(priv->htc, &req, ep_id);
 }
 
-static int ath9k_init_htc_services(struct ath9k_htc_priv *priv)
+static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid)
 {
 	int ret;
 
@@ -237,10 +237,33 @@ static int ath9k_init_htc_services(struct ath9k_htc_priv *priv)
 	if (ret)
 		goto err;
 
+	/*
+	 * Setup required credits before initializing HTC.
+	 * This is a bit hacky, but, since queuing is done in
+	 * the HIF layer, shouldn't matter much.
+	 */
+
+	switch(devid) {
+	case 0x9271:
+	case 0x1006:
+		priv->htc->credits = 33;
+		break;
+	case 0x7010:
+		priv->htc->credits = 45;
+		break;
+	default:
+		dev_err(priv->dev, "ath9k_htc: Unsupported device id: 0x%x\n",
+			devid);
+		goto err;
+	}
+
 	ret = htc_init(priv->htc);
 	if (ret)
 		goto err;
 
+	dev_info(priv->dev, "ath9k_htc: HTC initialized with %d credits\n",
+		 priv->htc->credits);
+
 	return 0;
 
 err:
@@ -842,7 +865,7 @@ int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
 		goto err_free;
 	}
 
-	ret = ath9k_init_htc_services(priv);
+	ret = ath9k_init_htc_services(priv, devid);
 	if (ret)
 		goto err_init;
 
@@ -885,7 +908,8 @@ int ath9k_htc_resume(struct htc_target *htc_handle)
 	if (ret)
 		return ret;
 
-	ret = ath9k_init_htc_services(htc_handle->drv_priv);
+	ret = ath9k_init_htc_services(htc_handle->drv_priv,
+			      htc_handle->drv_priv->ah->hw_version.devid);
 	return ret;
 }
 #endif
diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
index 2173196..705c0f3 100644
--- a/drivers/net/wireless/ath/ath9k/htc_hst.c
+++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
@@ -89,7 +89,6 @@ static void htc_process_target_rdy(struct htc_target *target,
 	struct htc_endpoint *endpoint;
 	struct htc_ready_msg *htc_ready_msg = (struct htc_ready_msg *) buf;
 
-	target->credits = be16_to_cpu(htc_ready_msg->credits);
 	target->credit_size = be16_to_cpu(htc_ready_msg->credit_size);
 
 	endpoint = &target->endpoint[ENDPOINT0];
@@ -159,7 +158,7 @@ static int htc_config_pipe_credits(struct htc_target *target)
 
 	cp_msg->message_id = cpu_to_be16(HTC_MSG_CONFIG_PIPE_ID);
 	cp_msg->pipe_id = USB_WLAN_TX_PIPE;
-	cp_msg->credits = 33;
+	cp_msg->credits = target->credits;
 
 	target->htc_flags |= HTC_OP_CONFIG_PIPE_CREDITS;
 
-- 
1.7.1


^ permalink raw reply related

* [PATCH 2/8] ath9k_hw: Configure byte swap for non AR9271 chips
From: Sujith @ 2010-06-02 10:25 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

This patch fixes programming the byte swap registers
for chipsets other than AR9271. This is needed for
AR7010.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/hw.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 1c541b4..81239ce 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1429,9 +1429,13 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
 				"Setting CFG 0x%x\n", REG_READ(ah, AR_CFG));
 		}
 	} else {
-		/* Configure AR9271 target WLAN */
-                if (AR_SREV_9271(ah))
-			REG_WRITE(ah, AR_CFG, AR_CFG_SWRB | AR_CFG_SWTB);
+		if (common->bus_ops->ath_bus_type == ATH_USB) {
+			/* Configure AR9271 target WLAN */
+			if (AR_SREV_9271(ah))
+				REG_WRITE(ah, AR_CFG, AR_CFG_SWRB | AR_CFG_SWTB);
+			else
+				REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
+		}
 #ifdef __BIG_ENDIAN
                 else
 			REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
-- 
1.7.1


^ permalink raw reply related

* [PATCH] ath9k_htc: Add firmware for AR7010
From: Sujith @ 2010-06-02 10:29 UTC (permalink / raw)
  To: David.Woodhouse; +Cc: linux-wireless

Add firmware for AR7010 chipsets supported
by the ath9k_htc driver.

More information at: http://wireless.kernel.org/en/users/Drivers/ath9k_htc

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 WHENCE        |    4 +++-
 ar7010.fw     |  Bin 0 -> 70608 bytes
 ar7010_1_1.fw |  Bin 0 -> 70608 bytes
 3 files changed, 3 insertions(+), 1 deletions(-)
 create mode 100644 ar7010.fw
 create mode 100644 ar7010_1_1.fw

diff --git a/WHENCE b/WHENCE
index 9ed15d1..d3b184f 100644
--- a/WHENCE
+++ b/WHENCE
@@ -431,9 +431,11 @@ Licence: Redistributable. See LICENCE.atheros_firmware for details
 
 --------------------------------------------------------------------------
 
-Driver: ar9271 - Atheros HTC device (USB)
+Driver: ath9k_htc - Atheros HTC devices (USB)
 
 File: ar9271.fw
+File: ar7010.fw
+File: ar7010_1_1.fw
 
 Licence: Redistributable. See LICENCE.atheros_firmware for details
 
diff --git a/ar7010.fw b/ar7010.fw
new file mode 100644
index 0000000000000000000000000000000000000000..0b50665215e8440d322b993a5c3561525163adf6
GIT binary patch
literal 70608
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

literal 0
HcmV?d00001

diff --git a/ar7010_1_1.fw b/ar7010_1_1.fw
new file mode 100644
index 0000000000000000000000000000000000000000..bb70d17d21462587db780d98b62a58a44565c9ba
GIT binary patch
literal 70608
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

literal 0
HcmV?d00001

-- 
1.7.1


^ permalink raw reply related

* Re: Strange behavior of DWA-547
From: Janek Bevendorff @ 2010-06-02 11:28 UTC (permalink / raw)
  To: linux-wireless
In-Reply-To: <4C03C652.3000608@openwebboard.org>

H again,

I couldn't fix the problem, returned the card ordered a new one which is
supposed to be working.
Thanks anyway!

Janek

^ permalink raw reply

* Re: pull request: wireless-2.6 2010-05-28
From: reinette chatre @ 2010-06-02 16:01 UTC (permalink / raw)
  To: sedat.dilek@gmail.com
  Cc: John W. Linville, davem@davemloft.net,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, Zheng, Jiajia, Kolekar, Abhijeet,
	Berg, Johannes
In-Reply-To: <AANLkTimo_CpVC0B99GMJtIllAye5Yqa5yiIAiFBY-pIN@mail.gmail.com>

On Wed, 2010-06-02 at 01:42 -0700, Sedat Dilek wrote:
> What do you mean by "upstream"?
> upstream for me is Linus-tree (linux-2.6 GIT master).
> Patches against iwlwifi-2.6 GIT trees are not very helpful in my case.

Since the problem exists in 2.6.35-rc1 linux-2.6 is indeed the target
for this fix.

Reinette



^ permalink raw reply

* Re: IWL3945 problems in 2.6.35-rc1
From: Maxim Levitsky @ 2010-06-02 16:53 UTC (permalink / raw)
  To: sedat.dilek; +Cc: linux-wireless, iwlwifi maling list
In-Reply-To: <1275415929.3778.1.camel@maxim-laptop>

On Tue, 2010-06-01 at 21:12 +0300, Maxim Levitsky wrote: 
> On Tue, 2010-06-01 at 17:21 +0200, Sedat Dilek wrote: 
> > Hi Maxim,
> > 
> > that's a known issue... and there were several mails to LKML and here
> > on the ML (as I see you are very active on both lists :-)).
> > Unfortunately, the patch in [1] didnt go into any (GIT) reposoitory. I know.
> > 
> > I am attaching the original patch and give it a meaningfull name, so
> > people see it on patchwork.kernel.org (linux-wireless).
> 
> The patch appears the work, Thanks!
And it still works.


> 
> Now the only problem remains is that I can associate only when device is
> in promisc mode.
> I think it doesn't receive broadcast frames.
Any update on this?
This is going to be real show stopper for normal users.
Its pretty much not possible to connect to open AP now unless promisc
mode is enabled. 


Best regards,
Maxim Levitsky
|



^ permalink raw reply

* Re: kernel BUG in iwl-agn-rs.c:2076, WAS: iwlagn + some accesspoint == hardlock
From: reinette chatre @ 2010-06-02 17:51 UTC (permalink / raw)
  To: Nils Radtke; +Cc: linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org
In-Reply-To: <20100531201225.GA6327@localhost>

On Mon, 2010-05-31 at 13:12 -0700, Nils Radtke wrote:

> This line indicates the first timestamp _after_ the crash:
> May 31 17:35:19 localhost kernel: [   69.488456]
> 
> The crash happened after site A and on site B. Just arrived, opened lid and *crash*.
> 
> I noticed in iwl-agn-rs.c:2080:
>   BUG_ON(window->average_tpt != ((window->success_ratio *
>         tbl->expected_tpt[index] + 64) / 128));
> Could that be again the point that hit me today when the machine crashed once?
> Would you mind changing this into a milder WARN? That way I wouldn't hit the wall 
> that hard. And I would notice it anyway while skimming the logs as we still are on the
> hunt. It's more maintainable if it's a WARN in the src instead of me patching it w/ any
> update..
> 
> Wasn't this BUG_ON a WARNING in .33.3? (didn't check..)

Seems like you performed the testing without the patch that we used to
address the hang issue from the beginning of this thread. Please see
http://marc.info/?l=linux-wireless&m=127290931304496&w=2 - that thread
also explains why the patch is not in 2.6.34.

I think it is time to move this discussion to a bug report so that it
can be tracked better. Please open a new bug at
http://bugzilla.intellinuxwireless.org/

Reinette




^ permalink raw reply

* Re: IWL3945 problems in 2.6.35-rc1
From: Sedat Dilek @ 2010-06-02 18:01 UTC (permalink / raw)
  To: Maxim Levitsky; +Cc: wireless, ipw3945-devel, ilw
In-Reply-To: <1275497610.32562.15.camel@maxim-laptop>

[-- Attachment #1: Type: text/plain, Size: 3180 bytes --]

Hi Maxim,

I have tested here with the patches from wireless-2.6 plus this patch
in my series against 2.6.35-rc1:

# patch from <https://patchwork.kernel.org/patch/103133/>
linux-wireless/2.6.34-mac80211-fix-blockack-req-processing.patch

Unfortunately, I have here no open AP and I am not in a real test mood :-).

I could not test "mac80211: process station blockack action frames
from work" [1] yet.
It is Cc: stable@kernel.org.

All mentionned patches apply cleanly against vanilla 2.6.35-rc1 (see
below, patches attached as tarball).

- Sedat -

[1] https://patchwork.kernel.org/patch/102892/

[ patch-series ]

Applying patch wireless-2.6/0001-Revert-rt2x00-Fix-rt2800usb-TX-descriptor-writing.patch
patching file drivers/net/wireless/rt2x00/rt2800usb.c

Applying patch wireless-2.6/0002-ar9170usb-fix-read-from-freed-driver-context.patch
patching file drivers/net/wireless/ath/ar9170/usb.c

Applying patch wireless-2.6/0003-ath9k-Fix-ath_print-in-xmit-for-hardware-reset.patch
patching file drivers/net/wireless/ath/ath9k/xmit.c

Applying patch wireless-2.6/0004-ath9k-Fix-bug-in-the-way-bf_tx_aborted-of-struct-ath.patch
patching file drivers/net/wireless/ath/ath9k/xmit.c

Applying patch wireless-2.6/0005-libertas-fix-uninitialized-variable-warning.patch
patching file drivers/net/wireless/libertas/rx.c

Applying patch wireless-2.6/0006-mac80211-make-a-function-static.patch
patching file net/mac80211/chan.c

Applying patch wireless-2.6/0007-ssb-fix-NULL-ptr-deref-when-pcihost_wrapper-is-used.patch
patching file drivers/ssb/pci.c
patching file drivers/ssb/sprom.c

Applying patch iwlwifi-fix/iwl3945-Fix-internal-scan-races.patch
patching file drivers/net/wireless/iwlwifi/iwl3945-base.c
Hunk #1 succeeded at 1844 (offset 61 lines).
Hunk #2 succeeded at 3060 (offset 59 lines).

Applying patch linux-wireless/2.6.34-mac80211-fix-blockack-req-processing.patch
patching file net/mac80211/rx.c
Hunk #1 succeeded at 1818 (offset -1 lines).

Applying patch linux-wireless/mac80211-process-station-blockack-action-frames-from-work.patch
patching file net/mac80211/mlme.c
patching file net/mac80211/rx.c
Hunk #1 succeeded at 1944 (offset 8 lines).

--- EOT ---

On Wed, Jun 2, 2010 at 6:53 PM, Maxim Levitsky <maximlevitsky@gmail.com> wrote:
> On Tue, 2010-06-01 at 21:12 +0300, Maxim Levitsky wrote:
>> On Tue, 2010-06-01 at 17:21 +0200, Sedat Dilek wrote:
>> > Hi Maxim,
>> >
>> > that's a known issue... and there were several mails to LKML and here
>> > on the ML (as I see you are very active on both lists :-)).
>> > Unfortunately, the patch in [1] didnt go into any (GIT) reposoitory. I know.
>> >
>> > I am attaching the original patch and give it a meaningfull name, so
>> > people see it on patchwork.kernel.org (linux-wireless).
>>
>> The patch appears the work, Thanks!
> And it still works.
>
>
>>
>> Now the only problem remains is that I can associate only when device is
>> in promisc mode.
>> I think it doesn't receive broadcast frames.
> Any update on this?
> This is going to be real show stopper for normal users.
> Its pretty much not possible to connect to open AP now unless promisc
> mode is enabled.
>
>
> Best regards,
> Maxim Levitsky
> |
>
>
>

[-- Attachment #2: for_maxim.tar.xz --]
[-- Type: application/octet-stream, Size: 8080 bytes --]

[-- Attachment #3: for_maxim.tar.xz.sha256sum --]
[-- Type: application/octet-stream, Size: 83 bytes --]

72367e5f69dcdc3f45399666f5e887445f528ca18d7ddef5244c24cf14b0bcb7  for_maxim.tar.xz

^ permalink raw reply

* [PATCH V2] ath9k: Enable Short GI in 20 Mhz for ar9287 and later chips
From: Vasanthakumar Thiagarajan @ 2010-06-02 18:23 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

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 

 drivers/net/wireless/ath/ath9k/hw.c   |    3 +
 drivers/net/wireless/ath/ath9k/hw.h   |    1 +
 drivers/net/wireless/ath/ath9k/init.c |    3 +
 drivers/net/wireless/ath/ath9k/rc.c   |  177 ++++++++++++++++++---------------
 4 files changed, 103 insertions(+), 81 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index c33f17d..1985d19 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -2232,6 +2232,9 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah)
 	if (AR_SREV_9300_20_OR_LATER(ah))
 		pCap->hw_caps |= ATH9K_HW_CAP_RAC_SUPPORTED;
 
+	if (AR_SREV_9287_10_OR_LATER(ah))
+		pCap->hw_caps |= ATH9K_HW_CAP_SGI_20;
+
 	return 0;
 }
 
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
index 77245df..a95e88d 100644
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
@@ -199,6 +199,7 @@ enum ath9k_hw_caps {
 	ATH9K_HW_CAP_RAC_SUPPORTED		= BIT(18),
 	ATH9K_HW_CAP_LDPC			= BIT(19),
 	ATH9K_HW_CAP_FASTCLOCK			= BIT(20),
+	ATH9K_HW_CAP_SGI_20			= BIT(21),
 };
 
 enum ath9k_capability_type {
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index d457cb3..f388dcc 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -208,6 +208,9 @@ static void setup_ht_cap(struct ath_softc *sc,
 	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_LDPC)
 		ht_info->cap |= IEEE80211_HT_CAP_LDPC_CODING;
 
+	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
+		ht_info->cap |= IEEE80211_HT_CAP_SGI_20;
+
 	ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
 	ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
 
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index 8519452..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 */
@@ -40,73 +40,75 @@ static const struct ath_rate_table ar5416_11na_ratetable = {
 		{ VALID, VALID, WLAN_RC_PHY_OFDM, 54000, /* 54 Mb */
 			29300, 7, 108, 4, 7, 7, 7, 7 },
 		{ VALID_2040, VALID_2040, WLAN_RC_PHY_HT_20_SS, 6500, /* 6.5 Mb */
-			6400, 0, 0, 0, 8, 24, 8, 24 },
+			6400, 0, 0, 0, 8, 25, 8, 25 },
 		{ VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 13000, /* 13 Mb */
-			12700, 1, 1, 2, 9, 25, 9, 25 },
+			12700, 1, 1, 2, 9, 26, 9, 26 },
 		{ VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 19500, /* 19.5 Mb */
-			18800, 2, 2, 2, 10, 26, 10, 26 },
+			18800, 2, 2, 2, 10, 27, 10, 27 },
 		{ VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 26000, /* 26 Mb */
-			25000, 3, 3, 4, 11, 27, 11, 27 },
+			25000, 3, 3, 4, 11, 28, 11, 28 },
 		{ VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 39000, /* 39 Mb */
-			36700, 4, 4, 4, 12, 28, 12, 28 },
+			36700, 4, 4, 4, 12, 29, 12, 29 },
 		{ INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 52000, /* 52 Mb */
-			48100, 5, 5, 4, 13, 29, 13, 29 },
+			48100, 5, 5, 4, 13, 30, 13, 30 },
 		{ INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 58500, /* 58.5 Mb */
-			53500, 6, 6, 4, 14, 30, 14, 30 },
+			53500, 6, 6, 4, 14, 31, 14, 31 },
 		{ INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 65000, /* 65 Mb */
-			59000, 7, 7, 4, 15, 31, 15, 32 },
+			59000, 7, 7, 4, 15, 32, 15, 33 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 13000, /* 13 Mb */
-			12700, 8, 8, 3, 16, 33, 16, 33 },
+			12700, 8, 8, 3, 16, 34, 16, 34 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 26000, /* 26 Mb */
-			24800, 9, 9, 2, 17, 34, 17, 34 },
+			24800, 9, 9, 2, 17, 35, 17, 35 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 39000, /* 39 Mb */
-			36600, 10, 10, 2, 18, 35, 18, 35 },
+			36600, 10, 10, 2, 18, 36, 18, 36 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 52000, /* 52 Mb */
-			48100, 11, 11, 4, 19, 36, 19, 36 },
+			48100, 11, 11, 4, 19, 37, 19, 37 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 78000, /* 78 Mb */
-			69500, 12, 12, 4, 20, 37, 20, 37 },
+			69500, 12, 12, 4, 20, 38, 20, 38 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 104000, /* 104 Mb */
-			89500, 13, 13, 4, 21, 38, 21, 38 },
+			89500, 13, 13, 4, 21, 39, 21, 39 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 117000, /* 117 Mb */
-			98900, 14, 14, 4, 22, 39, 22, 39 },
+			98900, 14, 14, 4, 22, 40, 22, 40 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 130000, /* 130 Mb */
-			108300, 15, 15, 4, 23, 40, 23, 41 },
+			108300, 15, 15, 4, 23, 41, 24, 42 },
+		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS_HGI, 144400, /* 144.4 Mb */
+			12000, 15, 15, 4, 23, 41, 24, 42 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 13500, /* 13.5 Mb */
-			13200, 0, 0, 0, 8, 24, 24, 24 },
+			13200, 0, 0, 0, 8, 25, 25, 25 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 27500, /* 27.0 Mb */
-			25900, 1, 1, 2, 9, 25, 25, 25 },
+			25900, 1, 1, 2, 9, 26, 26, 26 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 40500, /* 40.5 Mb */
-			38600, 2, 2, 2, 10, 26, 26, 26 },
+			38600, 2, 2, 2, 10, 27, 27, 27 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 54000, /* 54 Mb */
-			49800, 3, 3, 4, 11, 27, 27, 27 },
+			49800, 3, 3, 4, 11, 28, 28, 28 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 81500, /* 81 Mb */
-			72200, 4, 4, 4, 12, 28, 28, 28 },
+			72200, 4, 4, 4, 12, 29, 29, 29 },
 		{ INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 108000, /* 108 Mb */
-			92900, 5, 5, 4, 13, 29, 29, 29 },
+			92900, 5, 5, 4, 13, 30, 30, 30 },
 		{ INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 121500, /* 121.5 Mb */
-			102700, 6, 6, 4, 14, 30, 30, 30 },
+			102700, 6, 6, 4, 14, 31, 31, 31 },
 		{ INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 135000, /* 135 Mb */
-			112000, 7, 7, 4, 15, 31, 32, 32 },
+			112000, 7, 7, 4, 15, 32, 33, 33 },
 		{ INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS_HGI, 150000, /* 150 Mb */
-			122000, 7, 7, 4, 15, 31, 32, 32 },
+			122000, 7, 7, 4, 15, 32, 33, 33 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 27000, /* 27 Mb */
-			25800, 8, 8, 0, 16, 33, 33, 33 },
+			25800, 8, 8, 0, 16, 34, 34, 34 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 54000, /* 54 Mb */
-			49800, 9, 9, 2, 17, 34, 34, 34 },
+			49800, 9, 9, 2, 17, 35, 35, 35 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 81000, /* 81 Mb */
-			71900, 10, 10, 2, 18, 35, 35, 35 },
+			71900, 10, 10, 2, 18, 36, 36, 36 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 108000, /* 108 Mb */
-			92500, 11, 11, 4, 19, 36, 36, 36 },
+			92500, 11, 11, 4, 19, 37, 37, 37 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 162000, /* 162 Mb */
-			130300, 12, 12, 4, 20, 37, 37, 37 },
+			130300, 12, 12, 4, 20, 38, 38, 38 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 216000, /* 216 Mb */
-			162800, 13, 13, 4, 21, 38, 38, 38 },
+			162800, 13, 13, 4, 21, 39, 39, 39 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 243000, /* 243 Mb */
-			178200, 14, 14, 4, 22, 39, 39, 39 },
+			178200, 14, 14, 4, 22, 40, 40, 40 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 270000, /* 270 Mb */
-			192100, 15, 15, 4, 23, 40, 41, 41 },
+			192100, 15, 15, 4, 23, 41, 42, 42 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS_HGI, 300000, /* 300 Mb */
-			207000, 15, 15, 4, 23, 40, 41, 41 },
+			207000, 15, 15, 4, 23, 41, 42, 42 },
 	},
 	50,  /* probe interval */
 	WLAN_RC_HT_FLAG,  /* Phy rates allowed initially */
@@ -116,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 */
@@ -144,73 +146,75 @@ static const struct ath_rate_table ar5416_11ng_ratetable = {
 		{ VALID, VALID, WLAN_RC_PHY_OFDM, 54000, /* 54 Mb */
 			30900, 11, 108, 8, 11, 11, 11, 11 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_20_SS, 6500, /* 6.5 Mb */
-			6400, 0, 0, 4, 12, 28, 12, 28 },
+			6400, 0, 0, 4, 12, 29, 12, 29 },
 		{ VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 13000, /* 13 Mb */
-			12700, 1, 1, 6, 13, 29, 13, 29 },
+			12700, 1, 1, 6, 13, 30, 13, 30 },
 		{ VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 19500, /* 19.5 Mb */
-			18800, 2, 2, 6, 14, 30, 14, 30 },
+			18800, 2, 2, 6, 14, 31, 14, 31 },
 		{ VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 26000, /* 26 Mb */
-			25000, 3, 3, 8, 15, 31, 15, 31 },
+			25000, 3, 3, 8, 15, 32, 15, 32 },
 		{ VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 39000, /* 39 Mb */
-			36700, 4, 4, 8, 16, 32, 16, 32 },
+			36700, 4, 4, 8, 16, 33, 16, 33 },
 		{ INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 52000, /* 52 Mb */
-			48100, 5, 5, 8, 17, 33, 17, 33 },
+			48100, 5, 5, 8, 17, 34, 17, 34 },
 		{ INVALID,  VALID_20, WLAN_RC_PHY_HT_20_SS, 58500, /* 58.5 Mb */
-			53500, 6, 6, 8, 18, 34, 18, 34 },
+			53500, 6, 6, 8, 18, 35, 18, 35 },
 		{ INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 65000, /* 65 Mb */
-			59000, 7, 7, 8, 19, 35, 19, 36 },
+			59000, 7, 7, 8, 19, 36, 19, 37 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 13000, /* 13 Mb */
-			12700, 8, 8, 4, 20, 37, 20, 37 },
+			12700, 8, 8, 4, 20, 38, 20, 38 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 26000, /* 26 Mb */
-			24800, 9, 9, 6, 21, 38, 21, 38 },
+			24800, 9, 9, 6, 21, 39, 21, 39 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 39000, /* 39 Mb */
-			36600, 10, 10, 6, 22, 39, 22, 39 },
+			36600, 10, 10, 6, 22, 40, 22, 40 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 52000, /* 52 Mb */
-			48100, 11, 11, 8, 23, 40, 23, 40 },
+			48100, 11, 11, 8, 23, 41, 23, 41 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 78000, /* 78 Mb */
-			69500, 12, 12, 8, 24, 41, 24, 41 },
+			69500, 12, 12, 8, 24, 42, 24, 42 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 104000, /* 104 Mb */
-			89500, 13, 13, 8, 25, 42, 25, 42 },
+			89500, 13, 13, 8, 25, 43, 25, 43 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 117000, /* 117 Mb */
-			98900, 14, 14, 8, 26, 43, 26, 44 },
+			98900, 14, 14, 8, 26, 44, 26, 44 },
 		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 130000, /* 130 Mb */
-			108300, 15, 15, 8, 27, 44, 27, 45 },
+			108300, 15, 15, 8, 27, 45, 28, 46 },
+		{ VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS_HGI, 144400, /* 130 Mb */
+			120000, 15, 15, 8, 27, 45, 28, 46 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 13500, /* 13.5 Mb */
-			13200, 0, 0, 8, 12, 28, 28, 28 },
+			13200, 0, 0, 8, 12, 29, 29, 29 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 27500, /* 27.0 Mb */
-			25900, 1, 1, 8, 13, 29, 29, 29 },
+			25900, 1, 1, 8, 13, 30, 30, 30 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 40500, /* 40.5 Mb */
-			38600, 2, 2, 8, 14, 30, 30, 30 },
+			38600, 2, 2, 8, 14, 31, 31, 31 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 54000, /* 54 Mb */
-			49800, 3, 3, 8,  15, 31, 31, 31 },
+			49800, 3, 3, 8,  15, 32, 32, 32 },
 		{ VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 81500, /* 81 Mb */
-			72200, 4, 4, 8, 16, 32, 32, 32 },
+			72200, 4, 4, 8, 16, 33, 33, 33 },
 		{ INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 108000, /* 108 Mb */
-			92900, 5, 5, 8, 17, 33, 33, 33 },
+			92900, 5, 5, 8, 17, 34, 34, 34 },
 		{ INVALID,  VALID_40, WLAN_RC_PHY_HT_40_SS, 121500, /* 121.5 Mb */
-			102700, 6, 6, 8, 18, 34, 34, 34 },
+			102700, 6, 6, 8, 18, 35, 35, 35 },
 		{ INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 135000, /* 135 Mb */
-			112000, 7, 7, 8, 19, 35, 36, 36 },
+			112000, 7, 7, 8, 19, 36, 37, 37 },
 		{ INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS_HGI, 150000, /* 150 Mb */
-			122000, 7, 7, 8, 19, 35, 36, 36 },
+			122000, 7, 7, 8, 19, 36, 37, 37 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 27000, /* 27 Mb */
-			25800, 8, 8, 8, 20, 37, 37, 37 },
+			25800, 8, 8, 8, 20, 38, 38, 38 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 54000, /* 54 Mb */
-			49800, 9, 9, 8, 21, 38, 38, 38 },
+			49800, 9, 9, 8, 21, 39, 39, 39 },
 		{ INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 81000, /* 81 Mb */
-			71900, 10, 10, 8, 22, 39, 39, 39 },
+			71900, 10, 10, 8, 22, 40, 40, 40 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 108000, /* 108 Mb */
-			92500, 11, 11, 8, 23, 40, 40, 40 },
+			92500, 11, 11, 8, 23, 41, 41, 41 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 162000, /* 162 Mb */
-			130300, 12, 12, 8, 24, 41, 41, 41 },
+			130300, 12, 12, 8, 24, 42, 42, 42 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 216000, /* 216 Mb */
-			162800, 13, 13, 8, 25, 42, 42, 42 },
+			162800, 13, 13, 8, 25, 43, 43, 43 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 243000, /* 243 Mb */
-			178200, 14, 14, 8, 26, 43, 43, 43 },
+			178200, 14, 14, 8, 26, 44, 44, 44 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 270000, /* 270 Mb */
-			192100, 15, 15, 8, 27, 44, 45, 45 },
+			192100, 15, 15, 8, 27, 45, 46, 46 },
 		{ VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS_HGI, 300000, /* 300 Mb */
-			207000, 15, 15, 8, 27, 44, 45, 45 },
+			207000, 15, 15, 8, 27, 45, 46, 46 },
 	},
 	50,  /* probe interval */
 	WLAN_RC_HT_FLAG,  /* Phy rates allowed initially */
@@ -1193,7 +1197,7 @@ static void ath_rc_init(struct ath_softc *sc,
 }
 
 static u8 ath_rc_build_ht_caps(struct ath_softc *sc, struct ieee80211_sta *sta,
-			       bool is_cw40, bool is_sgi40)
+			       bool is_cw40, bool is_sgi)
 {
 	u8 caps = 0;
 
@@ -1206,8 +1210,9 @@ static u8 ath_rc_build_ht_caps(struct ath_softc *sc, struct ieee80211_sta *sta,
 		}
 		if (is_cw40)
 			caps |= WLAN_RC_40_FLAG;
-		if (is_sgi40)
+		if (is_sgi)
 			caps |= WLAN_RC_SGI_FLAG;
+
 	}
 
 	return caps;
@@ -1300,7 +1305,7 @@ static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband,
 	struct ath_softc *sc = priv;
 	struct ath_rate_priv *ath_rc_priv = priv_sta;
 	const struct ath_rate_table *rate_table;
-	bool is_cw40, is_sgi40;
+	bool is_cw40, is_sgi = false;
 	int i, j = 0;
 
 	for (i = 0; i < sband->n_bitrates; i++) {
@@ -1323,7 +1328,11 @@ static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband,
 	}
 
 	is_cw40 = sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40;
-	is_sgi40 = sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40;
+
+	if (is_cw40)
+		is_sgi = sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40;
+	else if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
+		is_sgi = sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20;
 
 	/* Choose rate table first */
 
@@ -1336,7 +1345,7 @@ static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband,
 		rate_table = hw_rate_table[sc->cur_rate_mode];
 	}
 
-	ath_rc_priv->ht_cap = ath_rc_build_ht_caps(sc, sta, is_cw40, is_sgi40);
+	ath_rc_priv->ht_cap = ath_rc_build_ht_caps(sc, sta, is_cw40, is_sgi);
 	ath_rc_init(sc, priv_sta, sband, sta, rate_table);
 }
 
@@ -1347,10 +1356,10 @@ static void ath_rate_update(void *priv, struct ieee80211_supported_band *sband,
 	struct ath_softc *sc = priv;
 	struct ath_rate_priv *ath_rc_priv = priv_sta;
 	const struct ath_rate_table *rate_table = NULL;
-	bool oper_cw40 = false, oper_sgi40;
+	bool oper_cw40 = false, oper_sgi;
 	bool local_cw40 = (ath_rc_priv->ht_cap & WLAN_RC_40_FLAG) ?
 		true : false;
-	bool local_sgi40 = (ath_rc_priv->ht_cap & WLAN_RC_SGI_FLAG) ?
+	bool local_sgi = (ath_rc_priv->ht_cap & WLAN_RC_SGI_FLAG) ?
 		true : false;
 
 	/* FIXME: Handle AP mode later when we support CWM */
@@ -1363,15 +1372,21 @@ static void ath_rate_update(void *priv, struct ieee80211_supported_band *sband,
 		    oper_chan_type == NL80211_CHAN_HT40PLUS)
 			oper_cw40 = true;
 
-		oper_sgi40 = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
-			true : false;
+		if (oper_cw40)
+			oper_sgi = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
+				   true : false;
+		else if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
+			oper_sgi = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ?
+				   true : false;
+		else
+			oper_sgi = false;
 
-		if ((local_cw40 != oper_cw40) || (local_sgi40 != oper_sgi40)) {
+		if ((local_cw40 != oper_cw40) || (local_sgi != oper_sgi)) {
 			rate_table = ath_choose_rate_table(sc, sband->band,
 						   sta->ht_cap.ht_supported,
 						   oper_cw40);
 			ath_rc_priv->ht_cap = ath_rc_build_ht_caps(sc, sta,
-						   oper_cw40, oper_sgi40);
+						   oper_cw40, oper_sgi);
 			ath_rc_init(sc, priv_sta, sband, sta, rate_table);
 
 			ath_print(ath9k_hw_common(sc->sc_ah), ATH_DBG_CONFIG,
-- 
1.7.0.4


^ permalink raw reply related

* Re: [PATCH] p54spi: replace internal "cx3110x" name with "p54spi"
From: Luke-Jr @ 2010-06-02 19:06 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, linux-kernel, torvalds
In-Reply-To: <1275465299.3915.0.camel@jlt3.sipsolutions.net>

On Wednesday 02 June 2010 02:54:59 am Johannes Berg wrote:
> On Tue, 2010-06-01 at 21:16 -0500, Luke-Jr wrote:
> >  static struct spi_driver p54spi_driver = {
> >  	.driver = {
> > -		/* use cx3110x name because board-n800.c uses that for the
> > -		 * SPI port */
> > -		.name		= "cx3110x",
> > +		.name		= "p54spi",
> >  		.bus		= &spi_bus_type,
> 
> maybe that comment wasn't clear enough ... it needs to be that way to be
> properly linked up against SPI.

I don't understand what you mean here. Does the hardware-side of SPI use 
string identifiers? These are the only two instances of "cx3110x" in the 
kernel source; N8x0 board files expect "p54spi"

^ permalink raw reply

* Re: [RFC] wireless-regdb: Add A band in IL
From: Emmanuel Grumbach @ 2010-06-02 19:46 UTC (permalink / raw)
  To: Luis R. Rodriguez
  Cc: Grumbach, Emmanuel, linville@tuxdriver.com,
	linux-wireless@vger.kernel.org, Michael Green, David Quan
In-Reply-To: <AANLkTilHP9QwNPWVgJhVxYxQF8hzM9cd6-eVKOJc9qC3@mail.gmail.com>

> <emmanuel.grumbach@intel.com> wrote:
> >>On Wed, May 26, 2010 at 10:32 AM, Grumbach, Emmanuel
> >><emmanuel.grumbach@intel.com> wrote:
> >>>>>  country IL:
> >>>>>        (2402 - 2482 @ 40), (N/A, 20)
> >>>>> +       (5150 - 5250 @ 40). (N/A, 200 mW), NO-OUTDOOR
> >>>>> +       (5250 - 5350 @ 40). (N/A, 200 mW), NO-OUTDOOR, DFS
> >>>>
> >>>>I believe the one standing issue here is you are enabling HT40 on 5
> >>>>GHz, how about enabling 2.4 GHz first, and then through a separate
> >>>>patch and time/review we review the HT40 stuff, unless you are in no
> >>>>rush to get 2.4 GHz enabled.
> >>>>
> >>>
> >>> I am not following... HT40 on 2.4 GHz is already enabled...
> >>> What should I enable in 2.4 GHz ?
> >>
> >>Sorry I meant 5 GHz.
> >
> > Actually 40GHz is less a problem in 5GHz than in 2.4GHz since in 2.4GHz
> > I need to have a "Coexistence mechanism", which is not required in 5GHz.
> > This Coexistence mechanism is apparently implemented by one OEM under the
> > name "Clear Channel Assessment (CCA)".
> >
> > In short, I don't think there is any special issue with 40MHz in 5GHz, but
> > I may miss something here... In any case, I have no problem with sending
> > a patch that allows 5GHz in 20MHz for the moment.
> > I can also have a look at the EEPROM in our NICs which is supposed to have
> > all the needed limitations. Details to follow tomorrow.
>
> OK thanks for the clarification Emmanuel, please give Michael some
> time to review.
>


How much time ? :-)

^ permalink raw reply

* wireless-regdb: FI/CZ updates
From: Michael Green @ 2010-06-02 20:12 UTC (permalink / raw)
  To: Pekka Pietikainen, Luis R. Rodriguez
  Cc: David Quan, linville@tuxdriver.com,
	linux-wireless@vger.kernel.org
In-Reply-To: <20100528124258.GA27491@ee.oulu.fi>

VG8gcmVpdGVyYXRlIGEgZmV3IHBvaW50cyBtYWRlIGluIGxhc3QgZW1haWwgYW5kIGFkZCBhIG5l
dyBpbXBvcnRhbnQgcG9pbnQgYykuLi4NCg0KYSkgSSByZWNvbW1lbmQgYW55b25lIHN1Ym1pdHRp
bmcgY2hhbmdlcyB0byB0aGUgdGFibGUgdXNlIGRCbSBpbnN0ZWFkIG9mIG1XIHZhbHVlcy4gVGhp
cyBpcyBzaW1wbHkgZm9yIGNvbnNpc3RlbmN5LiBUaGUgcmVndWxhdG9yeSBydWxlcyBxdW90ZSBh
bGwgc29ydHMgb2YgZGlmZmVyZW50IGRlZmluaXRpb25zIG9mIHR4IHBvd2VyIChpLmUgJ1BTRCBp
biBtVy9NSHonLCAncGVhayBFSVJQJywgJ21heCBkQm0nKS4gQnV0IGlmIHRoaXMgdGFibGUgaXMg
bWVhbnQgYXMgc3cgKHJhdGhlciB0aGFuIGp1c3QgYSByZWZlcmVuY2UgZG9jKSwgdGhlbiBJIHN1
Z2dlc3QgdXNpbmcgdGhlIHNhbWUgdW5pdHMgdGhyb3VnaG91dC4NCg0KYikgWWVzLCBGaW5sYW5k
IHNob3VsZCBmb2xsb3cgdGhlIHNhbWUgIkVUU0kxIiB2YWx1ZXMgdXNlZCBmb3IgbW9zdCBvZiB0
aGUgb3RoZXIgRVUgY291bnRyaWVzLiBFVSBtZW1iZXIgc3RhdGVzIHNvbWV0aW1lcyBoYXZlIG1p
bm9yIGRpZmZlcmVuY2VzIGluIHRyYW5zcG9zaXRpb24gb2YgdGhlIGhhcm1vbml6ZWQgc3RhbmRh
cmRzLCBidXQgaXQgaXMgdGhlIGhhcm1vbml6ZWQgc3RhbmRhcmRzIHRoYXQgbXVzdCBiZSB1c2Vk
IGZvciByZWd1bGF0b3J5IGNvbmZvcm1hbmNlIGFuZCBDRSBNYXJraW5nL2ltcG9ydCBhY3Jvc3Mg
YWxsIHRoZSBFVSBjb3VudHJpZXMuDQpJbiBvdGhlciB3b3JkcyB0aGUgUiZUVEUgRGlyZWN0aXZl
IGFuZCBFVFNJIEVOIDMwMSAzMjggKGZvciAyLjRHSHopIGFuZCBFTjMwMSA4OTMgKGZvciA1R0h6
KSBhcmUgInRoZSBvdmVycmlkaW5nIGxhdyBmb3IgY29tcGxpYW5jZSBhY3Jvc3MgYWxsIHRoZSBF
dXJvcGVhbiBDb21tdW5pdHkgY291bnRyaWVzIChpZSBhbGxvd2VkIHR4IHBvd2VyLCBtb2R1bGF0
aW9ucyBhbmQgY2hhbm5lbHMpLg0KDQoNCg0KYykgSSB0aGluayB0aGUgZ3JvdXAgc2hvdWxkIHJl
dmlldyB0aGUgZG9jdW1lbnRhdGlvbi9jb21tZW50cyB0aGF0IGFjY29tcGFueSB0aGUgcmVnZGJh
c2UgdG8gZXhwbGFpbiBjbGVhcmx5IHRvIGltcGxlbWVudGVycy4uLg0KDQppKSBUeCBwb3dlciB2
YWx1ZXMgaW4gdGhlIGRiYXNlIGFyZSBpbiBFSVJQIC0gbWVhbmluZyB0aGUgZGV2aWNlJ3MgY29u
ZHVjdGVkIHR4IHBvd2VyIHBsdXMgaW5kaXZpZHVhbCBkZXZpY2UncyBhbnRlbm5hIGdhaW4gKGlu
IDIuNCAmIDVHSHopIG11c3QgYmUgYmVsb3cgdGhlIEVJUlAgdmFsdWVzIGluIHRoZSBkYmFzZS4g
IElmIGEgcHJvZHVjdCBzaW1wbHkgc2V0cyBjb25kdWN0ZWQgdHggcG93ZXIgdG8gdGhlIHZhbHVl
IGluIHRoZSBkYmFzZSBhbmQgdGhlIHByb2R1Y3QgaGFzIGFuIGFudGVubmEgd2l0aCBwb3NpdGl2
ZSBnYWluLCB0aGVuIGVuZCBwcm9kdWN0IHdpbGwgKHVuaW50ZW50aW9uYWxseSkgbm90IGNvbXBs
eSB3aXRoIG1vc3QgY291bnRyaWVzIGxpbWl0cy4NCg0KaWkpIEltcGxlbWVudGVycyBtdXN0IGVu
c3VyZSB0aGUgY29tcGxldGUgcmFkaW8gZGV2aWNlL3N5c3RlbSBwYXNzZXMgcmVndWxhdG9yeSBj
b21wbGlhbmNlICBhbmQgcmVjZWl2ZXMgcmFkaW8gY2VydGlmaWNhdGlvbiBmb3IgdGFyZ2V0IGNv
dW50cmllcy4gIEFjdHVhbCBhbnRlbm5hIGdhaW4gaXMgdGFrZW4gaW50byBhY2NvdW50IGR1cmlu
ZyByZWd1bGF0b3J5IGNvbXBsaWFuY2UgdGVzdGluZyBvZiB0aGUgc3lzdGVtIChodyArIHN3KS4g
UmVzdWx0aW5nIGNvbXBsaWFudCBsZXZlbHMgY2FuIGJlIChJTU8gbXVzdCBiZSkgcHJvZ3JhbW1l
ZCBpbnRvIGEgcmFkaW8ncyBody9FRVBST00uICBUaGlzIHByZXZlbnRzIHBvc3NpYmxlIG5vbi1j
b21wbGlhbmNlIHBlciBpKS4gICBBbiBpbXBvcnRhbnQgYXNpZGUgZm9yIHRoaXMgZ3JvdXAgdG8g
dW5kZXJzdGFuZC4uLml0IGlzIHJhcmUgdGhhdCBhbnkgcmFkaW8gZGV2aWNlIGNhbiBiZSBsZWdh
bGx5IHNldCB0byB0aGUgInR4IHBvd2VyIiB2YWx1ZSB0aGF0IGFwcGVhcnMgaW4gYSBjb3VudHJp
ZXMgcHVibGlzaGVkIHJ1bGVzLiBSZWFzb24gaXMgdGhhdCB0eCBwb3dlciBpcyBqdXN0IG9uZSBv
ZiBtYW55IHJlcXVpcmVkIGNvbXBsaWFuY2UgdGVzdHMuIEl0IGlzIG9mdGVuIHNwdXJpb3VzIGVt
aXNzaW9ucywgaGFybW9uaWNzIGFuZCBwb3dlciBzcGVjdHJhbCBkZW5zaXR5IHRlc3RzIHRoYXQg
bGltaXQgdGhlIGNvbXBsaWFudCB0eCBwb3dlciB0byBsZXZlbHMgc29tZXRpbWVzIG11Y2ggbG93
ZXIgdGhhbiB0aGUgc2ltcGxlICJwZWFrIEVJUlAiIGxpbWl0IHF1b3RlZCBpbiB0aGUgcnVsZXMu
ICAgDQoNCk15IHBvaW50IGhlcmUgaXMgdG8gcmVpdGVyYXRlIHRoZSBuZWVkIHRvIGVkdWNhdGUg
aW1wbGVtZW50ZXJzIHRvIHRha2UgcmVzcG9uc2liaWxpdHkgYW5kIHVuZGVyc3RhbmQgdGhlIGNv
bXBsZXRlIHJhZGlvIHByb2R1Y3QgKGh3K3N3KSBtdXN0IG1lZXQgcmVndWxhdG9yeSBydWxlcy4g
SW1wbGVtZW50ZXJzIGNhbm5vdCBhdCBhbGwgcmVseSBvbiB0aGlzIHJlZ2RiYXNlIHRvIGVuc3Vy
ZSB0aGUgZGV2aWNlIG1haW50YWlucyBjb21wbGlhbmNlIHdpdGggdGhlIHJ1bGVzLg0KDQppaWkp
IENhbiBzb21lb25lIHBsZWFzZSBleHBsYWluIGlmL2hvdyBhbnRlbm5hIGdhaW4gaXMgZW50ZXJl
ZCBpbnRvIHN3IGZvciBhIHByb2R1Y3Q/ICBUaGlzIGlzIG9uZSBwb3NzaWJsZSByb290IGZvciB2
ZW5kb3JzIHdobyBkb24ndCBwcm9ncmFtIGluIGNvbXBsaWFuY2UgdGVzdCByZXN1bHRzIGludG8g
dGhlaXIgaHcgdG8gYWRqdXN0IGRvd24gYWN0dWFsIHR4IHBvd2VyIGNvbXBhcmVkIHRvIHRoZSBF
SVJQIHZhbHVlcyBpbiB0aGUgcmVnZGJhc2UuDQoNCg0KIA0KTWljaGFlbCBHcmVlbg0KQXRoZXJv
cyBDb21tdW5pY2F0aW9ucywgSW5jLg0KbWdyZWVuQGF0aGVyb3MuY29tDQpEZXNrOiAgICsxLTc4
MS00MDAtMTQ5MQ0KTW9iaWxlOiArMS01MDgtMzgwLTQ5MjENCg0KLS0tLS1PcmlnaW5hbCBNZXNz
YWdlLS0tLS0NCkZyb206IFBla2thIFBpZXRpa2FpbmVuIFttYWlsdG86cHBAZWUub3VsdS5maV0g
DQpTZW50OiBGcmlkYXksIE1heSAyOCwgMjAxMCA4OjQzIEFNDQpUbzogTHVpcyBSLiBSb2RyaWd1
ZXoNCkNjOiBNaWNoYWVsIEdyZWVuOyBEYXZpZCBRdWFuOyBsaW52aWxsZUB0dXhkcml2ZXIuY29t
OyBsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcNClN1YmplY3Q6IFJlOiB3aXJlbGVzcy1y
ZWdkYjogRkkvQ1ogdXBkYXRlcw0KDQpPbiBXZWQsIE1heSAyNiwgMjAxMCBhdCAxMTozMDozN0FN
IC0wNzAwLCBMdWlzIFIuIFJvZHJpZ3VleiB3cm90ZToNCj4gUGVra2EsIHBsZWFzZSByZW1vdmUg
dGhlc2UgY2hhbmdlcyBmcm9tIHRoaXMgcGF0Y2gsIHlvdSB3YW50IHRvIG1ha2UNCj4geW91ciBw
YXRjaGVzIGF0b21pYywgd2l0aCBvbmx5IG9uZSBwdXJwb3NlIHRvIGhlbHAgdGhlIHJldmlldyBw
cm9jZXNzDQo+IGVhc2llci4gWW91IHN0YXNoZWQgY2hhbmdlcyB0byBDWiAmIEZJIG9uIG9uZS4u
LiBZb3UgYWxzbyBzd2l0Y2hlZA0KPiBmcm9tIGRCbSB0byBtVyBhbmQgbm90ZSBob3cgeW91IGFj
dHVhbGx5IGRpZCBjaGFuZ2UgdGhlIEVJUlAgaGVyZSBmb3INCj4gb25seSBvbmUgZm9yIEZJLiBQ
bGVhc2UgcHJvdmlkZSBhIHNlcGFyYXRlIHNldCBvZiBwYXRjaGVzIGZvciB0aGF0IGZvcg0KPiBG
SS4gSWYgeW91IHdhbnQgdG8gc3dpdGNoIHRvIG1XIGZvciBhbGwgb2YgdGhlIGVudHJpZXMgZm9y
IEZJIGZpcnN0IGRvDQo+IHRoYXQsIGFuZCB0aGVuIG9uIGEgc2VwYXJhdGUgcGF0Y2ggbWFrZSB0
aGUgYWN0dWFsIHJlZ3VsYXRvcnkgY2hhbmdlcw0KPiBzbyB0aGlzIGlzIGNyeXN0YWwgY2xlYXIg
Zm9yIHRoZSByZXZpZXcgcHJvY2Vzcy4NCk9raWUNCg0KTG9va2luZyBhdCBpdCBhIGJpdCBtb3Jl
IHByb2JhYmx5IG1ha2VzIHNlbnNlIHRvIGNvZGlmeSB0aGUgY3VycmVudA0KaGFybW9uaXplZCBF
VSBydWxlcywgYW5kIHRoZW4ganVzdCBmb3IgZWFjaCBjb3VudHJ5IG5vdGUgdGhhdCB0aGV5J3Zl
DQphY3R1YWxseSBpbXBsZW1lbnRlZCBpdCBpbiB0aGVpciBsb2NhbCBsZWdpc2xhdGlvbiAoSSBj
aGVja2VkIEZJLCBTRSBhbmQNCkNaKS4gIEV2ZXJ5b25lIHNob3VsZCBoYXZlLCBidXQgc29tZSBh
cmUgcHJldHR5IHNsb3cgYXQgdGhpcywgb3INCmhhdmUgc29tZSBzcGVjaWFsIG5hdGlvbmFsIGlu
dGVyZXN0cy4uLg0KDQpUaGUgbGVnaXNsYXRpb24gdXNlcyBtVywgc28gdGhhdCdzIHRoZSByZWFz
b24gSSBzd2l0Y2hlZCB0aGVtLg0KDQpGb3IgcmV2aWV3IChmaXJzdCBoaXQgb24gZ29vZ2xlIGZv
ciB0aGUgZGVjaXNpb24gbnVtYmVyDQpzaG91bGQgZmluZCB0aGUgb2ZmaWNpYWwgdGV4dCksIEkg
Y2FuIGRvIHBhdGNoZXMgb25jZSBzb21lb25lDQpoYXMgdmVyaWZpZWQsIHRoYXQgdGhpcyBpcyB3
aGF0IHRoZSBsZWdhbGVzZSBhY3R1YWxseSBzYXlzOg0KDQojIEVVIENvbW1pc3Npb24gRGVjaXNp
b24gMjAwOS8zODEvRUMNCiAgICAgICAoMjQwMCAtIDI0ODMuNSBAIDQwKSwgKE4vQSwgMTAwbVcp
DQojIDIwMDUvNTEzL0VDIGFuZCAyMDA3LzkwL0VDLCA1MjUwIGFuZCA1NDcwIGNhbiBiZSBkb3Vi
bGVkIGlmIFRQQyBpcyBpbiB1c2UNCiAgICAgICAoNTE1MCAtIDUyNTAgQCA0MCksIChOL0EsIDIw
MG1XKSwgTk8tT1VURE9PUg0KICAgICAgICg1MjUwIC0gNTM1MCBAIDQwKSwgKE4vQSwgMTAwbVcp
LCBOTy1PVVRET09SLCBERlMNCiAgICAgICAoNTQ3MCAtIDU3MjUgQCA0MCksIChOL0EsIDUwMG1X
KSwgREZTDQoNCg0K

^ permalink raw reply

* ] wireless-regdb: Add A band in IL
From: Michael Green @ 2010-06-02 20:29 UTC (permalink / raw)
  To: Emmanuel Grumbach, Luis R. Rodriguez
  Cc: Grumbach, Emmanuel, linville@tuxdriver.com,
	linux-wireless@vger.kernel.org
In-Reply-To: <AANLkTikxoZxZVp-1gLjXLy2XFrBz47SR6temPfBVDG-I@mail.gmail.com>

Hi All,

I agree it's okay to enable HT40 in 5GHz for Israel. 

I suggest the 2010 doc from Emmanuel be reference in the dbase so implementers are aware of the conditions by MOC for enabling HT20/HT40 in both bands during regulatory conformance of the product in Israel.



Michael Green
Atheros Communications, Inc.
mgreen@atheros.com
Desk:   +1-781-400-1491
Mobile: +1-508-380-4921

-----Original Message-----
From: Emmanuel Grumbach [mailto:egrumbach@gmail.com] 
Sent: Wednesday, June 02, 2010 3:47 PM
To: Luis R. Rodriguez
Cc: Grumbach, Emmanuel; linville@tuxdriver.com; linux-wireless@vger.kernel.org; Michael Green; David Quan
Subject: Re: [RFC] wireless-regdb: Add A band in IL

> <emmanuel.grumbach@intel.com> wrote:
> >>On Wed, May 26, 2010 at 10:32 AM, Grumbach, Emmanuel
> >><emmanuel.grumbach@intel.com> wrote:
> >>>>>  country IL:
> >>>>>        (2402 - 2482 @ 40), (N/A, 20)
> >>>>> +       (5150 - 5250 @ 40). (N/A, 200 mW), NO-OUTDOOR
> >>>>> +       (5250 - 5350 @ 40). (N/A, 200 mW), NO-OUTDOOR, DFS
> >>>>
> >>>>I believe the one standing issue here is you are enabling HT40 on 5
> >>>>GHz, how about enabling 2.4 GHz first, and then through a separate
> >>>>patch and time/review we review the HT40 stuff, unless you are in no
> >>>>rush to get 2.4 GHz enabled.
> >>>>
> >>>
> >>> I am not following... HT40 on 2.4 GHz is already enabled...
> >>> What should I enable in 2.4 GHz ?
> >>
> >>Sorry I meant 5 GHz.
> >
> > Actually 40GHz is less a problem in 5GHz than in 2.4GHz since in 2.4GHz
> > I need to have a "Coexistence mechanism", which is not required in 5GHz.
> > This Coexistence mechanism is apparently implemented by one OEM under the
> > name "Clear Channel Assessment (CCA)".
> >
> > In short, I don't think there is any special issue with 40MHz in 5GHz, but
> > I may miss something here... In any case, I have no problem with sending
> > a patch that allows 5GHz in 20MHz for the moment.
> > I can also have a look at the EEPROM in our NICs which is supposed to have
> > all the needed limitations. Details to follow tomorrow.
>
> OK thanks for the clarification Emmanuel, please give Michael some
> time to review.
>


How much time ? :-)

^ permalink raw reply

* Re: [RFC] wireless-regdb: Add A band in IL
From: Luis R. Rodriguez @ 2010-06-02 21:37 UTC (permalink / raw)
  To: Emmanuel Grumbach
  Cc: Grumbach, Emmanuel, linville@tuxdriver.com,
	linux-wireless@vger.kernel.org, Michael Green, David Quan
In-Reply-To: <AANLkTikxoZxZVp-1gLjXLy2XFrBz47SR6temPfBVDG-I@mail.gmail.com>

On Wed, Jun 2, 2010 at 12:46 PM, Emmanuel Grumbach <egrumbach@gmail.com> wrote:
>> <emmanuel.grumbach@intel.com> wrote:
>> >>On Wed, May 26, 2010 at 10:32 AM, Grumbach, Emmanuel
>> >><emmanuel.grumbach@intel.com> wrote:
>> >>>>>  country IL:
>> >>>>>        (2402 - 2482 @ 40), (N/A, 20)
>> >>>>> +       (5150 - 5250 @ 40). (N/A, 200 mW), NO-OUTDOOR
>> >>>>> +       (5250 - 5350 @ 40). (N/A, 200 mW), NO-OUTDOOR, DFS
>> >>>>
>> >>>>I believe the one standing issue here is you are enabling HT40 on 5
>> >>>>GHz, how about enabling 2.4 GHz first, and then through a separate
>> >>>>patch and time/review we review the HT40 stuff, unless you are in no
>> >>>>rush to get 2.4 GHz enabled.
>> >>>>
>> >>>
>> >>> I am not following... HT40 on 2.4 GHz is already enabled...
>> >>> What should I enable in 2.4 GHz ?
>> >>
>> >>Sorry I meant 5 GHz.
>> >
>> > Actually 40GHz is less a problem in 5GHz than in 2.4GHz since in 2.4GHz
>> > I need to have a "Coexistence mechanism", which is not required in 5GHz.
>> > This Coexistence mechanism is apparently implemented by one OEM under the
>> > name "Clear Channel Assessment (CCA)".
>> >
>> > In short, I don't think there is any special issue with 40MHz in 5GHz, but
>> > I may miss something here... In any case, I have no problem with sending
>> > a patch that allows 5GHz in 20MHz for the moment.
>> > I can also have a look at the EEPROM in our NICs which is supposed to have
>> > all the needed limitations. Details to follow tomorrow.
>>
>> OK thanks for the clarification Emmanuel, please give Michael some
>> time to review.
>>
>
>
> How much time ? :-)

Seems he just finished and sent his notes to the list.

  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


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox