Merge tag 'mac80211-next-for-davem-2015-04-10' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Johannes Berg says: ==================== There isn't much left, but we have * new mac80211 internal software queue to allow drivers to have shorter hardware queues and pull on-demand * use rhashtable for mac80211 station table * minstrel rate control debug improvements and some refactoring * fix noisy message about TX power reduction * fix continuous message printing and activity if CRDA doesn't respond * fix VHT-related capabilities with "iw connect" or "iwconfig ..." * fix Kconfig for cfg80211 wireless extensions compatibility ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Этот коммит содержится в:
@@ -16,6 +16,7 @@
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/average.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/rhashtable.h>
|
||||
#include "key.h"
|
||||
|
||||
/**
|
||||
@@ -248,7 +249,7 @@ struct sta_ampdu_mlme {
|
||||
*
|
||||
* @list: global linked list entry
|
||||
* @free_list: list entry for keeping track of stations to free
|
||||
* @hnext: hash table linked list pointer
|
||||
* @hash_node: hash node for rhashtable
|
||||
* @local: pointer to the global information
|
||||
* @sdata: virtual interface this station belongs to
|
||||
* @ptk: peer keys negotiated with this station, if any
|
||||
@@ -276,6 +277,7 @@ struct sta_ampdu_mlme {
|
||||
* entered power saving state, these are also delivered to
|
||||
* the station when it leaves powersave or polls for frames
|
||||
* @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
|
||||
* @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
|
||||
* @rx_packets: Number of MSDUs received from this STA
|
||||
* @rx_bytes: Number of bytes received from this STA
|
||||
* @last_rx: time (in jiffies) when last frame was received from this STA
|
||||
@@ -341,7 +343,7 @@ struct sta_info {
|
||||
/* General information, mostly static */
|
||||
struct list_head list, free_list;
|
||||
struct rcu_head rcu_head;
|
||||
struct sta_info __rcu *hnext;
|
||||
struct rhash_head hash_node;
|
||||
struct ieee80211_local *local;
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
struct ieee80211_key __rcu *gtk[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS];
|
||||
@@ -370,6 +372,7 @@ struct sta_info {
|
||||
struct sk_buff_head ps_tx_buf[IEEE80211_NUM_ACS];
|
||||
struct sk_buff_head tx_filtered[IEEE80211_NUM_ACS];
|
||||
unsigned long driver_buffered_tids;
|
||||
unsigned long txq_buffered_tids;
|
||||
|
||||
/* Updated from RX path only, no locking requirements */
|
||||
unsigned long rx_packets;
|
||||
@@ -537,10 +540,6 @@ rcu_dereference_protected_tid_tx(struct sta_info *sta, int tid)
|
||||
lockdep_is_held(&sta->ampdu_mlme.mtx));
|
||||
}
|
||||
|
||||
#define STA_HASH_SIZE 256
|
||||
#define STA_HASH(sta) (sta[5])
|
||||
|
||||
|
||||
/* Maximum number of frames to buffer per power saving station per AC */
|
||||
#define STA_MAX_TX_BUFFER 64
|
||||
|
||||
@@ -561,26 +560,15 @@ struct sta_info *sta_info_get(struct ieee80211_sub_if_data *sdata,
|
||||
struct sta_info *sta_info_get_bss(struct ieee80211_sub_if_data *sdata,
|
||||
const u8 *addr);
|
||||
|
||||
static inline
|
||||
void for_each_sta_info_type_check(struct ieee80211_local *local,
|
||||
const u8 *addr,
|
||||
struct sta_info *sta,
|
||||
struct sta_info *nxt)
|
||||
{
|
||||
}
|
||||
u32 sta_addr_hash(const void *key, u32 length, u32 seed);
|
||||
|
||||
#define for_each_sta_info(local, _addr, _sta, nxt) \
|
||||
for ( /* initialise loop */ \
|
||||
_sta = rcu_dereference(local->sta_hash[STA_HASH(_addr)]),\
|
||||
nxt = _sta ? rcu_dereference(_sta->hnext) : NULL; \
|
||||
/* typecheck */ \
|
||||
for_each_sta_info_type_check(local, (_addr), _sta, nxt),\
|
||||
/* continue condition */ \
|
||||
_sta; \
|
||||
/* advance loop */ \
|
||||
_sta = nxt, \
|
||||
nxt = _sta ? rcu_dereference(_sta->hnext) : NULL \
|
||||
) \
|
||||
#define _sta_bucket_idx(_tbl, _a) \
|
||||
rht_bucket_index(_tbl, sta_addr_hash(_a, ETH_ALEN, (_tbl)->hash_rnd))
|
||||
|
||||
#define for_each_sta_info(local, tbl, _addr, _sta, _tmp) \
|
||||
rht_for_each_entry_rcu(_sta, _tmp, tbl, \
|
||||
_sta_bucket_idx(tbl, _addr), \
|
||||
hash_node) \
|
||||
/* compare address and run code only if it matches */ \
|
||||
if (ether_addr_equal(_sta->sta.addr, (_addr)))
|
||||
|
||||
@@ -617,7 +605,7 @@ int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata,
|
||||
|
||||
void sta_info_recalc_tim(struct sta_info *sta);
|
||||
|
||||
void sta_info_init(struct ieee80211_local *local);
|
||||
int sta_info_init(struct ieee80211_local *local);
|
||||
void sta_info_stop(struct ieee80211_local *local);
|
||||
|
||||
/**
|
||||
|
Ссылка в новой задаче
Block a user