--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -2193,6 +2193,9 @@ struct ieee80211_txq {
- * @IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN: Driver does not report accurate A-MPDU
- * length in tx status information
+@@ -2243,6 +2243,9 @@ struct ieee80211_txq {
+ * @IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID: Hardware supports multi BSSID
+ * only for HE APs. Applies if @IEEE80211_HW_SUPPORTS_MULTI_BSSID is set.
*
+ * @IEEE80211_HW_TX_NEEDS_ALIGNED4_SKBS: Driver need aligned skbs to four-byte.
+ * Padding will be added after ieee80211_hdr, before IV/LLC.
* @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
*/
enum ieee80211_hw_flags {
-@@ -2242,6 +2245,7 @@ enum ieee80211_hw_flags {
- IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW,
- IEEE80211_HW_STA_MMPDU_TXQ,
+@@ -2294,6 +2297,7 @@ enum ieee80211_hw_flags {
IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN,
+ IEEE80211_HW_SUPPORTS_MULTI_BSSID,
+ IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID,
+ IEEE80211_HW_TX_NEEDS_ALIGNED4_SKBS,
/* keep last, obviously */
NUM_IEEE80211_HW_FLAGS
-@@ -2533,6 +2537,40 @@ ieee80211_get_alt_retry_rate(const struc
+@@ -2587,6 +2591,40 @@ ieee80211_get_alt_retry_rate(const struc
void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb);
/**
if (!(mshdr->flags & MESH_FLAGS_AE)) {
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -2643,7 +2643,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2660,7 +2660,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
struct ieee80211_local *local = rx->local;
struct ieee80211_sub_if_data *sdata = rx->sdata;
struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
int tailroom = 0;
hdr = (struct ieee80211_hdr *) skb->data;
-@@ -2736,7 +2736,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2753,7 +2753,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
if (sdata->crypto_tx_tailroom_needed_cnt)
tailroom = IEEE80211_ENCRYPT_TAILROOM;
sdata->encrypt_headroom,
tailroom, GFP_ATOMIC);
if (!fwd_skb)
-@@ -2768,6 +2770,12 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
+@@ -2785,6 +2787,12 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
return RX_DROP_MONITOR;
}
if (txq->sta)
tx.sta = container_of(txq->sta, struct sta_info, sta);
-@@ -4042,7 +4048,7 @@ ieee80211_build_data_template(struct iee
+@@ -4041,7 +4047,7 @@ ieee80211_build_data_template(struct iee
hdr = (void *)skb->data;
tx.sta = sta_info_get(sdata, hdr->addr1);
tx.skb = skb;
rcu_read_unlock();
--- a/net/mac80211/debugfs.c
+++ b/net/mac80211/debugfs.c
-@@ -219,6 +219,7 @@ static const char *hw_flag_names[] = {
- FLAG(SUPPORTS_VHT_EXT_NSS_BW),
- FLAG(STA_MMPDU_TXQ),
+@@ -221,6 +221,7 @@ static const char *hw_flag_names[] = {
FLAG(TX_STATUS_NO_AMPDU_LEN),
+ FLAG(SUPPORTS_MULTI_BSSID),
+ FLAG(SUPPORTS_ONLY_HE_MULTI_BSSID),
+ FLAG(TX_NEEDS_ALIGNED4_SKBS),
#undef FLAG
};