mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 09:13:55 +08:00
mac80211: give virtual interface to hw_scan
When scanning, it is somewhat important to scan on the correct virtual interface. All drivers that currently implement hw_scan only support a single virtual interface, but that may change and then we'd want to be ready. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
9043f3b89a
commit
a060bbfe4e
@ -1889,6 +1889,7 @@ static void at76_dwork_hw_scan(struct work_struct *work)
|
||||
}
|
||||
|
||||
static int at76_hw_scan(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct cfg80211_scan_request *req)
|
||||
{
|
||||
struct at76_priv *priv = hw->priv;
|
||||
|
@ -512,7 +512,9 @@ static inline __le32 iwl_hw_set_rate_n_flags(u8 rate, u32 flags)
|
||||
void iwl_init_scan_params(struct iwl_priv *priv);
|
||||
int iwl_scan_cancel(struct iwl_priv *priv);
|
||||
int iwl_scan_cancel_timeout(struct iwl_priv *priv, unsigned long ms);
|
||||
int iwl_mac_hw_scan(struct ieee80211_hw *hw, struct cfg80211_scan_request *req);
|
||||
int iwl_mac_hw_scan(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct cfg80211_scan_request *req);
|
||||
void iwl_internal_short_hw_scan(struct iwl_priv *priv);
|
||||
int iwl_force_reset(struct iwl_priv *priv, int mode);
|
||||
u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame,
|
||||
|
@ -312,7 +312,8 @@ static int iwl_scan_initiate(struct iwl_priv *priv)
|
||||
}
|
||||
|
||||
int iwl_mac_hw_scan(struct ieee80211_hw *hw,
|
||||
struct cfg80211_scan_request *req)
|
||||
struct ieee80211_vif *vif,
|
||||
struct cfg80211_scan_request *req)
|
||||
{
|
||||
struct iwl_priv *priv = hw->priv;
|
||||
int ret;
|
||||
|
@ -973,6 +973,7 @@ static void hw_scan_done(struct work_struct *work)
|
||||
}
|
||||
|
||||
static int mac80211_hwsim_hw_scan(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct cfg80211_scan_request *req)
|
||||
{
|
||||
struct hw_scan_done *hsd = kzalloc(sizeof(*hsd), GFP_KERNEL);
|
||||
|
@ -856,6 +856,7 @@ out:
|
||||
}
|
||||
|
||||
static int wl1251_op_hw_scan(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct cfg80211_scan_request *req)
|
||||
{
|
||||
struct wl1251 *wl = hw->priv;
|
||||
|
@ -1523,6 +1523,7 @@ out:
|
||||
}
|
||||
|
||||
static int wl1271_op_hw_scan(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct cfg80211_scan_request *req)
|
||||
{
|
||||
struct wl1271 *wl = hw->priv;
|
||||
|
@ -1657,7 +1657,7 @@ struct ieee80211_ops {
|
||||
struct ieee80211_key_conf *conf,
|
||||
struct ieee80211_sta *sta,
|
||||
u32 iv32, u16 *phase1key);
|
||||
int (*hw_scan)(struct ieee80211_hw *hw,
|
||||
int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
struct cfg80211_scan_request *req);
|
||||
void (*sw_scan_start)(struct ieee80211_hw *hw);
|
||||
void (*sw_scan_complete)(struct ieee80211_hw *hw);
|
||||
|
@ -154,14 +154,15 @@ static inline void drv_update_tkip_key(struct ieee80211_local *local,
|
||||
}
|
||||
|
||||
static inline int drv_hw_scan(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
struct cfg80211_scan_request *req)
|
||||
{
|
||||
int ret;
|
||||
|
||||
might_sleep();
|
||||
|
||||
ret = local->ops->hw_scan(&local->hw, req);
|
||||
trace_drv_hw_scan(local, req, ret);
|
||||
ret = local->ops->hw_scan(&local->hw, &sdata->vif, req);
|
||||
trace_drv_hw_scan(local, sdata, req, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -363,23 +363,26 @@ TRACE_EVENT(drv_update_tkip_key,
|
||||
|
||||
TRACE_EVENT(drv_hw_scan,
|
||||
TP_PROTO(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
struct cfg80211_scan_request *req, int ret),
|
||||
|
||||
TP_ARGS(local, req, ret),
|
||||
TP_ARGS(local, sdata, req, ret),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
LOCAL_ENTRY
|
||||
VIF_ENTRY
|
||||
__field(int, ret)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
LOCAL_ASSIGN;
|
||||
VIF_ASSIGN;
|
||||
__entry->ret = ret;
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
LOCAL_PR_FMT " ret:%d",
|
||||
LOCAL_PR_ARG, __entry->ret
|
||||
LOCAL_PR_FMT VIF_PR_FMT " ret:%d",
|
||||
LOCAL_PR_ARG,VIF_PR_ARG, __entry->ret
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -410,7 +410,7 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
if (local->ops->hw_scan) {
|
||||
WARN_ON(!ieee80211_prep_hw_scan(local));
|
||||
rc = drv_hw_scan(local, local->hw_scan_req);
|
||||
rc = drv_hw_scan(local, sdata, local->hw_scan_req);
|
||||
} else
|
||||
rc = ieee80211_start_sw_scan(local);
|
||||
|
||||
@ -654,7 +654,7 @@ void ieee80211_scan_work(struct work_struct *work)
|
||||
}
|
||||
|
||||
if (local->hw_scan_req) {
|
||||
int rc = drv_hw_scan(local, local->hw_scan_req);
|
||||
int rc = drv_hw_scan(local, sdata, local->hw_scan_req);
|
||||
mutex_unlock(&local->scan_mtx);
|
||||
if (rc)
|
||||
ieee80211_scan_completed(&local->hw, true);
|
||||
|
Loading…
Reference in New Issue
Block a user