1 /* SPDX-License-Identifier: GPL-2.0-only 2 * 3 * Copyright (C) 2020-2021 Intel Corporation. 4 */ 5 6 #ifndef IOSM_IPC_TRACE_H 7 #define IOSM_IPC_TRACE_H 8 9 #include <linux/debugfs.h> 10 #include <linux/relay.h> 11 12 #include "iosm_ipc_chnl_cfg.h" 13 #include "iosm_ipc_imem_ops.h" 14 15 /** 16 * enum trace_ctrl_mode - State of trace channel 17 * @TRACE_DISABLE: mode for disable trace 18 * @TRACE_ENABLE: mode for enable trace 19 */ 20 enum trace_ctrl_mode { 21 TRACE_DISABLE = 0, 22 TRACE_ENABLE, 23 }; 24 25 /** 26 * struct iosm_trace - Struct for trace interface 27 * @ipc_rchan: Pointer to relay channel 28 * @ctrl_file: Pointer to trace control file 29 * @ipc_imem: Imem instance 30 * @dev: Pointer to device struct 31 * @channel: Channel instance 32 * @chl_id: Channel Indentifier 33 * @trc_mutex: Mutex used for read and write mode 34 * @mode: Mode for enable and disable trace 35 */ 36 37 struct iosm_trace { 38 struct rchan *ipc_rchan; 39 struct dentry *ctrl_file; 40 struct iosm_imem *ipc_imem; 41 struct device *dev; 42 struct ipc_mem_channel *channel; 43 enum ipc_channel_id chl_id; 44 struct mutex trc_mutex; /* Mutex used for read and write mode */ 45 enum trace_ctrl_mode mode; 46 }; 47 48 #ifdef CONFIG_WWAN_DEBUGFS 49 50 static inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id) 51 { 52 return ipc_mem->trace && ipc_mem->trace->chl_id == chl_id; 53 } 54 55 struct iosm_trace *ipc_trace_init(struct iosm_imem *ipc_imem); 56 void ipc_trace_deinit(struct iosm_trace *ipc_trace); 57 void ipc_trace_port_rx(struct iosm_imem *ipc_imem, struct sk_buff *skb); 58 59 #else 60 61 static inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id) 62 { 63 return false; 64 } 65 66 static inline void ipc_trace_port_rx(struct iosm_imem *ipc_imem, 67 struct sk_buff *skb) 68 { 69 dev_kfree_skb(skb); 70 } 71 72 #endif 73 74 #endif 75