| /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ |
| /* |
| * Copyright (C) 2024-2025 Intel Corporation |
| */ |
| #ifndef __iwl_mld_rx_h__ |
| #define __iwl_mld_rx_h__ |
| |
| #include "mld.h" |
| |
| /** |
| * enum iwl_mld_internal_rxq_notif_type - RX queue sync notif types |
| * |
| * @IWL_MLD_RXQ_EMPTY: empty sync notification |
| * @IWL_MLD_RXQ_NOTIF_DEL_BA: notify RSS queues of delBA |
| */ |
| enum iwl_mld_internal_rxq_notif_type { |
| IWL_MLD_RXQ_EMPTY, |
| IWL_MLD_RXQ_NOTIF_DEL_BA, |
| }; |
| |
| /** |
| * struct iwl_mld_internal_rxq_notif - @iwl_rxq_sync_cmd internal data. |
| * This data is echoed by the firmware to all RSS queues and should be DWORD |
| * aligned. FW is agnostic to the data, so there are no endianness requirements |
| * |
| * @type: one of &iwl_mld_internal_rxq_notif_type |
| * @cookie: unique internal cookie to identify old notifications |
| * @reserved: reserved for alignment |
| * @payload: data to send to RX queues based on the type (may be empty) |
| */ |
| struct iwl_mld_internal_rxq_notif { |
| u8 type; |
| u8 reserved[3]; |
| u32 cookie; |
| u8 payload[]; |
| } __packed; |
| |
| /** |
| * struct iwl_mld_rx_queues_sync - RX queues sync data |
| * |
| * @waitq: wait queue for RX queues sync completion |
| * @cookie: unique id to correlate sync requests with responses |
| * @state: bitmask representing the sync state of RX queues |
| * all RX queues bits are set before sending the command, and the |
| * corresponding queue bit cleared upon handling the notification |
| */ |
| struct iwl_mld_rx_queues_sync { |
| wait_queue_head_t waitq; |
| u32 cookie; |
| unsigned long state; |
| }; |
| |
| void iwl_mld_rx_mpdu(struct iwl_mld *mld, struct napi_struct *napi, |
| struct iwl_rx_cmd_buffer *rxb, int queue); |
| |
| void iwl_mld_sync_rx_queues(struct iwl_mld *mld, |
| enum iwl_mld_internal_rxq_notif_type type, |
| const void *notif_payload, u32 notif_payload_size); |
| |
| void iwl_mld_handle_rx_queues_sync_notif(struct iwl_mld *mld, |
| struct napi_struct *napi, |
| struct iwl_rx_packet *pkt, int queue); |
| |
| void iwl_mld_pass_packet_to_mac80211(struct iwl_mld *mld, |
| struct napi_struct *napi, |
| struct sk_buff *skb, int queue, |
| struct ieee80211_sta *sta); |
| |
| void iwl_mld_rx_monitor_no_data(struct iwl_mld *mld, struct napi_struct *napi, |
| struct iwl_rx_packet *pkt, int queue); |
| |
| #endif /* __iwl_mld_agg_h__ */ |