linux/arch/sh/include/asm/uaccess_64.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __ASM_SH_UACCESS_64_H
   3#define __ASM_SH_UACCESS_64_H
   4
   5/*
   6 * include/asm-sh/uaccess_64.h
   7 *
   8 * Copyright (C) 2000, 2001  Paolo Alberelli
   9 * Copyright (C) 2003, 2004  Paul Mundt
  10 *
  11 * User space memory access functions
  12 *
  13 * Copyright (C) 1999  Niibe Yutaka
  14 *
  15 *  Based on:
  16 *     MIPS implementation version 1.15 by
  17 *              Copyright (C) 1996, 1997, 1998 by Ralf Baechle
  18 *     and i386 version.
  19 */
  20
  21#define __get_user_size(x,ptr,size,retval)                      \
  22do {                                                            \
  23        retval = 0;                                             \
  24        x = 0;                                                  \
  25        switch (size) {                                         \
  26        case 1:                                                 \
  27                retval = __get_user_asm_b((void *)&x,           \
  28                                          (long)ptr);           \
  29                break;                                          \
  30        case 2:                                                 \
  31                retval = __get_user_asm_w((void *)&x,           \
  32                                          (long)ptr);           \
  33                break;                                          \
  34        case 4:                                                 \
  35                retval = __get_user_asm_l((void *)&x,           \
  36                                          (long)ptr);           \
  37                break;                                          \
  38        case 8:                                                 \
  39                retval = __get_user_asm_q((void *)&x,           \
  40                                          (long)ptr);           \
  41                break;                                          \
  42        default:                                                \
  43                __get_user_unknown();                           \
  44                break;                                          \
  45        }                                                       \
  46} while (0)
  47
  48extern long __get_user_asm_b(void *, long);
  49extern long __get_user_asm_w(void *, long);
  50extern long __get_user_asm_l(void *, long);
  51extern long __get_user_asm_q(void *, long);
  52extern void __get_user_unknown(void);
  53
  54#define __put_user_size(x,ptr,size,retval)                      \
  55do {                                                            \
  56        retval = 0;                                             \
  57        switch (size) {                                         \
  58        case 1:                                                 \
  59                retval = __put_user_asm_b((void *)&x,           \
  60                                          (__force long)ptr);   \
  61                break;                                          \
  62        case 2:                                                 \
  63                retval = __put_user_asm_w((void *)&x,           \
  64                                          (__force long)ptr);   \
  65                break;                                          \
  66        case 4:                                                 \
  67                retval = __put_user_asm_l((void *)&x,           \
  68                                          (__force long)ptr);   \
  69                break;                                          \
  70        case 8:                                                 \
  71                retval = __put_user_asm_q((void *)&x,           \
  72                                          (__force long)ptr);   \
  73                break;                                          \
  74        default:                                                \
  75                __put_user_unknown();                           \
  76        }                                                       \
  77} while (0)
  78
  79extern long __put_user_asm_b(void *, long);
  80extern long __put_user_asm_w(void *, long);
  81extern long __put_user_asm_l(void *, long);
  82extern long __put_user_asm_q(void *, long);
  83extern void __put_user_unknown(void);
  84
  85#endif /* __ASM_SH_UACCESS_64_H */
  86