blob: e404c09e3b74a1a962585d0eb2829d8ba0a45bc3 [file] [log] [blame]
/*
* Copyright (C) 2010 Imagination Technologies
*/
#ifndef __ASM_METAG_USER_GATEWAY_H
#define __ASM_METAG_USER_GATEWAY_H
#include <asm/page.h>
/* Page of kernel code accessible to userspace. */
#define USER_GATEWAY_PAGE 0x6ffff000
/* Offset of TLS pointer array in gateway page. */
#define USER_GATEWAY_TLS 0x100
#ifndef __ASSEMBLY__
extern char __user_gateway_start;
extern char __user_gateway_end;
/* Kernel mapping of the gateway page. */
extern void *gateway_page;
static inline void set_gateway_tls(void __user *tls_ptr)
{
void **gateway_tls = (void **)(gateway_page + USER_GATEWAY_TLS +
hard_processor_id() * 4);
*gateway_tls = (__force void *)tls_ptr;
#ifdef CONFIG_METAG_META12
/* Avoid cache aliases on virtually tagged cache. */
__builtin_dcache_flush((void *)USER_GATEWAY_PAGE + USER_GATEWAY_TLS +
hard_processor_id() * sizeof(void *));
#endif
}
extern int __kuser_get_tls(void);
extern char *__kuser_get_tls_end[];
extern int __kuser_cmpxchg(int, int, unsigned long *);
extern char *__kuser_cmpxchg_end[];
#endif
#endif