* Re: pull request: wireless-next 2011-10-11
From: David Miller @ 2011-10-11 19:40 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, netdev
In-Reply-To: <20111011191616.GF6558@tuxdriver.com>
From: "John W. Linville" <linville@tuxdriver.com>
Date: Tue, 11 Oct 2011 15:16:16 -0400
> Here is another wireless batch intended for 3.2... Highlights include a
> bluetooth pull with some refactoring, a big pull of ath6kl updates, a
> flurry of mac80211 patches from Johannes, and the usual strong ath9k
> showing.
>
> Please let me know if there are problems!
Pulled, thanks John.
^ permalink raw reply
* Re: pull request: wireless-next 2011-10-11
From: John W. Linville @ 2011-10-11 19:38 UTC (permalink / raw)
To: davem; +Cc: linux-wireless, netdev
In-Reply-To: <20111011191616.GF6558@tuxdriver.com>
[-- Attachment #1: Type: text/plain, Size: 19479 bytes --]
On Tue, Oct 11, 2011 at 03:16:16PM -0400, John W. Linville wrote:
> commit bfb3780bc9b622422c1f0d3e12371a70863000da
>
> Dave,
>
> Here is another wireless batch intended for 3.2... Highlights include a
> bluetooth pull with some refactoring, a big pull of ath6kl updates, a
> flurry of mac80211 patches from Johannes, and the usual strong ath9k
> showing.
>
> Please let me know if there are problems!
There was a problem -- a warning in ath6kl. Sorry about that!
commit 094daf7db7c47861009899ce23f9177d761e20b0
Dave,
Here is another wireless batch intended for 3.2... Highlights include a
bluetooth pull with some refactoring, a big pull of ath6kl updates, a
flurry of mac80211 patches from Johannes, and the usual strong ath9k
showing.
Please let me know if there are problems!
Thanks,
John
P.S. This version correct a warning due to some merge damage in
ath6kl...
---
The following changes since commit 3ed6f6958c0ac21958285d8648f14d34da4bbcb3:
ll_temac: convert to SKB paged frag API. (2011-10-10 15:19:13 -0400)
are available in the git repository at:
git://git.infradead.org/users/linville/wireless-next.git for-davem
Amitkumar Karwar (5):
mwifiex: remove unnecessary mwifiex_dump_station_info() call
mwifiex: remove unreachable code
mwifiex: fix Tx data rate display issue
mwifiex: correct AMSDU aggregation check
mwifiex: handle an error path correctly
Anderson Lizardo (1):
Bluetooth: use recommended LE connection parameters
Andre Guedes (1):
Bluetooth: hci_le_adv_report_evt code refactoring
Andy Shevchenko (1):
wireless: at76c50x: use native hex_pack_byte() method
Arik Nemtsov (5):
nl80211: support sending TDLS commands/frames
mac80211: standardize adding supported rates IEs
mac80211: handle TDLS high-level commands and frames
nl80211/mac80211: allow adding TDLS peers as stations
mac80211: data path modification for TDLS peers
Daniel Drake (1):
libertas: detect TX lockups and reset hardware
Don Fry (1):
iwlagn: rename iwlagn module iwlwifi and alias to iwlagn.
Edward Lu (4):
ath6kl: Support channel set request for startscan command
ath6kl: Fix a typo in ath6k context
ath6kl: Fix default key installation in AP mode
ath6kl: Do not clear CONNECT bit setting in AP mode for STA disconnect
Eliad Peller (1):
mac80211: pass vif param to conf_tx() callback
Greg Dietsche (1):
iwlagn: iwl-agn-rs: remove unnecessary null check for sta and lq_sta
Helmut Schaa (1):
mac80211: Allow noack flag overwrite for injected frames
Johannes Berg (17):
cfg80211/mac80211: apply station uAPSD parameters selectively
mac80211: let drivers inform it about per TID buffered frames
mac80211: unify TIM bit handling
mac80211: also expire filtered frames
mac80211: split PS buffers into ACs
mac80211: remove return value from add_pending_skbs
mac80211: clear more-data bit on filtered frames
mac80211: allow releasing driver-buffered frames
mac80211: implement uAPSD
mac80211: send (QoS) Null if no buffered frames
mac80211: reply only once to each PS-poll
mac80211: optimise station flags
mac80211: add missing station flags to debugfs
mac80211: explicitly notify drivers of frame release
mac80211: allow out-of-band EOSP notification
mac80211: document client powersave
mac80211: dont assign seqno to or aggregate QoS Null frames
John W. Linville (3):
Merge branch 'for-linville' of git://github.com/kvalo/ath6kl
Merge branch 'master' of git://github.com/padovan/bluetooth-next
Merge branch 'master' of git://git.infradead.org/users/linville/wireless-next into for-davem
Jouni Malinen (37):
ath6kl: Use cfg80211_inform_bss instead of cfg80211_inform_bss_frame
ath6kl: Add functionality for starting AP mode
ath6kl: Fix AP mode (Re)AssocReq IE processing
ath6kl: Delay initial group key setup in AP mode
ath6kl: Use change_station() to authorize/unauthorize STAs
ath6kl: Add new WMI commands and events for P2P
ath6kl: Implement remain_on_channel and cancel_remain_on_channel
ath6kl: Implement mgmt_tx
ath6kl: Request P2P capabilities during target init
ath6kl: Add cfg80211 calls for remain-on-channel events
ath6kl: Use set_appie command to add Probe Request IEs
ath6kl: Report received Probe Request frames to cfg80211
ath6kl: Notify cfg80211 of TX status of mgmt_tx frames
ath6kl: Report received Action frames to cfg80211
ath6kl: Advertise supported mgmt_stypes
ath6kl: Add support for new P2P iftypes in mode changes
ath6kl: Include P2P IE(s) in GO Probe Response depending on request
ath6kl: Return error from wmi.c instead of -EIO in ath6kl_cfg80211_scan
ath6kl: Define __CHECK_ENDIAN__ for sparse
ath6kl: Do not enable Probe Request reporting by default
athk6l: Fix channel list processing in scan requests
ath6kl: Fix WMI message structure for AP_SET_PVB
ath6kl: Fix AP mode connect event parsing and TIM updates
ath6kl: Allow AP mode to be configured
ath6kl: Allow enabling of P2P support
ath6kl: Fix static WEP configuration in AP mode
ath6kl: Fix BSS update on roaming
ath6kl: Remove deprecated WMI_OPT_RX_FRAME_EVENTID processing
ath6kl: Remove RSSI update for internal node table
ath6kl: Remove unnecessary node table update on disconnect event
ath6kl: Replace internal node table with cfg80211 BSS table
ath6kl: Remove the unused node table implementation
ath6kl: Remove unnecessary bssinfo event header conversion
ath6kl: Update BSS information after connection
ath6kl: Export beacon interval and DTIM period through STA info
ath6kl: Report PMKSA candidate events through cfg80211
ath6kl: fix TCP corruption
Kalle Valo (28):
ath6kl: fix indentation in htc_issued_send()
ath6kl: implement suspend support
ath6kl: add testmode support
ath6kl: fix compilation when NL80211_TESTMODE is disabled
ath6kl: add firmware log support
ath6kl: implement support to set firmware log parameters
ath6kl: cleanup diagnose window read and write functions
ath6kl: read fwlog from firmware ring buffer
ath6kl: unify tx function names in htc.c
ath6kl: unify rx function naming in htc.c
ath6kl: separate firmware fetch from upload
ath6kl: fix busy loop in ath6kl_bmi_get_rx_lkahd()
ath6kl: add support for firmware API 2 format
ath6kl: refactor firmware load address code
ath6kl: refactor firmware ext data addr and reserved ram handling size
ath6kl: read firmware start address from hardware
ath6kl: read reserved ram size from firmware file
ath6kl: add firmware capabilities support
Merge remote branch 'wireless-next/master' into ath6kl-next
ath6kl: pass only unicast frames for aggregation
ath6kl: allow firmware to override firmware patch address
ath6kl: silence "invalid rate" warning
ath6kl: add prefix parameter to ath6kl_dbg_dump()
ath6kl: add sdio debug messages
ath6kl: add debug logs for booting
ath6kl: improve wmi debug messages
ath6kl: fix size_t related warnings
ath6kl: include vmalloc.h in debug.c
Kevin Fang (1):
ath6kl: Add beginning of AR6004 initialisation support
Larry Finger (2):
rtlwifi: Remove unused routine _usb_readN_sync
rtlwifi: Remove unused _usb_nbytes_read_write and _usb_writeN_sync
Lorenzo Bianconi (1):
mac80211: max_tp_rate2 management of minstrel_ht
Luis R. Rodriguez (1):
ath9k_htc: add AVM FRITZ!WLAN 11N v2 support
Mat Martineau (3):
Bluetooth: Linearize skbs for use in BNEP, CMTP, HIDP, and RFCOMM
Bluetooth: Handle fragmented skbs in bt_sock_stream_recvmsg()
Bluetooth: Perform L2CAP SDU reassembly without copying data
Mohammed Shafi Shajakhan (4):
ath9k/ath9k_htc: Fix PS wrappers for RF kill
ath9k_hw: extend GPIO pin select mask for rfkill
ath9k_hw: Fix number of GPIO pins for AR9287/9300
ath9k_hw: set pci_express capability true for AR9480
Oliver Neukum (1):
btusb: add device entry for Broadcom SoftSailing
Peter Hurley (1):
Bluetooth: Allow ACL packets over USB in HCI_RAW mode
Raja Mani (2):
ath6kl: Avoid finding bss presence in cfg80211 scan list
ath6kl: Check sme state before delivering disconnect event to cfg80211
Rajkumar Manoharan (4):
ath6kl: Fix compilation error while compiling w/o debug
ath9k: Remove unnecessary AMPDU check at tx status
ath9k: Remove redundant my beacon check at ath_rx_ps_beacon
mac80211: Send nullfunc frames at lower rate during connection monitor
Sam Leffler (1):
ath6kl: query device tree for firmware board-id
Sangwook Lee (1):
net:rfkill: add a gpio setup function into GPIO rfkill
Stephen Rothwell (1):
wireless/ath6kl: use of module_param requires the inclusion of moduleparam.h
Szymon Janc (1):
Bluetooth: Mark not declared l2cap_core functions as static
Vasanthakumar Thiagarajan (21):
ath6kl: Release ar->lock right afer updating net_stats in ath6kl_rx()
ath6kl: Minor cleanup in min_hdr_len computation
ath6kl: Cleanup ath6kl_wmi_data_hdr_remove()
ath6kl: Fix bug in computing AMSU subframe padding
ath6kl: Fix buffer alignment for scatter-gather I/O
ath6kl: Fix system freeze under heavy data load
ath6kl: Remove unused meta_v2 from ath6kl_data_tx()
ath6kl: Add wmi meta data information only it is available
ath6kl: Avoid rolling back of entire scatter setup in case of failure
ath6kl: Add initial debugfs changes
ath6kl: Add debugfs entry to dump target stats
ath6kl: Add debugfs file entry to dump credit distribution stats
ath6kl: Add debugfs interface to dump diagnostic registers from firmware
ath6kl: Fix endianness in requesting chip register read
ath6kl: Make ath6kl_diag_write32() non-static
ath6kl: Fix endianness in register write
ath6kl: Add debugfs support to write a chip register
ath6kl: Remove auth type fall back in auto authentication mode
ath6kl: Set the sme_state to disconnected in disconnect() callback
ath6kl: Fix disconnect event reporting
ath6kl: Remove unnecessary retrieval of first list entry in ath6kl_htc_tx_setup_scat_list()
Vivek Natarajan (4):
ath6kl: Add debugfs entry to modify roaming parameters.
ath6kl: Process regulatory requests from firmware.
ath6kl: deinitialise wiphy on error
ath6kl: Indicate the roaming capability of the firmware
Waldemar Rymarkiewicz (1):
Bluetooth: Fix possible NULL pointer dereference
Yogesh Ashok Powar (1):
mwifiex: add cfg80211 handlers add/del_virtual_intf
Documentation/DocBook/80211.tmpl | 11 +-
Documentation/feature-removal-schedule.txt | 9 +
drivers/bluetooth/btusb.c | 6 +-
drivers/net/wireless/Makefile | 2 +-
drivers/net/wireless/at76c50x-usb.c | 18 +-
drivers/net/wireless/ath/ath5k/mac80211-ops.c | 2 +-
drivers/net/wireless/ath/ath6kl/Makefile | 4 +-
drivers/net/wireless/ath/ath6kl/bmi.c | 23 +-
drivers/net/wireless/ath/ath6kl/bmi.h | 4 +-
drivers/net/wireless/ath/ath6kl/cfg80211.c | 894 ++++++++++++-----
drivers/net/wireless/ath/ath6kl/common.h | 83 --
drivers/net/wireless/ath/ath6kl/core.h | 145 +++-
drivers/net/wireless/ath/ath6kl/debug.c | 784 +++++++++++++++
drivers/net/wireless/ath/ath6kl/debug.h | 49 +-
drivers/net/wireless/ath/ath6kl/hif-ops.h | 5 +
drivers/net/wireless/ath/ath6kl/hif.h | 1 +
drivers/net/wireless/ath/ath6kl/htc.c | 271 +++---
drivers/net/wireless/ath/ath6kl/init.c | 794 ++++++++++++----
drivers/net/wireless/ath/ath6kl/main.c | 448 ++++++---
drivers/net/wireless/ath/ath6kl/node.c | 234 -----
drivers/net/wireless/ath/ath6kl/sdio.c | 79 ++-
drivers/net/wireless/ath/ath6kl/target.h | 41 +-
drivers/net/wireless/ath/ath6kl/testmode.c | 167 ++++
drivers/net/wireless/ath/ath6kl/testmode.h | 36 +
drivers/net/wireless/ath/ath6kl/txrx.c | 61 +-
drivers/net/wireless/ath/ath6kl/wmi.c | 1126 +++++++++++++++-------
drivers/net/wireless/ath/ath6kl/wmi.h | 350 ++++++-
drivers/net/wireless/ath/ath9k/ath9k.h | 3 +-
drivers/net/wireless/ath/ath9k/eeprom.h | 7 +-
drivers/net/wireless/ath/ath9k/gpio.c | 7 +-
drivers/net/wireless/ath/ath9k/hif_usb.c | 1 +
drivers/net/wireless/ath/ath9k/htc_drv_gpio.c | 10 +-
drivers/net/wireless/ath/ath9k/htc_drv_main.c | 3 +-
drivers/net/wireless/ath/ath9k/hw.c | 11 +-
drivers/net/wireless/ath/ath9k/main.c | 6 +-
drivers/net/wireless/ath/ath9k/rc.c | 6 -
drivers/net/wireless/ath/ath9k/recv.c | 23 +-
drivers/net/wireless/ath/ath9k/xmit.c | 19 +-
drivers/net/wireless/ath/carl9170/main.c | 3 +-
drivers/net/wireless/b43/main.c | 3 +-
drivers/net/wireless/b43legacy/main.c | 3 +-
drivers/net/wireless/iwlegacy/iwl-4965-tx.c | 2 +-
drivers/net/wireless/iwlegacy/iwl-core.c | 3 +-
drivers/net/wireless/iwlegacy/iwl-core.h | 3 +-
drivers/net/wireless/iwlwifi/Kconfig | 22 +-
drivers/net/wireless/iwlwifi/Makefile | 40 +-
drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 3 -
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-agn.c | 1 +
drivers/net/wireless/iwlwifi/iwl-core.c | 5 +-
drivers/net/wireless/iwlwifi/iwl-core.h | 3 +-
drivers/net/wireless/iwlwifi/iwl-shared.h | 2 +-
drivers/net/wireless/libertas/dev.h | 1 +
drivers/net/wireless/libertas/main.c | 35 +
drivers/net/wireless/mac80211_hwsim.c | 3 +-
drivers/net/wireless/mwifiex/11n_aggr.c | 2 -
drivers/net/wireless/mwifiex/11n_aggr.h | 1 +
drivers/net/wireless/mwifiex/cfg80211.c | 176 +++-
drivers/net/wireless/mwifiex/cfg80211.h | 3 +-
drivers/net/wireless/mwifiex/decl.h | 8 -
drivers/net/wireless/mwifiex/init.c | 2 +-
drivers/net/wireless/mwifiex/main.c | 266 +----
drivers/net/wireless/mwifiex/main.h | 19 +-
drivers/net/wireless/mwifiex/sta_ioctl.c | 46 +-
drivers/net/wireless/mwifiex/wmm.c | 32 +-
drivers/net/wireless/mwl8k.c | 5 +-
drivers/net/wireless/p54/main.c | 3 +-
drivers/net/wireless/p54/txrx.c | 2 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 5 +-
drivers/net/wireless/rt2x00/rt2800lib.c | 5 +-
drivers/net/wireless/rt2x00/rt2800lib.h | 3 +-
drivers/net/wireless/rt2x00/rt2x00.h | 3 +-
drivers/net/wireless/rt2x00/rt2x00mac.c | 3 +-
drivers/net/wireless/rt2x00/rt61pci.c | 5 +-
drivers/net/wireless/rt2x00/rt73usb.c | 5 +-
drivers/net/wireless/rtl818x/rtl8187/dev.c | 3 +-
drivers/net/wireless/rtlwifi/core.c | 3 +-
drivers/net/wireless/rtlwifi/usb.c | 40 -
drivers/net/wireless/rtlwifi/wifi.h | 8 +-
drivers/net/wireless/wl1251/main.c | 3 +-
drivers/net/wireless/wl12xx/main.c | 3 +-
drivers/staging/brcm80211/brcmsmac/mac80211_if.c | 7 +-
include/linux/ieee80211.h | 85 ++
include/linux/if_ether.h | 1 +
include/linux/nl80211.h | 44 +
include/linux/rfkill-gpio.h | 4 +
include/net/bluetooth/l2cap.h | 3 +-
include/net/cfg80211.h | 29 +
include/net/ieee80211_radiotap.h | 1 +
include/net/mac80211.h | 229 +++++-
net/bluetooth/af_bluetooth.c | 30 +-
net/bluetooth/bnep/core.c | 5 +-
net/bluetooth/cmtp/core.c | 5 +-
net/bluetooth/hci_conn.c | 14 +-
net/bluetooth/hci_event.c | 20 +-
net/bluetooth/hidp/core.c | 10 +-
net/bluetooth/l2cap_core.c | 255 ++----
net/bluetooth/rfcomm/core.c | 5 +-
net/mac80211/Kconfig | 12 +
net/mac80211/agg-rx.c | 2 +-
net/mac80211/agg-tx.c | 2 +-
net/mac80211/cfg.c | 380 +++++++-
net/mac80211/debugfs_sta.c | 37 +-
net/mac80211/driver-ops.h | 33 +-
net/mac80211/driver-trace.h | 77 ++
net/mac80211/ht.c | 2 +-
net/mac80211/ibss.c | 4 +-
net/mac80211/ieee80211_i.h | 16 +-
net/mac80211/iface.c | 4 +-
net/mac80211/key.c | 4 +-
net/mac80211/main.c | 18 +
net/mac80211/mesh.c | 58 --
net/mac80211/mesh.h | 4 -
net/mac80211/mesh_plink.c | 12 +-
net/mac80211/mlme.c | 34 +-
net/mac80211/pm.c | 2 +-
net/mac80211/rate.c | 8 +-
net/mac80211/rc80211_minstrel_ht.c | 2 +
net/mac80211/rx.c | 118 ++-
net/mac80211/sta_info.c | 636 ++++++++++---
net/mac80211/sta_info.h | 136 ++--
net/mac80211/status.c | 54 +-
net/mac80211/tx.c | 187 +++--
net/mac80211/util.c | 76 ++-
net/mac80211/wme.c | 4 +-
net/rfkill/rfkill-gpio.c | 11 +
net/wireless/nl80211.c | 109 ++-
net/wireless/util.c | 5 +-
128 files changed, 6629 insertions(+), 2696 deletions(-)
delete mode 100644 drivers/net/wireless/ath/ath6kl/node.c
create mode 100644 drivers/net/wireless/ath/ath6kl/testmode.c
create mode 100644 drivers/net/wireless/ath/ath6kl/testmode.h
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* pull request: wireless-next 2011-10-11
From: John W. Linville @ 2011-10-11 19:16 UTC (permalink / raw)
To: davem; +Cc: linux-wireless, netdev
[-- Attachment #1: Type: text/plain, Size: 18913 bytes --]
commit bfb3780bc9b622422c1f0d3e12371a70863000da
Dave,
Here is another wireless batch intended for 3.2... Highlights include a
bluetooth pull with some refactoring, a big pull of ath6kl updates, a
flurry of mac80211 patches from Johannes, and the usual strong ath9k
showing.
Please let me know if there are problems!
Thanks,
John
---
The following changes since commit 3ed6f6958c0ac21958285d8648f14d34da4bbcb3:
ll_temac: convert to SKB paged frag API. (2011-10-10 15:19:13 -0400)
are available in the git repository at:
git://git.infradead.org/users/linville/wireless-next.git for-davem
Amitkumar Karwar (5):
mwifiex: remove unnecessary mwifiex_dump_station_info() call
mwifiex: remove unreachable code
mwifiex: fix Tx data rate display issue
mwifiex: correct AMSDU aggregation check
mwifiex: handle an error path correctly
Anderson Lizardo (1):
Bluetooth: use recommended LE connection parameters
Andre Guedes (1):
Bluetooth: hci_le_adv_report_evt code refactoring
Andy Shevchenko (1):
wireless: at76c50x: use native hex_pack_byte() method
Arik Nemtsov (5):
nl80211: support sending TDLS commands/frames
mac80211: standardize adding supported rates IEs
mac80211: handle TDLS high-level commands and frames
nl80211/mac80211: allow adding TDLS peers as stations
mac80211: data path modification for TDLS peers
Daniel Drake (1):
libertas: detect TX lockups and reset hardware
Don Fry (1):
iwlagn: rename iwlagn module iwlwifi and alias to iwlagn.
Edward Lu (4):
ath6kl: Support channel set request for startscan command
ath6kl: Fix a typo in ath6k context
ath6kl: Fix default key installation in AP mode
ath6kl: Do not clear CONNECT bit setting in AP mode for STA disconnect
Eliad Peller (1):
mac80211: pass vif param to conf_tx() callback
Greg Dietsche (1):
iwlagn: iwl-agn-rs: remove unnecessary null check for sta and lq_sta
Helmut Schaa (1):
mac80211: Allow noack flag overwrite for injected frames
Johannes Berg (17):
cfg80211/mac80211: apply station uAPSD parameters selectively
mac80211: let drivers inform it about per TID buffered frames
mac80211: unify TIM bit handling
mac80211: also expire filtered frames
mac80211: split PS buffers into ACs
mac80211: remove return value from add_pending_skbs
mac80211: clear more-data bit on filtered frames
mac80211: allow releasing driver-buffered frames
mac80211: implement uAPSD
mac80211: send (QoS) Null if no buffered frames
mac80211: reply only once to each PS-poll
mac80211: optimise station flags
mac80211: add missing station flags to debugfs
mac80211: explicitly notify drivers of frame release
mac80211: allow out-of-band EOSP notification
mac80211: document client powersave
mac80211: dont assign seqno to or aggregate QoS Null frames
John W. Linville (3):
Merge branch 'for-linville' of git://github.com/kvalo/ath6kl
Merge branch 'master' of git://github.com/padovan/bluetooth-next
Merge branch 'master' of git://git.infradead.org/users/linville/wireless-next into for-davem
Jouni Malinen (37):
ath6kl: Use cfg80211_inform_bss instead of cfg80211_inform_bss_frame
ath6kl: Add functionality for starting AP mode
ath6kl: Fix AP mode (Re)AssocReq IE processing
ath6kl: Delay initial group key setup in AP mode
ath6kl: Use change_station() to authorize/unauthorize STAs
ath6kl: Add new WMI commands and events for P2P
ath6kl: Implement remain_on_channel and cancel_remain_on_channel
ath6kl: Implement mgmt_tx
ath6kl: Request P2P capabilities during target init
ath6kl: Add cfg80211 calls for remain-on-channel events
ath6kl: Use set_appie command to add Probe Request IEs
ath6kl: Report received Probe Request frames to cfg80211
ath6kl: Notify cfg80211 of TX status of mgmt_tx frames
ath6kl: Report received Action frames to cfg80211
ath6kl: Advertise supported mgmt_stypes
ath6kl: Add support for new P2P iftypes in mode changes
ath6kl: Include P2P IE(s) in GO Probe Response depending on request
ath6kl: Return error from wmi.c instead of -EIO in ath6kl_cfg80211_scan
ath6kl: Define __CHECK_ENDIAN__ for sparse
ath6kl: Do not enable Probe Request reporting by default
athk6l: Fix channel list processing in scan requests
ath6kl: Fix WMI message structure for AP_SET_PVB
ath6kl: Fix AP mode connect event parsing and TIM updates
ath6kl: Allow AP mode to be configured
ath6kl: Allow enabling of P2P support
ath6kl: Fix static WEP configuration in AP mode
ath6kl: Fix BSS update on roaming
ath6kl: Remove deprecated WMI_OPT_RX_FRAME_EVENTID processing
ath6kl: Remove RSSI update for internal node table
ath6kl: Remove unnecessary node table update on disconnect event
ath6kl: Replace internal node table with cfg80211 BSS table
ath6kl: Remove the unused node table implementation
ath6kl: Remove unnecessary bssinfo event header conversion
ath6kl: Update BSS information after connection
ath6kl: Export beacon interval and DTIM period through STA info
ath6kl: Report PMKSA candidate events through cfg80211
ath6kl: fix TCP corruption
Kalle Valo (28):
ath6kl: fix indentation in htc_issued_send()
ath6kl: implement suspend support
ath6kl: add testmode support
ath6kl: fix compilation when NL80211_TESTMODE is disabled
ath6kl: add firmware log support
ath6kl: implement support to set firmware log parameters
ath6kl: cleanup diagnose window read and write functions
ath6kl: read fwlog from firmware ring buffer
ath6kl: unify tx function names in htc.c
ath6kl: unify rx function naming in htc.c
ath6kl: separate firmware fetch from upload
ath6kl: fix busy loop in ath6kl_bmi_get_rx_lkahd()
ath6kl: add support for firmware API 2 format
ath6kl: refactor firmware load address code
ath6kl: refactor firmware ext data addr and reserved ram handling size
ath6kl: read firmware start address from hardware
ath6kl: read reserved ram size from firmware file
ath6kl: add firmware capabilities support
Merge remote branch 'wireless-next/master' into ath6kl-next
ath6kl: pass only unicast frames for aggregation
ath6kl: allow firmware to override firmware patch address
ath6kl: silence "invalid rate" warning
ath6kl: add prefix parameter to ath6kl_dbg_dump()
ath6kl: add sdio debug messages
ath6kl: add debug logs for booting
ath6kl: improve wmi debug messages
ath6kl: fix size_t related warnings
ath6kl: include vmalloc.h in debug.c
Kevin Fang (1):
ath6kl: Add beginning of AR6004 initialisation support
Larry Finger (2):
rtlwifi: Remove unused routine _usb_readN_sync
rtlwifi: Remove unused _usb_nbytes_read_write and _usb_writeN_sync
Lorenzo Bianconi (1):
mac80211: max_tp_rate2 management of minstrel_ht
Luis R. Rodriguez (1):
ath9k_htc: add AVM FRITZ!WLAN 11N v2 support
Mat Martineau (3):
Bluetooth: Linearize skbs for use in BNEP, CMTP, HIDP, and RFCOMM
Bluetooth: Handle fragmented skbs in bt_sock_stream_recvmsg()
Bluetooth: Perform L2CAP SDU reassembly without copying data
Mohammed Shafi Shajakhan (4):
ath9k/ath9k_htc: Fix PS wrappers for RF kill
ath9k_hw: extend GPIO pin select mask for rfkill
ath9k_hw: Fix number of GPIO pins for AR9287/9300
ath9k_hw: set pci_express capability true for AR9480
Oliver Neukum (1):
btusb: add device entry for Broadcom SoftSailing
Peter Hurley (1):
Bluetooth: Allow ACL packets over USB in HCI_RAW mode
Raja Mani (2):
ath6kl: Avoid finding bss presence in cfg80211 scan list
ath6kl: Check sme state before delivering disconnect event to cfg80211
Rajkumar Manoharan (4):
ath6kl: Fix compilation error while compiling w/o debug
ath9k: Remove unnecessary AMPDU check at tx status
ath9k: Remove redundant my beacon check at ath_rx_ps_beacon
mac80211: Send nullfunc frames at lower rate during connection monitor
Sam Leffler (1):
ath6kl: query device tree for firmware board-id
Sangwook Lee (1):
net:rfkill: add a gpio setup function into GPIO rfkill
Stephen Rothwell (1):
wireless/ath6kl: use of module_param requires the inclusion of moduleparam.h
Szymon Janc (1):
Bluetooth: Mark not declared l2cap_core functions as static
Vasanthakumar Thiagarajan (21):
ath6kl: Release ar->lock right afer updating net_stats in ath6kl_rx()
ath6kl: Minor cleanup in min_hdr_len computation
ath6kl: Cleanup ath6kl_wmi_data_hdr_remove()
ath6kl: Fix bug in computing AMSU subframe padding
ath6kl: Fix buffer alignment for scatter-gather I/O
ath6kl: Fix system freeze under heavy data load
ath6kl: Remove unused meta_v2 from ath6kl_data_tx()
ath6kl: Add wmi meta data information only it is available
ath6kl: Avoid rolling back of entire scatter setup in case of failure
ath6kl: Add initial debugfs changes
ath6kl: Add debugfs entry to dump target stats
ath6kl: Add debugfs file entry to dump credit distribution stats
ath6kl: Add debugfs interface to dump diagnostic registers from firmware
ath6kl: Fix endianness in requesting chip register read
ath6kl: Make ath6kl_diag_write32() non-static
ath6kl: Fix endianness in register write
ath6kl: Add debugfs support to write a chip register
ath6kl: Remove auth type fall back in auto authentication mode
ath6kl: Set the sme_state to disconnected in disconnect() callback
ath6kl: Fix disconnect event reporting
ath6kl: Remove unnecessary retrieval of first list entry in ath6kl_htc_tx_setup_scat_list()
Vivek Natarajan (4):
ath6kl: Add debugfs entry to modify roaming parameters.
ath6kl: Process regulatory requests from firmware.
ath6kl: deinitialise wiphy on error
ath6kl: Indicate the roaming capability of the firmware
Waldemar Rymarkiewicz (1):
Bluetooth: Fix possible NULL pointer dereference
Yogesh Ashok Powar (1):
mwifiex: add cfg80211 handlers add/del_virtual_intf
Documentation/DocBook/80211.tmpl | 11 +-
Documentation/feature-removal-schedule.txt | 9 +
drivers/bluetooth/btusb.c | 6 +-
drivers/net/wireless/Makefile | 2 +-
drivers/net/wireless/at76c50x-usb.c | 18 +-
drivers/net/wireless/ath/ath5k/mac80211-ops.c | 2 +-
drivers/net/wireless/ath/ath6kl/Makefile | 4 +-
drivers/net/wireless/ath/ath6kl/bmi.c | 23 +-
drivers/net/wireless/ath/ath6kl/bmi.h | 4 +-
drivers/net/wireless/ath/ath6kl/cfg80211.c | 894 ++++++++++++-----
drivers/net/wireless/ath/ath6kl/common.h | 83 --
drivers/net/wireless/ath/ath6kl/core.h | 145 +++-
drivers/net/wireless/ath/ath6kl/debug.c | 784 +++++++++++++++
drivers/net/wireless/ath/ath6kl/debug.h | 49 +-
drivers/net/wireless/ath/ath6kl/hif-ops.h | 5 +
drivers/net/wireless/ath/ath6kl/hif.h | 1 +
drivers/net/wireless/ath/ath6kl/htc.c | 271 +++---
drivers/net/wireless/ath/ath6kl/init.c | 794 ++++++++++++----
drivers/net/wireless/ath/ath6kl/main.c | 448 ++++++---
drivers/net/wireless/ath/ath6kl/node.c | 234 -----
drivers/net/wireless/ath/ath6kl/sdio.c | 79 ++-
drivers/net/wireless/ath/ath6kl/target.h | 41 +-
drivers/net/wireless/ath/ath6kl/testmode.c | 167 ++++
drivers/net/wireless/ath/ath6kl/testmode.h | 36 +
drivers/net/wireless/ath/ath6kl/txrx.c | 61 +-
drivers/net/wireless/ath/ath6kl/wmi.c | 1126 +++++++++++++++-------
drivers/net/wireless/ath/ath6kl/wmi.h | 350 ++++++-
drivers/net/wireless/ath/ath9k/ath9k.h | 3 +-
drivers/net/wireless/ath/ath9k/eeprom.h | 7 +-
drivers/net/wireless/ath/ath9k/gpio.c | 7 +-
drivers/net/wireless/ath/ath9k/hif_usb.c | 1 +
drivers/net/wireless/ath/ath9k/htc_drv_gpio.c | 10 +-
drivers/net/wireless/ath/ath9k/htc_drv_main.c | 3 +-
drivers/net/wireless/ath/ath9k/hw.c | 11 +-
drivers/net/wireless/ath/ath9k/main.c | 6 +-
drivers/net/wireless/ath/ath9k/rc.c | 6 -
drivers/net/wireless/ath/ath9k/recv.c | 23 +-
drivers/net/wireless/ath/ath9k/xmit.c | 19 +-
drivers/net/wireless/ath/carl9170/main.c | 3 +-
drivers/net/wireless/b43/main.c | 3 +-
drivers/net/wireless/b43legacy/main.c | 3 +-
drivers/net/wireless/iwlegacy/iwl-4965-tx.c | 2 +-
drivers/net/wireless/iwlegacy/iwl-core.c | 3 +-
drivers/net/wireless/iwlegacy/iwl-core.h | 3 +-
drivers/net/wireless/iwlwifi/Kconfig | 22 +-
drivers/net/wireless/iwlwifi/Makefile | 40 +-
drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 3 -
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-agn.c | 1 +
drivers/net/wireless/iwlwifi/iwl-core.c | 5 +-
drivers/net/wireless/iwlwifi/iwl-core.h | 3 +-
drivers/net/wireless/iwlwifi/iwl-shared.h | 2 +-
drivers/net/wireless/libertas/dev.h | 1 +
drivers/net/wireless/libertas/main.c | 35 +
drivers/net/wireless/mac80211_hwsim.c | 3 +-
drivers/net/wireless/mwifiex/11n_aggr.c | 2 -
drivers/net/wireless/mwifiex/11n_aggr.h | 1 +
drivers/net/wireless/mwifiex/cfg80211.c | 176 +++-
drivers/net/wireless/mwifiex/cfg80211.h | 3 +-
drivers/net/wireless/mwifiex/decl.h | 8 -
drivers/net/wireless/mwifiex/init.c | 2 +-
drivers/net/wireless/mwifiex/main.c | 266 +----
drivers/net/wireless/mwifiex/main.h | 19 +-
drivers/net/wireless/mwifiex/sta_ioctl.c | 46 +-
drivers/net/wireless/mwifiex/wmm.c | 32 +-
drivers/net/wireless/mwl8k.c | 5 +-
drivers/net/wireless/p54/main.c | 3 +-
drivers/net/wireless/p54/txrx.c | 2 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 5 +-
drivers/net/wireless/rt2x00/rt2800lib.c | 5 +-
drivers/net/wireless/rt2x00/rt2800lib.h | 3 +-
drivers/net/wireless/rt2x00/rt2x00.h | 3 +-
drivers/net/wireless/rt2x00/rt2x00mac.c | 3 +-
drivers/net/wireless/rt2x00/rt61pci.c | 5 +-
drivers/net/wireless/rt2x00/rt73usb.c | 5 +-
drivers/net/wireless/rtl818x/rtl8187/dev.c | 3 +-
drivers/net/wireless/rtlwifi/core.c | 3 +-
drivers/net/wireless/rtlwifi/usb.c | 40 -
drivers/net/wireless/rtlwifi/wifi.h | 8 +-
drivers/net/wireless/wl1251/main.c | 3 +-
drivers/net/wireless/wl12xx/main.c | 3 +-
drivers/staging/brcm80211/brcmsmac/mac80211_if.c | 7 +-
include/linux/ieee80211.h | 85 ++
include/linux/if_ether.h | 1 +
include/linux/nl80211.h | 44 +
include/linux/rfkill-gpio.h | 4 +
include/net/bluetooth/l2cap.h | 3 +-
include/net/cfg80211.h | 29 +
include/net/ieee80211_radiotap.h | 1 +
include/net/mac80211.h | 229 +++++-
net/bluetooth/af_bluetooth.c | 30 +-
net/bluetooth/bnep/core.c | 5 +-
net/bluetooth/cmtp/core.c | 5 +-
net/bluetooth/hci_conn.c | 14 +-
net/bluetooth/hci_event.c | 20 +-
net/bluetooth/hidp/core.c | 10 +-
net/bluetooth/l2cap_core.c | 255 ++----
net/bluetooth/rfcomm/core.c | 5 +-
net/mac80211/Kconfig | 12 +
net/mac80211/agg-rx.c | 2 +-
net/mac80211/agg-tx.c | 2 +-
net/mac80211/cfg.c | 380 +++++++-
net/mac80211/debugfs_sta.c | 37 +-
net/mac80211/driver-ops.h | 33 +-
net/mac80211/driver-trace.h | 77 ++
net/mac80211/ht.c | 2 +-
net/mac80211/ibss.c | 4 +-
net/mac80211/ieee80211_i.h | 16 +-
net/mac80211/iface.c | 4 +-
net/mac80211/key.c | 4 +-
net/mac80211/main.c | 18 +
net/mac80211/mesh.c | 58 --
net/mac80211/mesh.h | 4 -
net/mac80211/mesh_plink.c | 12 +-
net/mac80211/mlme.c | 34 +-
net/mac80211/pm.c | 2 +-
net/mac80211/rate.c | 8 +-
net/mac80211/rc80211_minstrel_ht.c | 2 +
net/mac80211/rx.c | 118 ++-
net/mac80211/sta_info.c | 636 ++++++++++---
net/mac80211/sta_info.h | 136 ++--
net/mac80211/status.c | 54 +-
net/mac80211/tx.c | 187 +++--
net/mac80211/util.c | 76 ++-
net/mac80211/wme.c | 4 +-
net/rfkill/rfkill-gpio.c | 11 +
net/wireless/nl80211.c | 109 ++-
net/wireless/util.c | 5 +-
128 files changed, 6629 insertions(+), 2696 deletions(-)
delete mode 100644 drivers/net/wireless/ath/ath6kl/node.c
create mode 100644 drivers/net/wireless/ath/ath6kl/testmode.c
create mode 100644 drivers/net/wireless/ath/ath6kl/testmode.h
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* Re: [PATCH] wl12xx: handle injected packets
From: Luciano Coelho @ 2011-10-11 19:26 UTC (permalink / raw)
To: Eliad Peller; +Cc: linux-wireless
In-Reply-To: <1318333945-27839-1-git-send-email-eliad@wizery.com>
On Tue, 2011-10-11 at 13:52 +0200, Eliad Peller wrote:
> Injected packets are sent with no vif, causing the wl12xx
> to NULL-dereference in multiple places.
>
> Furthermore, injected packets are currently not sent at all,
> as system_hlid doesn't belong to any specific role, so
> wl1271_skb_dequeue() never return its packets.
>
> Handle both these problems.
>
> Signed-off-by: Eliad Peller <eliad@wizery.com>
> ---
Applied and added my:
Reported-by: Luciano Coelho <coelho@ti.com>
As agreed on IRC. ;)
--
Cheers,
Luca.
^ permalink raw reply
* [PATCH] ath6kl: Fix endpoint_stats debugfs buffer length calculation
From: Jouni Malinen @ 2011-10-11 19:08 UTC (permalink / raw)
To: Kalle Valo; +Cc: linux-wireless, Joe Perches
The previous version did not really make much sense and the theoretical
maximum length would be a bit longer. Calculate the length more
accurately. In addition, there is no need to clear the buffer, so use
kmalloc instead of kzalloc. For bonus points, add the forgotten
cred_rpt_from_other value to the file.
Reported-by: Joe Perches <joe@perches.com>
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/debug.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/debug.c b/drivers/net/wireless/ath/ath6kl/debug.c
index 7b1c9ae..dd37785 100644
--- a/drivers/net/wireless/ath/ath6kl/debug.c
+++ b/drivers/net/wireless/ath/ath6kl/debug.c
@@ -624,8 +624,9 @@ static ssize_t ath6kl_endpoint_stats_read(struct file *file,
unsigned int buf_len, len = 0;
ssize_t ret_cnt;
- buf_len = 1000 + ENDPOINT_MAX * 100;
- buf = kzalloc(buf_len, GFP_KERNEL);
+ buf_len = sizeof(struct htc_endpoint_stats) / sizeof(u32) *
+ (25 + ENDPOINT_MAX * 11);
+ buf = kmalloc(buf_len, GFP_KERNEL);
if (!buf)
return -ENOMEM;
@@ -640,6 +641,7 @@ static ssize_t ath6kl_endpoint_stats_read(struct file *file,
EPSTAT(tx_dropped);
EPSTAT(tx_cred_rpt);
EPSTAT(cred_rpt_from_rx);
+ EPSTAT(cred_rpt_from_other);
EPSTAT(cred_rpt_ep0);
EPSTAT(cred_from_rx);
EPSTAT(cred_from_other);
--
1.7.4.1
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply related
* Compat-wireless release for 2011-10-11 is baked
From: Compat-wireless cronjob account @ 2011-10-11 19:05 UTC (permalink / raw)
To: linux-wireless
>From git://github.com/sfrothwell/linux-next
+ 186cf8e...706f460 akpm-end -> origin/akpm-end (forced update)
3ee72ca..65112dc akpm-start -> origin/akpm-start
+ 12d1b9a...5c56568 master -> origin/master (forced update)
3ee72ca..65112dc stable -> origin/stable
* [new tag] next-20111011 -> next-20111011
compat-wireless code metrics
811841 - Total upstream lines of code being pulled
2431 - backport code changes
2113 - backport code additions
318 - backport code deletions
8588 - backport from compat module
11019 - total backport code
1.3573 - % of code consists of backport work
^ permalink raw reply
* Re: [PATCH v2 1/5] ath6kl: Add endpoint_stats debugfs file
From: Jouni Malinen @ 2011-10-11 18:52 UTC (permalink / raw)
To: Joe Perches; +Cc: kvalo, linux-wireless
In-Reply-To: <1318351171.1839.43.camel@Joe-Laptop>
On Tue, Oct 11, 2011 at 09:39:31AM -0700, Joe Perches wrote:
> > +static unsigned int print_endpoint_stat(struct htc_target *target, char *buf,
> > + unsigned int buf_len, unsigned int len,
> > + int offset, const char *name)
>
> Perhaps the function name is wrong.
> This doesn't print, it fills a buffer.
Well, it prints the stuff into a buffer just like scnprintf prints
things.. Feel free to send a patch if you want to try to rename
*print* functions ;-).
> len and offset are to me oddly used variable names.
I guess len could be renamed to pos, but the use of len here matches
with the function used in the main function, i.e., this
print_endpoint_stat is more of a replacement for a macro. offset sounds
correct to me, i.e., it is the offset within the statistics structure.
> > + counter = ((u32 *) ep_st) + (offset / 4);
> perhaps:
>
> static int endpoint_stats(struct htc_target *target,
> char *buf, size_t len,
> size_t pos, int index, const char *name)
I would have nothing against pos, but index would be a bit confusing
here since that parameter is really the byte offset and not the index.
> pos += scnprintf(buf + pos, len - pos, "%s:", name);
> for (i = 0; i < ENDPOINT_MAX; i++) {
> u32 *stats = (u32 *)&target->endpoint[i].ep_st;
> offset += scnprintf(buf + pos, len - pos, " %u", stats[index]);
Well, okay, index to a u32 array.. If you feel strongly enough, please
send a separate cleanup patch since Kalle applied this already.
> > +static ssize_t ath6kl_endpoint_stats_read(struct file *file,
> > + char __user *user_buf,
> > + size_t count, loff_t *ppos)
> > +{
> > + struct ath6kl *ar = file->private_data;
> > + struct htc_target *target = ar->htc_target;
> > + char *buf;
> > + unsigned int buf_len, len = 0;
>
> size_t len = 0;
> (or maybe pos instead)
This follows the style used throughout this file. Feel free to propose
cleanup to all the functions.
>
> > + ssize_t ret_cnt;
> > +
> > + buf_len = 1000 + ENDPOINT_MAX * 100;
>
> It seems odd to start with size using 1000
Yeah.. I think I had something as a prefix first and then just forgot to
remove that extra addition.
> There's ENDPOINT_MAX rows (9)
> Each row contains:
> up to 20 byte row name
> 20 counters * up to 10 bytes per counter
> up to 220 bytes per row
It's actually the other way around, i.e., 20 rows with 9 counters.
> Perhaps this?
> const size_t buf_len = ENDPOINT_MAX * (20 + sizeof(struct htc_endpoint_stats) / sizeof(u32) * 10);
I was too lazy to count the exact maximum. If there is any chance of
overflowing the buf_len, this would obviously need to be fixed. The
theoretical maximum would likely be something like 20 * (22 + 9 * 11),
so yes, while I don't think this happens in practice, this buffer length
should be incremented to cover the theoretical case (and to make some
more sense).
> > + buf = kzalloc(buf_len, GFP_KERNEL);
>
> kzalloc doesn't seem necessary,
> everything is overwritten. just kmalloc?
Yeah, I probably copied that from an existing function, but I would
agree that that is not really any need for clearing the buffer.
> As is, it's (barely) possible to overflow
> the buffer length and end up non-null terminated.
> Perhaps that doesn't matter.
I don't think there is any need for null-terminating the buffer since
this is really binary data with length returned. As I noted, this is
unlikely to end up having large enough counter values to overflow in
practice, but changing the buf_len calculation to make more sense is
useful cleanup anyway.
> > + len = print_endpoint_stat(target, buf, buf_len, len, \
> > + offsetof(struct htc_endpoint_stats, name), \
> > + #name)
>
> perhaps
>
> #define EPSTAT(name) \
> len = endpoint_stat(target, buf, buf_len, len, \
> offsetof(struct htc_endpoint_stats, name) / sizeof(u32), \
> #name)
I'm fine with this, too, as a separate cleanup patch.
> > + if (len > buf_len)
> > + len = buf_len;
>
> Maybe it's better to ensure 0 termination?
> if (len > buf_len) {
> len = buf_len;
> buf[buf_len - 1] = 0;
> }
Why? This is a read file op.. It is not like the caller is expecting a
null-terminated string to come back from here.
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply
* Re: [RFC] wl12xx: use the same plat dev name for both SPI and SDIO
From: Luciano Coelho @ 2011-10-11 18:02 UTC (permalink / raw)
To: linux-wireless; +Cc: balbi
In-Reply-To: <1317992414-30197-1-git-send-email-coelho@ti.com>
On Fri, 2011-10-07 at 16:00 +0300, Luciano Coelho wrote:
> There's no need to have the bus name included in the platform device
> name that we create. The core driver doesn't need to know about the
> type of bus it uses. Any differences between the buses that need to
> be handled differently in the core, can be passed in the platform data
> (as the pwr_in_suspend boolean does).
>
> Use "wl12xx" for the device name in both bus drivers. Rename the
> platform driver name to "wl12xx_driver", just to differentiate from
> the platform device names.
>
> Signed-off-by: Luciano Coelho <coelho@ti.com>
> ---
Nobody complained about this (except Arik, but I answered his question),
so I decided to apply this. I won't re-send it as PATCH, because that
would be useless. ;)
--
Cheers,
Luca.
^ permalink raw reply
* [PATCH] iw: add DFS region parsing support
From: Luis R. Rodriguez @ 2011-10-11 17:59 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless, Luis R. Rodriguez
In-Reply-To: <1318355944-24708-1-git-send-email-mcgrof@qca.qualcomm.com>
This lets iw parse the DFS region passed on by the kernel
when one is found for the currently used regulatory domain.
Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
---
nl80211.h | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
reg.c | 31 +++++++++++++++++++++++++++++
2 files changed, 96 insertions(+), 0 deletions(-)
diff --git a/nl80211.h b/nl80211.h
index c73582f..2dbb799 100644
--- a/nl80211.h
+++ b/nl80211.h
@@ -506,6 +506,9 @@
* @NL80211_CMD_PMKSA_CANDIDATE: This is used as an event to inform userspace
* of PMKSA caching dandidates.
*
+ * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup).
+ * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame.
+ *
* @NL80211_CMD_MAX: highest used command number
* @__NL80211_CMD_AFTER_LAST: internal use
*/
@@ -632,6 +635,9 @@ enum nl80211_commands {
NL80211_CMD_PMKSA_CANDIDATE,
+ NL80211_CMD_TDLS_OPER,
+ NL80211_CMD_TDLS_MGMT,
+
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
@@ -1089,6 +1095,24 @@ enum nl80211_commands {
* This attribute is used with %NL80211_CMD_TRIGGER_SCAN and
* %NL80211_CMD_FRAME commands.
*
+ * @NL80211_ATTR_TDLS_ACTION: Low level TDLS action code (e.g. link setup
+ * request, link setup confirm, link teardown, etc.). Values are
+ * described in the TDLS (802.11z) specification.
+ * @NL80211_ATTR_TDLS_DIALOG_TOKEN: Non-zero token for uniquely identifying a
+ * TDLS conversation between two devices.
+ * @NL80211_ATTR_TDLS_OPERATION: High level TDLS operation; see
+ * &enum nl80211_tdls_operation, represented as a u8.
+ * @NL80211_ATTR_TDLS_SUPPORT: A flag indicating the device can operate
+ * as a TDLS peer sta.
+ * @NL80211_ATTR_TDLS_EXTERNAL_SETUP: The TDLS discovery/setup and teardown
+ * procedures should be performed by sending TDLS packets via
+ * %NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be
+ * used for asking the driver to perform a TDLS operation.
+ *
+ * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country
+ * abides to when initiating radiation on DFS channels. A country maps
+ * to one DFS region.
+ *
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
*/
@@ -1311,6 +1335,14 @@ enum nl80211_attrs {
NL80211_ATTR_TX_NO_CCK_RATE,
+ NL80211_ATTR_TDLS_ACTION,
+ NL80211_ATTR_TDLS_DIALOG_TOKEN,
+ NL80211_ATTR_TDLS_OPERATION,
+ NL80211_ATTR_TDLS_SUPPORT,
+ NL80211_ATTR_TDLS_EXTERNAL_SETUP,
+
+ NL80211_ATTR_DFS_REGION,
+
/* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST,
@@ -1408,6 +1440,7 @@ enum nl80211_iftype {
* @NL80211_STA_FLAG_WME: station is WME/QoS capable
* @NL80211_STA_FLAG_MFP: station uses management frame protection
* @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated
+ * @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer
* @NL80211_STA_FLAG_MAX: highest station flag number currently defined
* @__NL80211_STA_FLAG_AFTER_LAST: internal use
*/
@@ -1418,6 +1451,7 @@ enum nl80211_sta_flags {
NL80211_STA_FLAG_WME,
NL80211_STA_FLAG_MFP,
NL80211_STA_FLAG_AUTHENTICATED,
+ NL80211_STA_FLAG_TDLS_PEER,
/* keep last */
__NL80211_STA_FLAG_AFTER_LAST,
@@ -1815,6 +1849,21 @@ enum nl80211_reg_rule_flags {
};
/**
+ * enum nl80211_dfs_regions - regulatory DFS regions
+ *
+ * @NL80211_DFS_UNSET: Country has no DFS master region specified
+ * @NL80211_DFS_FCC_: Country follows DFS master rules from FCC
+ * @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI
+ * @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec
+ */
+enum nl80211_dfs_regions {
+ NL80211_DFS_UNSET = 0,
+ NL80211_DFS_FCC = 1,
+ NL80211_DFS_ETSI = 2,
+ NL80211_DFS_JP = 3,
+};
+
+/**
* enum nl80211_survey_info - survey information
*
* These attribute types are used with %NL80211_ATTR_SURVEY_INFO
@@ -2604,4 +2653,20 @@ enum nl80211_pmksa_candidate_attr {
MAX_NL80211_PMKSA_CANDIDATE = NUM_NL80211_PMKSA_CANDIDATE - 1
};
+/**
+ * enum nl80211_tdls_operation - values for %NL80211_ATTR_TDLS_OPERATION
+ * @NL80211_TDLS_DISCOVERY_REQ: Send a TDLS discovery request
+ * @NL80211_TDLS_SETUP: Setup TDLS link
+ * @NL80211_TDLS_TEARDOWN: Teardown a TDLS link which is already established
+ * @NL80211_TDLS_ENABLE_LINK: Enable TDLS link
+ * @NL80211_TDLS_DISABLE_LINK: Disable TDLS link
+ */
+enum nl80211_tdls_operation {
+ NL80211_TDLS_DISCOVERY_REQ,
+ NL80211_TDLS_SETUP,
+ NL80211_TDLS_TEARDOWN,
+ NL80211_TDLS_ENABLE_LINK,
+ NL80211_TDLS_DISABLE_LINK,
+};
+
#endif /* __LINUX_NL80211_H */
diff --git a/reg.c b/reg.c
index c4ee1c4..4fa5bec 100644
--- a/reg.c
+++ b/reg.c
@@ -96,6 +96,31 @@ COMMAND(reg, set, "<ISO/IEC 3166-1 alpha2>",
NL80211_CMD_REQ_SET_REG, 0, CIB_NONE, handle_reg_set,
"Notify the kernel about the current regulatory domain.");
+static void print_dfs_region(__u8 dfs_region)
+{
+ if (!dfs_region)
+ return;
+
+ printf("DFS Master region: ");
+
+ switch (dfs_region) {
+ case NL80211_DFS_FCC:
+ printf("FCC");
+ break;
+ case NL80211_DFS_ETSI:
+ printf("ETSI");
+ break;
+ case NL80211_DFS_JP:
+ printf("JP");
+ break;
+ default:
+ printf("Uknown");
+ break;
+ }
+
+ printf("\n");
+}
+
static int print_reg_handler(struct nl_msg *msg, void *arg)
{
@@ -107,6 +132,7 @@ static int print_reg_handler(struct nl_msg *msg, void *arg)
struct nlattr *tb_msg[NL80211_ATTR_MAX + 1];
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
char *alpha2;
+ __u8 dfs_region = 0;
struct nlattr *nl_rule;
int rem_rule;
static struct nla_policy reg_rule_policy[NL80211_FREQUENCY_ATTR_MAX + 1] = {
@@ -132,7 +158,12 @@ static int print_reg_handler(struct nl_msg *msg, void *arg)
}
alpha2 = nla_data(tb_msg[NL80211_ATTR_REG_ALPHA2]);
+
+ if (tb_msg[NL80211_ATTR_DFS_REGION])
+ dfs_region = nla_get_u8(tb_msg[NL80211_ATTR_DFS_REGION]);
+
printf("country %c%c:\n", alpha2[0], alpha2[1]);
+ print_dfs_region(dfs_region);
nla_for_each_nested(nl_rule, tb_msg[NL80211_ATTR_REG_RULES], rem_rule) {
struct nlattr *tb_rule[NL80211_FREQUENCY_ATTR_MAX + 1];
--
1.7.4.15.g7811d
^ permalink raw reply related
* [PATCH 6/6] cfg80211: pass DFS region to drivers through reg_notifier()
From: Luis R. Rodriguez @ 2011-10-11 17:59 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless, Luis R. Rodriguez
In-Reply-To: <1318355944-24708-1-git-send-email-mcgrof@qca.qualcomm.com>
This grants drivers access to the DFS region that a
regulatory domain belongs to.
Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
---
include/net/regulatory.h | 5 +++++
net/wireless/reg.c | 2 ++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/include/net/regulatory.h b/include/net/regulatory.h
index 7399c93..a5f7993 100644
--- a/include/net/regulatory.h
+++ b/include/net/regulatory.h
@@ -48,6 +48,10 @@ enum environment_cap {
* 99 - built by driver but a specific alpha2 cannot be determined
* 98 - result of an intersection between two regulatory domains
* 97 - regulatory domain has not yet been configured
+ * @dfs_region: If CRDA responded with a regulatory domain that requires
+ * DFS master operation on a known DFS region (NL80211_DFS_*),
+ * dfs_region represents that region. Drivers can use this and the
+ * @alpha2 to adjust their device's DFS parameters as required.
* @intersect: indicates whether the wireless core should intersect
* the requested regulatory domain with the presently set regulatory
* domain.
@@ -67,6 +71,7 @@ struct regulatory_request {
int wiphy_idx;
enum nl80211_reg_initiator initiator;
char alpha2[2];
+ u8 dfs_region;
bool intersect;
bool processed;
enum environment_cap country_ie_env;
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 69141ed..b66444d 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1121,6 +1121,8 @@ static void wiphy_update_regulatory(struct wiphy *wiphy,
if (ignore_reg_update(wiphy, initiator))
return;
+ last_request->dfs_region = cfg80211_regdomain->dfs_region;
+
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
if (wiphy->bands[band])
handle_band(wiphy, band, initiator);
--
1.7.4.15.g7811d
^ permalink raw reply related
* [PATCH 5/6] cfg80211: process regulatory DFS region for countries
From: Luis R. Rodriguez @ 2011-10-11 17:59 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless, Luis R. Rodriguez
In-Reply-To: <1318355944-24708-1-git-send-email-mcgrof@qca.qualcomm.com>
The wireless-regdb now has support for mapping a country to
one DFS region. CRDA sends this to us now so process it
so we can provide that hint to drivers. This will later be
used by code for processing DFS in a way that meets the
criteria for the DFS region the country belongs to.
Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
---
include/linux/nl80211.h | 21 +++++++++++++++++++++
include/net/regulatory.h | 1 +
net/wireless/nl80211.c | 15 +++++++++++++++
net/wireless/reg.c | 37 +++++++++++++++++++++++++++++++++++++
net/wireless/reg.h | 1 +
5 files changed, 75 insertions(+), 0 deletions(-)
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index 9d797f2..2dbb799 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -1109,6 +1109,10 @@ enum nl80211_commands {
* %NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be
* used for asking the driver to perform a TDLS operation.
*
+ * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country
+ * abides to when initiating radiation on DFS channels. A country maps
+ * to one DFS region.
+ *
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
*/
@@ -1337,6 +1341,8 @@ enum nl80211_attrs {
NL80211_ATTR_TDLS_SUPPORT,
NL80211_ATTR_TDLS_EXTERNAL_SETUP,
+ NL80211_ATTR_DFS_REGION,
+
/* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST,
@@ -1843,6 +1849,21 @@ enum nl80211_reg_rule_flags {
};
/**
+ * enum nl80211_dfs_regions - regulatory DFS regions
+ *
+ * @NL80211_DFS_UNSET: Country has no DFS master region specified
+ * @NL80211_DFS_FCC_: Country follows DFS master rules from FCC
+ * @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI
+ * @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec
+ */
+enum nl80211_dfs_regions {
+ NL80211_DFS_UNSET = 0,
+ NL80211_DFS_FCC = 1,
+ NL80211_DFS_ETSI = 2,
+ NL80211_DFS_JP = 3,
+};
+
+/**
* enum nl80211_survey_info - survey information
*
* These attribute types are used with %NL80211_ATTR_SURVEY_INFO
diff --git a/include/net/regulatory.h b/include/net/regulatory.h
index eb7d3c2..7399c93 100644
--- a/include/net/regulatory.h
+++ b/include/net/regulatory.h
@@ -93,6 +93,7 @@ struct ieee80211_reg_rule {
struct ieee80211_regdomain {
u32 n_reg_rules;
char alpha2[2];
+ u8 dfs_region;
struct ieee80211_reg_rule reg_rules[];
};
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index edf655a..8d3012a 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -197,6 +197,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
[NL80211_ATTR_TDLS_OPERATION] = { .type = NLA_U8 },
[NL80211_ATTR_TDLS_SUPPORT] = { .type = NLA_FLAG },
[NL80211_ATTR_TDLS_EXTERNAL_SETUP] = { .type = NLA_FLAG },
+ [NL80211_ATTR_DFS_REGION] = { .type = NLA_U8 },
};
/* policy for the key attributes */
@@ -3348,6 +3349,9 @@ static int nl80211_get_reg(struct sk_buff *skb, struct genl_info *info)
NLA_PUT_STRING(msg, NL80211_ATTR_REG_ALPHA2,
cfg80211_regdomain->alpha2);
+ if (cfg80211_regdomain->dfs_region)
+ NLA_PUT_U8(msg, NL80211_ATTR_DFS_REGION,
+ cfg80211_regdomain->dfs_region);
nl_reg_rules = nla_nest_start(msg, NL80211_ATTR_REG_RULES);
if (!nl_reg_rules)
@@ -3406,6 +3410,7 @@ static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info)
char *alpha2 = NULL;
int rem_reg_rules = 0, r = 0;
u32 num_rules = 0, rule_idx = 0, size_of_regd;
+ u8 dfs_region = 0;
struct ieee80211_regdomain *rd = NULL;
if (!info->attrs[NL80211_ATTR_REG_ALPHA2])
@@ -3416,6 +3421,9 @@ static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info)
alpha2 = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]);
+ if (info->attrs[NL80211_ATTR_DFS_REGION])
+ dfs_region = nla_get_u8(info->attrs[NL80211_ATTR_DFS_REGION]);
+
nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES],
rem_reg_rules) {
num_rules++;
@@ -3443,6 +3451,13 @@ static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info)
rd->alpha2[0] = alpha2[0];
rd->alpha2[1] = alpha2[1];
+ /*
+ * Disable DFS master mode if the DFS region was
+ * not supported or known on this kernel.
+ */
+ if (reg_supported_dfs_region(dfs_region))
+ rd->dfs_region = dfs_region;
+
nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES],
rem_reg_rules) {
nla_parse(tb, NL80211_REG_RULE_ATTR_MAX,
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 2520a1b..69141ed 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1946,6 +1946,42 @@ static void print_rd_rules(const struct ieee80211_regdomain *rd)
}
}
+bool reg_supported_dfs_region(u8 dfs_region)
+{
+ switch (dfs_region) {
+ case NL80211_DFS_UNSET:
+ case NL80211_DFS_FCC:
+ case NL80211_DFS_ETSI:
+ case NL80211_DFS_JP:
+ return true;
+ default:
+ REG_DBG_PRINT("Ignoring uknown DFS master region: %d\n",
+ dfs_region);
+ return false;
+ }
+}
+
+static void print_dfs_region(u8 dfs_region)
+{
+ if (!dfs_region)
+ return;
+
+ switch (dfs_region) {
+ case NL80211_DFS_FCC:
+ pr_info(" DFS Master region FCC");
+ break;
+ case NL80211_DFS_ETSI:
+ pr_info(" DFS Master region ETSI");
+ break;
+ case NL80211_DFS_JP:
+ pr_info(" DFS Master region JP");
+ break;
+ default:
+ pr_info(" DFS Master region Uknown");
+ break;
+ }
+}
+
static void print_regdomain(const struct ieee80211_regdomain *rd)
{
@@ -1973,6 +2009,7 @@ static void print_regdomain(const struct ieee80211_regdomain *rd)
pr_info("Regulatory domain changed to country: %c%c\n",
rd->alpha2[0], rd->alpha2[1]);
}
+ print_dfs_region(rd->dfs_region);
print_rd_rules(rd);
}
diff --git a/net/wireless/reg.h b/net/wireless/reg.h
index 4a56799..786e414 100644
--- a/net/wireless/reg.h
+++ b/net/wireless/reg.h
@@ -5,6 +5,7 @@ extern const struct ieee80211_regdomain *cfg80211_regdomain;
bool is_world_regdom(const char *alpha2);
bool reg_is_valid_request(const char *alpha2);
+bool reg_supported_dfs_region(u8 dfs_region);
int regulatory_hint_user(const char *alpha2);
--
1.7.4.15.g7811d
^ permalink raw reply related
* [PATCH 4/4] crda: add support to send DFS master region
From: Luis R. Rodriguez @ 2011-10-11 17:59 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless, Luis R. Rodriguez
In-Reply-To: <1318355944-24708-1-git-send-email-mcgrof@qca.qualcomm.com>
wireless-regdb now has support for a DFS master region
for each country. We must read this from the file and
send it as an NL80211_ATTR_DFS_REGION attribute.
We add a "creqs" value for the country structure but only
use the first two bits as that is all we need right now.
Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
---
crda.c | 1 +
nl80211.h | 21 +++++++++++++++++++++
regdb.h | 3 ++-
3 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/crda.c b/crda.c
index fcb0c11..1e2ff22 100644
--- a/crda.c
+++ b/crda.c
@@ -280,6 +280,7 @@ int main(int argc, char **argv)
country->reg_collection_ptr);
NLA_PUT_STRING(msg, NL80211_ATTR_REG_ALPHA2, alpha2);
+ NLA_PUT_U8(msg, NL80211_ATTR_DFS_REGION, country->creqs & 0x3);
nl_reg_rules = nla_nest_start(msg, NL80211_ATTR_REG_RULES);
if (!nl_reg_rules) {
diff --git a/nl80211.h b/nl80211.h
index 9d797f2..2dbb799 100644
--- a/nl80211.h
+++ b/nl80211.h
@@ -1109,6 +1109,10 @@ enum nl80211_commands {
* %NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be
* used for asking the driver to perform a TDLS operation.
*
+ * @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country
+ * abides to when initiating radiation on DFS channels. A country maps
+ * to one DFS region.
+ *
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
*/
@@ -1337,6 +1341,8 @@ enum nl80211_attrs {
NL80211_ATTR_TDLS_SUPPORT,
NL80211_ATTR_TDLS_EXTERNAL_SETUP,
+ NL80211_ATTR_DFS_REGION,
+
/* add attributes here, update the policy in nl80211.c */
__NL80211_ATTR_AFTER_LAST,
@@ -1843,6 +1849,21 @@ enum nl80211_reg_rule_flags {
};
/**
+ * enum nl80211_dfs_regions - regulatory DFS regions
+ *
+ * @NL80211_DFS_UNSET: Country has no DFS master region specified
+ * @NL80211_DFS_FCC_: Country follows DFS master rules from FCC
+ * @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI
+ * @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec
+ */
+enum nl80211_dfs_regions {
+ NL80211_DFS_UNSET = 0,
+ NL80211_DFS_FCC = 1,
+ NL80211_DFS_ETSI = 2,
+ NL80211_DFS_JP = 3,
+};
+
+/**
* enum nl80211_survey_info - survey information
*
* These attribute types are used with %NL80211_ATTR_SURVEY_INFO
diff --git a/regdb.h b/regdb.h
index 045a0e3..f040aa1 100644
--- a/regdb.h
+++ b/regdb.h
@@ -96,7 +96,8 @@ struct regdb_file_reg_rules_collection {
struct regdb_file_reg_country {
__u8 alpha2[2];
- __u8 PAD[2];
+ __u8 PAD;
+ __u8 creqs; /* first two bits define DFS region */
/* pointer (offset) into the file to a struct
* regdb_file_reg_rules_collection */
__be32 reg_collection_ptr;
--
1.7.4.15.g7811d
^ permalink raw reply related
* [PATCH 3/4] crda: fix null string assumption for alpha2
From: Luis R. Rodriguez @ 2011-10-11 17:59 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless, Luis R. Rodriguez
In-Reply-To: <1318355944-24708-1-git-send-email-mcgrof@qca.qualcomm.com>
The wireless-regdb only accounts for two bytes for
the country code but CRDA defined the alpha2 to be
as a string of length 2, and so does the nl80211 attribute
policy:
[NL80211_ATTR_REG_ALPHA2] = { .type = NLA_STRING, .len = 2 },
The meaning of a string is it'll be null terminated, so if you
do not add the null termination a country without the null termination
will not match up with the nl80211 attribute policy.
This has no impact for us unless we want to use the next available
pad byte on the wireless-regdb. This fixes CRDA by using a local copy
of the regdb's alpha2 that is properly null terminated and sending it.
The implications of this change is that new wirelesss-regdb's that
make use of the next pad byte for a country will get that country
ignored for regulatory hints sent to the kernel. At this point we
don't yet know what the next byte will be used for though so this
has no impact. The second pad byte is being used for DFS and that
is not impacted by this nor is this change required for it.
Distributions should upgrade though in case we ever do decide to use
this last precious country byte. I've tested that this indeed fixes
the bogus issue I saw when instead of using the second pad byte we
use the first pad byte. Thanks to Johannes for spotting the issue.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
---
crda.c | 4 ++--
reglib.h | 13 -------------
2 files changed, 2 insertions(+), 15 deletions(-)
diff --git a/crda.c b/crda.c
index 6857e3f..fcb0c11 100644
--- a/crda.c
+++ b/crda.c
@@ -149,7 +149,7 @@ int main(int argc, char **argv)
struct regdb_file_header *header;
struct regdb_file_reg_country *countries;
int dblen, siglen, num_countries, i, j, r;
- char alpha2[2];
+ char alpha2[3] = {}; /* NUL-terminate */
char *env_country;
struct nl80211_state nlstate;
struct nl_cb *cb = NULL;
@@ -279,7 +279,7 @@ int main(int argc, char **argv)
sizeof(*rcoll) + num_rules * sizeof(__be32),
country->reg_collection_ptr);
- NLA_PUT_STRING(msg, NL80211_ATTR_REG_ALPHA2, (char *) country->alpha2);
+ NLA_PUT_STRING(msg, NL80211_ATTR_REG_ALPHA2, alpha2);
nl_reg_rules = nla_nest_start(msg, NL80211_ATTR_REG_RULES);
if (!nl_reg_rules) {
diff --git a/reglib.h b/reglib.h
index f3a76ef..9fe5d8b 100644
--- a/reglib.h
+++ b/reglib.h
@@ -53,21 +53,8 @@ static inline int is_alpha2(const char *alpha2)
return 0;
}
-/* Avoid stdlib */
-static inline int is_len_2(const char *alpha2)
-{
- if (alpha2[0] == '\0' || (alpha2[1] == '\0'))
- return 0;
- if (alpha2[2] == '\0')
- return 1;
- return 0;
-}
-
static inline int is_valid_regdom(const char *alpha2)
{
- if (!is_len_2(alpha2))
- return 0;
-
if (!is_alpha2(alpha2) && !is_world_regdom(alpha2))
return 0;
--
1.7.4.15.g7811d
^ permalink raw reply related
* [PATCH 2/2] wireless-regdb: add FCC as the DFS region for US
From: Luis R. Rodriguez @ 2011-10-11 17:58 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless, Luis R. Rodriguez
In-Reply-To: <1318355944-24708-1-git-send-email-mcgrof@qca.qualcomm.com>
DFS master support in the US requires consideration for DFS
requirements as defined by the FCC rules.
Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
---
db.txt | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/db.txt b/db.txt
index f0b46d8..4b7e879 100644
--- a/db.txt
+++ b/db.txt
@@ -651,7 +651,7 @@ country TR:
country UA:
(2402 - 2482 @ 40), (N/A, 20)
-country US:
+country US: DFS-FCC
(2402 - 2472 @ 40), (3, 27)
(5170 - 5250 @ 40), (3, 17)
(5250 - 5330 @ 40), (3, 20), DFS
--
1.7.4.15.g7811d
^ permalink raw reply related
* [PATCH 1/2] wireless-regdb: Add master DFS region support
From: Luis R. Rodriguez @ 2011-10-11 17:58 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless, Luis R. Rodriguez
In-Reply-To: <1318355944-24708-1-git-send-email-mcgrof@qca.qualcomm.com>
To support master DFS we add the three known DFS regions which
countries are known to support. In order to modify the regulatory
database schema in a backward compatible way we use one of
the two pad bytes which were unused. By using one of the two pad
bytes we end up keeping new regulatory databases with DFS region
support compatible with older verions of CRDA, the DFS region would
just not be sent to the kernel.
DFS master is only required for modes of operation which iniate
radiation on DFS channels, we will start supporting DFS with AP
mode of operation. Without DFS master support you cannot intiate
radiation on those channels (AP, Mesh, IBSS, P2P). Apart from support
from wireless-regd, crda and the 802.11 stack you'll also need proper
DFS support on your device driver.
A country can only map to one DFS region at a time for all frequency
regions. After this patch countries can start being mapped to their
own DFS region.
Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
---
db2bin.py | 2 +-
dbparse.py | 25 ++++++++++++++++++++-----
2 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/db2bin.py b/db2bin.py
index 23d3ee2..41d3741 100755
--- a/db2bin.py
+++ b/db2bin.py
@@ -116,7 +116,7 @@ countrynames.sort()
for alpha2 in countrynames:
coll = countries[alpha2]
# struct regdb_file_reg_country
- output.write(struct.pack('>ccxxI', str(alpha2[0]), str(alpha2[1]), reg_rules_collections[coll.permissions]))
+ output.write(struct.pack('>ccxBI', str(alpha2[0]), str(alpha2[1]), coll.dfs_region, reg_rules_collections[coll.permissions]))
if len(sys.argv) > 3:
diff --git a/dbparse.py b/dbparse.py
index 2c0d738..893d64e 100755
--- a/dbparse.py
+++ b/dbparse.py
@@ -18,6 +18,12 @@ flag_definitions = {
'NO-HT40': 1<<10,
}
+dfs_regions = {
+ 'DFS-FCC': 1,
+ 'DFS-ETSI': 2,
+ 'DFS-JP': 3,
+}
+
class FreqBand(object):
def __init__(self, start, end, bw, comments=None):
self.start = start
@@ -61,6 +67,10 @@ class PowerRestriction(object):
s = self
return hash((s.max_ant_gain, s.max_eirp))
+class DFSRegionError(Exception):
+ def __init__(self, dfs_region):
+ self.dfs_region = dfs_region
+
class FlagError(Exception):
def __init__(self, flag):
self.flag = flag
@@ -90,9 +100,15 @@ class Permission(object):
return hash(self._as_tuple())
class Country(object):
- def __init__(self, permissions=None, comments=None):
+ def __init__(self, dfs_region, permissions=None, comments=None):
self._permissions = permissions or []
self.comments = comments or []
+ self.dfs_region = 0
+
+ if dfs_region:
+ if not dfs_region in dfs_regions:
+ raise DFSRegionError(dfs_region)
+ self.dfs_region = dfs_regions[dfs_region]
def add(self, perm):
assert isinstance(perm, Permission)
@@ -224,11 +240,10 @@ class DBParser(object):
def _parse_country(self, line):
try:
- cname, line = line.split(':', 1)
+ cname, cvals= line.split(':', 1)
+ dfs_region = cvals.strip()
if not cname:
self._syntax_error("'country' keyword must be followed by name")
- if line:
- self._syntax_error("extra data at end of country line")
except ValueError:
self._syntax_error("country name must be followed by colon")
@@ -239,7 +254,7 @@ class DBParser(object):
if len(cname) != 2:
self._warn("country '%s' not alpha2" % cname)
if not cname in self._countries:
- self._countries[cname] = Country(comments=self._comments)
+ self._countries[cname] = Country(dfs_region, comments=self._comments)
self._current_countries[cname] = self._countries[cname]
self._comments = []
--
1.7.4.15.g7811d
^ permalink raw reply related
* [PATCH v2 0/7] wireless: add DFS master support
From: Luis R. Rodriguez @ 2011-10-11 17:58 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless, Luis R. Rodriguez
This is v2 of my DFS master support patches. The v2 addresses only 2 bits
on the wireless-regdb and leaves open what we do for the rest of the 6 bits.
The nl80211 interface remains the same but I also fixed a typo I had made in
my previous patches for the dfs region enums. I also throw in the fix for CRDA
for the odd behaviour observed on the last pad byte.
This set of 7 patches adds DFS master support to the Linux wireless subsystem.
I've reviewed future possible changes to DFS master regions and it seems that
we are not going to be having multiple DFS regions for one country, instead
we'll always have one DFS region for one country.
The changes here are spread out throughout wireless-regdb, crda the kernel and
lastly iw. The changes made allow for older verions of CRDA to work with new
wireless-regdb files with DFS region support. If you want DFS master region
support you'll need to upgrade your CRDA, your kernel and then hope someone
implements DFS master support for your respective driver.
This patch series does not have specific driver changes, although some seem to
be backing in the oven right now.
Luis R. Rodriguez (6):
wireless-regdb: Add master DFS region support
wireless-regdb: add FCC as the DFS region for US
crda: fix null string assumption for alpha2
crda: add support to send DFS master region
cfg80211: process regulatory DFS region for countries
cfg80211: pass DFS region to drivers through reg_notifier()
iw: add DFS region parsing support
db.txt | 2 +-
db2bin.py | 2 +-
dbparse.py | 25 ++++++++++++++++++++-----
3 files changed, 22 insertions(+), 7 deletions(-)
crda.c | 5 +++--
nl80211.h | 21 +++++++++++++++++++++
regdb.h | 3 ++-
reglib.h | 13 -------------
4 files changed, 26 insertions(+), 16 deletions(-)
include/linux/nl80211.h | 21 +++++++++++++++++++++
include/net/regulatory.h | 6 ++++++
net/wireless/nl80211.c | 15 +++++++++++++++
net/wireless/reg.c | 39 +++++++++++++++++++++++++++++++++++++++
net/wireless/reg.h | 1 +
5 files changed, 82 insertions(+), 0 deletions(-)
nl80211.h | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
reg.c | 31 +++++++++++++++++++++++++++++
2 files changed, 96 insertions(+), 0 deletions(-)
--
1.7.4.15.g7811d
^ permalink raw reply
* Re: Re: [PATCH 1/2] mac80211: Build TX radiotap header dynamically
From: Johannes Berg @ 2011-10-11 17:38 UTC (permalink / raw)
To: Helmut Schaa; +Cc: linux-wireless, linville
In-Reply-To: <3634905.slyix8Dz5L@helmutmobil.site>
On Tue, 2011-10-11 at 19:19 +0200, Helmut Schaa wrote:
> Am Dienstag, 11. Oktober 2011, 18:25:45 schrieb Johannes Berg:
> > On Tue, 2011-10-11 at 18:08 +0200, Helmut Schaa wrote:
> > Since there's no over-all memset I think you need to clear the padding
> > explicitly now.
>
> Like this one? :)
>
> > + rthdr = (struct ieee80211_radiotap_header *) skb_push(skb, rtap_len);
> > +
> > + memset(rthdr, 0, rtap_len);
Oh, oops, sorry!
Looks good to me then.
johannes
^ permalink raw reply
* Re: bug server
From: John W. Linville @ 2011-10-11 17:16 UTC (permalink / raw)
To: abutalip; +Cc: linux-wireless
In-Reply-To: <4E946F75.5000207@gmail.com>
On Tue, Oct 11, 2011 at 07:31:49PM +0300, abutalip wrote:
> Hi all,
>
> I'm new here. After I studied the notes from linuxwireless.org I
> want to start fix some bugs to become familiar with linux wireless
> code. My question is the next on: what is the IP address for the bug
> server?
> Thanks!
>
> Stefan
bugzilla.kernel.org, but it is currently unavailable...
--
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: Re: [PATCH 1/2] mac80211: Build TX radiotap header dynamically
From: Helmut Schaa @ 2011-10-11 17:19 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, linville
In-Reply-To: <1318350345.3965.11.camel@jlt3.sipsolutions.net>
Am Dienstag, 11. Oktober 2011, 18:25:45 schrieb Johannes Berg:
> On Tue, 2011-10-11 at 18:08 +0200, Helmut Schaa wrote:
> Since there's no over-all memset I think you need to clear the padding
> explicitly now.
Like this one? :)
> + rthdr = (struct ieee80211_radiotap_header *) skb_push(skb, rtap_len);
> +
> + memset(rthdr, 0, rtap_len);
Helmut
^ permalink raw reply
* Re: [PATCH v2 1/5] ath6kl: Add endpoint_stats debugfs file
From: Joe Perches @ 2011-10-11 16:39 UTC (permalink / raw)
To: Jouni Malinen; +Cc: kvalo, linux-wireless
In-Reply-To: <1318343517-15292-2-git-send-email-jouni@qca.qualcomm.com>
On Tue, 2011-10-11 at 17:31 +0300, Jouni Malinen wrote:
> This file can be used to fetch endpoint statistics counters and
> to clear them by writing 0 to it.
Hi Jouni.
[petty carping follows]
> Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
> ---
> drivers/net/wireless/ath/ath6kl/debug.c | 102 +++++++++++++++++++++++++++++++
> 1 files changed, 102 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath6kl/debug.c b/drivers/net/wireless/ath/ath6kl/debug.c
> index ba3f23d..b9bf28d 100644
> --- a/drivers/net/wireless/ath/ath6kl/debug.c
> +++ b/drivers/net/wireless/ath/ath6kl/debug.c
> @@ -595,6 +595,105 @@ static const struct file_operations fops_credit_dist_stats = {
> .llseek = default_llseek,
> };
>
> +static unsigned int print_endpoint_stat(struct htc_target *target, char *buf,
> + unsigned int buf_len, unsigned int len,
> + int offset, const char *name)
Perhaps the function name is wrong.
This doesn't print, it fills a buffer.
len and offset are to me oddly used variable names.
> +{
> + int i;
> + struct htc_endpoint_stats *ep_st;
> + u32 *counter;
> +
> + len += scnprintf(buf + len, buf_len - len, "%s:", name);
> + for (i = 0; i < ENDPOINT_MAX; i++) {
> + ep_st = &target->endpoint[i].ep_st;
> + counter = ((u32 *) ep_st) + (offset / 4);
> + len += scnprintf(buf + len, buf_len - len, " %u", *counter);
> + }
> + len += scnprintf(buf + len, buf_len - len, "\n");
> +
> + return len;
> +
perhaps:
static int endpoint_stats(struct htc_target *target,
char *buf, size_t len,
size_t pos, int index, const char *name)
{
int i;
pos += scnprintf(buf + pos, len - pos, "%s:", name);
for (i = 0; i < ENDPOINT_MAX; i++) {
u32 *stats = (u32 *)&target->endpoint[i].ep_st;
offset += scnprintf(buf + pos, len - pos, " %u", stats[index]);
}
pos += scnprintf(buf + pos, len - pos, "\n");
return pos;
}
> }
> +
> +static ssize_t ath6kl_endpoint_stats_read(struct file *file,
> + char __user *user_buf,
> + size_t count, loff_t *ppos)
> +{
> + struct ath6kl *ar = file->private_data;
> + struct htc_target *target = ar->htc_target;
> + char *buf;
> + unsigned int buf_len, len = 0;
size_t len = 0;
(or maybe pos instead)
> + ssize_t ret_cnt;
> +
> + buf_len = 1000 + ENDPOINT_MAX * 100;
It seems odd to start with size using 1000
There's ENDPOINT_MAX rows (9)
Each row contains:
up to 20 byte row name
20 counters * up to 10 bytes per counter
up to 220 bytes per row
Perhaps this?
const size_t buf_len = ENDPOINT_MAX * (20 + sizeof(struct htc_endpoint_stats) / sizeof(u32) * 10);
> + buf = kzalloc(buf_len, GFP_KERNEL);
kzalloc doesn't seem necessary,
everything is overwritten. just kmalloc?
As is, it's (barely) possible to overflow
the buffer length and end up non-null terminated.
Perhaps that doesn't matter.
> + if (!buf)
> + return -ENOMEM;
> +
> +#define EPSTAT(name) \
> + len = print_endpoint_stat(target, buf, buf_len, len, \
> + offsetof(struct htc_endpoint_stats, name), \
> + #name)
perhaps
#define EPSTAT(name) \
len = endpoint_stat(target, buf, buf_len, len, \
offsetof(struct htc_endpoint_stats, name) / sizeof(u32), \
#name)
> + EPSTAT(cred_low_indicate);
> + EPSTAT(tx_issued);
> + EPSTAT(tx_pkt_bundled);
> + EPSTAT(tx_bundles);
> + EPSTAT(tx_dropped);
> + EPSTAT(tx_cred_rpt);
> + EPSTAT(cred_rpt_from_rx);
> + EPSTAT(cred_rpt_ep0);
> + EPSTAT(cred_from_rx);
> + EPSTAT(cred_from_other);
> + EPSTAT(cred_from_ep0);
> + EPSTAT(cred_cosumd);
> + EPSTAT(cred_retnd);
> + EPSTAT(rx_pkts);
> + EPSTAT(rx_lkahds);
> + EPSTAT(rx_bundl);
> + EPSTAT(rx_bundle_lkahd);
> + EPSTAT(rx_bundle_from_hdr);
> + EPSTAT(rx_alloc_thresh_hit);
> + EPSTAT(rxalloc_thresh_byte);
> +#undef EPSTAT
> +
> + if (len > buf_len)
> + len = buf_len;
Maybe it's better to ensure 0 termination?
if (len > buf_len) {
len = buf_len;
buf[buf_len - 1] = 0;
}
> + ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len);
> + kfree(buf);
> + return ret_cnt;
> +}
^ permalink raw reply
* bug server
From: abutalip @ 2011-10-11 16:31 UTC (permalink / raw)
To: linux-wireless
Hi all,
I'm new here. After I studied the notes from linuxwireless.org I want to
start fix some bugs to become familiar with linux wireless code. My
question is the next on: what is the IP address for the bug server?
Thanks!
Stefan
^ permalink raw reply
* Re: [PATCH 1/2] mac80211: Build TX radiotap header dynamically
From: Johannes Berg @ 2011-10-11 16:25 UTC (permalink / raw)
To: Helmut Schaa; +Cc: linux-wireless, linville
In-Reply-To: <1318349335-22514-1-git-send-email-helmut.schaa@googlemail.com>
On Tue, 2011-10-11 at 18:08 +0200, Helmut Schaa wrote:
> + /* IEEE80211_RADIOTAP_RATE */
> + if (info->status.rates[0].idx >= 0 &&
> + !(info->status.rates[0].flags & IEEE80211_TX_RC_MCS)) {
> + rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_RATE);
> + *pos = sband->bitrates[info->status.rates[0].idx].bitrate / 5;
> + /* padding for tx flags */
> + pos += 2;
Since there's no over-all memset I think you need to clear the padding
explicitly now.
johannes
^ permalink raw reply
* Re: [PATCH] wl12xx: remove warning message during IBSS Tx
From: Luciano Coelho @ 2011-10-11 16:18 UTC (permalink / raw)
To: Shahar Lev; +Cc: linux-wireless
In-Reply-To: <1318344193.9690.528.camel@cumari>
On Tue, 2011-10-11 at 17:43 +0300, Luciano Coelho wrote:
> On Fri, 2011-10-07 at 18:17 +0200, Shahar Lev wrote:
> > mac80211 sets the carrier on an IBSS interface even when no network is
> > joined. Ignore garbage frames transmitted on a disconnected IBSS
> > interface without printing warnings.
> >
> > Signed-off-by: Shahar Lev <shahar@wizery.com>
> > ---
>
> Applied, thanks!
Actually I had to merge this with Eliad's vif patches, so I did this
before applying:
diff --git a/drivers/net/wireless/wl12xx/tx.c b/drivers/net/wireless/wl12xx/tx.c
index 1bc00ca..27a45e1 100644
--- a/drivers/net/wireless/wl12xx/tx.c
+++ b/drivers/net/wireless/wl12xx/tx.c
@@ -429,7 +429,7 @@ static int wl1271_prepare_tx_frame(struct wl1271 *wl, struct wl12xx_vif *wlvif,
hlid = wl12xx_tx_get_hlid(wl, wlvif, skb);
if (hlid == WL12XX_INVALID_LINK_ID) {
if (wlvif->bss_type == BSS_TYPE_IBSS &&
- !test_bit(WL1271_FLAG_IBSS_JOINED, &wl->flags)) {
+ !test_bit(WLVIF_FLAG_IBSS_JOINED, &wlvif->flags)) {
/* It's ok to drop packets when not joined to IBSS */
wl1271_debug(DEBUG_TX, "dropping skb while IBSS not "
" joined");
--
Cheers,
Luca.
^ permalink raw reply related
* Re: [PATCH v2 0/5] ath6kl: Debugging and roaming
From: Kalle Valo @ 2011-10-11 16:13 UTC (permalink / raw)
To: Jouni Malinen; +Cc: linux-wireless
In-Reply-To: <1318343517-15292-1-git-send-email-jouni@qca.qualcomm.com>
On 10/11/2011 05:31 PM, Jouni Malinen wrote:
> This set of patches adds some more ath6kl debugging information and
> control to debugfs and enables additional roaming functionality.
>
> v2 addresses the comments from Kalle to move debug functionality in
> patches 2 and 4 to debug.c.
Thanks, all five applied.
Kalle
^ permalink raw reply
* [PATCH 2/2] mac80211: Populate radiotap header with MCS info for TX frames
From: Helmut Schaa @ 2011-10-11 16:08 UTC (permalink / raw)
To: linux-wireless; +Cc: linville, johannes, Helmut Schaa
In-Reply-To: <1318349335-22514-1-git-send-email-helmut.schaa@googlemail.com>
mac80211 already filled in the MCS rate info for rx'ed frames but tx'ed
frames that are sent to a monitor interface during the status callback
lack this information.
Add the radiotap fields for MCS info to ieee80211_tx_status_rtap_hdr
and populate them when sending tx'ed frames to the monitors.
The needed headroom is only extended by one byte since we don't include
legacy rate information in the rtap header for HT frames.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
---
include/net/mac80211.h | 2 +-
net/mac80211/status.c | 23 +++++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index cd108df..b50fc1c 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2520,7 +2520,7 @@ static inline int ieee80211_sta_ps_transition_ni(struct ieee80211_sta *sta,
* The TX headroom reserved by mac80211 for its own tx_status functions.
* This is enough for the radiotap header.
*/
-#define IEEE80211_TX_STATUS_HEADROOM 13
+#define IEEE80211_TX_STATUS_HEADROOM 14
/**
* ieee80211_sta_set_buffered - inform mac80211 about driver-buffered frames
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index a9dc7b7..4b49ca7 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -242,6 +242,11 @@ static int ieee80211_tx_radiotap_len(struct ieee80211_tx_info *info)
/* IEEE80211_RADIOTAP_DATA_RETRIES */
len += 1;
+
+ /* IEEE80211_TX_RC_MCS */
+ if (info->status.rates[0].idx >= 0 &&
+ info->status.rates[0].flags & IEEE80211_TX_RC_MCS)
+ len += 3;
return len;
}
@@ -299,6 +304,24 @@ static void ieee80211_add_tx_radiotap_header(struct ieee80211_supported_band
/* for now report the total retry_count */
*pos = retry_count;
pos++;
+
+ /* IEEE80211_TX_RC_MCS */
+ if (info->status.rates[0].idx >= 0 &&
+ info->status.rates[0].flags & IEEE80211_TX_RC_MCS) {
+ rthdr->it_present |= cpu_to_le32(1 << IEEE80211_RADIOTAP_MCS);
+ pos[0] = IEEE80211_RADIOTAP_MCS_HAVE_MCS |
+ IEEE80211_RADIOTAP_MCS_HAVE_GI |
+ IEEE80211_RADIOTAP_MCS_HAVE_BW;
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
+ pos[1] |= IEEE80211_RADIOTAP_MCS_SGI;
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
+ pos[1] |= IEEE80211_RADIOTAP_MCS_BW_40;
+ if (info->status.rates[0].flags & IEEE80211_TX_RC_GREEN_FIELD)
+ pos[1] |= IEEE80211_RADIOTAP_MCS_FMT_GF;
+ pos[2] = info->status.rates[0].idx;
+ pos += 3;
+ }
+
}
/*
--
1.7.3.4
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox