blob: 1d27e9498ce034187fbc663952a337dbc696828d [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2014-2015, 2018, 2020 The Linux Foundation. All rights reserved.
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all copies.
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**************************************************************************
*/
/*
* nss_log.h
* NSS FW debug log memory header file
*/
#ifndef __NSS_LOG_H
#define __NSS_LOG_H
#define NSS_DEBUG_LOG_VERSION 0x1
/**
* Dynamic Interface types
*/
enum nss_debug_interface_msg_type {
NSS_DEBUG_INTERFACE_TYPE_NONE = 0,
NSS_DEBUG_INTERFACE_TYPE_LOG_BUF_INIT = 1,
NSS_DEBUG_INTERFACE_TYPE_MAX,
};
/*
* The size of each log entry to be displayed.
*/
#define NSS_LOG_OUTPUT_LINE_SIZE 151 /* 5 + 12 + 132 + '\n' + '\0' (see below) */
#define NSS_LOG_LINE_FORMAT "%3d: %010u: %s\n"
#define NSS_LOG_LINE_WIDTH 132
#define NSS_LOG_COOKIE 0xFF785634
/*
* Dump last N entry during the coredump.
* This number should be lower than the minimum size of the logbuf
* which 32 right now.
*/
#define NSS_LOG_COREDUMP_LINE_NUM 25
/*
* Saves the ring buffer address for logging per NSS core
*/
struct nss_log_ring_buffer_addr {
void *addr; /* Pointer to struct nss_log_descriptor */
dma_addr_t dma_addr; /* DMA Handle */
uint32_t nentries; /* Number of entries in the ring buffer */
int ref_cnt; /* Reference count */
};
/*
* nss_log_entry is shared between Host and NSS FW
*/
struct nss_log_entry {
uint64_t sequence_num; /* Sequence number */
uint32_t cookie; /* Magic for verification */
uint32_t thread_num; /* thread-id */
uint32_t timestamp; /* timestamp in ticks */
char message[NSS_LOG_LINE_WIDTH]; /* actual debug message */
} __attribute__((aligned(NSS_CACHE_LINE_SIZE)));
/*
* The NSS log descripts holds ring-buffer along with other variables and
* it is shared between NSS FW and Host.
*
* NSS FW writes to ring buffer and current_entry but read by only Host.
*/
struct nss_log_descriptor {
uint32_t cookie; /* Magic for verification */
uint32_t log_nentries; /* No.of log entries */
uint32_t current_entry; /* pointer to current log entry */
uint8_t pad[20]; /* pad to align ring buffer at cacheline boundary */
struct nss_log_entry log_ring_buffer[0]; /* The actual log entry ring buffer */
} __attribute__((aligned(NSS_CACHE_LINE_SIZE)));
struct nss_log_debug_memory_msg {
uint32_t version;
uint32_t nentry;
uint32_t phy_addr;
};
struct nss_log_debug_interface_msg {
struct nss_cmn_msg cm;
union {
struct nss_log_debug_memory_msg addr;
} msg;
};
/**
* @brief Callback to receive debug interface messages
*
* @param app_data Application context of the message
* @param msg Message data
*
* @return void
*/
typedef void (*nss_log_msg_callback_t)(void *app_data, struct nss_log_debug_interface_msg *msg);
/*
* Exported by nss_init.c and used in nss_log.c
*/
extern int nss_ctl_logbuf;
extern struct nss_log_ring_buffer_addr nss_rbe[NSS_MAX_CORES];
#endif /* __NSS_LOG_H */