Linux wireless drivers development
 help / color / mirror / Atom feed
* pull request: wireless-next-2.6 2010-05-17
From: John W. Linville @ 2010-05-17 18:26 UTC (permalink / raw)
  To: davem; +Cc: linux-wireless, netdev

Dave,

One last big batch intended for 2.6.35 -- these have all been in
linux-next for several days.  Included are the usual driver updates for
iwlwifi, ath9k, and rt2x00 along with a smattering of other bits
(including some trivial fixups).

Please let me know if there are problems!

Thanks,

John

---

The following changes since commit 278554bd6579206921f5d8a523649a7a57f8850d:
  David S. Miller (1):
        Merge branch 'master' of master.kernel.org:/.../davem/net-2.6

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6.git for-davem

Abhijeet Kolekar (3):
      iwl3945: fix scan races
      iwl3945: add plcp error checking
      mac80211: fix paged defragmentation

Dan Carpenter (3):
      wl1271: add missing spin_lock()
      wl1271: fix notifier interface supported test
      wl1271: remove some unneeded code

Felix Fietkau (4):
      ath9k: use debugfs_remove_recursive() instead of keeping pointers to all entries
      ath9k: add debugfs files for reading/writing the rx and tx chainmask
      ath9k: add debugfs files for reading/writing registers
      ath9k_hw: clean up EEPROM endian handling on AR9003

Gertjan van Wingerde (6):
      rt2x00: Consistently name skb frame descriptor skbdesc.
      rt2x00: Fix beacon descriptor writing for rt61pci.
      rt2x00: Re-order tx descriptor writing code in drivers.
      rt2x00: Simplify TXD handling of beacons.
      rt2x00: Dump beacons under a different identifier than TX frames.
      rt2x00: In debugfs frame dumping allow the TX descriptor to be part of the skb.

Johannes Berg (34):
      iwlagn: wait for asynchronous firmware loading
      iwlwifi: use vif iwl_bss_info_changed
      iwl3945: use iwl3945_add_bcast_station
      iwlwifi: pass address to iwl_remove_station
      iwlwifi: manage IBSS station properly
      iwlagn: show and store firmware build number
      iwl3945: remove ucode access indirection
      iwlwifi: remove ucode virtual functions
      iwlwifi: move eeprom version printout to eeprom init
      iwlagn: prepare for new firmware file format
      iwlagn: implement loading a new firmware file type
      iwlwifi: remove rts_threshold
      iwlagn: move iwl_get_ra_sta_id to 4965
      iwlagn: use vif->type to check station
      iwlwifi: apply filter flags directly
      iwlwifi: push virtual interface through
      iwlagn: use virtual interface in TX aggregation handling
      iwlwifi: remove useless priv->vif check
      iwlwifi: use vif in iwl_ht_conf
      iwlwifi: note that priv->bssid is used only by 3945
      iwlwifi: fix iwl_sta_init_lq station ID
      iwlwifi: split allocation/sending local station LQ
      iwlwifi: rework broadcast station management
      iwlwifi: track station IDs
      iwlwifi: add iwl_sta_id()
      iwlwifi: use iwl_find_station less
      iwlagn: use iwl_sta_id() for aggregation
      iwlwifi: use iwl_sta_id() for TKIP key update
      iwlwifi: move iwl_find_station() to 4965
      iwlwifi: rename iwl_add_local_station
      iwlwifi: remove pointless HT check
      iwlwifi: clear driver stations when going down
      mac80211: don't process work item with wrong frame
      mac80211: add offload channel switch support

John W. Linville (2):
      Merge branch 'master' of git://git.kernel.org/.../linville/wireless-2.6
      Merge branch 'master' of git://git.kernel.org/.../linville/wireless-next-2.6 into for-davem

Julia Lawall (1):
      drivers/net/wireless/hostap: Drop memory allocation cast

Luis R. Rodriguez (2):
      ath5k: drop warning on jumbo frames
      ath9k_hw: new initialization values for AR9003

Reinette Chatre (3):
      Merge branch 'wireless-2.6' into wireless-next-2.6
      iwlwifi: make bcast LQ command available for later restore actions
      iwlagn: work around rate scaling reset delay

Shanyu Zhao (2):
      iwlwifi: rename 6000 series Gen2 devices to Gen2a
      iwlwifi: dump firmware build info in error case

Steve Tanner (1):
      ar9170usb: add vendor and device ID for Qwest/Actiontec 802AIN Wireless N USB Network Adapter

Sujith.Manoharan@atheros.com (5):
      ath9k_htc: Lock sta_notify() callback
      ath9k_htc: Allocate URBs properly
      ath9k_htc: Reorder HTC initialization
      ath9k_htc: Fix target ready race condition
      ath9k_htc: Fix array overflow

Vasanthakumar Thiagarajan (2):
      ath9k: Fix bug in handling rx frames with invalid descriptor content
      ath9k: Remove unused rx_edma in ath_rx_addbuffer_edma()

Wey-Yi Guy (11):
      iwlwifi: remove powersave debugfs if it is not supported
      iwlwifi: rename "tx_power" to "chain_tx_power"
      iwlwifi: remove device type checking for tx power in debugfs
      iwlwifi: use .cfg to enable/disable continuous ucode trace
      iwlwifi: use cfg to configure calibration operation
      iwlwifi: give correct return information for tx power debugfs
      iwlwifi: wimax co-exist code clean up
      iwlwifi: checking for all the possible failure cases
      iwlwifi: "tx power per chain" are part of ucode_tx_stats
      iwlwifi: provide more comments for cfg structure
      mac80211: check channel switch mode for future frames transmit

 drivers/net/wireless/ath/ar9170/usb.c            |    2 +
 drivers/net/wireless/ath/ath5k/base.c            |   12 +-
 drivers/net/wireless/ath/ath9k/ar9003_eeprom.c   |  174 +++----
 drivers/net/wireless/ath/ath9k/ar9003_eeprom.h   |   10 +-
 drivers/net/wireless/ath/ath9k/ar9003_initvals.h |  268 ++++++------
 drivers/net/wireless/ath/ath9k/debug.c           |  236 ++++++++--
 drivers/net/wireless/ath/ath9k/debug.h           |    8 +-
 drivers/net/wireless/ath/ath9k/hif_usb.c         |   58 ++--
 drivers/net/wireless/ath/ath9k/htc_drv_init.c    |    7 +
 drivers/net/wireless/ath/ath9k/htc_drv_main.c    |    4 +
 drivers/net/wireless/ath/ath9k/htc_hst.c         |   51 +-
 drivers/net/wireless/ath/ath9k/htc_hst.h         |   15 +-
 drivers/net/wireless/ath/ath9k/recv.c            |    3 +-
 drivers/net/wireless/hostap/hostap_80211_rx.c    |    3 +-
 drivers/net/wireless/hostap/hostap_ioctl.c       |    3 +-
 drivers/net/wireless/iwlwifi/iwl-1000.c          |    9 +-
 drivers/net/wireless/iwlwifi/iwl-3945.c          |  147 ++++--
 drivers/net/wireless/iwlwifi/iwl-3945.h          |   22 +-
 drivers/net/wireless/iwlwifi/iwl-4965.c          |  100 +++--
 drivers/net/wireless/iwlwifi/iwl-5000.c          |   27 +-
 drivers/net/wireless/iwlwifi/iwl-6000.c          |   51 ++-
 drivers/net/wireless/iwlwifi/iwl-agn-debugfs.c   |   16 +
 drivers/net/wireless/iwlwifi/iwl-agn-lib.c       |   31 +-
 drivers/net/wireless/iwlwifi/iwl-agn-tx.c        |   29 +-
 drivers/net/wireless/iwlwifi/iwl-agn-ucode.c     |  109 +++--
 drivers/net/wireless/iwlwifi/iwl-agn.c           |  556 +++++++++++++++-------
 drivers/net/wireless/iwlwifi/iwl-agn.h           |   14 +-
 drivers/net/wireless/iwlwifi/iwl-commands.h      |    6 +-
 drivers/net/wireless/iwlwifi/iwl-core.c          |  199 +++-----
 drivers/net/wireless/iwlwifi/iwl-core.h          |   60 ++-
 drivers/net/wireless/iwlwifi/iwl-debugfs.c       |   66 +--
 drivers/net/wireless/iwlwifi/iwl-dev.h           |   89 +++-
 drivers/net/wireless/iwlwifi/iwl-eeprom.c        |    7 +
 drivers/net/wireless/iwlwifi/iwl-power.c         |    5 +-
 drivers/net/wireless/iwlwifi/iwl-rx.c            |    9 +-
 drivers/net/wireless/iwlwifi/iwl-scan.c          |   16 +-
 drivers/net/wireless/iwlwifi/iwl-sta.c           |  456 ++++++++----------
 drivers/net/wireless/iwlwifi/iwl-sta.h           |   60 ++-
 drivers/net/wireless/iwlwifi/iwl3945-base.c      |  163 ++++---
 drivers/net/wireless/rt2x00/rt2400pci.c          |   26 +-
 drivers/net/wireless/rt2x00/rt2500pci.c          |   26 +-
 drivers/net/wireless/rt2x00/rt2500usb.c          |   55 ++-
 drivers/net/wireless/rt2x00/rt2800pci.c          |   14 +-
 drivers/net/wireless/rt2x00/rt2800usb.c          |    8 +-
 drivers/net/wireless/rt2x00/rt2x00debug.c        |   21 +-
 drivers/net/wireless/rt2x00/rt2x00dump.h         |    3 +
 drivers/net/wireless/rt2x00/rt2x00pci.c          |    9 -
 drivers/net/wireless/rt2x00/rt2x00queue.c        |   15 +-
 drivers/net/wireless/rt2x00/rt2x00queue.h        |    3 +
 drivers/net/wireless/rt2x00/rt2x00usb.c          |    8 -
 drivers/net/wireless/rt2x00/rt61pci.c            |   35 +-
 drivers/net/wireless/rt2x00/rt73usb.c            |   71 ++--
 drivers/net/wireless/wl12xx/wl1271_main.c        |    5 +-
 include/net/mac80211.h                           |   39 ++
 net/mac80211/driver-ops.h                        |   11 +
 net/mac80211/driver-trace.h                      |   49 ++
 net/mac80211/ieee80211_i.h                       |    3 +-
 net/mac80211/mlme.c                              |   59 +++-
 net/mac80211/rx.c                                |    6 +
 net/mac80211/work.c                              |   27 +-
 60 files changed, 2152 insertions(+), 1442 deletions(-)

Omnibus patch available here:

	http://www.kernel.org/pub/linux/kernel/people/linville/wireless-next-2.6-2010-05-17.patch.bz2

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply

* Re: A file to print the release of loaded compat-wireless stuff
From: Luis R. Rodriguez @ 2010-05-17 17:54 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: linux-wireless
In-Reply-To: <z2o43e72e891005041451qa4ea338bu5a20171a82f13471@mail.gmail.com>

On Tue, May 4, 2010 at 2:51 PM, Luis R. Rodriguez <mcgrof@gmail.com> wrote:
> On Tue, May 4, 2010 at 2:11 PM, Pavel Roskin <proski@gnu.org> wrote:
>> On Tue, 2010-05-04 at 13:44 -0700, Luis R. Rodriguez wrote:
>>> It seems there is a reasonable need to find out what version of
>>> compat-wireless you have running. This will be a dated thing when
>>> based on linux-next but more importantly it will contain the 2.6.3x.y
>>> release the release was based on for the stable releases. Any ideas of
>>> what filesystem API to use for this, I was thinking maybe a simple
>>> sysfs entry for the compat module. Thoughts, preferences?
>>
>> We could use a read-only parameter of the compat module.  Then the
>> version would be in /sys/module/compat/parameters/version
>>
>> Module parameters are visible in sysfs even if the code is compiled into
>> the kernel.
>
> Neat trick thanks for the tip, will give that a shot.

Oh wow, and look at that, even if you enable the module as built-in to
the kernel you still get the module parameter sysfs file for it. For
example I just built-in cfg80211 on my kernel and I still see the
ieee80211_regdom module parameter:

mcgrof@tux ~ $ lsmod | grep cfg
mcgrof@tux ~ $ cat /sys/module/cfg80211/parameters/ieee80211_regdom
00

This is important as some distributions [1] might built-in some stable
compat-wireless releases into their older kernel releases.

  Luis

[1] http://src.chromium.org/cgi-bin/gitweb.cgi?p=kernel.git;a=commit;h=73ec6aa6d7ed254d235939bf00ea49cbb6526e6f

^ permalink raw reply

* [PATCH] ath9k: remove AR9003 from PCI IDs for now
From: Luis R. Rodriguez @ 2010-05-17 17:15 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Luis R. Rodriguez

We tried to squeeze as much AR9003 support into this kernel
release cycle but there are a few features which are still
being tested and developed. Some of these features are critical
to the stable operation of AR9003 so for now disable AR9003 support
all together. This will get re-enabled once all necessary features
are in place but very likely will not happen for 2.6.35.

Reviewed-by: Don Breslin <don.breslin@atheros.com>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---

John, after a lot of testing during this kernel release cycle
we do not feel ready for AR9003 for 2.6.35 so AR9003 will have
to wait until 2.6.36. We'll try cherry-picking some linux-next
patches on top of compat-wireless-2.6.35-rc but until we get all
the pending stuff ironed out [1] we just have to disable AR9003
from 2.6.35.

[1] http://wireless.kernel.org/en/users/Drivers/ath9k/todo/ar93xx

 drivers/net/wireless/ath/ath9k/pci.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
