Merge tag 'for-linus-6.4-1' of https://github.com/cminyard/linux-ipmi
[linux-block.git] / include / net / mac80211.h
index f12edca660ba0d73c84e84200657d5e9c9740759..ac0370e7687496074dcac37cd1149dbe15cd2dc3 100644 (file)
@@ -3950,6 +3950,10 @@ struct ieee80211_prep_tx_info {
  *     Note that vif can be NULL.
  *     The callback can sleep.
  *
+ * @flush_sta: Flush or drop all pending frames from the hardware queue(s) for
+ *     the given station, as it's about to be removed.
+ *     The callback can sleep.
+ *
  * @channel_switch: Drivers that need (or want) to offload the channel
  *     switch operation for CSAs received from the AP may implement this
  *     callback. They must then call ieee80211_chswitch_done() to indicate
@@ -4227,6 +4231,10 @@ struct ieee80211_prep_tx_info {
  * @set_hw_timestamp: Enable/disable HW timestamping of TM/FTM frames. This is
  *     not restored at HW reset by mac80211 so drivers need to take care of
  *     that.
+ * @net_setup_tc: Called from .ndo_setup_tc in order to prepare hardware
+ *     flow offloading for flows originating from the vif.
+ *     Note that the driver must not assume that the vif driver_data is valid
+ *     at this point, since the callback can be called during netdev teardown.
  */
 struct ieee80211_ops {
        void (*tx)(struct ieee80211_hw *hw,
@@ -4411,6 +4419,8 @@ struct ieee80211_ops {
 #endif
        void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                      u32 queues, bool drop);
+       void (*flush_sta)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+                         struct ieee80211_sta *sta);
        void (*channel_switch)(struct ieee80211_hw *hw,
                               struct ieee80211_vif *vif,
                               struct ieee80211_channel_switch *ch_switch);
@@ -4593,6 +4603,11 @@ struct ieee80211_ops {
        int (*set_hw_timestamp)(struct ieee80211_hw *hw,
                                struct ieee80211_vif *vif,
                                struct cfg80211_set_hw_timestamp *hwts);
+       int (*net_setup_tc)(struct ieee80211_hw *hw,
+                           struct ieee80211_vif *vif,
+                           struct net_device *dev,
+                           enum tc_setup_type type,
+                           void *type_data);
 };
 
 /**
@@ -5200,26 +5215,6 @@ static inline void ieee80211_tx_status_ni(struct ieee80211_hw *hw,
 void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
                                 struct sk_buff *skb);
 
-/**
- * ieee80211_tx_status_8023 - transmit status callback for 802.3 frame format
- *
- * Call this function for all transmitted data frames after their transmit
- * completion. This callback should only be called for data frames which
- * are using driver's (or hardware's) offload capability of encap/decap
- * 802.11 frames.
- *
- * This function may not be called in IRQ context. Calls to this function
- * for a single hardware must be synchronized against each other and all
- * calls in the same tx status family.
- *
- * @hw: the hardware the frame was transmitted by
- * @vif: the interface for which the frame was transmitted
- * @skb: the frame that was transmitted, owned by mac80211 after this call
- */
-void ieee80211_tx_status_8023(struct ieee80211_hw *hw,
-                              struct ieee80211_vif *vif,
-                              struct sk_buff *skb);
-
 /**
  * ieee80211_report_low_ack - report non-responding station
  *
@@ -5276,6 +5271,74 @@ ieee80211_beacon_get_template(struct ieee80211_hw *hw,
                              struct ieee80211_mutable_offsets *offs,
                              unsigned int link_id);
 
+/**
+ * ieee80211_beacon_get_template_ema_index - EMA beacon template generation
+ * @hw: pointer obtained from ieee80211_alloc_hw().
+ * @vif: &struct ieee80211_vif pointer from the add_interface callback.
+ * @offs: &struct ieee80211_mutable_offsets pointer to struct that will
+ *     receive the offsets that may be updated by the driver.
+ * @link_id: the link id to which the beacon belongs (or 0 for a non-MLD AP).
+ * @ema_index: index of the beacon in the EMA set.
+ *
+ * This function follows the same rules as ieee80211_beacon_get_template()
+ * but returns a beacon template which includes multiple BSSID element at the
+ * requested index.
+ *
+ * Return: The beacon template. %NULL indicates the end of EMA templates.
+ */
+struct sk_buff *
+ieee80211_beacon_get_template_ema_index(struct ieee80211_hw *hw,
+                                       struct ieee80211_vif *vif,
+                                       struct ieee80211_mutable_offsets *offs,
+                                       unsigned int link_id, u8 ema_index);
+
+/**
+ * struct ieee80211_ema_beacons - List of EMA beacons
+ * @cnt: count of EMA beacons.
+ *
+ * @bcn: array of EMA beacons.
+ * @bcn.skb: the skb containing this specific beacon
+ * @bcn.offs: &struct ieee80211_mutable_offsets pointer to struct that will
+ *     receive the offsets that may be updated by the driver.
+ */
+struct ieee80211_ema_beacons {
+       u8 cnt;
+       struct {
+               struct sk_buff *skb;
+               struct ieee80211_mutable_offsets offs;
+       } bcn[];
+};
+
+/**
+ * ieee80211_beacon_get_template_ema_list - EMA beacon template generation
+ * @hw: pointer obtained from ieee80211_alloc_hw().
+ * @vif: &struct ieee80211_vif pointer from the add_interface callback.
+ * @link_id: the link id to which the beacon belongs (or 0 for a non-MLD AP)
+ *
+ * This function follows the same rules as ieee80211_beacon_get_template()
+ * but allocates and returns a pointer to list of all beacon templates required
+ * to cover all profiles in the multiple BSSID set. Each template includes only
+ * one multiple BSSID element.
+ *
+ * Driver must call ieee80211_beacon_free_ema_list() to free the memory.
+ *
+ * Return: EMA beacon templates of type struct ieee80211_ema_beacons *.
+ *     %NULL on error.
+ */
+struct ieee80211_ema_beacons *
+ieee80211_beacon_get_template_ema_list(struct ieee80211_hw *hw,
+                                      struct ieee80211_vif *vif,
+                                      unsigned int link_id);
+
+/**
+ * ieee80211_beacon_free_ema_list - free an EMA beacon template list
+ * @ema_beacons: list of EMA beacons of type &struct ieee80211_ema_beacons pointers.
+ *
+ * This function will free a list previously acquired by calling
+ * ieee80211_beacon_get_template_ema_list()
+ */
+void ieee80211_beacon_free_ema_list(struct ieee80211_ema_beacons *ema_beacons);
+
 /**
  * ieee80211_beacon_get_tim - beacon generation function
  * @hw: pointer obtained from ieee80211_alloc_hw().