Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/iwlwifi/mld/low_latency.h
48286 views
1
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2
/*
3
* Copyright (C) 2024 Intel Corporation
4
*/
5
#ifndef __iwl_mld_low_latency_h__
6
#define __iwl_mld_low_latency_h__
7
8
/**
9
* struct iwl_mld_low_latency_packets_counters - Packets counters
10
* @lock: synchronize the counting in data path against the worker
11
* @vo_vi: per-mac, counts the number of TX and RX voice and video packets
12
*/
13
struct iwl_mld_low_latency_packets_counters {
14
spinlock_t lock;
15
u32 vo_vi[NUM_MAC_INDEX_DRIVER];
16
} ____cacheline_aligned_in_smp;
17
18
/**
19
* enum iwl_mld_low_latency_cause - low-latency set causes
20
*
21
* @LOW_LATENCY_TRAFFIC: indicates low-latency traffic was detected
22
* @LOW_LATENCY_DEBUGFS: low-latency mode set from debugfs
23
* @LOW_LATENCY_VIF_TYPE: low-latency mode set because of vif type (AP)
24
*/
25
enum iwl_mld_low_latency_cause {
26
LOW_LATENCY_TRAFFIC = BIT(0),
27
LOW_LATENCY_DEBUGFS = BIT(1),
28
LOW_LATENCY_VIF_TYPE = BIT(2),
29
};
30
31
/**
32
* struct iwl_mld_low_latency - Manage low-latency detection and activation.
33
* @work: this work is used to detect low-latency by monitoring the number of
34
* voice and video packets transmitted in a period of time. If the
35
* threshold is reached, low-latency is activated. When active,
36
* it is deactivated if the threshold is not reached within a
37
* 10-second period.
38
* @timestamp: timestamp of the last update.
39
* @window_start: per-mac, timestamp of the start of the current window. when
40
* the window is over, the counters are reset.
41
* @pkts_counters: per-queue array voice/video packet counters
42
* @result: per-mac latest low-latency result
43
* @stopped: if true, ignore the requests to update the counters
44
*/
45
struct iwl_mld_low_latency {
46
struct wiphy_delayed_work work;
47
unsigned long timestamp;
48
unsigned long window_start[NUM_MAC_INDEX_DRIVER];
49
struct iwl_mld_low_latency_packets_counters *pkts_counters;
50
bool result[NUM_MAC_INDEX_DRIVER];
51
bool stopped;
52
};
53
54
int iwl_mld_low_latency_init(struct iwl_mld *mld);
55
void iwl_mld_low_latency_free(struct iwl_mld *mld);
56
void iwl_mld_low_latency_restart_cleanup(struct iwl_mld *mld);
57
void iwl_mld_vif_update_low_latency(struct iwl_mld *mld,
58
struct ieee80211_vif *vif,
59
bool low_latency,
60
enum iwl_mld_low_latency_cause cause);
61
void iwl_mld_low_latency_update_counters(struct iwl_mld *mld,
62
struct ieee80211_hdr *hdr,
63
struct ieee80211_sta *sta,
64
u8 queue);
65
void iwl_mld_low_latency_stop(struct iwl_mld *mld);
66
void iwl_mld_low_latency_restart(struct iwl_mld *mld);
67
68
#endif /* __iwl_mld_low_latency_h__ */
69
70