Linux preempt-rt

Check our new training course

Real-Time Linux with PREEMPT_RT

Check our new training course
with Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

/*
 * Copyright (c) 2019 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef MIPI_SYST_PLATFORM_INCLUDED
#define MIPI_SYST_PLATFORM_INCLUDED

#include <logging/log_output.h>

#ifdef __cplusplus
extern "C" {
#endif

#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