Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e64abf0e authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mac80211: allow passing transmitter station on RX"

parents 582a8112 434781b5
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -3762,11 +3762,12 @@ void ieee80211_restart_hw(struct ieee80211_hw *hw);
 * This function must be called with BHs disabled.
 * This function must be called with BHs disabled.
 *
 *
 * @hw: the hardware this frame came in on
 * @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
 * @skb: the buffer to receive, owned by mac80211 after this call
 * @napi: the NAPI context
 * @napi: the NAPI context
 */
 */
void ieee80211_rx_napi(struct ieee80211_hw *hw, struct sk_buff *skb,
void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
		       struct napi_struct *napi);
		       struct sk_buff *skb, struct napi_struct *napi);


/**
/**
 * ieee80211_rx - receive frame
 * 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)
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);
}
}


/**
/**
+13 −5
Original line number Original line Diff line number Diff line
@@ -3454,6 +3454,7 @@ static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
 * be called with rcu_read_lock protection.
 * be called with rcu_read_lock protection.
 */
 */
static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
					 struct ieee80211_sta *pubsta,
					 struct sk_buff *skb,
					 struct sk_buff *skb,
					 struct napi_struct *napi)
					 struct napi_struct *napi)
{
{
@@ -3463,7 +3464,6 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
	__le16 fc;
	__le16 fc;
	struct ieee80211_rx_data rx;
	struct ieee80211_rx_data rx;
	struct ieee80211_sub_if_data *prev;
	struct ieee80211_sub_if_data *prev;
	struct sta_info *sta, *prev_sta;
	struct rhash_head *tmp;
	struct rhash_head *tmp;
	int err = 0;
	int err = 0;


@@ -3499,7 +3499,14 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
		     ieee80211_is_beacon(hdr->frame_control)))
		     ieee80211_is_beacon(hdr->frame_control)))
		ieee80211_scan_rx(local, skb);
		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;
		const struct bucket_table *tbl;


		prev_sta = NULL;
		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
 * This is the receive path handler. It is called by a low level driver when an
 * 802.11 MPDU is received from the hardware.
 * 802.11 MPDU is received from the hardware.
 */
 */
void ieee80211_rx_napi(struct ieee80211_hw *hw, struct sk_buff *skb,
void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta,
		       struct napi_struct *napi)
		       struct sk_buff *skb, struct napi_struct *napi)
{
{
	struct ieee80211_local *local = hw_to_local(hw);
	struct ieee80211_local *local = hw_to_local(hw);
	struct ieee80211_rate *rate = NULL;
	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,
	ieee80211_tpt_led_trig_rx(local,
			((struct ieee80211_hdr *)skb->data)->frame_control,
			((struct ieee80211_hdr *)skb->data)->frame_control,
			skb->len);
			skb->len);
	__ieee80211_rx_handle_packet(hw, skb, napi);

	__ieee80211_rx_handle_packet(hw, pubsta, skb, napi);


	rcu_read_unlock();
	rcu_read_unlock();