index 257b10b..1ec836c 100644
--- a/drivers/net/wireless/ath/ath9k/pci.c
+++ b/drivers/net/wireless/ath/ath9k/pci.c
@@ -28,7 +28,6 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = {
 	{ PCI_VDEVICE(ATHEROS, 0x002C) }, /* PCI-E 802.11n bonded out */
 	{ PCI_VDEVICE(ATHEROS, 0x002D) }, /* PCI   */
 	{ PCI_VDEVICE(ATHEROS, 0x002E) }, /* PCI-E */
-	{ PCI_VDEVICE(ATHEROS, 0x0030) }, /* PCI-E  AR9300 */
 	{ 0 }
 };
 
-- 
1.6.3.3


^ permalink raw reply related

* Re: [PATCH 1/37] drivers/net/wireless/libertas: Use kmemdup
From: Dan Williams @ 2010-05-17 16:35 UTC (permalink / raw)
  To: Julia Lawall
  Cc: John W. Linville, libertas-dev, linux-wireless, netdev,
	linux-kernel, kernel-janitors
In-Reply-To: <Pine.LNX.4.64.1005152312060.21345@ask.diku.dk>

On Sat, 2010-05-15 at 23:12 +0200, Julia Lawall wrote:
> From: Julia Lawall <julia@diku.dk>
> 
> Use kmemdup when some other buffer is immediately copied into the
> allocated region.
> 
> A simplified version of the semantic patch that makes this change is as
> follows: (http://coccinelle.lip6.fr/)
> 
> // <smpl>
> @@
> expression from,to,size,flag;
> statement S;
> @@
> 
> -  to = \(kmalloc\|kzalloc\)(size,flag);
> +  to = kmemdup(from,size,flag);
>    if (to==NULL || ...) S
> -  memcpy(to, from, size);
> // </smpl>
> 
> Signed-off-by: Julia Lawall <julia@diku.dk>

Acked-by: Dan Williams <dcbw@redhat.com>

> ---
>  drivers/net/wireless/libertas/if_usb.c |    6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff -u -p a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
> --- a/drivers/net/wireless/libertas/if_usb.c
> +++ b/drivers/net/wireless/libertas/if_usb.c
> @@ -618,16 +618,14 @@ static void if_usb_receive_fwload(struct
>  		return;
>  	}
>  
> -	syncfwheader = kmalloc(sizeof(struct fwsyncheader), GFP_ATOMIC);
> +	syncfwheader = kmemdup(skb->data + IPFIELD_ALIGN_OFFSET,
> +			       sizeof(struct fwsyncheader), GFP_ATOMIC);
>  	if (!syncfwheader) {
>  		lbs_deb_usbd(&cardp->udev->dev, "Failure to allocate syncfwheader\n");
>  		kfree_skb(skb);
>  		return;
>  	}
>  
> -	memcpy(syncfwheader, skb->data + IPFIELD_ALIGN_OFFSET,
> -	       sizeof(struct fwsyncheader));
> -
>  	if (!syncfwheader->cmd) {
>  		lbs_deb_usb2(&cardp->udev->dev, "FW received Blk with correct CRC\n");
>  		lbs_deb_usb2(&cardp->udev->dev, "FW received Blk seqnum = %d\n",



^ permalink raw reply

* [PATCH] cfg80211: don't refuse HT20 channels on devices that don't support HT40
From: Helmut Schaa @ 2010-05-17 15:30 UTC (permalink / raw)
  To: John Linville; +Cc: linux-wireless, Johannes Berg

Don't refuse HT20 channels on devices that don't support HT40.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
---
 net/wireless/chan.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/wireless/chan.c b/net/wireless/chan.c
index d92d088..647832a 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -35,8 +35,9 @@ rdev_freq_to_chan(struct cfg80211_registered_device *rdev,
 		if (!ht_cap->ht_supported)
 			return NULL;
 
-		if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) ||
-		    ht_cap->cap & IEEE80211_HT_CAP_40MHZ_INTOLERANT)
+		if (channel_type != NL80211_CHAN_HT20 &&
+		    (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) ||
+		    ht_cap->cap & IEEE80211_HT_CAP_40MHZ_INTOLERANT))
 			return NULL;
 	}
 
-- 
1.6.4.2


^ permalink raw reply related

* [RFC] cfg80211: allow HT20 channels on devices incabable of HT40
From: Helmut Schaa @ 2010-05-17 14:58 UTC (permalink / raw)
  To: linux-wireless; +Cc: Johannes Berg

I was just trying to set up a rt2800 AP but hostapd was unable to
set the channel when configuring 11n.

rt2800 doesn't support HT40 yet, that's why it doesn't set
IEEE80211_HT_CAP_SUP_WIDTH_20_40 and cfg80211 refuses to set the
channel when the device doesn't support IEEE80211_HT_CAP_SUP_WIDTH_20_40
even if  a HT20 only channel should be set.

Did I miss anything or should it be allowed to set a HT20 channel
on a HT capable device that doesn't allow HT40?

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
---
 net/wireless/chan.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/wireless/chan.c b/net/wireless/chan.c
index d92d088..647832a 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -35,8 +35,9 @@ rdev_freq_to_chan(struct cfg80211_registered_device *rdev,
 		if (!ht_cap->ht_supported)
 			return NULL;
 
-		if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) ||
-		    ht_cap->cap & IEEE80211_HT_CAP_40MHZ_INTOLERANT)
+		if (channel_type != NL80211_CHAN_HT20 &&
+		    (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) ||
+		    ht_cap->cap & IEEE80211_HT_CAP_40MHZ_INTOLERANT))
 			return NULL;
 	}
 
-- 
1.6.4.2


^ permalink raw reply related

* Re: ath5k past 2.6.30 breaks monitor mode (and thus the aircrack suite)
From: Gábor Stefanik @ 2010-05-17 11:21 UTC (permalink / raw)
  To: Weedy; +Cc: linux-wireless
In-Reply-To: <AANLkTinYZ-_DkNZweDFfdf_DdDJGMNhgQwppDnVo_Duj@mail.gmail.com>

2010/5/17 Weedy <weedy2887@gmail.com>:
> 2010/5/16 Gábor Stefanik <netrolller.3d@gmail.com>:
>> On Sun, May 16, 2010 at 10:41 PM, Weedy <weedy2887@gmail.com> wrote:
>>> Running airodump on ubuntus 2.6.30 kernel works as expected. The
>>> 2.6.32 kernel shipped in lucid never sees data packets.
>>>
>>> I have narrowed it down to channel hopping. modprobing the driver and
>>> starting mon0 on a fixed channel works as expected, but allowing
>>> airodump to channel hop breaks the interface until the driver is
>>> reset.
>>>
>>> I wrote a script to download and build compat wireless starting from
>>> 2009-01-01 (granted everything fails until half way through october),
>>> but every version that is successfully installed also show the same
>>> bug.
>>>
>>> Further instructions welcome.
>>
>> Try checking out linux-2.6, and doing a bisect between 2.6.30 and 2.6.32.
>
> Do I have to check out the entire kernel? even with scripting my
> netbook would take forever to do this.
>

Yes, you need to check out the entire repo - but with git, you do not
need to re-download the whole tree everytime you check out a new
revision; it is a distributed system. git is not CVS. :-)

-- 
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)

^ permalink raw reply

* AR9170 - Recovering broken frames from MAC
From: Valentin Manea @ 2010-05-17  9:37 UTC (permalink / raw)
  To: linux-wireless

Hi,

  I'm working on a project with some ar9170 USB devices and I am interested in recovering broken frames from the MAC, basically I would like to get any received frame whoever broken to the driver.
  I've seen in the ar9170usb driver a register called *AR9170_MAC_REG_FRAMETYPE_FILTER* but only some of the bits are documented.

  I've heard that this is totally possible with other Atheros MACs, so could it be implemented with the AR9170?

Thanks,
Valentin

^ permalink raw reply

* Re: [PATCH 12/37] drivers/net/wireless/wl12xx: Use kmemdup
From: Luciano Coelho @ 2010-05-17  7:59 UTC (permalink / raw)
  To: ext Julia Lawall
  Cc: John W. Linville, linux-wireless@vger.kernel.org,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	kernel-janitors@vger.kernel.org
In-Reply-To: <Pine.LNX.4.64.1005152316220.21345@ask.diku.dk>

On Sat, 2010-05-15 at 23:16 +0200, ext Julia Lawall wrote:
> From: Julia Lawall <julia@diku.dk>
> 
> Use kmemdup when some other buffer is immediately copied into the
> allocated region.
> 
> A simplified version of the semantic patch that makes this change is as
> follows: (http://coccinelle.lip6.fr/)
> 
> // <smpl>
> @@
> expression from,to,size,flag;
> statement S;
> @@
> 
> -  to = \(kmalloc\|kzalloc\)(size,flag);
> +  to = kmemdup(from,size,flag);
>    if (to==NULL || ...) S
> -  memcpy(to, from, size);
> // </smpl>
> 
> Signed-off-by: Julia Lawall <julia@diku.dk>

Thanks.

Acked-by: Luciano Coelho <luciano.coelho@nokia.com>

-- 
Cheers,
Luca.


^ permalink raw reply

* Re: [PATCH 7/37] drivers/net/wireless/wl12xx: Use kmemdup
From: Kalle Valo @ 2010-05-17  7:47 UTC (permalink / raw)
  To: Julia Lawall
  Cc: John W. Linville, linux-wireless, netdev, linux-kernel,
	kernel-janitors
In-Reply-To: <Pine.LNX.4.64.1005152314540.21345@ask.diku.dk>

On 16 May 2010 00:15, Julia Lawall <julia@diku.dk> wrote:
> From: Julia Lawall <julia@diku.dk>
>
> Use kmemdup when some other buffer is immediately copied into the
> allocated region.

Thanks, looks good to me.

> Signed-off-by: Julia Lawall <julia@diku.dk>

Acked-by: Kalle Valo <kvalo@adurom.com>

^ permalink raw reply

* [PATCH v2] Update AR9271 firmware.
From: Sujith @ 2010-05-17  7:07 UTC (permalink / raw)
  To: David.Woodhouse; +Cc: linux-wireless

* Support STBC (RX)
* Support HT20 SGI
* Improve IOT performance.
* Fix FW crash in TID handling.
* Several bug fixes.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 ar9271.fw |  Bin 49280 -> 51280 bytes
 1 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/ar9271.fw b/ar9271.fw
index 2398e5517b0ad7da7adad54763b91705a3d2acb7..0ec953b404c1912dc64fa3b0171cffae82b0f375 100644
GIT binary patch
delta 12245
zcma)id0bP+7Vz8<6heToLlPi_5V8R=B5r8ou4rrO_Rvd}Dp+Z4i*r%IEr=+aOLVLX
zZgB%e+d`qOt=e8hEw;1|)LP4;c6qJctbKyDZu!n!z`p*z?~m{Pe&?Q<Gv}N+bLPx?
zZ~j`h7KfXoY``Am*nI^#juaxt-utNUaqPbZwC@4#BS)nMK#Cky6sK;D3iEYT0ejUW
z<T#oPP`@=Q&hDtn5QH6jRw2h8(72}tH0l6seM)=E_W^AmXxldg-~_<wf0pkDmHV5K
z!<h;&5g-R(BXS%7eFsh=$6+(TF0d^5sT|ZP`@2F~`Ci-BD05vi)8#%?^&%dWI3Q_s
zjx7^sy`C{6>(xxG>Pe4K#bl_)F3riK36pAm&a1CyWR5WB#+ZlXswCu0|2+9;R%D}a
z&4z4W59xuPG_iRo>@$QC$B^yF@d4QM;Vv}Qh35ThEYSU0=1reD9q{)6_mPdcf@~rw
z0B95C0&E93ifsNs`#Kp-TmDGU4n+t-9>w2;a)cc3L%Yv(02BkLkmEG?=X4-)oJvFv
z$(bgET=}5HM7lhp<HkZN0{~R}9|kxH(1C0LV!$l`cc3xQkZZtmZ4nvk8E^j#EV#B9
zSip+UQUNC-6uc2Iuml`NNDY<-)B|+ngI#u)%Y__kX8<o$8bH+*BU_*cfC^v;<ZmJr
z^%1140BOGizv~IeAXz_zJU}LJ)t`cnDTN;cR`my^Ak;$cdnVZTc+i|9V=<^W10wyA
zO$Mbh8HgQ4sCYAA2o@Ps*Q|o{HH4~SA^$$I1?>XJLC7xv{Go)j6(Akp3ecbuKYwHk
zh9(B_0H9PB2>1~~e<(oDEl8h0Hf>Nb2!}&PgV3D-D0qaJ4NmY+K2(?u3P5piB59T=
z#*KxP4LR0(AV=YS<X8uI9faUI=$~~u05iZukjh7n^2Nw8-hmtiM*+GZKLc<La%{;Z
zCa*~M#h}SaY+ecWdgP9*P@ALQUlXhdO$J|hgd*fC0ge^`Xo?zi21B!<808~yjSBKN
zT@V4l3;EBTKm$v!ZAXq8u<ISLs~+N|z6m+rodN*k>OCoP90Z#V!stGh1CWRu$A=(?
z|A~6!c=HZ&ycG&eHc;F}WYR<(?LCCnX1hxikXoCAY*z!Jb}PVG0I(>;17IRalSX@{
zL#hzKNs6TrKCYPvJpwNuJqo0A<gj#u{XJ^IuMpK^0Tuz|LjHTO7&`D8w9*sG--q}M
zMGP8=julkD4D=b$fe5+J0hk50_(MxWWx#s};8%by$m;-xfKWc*iOkemz+bCC7VPu9
z2XG(Y0h(^}<e|U>1t~zd1^6boQv_)+!t*9_d<2smFGh}!c>pQoA3;74a2IkkfWha$
zL+7A78^NXLz)RP1>KLEHe%n<2CDBT(QQ#;!Ruex}oH8Z^#|B`nRD|O3Y9F6@_Mh}@
z-Uyv#upH~i9F@VYha#QDUptz}vB4`J87=-{*cgJ%a%`&D`uU7-oS?+<ySGN*xcH>-
zcBe7P-*h!=c~+Pl5Ado%ARUTh6AISUx*(abVNE&;48@k*EDt#z2<7R>U5*ob7-Ppn
z9fR04@5^ygszxQpgHzoW&5`3FsZopMcqqH>h8z!L3ng+qJOn3$QNegbd$xYnBhQ7>
zj&!gs96uw+&_L@ar&k^mh2W8^FN%WkD4pf`w(NGwkomki2#<@z<0J5da6D0gCxzkB
zay%v!k0q}}g+-+plGcRb$>(fftKP9LZ@(y2y&Wo&<0&8=hMy%zqTXYkBWY@-Y=#_9
zSKw(8c&ZXVAC7ILSUn_YCa|R<2Idij7R$r|*yxY7<V*FUXS8i9UBNcKwtg|NeC7Q7
zU?|phm~{o9dzJ$K3y2F`k1oF0G_O59mDvG>#p~N`LaVN)LyoM94jZA>sewHec!k7l
zqa;H}A2IYMp!6xRx`){6+hd5f?oxDyh?!G2So=A{u*6+Aib*3Abji#Mq)->l%q2&4
zG0J({%pgD|{PDa3Rd1Rt{BJ0pM}E>Nywfi`3v9-;M`bmE_(kHUkMw!5hmFbvVQt+=
z{ceWQk~TvjyyqFm!@JUGV6=6u#sy5Iw!^9`C~8-g+Q9H0)7s3eYf6W?^Z;$;^f)yL
zEQ{L-Z=ZN8yr;&i*(^C;q`)sJ@xpMN8G$n*@qz$6KNP>bOIIFSq1~<76SFsZpPH!l
zM+M+lh`vX$94{_)HXZPC_Er>tU+rt11bQV1zb?nGk>+?)|7>ul0xu!1_~0Nc7{=F{
zl%Z!2`{P&nmM|zWBn)O=CG!)a)1U>#h3)1x)zb#R@PQDy3h~MTt<A=tKFhPNKOk|&
zBst2uZtE=5c&7sAK<OoCbF~mpOCghv2JtmYoWr_)lH+9xyqtWK5HtGIrh_~<J`Cp;
zk7%<gaGqx|vui|Z)JwE8sF&MRsR1_(>hY;j3tN4A^FQ_W6fOIfOf+kl735X3Zg5Y;
ztc1$scvWiD6lmxrryQ>aLazjPT?oQ8KuQ(8B**sDsBxs(JW5Yny8a(61>XOw^|aTL
z2K>(C*J&*o470YbY@nU#-=njD_zha^r{!nFnI~>HtCIrlUj@tYI<kLICR0e<lRjqF
z*PTy_VmvnRJl~S)TT5;azUp7pbnv*k)t5S<H>k+fArpI57T3iLO=rY~5x9hu4Er^*
z)by^KAxYL|WglmM=`<uxG$iZT$Eob2_@beaxQuKc{(8tpuiYYJlBRS7-(VV)!akm>
zal)juiO7>vn9U?JIgi;=cO&^nhAAPRjI=V2I*(@v!)&eFWA$MCw!NKj)MdI8s~Z;T
z(X0%`MRo6vQql;&G<pU@>SD*ViJ0v~H2xs-M%|I|jSMs_YhpIDgS1WDFWbpG^ue-y
z5ql#Og8jnrE>be-Q{bDClEg4O>&hmN0#E7Hd*!&i?(&o<ccy}LKVQUbuUkDWnqhX6
z1Jh@Nx`)#(%$~aV83u;gOJ>j1gg#5V-J?L?CR5;j4LrLd#h`@be)7i5Az;`SGiUZX
z%SjBgMlc7+qFJ%Ml!J9UX4O&aQ&J;+tQD&AD2N#8zxmqT3B;ZnLN=$Khv{v`>~G}j
z`KX$Ouf805NEe%5RI5g6OHQ6AAEnRVK&H<5uc+}oGKNiHiU`ME6g6%jBhv;zCOa)&
zJE!qNtmRzehB)=aw)A$ZUUKW0Ucc=QZ@p^uE|(N+)8%Aqatg`0w5Unh3tVj%q3chq
z)?6uy%g(NCmP#kAZv353zaisojXONEl#RDM|MGbCXU`+MG=<XIneOfrXu;cyG=->k
zVZVM8vR?jLlXH&5zc4~|zNsqCi44I<Gh2rkR4Bu_oHzILu=3yVHrfr9r0j*rh$F1a
zbVJsB0vKusy17kQF|Z{a4Q;H{`5!U)SCXa|BK4L0+S+PEJ<@G2THrd(*BFB<_5PKb
zoC~~}Pp{o$%E^8^BhHE%D~W7wFf=-LuG-#MDS27hw5$3-^&ErK%aC)S*SN|<EA+`O
zPtOSk=Q^N9=dAy1XU)EaH{%Qv^lEu*^=eZ~k+G#%+9dJ%SR!(HiHg07*Kg^rt(Hh8
z<UVvaUMVtNDZcFM<2fO7|AkiHHdT9eXL^kP(d*_LvJM;j<lzn3*G@xlNY$#Bg07o8
z(@klSl!tW<xFOT~SCJcY*NYk#l7;gYo7R(XO|Yz{bFU0_SiHR_<ldOXCu<}bd`*1z
zh1wf@i>GVQs}C$y=VNR|<jK5&%mrdeS4)e8PFeave^W~_Nly<_WY=^qZ4-IBPx$=Y
zMI1kWqI;@@T3x7HW~p<e?_?q(<5Y~#ThcY{a$WY?i-m?|k^I&#c~cGsSLUoG<L3YJ
zFKnMQ)|7}1ElfHZZb-b~R_&>GG7X#a%ES%d#~)^(ETM++jhx_XmnI}dzVf0>XTFd-
z$=hIFtCu`kLBzEuOo?kjyz#<{&j!6b$|9aBi8o&$MGL~cFT6Q|eSC0JNSS|ZQY5Ke
zFoMY@zb^>!%C7nOo#qvze>7Mkh+l@$C;Oe|+Oca!Uyn_SNU)emN``7+cJ0`AnsY~g
zzd0~A$(-=5Y`-l2TR#Op<aXOL;U?;k@z;>ck`O44zsbZ0x|c?$ir1698PA3s_RNx$
zI3yzjq1m281K%pwUttVpOqfhLgNZWpHRe1i%glwhc;T};m>WmHWP8a;hjG8_>7BL?
zE1hO<$WqZtm`*P_g$elx$y=z@?>K1L4illUAVZq2wU8Dj?P0xZ5aa`468>nRF$i`P
z#f5DuzNTk>@8Kj*77ny83Br|n$%dRL>C!0AP+XN8<whsiJWHTKQp6op_~WCkzQ*Lg
zGHMP}`dJOOXgKvke|)Uf*B@77%P`Jh@yEyUFi|?%z!~6O=Z{ac`Zh#ki<vV7p9S2X
zQ#bhIH-Y%+D$Dx~o!q5&{P9~<f&Fc48NnGQMc|q>L-(a4&xSwj7DvNqZuC}vT-)k<
zJ{DWNIYW>x`Do^rHU9V=AgQrsJXEy6^_oAfqe|+rB|;#)u)tO2kKd)V_XNv;X_7yF
zztvYSapVny+;D?rD_0E(u=yl3Y<Tk5nIFgc;}2SWmH0zxvNZGGVgC43t8X|y?L9)8
zdBe*epXpm*Z)Ep%%GtxI9@ojsi`4#8JpZzKE*o+wz18<pcB`*JJ%#LBbcvZkmSkOK
zJ|g2@cG{s|r?sni=hMEW-Sq#vhW@`guHB|9c)88mVHSF`uiF>5J<Zd&3Bw=rE&R=5
zhpsf5|HHS~ZI>febhCGHr+a6g&*-LlaUk7P`>lpeHQD$|G{cjcS9HCLLIb(+$_!=C
zl6@BHf{my_jf@hvIP2heYZ6`Ir!F4K$m&WKOGF^K{WTrD&%AbldA_dj^{otKf|rc7
z>eMNkI1kO}@a)Y&3cM9|D94TLlcl=RBipQ?HPd;AM%Id*fl#7XPc^38JZ`Kl*K4P;
zPZpQR>^sQ5CE@nQdL`eQ$|RS_Vp3XG?v$A<veKj@#@c36l8k+lRwB#U>ECA6Tm1Oi
z;)x)g<OixjdZ(&Q#XecoW;I&weDZ~E^eE{m#+Y;m3Xd2|lh`NEmdIA`@GDK)G}4%I
z2kPzIJCc1eu|$S<$d!0A2!TkORZ50oZ;uk$vK=ZVK1ZhF@W{b@RI9IU^fPVNb{S|Z
zmFX>aB;`!G%=2ek##{HvuUM(qEpRo^tx8`2l}0P@d0|U~9{qzx%$y?VLQlz^|1J51
zq;sQ8X5F-zwZ*zwGliMq^8vKZdL{e#TATH3J^S0CbmY-y?jc<!pK}^})A^%^rc26|
zZMI_rj}B!2nAPt5{CLlPRE{qy@Tb(`X*vt+xI1VcwEC(mWA)~VYj*Z)v$0(;QYl(a
zErF@XZJ3Brh}hrm#}2dhkM+>tH8CkQ8KXo;VzenIDz$Ag_P6Q|XNL0+Vfr~#sv_Ar
z7UmE+1gFb9@~@?P`)k8+vmAd$9xjathE4H4gL)j)TA|WemI~wI>{gPnENtTEf-8+C
znMux6sKfCW(08tH+f+uA$s`wr<A1ZR>ohmfBzFtPEv&1Z<}yrjaX4;eU0=1SO!EGL
z_!4m}8y*&M#o189J~kSZfeo;mzI^u5-qCx;u#aQO_sa&sPDj2x!sB$i6;{i~{fKpW
z7?9>HSJ>aArz`f+pTg;?)7qY`D<EwuH|bQtP1GIkb3{gov_r-|y3|mkmm$NP`sx(V
z4~F>c^3w;RnDOId#*fpD+r>U=Go+lTPGKKiGo+lO_^M&f6pF7HMvqtGE1gzjO3U%d
z?4w^GAB?{Y!dpA7nH}jz#<knnM?Z9=x7(ng)5<>jP7t^X0&`SU;D(U@iYmB6^X)?Z
z8qMFN`LBfh*OXsI^Orke8ELngMvv#esgGnIR*>1bDcZL9@srs5$S{6lhI4Q1u+Sjf
z5iRKo#_fm392r+RzI1r0lYO+GT+EGS%E%w^-b}*sqG01WJTJmKqt&<63jNL3DKSqL
z=CRBiayD-~(@8v6ObHuMCex|?pmS<akK2R;N;tkwURx2$+#p3O%#k;Xv)a<jXG3}O
z(J=f?@odjx(XQDr2f)!L)#oy~y5gnKp1J2+1^y1$(viYo6P;faguf><SH>BNq`xwz
z8Tm@w#J3)Qcw#ZzeR_eb1%{g(|EJy7aIV_GKKyml^Gf^!Ik8d~`D45!*QYc5&A7^|
zy7~D{YhgB%<8AG>v(43Q?8C3g-Ibb{qF7rXZ0L8&JeDiZovVtiT-KJ(KKx9HZ^`jb
zCsyhCrQvuRNnWK>{LHuVH{;KbjXysj{(>g%Li_QR>^&B^Z_gq2Rdf6A^vAyj;9to1
zt73F(4E`zw{!NK*^DXSddCez;apK=@ljGl^T|K4jgB&towSmbZX{*gCe+1(@e0I6)
zvMmVjJhZy3Wn=3~Hhxdd=9UC2TK1Fvi+h5O!3GIEFbZk89RF8=??RT}svis95|_%@
z2NTKF)oSsNa@<88t)3gE<<mc%S^UDqjo|09nS2BLP-95bvA<{ux5mmWA@ytWMYn@V
zlHJ5iCJXH8OdL69e-?&@fBtH}Ze!FgO-jdMP0Z*Ysy}33HxXxk9vw+*k20C0acwk{
zL4I8O5@R7#3sg)o$u9VAVAVzok$vgh*sy0{#ek+aqy1$hz-@sJ4)=d`H&>U+_?m_$
z_OHj#86D<|K)#0k>jBxYP9ys+^X;=_E}225Q~Q3NOg>y^v1==2d;PSlbl~QnpUH4O
zM;o!U!^-~kQ96<V@h85+shf6)uPar78z|SH%(s6as|7yxr`FOulGk*A{pC<mcBcKk
zO@2Mqla{@$>|YmKeM?qn?7#d}=dn_iplc&N6fba{L?{AAzegbEi>;eSW#zl^yUVRv
zH{JMO_Kj*&h2wjqq;M~cj@b3ZZhxNrmb|lmSit>w$>BIjv2l*$xN)!FK3O>ai@4V7
z`WKoko5JCw8o!~$H_j+=ndHb|I0^y#mw{Z^kk33I6N<(&56R}DP^N`c6%F=zbe@k*
z*;5r8gYU7gHj`hAW-xVRRB<9xNtP8)NYrZMJhbz}o0EH&hWpz}Wa&tv!~X4XA@>+s
zU~-_>&cnv%QJa;o-{a5T`WN}5IL0FnPQUf+tsx|$B*t@n=^$frD0{1nOeuMmc|s~m
zVx*hFA#|QHviFyh&q|U*Q#P454rsn&nx#!g%%0Z0JiS9>?@u6+rRrys+p>AyI8D2I
zz#cQHiJqmUMMI;f#Vl}<KGWjhP<~%m;dk~VB!2w1!rz!|J=?_IA6(|&rYfstU8hU@
zJLud(HkZy+-VZ1a;2X+jx8>^!VDT31rZYyn3Igc9FL9N|OSYYyd))Z;DfVs^8C<57
z6!m3ykeAA|c717dD1M;Zv6X%BJ1l1~JH*6!#7qlUU>7WL_r7d8QS59gruQjZU^LwO
zf^MB)!vs4g_Q7|;o?4r-r&4Q}f6w?lW3n;2gJU;Mi?@lv2qmrna#@z{pkP-Pkp5Tt
zGF?4={%7?M;1Fpmi<!*#EURLJyo0@04>v!Ryn0(U-2;VkA_d2o<mnap?7cJFqe;{o
zYB}c-#(65Z{z|T2IOiV0i6c2TK0So<3gsjuWn*N3znt?^a55$58_xMeaNd!el&spQ
zv~!}T7j-=oj+_es8{1S0E|9%f0B<xv%r|^;12xONo86=*7+7xa<<Wf&^;0ijuE0c@
zo8{6IBFeHvVEG@O*CodVU0YGP+&;lWa%hqp5s{Eh{)3>ROpsM_!4X_gzY%^yB|e>u
zce4nl%f6~!8|wB+0zJhlxDfW<Y%+IKcz=+zfg~x|6m6a$9U%+g!UDNaptzl2#GPQO
zpkf4-k+b(kUUdSd#w7zL%;w-=3oTNx_Xg4;1uYr?m=@V%dwZbogvH+5O;26Dw`dAZ
z$=-{)0#e~rD)N%`GA-<NNjQ5?E-*u$hh<g4MX>jRS5!)C2lCb2L3hY3aQ#T>kxCB4
zrM-GXxhOaHsc5{P$3i>PZ>A_lyYz3RY9$xV-UH{F)JqkdhV6FIaOk<#3*=&AM)17K
zee@6^9^n{wn(cn@)Zh*<f>Qq5TM^AGI4#?KyTeLTv26D*eY##7K~Hz2bF<VA<R9ab
zZ$de06{9q{xGw^_ufsyytKvFzKIr;K@zuUwgKAI0jb`^Hn&8jD+IH{#FAmZS+ud^6
zso-?rzV0s+oL<Qpt~==-gzf%`HVib7MO#9s4Gn+WFr_!Xx<5!qp}hut*lWPkvUmQj
z9V%eEYn7Z45<S7&ef)2in&MKBn{)z=lI|nR28+*HVY=e2%Ll^{it`x@zE;?|cvw8T
z_gx&*rfRHbyZ1NnjrBb--d#?^krK-<{F@T#*ytvGe(Y&6+r6dN=hRv-X7gEIumzN}
z-NpY?mcVuw@v22m@tP{;?*`Zv92BhOt!t{_l%n9wZ1)<8$C#`FDeRmiJlnnUOJ|nT
zYrC2HY`giA6>fjI0iMU0a&vBF6y<4VyK!!%rxI^0Gt;@zoLA`?fxp>g_URPuHFL9~
zDbqE!d(jmqnB+<^XffRDq1(9=;H+O^-(vP~iT0b%@%$T09Ui4-zSgT+RAG*r!!K<~
z+6?_=l$?{^7VQJWQZGA=k|x@&SqbViH_u6K9<x1NB9NDOOcLI+;hmsOqYbgJ-BT_*
z`I<$}{su`p=VbWWtlGF0gC(?Zppr{uyBFjQme^@_kdRI9iCPdG-m4&)`U%FET0OgG
z8dlE^!ONFrL${o*=fODxXoBsw1abp(b9iwglQ&r8F;*n!lI(-U{7%oYq9DA3bGj?I
z!CqrUIY|&wMhS$b)+EV?1oZP<+MG!Du_8K9j1ni?t?b3&aq8@7?QHjvqNdh(?QE{M
z)&{mau&34_YNeb%%XSO1mV&0dDQ$?78_IS|=zRbgyX`sVS3<TeW7>&?3}&v7(d2Xc
zszWCf9Nf{cUE6yG=y0}cYmaSR+cbi0Vqu=`+DH{9vt66$U`nPErGO>LB5^Z~u&%;z
zyu+lPE!YfkZqm+XyX?Jlgdn))so*Np1BkX{X)<H)3GgnMeZadWXs6tED7yJmTGt5h
z>yrg=tW|SaYhgBRhwl}a_2%NNtx!7@D>*nEv*}1}QZMN#{p_jOEWS1!c|FZe<7>dK
zq)7G&99pxs{m?7_3~PTfd4cO&VXB2yNzTD~3)fm5)=nF&O)=UWw-hCOzS7I59Mg+W
zNxg>aB-Ik%YCnT^iPtHJAKz1cMs2os`$pE)(l;8FIM+zs07rY)<$2ZF2vxIP)=sBn
z+_)>YrXh{DmwxA2I|FvauT5h})An!=b9*|lJh@MP+a78+{ymjK9QX|PGoJBayVSk$
z2ZrM<!Wsw*Als$<d-w{R61Gbr5s&)X`uTW)lkE!WVg6k1{U+mmZs^z6OO8H6DMyiM
zn2YTa95ssVk}A1pM=Q8dy`ADt-K1l?`YE|FPiK-YM5$xhE=GxWK%$5D?gQQ$Gwc>!
zg4(UDtE1^Se}ujJkhH!LY9Gbk{X@x(6ZF!F>+a7zdhh<C<i-nn1?qo#^xpkJi3<h2
z0`&$^aS=qq-A<vcy{qCCN`2~wyI0l2Zo%aw)O@n(7<^G=?|xOI&P@2F&8oohg7g=B
ztLW0uzNTx{Y3t4XW-@P>HR`laUhg;4&3!DR(WXH;d2VM6Gl87mVSy9o?>k14$A{sA
z-%b@XiRA3GFdIqL&awSfuw(|~TvB>CocQhv0?wFSRw!GzD>haY#0^f+zgMCZdr#(_
zh4Sl8&&k#*muITgWA4zR(AdO~#(AN5BdOo@8k}mP%VU`oGP!($cuEBKEZI>$Lh)R~
z7ICpO_XXkV(=*Ph;Kp2adOl-~fKP9?%NH|K30qOZ*vNk>7BbJ1DZAG))9Sw1J)B{t
z*GcyFcMBdI#!ahT8LxlOZIxf6tMaz*?W9O<28nfshmV0-(f79KTDEwe)%V)a8`<HU
zO0s{bIK>(U7QN^U4Vxmz%lnvaWP2YS>a~9;?+gdiwmG$t72-&11gH8s8~R?n+IlV9
zyJ@KJPeZ+`hHeR!b5qGz&S+*jdFa$J%ZcWI@wwbEZcM+o7|+|H_(U(C&4KZW65;JB
zygec~TQE0uOLoE1O)HSgPpX!AbjtdvnP4sjc4eFG{alO)4DJ*~a?i{0L$dck!ho4&
zD?OTJ-px!nH>+d`I_2kmih;#u<Fat>U+@LPquCG2q~#*7a*;kUM9HO+#|QQ@*U9dK
zNsNnJIyf+Lwz%3)kNthB8SiS5v|6O(=D<QDWo0m8l^jbnhhlxkFL>fc_gLcoQ^UA4
zGW(DoK0vQKGzdOGe{jeMpQQhDD4Ll^JP%XKGl$3apCUxWW{3z2(9ayUGU?>W;n8qx
z8FgeLGmVrUQ5s(q&tNo(UgE+)O`=42doFO@fLcPig<)K#oXb#f3zXda0PZEydL)op
zM1DA;5ibgcvxiURRLIV)90>1imD<p(;{3jEyVT4;?qwyH6~?_nS}McDS~;FfeydE5
zqaX3Zuq6cR>F*J0y?z-1icYPAx15{SSR2Si1>x9W{9FM1G%%|wGUQcY<ei3l1aSQP
zgYe!L5YD|uHdZZUUMF{})cvy++!7@R-wTeK7>-OjIv9d@?NPIMGJIAi?;d@Q$syun
z(IHEBIH{_wdQI`l!S0ZZ)fCIQWn|>BA(G_=&2il{I4I<j{9{^W9#|tx|8h)k1w-*<
zf2`+g_^lD#3Uc;XBAnp=JeD|zeje5jqrYnCwGN#{F6UPDTrki<4L;y)VI17aKO4fW
zR&Xx|a4YI_PA&s(-BuKBPA<*<G(VJkxi}xRRAk3w!iTqPCAX%;3A|)|^^43J@?*7n
zx;>1`*R4hRtte})w7Fc)tu-7#%?DW5y}qe~P5U~OE70Zlhd(fyN~tx%9~i9b4m6LC
z+UD#vCzvY?;?@O#_O#=pnP<uV<I~}5_ub<L@K?kMg}OjDz|Et0LRNuU!L1MEHZ(Su
z)xZRnG0$Y~AHfxcb6JEvp%{}&mjgLhY;5&ZawV`v=?A!P=XC{%Ugb&pBlJG2cV(bP
ztrhX*c_n(`d=&#lVcZfqbkzqZ!oi1MorstOH(237XIZwdIrNhbd;RXyMF(;>!fB3%
zCDwMry}qu%X;AO}`)f@<+S4Q7ybE_NmbWJN+t_nDUia2quYp&b7c0dnBKC%b{Q6c(
z0IYr$K|DQJUuSptedPp&WYXIS5!ZkJ(n*PbUKY@8_e`nVOzG0&{V4Glvg7S~&^@^(
ziGHlG8`KqG^2vi>G1wHwl?HGd<=i#}w^hkG!nrLG+~!DbQz%!qOH-lS9lIxLuXdk$
ze{{Ku#DsF&cNqe>H^Mklt|!L6HiH?oRfqnkRYC*_SJI`zxPqG-%K^i-S{4jRt4)OW
z*4kuve^FZn?`7{SV>INqcjDw)dzBCTEHb|c{-dY?Gt-eAZZuA^opVWI9ZbyRy}B1f
zooytj{uL&YtgY98bY*>lW(QHxZ8S6}fZM^V=pP@Drd^TLOK<gspP|y+3G?pgs8#TT
z;4b8NW;=3N;h!pNB7hanV+{Q7S3}E4#=9Te;jgP8_=PK|3rZ0D5hy$edBI%~JdO${
z@B`i*h(r``YDR7pmx_^Cz*a<m2y$#Y4L{ET-ja;yFNKaRx9I<HK;MHrg}f3;DBhfi
zyab$%q!im7Qshk&+ftDa#hZRbz7+4UBKS>Es2F}dLyoc&^tUtQ*l0ol6mKd<@E07=
z7oi}Ecg{e;Lir37B9u!}D8&`^C``cLBRRz@XCMW|yOl@@c$A|o5rtDi=|;F5qxd9>
zq<E(psVLq(1VssW5mE#0d8kjQKirZs>gK=ym~o4eMv?g+#JH)w)ua?~v`;j72e8Ih
zL)t!w84%;AbpyvtUIao^m_8!vA%u=;5Gq#{BC&^$o2-{_`W52wVT8p$HbBP!d&WkA
zv**<-_DvH)%~RGRcaK1~KEBtRiTT3_d!RlDeyBib32kBD(<}D)7DE52*?{_agt+zb
ztp-(39}(?Wgap3YBGlg_%q`d$Vxsy4zJFTJ$e|Ig+<)-7p|VPH|HBAzXk2I<k)P67
z!s6u#wD~(|MSTi{z(CBj6Ns@`HzFxCzmKn~luSGoVNsZs1Kc32F49PN`p|enOrrxa
zZ**)z-q8F$z8eck_Nicd#huN_2bvddi5N)5zx})4K(a^tVGCl;ulOh5Lo3w`5A9hY
zoDn1N6>dSk;D*RV)gY=*;G?Y&_ym2TL>XebG6X)aK1L>FG~rK0x<y4rk#A2yY^c>l
zavEYII+|DjYcv`%=QPBIR)~!~M?qzubHsGCAZ8x4a%5UxZ1nKG6;Fy!)7a1nvC;B9
z<?MZW#jfy(*?grhHhTDO4I?!m7N|D}vGFtf7W(w*5fk~s?|tto`(i`jW86c@wbK#e
zVEBGT9-P)lXaZt^iMmFdXJ{A4#gVgTXcs5YE@p<RKx<zsgt3l9AFGfk<NLlY?%_)l
zkvnH-7Z0Fa%pAynY78Xk6oK51<s;Giw!SXz;cMwfLO+VIgj)vEu4TTg`M<=(5j9A3
z+tSyy0-wn9Cb51LA&yKOG>FXqNE1L4ATJt2<*Bt%uB}m#btgXxX2?e$tH>7s*FRSE
mdwh#VHqr0~GLl!3=K$vN@=%735r_@i-+}?)kUx{pE&V@*W6wnZ

delta 11601
zcma)id0bP+_W0Zo1VVriAV3lzge@BoBjScOTI+(grfx;AORD0o#knZB5mc%OF46HR
zAZpw|(OM|9^;KIhs1<#*4_sOcD0cb2uFu-{fLgWYd**_+?|pxN{O;#-?#wxJ&Y3f3
z&aC$~J3aC@csPsu79!{Vhsb%X1UV0?(X+>S=qAvBeq0JL5I}>R6*OJCD>^*DSpn>o
zG5{Mu<F4pLhqEGA5O$Wkkh2^l%R$3|@c`M+l=hS#1lmC}zzhITbMVA}mLJj~=b^L6
z=^6=;0$>NoMb5)c0N_974UqL*rl-D}U?#1MR(v3PSG2jdnd$W0?Y&BQ86g{m=6qyp
zS=a+TdE)d|Ic!3SbKoB2JbM~B|9TotaHH9;jhu{Zflad~O_>DgJ%CPRV{RgwND5#D
z$OYH~a01!n-k^0UnwaxM&<;fi0gjSDPK1#2y-Ub>{sBNa05s?v`0N}s@`EwRDLLPc
zkQ+>s>qv@EOd_b3+X0*aE`U0K+sGD#AZ-Hp2^u2<lcDP75>nuk<hTrNYAy#Bu;OwU
zq-KN^+aLusK`w-}U};b_!0mjn%i(srk#oaj;I#scsvCoB!D0Y4Knma>6a5k7(*QDl
z27dQbkU_FO2zloNE%#SJ$M}K^kZQa@DF`{qKuNNr#G7KydC>Ui4?)BW*<?^E1B-)?
zAyl{n(z8IPrrv}6O@t~F0Dm9ZLZC$<SqKF}Q{7-n2vi?31E3jbP)VR1*%Tlbavnem
zGQp5OMCcb4==lcnCy*^ZqyU5?0MQ`yAP5Q`B4)D-`~&U(*bEB5KMFIE`l?>CLJs2P
z&7}Ykh?^kYlnqb-unhp>Vbf`lvLa_`GjfiC;M*hx$N>B-q`}C!vz;vUjq+Rwn#zgO
zH`!5*JQ3(^=KK6M+KSLP@P&66LID!sXaazyXvaVb&4yx>kH9q=z}wvr0l*9R6+6(f
zKnKK3HPlz5M$TG@m)dsZtb>72cMmz=)gb2)7#v5=Bj<@i0EnZi@yIDZ)rg#Li2+Q&
zG!GO%AU0_VwE5FLP@5HCBmh_t3jG~AlAM;t_<)N;^8w1qZD}Ow<5%E#7piy<0YFpV
zTL-WWv^@lq8X>&FM4u+0xj=-cVZoqb=;X$##ZX=Vy@ZhGbbzVQ969iYHUs|y00=an
zPQbqdfKGw7+rqq=2{n+m*gzJ7)TbNZA$rZ`^9V9L6o75bYakCoEf7am5#*t(eZasE
z2O{T%Fy#E`CII;3BN^a2NWGDh2cs{68!jG0&Ia(?MQ}y)vD(-D4+WAe|JQeGyd*(t
z9IV2DN-QUVnnZO-C=Lz63aJPs;r0IhvmM{-+0{dJmH|o}My6{Fj&LZ_S>*8}h!QJ(
z^O4aa567xdtWjch*{)9}N8l(mj@-X15=SJZMzpz%sdCe2i*go)D{-`MH3I1{9Gbi_
zuf`48<jr|@6dZ=Nxr@A&I0nk?$Ww`9dl(Z&K^<{y-up@%pAqvvN}Q14v2eN)>oTGf
zl~~Vi>QG_>TOd(lV<<L(Q3{;cmZe|!#Am*=-43=z;AAC+2AZ#&Uwcv%ij&q~6)A9E
zo#oZmtTxJ!`KmSq_m9G<k$6A^9;m{D!m&k(`-R~YvLre@daxliFB}iKWCL6E&P}Ti
zi88d)pduws1L<%)lpK$Kj~Pa0Xw|ZjO8lY<kBG!CsPXU!Y$b)-fgvveTLxla!a!)L
zOdNz&a;zY?v<qKQv}$x4ck?xMOM&Hc*C$89u%g|p+X%WxsqknZ&UHVz`g-H+HhTuM
z7YYmCY_kcix@!lFtcwXBs?ceHeGKplnXyL6JRyJF(3^qM=ftWWVoN}eA&T1TG4n)B
zdhLMtPZ(w#@zf1x#*@*yH0EVepo?K%At!Wk>Iu8eAV4MLc)~_aZ=NmqR~Vi^zSpVz
zY&TpRZN?c-imQY1t0Yh#<^O6A8<h#cirQiN{S2cZt%d@4&o+*NcZJcwC~8}bbD1bb
zyH&SwOPi+128Q>T)@o+m<J-+ehiNM(C2B!nRpLH)`zKl9Jt0ZUPE+Cx6@E>Pr$*o@
zk$7?xo)m;9hT-WYy3&NQ`2DfvaR*`!YKi7hbP#5VzDKbV&nR*=9`<$hRuqJ1K5Lx>
zdL;zUR^nNtDaqtz2Y0IQ>%^U;2$>@o#@CqCVGYORcqZQ*4kd=<0nAJ?Cpl&Yw4kt{
z&D^Sa-T)Xr5F($!fS3!kRvUl5foI*nK;}b}<OJ)!ud__#T`Elb>bk3`N{FXSK<ubL
zU#-UTSoilzJYR(ukS~+tMtt3Pga^lm<AsGoTWu=5$fuAg8JZDoqMbp#+^We4dT7v&
z%7`|$1oYs+qTZgOWsk`ib1bu%EHmo{^hC@Os7#5MW<&=<L$AA(co`6SCBW-K5H1H&
zhG>BjzmX9wAx-AtdfL)A|D&bA`+r(bdo8u^&rDWryk#E4tf(#S=U}{gbYc?Ne|?~W
zpPXnOv&XDW4R(C4P-2c8>YvGE6VKEO%*xu!snLx0DxT+?GXk!W`vX3c=QJKUrELkI
zPUsCP^4Y*Ky()8S;|AFoadsqLO|}mHDQb=BT@OR5tkuf?o^{J*NEu^D)3Lv2uuqb<
z42r^Q$(|u^gs$`5FEXaa77gX=P5sl^-)F_TU{YF7lxgWq9?48w%{Xd1(!OPw)#S=B
zE0bUA{Q_Z_4YlP~Zzgc#+sP-~rUwbS!C~G_>M)#B`|fZxjqvLuCNrCA6JBf;F$F|4
z>Im~@?eS3;8EDv|F<H!J(mLjlYzyzyD`W>F4@4y^0wZuC**f+b@J&unWtc6s#p8y9
zr}WwbO1!o9#`tJYrigUCx`ipIT|Y5~VT#G&Nz*{x<4G1~TW!*01H)`5)276R&8OY&
zy;0vPQ{f%;Ji8{{poZ*D@|P(C!LU!KOzCx&lNhEBWp<H;QxkeAyKDDOt)<qdXGHmj
zm1#<&A!4Mr`I`O7<U(;6*_m;P8A&Ej`%<}*kFK7-Y;o98T|$0NjTUJw*{gl{Xnp=F
zGGY3^L=7L27ujSchj8pwQNs>0Y(`%|vSuX3ztZq&g5^@fjzsO4R(qROFZu4IUcdVR
zZ~e^bS1Q@KTbFH*&CVv5W<-y*&vmz6g|0unKK5o#VwSz8Nh%$^{^HNPy+g*^8V>p_
zQeV91^PBgwAAF9N#1=?vrg(aerUh>=j4ePl^ZWD}y=d_lvDv3d(#)Znw;C%GUC5wt
zX0{A8XwW=Y4sY(`ZRNk@ZL}M9km8w9k=t3fsYBLu8W?K&d3cOo)34c%1~r_~$+w&2
zJ4oZqDE$t8Lrs;T4(ayf%ypmVtBr~sdijpn>@&QXx7U=Lvh8orOSGbfGekB^0gX<W
zrFAr%kt|j>mQ+2enr?9U8nVyy8dq_2jXuro<1^ae;(!{Hz4CASst?Y;muQfnWu*yK
z>rKr$#^zjUqr~@uMCA4r75Wwy?Ch+ml1N79KK3-;%rV`}y%FH=GdlCo$1MS^nzpPv
z_BgrouDL_jZeyQ5?vQ=qGAKfKu3Hdt*L=rrnh`~LSa;tJnO?q=bj*5F)Uce)pS{$y
zl0?KRWYu>L$WXh*&u?^Y$5=isRx*#TPRcq{)4@0Uxce`AWU0IyXUic^XZK^y5Q|+a
z%@I0f<zKx_&AG&G4^i2x@2qSU`FW21<kD4~G-r%whD5Mhx5`xOwC`ggRf!tL|BN)R
zO{vRTakap(O2zNG#hbF{fGe|CkeBBC_}U!D*pa4`IfiD&j)oXg&UjS$=v_?xj@8BD
z`frksF;JFV%>+b^4sb}5Q&me|m+8!Ba>x1^%q#Sgr)!9~=Cmng1&Ck#c+KDXFCK0Y
zPmm;;&yX#1BmB<1HI)7R$o9};c|xj+)XW{q*vZdxLw)VlKfKelX2iD!i;@J+Gy2=#
zX{s5SH{xzWsxsMPAnEfo{p>X(-)YJn@y(9lgj7TFSF%I0q^|;1n0VaxNxp~LW&CaA
zwj>9OlkPD|!Jb7i8RCQFz`U13_xLQ5Y;{V81w*ra1_hrf)!$?c<~fAPR5EjjI&(Sm
z7Aelmg|~SA%Q~1Fhr(og-9?9SpS$)uwstF>W;<jVXe~^q*ImMd{1>u%zFNQeh-D8<
zgu;RhdAim@UYN88_pU*J2g4-%(R^bF>?jHgS~Yxi&-~uQNuJK{=XgB?@6}5-XGcp{
zM*D=}eYw#dbb?)N2{uT!a7SR9QqmG&O#5wK^)X6sh{cvzPCH+YOIrfuxC~nca|VkX
z@5h5hcC?u@z`ItC%Uc5KW3a`{859kWdU4u%IX(cyYwIlU*Wcl;zaz&7sRG9#Y#GWK
z#ztaS-k^ha<Wv8P!{V$T!Hw7@$A?=2E+=4%A7=>BrJcy!nJ33bfTYEiQBcub_i{Nt
zN|hYLmPmmxbFRBmj*nAXg<u&ljg{ldmH@rPxq2{QLkyB#Toq)%<`dAcA!%P^UPzGR
zlPv*iTqRADX8t`~j!(4&MBvkYL#3G=zH<E5vjw&z>shBX9Lw<jmMmVVm5=lJ&FZsi
z;B|XT!1b(_0E2cMIk@mTGl{HNbOT1pON(6&=+}vD8s7E1Z)rFE|E{6`ua0Z8={7EI
zwYHmu-h9^WOIx4gG;YH2+k7*Buh6M0is63=DD)_CW{7_4UEJy3+22Vw)k}lvraEv0
zY^uq&B{57jsa~S%T@-3a$CAnFo+bMos0%it1}!p5JQA$~lB}t8g`co=5Tmc%x>O<p
z$vw+;@cwZ5$IRl|f;V<CfGAds92u8huG6L;kBgnyowXxWfj7V&r6Rt~&OXi7jTqKy
z1<jd<U!~EtrZO1H^x6r=^n0g_HKqFa3GCA)MKVVPDO(ZYsI61;Eg8(@B3VLu^V&+8
z$s#LCtu)p&nNnr!Q?^K!T`6z1>MenMP2m`jP7MUrAYG|x)v!+&v|5dp2UkATjTkOH
z#~4!|&_WPrpN=n*t*;0yO5HxpnEn9jy>nm~`*d`X3|A=CI1hwCq}3`7ImduVqD5YF
zCoxrCBwJOXRpUA`4o5gri)35{tHf{bIDG9NLOrHO7yevPo4qKNeQGL7HBQ%@f+`Kb
zyX|P><w_%^$E)$?;%Ti`K|-{D8dRgk)rN`P+ZuF7MzryO^U*B<x)Cq5TH9oR70V2k
z2fkHInN0G%ZQj9`_Cd3?FZ0!)fO_p^U;#%Or^{$v0dw8;5G2o{xF|-2-xc;%=*fT3
zNE23tyw_9m;Lj!RlP7pM6H110p}`kgtqpbTKa1?hyVcw#t5dVTe?S&-vC(HQpEx>6
zQmSsXo$Pm_AN$MDHrFSodbYqy{8ttJfSlnXhwOp1%EoriqUvFi^B62*R3i4D9SMW2
zUJ2f@I4>@}dfsr+@woW((-rZpGWMUl+FkQpztC9o${qk4p%=1iVdDOG_5m+NI6kk$
z=g7X5kqX#pA2ev`DXUDQv#b;bTf=Vhx0T^zJ`_A=G|5a#rc4`wKZ0Ozf7PlnnoK68
zC<0$#-FGQA#-#L!z_3Gaqu4x?QXGNnS@-9y8k5p17&j2psv+T?H(mAB?C)}eI=CLT
z=ocGW4vZ*&k^SAD<ge-v+o$(dMS34?v%(Vm<e#K{Rk;4Yj(1ImVGuPgZJZ9_|I;3N
zkYk_R?K#Lr=0q`nCBt$e9rcFv(^cv0lM9CQOEmq^Fnv5t&lyIHQsYZ^tj6@_Q{&ht
z*8x}H%OQBf9c#P&_)Be2>nH8@HXG3ISlK7n1pbeKAA%0}KNj#SRQ>_Q8w9+O;`b>2
zk$_)SQUMtyd~gSrpEj#$#3=sDx+wPX2GW(29)B%q)L8b{Zw;fy%yS(`7#tRYn_?uL
z3jDXDFCKrXVpP$PA{YB)Gs(<NVAhiD@XjOe=0?MY_4C|Fzi}-AMONrdz7`^!h*q=A
za58K4DCQG#eD!!sSg}l}4FvyJBk0O!F&KeA)u)%A)Ejnp7ne5Lw%HsXi~Y`t_LoNB
zzmu3X=BVbvMXmNyI&7LwgyWXNX+DLbl4&pk;FOf%?;v>1g0P-x?79ly05&^P8Em4<
z3q$Zt^2?e;Lyq((#xyx!jnDEeryieP%61){>u!cYqr|t`Z1tC_4D90@+h0}V&&Zgy
zI_7h-Vr{TwW1Fp^sj8KI%#)pKW8-oXY{76C*eCPOQD3@LnNYE+)y_VCM~!bQ@fWAp
z>G_orcq6$D;;n>P7u;tA6yG0CRO@DWZIR>lAlyds*Tv~F4RVbN-%;bcd^7uaRMTm2
z7OeYiHYM%=%X>=MM=bedoq@5DhwIGgUn=lDKC4uA!xn<K99>`Bysc#|n^a!CqdD1%
zR(-Gkv|G?Iz#v%(8ic%3iN8|euL0$E=|_S;#6>dpQ8K~nwc^i}_#0BPepa}Gw_lr5
zIP>Z@@MQ56zMg&TYnY*9fAk{(c~&Na*z)p4|NNa?&oeO=;?A=(!Nl%(8Aibw$NIqk
zF-Difrneu9jT`Zgst?#Vf=F8aYC1ylPr&`c><uw+*RW~B0w$dNxIx3bL8KeMhE?;y
zMrBxgQ&o|SudZ)ofBObTOS`!&n6GAk`;urk#mcT_zTH4(k;!BdHRT5jnYzg`R#7H9
z5E#Es2Oj+)exB<UYVXQ+EBo7VJCXtM`^t8gZsJkCwnzglrd;aGxBo%b3w-SNXNy*o
z)s2VQAB#xKrXWLgOTgCk^A6p3uEklT5u~@R2kE(PxUPk{%R3n2*S|o){DZ_59AK7^
ziv@)q-!^<rUU_qH(056aV~LVN<8<dK<AK0~vIzV=+5e`_E8Aq*9swuRYj1812sTRG
zCM7Z$PC#`17D(o7&S!ogUvD0z{86apT?oIpMDMtX5p=>j1JmZO?~@m|4DkQyGM|uM
zUYQVwyV+&6q;Sh*ri|R#k^-kddEw|3MSP-n{G5oUG`d#6{QPkBR+$}1bXeYIR^oqx
zZj%!&zYKezC#_b#u3XN3H;imAjPtg`LAZ|nE{c3m80WLJsJ}5SjQtLi?+RaL?vvE5
zanhCG5jyo4*@v^pf~{#`eYcyp^=-Ooni_9MOnJ)zo?fT150l8bt=gAkTC;fGI5B>I
z-*Pjlj+shV{D+#DiE(q?<e6!~tycD7Kv`hJS;%~QwM=eIvo<uc4<n1^t(xK*)_s1f
zyq!)L#85Ov^y?$Cp(srBYd6_nlqA`BcGfB5+vnJS?;tmd;w3rH(DlTlIDS%iQA`;A
zLAQ4o`{-wwN1ppqg?|Q5cAsxNUFd2or1vNe2<+~6>6QsLO0Z*MAAK$CrJv0{LHGeN
zP=qu)R1=^ty5FZ5Xf!C#v)!lQ>ZXF%?#`kcm@xb=75>GfoKcp~cGvBRA<=))D)GZ`
z{F@5@s>a<BxGNHOM&W<+_E7vd3_l|A+oFO*N{&%+u;jZV@Y6{AdlY^`GPbFg;D0^8
zY3rE;l$-~2U#mvNiP`Se@J4;beEpRU)TH!l@{pcpsC8L%t3b``<$FV5qRdT7>1h#V
zStzjliDy3P*cRU(l+FM?HP<JS^XxM;P*CW9hw*C?vE37&sa-zE<4Q6;a;i8lw%bMq
zZ;$W-$<ZK5W^Io#50eg+1#v#XoHtNBPBY>=V3wdFg~~|S?*5;-Af<-%gOt>4S19zf
z$d~Ol&>~-2q=S?eIU;+#{p>izcJHP~q~0qp6(?o8!)}6<AC*#Ex89(Iz0LPyy8{Jg
zz<F59RGdHC?YE{vTGNlO;*NL%GS~err3a`v8QbmAt2dYnj2p`H8qW~}9YQd`+37sn
z<$hjqJ1C=+UwZ{8uHxiu*T37XG#A8nJ>NntA1WNFu1w%xU7iN_DnjW`iD~yBgIdIB
zhEn{j^SZu<m8n<L*U)dE((xbVZO?iEsy_?YiCwTg;m`7yV6Esr|LGBmuwA!qxKvy)
zxTEWaiVIP5in}hlkh5L)X^i&tJ@rtpVf^srX_38Vef)=6<9njT!FGLQM`682UFb0i
z^%k;S@Bd*C)X8?er{+Q-(-VtbFqJ;*im=3V<RKkR1EH&G)c|pW73K`ynlr#Nk_-1A
z32~|7lrU#^9liQutL9=I+jXp-zgQ=A2qD`Ar^O!X!H@qAR3X&6;Ar~n>XSNw?Sk#)
z^SA(GNCPj}LW90*`=82GY}Ynkv(P2Zt7QJ%0HAN?t$FmopyJeQ*CvU#<HbcArLZHB
z@N8H9E!QHK?;bOC;~w*ME8NC%5k4oGQgdzvbgWU*#CGN6R`{s#x?-~wb|~i66+V%;
zWxLt`j_80n7;omL(%p^ZHrur<x3bSpv)C;<WWL1nZ?4Su-fHF#OG-thX5(~zWp(Oy
z=rW_^l0(`qDmSxTuitPPC5^Npv*702!+Wepz%=jsqJaA%Nx)d)Jq_MT@hmkxlI@yu
z!^KxGbb09|_BBq1uUS-+xMlzhIu#eC=0MBR)je3WfGz9^V2~TxEB{h&oH!s*wAu_|
z6vSyW6nMc(J9I@u9S;r}L^EvH;9xF7H=P%!FslcMyhp-(rgaPu^ZR^8!pD})oXb<i
z#rTdCaj6hSMhQe{l1Y*enV#vWE5U1|hz=X0#Km^S_NH+$@fjS{)Sp&W&vrqC(yD}>
zk?;*{my#OlOLIbS#;UnEwkzbiO^6AyboVPvJ2|&|74tvDLIyB*$zt+}W9QM+DlQ(J
z*m<yLoF=fH`+IEaERPjz5)1LxxtD6!v7P(qSkh66J&;P$MB*kIO`SU;@Me=XLogO%
z+7zF`c5dyRDg?p8=YpF}j~qafrZKTS4esojQ`C5&k!pa`DC<u9%yqGvDqc$t{-vK|
zNt+!Iw~=oVPn3$T4}wMsQ=0#fK;wtrZ0GzxW+HIhGwMv*X96EAYr?b-b3WVo+8-e<
za7x(DsS@$<FRY)8f>vS&+c~j^`4gqzTa4eOL0=Ht-hf#-ronEuld^DnwsW+aGeD-d
z1yCs+?w!NcobmY(>l{L<CblyT&a;r|<?YW~;|706r{6X!>uzs6#UE!oQ^|*W!yKU3
zq~;O@y|7BKopHT-<JDZ!^J%10=ycE<t;X4cUV)be0M3Ch><sITRiWuODfN%W2Wkg@
z2e)WY^V!Ce@ac=~lvisrlYeZrs<2Uz_TgK4JS<Ed@mlsxbDt^9U(B&u_R1T5rg(Uc
zWMbo4;@GESlF5mE7C6te?Hk6JiL&G+rZ2IVSeSK$l#KL}^_c>n6&I4bK*=M4rB<L%
zEKTr|g>W&+`Z|(d8U++r>2jtY2`Ec|P4j@V(c+Xyu0PpWHdK{bzf)W&&7CQ%7Cwnq
z6=(d+<@16y5<UR6mMvulkkR|MG6PA={`t%xGO&CDGr0DH@*xZ}q_+EjmxnDToEu!T
zHc4OSu`ckUyW)Pp{nRKfjn6{&0|V|e;(&1l;kUD-Q)S{JtE6O**kBFkjNWcKgWS#%
z&$b5K9@LQ)!O0|t28q+H;dmW+`EXcxiV`n)#?+DJcVdw5p+USW0!+?393NFAj<QB_
zvM;ir!^P{Zx3l~j2L*gT$hUIP&M+l6fLuHr!wezc9@a4ni0p__yb!7+FC2*w4^%*@
z{YY?#1@;#^9DUr32rRiHisA+-@sDKdk>tKZi`RNL$^4p_2yWQc73f@`-#G^6)NQLG
zxEJ8!+`B0d%A}<t-%^o2B~;B>$@fPNFrShwM^l-f$wx=~MGY5M1?sWfzl!mz5=pB>
zYHoxtWLO!DI5qboksV9$Pn!GGgAOgR*Mx9xBzftWo_UG9ajZWxiX1;?gl`@#$6}b#
zq)VU}kB{_95jr^!Iyr)n;~`LX^0<|Rm&B8RiU`;!CsvG^IaoYd6r18JE(nfIkqB=e
zabd77#k(aSm>Vme%=}m3Tz3bU5XQX{&b_SU#;dq-YA!v9n?RyV;!0!7V)kpxVa1_l
z$~hakUJ)y{DPT|hsA2+~0Mje`!8@-qKJ3-P{AZsZDQ_@0QO&&?&P^icE5pU`fo%x+
zqB3pnWY|K6V{IrFzTj*1`c(udI;{@gN^bDQnqY292!?yQVL^B({oXxsy||Qtg^A{;
zu7|g74uN-xJc^qNDep3LQ#@(T5qKXAir`)&xhLks`LN@J)@z!Io37?q;(gM@%pm<w
z4uE)AcG4^!0^fwm;ghex*V6|lV?t-`bx~Ej^s$9&2Y5m@A+}J-%_fGbffBnR_LOd-
zT*<vomR7~9dp^WM`;>S;+%JXUA#xnfSM$3fxw+&_RSKgeUst6}r(ad|gXw<;`go_#
zqEvF3JqO<2Z2)fz=N8EE&`@r^ikle3&8^Emy9&5<yHJcdttjhSei%2gFdwv(WyNK}
zSEDR7w_vLac*%-WuR}cFIHjEg@w`a40qJ+4MH{3|rAltG;V^1C%(}aURS1k^X9kCH
zOLX~O@cTex5w%A6eSmd8fadYhyIsBJD7a-I+|nS>KIZfYW+*8>J&Bo1I!+tFUy`>}
zjwQOj9^Qqc7i~1FxaGmz8yB03t6@@`S7tJMMRG81U)35mC9grrw^Z6&;Yqh5c#ZZ}
zWYfoX)Q6ox=xU+lRv24+)EtJhgubum9$vRG#kVw7f1F;m^e!CK)D0rOboExfaN>xA
zqHu1yl5?<pG#Ia~*h1fXHw*bI@ZP<zC4il|OjwSfxl8(cE$%1Q8c<7scCoc5W(7?V
zpowMoK64BGuEBOBJzvErmO(Ml0sL^E1;0SJ4BGv@pDer}p!?8}F`W4~Tp~oiJ+9A{
zo`c~VZ_n~we$#ceLYyvQJC>2#Z>I;1{LEDr!qYS5-MxDQKX-vf(!V-6vcqu81;h@^
z4I$BcW=cJ#NLQZfLy7TZV|5+q9#E4?uk0NLZ5h~n7QQ&p!4%GMLEK6uw^qfiQFE&!
zxZFrCCyHAY#$}hpmg)8<lt&+kKd3zvQ>r0xVchx>LlBo2&aEre6Zjh6vr7dtXtR#~
z(X1Z2a7$Vw3|+XVupBm!pK4gJWXwA$@LvB;8oWPvrxM<CYF9C{$rrVWN`<4+AO4w`
zvju)9s0KUjNC~I;v+SKxqN&>eR{=-rW{U2H5a!(_%yhEs-B^&`{cdusgJ|gP6<QR;
zId~2I@d5JS{<|xB=`8_d(7E(z`28pd{`h(Uz#0pX0$>Gu8Te5R{>BR0Lyn!h;J62W
zmchSBArGJg!Ow5PgOD%1BY_{L_KSg^rnyK&(;a5yLDQmzNGzns5d9^_Ni^`E7^FL0
zi2gn2bdIOLegPdJAAz2aBsASof_#Pa5`rJzkkjGJLVh%}`#ka&3T%iv+qw4`g5RTr
zis1(=<lH8sKVL!WL_sv&{u2tOX>k(@q3OP}NFkJ;MWI4@7J}c@Kt2qG3+Wi7r0Lqp
zNG0HKLl5b2XK@LNpoF3aD3YedY7|A&eS46Gru)lLG^GFeP@hnLcqCbBk9_z$<Dr(S
z$&m|j9ua;K<Qk-r{*mNgkVXYW5hWkzqmgMmz%k<%k}N(_5*QsA&47-1+XxS+Tr1a7
zbcLG8>J^TE<ZeM;-r*iWF+s7EyuJ=<qBRN+bu&ViMuhs77b0)5$Rju|IF2e0r}qCB
zU#1fw`@OBmr;pepBt9gb@>$XZ6}_(>eI*$P?RZ#(Bz^k$dMFYU34*orh`l~i9I6Y|
zk&X4Sk}!Rkp3?U=lH2u>)58tn1`iOwN;`@^)FVO|Am*w!Vm40Rf&9HgJ(NbJiSm7=
zrRDJaiSKbUVk)IOQ2?}8Wl|+lzQ<P5*bwERR;$Sm4dBv<2qM1-E{%*NgCUKIiXw9^
zf=e}mOUqA?vlppLqXm~Xe?z=4QI~23m;L}3F_$96K{2thWX+{m2hD&_ndsYK$8%pn
zo8VcL3q8^ZKJ}(PjT3yDV*bB;*B>C%PzXNtrap}qe7ew1H9UI+eN5Uy#DukjPrdtq
zOB1L|Jy5xmoB)GDbvhlnc8U5_PkqV^(h$w%NJ+TCKz+&_&L>%bDvd@XMQ>FT{&J*P
zWlBsWUtNw3q8XrzUaW>HX*1OBUC~js13y+UWY!fK$pbieMHX+N&7lJoF~U33Nkice
eyd;BmIjOs1AooGUzfne#8YR$oQ00fakN+<|FX*%Y

-- 
1.7.1


^ permalink raw reply

* Re: [PATCH] Update AR9271 firmware.
From: Sujith @ 2010-05-17  6:56 UTC (permalink / raw)
  To: David Woodhouse; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <1274078768.6930.6898.camel@macbook.infradead.org>

David Woodhouse wrote:
> On Mon, 2010-05-17 at 07:43 +0100, Sujith wrote:
> > Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> > ---
> >  ar9271.fw |  Bin 49280 -> 51280 bytes
> >  1 files changed, 0 insertions(+), 0 deletions(-)
> 
> No changelog, no version number... is this really what you consider to
> be good engineering practice?

Unfortunately, there is no versioning for the firmware.

The list of changes would be fairly large, since the last
firmware release was ~4 months ago. Am not involved in
firmware development, but I'll get a list of changes and
resend the patch. Thanks.

Sujith

^ permalink raw reply

* Re: [PATCH] Update AR9271 firmware.
From: David Woodhouse @ 2010-05-17  6:46 UTC (permalink / raw)
  To: Sujith; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <19440.58792.695144.835937@gargle.gargle.HOWL>

On Mon, 2010-05-17 at 07:43 +0100, Sujith wrote:
> Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> ---
>  ar9271.fw |  Bin 49280 -> 51280 bytes
>  1 files changed, 0 insertions(+), 0 deletions(-)

No changelog, no version number... is this really what you consider to
be good engineering practice?

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation


^ permalink raw reply

* [PATCH] Update AR9271 firmware.
From: Sujith @ 2010-05-17  6:43 UTC (permalink / raw)
  To: David.Woodhouse; +Cc: linux-wireless

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 ar9271.fw |  Bin 49280 -> 51280 bytes
 1 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/ar9271.fw b/ar9271.fw
index 2398e5517b0ad7da7adad54763b91705a3d2acb7..0ec953b404c1912dc64fa3b0171cffae82b0f375 100644
GIT binary patch
delta 12245
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

delta 11601
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

-- 
1.7.1


^ permalink raw reply

* Re: ath5k past 2.6.30 breaks monitor mode (and thus the aircrack suite)
From: Weedy @ 2010-05-17  6:38 UTC (permalink / raw)
  To: Gábor Stefanik; +Cc: linux-wireless
In-Reply-To: <AANLkTim1i3oB10rydr8ezyCjher1yctqKcVt9Ct1Bze0@mail.gmail.com>

2010/5/16 Gábor Stefanik <netrolller.3d@gmail.com>:
> On Sun, May 16, 2010 at 10:41 PM, Weedy <weedy2887@gmail.com> wrote:
>> Running airodump on ubuntus 2.6.30 kernel works as expected. The
>> 2.6.32 kernel shipped in lucid never sees data packets.
>>
>> I have narrowed it down to channel hopping. modprobing the driver and
>> starting mon0 on a fixed channel works as expected, but allowing
>> airodump to channel hop breaks the interface until the driver is
>> reset.
>>
>> I wrote a script to download and build compat wireless starting from
>> 2009-01-01 (granted everything fails until half way through october),
>> but every version that is successfully installed also show the same
>> bug.
>>
>> Further instructions welcome.
>
> Try checking out linux-2.6, and doing a bisect between 2.6.30 and 2.6.32.

Do I have to check out the entire kernel? even with scripting my
netbook would take forever to do this.

^ permalink raw reply

* [PATCH 4/5] ath9k_htc: Enable SGI in HT20 for AR9271
From: Sujith @ 2010-05-17  6:37 UTC (permalink / raw)
  To: linville@tuxdriver.com; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <19440.58039.731965.709469@gargle.gargle.HOWL>

Hi,

This patch depends on Vasanth's patch:
"ath9k: Enable Short GI in 20 Mhz for ar9287 and later chips"

Sujith

Sujith wrote:
> Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> ---
>  drivers/net/wireless/ath/ath9k/htc_drv_init.c |    3 +++
>  drivers/net/wireless/ath/ath9k/htc_drv_main.c |    7 +++++--
>  drivers/net/wireless/ath/ath9k/hw.c           |    2 +-
>  3 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
> index 7ec2c2e..8b202e0 100644
> --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
> +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
> @@ -404,6 +404,9 @@ static void setup_ht_cap(struct ath9k_htc_priv *priv,
>  		       IEEE80211_HT_CAP_SGI_40 |
>  		       IEEE80211_HT_CAP_DSSSCCK40;
>  
> +	if (priv->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/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
> index 80feeb3..6d46423 100644
> --- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
> +++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
> @@ -367,9 +367,12 @@ static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv,
>  		caps = WLAN_RC_HT_FLAG;
>  		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
>  			caps |= WLAN_RC_40_FLAG;
> -		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40)
> +		if (conf_is_ht40(&priv->hw->conf) &&
> +		    (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40))
> +			caps |= WLAN_RC_SGI_FLAG;
> +		else if (conf_is_ht20(&priv->hw->conf) &&
> +			 (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20))
>  			caps |= WLAN_RC_SGI_FLAG;
> -
>  	}
>  
>  	trate->sta_index = ista->index;
> diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
> index 1985d19..45a9c84 100644
> --- a/drivers/net/wireless/ath/ath9k/hw.c
> +++ b/drivers/net/wireless/ath/ath9k/hw.c
> @@ -2232,7 +2232,7 @@ 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))
> +	if (AR_SREV_9287_10_OR_LATER(ah) || AR_SREV_9271(ah))
>  		pCap->hw_caps |= ATH9K_HW_CAP_SGI_20;
>  
>  	return 0;
> -- 
> 1.7.1
> 
> --
> 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

* [PATCH 5/5] ath9k_htc: Enable RX STBC for AR9271
From: Sujith @ 2010-05-17  6:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

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

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index 8b202e0..ff6c080 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -407,6 +407,8 @@ static void setup_ht_cap(struct ath9k_htc_priv *priv,
 	if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
 		ht_info->cap |= IEEE80211_HT_CAP_SGI_20;
 
+	ht_info->cap |= (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
+
 	ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
 	ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
 
-- 
1.7.1


^ permalink raw reply related

* [PATCH 4/5] ath9k_htc: Enable SGI in HT20 for AR9271
From: Sujith @ 2010-05-17  6:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

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

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index 7ec2c2e..8b202e0 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -404,6 +404,9 @@ static void setup_ht_cap(struct ath9k_htc_priv *priv,
 		       IEEE80211_HT_CAP_SGI_40 |
 		       IEEE80211_HT_CAP_DSSSCCK40;
 
+	if (priv->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/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index 80feeb3..6d46423 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -367,9 +367,12 @@ static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv,
 		caps = WLAN_RC_HT_FLAG;
 		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
 			caps |= WLAN_RC_40_FLAG;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40)
+		if (conf_is_ht40(&priv->hw->conf) &&
+		    (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40))
+			caps |= WLAN_RC_SGI_FLAG;
+		else if (conf_is_ht20(&priv->hw->conf) &&
+			 (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20))
 			caps |= WLAN_RC_SGI_FLAG;
-
 	}
 
 	trate->sta_index = ista->index;
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 1985d19..45a9c84 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -2232,7 +2232,7 @@ 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))
+	if (AR_SREV_9287_10_OR_LATER(ah) || AR_SREV_9271(ah))
 		pCap->hw_caps |= ATH9K_HW_CAP_SGI_20;
 
 	return 0;
-- 
1.7.1


^ permalink raw reply related

* [PATCH 3/5] ath9k_htc: Update HT configuration properly
From: Sujith @ 2010-05-17  6:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

Use BSS_CHANGED_HT to handle HT parameter changes.
The rate information on the target has to be updated
to handle changes in HT configuration.

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

diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index fe5debf..80feeb3 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -409,6 +409,33 @@ static void ath9k_htc_init_rate(struct ath9k_htc_priv *priv,
 			  sta->addr, be32_to_cpu(trate.capflags));
 }
 
+static void ath9k_htc_update_rate(struct ath9k_htc_priv *priv,
+				  struct ieee80211_vif *vif,
+				  struct ieee80211_bss_conf *bss_conf)
+{
+	struct ath_common *common = ath9k_hw_common(priv->ah);
+	struct ath9k_htc_target_rate trate;
+	struct ieee80211_sta *sta;
+	int ret;
+
+	memset(&trate, 0, sizeof(struct ath9k_htc_target_rate));
+
+	rcu_read_lock();
+	sta = ieee80211_find_sta(vif, bss_conf->bssid);
+	if (!sta) {
+		rcu_read_unlock();
+		return;
+	}
+	ath9k_htc_setup_rate(priv, sta, &trate);
+	rcu_read_unlock();
+
+	ret = ath9k_htc_send_rate_cmd(priv, &trate);
+	if (!ret)
+		ath_print(common, ATH_DBG_CONFIG,
+			  "Updated target sta: %pM, rate caps: 0x%X\n",
+			  bss_conf->bssid, be32_to_cpu(trate.capflags));
+}
+
 static int ath9k_htc_aggr_oper(struct ath9k_htc_priv *priv,
 			       struct ieee80211_vif *vif,
 			       u8 *sta_addr, u8 tid, bool oper)
@@ -1595,6 +1622,9 @@ static void ath9k_htc_bss_info_changed(struct ieee80211_hw *hw,
 		ath9k_hw_init_global_settings(ah);
 	}
 
+	if (changed & BSS_CHANGED_HT)
+		ath9k_htc_update_rate(priv, vif, bss_conf);
+
 	ath9k_htc_ps_restore(priv);
 	mutex_unlock(&priv->mutex);
 }
-- 
1.7.1


^ permalink raw reply related

* [PATCH 2/5] ath9k_htc: Cleanup rate initialization
From: Sujith @ 2010-05-17  6:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

This patch removes a large chunk of code dealing
with rate management within the driver and simplifying
things by removing the hacky method of calculating
HT changes. A subsequent patch would fix this by
just using BSS_CHANGED_HT from mac80211.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/htc.h          |    2 -
 drivers/net/wireless/ath/ath9k/htc_drv_main.c |  113 +++++++------------------
 2 files changed, 32 insertions(+), 83 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
index 47255c8..b79a518 100644
--- a/drivers/net/wireless/ath/ath9k/htc.h
+++ b/drivers/net/wireless/ath/ath9k/htc.h
@@ -400,8 +400,6 @@ struct ath9k_htc_priv {
 #ifdef CONFIG_ATH9K_HTC_DEBUGFS
 	struct ath9k_debug debug;
 #endif
-	struct ath9k_htc_target_rate tgt_rate;
-
 	struct mutex mutex;
 };
 
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index cf1112b..fe5debf 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -334,40 +334,35 @@ static int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv)
 	return ret;
 }
 
-static int ath9k_htc_init_rate(struct ath9k_htc_priv *priv,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta)
+static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv,
+				 struct ieee80211_sta *sta,
+				 struct ath9k_htc_target_rate *trate)
 {
-	struct ath_common *common = ath9k_hw_common(priv->ah);
 	struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv;
 	struct ieee80211_supported_band *sband;
-	struct ath9k_htc_target_rate trate;
 	u32 caps = 0;
-	u8 cmd_rsp;
-	int i, j, ret;
-
-	memset(&trate, 0, sizeof(trate));
+	int i, j;
 
 	/* Only 2GHz is supported */
 	sband = priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ];
 
 	for (i = 0, j = 0; i < sband->n_bitrates; i++) {
 		if (sta->supp_rates[sband->band] & BIT(i)) {
-			priv->tgt_rate.rates.legacy_rates.rs_rates[j]
+			trate->rates.legacy_rates.rs_rates[j]
 				= (sband->bitrates[i].bitrate * 2) / 10;
 			j++;
 		}
 	}
-	priv->tgt_rate.rates.legacy_rates.rs_nrates = j;
+	trate->rates.legacy_rates.rs_nrates = j;
 
 	if (sta->ht_cap.ht_supported) {
 		for (i = 0, j = 0; i < 77; i++) {
 			if (sta->ht_cap.mcs.rx_mask[i/8] & (1<<(i%8)))
-				priv->tgt_rate.rates.ht_rates.rs_rates[j++] = i;
+				trate->rates.ht_rates.rs_rates[j++] = i;
 			if (j == ATH_HTC_RATE_MAX)
 				break;
 		}
-		priv->tgt_rate.rates.ht_rates.rs_nrates = j;
+		trate->rates.ht_rates.rs_nrates = j;
 
 		caps = WLAN_RC_HT_FLAG;
 		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)
@@ -377,81 +372,41 @@ static int ath9k_htc_init_rate(struct ath9k_htc_priv *priv,
 
 	}
 
-	priv->tgt_rate.sta_index = ista->index;
-	priv->tgt_rate.isnew = 1;
-	trate = priv->tgt_rate;
-	priv->tgt_rate.capflags = cpu_to_be32(caps);
-	trate.capflags = cpu_to_be32(caps);
+	trate->sta_index = ista->index;
+	trate->isnew = 1;
+	trate->capflags = cpu_to_be32(caps);
+}
+
+static int ath9k_htc_send_rate_cmd(struct ath9k_htc_priv *priv,
+				    struct ath9k_htc_target_rate *trate)
+{
+	struct ath_common *common = ath9k_hw_common(priv->ah);
+	int ret;
+	u8 cmd_rsp;
 
-	WMI_CMD_BUF(WMI_RC_RATE_UPDATE_CMDID, &trate);
+	WMI_CMD_BUF(WMI_RC_RATE_UPDATE_CMDID, trate);
 	if (ret) {
 		ath_print(common, ATH_DBG_FATAL,
 			  "Unable to initialize Rate information on target\n");
-		return ret;
 	}
 
-	ath_print(common, ATH_DBG_CONFIG,
-		  "Updated target STA: %pM (caps: 0x%x)\n", sta->addr, caps);
-	return 0;
-}
-
-static bool check_rc_update(struct ieee80211_hw *hw, bool *cw40)
-{
-	struct ath9k_htc_priv *priv = hw->priv;
-	struct ieee80211_conf *conf = &hw->conf;
-
-	if (!conf_is_ht(conf))
-		return false;
-
-	if (!(priv->op_flags & OP_ASSOCIATED) ||
-	    (priv->op_flags & OP_SCANNING))
-		return false;
-
-	if (conf_is_ht40(conf)) {
-		if (priv->ah->curchan->chanmode &
-			(CHANNEL_HT40PLUS | CHANNEL_HT40MINUS)) {
-			return false;
-		} else {
-			*cw40 = true;
-			return true;
-		}
-	} else {  /* ht20 */
-		if (priv->ah->curchan->chanmode & CHANNEL_HT20)
-			return false;
-		else
-			return true;
-	}
+	return ret;
 }
 
-static void ath9k_htc_rc_update(struct ath9k_htc_priv *priv, bool is_cw40)
+static void ath9k_htc_init_rate(struct ath9k_htc_priv *priv,
+				struct ieee80211_sta *sta)
 {
-	struct ath9k_htc_target_rate trate;
 	struct ath_common *common = ath9k_hw_common(priv->ah);
+	struct ath9k_htc_target_rate trate;
 	int ret;
-	u32 caps = be32_to_cpu(priv->tgt_rate.capflags);
-	u8 cmd_rsp;
-
-	memset(&trate, 0, sizeof(trate));
-
-	trate = priv->tgt_rate;
 
-	if (is_cw40)
-		caps |= WLAN_RC_40_FLAG;
-	else
-		caps &= ~WLAN_RC_40_FLAG;
-
-	priv->tgt_rate.capflags = cpu_to_be32(caps);
-	trate.capflags = cpu_to_be32(caps);
-
-	WMI_CMD_BUF(WMI_RC_RATE_UPDATE_CMDID, &trate);
-	if (ret) {
-		ath_print(common, ATH_DBG_FATAL,
-			  "Unable to update Rate information on target\n");
-		return;
-	}
-
-	ath_print(common, ATH_DBG_CONFIG, "Rate control updated with "
-		  "caps:0x%x on target\n", priv->tgt_rate.capflags);
+	memset(&trate, 0, sizeof(struct ath9k_htc_target_rate));
+	ath9k_htc_setup_rate(priv, sta, &trate);
+	ret = ath9k_htc_send_rate_cmd(priv, &trate);
+	if (!ret)
+		ath_print(common, ATH_DBG_CONFIG,
+			  "Updated target sta: %pM, rate caps: 0x%X\n",
+			  sta->addr, be32_to_cpu(trate.capflags));
 }
 
 static int ath9k_htc_aggr_oper(struct ath9k_htc_priv *priv,
@@ -1372,14 +1327,10 @@ static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed)
 	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
 		struct ieee80211_channel *curchan = hw->conf.channel;
 		int pos = curchan->hw_value;
-		bool is_cw40 = false;
 
 		ath_print(common, ATH_DBG_CONFIG, "Set channel: %d MHz\n",
 			  curchan->center_freq);
 
-		if (check_rc_update(hw, &is_cw40))
-			ath9k_htc_rc_update(priv, is_cw40);
-
 		ath9k_cmn_update_ichannel(hw, &priv->ah->channels[pos]);
 
 		if (ath9k_htc_set_channel(priv, hw, &priv->ah->channels[pos]) < 0) {
@@ -1471,7 +1422,7 @@ static void ath9k_htc_sta_notify(struct ieee80211_hw *hw,
 	case STA_NOTIFY_ADD:
 		ret = ath9k_htc_add_station(priv, vif, sta);
 		if (!ret)
-			ath9k_htc_init_rate(priv, vif, sta);
+			ath9k_htc_init_rate(priv, sta);
 		break;
 	case STA_NOTIFY_REMOVE:
 		ath9k_htc_remove_station(priv, vif, sta);
-- 
1.7.1


^ permalink raw reply related

* [PATCH 1/5] ath9k_htc: Initvals update for AR9271
From: Sujith @ 2010-05-17  6:31 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless

Update from internal systems engineering team.

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

diff --git a/drivers/net/wireless/ath/ath9k/ar9002_initvals.h b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
index dae7f33..8ab24ee 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
+++ b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
@@ -4492,7 +4492,7 @@ static const u32 ar9287PciePhy_clkreq_off_L1_9287_1_1[][2] = {
 };
 
 
-/* AR9271 initialization values automaticaly created: 06/04/09 */
+/* AR9271 initialization values automaticaly created: 03/31/10 */
 static const u32 ar9271Modes_9271[][6] = {
     { 0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0 },
     { 0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0 },
@@ -5011,7 +5011,7 @@ static const u32 ar9271Common_9271[][2] = {
     { 0x0000783c, 0x72ee0a72 },
     { 0x00007840, 0xbbfffffc },
     { 0x00007844, 0x000c0db6 },
-    { 0x00007848, 0x6db61b6f },
+    { 0x00007848, 0x6db6246f },
     { 0x0000784c, 0x6d9b66db },
     { 0x00007850, 0x6d8c6dba },
     { 0x00007854, 0x00040000 },
@@ -5218,7 +5218,7 @@ static const u32 ar9271Modes_high_power_tx_gain_9271[][6] = {
     { 0x00007824, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff },
     { 0x0000786c, 0x08609eb6, 0x08609eb6, 0x08609eba, 0x08609eba, 0x08609eb6 },
     { 0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00 },
-    { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a212652, 0x0a212652, 0x0a22a652 },
+    { 0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a214652, 0x0a214652, 0x0a22a652 },
     { 0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7 },
     { 0x0000a27c, 0x05018063, 0x05038063, 0x05018063, 0x05018063, 0x05018063 },
     { 0x0000a394, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63 },
-- 
1.7.1


^ permalink raw reply related

* Re: [PATCH 13/37] drivers/net/wireless/iwmc3200wifi: Use kmemdup
From: Samuel Ortiz @ 2010-05-16 23:01 UTC (permalink / raw)
  To: Julia Lawall
  Cc: Zhu, Yi, Intel Linux Wireless, John W. Linville,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org
In-Reply-To: <Pine.LNX.4.64.1005152316400.21345@ask.diku.dk>

On Sat, May 15, 2010 at 10:16:58PM +0100, Julia Lawall wrote:
> From: Julia Lawall <julia@diku.dk>
> 
> Use kmemdup when some other buffer is immediately copied into the
> allocated region.
> 
> A simplified version of the semantic patch that makes this change is as
> follows: (http://coccinelle.lip6.fr/)
> 
> // <smpl>
> @@
> expression from,to,size,flag;
> statement S;
> @@
> 
> -  to = \(kmalloc\|kzalloc\)(size,flag);
> +  to = kmemdup(from,size,flag);
>    if (to==NULL || ...) S
> -  memcpy(to, from, size);
> // </smpl>
> 
> Signed-off-by: Julia Lawall <julia@diku.dk>
Acked-by: Samuel Ortiz <sameo@linux.intel.com>

Cheers,
Samuel.
 
> ---
>  drivers/net/wireless/iwmc3200wifi/rx.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff -u -p a/drivers/net/wireless/iwmc3200wifi/rx.c b/drivers/net/wireless/iwmc3200wifi/rx.c
> --- a/drivers/net/wireless/iwmc3200wifi/rx.c
> +++ b/drivers/net/wireless/iwmc3200wifi/rx.c
> @@ -321,14 +321,14 @@ iwm_rx_ticket_node_alloc(struct iwm_priv
>  		return ERR_PTR(-ENOMEM);
>  	}
>  
> -	ticket_node->ticket = kzalloc(sizeof(struct iwm_rx_ticket), GFP_KERNEL);
> +	ticket_node->ticket = kmemdup(ticket, sizeof(struct iwm_rx_ticket),
> +				      GFP_KERNEL);
>  	if (!ticket_node->ticket) {
>  		IWM_ERR(iwm, "Couldn't allocate RX ticket\n");
>  		kfree(ticket_node);
>  		return ERR_PTR(-ENOMEM);
>  	}
>  
> -	memcpy(ticket_node->ticket, ticket, sizeof(struct iwm_rx_ticket));
>  	INIT_LIST_HEAD(&ticket_node->node);
>  
>  	return ticket_node;

-- 
Intel Open Source Technology Centre
http://oss.intel.com/
---------------------------------------------------------------------
Intel Corporation SAS (French simplified joint stock company)
Registered headquarters: "Les Montalets"- 2, rue de Paris, 
92196 Meudon Cedex, France
Registration Number:  302 456 199 R.C.S. NANTERRE
Capital: 4,572,000 Euros

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.


^ permalink raw reply

* Re: ath5k past 2.6.30 breaks monitor mode (and thus the aircrack suite)
From: Gábor Stefanik @ 2010-05-16 21:49 UTC (permalink / raw)
  To: Weedy; +Cc: linux-wireless
In-Reply-To: <AANLkTimltZSc8dJPPBCibcGDaOPcQRU_5kSbenIAdi_6@mail.gmail.com>

On Sun, May 16, 2010 at 10:41 PM, Weedy <weedy2887@gmail.com> wrote:
> Running airodump on ubuntus 2.6.30 kernel works as expected. The
> 2.6.32 kernel shipped in lucid never sees data packets.
>
> I have narrowed it down to channel hopping. modprobing the driver and
> starting mon0 on a fixed channel works as expected, but allowing
> airodump to channel hop breaks the interface until the driver is
> reset.
>
> I wrote a script to download and build compat wireless starting from
> 2009-01-01 (granted everything fails until half way through october),
> but every version that is successfully installed also show the same
> bug.
>
> Further instructions welcome.

Try checking out linux-2.6, and doing a bisect between 2.6.30 and 2.6.32.

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



-- 
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)

^ permalink raw reply

* ath5k past 2.6.30 breaks monitor mode (and thus the aircrack suite)
From: Weedy @ 2010-05-16 20:41 UTC (permalink / raw)
  To: linux-wireless

Running airodump on ubuntus 2.6.30 kernel works as expected. The
2.6.32 kernel shipped in lucid never sees data packets.

I have narrowed it down to channel hopping. modprobing the driver and
starting mon0 on a fixed channel works as expected, but allowing
airodump to channel hop breaks the interface until the driver is
reset.

I wrote a script to download and build compat wireless starting from
2009-01-01 (granted everything fails until half way through october),
but every version that is successfully installed also show the same
bug.

Further instructions welcome.

^ permalink raw reply

* [PATCH 36/37] drivers/net/wireless/orinoco: Use kmemdup
From: Julia Lawall @ 2010-05-15 21:24 UTC (permalink / raw)
  To: Pavel Roskin, David Gibson, John W. Linville, linux-wireless,
	orinoco-users, orinoco-devel, netdev, linux-kernel,
	kernel-janitors

From: Julia Lawall <julia@diku.dk>

Use kmemdup when some other buffer is immediately copied into the
allocated region.

A simplified version of the semantic patch that makes this change is as
follows: (http://coccinelle.lip6.fr/)

// <smpl>
@@
expression from,to,size,flag;
statement S;
@@

-  to = \(kmalloc\|kzalloc\)(size,flag);
+  to = kmemdup(from,size,flag);
   if (to==NULL || ...) S
-  memcpy(to, from, size);
// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>

---
 drivers/net/wireless/orinoco/wext.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff -u -p a/drivers/net/wireless/orinoco/wext.c b/drivers/net/wireless/orinoco/wext.c
--- a/drivers/net/wireless/orinoco/wext.c
+++ b/drivers/net/wireless/orinoco/wext.c
@@ -993,11 +993,9 @@ static int orinoco_ioctl_set_genie(struc
 		return -EINVAL;
 
 	if (wrqu->data.length) {
-		buf = kmalloc(wrqu->data.length, GFP_KERNEL);
+		buf = kmemdup(extra, wrqu->data.length, GFP_KERNEL);
 		if (buf == NULL)
 			return -ENOMEM;
-
-		memcpy(buf, extra, wrqu->data.length);
 	} else
 		buf = NULL;
 

^ 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