You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Conflicts: drivers/net/wireless/iwmc3200wifi/cfg80211.c drivers/net/wireless/mwifiex/cfg80211.c
This commit is contained in:
@@ -404,7 +404,6 @@
|
||||
!Finclude/net/mac80211.h ieee80211_get_tkip_p1k
|
||||
!Finclude/net/mac80211.h ieee80211_get_tkip_p1k_iv
|
||||
!Finclude/net/mac80211.h ieee80211_get_tkip_p2k
|
||||
!Finclude/net/mac80211.h ieee80211_key_removed
|
||||
</chapter>
|
||||
|
||||
<chapter id="powersave">
|
||||
|
||||
@@ -966,11 +966,11 @@ static int ath6kl_set_probed_ssids(struct ath6kl *ar,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath6kl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
|
||||
static int ath6kl_cfg80211_scan(struct wiphy *wiphy,
|
||||
struct cfg80211_scan_request *request)
|
||||
{
|
||||
struct ath6kl *ar = ath6kl_priv(ndev);
|
||||
struct ath6kl_vif *vif = netdev_priv(ndev);
|
||||
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(request->wdev);
|
||||
struct ath6kl *ar = ath6kl_priv(vif->ndev);
|
||||
s8 n_channels = 0;
|
||||
u16 *channels = NULL;
|
||||
int ret = 0;
|
||||
@@ -1487,14 +1487,14 @@ static int ath6kl_cfg80211_set_power_mgmt(struct wiphy *wiphy,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct net_device *ath6kl_cfg80211_add_iface(struct wiphy *wiphy,
|
||||
char *name,
|
||||
enum nl80211_iftype type,
|
||||
u32 *flags,
|
||||
struct vif_params *params)
|
||||
static struct wireless_dev *ath6kl_cfg80211_add_iface(struct wiphy *wiphy,
|
||||
char *name,
|
||||
enum nl80211_iftype type,
|
||||
u32 *flags,
|
||||
struct vif_params *params)
|
||||
{
|
||||
struct ath6kl *ar = wiphy_priv(wiphy);
|
||||
struct net_device *ndev;
|
||||
struct wireless_dev *wdev;
|
||||
u8 if_idx, nw_type;
|
||||
|
||||
if (ar->num_vif == ar->vif_max) {
|
||||
@@ -1507,20 +1507,20 @@ static struct net_device *ath6kl_cfg80211_add_iface(struct wiphy *wiphy,
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
ndev = ath6kl_interface_add(ar, name, type, if_idx, nw_type);
|
||||
if (!ndev)
|
||||
wdev = ath6kl_interface_add(ar, name, type, if_idx, nw_type);
|
||||
if (!wdev)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ar->num_vif++;
|
||||
|
||||
return ndev;
|
||||
return wdev;
|
||||
}
|
||||
|
||||
static int ath6kl_cfg80211_del_iface(struct wiphy *wiphy,
|
||||
struct net_device *ndev)
|
||||
struct wireless_dev *wdev)
|
||||
{
|
||||
struct ath6kl *ar = wiphy_priv(wiphy);
|
||||
struct ath6kl_vif *vif = netdev_priv(ndev);
|
||||
struct ath6kl_vif *vif = netdev_priv(wdev->netdev);
|
||||
|
||||
spin_lock_bh(&ar->list_lock);
|
||||
list_del(&vif->list);
|
||||
@@ -2975,14 +2975,14 @@ static int ath6kl_change_station(struct wiphy *wiphy, struct net_device *dev,
|
||||
}
|
||||
|
||||
static int ath6kl_remain_on_channel(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct wireless_dev *wdev,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type,
|
||||
unsigned int duration,
|
||||
u64 *cookie)
|
||||
{
|
||||
struct ath6kl *ar = ath6kl_priv(dev);
|
||||
struct ath6kl_vif *vif = netdev_priv(dev);
|
||||
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);
|
||||
struct ath6kl *ar = ath6kl_priv(vif->ndev);
|
||||
u32 id;
|
||||
|
||||
/* TODO: if already pending or ongoing remain-on-channel,
|
||||
@@ -2999,11 +2999,11 @@ static int ath6kl_remain_on_channel(struct wiphy *wiphy,
|
||||
}
|
||||
|
||||
static int ath6kl_cancel_remain_on_channel(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct wireless_dev *wdev,
|
||||
u64 cookie)
|
||||
{
|
||||
struct ath6kl *ar = ath6kl_priv(dev);
|
||||
struct ath6kl_vif *vif = netdev_priv(dev);
|
||||
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);
|
||||
struct ath6kl *ar = ath6kl_priv(vif->ndev);
|
||||
|
||||
if (cookie != vif->last_roc_id)
|
||||
return -ENOENT;
|
||||
@@ -3134,15 +3134,15 @@ static bool ath6kl_is_p2p_go_ssid(const u8 *buf, size_t len)
|
||||
return false;
|
||||
}
|
||||
|
||||
static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
|
||||
static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
struct ieee80211_channel *chan, bool offchan,
|
||||
enum nl80211_channel_type channel_type,
|
||||
bool channel_type_valid, unsigned int wait,
|
||||
const u8 *buf, size_t len, bool no_cck,
|
||||
bool dont_wait_for_ack, u64 *cookie)
|
||||
{
|
||||
struct ath6kl *ar = ath6kl_priv(dev);
|
||||
struct ath6kl_vif *vif = netdev_priv(dev);
|
||||
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);
|
||||
struct ath6kl *ar = ath6kl_priv(vif->ndev);
|
||||
u32 id;
|
||||
const struct ieee80211_mgmt *mgmt;
|
||||
bool more_data, queued;
|
||||
@@ -3187,10 +3187,10 @@ static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
|
||||
}
|
||||
|
||||
static void ath6kl_mgmt_frame_register(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct wireless_dev *wdev,
|
||||
u16 frame_type, bool reg)
|
||||
{
|
||||
struct ath6kl_vif *vif = netdev_priv(dev);
|
||||
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);
|
||||
|
||||
ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "%s: frame_type=0x%x reg=%d\n",
|
||||
__func__, frame_type, reg);
|
||||
@@ -3477,9 +3477,9 @@ void ath6kl_cfg80211_vif_cleanup(struct ath6kl_vif *vif)
|
||||
ar->num_vif--;
|
||||
}
|
||||
|
||||
struct net_device *ath6kl_interface_add(struct ath6kl *ar, char *name,
|
||||
enum nl80211_iftype type, u8 fw_vif_idx,
|
||||
u8 nw_type)
|
||||
struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, char *name,
|
||||
enum nl80211_iftype type,
|
||||
u8 fw_vif_idx, u8 nw_type)
|
||||
{
|
||||
struct net_device *ndev;
|
||||
struct ath6kl_vif *vif;
|
||||
@@ -3533,7 +3533,7 @@ struct net_device *ath6kl_interface_add(struct ath6kl *ar, char *name,
|
||||
list_add_tail(&vif->list, &ar->vif_list);
|
||||
spin_unlock_bh(&ar->list_lock);
|
||||
|
||||
return ndev;
|
||||
return &vif->wdev;
|
||||
|
||||
err:
|
||||
aggr_module_destroy(vif->aggr_cntxt);
|
||||
|
||||
@@ -25,9 +25,9 @@ enum ath6kl_cfg_suspend_mode {
|
||||
ATH6KL_CFG_SUSPEND_SCHED_SCAN,
|
||||
};
|
||||
|
||||
struct net_device *ath6kl_interface_add(struct ath6kl *ar, char *name,
|
||||
enum nl80211_iftype type,
|
||||
u8 fw_vif_idx, u8 nw_type);
|
||||
struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, char *name,
|
||||
enum nl80211_iftype type,
|
||||
u8 fw_vif_idx, u8 nw_type);
|
||||
void ath6kl_cfg80211_ch_switch_notify(struct ath6kl_vif *vif, int freq,
|
||||
enum wmi_phy_mode mode);
|
||||
void ath6kl_cfg80211_scan_complete_event(struct ath6kl_vif *vif, bool aborted);
|
||||
|
||||
@@ -56,7 +56,7 @@ EXPORT_SYMBOL(ath6kl_core_rx_complete);
|
||||
int ath6kl_core_init(struct ath6kl *ar, enum ath6kl_htc_type htc_type)
|
||||
{
|
||||
struct ath6kl_bmi_target_info targ_info;
|
||||
struct net_device *ndev;
|
||||
struct wireless_dev *wdev;
|
||||
int ret = 0, i;
|
||||
|
||||
switch (htc_type) {
|
||||
@@ -187,12 +187,12 @@ int ath6kl_core_init(struct ath6kl *ar, enum ath6kl_htc_type htc_type)
|
||||
rtnl_lock();
|
||||
|
||||
/* Add an initial station interface */
|
||||
ndev = ath6kl_interface_add(ar, "wlan%d", NL80211_IFTYPE_STATION, 0,
|
||||
wdev = ath6kl_interface_add(ar, "wlan%d", NL80211_IFTYPE_STATION, 0,
|
||||
INFRA_NETWORK);
|
||||
|
||||
rtnl_unlock();
|
||||
|
||||
if (!ndev) {
|
||||
if (!wdev) {
|
||||
ath6kl_err("Failed to instantiate a network device\n");
|
||||
ret = -ENOMEM;
|
||||
wiphy_unregister(ar->wiphy);
|
||||
@@ -200,7 +200,7 @@ int ath6kl_core_init(struct ath6kl *ar, enum ath6kl_htc_type htc_type)
|
||||
}
|
||||
|
||||
ath6kl_dbg(ATH6KL_DBG_TRC, "%s: name=%s dev=0x%p, ar=0x%p\n",
|
||||
__func__, ndev->name, ndev, ar);
|
||||
__func__, wdev->netdev->name, wdev->netdev, ar);
|
||||
|
||||
return ret;
|
||||
|
||||
|
||||
@@ -589,6 +589,11 @@ struct ath6kl_vif {
|
||||
struct list_head mc_filter;
|
||||
};
|
||||
|
||||
static inline struct ath6kl_vif *ath6kl_vif_from_wdev(struct wireless_dev *wdev)
|
||||
{
|
||||
return container_of(wdev, struct ath6kl_vif, wdev);
|
||||
}
|
||||
|
||||
#define WOW_LIST_ID 0
|
||||
#define WOW_HOST_REQ_DELAY 500 /* ms */
|
||||
|
||||
|
||||
@@ -474,7 +474,7 @@ static int ath6kl_wmi_remain_on_chnl_event_rx(struct wmi *wmi, u8 *datap,
|
||||
return -EINVAL;
|
||||
}
|
||||
id = vif->last_roc_id;
|
||||
cfg80211_ready_on_channel(vif->ndev, id, chan, NL80211_CHAN_NO_HT,
|
||||
cfg80211_ready_on_channel(&vif->wdev, id, chan, NL80211_CHAN_NO_HT,
|
||||
dur, GFP_ATOMIC);
|
||||
|
||||
return 0;
|
||||
@@ -513,7 +513,7 @@ static int ath6kl_wmi_cancel_remain_on_chnl_event_rx(struct wmi *wmi,
|
||||
else
|
||||
id = vif->last_roc_id; /* timeout on uncanceled r-o-c */
|
||||
vif->last_cancel_roc_id = 0;
|
||||
cfg80211_remain_on_channel_expired(vif->ndev, id, chan,
|
||||
cfg80211_remain_on_channel_expired(&vif->wdev, id, chan,
|
||||
NL80211_CHAN_NO_HT, GFP_ATOMIC);
|
||||
|
||||
return 0;
|
||||
@@ -533,7 +533,7 @@ static int ath6kl_wmi_tx_status_event_rx(struct wmi *wmi, u8 *datap, int len,
|
||||
ath6kl_dbg(ATH6KL_DBG_WMI, "tx_status: id=%x ack_status=%u\n",
|
||||
id, ev->ack_status);
|
||||
if (wmi->last_mgmt_tx_frame) {
|
||||
cfg80211_mgmt_tx_status(vif->ndev, id,
|
||||
cfg80211_mgmt_tx_status(&vif->wdev, id,
|
||||
wmi->last_mgmt_tx_frame,
|
||||
wmi->last_mgmt_tx_frame_len,
|
||||
!!ev->ack_status, GFP_ATOMIC);
|
||||
@@ -568,7 +568,7 @@ static int ath6kl_wmi_rx_probe_req_event_rx(struct wmi *wmi, u8 *datap, int len,
|
||||
dlen, freq, vif->probe_req_report);
|
||||
|
||||
if (vif->probe_req_report || vif->nw_type == AP_NETWORK)
|
||||
cfg80211_rx_mgmt(vif->ndev, freq, 0,
|
||||
cfg80211_rx_mgmt(&vif->wdev, freq, 0,
|
||||
ev->data, dlen, GFP_ATOMIC);
|
||||
|
||||
return 0;
|
||||
@@ -608,7 +608,7 @@ static int ath6kl_wmi_rx_action_event_rx(struct wmi *wmi, u8 *datap, int len,
|
||||
return -EINVAL;
|
||||
}
|
||||
ath6kl_dbg(ATH6KL_DBG_WMI, "rx_action: len=%u freq=%u\n", dlen, freq);
|
||||
cfg80211_rx_mgmt(vif->ndev, freq, 0,
|
||||
cfg80211_rx_mgmt(&vif->wdev, freq, 0,
|
||||
ev->data, dlen, GFP_ATOMIC);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -691,9 +691,10 @@ scan_out:
|
||||
}
|
||||
|
||||
static s32
|
||||
brcmf_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
|
||||
brcmf_cfg80211_scan(struct wiphy *wiphy,
|
||||
struct cfg80211_scan_request *request)
|
||||
{
|
||||
struct net_device *ndev = request->wdev->netdev;
|
||||
s32 err = 0;
|
||||
|
||||
WL_TRACE("Enter\n");
|
||||
|
||||
@@ -5359,7 +5359,7 @@ il_mac_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
if (changes & BSS_CHANGED_ASSOC) {
|
||||
D_MAC80211("ASSOC %d\n", bss_conf->assoc);
|
||||
if (bss_conf->assoc) {
|
||||
il->timestamp = bss_conf->last_tsf;
|
||||
il->timestamp = bss_conf->sync_tsf;
|
||||
|
||||
if (!il_is_rfkill(il))
|
||||
il->ops->post_associate(il);
|
||||
|
||||
@@ -1447,7 +1447,7 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw,
|
||||
|
||||
if (changes & BSS_CHANGED_ASSOC) {
|
||||
if (bss_conf->assoc) {
|
||||
priv->timestamp = bss_conf->last_tsf;
|
||||
priv->timestamp = bss_conf->sync_tsf;
|
||||
ctx->staging.filter_flags |= RXON_FILTER_ASSOC_MSK;
|
||||
} else {
|
||||
/*
|
||||
|
||||
@@ -805,7 +805,6 @@ void lbs_scan_done(struct lbs_private *priv)
|
||||
}
|
||||
|
||||
static int lbs_cfg_scan(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct cfg80211_scan_request *request)
|
||||
{
|
||||
struct lbs_private *priv = wiphy_priv(wiphy);
|
||||
|
||||
@@ -1440,9 +1440,10 @@ mwifiex_cfg80211_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
|
||||
* it also informs the results.
|
||||
*/
|
||||
static int
|
||||
mwifiex_cfg80211_scan(struct wiphy *wiphy, struct net_device *dev,
|
||||
mwifiex_cfg80211_scan(struct wiphy *wiphy,
|
||||
struct cfg80211_scan_request *request)
|
||||
{
|
||||
struct net_device *dev = request->wdev->netdev;
|
||||
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
||||
int i;
|
||||
struct ieee80211_channel *chan;
|
||||
@@ -1576,11 +1577,11 @@ mwifiex_setup_ht_caps(struct ieee80211_sta_ht_cap *ht_info,
|
||||
/*
|
||||
* create a new virtual interface with the given name
|
||||
*/
|
||||
struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
||||
char *name,
|
||||
enum nl80211_iftype type,
|
||||
u32 *flags,
|
||||
struct vif_params *params)
|
||||
struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
||||
char *name,
|
||||
enum nl80211_iftype type,
|
||||
u32 *flags,
|
||||
struct vif_params *params)
|
||||
{
|
||||
struct mwifiex_adapter *adapter = mwifiex_cfg80211_get_adapter(wiphy);
|
||||
struct mwifiex_private *priv;
|
||||
@@ -1701,16 +1702,16 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
mwifiex_dev_debugfs_init(priv);
|
||||
#endif
|
||||
return dev;
|
||||
return wdev;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mwifiex_add_virtual_intf);
|
||||
|
||||
/*
|
||||
* del_virtual_intf: remove the virtual interface determined by dev
|
||||
*/
|
||||
int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct net_device *dev)
|
||||
int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev)
|
||||
{
|
||||
struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
|
||||
struct mwifiex_private *priv = mwifiex_netdev_get_priv(wdev->netdev);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
mwifiex_dev_debugfs_remove(priv);
|
||||
@@ -1722,11 +1723,11 @@ int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct net_device *dev)
|
||||
if (netif_carrier_ok(priv->netdev))
|
||||
netif_carrier_off(priv->netdev);
|
||||
|
||||
if (dev->reg_state == NETREG_REGISTERED)
|
||||
unregister_netdevice(dev);
|
||||
if (wdev->netdev->reg_state == NETREG_REGISTERED)
|
||||
unregister_netdevice(wdev->netdev);
|
||||
|
||||
if (dev->reg_state == NETREG_UNREGISTERED)
|
||||
free_netdev(dev);
|
||||
if (wdev->netdev->reg_state == NETREG_UNREGISTERED)
|
||||
free_netdev(wdev->netdev);
|
||||
|
||||
/* Clear the priv in adapter */
|
||||
priv->netdev = NULL;
|
||||
|
||||
@@ -377,7 +377,7 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
|
||||
goto done;
|
||||
|
||||
err_add_intf:
|
||||
mwifiex_del_virtual_intf(adapter->wiphy, priv->netdev);
|
||||
mwifiex_del_virtual_intf(adapter->wiphy, priv->wdev);
|
||||
rtnl_unlock();
|
||||
err_init_fw:
|
||||
pr_debug("info: %s: unregister device\n", __func__);
|
||||
@@ -844,7 +844,7 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem)
|
||||
|
||||
rtnl_lock();
|
||||
if (priv->wdev && priv->netdev)
|
||||
mwifiex_del_virtual_intf(adapter->wiphy, priv->netdev);
|
||||
mwifiex_del_virtual_intf(adapter->wiphy, priv->wdev);
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
||||
|
||||
@@ -1005,10 +1005,12 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
|
||||
int mwifiex_check_network_compatibility(struct mwifiex_private *priv,
|
||||
struct mwifiex_bssdescriptor *bss_desc);
|
||||
|
||||
struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
||||
char *name, enum nl80211_iftype type,
|
||||
u32 *flags, struct vif_params *params);
|
||||
int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct net_device *dev);
|
||||
struct wireless_dev *mwifiex_add_virtual_intf(struct wiphy *wiphy,
|
||||
char *name,
|
||||
enum nl80211_iftype type,
|
||||
u32 *flags,
|
||||
struct vif_params *params);
|
||||
int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev);
|
||||
|
||||
void mwifiex_set_sys_config_invalid_data(struct mwifiex_uap_bss_param *config);
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ static int orinoco_change_vif(struct wiphy *wiphy, struct net_device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
static int orinoco_scan(struct wiphy *wiphy, struct net_device *dev,
|
||||
static int orinoco_scan(struct wiphy *wiphy,
|
||||
struct cfg80211_scan_request *request)
|
||||
{
|
||||
struct orinoco_private *priv = wiphy_priv(wiphy);
|
||||
|
||||
@@ -484,7 +484,7 @@ static int rndis_change_virtual_intf(struct wiphy *wiphy,
|
||||
enum nl80211_iftype type, u32 *flags,
|
||||
struct vif_params *params);
|
||||
|
||||
static int rndis_scan(struct wiphy *wiphy, struct net_device *dev,
|
||||
static int rndis_scan(struct wiphy *wiphy,
|
||||
struct cfg80211_scan_request *request);
|
||||
|
||||
static int rndis_set_wiphy_params(struct wiphy *wiphy, u32 changed);
|
||||
@@ -1941,9 +1941,10 @@ static int rndis_get_tx_power(struct wiphy *wiphy, int *dbm)
|
||||
}
|
||||
|
||||
#define SCAN_DELAY_JIFFIES (6 * HZ)
|
||||
static int rndis_scan(struct wiphy *wiphy, struct net_device *dev,
|
||||
static int rndis_scan(struct wiphy *wiphy,
|
||||
struct cfg80211_scan_request *request)
|
||||
{
|
||||
struct net_device *dev = request->wdev->netdev;
|
||||
struct usbnet *usbdev = netdev_priv(dev);
|
||||
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
|
||||
int ret;
|
||||
|
||||
@@ -102,7 +102,7 @@ void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev,
|
||||
|
||||
/* Update the AID, this is needed for dynamic PS support */
|
||||
rt2x00dev->aid = bss_conf->assoc ? bss_conf->aid : 0;
|
||||
rt2x00dev->last_beacon = bss_conf->last_tsf;
|
||||
rt2x00dev->last_beacon = bss_conf->sync_tsf;
|
||||
|
||||
/* Update global beacon interval time, this is needed for PS support */
|
||||
rt2x00dev->beacon_int = bss_conf->beacon_int;
|
||||
|
||||
@@ -771,6 +771,9 @@ enum nl80211_commands {
|
||||
* @NL80211_ATTR_IFNAME: network interface name
|
||||
* @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype
|
||||
*
|
||||
* @NL80211_ATTR_WDEV: wireless device identifier, used for pseudo-devices
|
||||
* that don't have a netdev (u64)
|
||||
*
|
||||
* @NL80211_ATTR_MAC: MAC address (various uses)
|
||||
*
|
||||
* @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of
|
||||
@@ -1493,6 +1496,8 @@ enum nl80211_attrs {
|
||||
|
||||
NL80211_ATTR_BG_SCAN_PERIOD,
|
||||
|
||||
NL80211_ATTR_WDEV,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
|
||||
+43
-32
@@ -999,7 +999,7 @@ struct cfg80211_ssid {
|
||||
* @ie_len: length of ie in octets
|
||||
* @rates: bitmap of rates to advertise for each band
|
||||
* @wiphy: the wiphy this was for
|
||||
* @dev: the interface
|
||||
* @wdev: the wireless device to scan for
|
||||
* @aborted: (internal) scan request was notified as aborted
|
||||
* @no_cck: used to send probe requests at non CCK rate in 2GHz band
|
||||
*/
|
||||
@@ -1012,9 +1012,10 @@ struct cfg80211_scan_request {
|
||||
|
||||
u32 rates[IEEE80211_NUM_BANDS];
|
||||
|
||||
struct wireless_dev *wdev;
|
||||
|
||||
/* internal */
|
||||
struct wiphy *wiphy;
|
||||
struct net_device *dev;
|
||||
bool aborted;
|
||||
bool no_cck;
|
||||
|
||||
@@ -1435,10 +1436,10 @@ struct cfg80211_gtk_rekey_data {
|
||||
*
|
||||
* @add_virtual_intf: create a new virtual interface with the given name,
|
||||
* must set the struct wireless_dev's iftype. Beware: You must create
|
||||
* the new netdev in the wiphy's network namespace! Returns the netdev,
|
||||
* or an ERR_PTR.
|
||||
* the new netdev in the wiphy's network namespace! Returns the struct
|
||||
* wireless_dev, or an ERR_PTR.
|
||||
*
|
||||
* @del_virtual_intf: remove the virtual interface determined by ifindex.
|
||||
* @del_virtual_intf: remove the virtual interface
|
||||
*
|
||||
* @change_virtual_intf: change type/configuration of virtual interface,
|
||||
* keep the struct wireless_dev's iftype updated.
|
||||
@@ -1617,12 +1618,13 @@ struct cfg80211_ops {
|
||||
int (*resume)(struct wiphy *wiphy);
|
||||
void (*set_wakeup)(struct wiphy *wiphy, bool enabled);
|
||||
|
||||
struct net_device * (*add_virtual_intf)(struct wiphy *wiphy,
|
||||
char *name,
|
||||
enum nl80211_iftype type,
|
||||
u32 *flags,
|
||||
struct vif_params *params);
|
||||
int (*del_virtual_intf)(struct wiphy *wiphy, struct net_device *dev);
|
||||
struct wireless_dev * (*add_virtual_intf)(struct wiphy *wiphy,
|
||||
char *name,
|
||||
enum nl80211_iftype type,
|
||||
u32 *flags,
|
||||
struct vif_params *params);
|
||||
int (*del_virtual_intf)(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev);
|
||||
int (*change_virtual_intf)(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
enum nl80211_iftype type, u32 *flags,
|
||||
@@ -1699,7 +1701,7 @@ struct cfg80211_ops {
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type);
|
||||
|
||||
int (*scan)(struct wiphy *wiphy, struct net_device *dev,
|
||||
int (*scan)(struct wiphy *wiphy,
|
||||
struct cfg80211_scan_request *request);
|
||||
|
||||
int (*auth)(struct wiphy *wiphy, struct net_device *dev,
|
||||
@@ -1753,23 +1755,23 @@ struct cfg80211_ops {
|
||||
int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev);
|
||||
|
||||
int (*remain_on_channel)(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct wireless_dev *wdev,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type,
|
||||
unsigned int duration,
|
||||
u64 *cookie);
|
||||
int (*cancel_remain_on_channel)(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct wireless_dev *wdev,
|
||||
u64 cookie);
|
||||
|
||||
int (*mgmt_tx)(struct wiphy *wiphy, struct net_device *dev,
|
||||
int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
struct ieee80211_channel *chan, bool offchan,
|
||||
enum nl80211_channel_type channel_type,
|
||||
bool channel_type_valid, unsigned int wait,
|
||||
const u8 *buf, size_t len, bool no_cck,
|
||||
bool dont_wait_for_ack, u64 *cookie);
|
||||
int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct wireless_dev *wdev,
|
||||
u64 cookie);
|
||||
|
||||
int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev,
|
||||
@@ -1780,7 +1782,7 @@ struct cfg80211_ops {
|
||||
s32 rssi_thold, u32 rssi_hyst);
|
||||
|
||||
void (*mgmt_frame_register)(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct wireless_dev *wdev,
|
||||
u16 frame_type, bool reg);
|
||||
|
||||
int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant);
|
||||
@@ -2341,17 +2343,25 @@ struct cfg80211_internal_bss;
|
||||
struct cfg80211_cached_keys;
|
||||
|
||||
/**
|
||||
* struct wireless_dev - wireless per-netdev state
|
||||
* struct wireless_dev - wireless device state
|
||||
*
|
||||
* This structure must be allocated by the driver/stack
|
||||
* that uses the ieee80211_ptr field in struct net_device
|
||||
* (this is intentional so it can be allocated along with
|
||||
* the netdev.)
|
||||
* For netdevs, this structure must be allocated by the driver
|
||||
* that uses the ieee80211_ptr field in struct net_device (this
|
||||
* is intentional so it can be allocated along with the netdev.)
|
||||
* It need not be registered then as netdev registration will
|
||||
* be intercepted by cfg80211 to see the new wireless device.
|
||||
*
|
||||
* For non-netdev uses, it must also be allocated by the driver
|
||||
* in response to the cfg80211 callbacks that require it, as
|
||||
* there's no netdev registration in that case it may not be
|
||||
* allocated outside of callback operations that return it.
|
||||
*
|
||||
* @wiphy: pointer to hardware description
|
||||
* @iftype: interface type
|
||||
* @list: (private) Used to collect the interfaces
|
||||
* @netdev: (private) Used to reference back to the netdev
|
||||
* @netdev: (private) Used to reference back to the netdev, may be %NULL
|
||||
* @identifier: (private) Identifier used in nl80211 to identify this
|
||||
* wireless device if it has no netdev
|
||||
* @current_bss: (private) Used by the internal configuration code
|
||||
* @channel: (private) Used by the internal configuration code to track
|
||||
* the user-set AP, monitor and WDS channel
|
||||
@@ -2383,6 +2393,8 @@ struct wireless_dev {
|
||||
struct list_head list;
|
||||
struct net_device *netdev;
|
||||
|
||||
u32 identifier;
|
||||
|
||||
struct list_head mgmt_registrations;
|
||||
spinlock_t mgmt_registrations_lock;
|
||||
|
||||
@@ -3269,7 +3281,7 @@ void cfg80211_disconnected(struct net_device *dev, u16 reason,
|
||||
|
||||
/**
|
||||
* cfg80211_ready_on_channel - notification of remain_on_channel start
|
||||
* @dev: network device
|
||||
* @wdev: wireless device
|
||||
* @cookie: the request cookie
|
||||
* @chan: The current channel (from remain_on_channel request)
|
||||
* @channel_type: Channel type
|
||||
@@ -3277,21 +3289,20 @@ void cfg80211_disconnected(struct net_device *dev, u16 reason,
|
||||
* channel
|
||||
* @gfp: allocation flags
|
||||
*/
|
||||
void cfg80211_ready_on_channel(struct net_device *dev, u64 cookie,
|
||||
void cfg80211_ready_on_channel(struct wireless_dev *wdev, u64 cookie,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type,
|
||||
unsigned int duration, gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_remain_on_channel_expired - remain_on_channel duration expired
|
||||
* @dev: network device
|
||||
* @wdev: wireless device
|
||||
* @cookie: the request cookie
|
||||
* @chan: The current channel (from remain_on_channel request)
|
||||
* @channel_type: Channel type
|
||||
* @gfp: allocation flags
|
||||
*/
|
||||
void cfg80211_remain_on_channel_expired(struct net_device *dev,
|
||||
u64 cookie,
|
||||
void cfg80211_remain_on_channel_expired(struct wireless_dev *wdev, u64 cookie,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type,
|
||||
gfp_t gfp);
|
||||
@@ -3319,7 +3330,7 @@ void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_rx_mgmt - notification of received, unprocessed management frame
|
||||
* @dev: network device
|
||||
* @wdev: wireless device receiving the frame
|
||||
* @freq: Frequency on which the frame was received in MHz
|
||||
* @sig_dbm: signal strength in mBm, or 0 if unknown
|
||||
* @buf: Management frame (header + body)
|
||||
@@ -3334,12 +3345,12 @@ void cfg80211_del_sta(struct net_device *dev, const u8 *mac_addr, gfp_t gfp);
|
||||
* This function is called whenever an Action frame is received for a station
|
||||
* mode interface, but is not processed in kernel.
|
||||
*/
|
||||
bool cfg80211_rx_mgmt(struct net_device *dev, int freq, int sig_dbm,
|
||||
bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
|
||||
const u8 *buf, size_t len, gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_mgmt_tx_status - notification of TX status for management frame
|
||||
* @dev: network device
|
||||
* @wdev: wireless device receiving the frame
|
||||
* @cookie: Cookie returned by cfg80211_ops::mgmt_tx()
|
||||
* @buf: Management frame (header + body)
|
||||
* @len: length of the frame data
|
||||
@@ -3350,7 +3361,7 @@ bool cfg80211_rx_mgmt(struct net_device *dev, int freq, int sig_dbm,
|
||||
* transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the
|
||||
* transmission attempt.
|
||||
*/
|
||||
void cfg80211_mgmt_tx_status(struct net_device *dev, u64 cookie,
|
||||
void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie,
|
||||
const u8 *buf, size_t len, bool ack, gfp_t gfp);
|
||||
|
||||
|
||||
|
||||
+15
-25
@@ -233,8 +233,10 @@ enum ieee80211_rssi_event {
|
||||
* valid in station mode only while @assoc is true and if also
|
||||
* requested by %IEEE80211_HW_NEED_DTIM_PERIOD (cf. also hw conf
|
||||
* @ps_dtim_period)
|
||||
* @last_tsf: last beacon's/probe response's TSF timestamp (could be old
|
||||
* @sync_tsf: last beacon's/probe response's TSF timestamp (could be old
|
||||
* as it may have been received during scanning long ago)
|
||||
* @sync_device_ts: the device timestamp corresponding to the sync_tsf,
|
||||
* the driver/device can use this to calculate synchronisation
|
||||
* @beacon_int: beacon interval
|
||||
* @assoc_capability: capabilities taken from assoc resp
|
||||
* @basic_rates: bitmap of basic rates, each bit stands for an
|
||||
@@ -281,7 +283,8 @@ struct ieee80211_bss_conf {
|
||||
u8 dtim_period;
|
||||
u16 beacon_int;
|
||||
u16 assoc_capability;
|
||||
u64 last_tsf;
|
||||
u64 sync_tsf;
|
||||
u32 sync_device_ts;
|
||||
u32 basic_rates;
|
||||
int mcast_rate[IEEE80211_NUM_BANDS];
|
||||
u16 ht_operation_mode;
|
||||
@@ -696,6 +699,8 @@ enum mac80211_rx_flags {
|
||||
*
|
||||
* @mactime: value in microseconds of the 64-bit Time Synchronization Function
|
||||
* (TSF) timer when the first data symbol (MPDU) arrived at the hardware.
|
||||
* @device_timestamp: arbitrary timestamp for the device, mac80211 doesn't use
|
||||
* it but can store it and pass it back to the driver for synchronisation
|
||||
* @band: the active band when this frame was received
|
||||
* @freq: frequency the radio was tuned to when receiving this frame, in MHz
|
||||
* @signal: signal strength when receiving this frame, either in dBm, in dB or
|
||||
@@ -709,13 +714,14 @@ enum mac80211_rx_flags {
|
||||
*/
|
||||
struct ieee80211_rx_status {
|
||||
u64 mactime;
|
||||
enum ieee80211_band band;
|
||||
int freq;
|
||||
int signal;
|
||||
int antenna;
|
||||
int rate_idx;
|
||||
int flag;
|
||||
unsigned int rx_flags;
|
||||
u32 device_timestamp;
|
||||
u16 flag;
|
||||
u16 freq;
|
||||
u8 rate_idx;
|
||||
u8 rx_flags;
|
||||
u8 band;
|
||||
u8 antenna;
|
||||
s8 signal;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -3591,22 +3597,6 @@ void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success);
|
||||
void ieee80211_request_smps(struct ieee80211_vif *vif,
|
||||
enum ieee80211_smps_mode smps_mode);
|
||||
|
||||
/**
|
||||
* ieee80211_key_removed - disable hw acceleration for key
|
||||
* @key_conf: The key hw acceleration should be disabled for
|
||||
*
|
||||
* This allows drivers to indicate that the given key has been
|
||||
* removed from hardware acceleration, due to a new key that
|
||||
* was added. Don't use this if the key can continue to be used
|
||||
* for TX, if the key restriction is on RX only it is permitted
|
||||
* to keep the key for TX only and not call this function.
|
||||
*
|
||||
* Due to locking constraints, it may only be called during
|
||||
* @set_key. This function must be allowed to sleep, and the
|
||||
* key it tries to disable may still be used until it returns.
|
||||
*/
|
||||
void ieee80211_key_removed(struct ieee80211_key_conf *key_conf);
|
||||
|
||||
/**
|
||||
* ieee80211_ready_on_channel - notification of remain-on-channel start
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw()
|
||||
|
||||
@@ -135,7 +135,8 @@ void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn)
|
||||
bar->control = cpu_to_le16(bar_control);
|
||||
bar->start_seq_num = cpu_to_le16(ssn);
|
||||
|
||||
IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
|
||||
IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT |
|
||||
IEEE80211_TX_CTL_REQ_TX_STATUS;
|
||||
ieee80211_tx_skb_tid(sdata, skb, tid);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_send_bar);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user