Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only
0002  *
0003  * Copyright (C) 2020-2021 Intel Corporation.
0004  */
0005 
0006 #ifndef IOSM_IPC_TRACE_H
0007 #define IOSM_IPC_TRACE_H
0008 
0009 #include <linux/debugfs.h>
0010 #include <linux/relay.h>
0011 
0012 #include "iosm_ipc_chnl_cfg.h"
0013 #include "iosm_ipc_imem_ops.h"
0014 
0015 /**
0016  * enum trace_ctrl_mode - State of trace channel
0017  * @TRACE_DISABLE:  mode for disable trace
0018  * @TRACE_ENABLE:   mode for enable trace
0019  */
0020 enum trace_ctrl_mode {
0021     TRACE_DISABLE = 0,
0022     TRACE_ENABLE,
0023 };
0024 
0025 /**
0026  * struct iosm_trace - Struct for trace interface
0027  * @ipc_rchan:      Pointer to relay channel
0028  * @ctrl_file:      Pointer to trace control file
0029  * @ipc_imem:       Imem instance
0030  * @dev:        Pointer to device struct
0031  * @channel:        Channel instance
0032  * @chl_id:     Channel Indentifier
0033  * @trc_mutex:      Mutex used for read and write mode
0034  * @mode:       Mode for enable and disable trace
0035  */
0036 
0037 struct iosm_trace {
0038     struct rchan *ipc_rchan;
0039     struct dentry *ctrl_file;
0040     struct iosm_imem *ipc_imem;
0041     struct device *dev;
0042     struct ipc_mem_channel *channel;
0043     enum ipc_channel_id chl_id;
0044     struct mutex trc_mutex; /* Mutex used for read and write mode */
0045     enum trace_ctrl_mode mode;
0046 };
0047 
0048 #ifdef CONFIG_WWAN_DEBUGFS
0049 
0050 static inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id)
0051 {
0052     return ipc_mem->trace && ipc_mem->trace->chl_id == chl_id;
0053 }
0054 
0055 struct iosm_trace *ipc_trace_init(struct iosm_imem *ipc_imem);
0056 void ipc_trace_deinit(struct iosm_trace *ipc_trace);
0057 void ipc_trace_port_rx(struct iosm_imem *ipc_imem, struct sk_buff *skb);
0058 
0059 #else
0060 
0061 static inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id)
0062 {
0063     return false;
0064 }
0065 
0066 static inline void ipc_trace_port_rx(struct iosm_imem *ipc_imem,
0067                      struct sk_buff *skb)
0068 {
0069     dev_kfree_skb(skb);
0070 }
0071 
0072 #endif
0073 
0074 #endif