/* ipm_console.c - Console messages to/from another processor */

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

#ifndef _IPM_CONSOLE_H_
#define _IPM_CONSOLE_H_

#include <kernel.h>
#include <device.h>
#include <misc/ring_buffer.h>

#ifdef __cplusplus
extern "C" {
#endif

#define IPM_CONSOLE_STDOUT	(1 << 0)
#define IPM_CONSOLE_PRINTK	(1 << 1)

/*
 * Good way to determine these numbers other than trial-and-error?
 * using printf() in the thread seems to require a lot more stack space
 */
#define IPM_CONSOLE_STACK_SIZE		CONFIG_IPM_CONSOLE_STACK_SIZE
#define IPM_CONSOLE_PRI			2

struct ipm_console_receiver_config_info {
	/** Name of the low-level IPM driver to bind to */
	char *bind_to;

	/**
	 * Stack for the receiver's thread, which prints out messages as
	 * they come in. Should be sized CONFIG_IPM_CONSOLE_STACK_SIZE
	 */
	k_thread_stack_t thread_stack;

	/**
	 * Ring buffer data area for stashing characters from the interrupt
	 * callback
	 */
	u32_t *ring_buf_data;

	/** Size of ring_buf_data in 32-bit chunks */
	unsigned int rb_size32;

	/**
	 * Line buffer for incoming messages, characters accumulate here
	 * and then are sent to printk() once full (including a trailing NULL)
	 * or a carriage return seen
	 */
	char *line_buf;

	/** Size in bytes of the line buffer. Must be at least 2 */
	unsigned int lb_size;

	/**
	 * Destination for received console messages, one of
	 * IPM_CONSOLE_STDOUT or IPM_CONSOLE_PRINTK
	 */
	unsigned int flags;
};

struct ipm_console_receiver_runtime_data {
	/** Buffer for received bytes from the low-level IPM device */
	struct ring_buf rb;

	/** Semaphore to wake up the thread to print out messages */
	struct k_sem sem;

	/** pointer to the bound low-level IPM device */
	struct device *ipm_device;

	/** Indicator that the channel is temporarily disabled due to
	 * full buffer
	 */
	int channel_disabled;

	/** Receiver worker thread */
	struct k_thread rx_thread;
};

struct ipm_console_sender_config_info {
	/** Name of the low-level driver to bind to */
	char *bind_to;

	/**
	 * Source of messages to forward, hooks will be installed.
	 * Can be IPM_CONSOLE_STDOUT, IPM_CONSOLE_PRINTK, or both
	 */
	int flags;
};

#if CONFIG_IPM_CONSOLE_RECEIVER
int ipm_console_receiver_init(struct device *d);
#endif

#if CONFIG_IPM_CONSOLE_SENDER
int ipm_console_sender_init(struct device *d);
#endif

#ifdef __cplusplus
}
#endif

#endif /* _IPM_CONSOLE_H_ */
