linux/arch/metag/include/asm/user_gateway.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Copyright (C) 2010 Imagination Technologies
   4 */
   5
   6#ifndef __ASM_METAG_USER_GATEWAY_H
   7#define __ASM_METAG_USER_GATEWAY_H
   8
   9#include <asm/page.h>
  10
  11/* Page of kernel code accessible to userspace. */
  12#define USER_GATEWAY_PAGE       0x6ffff000
  13/* Offset of TLS pointer array in gateway page. */
  14#define USER_GATEWAY_TLS        0x100
  15
  16#ifndef __ASSEMBLY__
  17
  18extern char __user_gateway_start;
  19extern char __user_gateway_end;
  20
  21/* Kernel mapping of the gateway page. */
  22extern void *gateway_page;
  23
  24static inline void set_gateway_tls(void __user *tls_ptr)
  25{
  26        void **gateway_tls = (void **)(gateway_page + USER_GATEWAY_TLS +
  27                                       hard_processor_id() * 4);
  28
  29        *gateway_tls = (__force void *)tls_ptr;
  30#ifdef CONFIG_METAG_META12
  31        /* Avoid cache aliases on virtually tagged cache. */
  32        __builtin_dcache_flush((void *)USER_GATEWAY_PAGE + USER_GATEWAY_TLS +
  33                                       hard_processor_id() * sizeof(void *));
  34#endif
  35}
  36
  37extern int __kuser_get_tls(void);
  38extern char *__kuser_get_tls_end[];
  39
  40extern int __kuser_cmpxchg(int, int, unsigned long *);
  41extern char *__kuser_cmpxchg_end[];
  42
  43#endif
  44
  45#endif
  46