Merge "mac80211: allow passing transmitter station on RX"
This commit is contained in:
commit
e64abf0e80
2 changed files with 17 additions and 8 deletions
|
@ -3762,11 +3762,12 @@ void ieee80211_restart_hw(struct ieee80211_hw *hw);
|
|||
* This function must be called with BHs disabled.
|
||||
*
|
||||
* @hw: the hardware this frame came in on
|
||||
* @sta: the station the frame was received from, or %NULL
|
||||
* @skb: the buffer to receive, owned by mac80211 after this call
|
||||
* @napi: the NAPI context
|
||||
*/
|
||||
void ieee80211_rx_napi(struct ieee80211_hw *hw, struct sk_buff *skb,
|
||||
struct napi_struct *napi);
|
||||
void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
|
||||
struct sk_buff *skb, struct napi_struct *napi);
|
||||
|
||||
/**
|
||||
* ieee80211_rx - receive frame
|
||||
|
@ -3790,7 +3791,7 @@ void ieee80211_rx_napi(struct ieee80211_hw *hw, struct sk_buff *skb,
|
|||
*/
|
||||
static inline void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
{
|
||||
ieee80211_rx_napi(hw, skb, NULL);
|
||||
ieee80211_rx_napi(hw, NULL, skb, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -3454,6 +3454,7 @@ static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
|
|||
* be called with rcu_read_lock protection.
|
||||
*/
|
||||
static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
|
||||
struct ieee80211_sta *pubsta,
|
||||
struct sk_buff *skb,
|
||||
struct napi_struct *napi)
|
||||
{
|
||||
|
@ -3463,7 +3464,6 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
|
|||
__le16 fc;
|
||||
struct ieee80211_rx_data rx;
|
||||
struct ieee80211_sub_if_data *prev;
|
||||
struct sta_info *sta, *prev_sta;
|
||||
struct rhash_head *tmp;
|
||||
int err = 0;
|
||||
|
||||
|
@ -3499,7 +3499,14 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
|
|||
ieee80211_is_beacon(hdr->frame_control)))
|
||||
ieee80211_scan_rx(local, skb);
|
||||
|
||||
if (ieee80211_is_data(fc)) {
|
||||
if (pubsta) {
|
||||
rx.sta = container_of(pubsta, struct sta_info, sta);
|
||||
rx.sdata = rx.sta->sdata;
|
||||
if (ieee80211_prepare_and_rx_handle(&rx, skb, true))
|
||||
return;
|
||||
goto out;
|
||||
} else if (ieee80211_is_data(fc)) {
|
||||
struct sta_info *sta, *prev_sta;
|
||||
const struct bucket_table *tbl;
|
||||
|
||||
prev_sta = NULL;
|
||||
|
@ -3573,8 +3580,8 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
|
|||
* This is the receive path handler. It is called by a low level driver when an
|
||||
* 802.11 MPDU is received from the hardware.
|
||||
*/
|
||||
void ieee80211_rx_napi(struct ieee80211_hw *hw, struct sk_buff *skb,
|
||||
struct napi_struct *napi)
|
||||
void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta,
|
||||
struct sk_buff *skb, struct napi_struct *napi)
|
||||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct ieee80211_rate *rate = NULL;
|
||||
|
@ -3673,7 +3680,8 @@ void ieee80211_rx_napi(struct ieee80211_hw *hw, struct sk_buff *skb,
|
|||
ieee80211_tpt_led_trig_rx(local,
|
||||
((struct ieee80211_hdr *)skb->data)->frame_control,
|
||||
skb->len);
|
||||
__ieee80211_rx_handle_packet(hw, skb, napi);
|
||||
|
||||
__ieee80211_rx_handle_packet(hw, pubsta, skb, napi);
|
||||
|
||||
rcu_read_unlock();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue