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

#include <zephyr/drivers/virtualization/ivshmem.h>
#include <zephyr/syscall_handler.h>
#include <string.h>

static inline size_t z_vrfy_ivshmem_get_mem(const struct device *dev,
					    uintptr_t *memmap)
{
	Z_OOPS(Z_SYSCALL_DRIVER_IVSHMEM(dev, get_mem));
	Z_OOPS(Z_SYSCALL_MEMORY_WRITE(memmap, sizeof(uintptr_t)));

	return z_impl_ivshmem_get_mem(dev, memmap);
}
#include <syscalls/ivshmem_get_mem_mrsh.c>

static inline uint32_t z_vrfy_ivshmem_get_id(const struct device *dev)
{
	Z_OOPS(Z_SYSCALL_DRIVER_IVSHMEM(dev, get_id));

	return z_impl_ivshmem_get_id(dev);
}
#include <syscalls/ivshmem_get_id_mrsh.c>

static inline uint16_t z_vrfy_ivshmem_get_vectors(const struct device *dev)
{
	Z_OOPS(Z_SYSCALL_DRIVER_IVSHMEM(dev, get_vectors));

	return z_impl_ivshmem_get_vectors(dev);
}
#include <syscalls/ivshmem_get_vectors_mrsh.c>

static inline int z_vrfy_ivshmem_int_peer(const struct device *dev,
					  uint32_t peer_id, uint16_t vector)
{
	Z_OOPS(Z_SYSCALL_DRIVER_IVSHMEM(dev, int_peer));

	return z_impl_ivshmem_int_peer(dev, peer_id, vector);
}
#include <syscalls/ivshmem_int_peer_mrsh.c>

static inline int z_vrfy_ivshmem_register_handler(const struct device *dev,
						  struct k_poll_signal *signal,
						  uint16_t vector)
{
	Z_OOPS(Z_SYSCALL_DRIVER_IVSHMEM(dev, register_handler));
	Z_OOPS(Z_SYSCALL_OBJ(signal, K_OBJ_POLL_SIGNAL));

	return z_impl_ivshmem_register_handler(dev, signal, vector);
}

#include <syscalls/ivshmem_register_handler_mrsh.c>
