/*
 * Copyright (c) 2021 Carlo Caione <ccaione@baylibre.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_INCLUDE_IPC_SERVICE_IPC_STATIC_VRINGS_H_
#define ZEPHYR_INCLUDE_IPC_SERVICE_IPC_STATIC_VRINGS_H_

#include <ipc/ipc_service.h>
#include <openamp/open_amp.h>
#include <metal/device.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief IPC service static VRINGs API
 * @defgroup ipc_service_static_vrings_api IPC service static VRINGs API
 * @{
 */

/** Number of used VRING buffers. */
#define VRING_COUNT	(2)

/** VRING alignment. */
#define VRING_ALIGNMENT	CONFIG_IPC_SERVICE_STATIC_VRINGS_ALIGNMENT

/**
 * @typedef ipc_notify_cb
 * @brief Define the notify callback.
 *
 * This callback is defined at instance level and it is called on virtqueue notify.
 *
 * @param vq Virtqueue.
 * @param priv Priv data.
 */
typedef void (*ipc_notify_cb)(struct virtqueue *vq, void *priv);

/** @brief Static VRINGs structure.
 *
 *  Struct used to represent and carry information about static allocation of VRINGs.
 */
struct ipc_static_vrings {
	/** virtIO device. */
	struct virtio_device vdev;

	/** SHM physmap. */
	metal_phys_addr_t shm_physmap[1];

	/** SHM device. */
	struct metal_device shm_device;

	/** SHM and addresses. */
	uintptr_t status_reg_addr;

	/** TX VRING address. */
	uintptr_t tx_addr;

	/** RX VRING address. */
	uintptr_t rx_addr;

	/** VRING size. */
	size_t vring_size;

	/** Shared memory region address. */
	uintptr_t shm_addr;

	/** Share memory region size. */
	size_t shm_size;

	/** SHM IO region. */
	struct metal_io_region *shm_io;

	/** VRINGs */
	struct virtio_vring_info rvrings[VRING_COUNT];

	/** Virtqueues. */
	struct virtqueue *vq[VRING_COUNT];

	/** Private data to be passed to the notify callback. */
	void *priv;

	/** Notify callback. */
	ipc_notify_cb notify_cb;
};

/** @brief Init the static VRINGs.
 *
 *  Init VRINGs and Virtqueues of an OpenAMP / RPMsg instance.
 *
 *  @param vr Pointer to the VRINGs instance struct.
 *  @param role Host / Remote role.
 *
 *  @retval -EINVAL When some parameter is missing.
 *  @retval -ENOMEM When memory is not enough for VQs allocation.
 *  @retval 0 If successful.
 *  @retval Other errno codes depending on the OpenAMP implementation.
 */
int ipc_static_vrings_init(struct ipc_static_vrings *vr, unsigned int role);

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* ZEPHYR_INCLUDE_IPC_SERVICE_IPC_STATIC_VRINGS_H_ */
