#ifndef _ASMARM_THREAD_INFO_H_
#define _ASMARM_THREAD_INFO_H_
/*
 * Adapted from arch/arm64/include/asm/thread_info.h
 *
 * Copyright (C) 2017, Red Hat Inc, Andrew Jones <drjones@redhat.com>
 *
 * This work is licensed under the terms of the GNU GPL, version 2.
 */
#include <asm/page.h>

#define MIN_THREAD_SHIFT	14	/* THREAD_SIZE == 16K */
#if PAGE_SHIFT > MIN_THREAD_SHIFT
#define THREAD_SHIFT		PAGE_SHIFT
#define THREAD_SIZE		PAGE_SIZE
#define THREAD_MASK		PAGE_MASK
#define THREAD_ALIGNMENT	PAGE_SIZE
#else
#define THREAD_SHIFT		MIN_THREAD_SHIFT
#define THREAD_SIZE		(_AC(1,UL) << THREAD_SHIFT)
#define THREAD_MASK		(~(THREAD_SIZE-1))
#define THREAD_ALIGNMENT	THREAD_SIZE
#endif

#ifndef __ASSEMBLY__
#include <asm/processor.h>
#include <alloc.h>

#ifdef __arm__
#include <asm/ptrace.h>
/*
 * arm needs room left at the top for the exception stacks,
 * and the stack needs to be 8-byte aligned
 */
#define THREAD_START_SP \
	((THREAD_SIZE - (sizeof(struct pt_regs) * 8)) & ~7)
#else
#define THREAD_START_SP		(THREAD_SIZE - 16)
#endif

static inline void *thread_stack_alloc(void)
{
	void *sp = memalign(THREAD_ALIGNMENT, THREAD_SIZE);
	return sp + THREAD_START_SP;
}

#define TIF_USER_MODE		(1U << 0)

struct thread_info {
	int cpu;
	unsigned int flags;
	void *pgtable;
#ifdef __arm__
	exception_fn exception_handlers[EXCPTN_MAX];
#else
	vector_fn vector_handlers[VECTOR_MAX];
	exception_fn exception_handlers[VECTOR_MAX][EC_MAX];
#endif
	char ext[0];		/* allow unit tests to add extended info */
};

static inline struct thread_info *thread_info_sp(unsigned long sp)
{
	return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
}

register unsigned long current_stack_pointer asm("sp");

static inline struct thread_info *current_thread_info(void)
{
	return thread_info_sp(current_stack_pointer);
}

extern void thread_info_init(struct thread_info *ti, unsigned int flags);

#endif /* !__ASSEMBLY__ */
#endif /* _ASMARM_THREAD_INFO_H_ */
