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

#include <syscall_handler.h>
#include <drivers/mbox.h>

static inline int z_vrfy_mbox_send(const struct mbox_channel *channel,
				   const struct mbox_msg *msg)
{
	Z_OOPS(Z_SYSCALL_MEMORY_READ(channel, sizeof(struct mbox_channel)));
	Z_OOPS(Z_SYSCALL_DRIVER_MBOX(channel->dev, send));
	Z_OOPS(Z_SYSCALL_MEMORY_READ(msg, sizeof(struct mbox_msg)));
	Z_OOPS(Z_SYSCALL_MEMORY_READ(msg->data, msg->size));

	return z_impl_mbox_send(channel, msg);
}
#include <syscalls/mbox_send_mrsh.c>

static inline int z_vrfy_mbox_mtu_get(const struct device *dev)
{
	Z_OOPS(Z_SYSCALL_DRIVER_MBOX(dev, max_data_size_get));

	return z_impl_mbox_mtu_get(dev);
}
#include <syscalls/mbox_mtu_get_mrsh.c>

static inline uint32_t z_vrfy_mbox_max_channels_get(const struct device *dev)
{
	Z_OOPS(Z_SYSCALL_DRIVER_MBOX(dev, max_channels_get));

	return z_impl_mbox_max_channels_get(dev);
}
#include <syscalls/mbox_max_channels_get_mrsh.c>

static inline int z_vrfy_mbox_set_enabled(const struct mbox_channel *channel, bool enable)
{
	Z_OOPS(Z_SYSCALL_MEMORY_READ(channel, sizeof(struct mbox_channel)));
	Z_OOPS(Z_SYSCALL_DRIVER_MBOX(channel->dev, set_enabled));

	return z_impl_mbox_set_enabled(channel, enable);
}
#include <syscalls/mbox_set_enabled_mrsh.c>
