blob: 3c4568175235ecbb6c39e66ee3f1e12fec85b5fc [file] [log] [blame]
/*
* Copyright (c) 2019 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef MIPI_SYST_PLATFORM_INCLUDED
#define MIPI_SYST_PLATFORM_INCLUDED
#include <zephyr/logging/log_output.h>
#ifdef __cplusplus
extern "C" {
#endif
#define MIPI_SYST_PCFG_PRINTF_ARGBUF_SIZE CONFIG_LOG_MIPI_SYST_ARGS_BUFFER_SIZE
#if defined(CONFIG_MIPI_SYST_STP)
/*
* Structure generating STP protocol data
*/
struct stp_writer_data {
mipi_syst_u8 byteDone;
mipi_syst_u8 current;
mipi_syst_u16 master;
mipi_syst_u16 channel;
mipi_syst_u64 recordCount;
mipi_syst_u64 timestamp;
};
#endif
#if defined(MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA)
/*
* Platform specific SyS-T global state extension
*/
struct mipi_syst_platform_state {
#if defined(CONFIG_MIPI_SYST_STP)
struct stp_writer_data *stpWriter;
#endif
void (*write_d8)(struct mipi_syst_handle *systh, mipi_syst_u8 v);
void (*write_d16)(struct mipi_syst_handle *systh, mipi_syst_u16 v);
void (*write_d32)(struct mipi_syst_handle *systh, mipi_syst_u32 v);
#if defined(MIPI_SYST_PCFG_ENABLE_64BIT_IO)
void (*write_d64)(struct mipi_syst_handle *systh, mipi_syst_u64 v);
#endif
void (*write_d32ts)(struct mipi_syst_handle *systh, mipi_syst_u32 v);
void (*write_d32mts)(struct mipi_syst_handle *systh, mipi_syst_u32 v);
void (*write_d64mts)(struct mipi_syst_handle *systh, mipi_syst_u64 v);
void (*write_flag)(struct mipi_syst_handle *systh);
};
/*
* Platform specific SyS-T handle state extension
*/
struct mipi_syst_platform_handle {
mipi_syst_u32 flag;
#if defined(CONFIG_MIPI_SYST_STP)
mipi_syst_u32 master;
mipi_syst_u32 channel;
#endif
struct log_output *log_output;
};
/*
* IO output routine mapping
* Call the function pointers in the global state
*/
#define MIPI_SYST_OUTPUT_D8(syst_handle, data) \
((syst_handle)->systh_header-> \
systh_platform.write_d8((syst_handle), (data)))
#define MIPI_SYST_OUTPUT_D16(syst_handle, data) \
((syst_handle)->systh_header-> \
systh_platform.write_d16((syst_handle), (data)))
#define MIPI_SYST_OUTPUT_D32(syst_handle, data) \
((syst_handle)->systh_header-> \
systh_platform.write_d32((syst_handle), (data)))
#if defined(MIPI_SYST_PCFG_ENABLE_64BIT_IO)
#define MIPI_SYST_OUTPUT_D64(syst_handle, data) \
((syst_handle)->systh_header-> \
systh_platform.write_d64((syst_handle), (data)))
#endif
#define MIPI_SYST_OUTPUT_D32TS(syst_handle, data) \
((syst_handle)->systh_header-> \
systh_platform.write_d32ts((syst_handle), (data)))
#define MIPI_SYST_OUTPUT_D32MTS(syst_handle, data) \
((syst_handle)->systh_header-> \
systh_platform.write_d32mts((syst_handle), (data)))
#define MIPI_SYST_OUTPUT_D64MTS(syst_handle, data) \
((syst_handle)->systh_header-> \
systh_platform.write_d64mts((syst_handle), (data)))
#define MIPI_SYST_OUTPUT_FLAG(syst_handle) \
((syst_handle)->systh_header-> \
systh_platform.write_flag((syst_handle)))
#else
#define MIPI_SYST_OUTPUT_D8(syst_handle, data)
#define MIPI_SYST_OUTPUT_D16(syst_handle, data)
#define MIPI_SYST_OUTPUT_D32(syst_handle, data)
#if defined(MIPI_SYST_PCFG_ENABLE_64BIT_IO)
#define MIPI_SYST_OUTPUT_D64(syst_handle, data)
#endif
#define MIPI_SYST_OUTPUT_D32TS(syst_handle, data)
#define MIPI_SYST_OUTPUT_FLAG(syst_handle)
#endif
#if defined(MIPI_SYST_PCFG_ENABLE_HEAP_MEMORY)
#define MIPI_SYST_HEAP_MALLOC(s)
#define MIPI_SYST_HEAP_FREE(p)
#endif
#if defined(MIPI_SYST_PCFG_ENABLE_TIMESTAMP)
#define MIPI_SYST_PLATFORM_CLOCK() mipi_syst_get_epoch()
#define MIPI_SYST_PLATFORM_FREQ() CONFIG_SYS_CLOCK_TICKS_PER_SEC
mipi_syst_u64 mipi_syst_get_epoch(void);
#endif
#ifdef __cplusplus
}
#endif
#endif