/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright (c) 2014, STMicroelectronics International N.V.
 */
#ifndef TEE_MMU_TYPES_H
#define TEE_MMU_TYPES_H

#include <stdint.h>
#include <sys/queue.h>
#include <util.h>

#define TEE_MATTR_VALID_BLOCK		BIT(0)
#define TEE_MATTR_TABLE			BIT(3)
#define TEE_MATTR_PR			BIT(4)
#define TEE_MATTR_PW			BIT(5)
#define TEE_MATTR_PX			BIT(6)
#define TEE_MATTR_PRW			(TEE_MATTR_PR | TEE_MATTR_PW)
#define TEE_MATTR_PRX			(TEE_MATTR_PR | TEE_MATTR_PX)
#define TEE_MATTR_PRWX			(TEE_MATTR_PRW | TEE_MATTR_PX)
#define TEE_MATTR_UR			BIT(7)
#define TEE_MATTR_UW			BIT(8)
#define TEE_MATTR_UX			BIT(9)
#define TEE_MATTR_URW			(TEE_MATTR_UR | TEE_MATTR_UW)
#define TEE_MATTR_URX			(TEE_MATTR_UR | TEE_MATTR_UX)
#define TEE_MATTR_URWX			(TEE_MATTR_URW | TEE_MATTR_UX)
#define TEE_MATTR_PROT_MASK		(TEE_MATTR_PRWX | TEE_MATTR_URWX)

#define TEE_MATTR_GLOBAL		BIT(10)
#define TEE_MATTR_SECURE		BIT(11)

#define TEE_MATTR_CACHE_MASK	0x7
#define TEE_MATTR_CACHE_SHIFT	12
/* These are shifted TEE_MATTR_CACHE_SHIFT */
#define TEE_MATTR_CACHE_NONCACHE 0
#define TEE_MATTR_CACHE_CACHED	1

/*
 * Tags TA mappings which are only used during a single call (open session
 * or invoke command parameters).
 */
#define VM_FLAG_EPHEMERAL		BIT(0)
/*
 * Tags TA mappings that must not be removed (kernel mappings while in user
 * mode).
 */
#define VM_FLAG_PERMANENT		BIT(1)
/* Tags TA mappings that may be shared with other TAs. */
#define VM_FLAG_SHAREABLE		BIT(2)
/* Tags temporary mappings added to load the ldelf binary */
#define VM_FLAG_LDELF			BIT(3)
/*
 * The mapping should only be mapped read-only, not enforced by the vm_*
 * functions.
 */
#define VM_FLAG_READONLY		BIT(4)

/*
 * Set of flags used by tee_mmu_is_vbuf_inside_ta_private() and
 * tee_mmu_is_vbuf_intersect_ta_private() to tell if a certain region is
 * mapping TA internal memory or not.
 */
#define VM_FLAGS_NONPRIV		(VM_FLAG_EPHEMERAL | \
					 VM_FLAG_PERMANENT | \
					 VM_FLAG_SHAREABLE | VM_FLAG_LDELF)

struct tee_mmap_region {
	unsigned int type; /* enum teecore_memtypes */
	unsigned int region_size;
	paddr_t pa;
	vaddr_t va;
	size_t size;
	uint32_t attr; /* TEE_MATTR_* above */
};

struct vm_region {
	struct mobj *mobj;
	size_t offset;
	vaddr_t va;
	size_t size;
	uint16_t attr; /* TEE_MATTR_* above */
	uint16_t flags; /* VM_FLAGS_* above */
	TAILQ_ENTRY(vm_region) link;
};

TAILQ_HEAD(vm_region_head, vm_region);

struct vm_info {
	struct vm_region_head regions;
	unsigned int asid;
};

static inline void mattr_perm_to_str(char *str, size_t size, uint32_t attr)
{
	if (size < 7)
		return;

	str[0] = (attr & TEE_MATTR_UR) ? 'r' : '-';
	str[1] = (attr & TEE_MATTR_UW) ? 'w' : '-';
	str[2] = (attr & TEE_MATTR_UX) ? 'x' : '-';
	str[3] = (attr & TEE_MATTR_PR) ? 'R' : '-';
	str[4] = (attr & TEE_MATTR_PW) ? 'W' : '-';
	str[5] = (attr & TEE_MATTR_PX) ? 'X' : '-';
	str[6] = '\0';
}

#endif
