mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-07 18:50:41 +00:00
Add support to process factory test mode commands (FTM) for calibration. By default firmware start with NORMAL mode and to process the FTM commands firmware needs to be restarted in FTM mode using module parameter ftm_mode. The pre-request is all the radios should be down before starting the test. When start command ATH11K_TM_CMD_TESTMODE_START is received, ar->state is set to Test Mode. If the FTM command or event length is greater than 256 bytes, it will be broken down into multiple segments and encoded with TLV header if it is segmented commands, else it is sent to firmware as it is. On receiving UTF event from firmware, if it is segmented event, the driver will wait until it receives all the segments and notify the complete data to user application. In case the segmented sequence are missed or lost from the firmware, driver will skip the already received partial data. In case of unsegmented UTF event from firmware, driver notifies the data to the user application as it comes. Applications handles the data further. Command to boot in ftm mode: insmod ath11k ftm_mode=1 Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1 Signed-off-by: Govindaraj Saminathan <quic_gsaminat@quicinc.com> Co-developed-by: Sowmiya Sree Elavalagan <quic_ssreeela@quicinc.com> Signed-off-by: Sowmiya Sree Elavalagan <quic_ssreeela@quicinc.com> Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
70 lines
2.0 KiB
C
70 lines
2.0 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
|
/*
|
|
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef _ATH11K_DEBUG_H_
|
|
#define _ATH11K_DEBUG_H_
|
|
|
|
#include "trace.h"
|
|
#include "debugfs.h"
|
|
|
|
enum ath11k_debug_mask {
|
|
ATH11K_DBG_AHB = 0x00000001,
|
|
ATH11K_DBG_WMI = 0x00000002,
|
|
ATH11K_DBG_HTC = 0x00000004,
|
|
ATH11K_DBG_DP_HTT = 0x00000008,
|
|
ATH11K_DBG_MAC = 0x00000010,
|
|
ATH11K_DBG_BOOT = 0x00000020,
|
|
ATH11K_DBG_QMI = 0x00000040,
|
|
ATH11K_DBG_DATA = 0x00000080,
|
|
ATH11K_DBG_MGMT = 0x00000100,
|
|
ATH11K_DBG_REG = 0x00000200,
|
|
ATH11K_DBG_TESTMODE = 0x00000400,
|
|
ATH11k_DBG_HAL = 0x00000800,
|
|
ATH11K_DBG_PCI = 0x00001000,
|
|
ATH11K_DBG_DP_TX = 0x00002000,
|
|
ATH11K_DBG_DP_RX = 0x00004000,
|
|
ATH11K_DBG_ANY = 0xffffffff,
|
|
};
|
|
|
|
__printf(2, 3) void ath11k_info(struct ath11k_base *ab, const char *fmt, ...);
|
|
__printf(2, 3) void ath11k_err(struct ath11k_base *ab, const char *fmt, ...);
|
|
__printf(2, 3) void ath11k_warn(struct ath11k_base *ab, const char *fmt, ...);
|
|
|
|
extern unsigned int ath11k_debug_mask;
|
|
|
|
#ifdef CONFIG_ATH11K_DEBUG
|
|
__printf(3, 4) void __ath11k_dbg(struct ath11k_base *ab,
|
|
enum ath11k_debug_mask mask,
|
|
const char *fmt, ...);
|
|
void ath11k_dbg_dump(struct ath11k_base *ab,
|
|
enum ath11k_debug_mask mask,
|
|
const char *msg, const char *prefix,
|
|
const void *buf, size_t len);
|
|
#else /* CONFIG_ATH11K_DEBUG */
|
|
static inline int __ath11k_dbg(struct ath11k_base *ab,
|
|
enum ath11k_debug_mask dbg_mask,
|
|
const char *fmt, ...)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void ath11k_dbg_dump(struct ath11k_base *ab,
|
|
enum ath11k_debug_mask mask,
|
|
const char *msg, const char *prefix,
|
|
const void *buf, size_t len)
|
|
{
|
|
}
|
|
#endif /* CONFIG_ATH11K_DEBUG */
|
|
|
|
#define ath11k_dbg(ar, dbg_mask, fmt, ...) \
|
|
do { \
|
|
if ((ath11k_debug_mask & dbg_mask) || \
|
|
trace_ath11k_log_dbg_enabled()) \
|
|
__ath11k_dbg(ar, dbg_mask, fmt, ##__VA_ARGS__); \
|
|
} while (0)
|
|
|
|
#endif /* _ATH11K_DEBUG_H_ */
|