blob: 2657b79b1ed6f16c5371b6ce41bc1ebb449dd4d7 [file] [log] [blame]
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _TRACER_PKT_H_
#define _TRACER_PKT_H_
#include <linux/err.h>
#include <linux/types.h>
#ifdef CONFIG_TRACER_PKT
/**
* tracer_pkt_init() - initialize the tracer packet
* @data: Pointer to the buffer to be initialized with a tracer
* packet.
* @data_len: Length of the buffer.
* @client_event_cfg: Client-specific event configuration mask.
* @glink_event_cfg: G-Link-specific event configuration mask.
* @pkt_priv: Private/Cookie information to be added to the tracer
* packet.
* @pkt_priv_len: Length of the private data.
*
* This function is used to initialize a buffer with the tracer packet header.
* The tracer packet header includes the data as passed by the elements in the
* parameters.
*
* Return: 0 on success, standard Linux error codes on failure.
*/
int tracer_pkt_init(void *data, size_t data_len,
uint16_t client_event_cfg, uint32_t glink_event_cfg,
void *pkt_priv, size_t pkt_priv_len);
/**
* tracer_pkt_set_event_cfg() - set the event configuration mask in the tracer
* packet
* @data: Pointer to the buffer to be initialized with event
* configuration mask.
* @client_event_cfg: Client-specific event configuration mask.
* @glink_event_cfg: G-Link-specific event configuration mask.
*
* This function is used to initialize a buffer with the event configuration
* mask as passed by the elements in the parameters.
*
* Return: 0 on success, standard Linux error codes on failure.
*/
int tracer_pkt_set_event_cfg(void *data, uint16_t client_event_cfg,
uint32_t glink_event_cfg);
/**
* tracer_pkt_log_event() - log an event specific to the tracer packet
* @data: Pointer to the buffer containing tracer packet.
* @event_id: Event ID to be logged.
*
* This function is used to log an event specific to the tracer packet.
* The event is logged either into the tracer packet itself or a different
* tracing mechanism as configured.
*
* Return: 0 on success, standard Linux error codes on failure.
*/
int tracer_pkt_log_event(void *data, uint32_t event_id);
/**
* tracer_pkt_calc_hex_dump_size() - calculate the hex dump size of a tracer
* packet
* @data: Pointer to the buffer containing tracer packet.
* @data_len: Length of the tracer packet buffer.
*
* This function is used to calculate the length of the buffer required to
* hold the hex dump of the tracer packet.
*
* Return: 0 on success, standard Linux error codes on failure.
*/
size_t tracer_pkt_calc_hex_dump_size(void *data, size_t data_len);
/**
* tracer_pkt_hex_dump() - hex dump the tracer packet into a buffer
* @buf: Buffer to contain the hex dump of the tracer packet.
* @buf_len: Length of the hex dump buffer.
* @data: Buffer containing the tracer packet.
* @data_len: Length of the buffer containing the tracer packet.
*
* This function is used to dump the contents of the tracer packet into
* a buffer in a specific hexadecimal format. The hex dump buffer can then
* be dumped through debugfs.
*
* Return: 0 on success, standard Linux error codes on failure.
*/
int tracer_pkt_hex_dump(void *buf, size_t buf_len, void *data, size_t data_len);
#else
static inline int tracer_pkt_init(void *data, size_t data_len,
uint16_t client_event_cfg, uint32_t glink_event_cfg,
void *pkt_priv, size_t pkt_priv_len)
{
return -EOPNOTSUPP;
}
static inline int tracer_pkt_set_event_cfg(uint16_t client_event_cfg,
uint32_t glink_event_cfg)
{
return -EOPNOTSUPP;
}
static inline int tracer_pkt_log_event(void *data, uint32_t event_id)
{
return -EOPNOTSUPP;
}
static inline size_t tracer_pkt_calc_hex_dump_size(void *data, size_t data_len)
{
return -EOPNOTSUPP;
}
static inline int tracer_pkt_hex_dump(void *buf, size_t buf_len, void *data,
size_t data_len)
{
return -EOPNOTSUPP;
}
#endif /* CONFIG_TRACER_PKT */
#endif /* _TRACER_PKT_H_ */