
This is a snapshot of the coresight-cti driver as of msm-4.14 commit '7d42028b99d32ad6ec82aa429378fba0280a1c4a'.byte-cntr: Read 64bit rwp TMC RWP has two 32bit registers which combine to one 64bit register. Read correct RWP register in byte counter driver. Make necessary change to adopt coresight framework change. Change-Id: I4a89b9b041c354093b96e01ee0436a7372ff37fd Signed-off-by: Rama Aparna Mallavarapu <aparnam@codeaurora.org> Signed-off-by: Mulu He <muluhe@codeaurora.org> Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org>
138 lines
4.5 KiB
C
138 lines
4.5 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* System Trace Module (STM) infrastructure apis
|
|
* Copyright (C) 2014 Intel Corporation.
|
|
*/
|
|
|
|
#ifndef _STM_H_
|
|
#define _STM_H_
|
|
|
|
#include <linux/device.h>
|
|
|
|
/**
|
|
* enum stp_packet_type - STP packets that an STM driver sends
|
|
*/
|
|
enum stp_packet_type {
|
|
STP_PACKET_DATA = 0,
|
|
STP_PACKET_FLAG,
|
|
STP_PACKET_USER,
|
|
STP_PACKET_MERR,
|
|
STP_PACKET_GERR,
|
|
STP_PACKET_TRIG,
|
|
STP_PACKET_XSYNC,
|
|
};
|
|
|
|
/**
|
|
* enum stp_packet_flags - STP packet modifiers
|
|
*/
|
|
enum stp_packet_flags {
|
|
STP_PACKET_MARKED = 0x1,
|
|
STP_PACKET_TIMESTAMPED = 0x2,
|
|
};
|
|
|
|
struct stp_policy;
|
|
|
|
struct stm_device;
|
|
|
|
/**
|
|
* struct stm_data - STM device description and callbacks
|
|
* @name: device name
|
|
* @stm: internal structure, only used by stm class code
|
|
* @sw_start: first STP master available to software
|
|
* @sw_end: last STP master available to software
|
|
* @sw_nchannels: number of STP channels per master
|
|
* @sw_mmiosz: size of one channel's IO space, for mmap, optional
|
|
* @hw_override: masters in the STP stream will not match the ones
|
|
* assigned by software, but are up to the STM hardware
|
|
* @packet: callback that sends an STP packet
|
|
* @mmio_addr: mmap callback, optional
|
|
* @link: called when a new stm_source gets linked to us, optional
|
|
* @unlink: likewise for unlinking, again optional
|
|
* @set_options: set device-specific options on a channel
|
|
*
|
|
* Fill out this structure before calling stm_register_device() to create
|
|
* an STM device and stm_unregister_device() to destroy it. It will also be
|
|
* passed back to @packet(), @mmio_addr(), @link(), @unlink() and @set_options()
|
|
* callbacks.
|
|
*
|
|
* Normally, an STM device will have a range of masters available to software
|
|
* and the rest being statically assigned to various hardware trace sources.
|
|
* The former is defined by the the range [@sw_start..@sw_end] of the device
|
|
* description. That is, the lowest master that can be allocated to software
|
|
* writers is @sw_start and data from this writer will appear is @sw_start
|
|
* master in the STP stream.
|
|
*
|
|
* The @packet callback should adhere to the following rules:
|
|
* 1) it must return the number of bytes it consumed from the payload;
|
|
* 2) therefore, if it sent a packet that does not have payload (like FLAG),
|
|
* it must return zero;
|
|
* 3) if it does not support the requested packet type/flag combination,
|
|
* it must return -ENOTSUPP.
|
|
*
|
|
* The @unlink callback is called when there are no more active writers so
|
|
* that the master/channel can be quiesced.
|
|
*/
|
|
struct stm_data {
|
|
const char *name;
|
|
struct stm_device *stm;
|
|
unsigned int sw_start;
|
|
unsigned int sw_end;
|
|
unsigned int sw_nchannels;
|
|
unsigned int sw_mmiosz;
|
|
unsigned int hw_override;
|
|
#ifdef CONFIG_CORESIGHT_QGKI
|
|
bool (*ost_configured)(void);
|
|
ssize_t (*ost_packet)(struct stm_data *stm_data,
|
|
unsigned int size,
|
|
const unsigned char *buf);
|
|
#endif
|
|
ssize_t (*packet)(struct stm_data *, unsigned int,
|
|
unsigned int, unsigned int,
|
|
unsigned int, unsigned int,
|
|
const unsigned char *);
|
|
phys_addr_t (*mmio_addr)(struct stm_data *, unsigned int,
|
|
unsigned int, unsigned int);
|
|
int (*link)(struct stm_data *, unsigned int,
|
|
unsigned int);
|
|
void (*unlink)(struct stm_data *, unsigned int,
|
|
unsigned int);
|
|
long (*set_options)(struct stm_data *, unsigned int,
|
|
unsigned int, unsigned int,
|
|
unsigned long);
|
|
};
|
|
|
|
int stm_register_device(struct device *parent, struct stm_data *stm_data,
|
|
struct module *owner);
|
|
void stm_unregister_device(struct stm_data *stm_data);
|
|
|
|
struct stm_source_device;
|
|
|
|
/**
|
|
* struct stm_source_data - STM source device description and callbacks
|
|
* @name: device name, will be used for policy lookup
|
|
* @src: internal structure, only used by stm class code
|
|
* @nr_chans: number of channels to allocate
|
|
* @link: called when this source gets linked to an STM device
|
|
* @unlink: called when this source is about to get unlinked from its STM
|
|
*
|
|
* Fill in this structure before calling stm_source_register_device() to
|
|
* register a source device. Also pass it to unregister and write calls.
|
|
*/
|
|
struct stm_source_data {
|
|
const char *name;
|
|
struct stm_source_device *src;
|
|
unsigned int percpu;
|
|
unsigned int nr_chans;
|
|
int (*link)(struct stm_source_data *data);
|
|
void (*unlink)(struct stm_source_data *data);
|
|
};
|
|
|
|
int stm_source_register_device(struct device *parent,
|
|
struct stm_source_data *data);
|
|
void stm_source_unregister_device(struct stm_source_data *data);
|
|
|
|
int notrace stm_source_write(struct stm_source_data *data, unsigned int chan,
|
|
const char *buf, size_t count);
|
|
|
|
#endif /* _STM_H_ */
|