fw-api: CL 23191762 - update fw common interface files

HTT stats: report FW CoDel drop, no-drop counters
Define HTT stats TLVs for reporting how many times the FWs CoDel latency-control logic did / didnt choose to drop the head MSDU from a CoDel-enabled MSDU queue following completion of a CoDel latency stats collection window.These drop + no-drop stats are defined per service class and per MSDU queue, though it is expected that the FW will only support per-queue CoDel stats in debug build.

Change-Id: I9cb45834f3429fc7b807bfb031d7bb2cd7f0d5ee
CRs-Fixed: 2262693
このコミットが含まれているのは:
spuligil
2023-05-24 12:02:00 -07:00
committed by Rahul Choudhary
コミット e85a958191
2個のファイルの変更102行の追加2行の削除

ファイルの表示

@@ -546,6 +546,15 @@ enum htt_dbg_ext_stats_type {
*/
HTT_DBG_PDEV_TDMA_STATS = 57,
/** HTT_DBG_CODEL_STATS
* PARAMS:
* - No Params
* RESP MSG:
* - htt_codel_svc_class_stats_tlv
* - htt_codel_msduq_stats_tlv
*/
HTT_DBG_CODEL_STATS = 58,
/* keep this last */
HTT_DBG_NUM_EXT_STATS = 256,
@@ -9550,5 +9559,92 @@ typedef struct {
htt_umac_ssr_stats_t stats;
} htt_umac_ssr_stats_tlv;
typedef struct {
htt_tlv_hdr_t tlv_hdr;
A_UINT32 svc_class_id;
/* codel_drops:
* How many times have MSDU queues belonging to this service class
* dropped their head MSDU due to the queue's latency being above
* the CoDel latency limit specified for the service class throughout
* the full CoDel latency statistics collection window.
*/
A_UINT32 codel_drops;
/* codel_no_drops:
* How many times have MSDU queues belonging to this service class
* completed a CoDel latency statistics collection window and
* concluded that no head MSDU drop is needed, due to the MSDU queue's
* latency being under the limit specified for the service class at
* some point during the window.
*/
A_UINT32 codel_no_drops;
} htt_codel_svc_class_stats_tlv;
#define HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_M 0x0000FFFF
#define HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_S 0
#define HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_GET(_var) \
(((_var) & HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_M) >> \
HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_S)
#define HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_SET(_var, _val) \
do { \
HTT_CHECK_SET_VAL(HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM, _val); \
((_var) |= ((_val) << HTT_CODEL_MSDUQ_STATS_TX_FLOW_NUM_S)); \
} while (0)
#define HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_M 0x00FF0000
#define HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_S 16
#define HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_GET(_var) \
(((_var) & HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_M) >> \
HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_S)
#define HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_SET(_var, _val) \
do { \
HTT_CHECK_SET_VAL(HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID, _val); \
((_var) |= ((_val) << HTT_CODEL_MSDUQ_STATS_SVC_CLASS_ID_S)); \
} while (0)
#define HTT_CODEL_MSDUQ_STATS_DROPS_M 0x0000FFFF
#define HTT_CODEL_MSDUQ_STATS_DROPS_S 0
#define HTT_CODEL_MSDUQ_STATS_DROPS_GET(_var) \
(((_var) & HTT_CODEL_MSDUQ_STATS_DROPS_M) >> \
HTT_CODEL_MSDUQ_STATS_DROPS_S)
#define HTT_CODEL_MSDUQ_STATS_DROPS_SET(_var, _val) \
do { \
HTT_CHECK_SET_VAL(HTT_CODEL_MSDUQ_STATS_DROPS, _val); \
((_var) |= ((_val) << HTT_CODEL_MSDUQ_STATS_DROPS_S)); \
} while (0)
#define HTT_CODEL_MSDUQ_STATS_NO_DROPS_M 0xFFFF0000
#define HTT_CODEL_MSDUQ_STATS_NO_DROPS_S 16
#define HTT_CODEL_MSDUQ_STATS_NO_DROPS_GET(_var) \
(((_var) & HTT_CODEL_MSDUQ_STATS_NO_DROPS_M) >> \
HTT_CODEL_MSDUQ_STATS_NO_DROPS_S)
#define HTT_CODEL_MSDUQ_STATS_NO_DROPS_SET(_var, _val) \
do { \
HTT_CHECK_SET_VAL(HTT_CODEL_MSDUQ_STATS_NO_DROPS, _val); \
((_var) |= ((_val) << HTT_CODEL_MSDUQ_STATS_NO_DROPS_S)); \
} while (0)
typedef struct {
htt_tlv_hdr_t tlv_hdr;
union {
A_UINT32 id__word;
struct {
A_UINT32 tx_flow_num: 16, /* FW's MSDU queue ID */
svc_class_id: 8,
reserved: 8;
};
};
union {
A_UINT32 stats__word;
struct {
A_UINT32
codel_drops: 16,
codel_no_drops: 16;
};
};
} htt_codel_msduq_stats_tlv;
#endif /* __HTT_STATS_H__ */