root/arch/m68k/include/asm/segment.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. get_fs
  2. set_fs

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _M68K_SEGMENT_H
   3 #define _M68K_SEGMENT_H
   4 
   5 /* define constants */
   6 /* Address spaces (FC0-FC2) */
   7 #define USER_DATA     (1)
   8 #ifndef __USER_DS
   9 #define __USER_DS     (USER_DATA)
  10 #endif
  11 #define USER_PROGRAM  (2)
  12 #define SUPER_DATA    (5)
  13 #ifndef __KERNEL_DS
  14 #define __KERNEL_DS   (SUPER_DATA)
  15 #endif
  16 #define SUPER_PROGRAM (6)
  17 #define CPU_SPACE     (7)
  18 
  19 #ifndef __ASSEMBLY__
  20 
  21 typedef struct {
  22         unsigned long seg;
  23 } mm_segment_t;
  24 
  25 #define MAKE_MM_SEG(s)  ((mm_segment_t) { (s) })
  26 
  27 #ifdef CONFIG_CPU_HAS_ADDRESS_SPACES
  28 /*
  29  * Get/set the SFC/DFC registers for MOVES instructions
  30  */
  31 #define USER_DS         MAKE_MM_SEG(__USER_DS)
  32 #define KERNEL_DS       MAKE_MM_SEG(__KERNEL_DS)
  33 
  34 static inline mm_segment_t get_fs(void)
  35 {
  36         mm_segment_t _v;
  37         __asm__ ("movec %/dfc,%0":"=r" (_v.seg):);
  38         return _v;
  39 }
  40 
  41 static inline void set_fs(mm_segment_t val)
  42 {
  43         __asm__ __volatile__ ("movec %0,%/sfc\n\t"
  44                               "movec %0,%/dfc\n\t"
  45                               : /* no outputs */ : "r" (val.seg) : "memory");
  46 }
  47 
  48 #else
  49 #define USER_DS         MAKE_MM_SEG(TASK_SIZE)
  50 #define KERNEL_DS       MAKE_MM_SEG(0xFFFFFFFF)
  51 #define get_fs()        (current_thread_info()->addr_limit)
  52 #define set_fs(x)       (current_thread_info()->addr_limit = (x))
  53 #endif
  54 
  55 #define segment_eq(a, b) ((a).seg == (b).seg)
  56 
  57 #endif /* __ASSEMBLY__ */
  58 
  59 #endif /* _M68K_SEGMENT_H */

/* [<][>][^][v][top][bottom][index][help] */