linux/drivers/net/wwan/iosm/iosm_ipc_trace.h
<<
>>
Prefs
   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 */
  20enum 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
  37struct 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
  50static 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
  55struct iosm_trace *ipc_trace_init(struct iosm_imem *ipc_imem);
  56void ipc_trace_deinit(struct iosm_trace *ipc_trace);
  57void ipc_trace_port_rx(struct iosm_imem *ipc_imem, struct sk_buff *skb);
  58
  59#else
  60
  61static inline bool ipc_is_trace_channel(struct iosm_imem *ipc_mem, u16 chl_id)
  62{
  63        return false;
  64}
  65
  66static 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