aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* ath9k: use the devres API for allocations/mappingsFelix Fietkau2013-01-07
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
* rt2800: refactor RFCSR initializationStanislaw Gruszka2013-01-07
| | | | | | | | | rt2800_init_rfcsr() is too big, split RF initialization into per chip functions. Code will change, but we should setup the same values onto RF registers and in the same order as before. Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl> Signed-off-by: John W. Linville <linville@tuxdriver.com>
* Merge branch 'for-john' of ↵John W. Linville2013-01-07
|\ | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
| * iwlwifi: always check that grab_nic_access succeedsEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | | | This allows to let sparse check that the NIC access is always released. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: fix spelling and value in LED registers.Eytan Lifshitz2013-01-03
| | | | | | | | | | | | | | | | Fix typo in the macro name and the wrong value. Signed-off-by: Eytan Lifshitz <eytan.lifshitz@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: move some PCIe calls to better placesJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Synchronizing the IRQ is pointless when we will then enable the RF-Kill interrupt again, but is needed before we free it and the data needed to handle IRQs; move it to the free function. Simiarly, cancelling the replenish work struct can move to the function that frees the RX data structures. Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: request IRQ only onceJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | There's no need to request the IRQ every time the device is started, we can request it just once. Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: don't treat a bool as an error codeEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | | | | | iwl_trans_grab_nic_access returns a boolean. So ret should explicitely set to an error code and not rely on the value returned by iwl_trans_grab_nic_access. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: virtualize SRAM accessEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | | | Different transports implement the access to the SRAM in different ways. Virtualize it. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: virtualize iwl_{grab,release}_nic_accessEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | | | Since different transports have different ways to wake the up the NIC, we need to virtualize it. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: use __packedJohannes Berg2013-01-03
| | | | | | | | | | | | | | Use __packed instead of __attribute__((packed)). Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: let the op_mode run a FW while in RFKILLEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | | | In some cases, the fw should run even if the NIC is in RFKILL. Make the API more flexible to allow that. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: don't verify fw after downloadEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | | | No need to verify that the fw has been written correctly. In case it hasn't, we won't get ALIVE notification. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: clean up code in AGGEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | If we take a pointer to the tid_data, then use it. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
| * iwlwifi: make the BC table layout configurableEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | This is needed for newer NICs. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | cfg80211: disallow more station changesJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | The following changes are invalid and should be disallowed when a station already exists: * supported rates changes, except for TDLS peers * listen interval changes * HT capability changes Disallow them and also update a mac80211 comment explaining how they would be racy. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: unset peer's HT 40 MHz support if not usableJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | When an interface is configured to a 20 MHz channel and the device as well as the peer are 40 MHz capable the HT capabilities of the peer are not restricted to 20 MHz, even though they're supposed to be restricted to the currently possible capabilities. Unset the 40 MHz HT capability bits in this case. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | wireless: use __alignedJohannes Berg2013-01-03
| | | | | | | | | | | | | | Use __aligned(...) instead of __attribute__((aligned(...))) in mac80211 and cfg80211. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: support HT notify channel width actionJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | Support the HT notify channel width action frame to update the rate scaling about the bandwidth the peer can receive in. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | wireless: use __packed in ieee80211.hJohannes Berg2013-01-03
| | | | | | | | | | | | Use __packed instead of __attribute__((packed)). Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: split TX aggregation stop actionJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When TX aggregation is stopped, there are a few different cases: - connection with the peer was dropped - session stop was requested locally - session stop was requested by the peer - connection was dropped while a session is stopping The behaviour in these cases should be different, if the connection is dropped then the driver should drop all frames, otherwise the frames may continue to be transmitted, aggregated in the case of a locally requested session stop or unaggregated in the case of the peer requesting session stop. Split these different cases so that the driver can act accordingly; however, treat local and remote stop the same way and ask the driver to not send frames as aggregated packets any more. In the case of connection drop, the stop callback the driver is otherwise supposed to call is no longer required. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: move ieee80211_remove_tid_tx functionJohannes Berg2013-01-03
| | | | | | | | | | | | | | To call it from ___ieee80211_stop_tx_ba_session, move the function and dependencies up. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: split out aggregation TX removalJohannes Berg2013-01-03
| | | | | | | | | | | | | | Create the function ieee80211_remove_tid_tx to call it from ___ieee80211_stop_tx_ba_session later. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: split aggregation stop by reasonJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | The initiator/tx doesn't really identify why an aggregation session is stopped, give a reason for stopping that more clearly identifies what's going on. This will help tell the driver clearly what is expected of it. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | nl80211/mac80211: support full station state in AP modeJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Today, stations are added already associated. That is inefficient if, for example, the driver has no room for stations any more because then the station will go through the entire auth/assoc handshake, only to be kicked out afterwards. To address this a bit better, at least with drivers using the new station state callback, allow hostapd to add stations in unauthenticated mode, just after receiving the AUTH frame, before even replying. Thus if there's no more space at that point, it can send a negative auth frame back. It still needs to handle later state transition errors though, of course. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | cfg80211: move some AP code to right fileJohannes Berg2013-01-03
| | | | | | | | | | | | | | Some AP code ended up in mlme.c as ap.c didn't exist when it was written, move it now. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: restrict assoc request VHT capabilitiesJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | In interoperability testing some APs showed bad behaviour if some of the VHT capabilities of the station are better than their own. Restrict the assoc request parameters - beamformee capabable, - RX STBC and - RX MCS set to the subset that the AP can support. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | cfg80211: move world roaming check for beacon hintsLuis R. Rodriguez2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We should not add new beacon hints even if the wiphy is not world roaming. Without this we were always adding a beacon hint if not world roaming for every non world roaming wiphy interface. Tested-by: Ben Greear <greearb@candelatech.com> Reported-by: Ben Greear <greearb@candelatech.com> Reported-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> [fix locking] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | cfg80211: move reg_is_world_roaming()Luis R. Rodriguez2013-01-03
| | | | | | | | | | | | | | | | | | | | | | This will be used later by other code. This has no functional change. Tested-by: Ben Greear <greearb@candelatech.com> Reported-by: Ben Greear <greearb@candelatech.com> Reported-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | cfg80211: do not process beacon hints if one is already queuedLuis R. Rodriguez2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Regulatory beacon hints are used to help with world roaming and as it is right now we learn from a beacon hint processed on one wiphy to all other wiphys. The processing of beacon hints however is scheduled and if we have a lot of interfaces we may hit the case that we'll queue a the same beacon hint many times until its processed. To avoid this do a lookup on the queued up beacon hints prior to adding a new beacon hint. If the beacon hint is removed from the pending reg beacon hint list then it would be processed and we'd ensure all wiphys would have learned from it, if its on the pending reg beacon list we'd now find it prior to it being processed. Tested-by: Ben Greear <greearb@candelatech.com> Reported-by: Ben Greear <greearb@candelatech.com> Reported-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: assign bss_conf.bssid only onceJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | Instead of checking every time bss_info_changed is called, assign the pointer once depending on the interface type and then leave it untouched until the interface type is changed. This makes the ieee80211_bss_info_change_notify() now a simple wrapper to call the driver only. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: further simplify ieee80211_bss_info_change_notifyJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | The special case in the function isn't really needed, instead make the suspend code a bit better and also easier to understand and move the warning into the driver op wrapper inline. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: reconfig bss_info_changed only if beaconingJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | For AP/IBSS/mesh interfaces, call the driver to reconfigure bss_info_changed only if the interface was beaconing before suspend, otherwise we call the driver and it might interpret the change as going from enabled to disabled. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: track enable_beacon explicitlyJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | Instead of calculating in ieee80211_bss_info_change_notify() whether beaconing should be enabled or not, set it in the correct places in the callers. This simplifies the logic in this function at the expense of offchannel, but is also more robust. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: fix channel context iterationJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | During suspend/resume channel contexts might be iterated even if they haven't been re-added to the driver, keep track of this and skip them in iteration. Also use the new status for sanity checks. Also clarify the fact that during HW restart all contexts are iterated over (thanks Eliad.) Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: clean up association better in suspendJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | When suspending, bss_info_changed() is called to disable beacons, but managed mode interfaces are simply removed (bss_info_changed() is called with "no change" only). This can lead to problems. To fix this and copy the BSS configuration, clear it during suspend and restore it on resume. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: clean up ieee80211_quiesceJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's a bit odd that there's a return value that only depends on the iftype, move that logic out of the function into the only caller that needs it. Also, since the quiescing could stop timers that trigger the sdata work, move the sdata work cancel into the function and after the actual quiesce. Finally, there's no need to call it on interfaces that are down, so don't. Change-Id: I1632d46d21ba3558ea713d035184f1939905f2f1 Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac82011: use frame control to differentiate probe resp/beaconEmmanuel Grumbach2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | The probe response/beacon management frame RX code passes a bool parameter to differentiate beacons and probe responses. This is useless since we have the frame and can thus use its frame control field. Moreover it is buggy since there is one call to ieee80211_rx_bss_info with a beacon frame that is indicated as a probe response, which is also fixed by using the frame control field, so do that. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: fix ieee80211_ie_build_vht_cap indentationJohannes Berg2013-01-03
| | | | | | | | Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | cfg80211: adjacent 80+80 MHz channel segments are invalidJohannes Berg2013-01-03
| | | | | | | | | | | | | | In that case, it's really a 160 MHz channel, so disallow this configuration. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | mac80211: optimise AP stop RCU handlingJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | If there are VLANs, stopping an AP is inefficient as it calls rcu_barrier() once for each interface (the VLANs and the AP itself). Optimise this by moving rcu_barrier() out of the station cleanups and calling it only once for all interfaces combined. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: use IS_ERR macro family for freq_reg_infoJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | Instead of returning an error and filling a pointer return the pointer and an ERR_PTR value in error cases. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: use RCU to protect last_requestJohannes Berg2013-01-03
| | | | | | | | | | | | | | This will allow making freq_reg_info() lock-free. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: use RCU to protect global and wiphy regdomainsJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | To simplify the locking and not require cfg80211_mutex (which nl80211 uses to access the global regdomain) and also to make it possible for drivers to access their wiphy->regd safely, use RCU to protect these pointers. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: pass new regdomain to reset functionJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | Instead of assigning after calling the function do it inside the function. This will later avoid a period of time where the pointer is NULL. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: remove handling of channel bandwidthJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | The channel bandwidth handling isn't really quite right, it assumes that a 40 MHz channel is really two 20 MHz channels, which isn't strictly true. This is the way the regulatory database handling is defined right now though so remove the logic to handle other channel widths. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: fix reg_is_valid_request handlingJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's a bug with the world regulatory domain, it can be updated any time which is different from all other regdomains that can only be updated once after a request for them. Fix this by adding a check for "processed" to the reg_is_valid_request() function and clear that when doing a request. While looking at this I also found another locking bug, last_request is protected by the reg_mutex not the cfg80211_mutex so the code in nl80211 is racy. Remove that code as it only tries to prevent an allocation in an error case, which isn't necessary. Then the function can also become static and locking in nl80211 can have a smaller scope. Also change __set_regdom() to do the checks earlier and not different for world/other regdomains. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: remove locking from wiphy_apply_custom_regulatoryJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | wiphy_apply_custom_regulatory() doesn't have to hold the regulatory mutex as it only modifies the given wiphy with the given regulatory domain, it doesn't access any global regulatory data. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: clarify locking rules and assertionsJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Many places that currently check that cfg80211_mutex is held don't actually use any data protected by it. The functions that need to hold the cfg80211_mutex are the ones using the cfg80211_regdomain variable, so add the lock assertion to those and clarify this in the comments. The reason for this is that nl80211 uses the regdom without being able to hold reg_mutex. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
* | regulatory: simplify freq_reg_info_regdJohannes Berg2013-01-03
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The function itself has dual-purpose: it can retrieve from a given regdomain or from the globally installed one. Change it to have a single purpose only: to look up from a given regdomain. Pass the correct regdomain in the freq_reg_info() function instead. This also changes the locking rules for it, no locking is required any more. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>