75 lines
1.7 KiB
C
75 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only
|
|
*
|
|
* Copyright (C) 2020-2021 Intel Corporation.
|
|
*/
|
|
|
|
#ifndef IOSM_IPC_TRACE_H
|
|
#define IOSM_IPC_TRACE_H
|
|
|
|
#include <linux/debugfs.h>
|
|
#include <linux/relay.h>
|
|
|
|
#include "iosm_ipc_chnl_cfg.h"
|
|
#include "iosm_ipc_imem_ops.h"
|
|
|
|
/**
|
|
* enum trace_ctrl_mode - State of trace channel
|
|
* @TRACE_DISABLE: mode for disable trace
|
|
* @TRACE_ENABLE: mode for enable trace
|
|
*/
|
|
enum trace_ctrl_mode {
|
|
TRACE_DISABLE = 0,
|
|
TRACE_ENABLE,
|
|
};
|
|
|
|
/**
|
|
* struct iosm_trace - Struct for trace interface
|
|
* @ipc_rchan: Pointer to relay channel
|
|
* @ctrl_file: Pointer to trace control file
|
|
* @ipc_imem: Imem instance
|
|
* @dev: Pointer to device struct
|
|
* @channel: Channel instance
|
|
* @chl_id: Channel Identifier
|
|
* @trc_mutex: Mutex used for read and write mode
|
|
* @mode: Mode for enable and disable trace
|
|
*/
|
|
|
|
struct iosm_trace {
|
|
struct rchan *ipc_rchan;
|
|
struct dentry *ctrl_file;
|
|
struct iosm_imem *ipc_imem;
|
|
struct device *dev;
|
|
struct ipc_mem_channel *channel;
|
|
enum ipc_channel_id chl_id;
|
|
struct mutex trc_mutex; /* Mutex used for read and write mode */
|
|
enum trace_ctrl_mode mode;
|
|
};
|
|
|
|
#ifdef CONFIG_WWAN_DEBUGFS
|
|
|
|
static inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id)
|
|
{
|
|
return ipc_mem->trace && ipc_mem->trace->chl_id == chl_id;
|
|
}
|
|
|
|
struct iosm_trace *ipc_trace_init(struct iosm_imem *ipc_imem);
|
|
void ipc_trace_deinit(struct iosm_trace *ipc_trace);
|
|
void ipc_trace_port_rx(struct iosm_imem *ipc_imem, struct sk_buff *skb);
|
|
|
|
#else
|
|
|
|
static inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline void ipc_trace_port_rx(struct iosm_imem *ipc_imem,
|
|
struct sk_buff *skb)
|
|
{
|
|
dev_kfree_skb(skb);
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|