mac80211: sparse RCU annotations
[pandora-kernel.git] / net / mac80211 / ieee80211_i.h
index 533fd32..ed75588 100644 (file)
@@ -214,7 +214,7 @@ struct beacon_data {
 };
 
 struct ieee80211_if_ap {
-       struct beacon_data *beacon;
+       struct beacon_data __rcu *beacon;
 
        struct list_head vlans;
 
@@ -225,6 +225,7 @@ struct ieee80211_if_ap {
        struct sk_buff_head ps_bc_buf;
        atomic_t num_sta_ps; /* number of stations in PS mode */
        int dtim_count;
+       bool dtim_bc_mc;
 };
 
 struct ieee80211_if_wds {
@@ -236,7 +237,7 @@ struct ieee80211_if_vlan {
        struct list_head list;
 
        /* used for all tx if the VLAN is configured to 4-addr mode */
-       struct sta_info *sta;
+       struct sta_info __rcu *sta;
 };
 
 struct mesh_stats {
@@ -441,7 +442,8 @@ struct ieee80211_if_ibss {
 
        unsigned long ibss_join_req;
        /* probe response/beacon for IBSS */
-       struct sk_buff *presp, *skb;
+       struct sk_buff __rcu *presp;
+       struct sk_buff *skb;
 
        enum {
                IEEE80211_IBSS_MLME_SEARCH,
@@ -487,8 +489,13 @@ struct ieee80211_if_mesh {
        struct mesh_config mshcfg;
        u32 mesh_seqnum;
        bool accepting_plinks;
-       const u8 *vendor_ie;
-       u8 vendor_ie_len;
+       const u8 *ie;
+       u8 ie_len;
+       enum {
+               IEEE80211_MESH_SEC_NONE = 0x0,
+               IEEE80211_MESH_SEC_AUTHED = 0x1,
+               IEEE80211_MESH_SEC_SECURED = 0x2,
+       } security;
 };
 
 #ifdef CONFIG_MAC80211_MESH
@@ -561,9 +568,10 @@ struct ieee80211_sub_if_data {
        struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX];
        unsigned int fragment_next;
 
-       struct ieee80211_key *keys[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS];
-       struct ieee80211_key *default_unicast_key, *default_multicast_key;
-       struct ieee80211_key *default_mgmt_key;
+       struct ieee80211_key __rcu *keys[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS];
+       struct ieee80211_key __rcu *default_unicast_key;
+       struct ieee80211_key __rcu *default_multicast_key;
+       struct ieee80211_key __rcu *default_mgmt_key;
 
        u16 sequence_number;
        __be16 control_port_protocol;
@@ -654,8 +662,6 @@ struct tpt_led_trigger {
  *     well be on the operating channel
  * @SCAN_HW_SCANNING: The hardware is scanning for us, we have no way to
  *     determine if we are on the operating channel or not
- * @SCAN_OFF_CHANNEL: We're off our operating channel for scanning,
- *     gets only set in conjunction with SCAN_SW_SCANNING
  * @SCAN_COMPLETED: Set for our scan work function when the driver reported
  *     that the scan completed.
  * @SCAN_ABORTED: Set for our scan work function when the driver reported
@@ -664,7 +670,6 @@ struct tpt_led_trigger {
 enum {
        SCAN_SW_SCANNING,
        SCAN_HW_SCANNING,
-       SCAN_OFF_CHANNEL,
        SCAN_COMPLETED,
        SCAN_ABORTED,
 };
@@ -765,8 +770,14 @@ struct ieee80211_local {
        /* device is started */
        bool started;
 
+       /* wowlan is enabled -- don't reconfig on resume */
+       bool wowlan;
+
        int tx_headroom; /* required headroom for hardware/radiotap */
 
+       /* count for keys needing tailroom space allocation */
+       int crypto_tx_tailroom_needed_cnt;
+
        /* Tasklet and skb queue to process calls from IRQ mode. All frames
         * added to skb_queue will be processed, but frames in
         * skb_queue_unreliable may be dropped if the total length of these
@@ -796,7 +807,7 @@ struct ieee80211_local {
        spinlock_t sta_lock;
        unsigned long num_sta;
        struct list_head sta_list, sta_pending_list;
-       struct sta_info *sta_hash[STA_HASH_SIZE];
+       struct sta_info __rcu *sta_hash[STA_HASH_SIZE];
        struct timer_list sta_cleanup;
        struct work_struct sta_finish_work;
        int sta_generation;
@@ -811,8 +822,8 @@ struct ieee80211_local {
 
        struct rate_control_ref *rate_ctrl;
 
-       struct crypto_blkcipher *wep_tx_tfm;
-       struct crypto_blkcipher *wep_rx_tfm;
+       struct crypto_cipher *wep_tx_tfm;
+       struct crypto_cipher *wep_rx_tfm;
        u32 wep_iv;
 
        /* see iface.c */
@@ -838,6 +849,10 @@ struct ieee80211_local {
        int scan_channel_idx;
        int scan_ies_len;
 
+       bool sched_scanning;
+       struct ieee80211_sched_scan_ies sched_scan_ies;
+       struct work_struct sched_scan_stopped_work;
+
        unsigned long leave_oper_channel_time;
        enum mac80211_scan_state next_scan_state;
        struct delayed_work scan_work;
@@ -959,6 +974,7 @@ struct ieee80211_local {
        unsigned int hw_roc_duration;
        u32 hw_roc_cookie;
        bool hw_roc_for_tx;
+       unsigned long hw_offchan_tx_cookie;
 
        /* dummy netdev for use w/ NAPI */
        struct net_device napi_dev;
@@ -1068,8 +1084,6 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
 void ieee80211_configure_filter(struct ieee80211_local *local);
 u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata);
 
-extern bool ieee80211_disable_40mhz_24ghz;
-
 /* STA code */
 void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata);
 int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata,
@@ -1146,11 +1160,21 @@ ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq,
 void ieee80211_rx_bss_put(struct ieee80211_local *local,
                          struct ieee80211_bss *bss);
 
+/* scheduled scan handling */
+int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
+                                      struct cfg80211_sched_scan_request *req);
+int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata);
+void ieee80211_sched_scan_stopped_work(struct work_struct *work);
+
 /* off-channel helpers */
-void ieee80211_offchannel_stop_beaconing(struct ieee80211_local *local);
-void ieee80211_offchannel_stop_station(struct ieee80211_local *local);
+bool ieee80211_cfg_on_oper_channel(struct ieee80211_local *local);
+void ieee80211_offchannel_enable_all_ps(struct ieee80211_local *local,
+                                       bool tell_ap);
+void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
+                                   bool offchannel_ps_enable);
 void ieee80211_offchannel_return(struct ieee80211_local *local,
-                                bool enable_beaconing);
+                                bool enable_beaconing,
+                                bool offchannel_ps_disable);
 void ieee80211_hw_roc_setup(struct ieee80211_local *local);
 
 /* interface handling */
@@ -1245,7 +1269,8 @@ int ieee80211_reconfig(struct ieee80211_local *local);
 void ieee80211_stop_device(struct ieee80211_local *local);
 
 #ifdef CONFIG_PM
-int __ieee80211_suspend(struct ieee80211_hw *hw);
+int __ieee80211_suspend(struct ieee80211_hw *hw,
+                       struct cfg80211_wowlan *wowlan);
 
 static inline int __ieee80211_resume(struct ieee80211_hw *hw)
 {
@@ -1258,7 +1283,8 @@ static inline int __ieee80211_resume(struct ieee80211_hw *hw)
        return ieee80211_reconfig(hw_to_local(hw));
 }
 #else
-static inline int __ieee80211_suspend(struct ieee80211_hw *hw)
+static inline int __ieee80211_suspend(struct ieee80211_hw *hw,
+                                     struct cfg80211_wowlan *wowlan)
 {
        return 0;
 }