/*
 * Copyright (C) 2014-2018, Samsung Electronics Co., Ltd.
 *
 * Interface to invoke Secure-kernel functions
 */

#ifndef __KERNEL_API_H__
#define __KERNEL_API_H__

#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>

/* Create secure mapping */
#define VMA_NON_SECURE	(1 << 1)

/* Create non-cached mapping */
#define VMA_NON_CACHED	(1 << 2)

/*
 * Declaration of the main handler function
 * Example:
 *	DECLARE_HANDLER_MAIN(unsigned int fid, struct custom_handler_params *params)
 *	{
 *	}
 */
#define DECLARE_HANDLER_MAIN(...) \
    void custom_handler_func(__VA_ARGS__)

/*
 * Handler's input/output parameters
 */
struct custom_handler_params
{
	unsigned long p0;		/* Input R1 */
	unsigned long p1;		/* Input R2 */
	unsigned long p2;		/* Input R3 */
	unsigned long p3;		/* Input R4 */
	unsigned long p4;		/* Input R5 */
	unsigned long p5;		/* Input R6 */
	unsigned long ret_r0;		/* Output R0 */
	unsigned long ret_r1;		/* Output R1 */
	unsigned long ret_r2;		/* Output R2 */
	unsigned long ret_r3;		/* Output R3 */
};

#define vm_map_phys_buffer_dev	vm_map_phys_buffer

/* Custom handler API available for handler */
void printf(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
void *vm_map_phys_buffer(unsigned long *pfns, unsigned int num_pages, unsigned int flags);
void vm_unmap_phys_buffer(unsigned long start, unsigned int size);
void panic(unsigned int code);
void *memset(void *s, int c, size_t n);
void *memcpy(void *dest, const void *src, size_t n);
int memcmp(const void *s1, const void *s2, size_t n);
char *strcpy(char *dest, const char *src);
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
size_t strlen(const char *s);

#endif	/* __KERNEL_API_H__ */
