162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci * 362306a36Sopenharmony_ci * Copyright (C) 2020-2021 Intel Corporation. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef IOSM_IPC_TRACE_H 762306a36Sopenharmony_ci#define IOSM_IPC_TRACE_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/debugfs.h> 1062306a36Sopenharmony_ci#include <linux/relay.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include "iosm_ipc_chnl_cfg.h" 1362306a36Sopenharmony_ci#include "iosm_ipc_imem_ops.h" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/** 1662306a36Sopenharmony_ci * enum trace_ctrl_mode - State of trace channel 1762306a36Sopenharmony_ci * @TRACE_DISABLE: mode for disable trace 1862306a36Sopenharmony_ci * @TRACE_ENABLE: mode for enable trace 1962306a36Sopenharmony_ci */ 2062306a36Sopenharmony_cienum trace_ctrl_mode { 2162306a36Sopenharmony_ci TRACE_DISABLE = 0, 2262306a36Sopenharmony_ci TRACE_ENABLE, 2362306a36Sopenharmony_ci}; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/** 2662306a36Sopenharmony_ci * struct iosm_trace - Struct for trace interface 2762306a36Sopenharmony_ci * @ipc_rchan: Pointer to relay channel 2862306a36Sopenharmony_ci * @ctrl_file: Pointer to trace control file 2962306a36Sopenharmony_ci * @ipc_imem: Imem instance 3062306a36Sopenharmony_ci * @dev: Pointer to device struct 3162306a36Sopenharmony_ci * @channel: Channel instance 3262306a36Sopenharmony_ci * @chl_id: Channel Indentifier 3362306a36Sopenharmony_ci * @trc_mutex: Mutex used for read and write mode 3462306a36Sopenharmony_ci * @mode: Mode for enable and disable trace 3562306a36Sopenharmony_ci */ 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistruct iosm_trace { 3862306a36Sopenharmony_ci struct rchan *ipc_rchan; 3962306a36Sopenharmony_ci struct dentry *ctrl_file; 4062306a36Sopenharmony_ci struct iosm_imem *ipc_imem; 4162306a36Sopenharmony_ci struct device *dev; 4262306a36Sopenharmony_ci struct ipc_mem_channel *channel; 4362306a36Sopenharmony_ci enum ipc_channel_id chl_id; 4462306a36Sopenharmony_ci struct mutex trc_mutex; /* Mutex used for read and write mode */ 4562306a36Sopenharmony_ci enum trace_ctrl_mode mode; 4662306a36Sopenharmony_ci}; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci#ifdef CONFIG_WWAN_DEBUGFS 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistatic inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id) 5162306a36Sopenharmony_ci{ 5262306a36Sopenharmony_ci return ipc_mem->trace && ipc_mem->trace->chl_id == chl_id; 5362306a36Sopenharmony_ci} 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct iosm_trace *ipc_trace_init(struct iosm_imem *ipc_imem); 5662306a36Sopenharmony_civoid ipc_trace_deinit(struct iosm_trace *ipc_trace); 5762306a36Sopenharmony_civoid ipc_trace_port_rx(struct iosm_imem *ipc_imem, struct sk_buff *skb); 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#else 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cistatic inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id) 6262306a36Sopenharmony_ci{ 6362306a36Sopenharmony_ci return false; 6462306a36Sopenharmony_ci} 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cistatic inline void ipc_trace_port_rx(struct iosm_imem *ipc_imem, 6762306a36Sopenharmony_ci struct sk_buff *skb) 6862306a36Sopenharmony_ci{ 6962306a36Sopenharmony_ci dev_kfree_skb(skb); 7062306a36Sopenharmony_ci} 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci#endif 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci#endif 75