home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-um / uaccess.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.4 KB  |  92 lines

  1. /* 
  2.  * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
  3.  * Licensed under the GPL
  4.  */
  5.  
  6. #ifndef __UM_UACCESS_H
  7. #define __UM_UACCESS_H
  8.  
  9. #include "linux/sched.h"
  10.  
  11. #define VERIFY_READ 0
  12. #define VERIFY_WRITE 1
  13.  
  14. /*
  15.  * The fs value determines whether argument validity checking should be
  16.  * performed or not.  If get_fs() == USER_DS, checking is performed, with
  17.  * get_fs() == KERNEL_DS, checking is bypassed.
  18.  *
  19.  * For historical reasons, these macros are grossly misnamed.
  20.  */
  21.  
  22. #define MAKE_MM_SEG(s)    ((mm_segment_t) { (s) })
  23.  
  24. #define KERNEL_DS    MAKE_MM_SEG(0xFFFFFFFF)
  25. #define USER_DS        MAKE_MM_SEG(TASK_SIZE)
  26.  
  27. #define get_ds()    (KERNEL_DS)
  28. #define get_fs()    (current_thread_info()->addr_limit)
  29. #define set_fs(x)    (current_thread_info()->addr_limit = (x))
  30.  
  31. #define segment_eq(a, b) ((a).seg == (b).seg)
  32.  
  33. #include "um_uaccess.h"
  34.  
  35. #define __copy_from_user(to, from, n) copy_from_user(to, from, n)
  36.  
  37. #define __copy_to_user(to, from, n) copy_to_user(to, from, n)
  38.  
  39. #define __copy_to_user_inatomic __copy_to_user
  40. #define __copy_from_user_inatomic __copy_from_user
  41.  
  42. #define __get_user(x, ptr) \
  43. ({ \
  44.     const __typeof__(*(ptr)) __user *__private_ptr = (ptr);    \
  45.     __typeof__(x) __private_val;            \
  46.     int __private_ret = -EFAULT;            \
  47.     (x) = (__typeof__(*(__private_ptr)))0;                \
  48.     if (__copy_from_user((__force void *)&__private_val, (__private_ptr),\
  49.                  sizeof(*(__private_ptr))) == 0) {        \
  50.         (x) = (__typeof__(*(__private_ptr))) __private_val;    \
  51.         __private_ret = 0;                    \
  52.     }                                \
  53.     __private_ret;                            \
  54. }) 
  55.  
  56. #define get_user(x, ptr) \
  57. ({ \
  58.         const __typeof__((*(ptr))) __user *private_ptr = (ptr); \
  59.         (access_ok(VERIFY_READ, private_ptr, sizeof(*private_ptr)) ? \
  60.      __get_user(x, private_ptr) : ((x) = (__typeof__(*ptr))0, -EFAULT)); \
  61. })
  62.  
  63. #define __put_user(x, ptr) \
  64. ({ \
  65.         __typeof__(*(ptr)) __user *__private_ptr = ptr; \
  66.         __typeof__(*(__private_ptr)) __private_val; \
  67.         int __private_ret = -EFAULT; \
  68.         __private_val = (__typeof__(*(__private_ptr))) (x); \
  69.         if (__copy_to_user((__private_ptr), &__private_val, \
  70.                sizeof(*(__private_ptr))) == 0) { \
  71.         __private_ret = 0; \
  72.     } \
  73.         __private_ret; \
  74. })
  75.  
  76. #define put_user(x, ptr) \
  77. ({ \
  78.         __typeof__(*(ptr)) __user *private_ptr = (ptr); \
  79.         (access_ok(VERIFY_WRITE, private_ptr, sizeof(*private_ptr)) ? \
  80.      __put_user(x, private_ptr) : -EFAULT); \
  81. })
  82.  
  83. #define strlen_user(str) strnlen_user(str, ~0UL >> 1)
  84.  
  85. struct exception_table_entry
  86. {
  87.         unsigned long insn;
  88.     unsigned long fixup;
  89. };
  90.  
  91. #endif
  92.