drivers/net/wireless/intel/iwlwifi/mld/low_latency.h

Source file repositories/reference/linux-study-clean/drivers/net/wireless/intel/iwlwifi/mld/low_latency.h

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/intel/iwlwifi/mld/low_latency.h
Extension
.h
Size
2517 bytes
Lines
69
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct iwl_mld_low_latency_packets_counters {
	spinlock_t lock;
	u32 vo_vi[NUM_MAC_INDEX_DRIVER];
} ____cacheline_aligned_in_smp;

/**
 * enum iwl_mld_low_latency_cause - low-latency set causes
 *
 * @LOW_LATENCY_TRAFFIC: indicates low-latency traffic was detected
 * @LOW_LATENCY_DEBUGFS: low-latency mode set from debugfs
 * @LOW_LATENCY_VIF_TYPE: low-latency mode set because of vif type (AP)
 */
enum iwl_mld_low_latency_cause {
	LOW_LATENCY_TRAFFIC	= BIT(0),
	LOW_LATENCY_DEBUGFS	= BIT(1),
	LOW_LATENCY_VIF_TYPE	= BIT(2),
};

/**
 * struct iwl_mld_low_latency - Manage low-latency detection and activation.
 * @work: this work is used to detect low-latency by monitoring the number of
 *	voice and video packets transmitted in a period of time. If the
 *	threshold is reached, low-latency is activated. When active,
 *	it is deactivated if the threshold is not reached within a
 *	10-second period.
 * @timestamp: timestamp of the last update.
 * @window_start: per-mac, timestamp of the start of the current window. when
 *	the window is over, the counters are reset.
 * @pkts_counters: per-queue array voice/video packet counters
 * @result: per-mac latest low-latency result
 * @stopped: if true, ignore the requests to update the counters
 */
struct iwl_mld_low_latency {
	struct wiphy_delayed_work work;
	unsigned long timestamp;
	unsigned long window_start[NUM_MAC_INDEX_DRIVER];
	struct iwl_mld_low_latency_packets_counters *pkts_counters;
	bool result[NUM_MAC_INDEX_DRIVER];
	bool stopped;
};

int iwl_mld_low_latency_init(struct iwl_mld *mld);
void iwl_mld_low_latency_free(struct iwl_mld *mld);
void iwl_mld_low_latency_restart_cleanup(struct iwl_mld *mld);
void iwl_mld_vif_update_low_latency(struct iwl_mld *mld,
				    struct ieee80211_vif *vif,
				    bool low_latency,
				    enum iwl_mld_low_latency_cause cause);
void iwl_mld_low_latency_update_counters(struct iwl_mld *mld,
					 struct ieee80211_hdr *hdr,
					 struct ieee80211_sta *sta,
					 u8 queue);
void iwl_mld_low_latency_stop(struct iwl_mld *mld);
void iwl_mld_low_latency_restart(struct iwl_mld *mld);

#endif /* __iwl_mld_low_latency_h__ */

Annotation

Implementation Notes