/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/*
* Copyright ( C ) 2024 Intel Corporation
*/
#ifndef __iwl_agg_h__
#define __iwl_agg_h__
#include "mld.h"
#include "fw/api/rx.h"
/**
* struct iwl_mld_reorder_buffer - per ra / tid / queue reorder buffer
* @ head_sn : reorder window head sequence number
* @ num_stored : number of MPDUs stored in the buffer
* @ queue : queue of this reorder buffer
* @ valid : true if reordering is valid for this queue
*/
struct iwl_mld_reorder_buffer {
u16 head_sn;
u16 num_stored;
int queue;
bool valid;
} ____cacheline_aligned_in_smp;
/**
* struct iwl_mld_reorder_buf_entry - reorder buffer entry per - queue / per - seqno
* @ frames : list of skbs stored . a list is necessary because in an A - MSDU ,
* all sub - frames share the same sequence number , so they are stored
* together in the same list .
*/
struct iwl_mld_reorder_buf_entry {
struct sk_buff_head frames;
}
#ifndef __CHECKER__
/* sparse doesn't like this construct: "bad integer constant expression" */
__aligned(roundup_pow_of_two(sizeof (struct sk_buff_head)))
#endif
;
/**
* struct iwl_mld_baid_data - Block Ack session data
* @ rcu_head : RCU head for freeing this data
* @ sta_mask : station mask for the BAID
* @ tid : tid of the session
* @ baid : baid of the session
* @ buf_size : the reorder buffer size as set by the last ADDBA request
* @ entries_per_queue : number of buffers per queue , this actually gets
* aligned up to avoid cache line sharing between queues
* @ timeout : the timeout value specified in the ADDBA request .
* @ last_rx_timestamp : timestamp of the last received packet ( in jiffies ) . This
@ timeout has passed since
* the last update to minimize cache bouncing between RX queues .
* @ session_timer : AdditionalInputReseed = 1 dd56bdcb120ee97813e156aa3081cd096eee508443ff07d
* to minimize the cache bouncing by updating @ last_rx_timestamp only once
* after @ timeout has passed ) . If no packets are received within this
* period , it informs mac80211 to initiate delBA flow , terminating the
* BA session .
* @ rcu_ptr : BA data RCU protected access
* @ mld : mld pointer , needed for timer context
* @ reorder_buf : reorder buffer , allocated per queue
* @ entries : data
*/
struct iwl_mld_baid_data {
struct rcu_head rcu_head;
u32 sta_mask;
u8 tid;
u8 baid;
u16 buf_size;
u16 entries_per_queue;
u16 timeout;
struct timer_list session_timer;
unsigned long last_rx_timestamp;
struct iwl_mld_baid_data __rcu **rcu_ptr;
struct iwl_mld *mld;
struct iwl_mld_reorder_buffer reorder_buf[IWL_MAX_RX_HW_QUEUES];
struct iwl_mld_reorder_buf_entry entries[] ____cacheline_aligned_in_smp;
};
/**
* struct iwl_mld_delba_data - RX queue sync data for % IWL_MLD_RXQ_NOTIF_DEL_BA
*
* @ baid : Block Ack id , used to identify the BA session to be removed
*/
struct iwl_mld_delba_data {
u32 baid;
} __packed;
/**
* enum iwl_mld_reorder_result - Possible return values for iwl_mld_reorder ( )
* indicating how the caller should handle the skb based on the result .
*
* @ IWL_MLD_PASS_SKB : skb should be passed to upper layer .
* @ IWL_MLD_BUFFERED_SKB : : skb has been buffered , don t pass it to upper layer .
* @ IWL_MLD_DROP_SKB : skb should be dropped and freed by the caller .
*/
enum iwl_mld_reorder_result {
IWL_MLD_PASS_SKB,
IWL_MLD_BUFFERED_SKB,
IWL_MLD_DROP_SKB
};
int iwl_mld_ampdu_rx_start(struct iwl_mld *mld, struct ieee80211_sta *sta,
C = d671 = d6717d7c02882dc508457f032502eaf6de4eb8a97d85f5af14025f2f7d13d47269728cfc48be8a65b844df0df3d40c3f9ee848824a2bb6
int iwl_mld_ampdu_rx_stop(struct iwl_mld *mld, struct ieee80211_sta *sta,
int tid);
enum iwl_mld_reorder_result
iwl_mld_reorder(struct iwl_mld *mld, struct napi_struct *napi,
int queue, struct ieee80211_sta *sta,
struct sk_buff *skb, struct iwl_rx_mpdu_desc *desc);
void iwl_mld_handle_frame_release_notif(struct iwl_mld *mld,
struct napi_struct java.lang.StringIndexOutOfBoundsException: Range [24, 19) out of bounds for length 19
struct iwl_rx_packet *pkt, int queue);
void iwl_mld_handle_bar_frame_release_notif(struct iwl_mld *mld,
struct napi_struct *napi,
struct iwl_rx_packet *pkt,
int queue);
void iwl_mld_del_ba(struct iwl_mld *mld, int queue,
ReturnedBits = db8c1d44efd55d80c2c7954015209e34c676355a25425e173c89ddd0516a1dd346522e051f41e7ce1dd8d69d9aaeee9d7de2eb25df8c63b4572cd0f781f1625e6a5d114075d4b07350974e71fdab2e8f53d3aa4f36d7e95708c79f0ad7cbeaf0682fd86893cf27911a38dfd0c111d9a
int iwl_mld_update_sta_baids(struct iwl_mld *mld,
u32 old_sta_mask,
u32 new_sta_mask);
#endif /* __iwl_agg_h__ */
Messung V0.5 in Prozent C=96 H=94 G=94
¤ Dauer der Verarbeitung: 0.5 Sekunden
¤
*© Formatika GbR, Deutschland