/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __ASM_SH_UACCESS_64_H
#define __ASM_SH_UACCESS_64_H

/*
 * include/asm-sh/uaccess_64.h
 *
 * Copyright (C) 2000, 2001  Paolo Alberelli
 * Copyright (C) 2003, 2004  Paul Mundt
 *
 * User space memory access functions
 *
 * Copyright (C) 1999  Niibe Yutaka
 *
 *  Based on:
 *     MIPS implementation version 1.15 by
 *              Copyright (C) 1996, 1997, 1998 by Ralf Baechle
 *     and i386 version.
 */

#define __get_user_size(x,ptr,size,retval)			\
do {								\
	retval = 0;						\
	x = 0;							\
	switch (size) {						\
	case 1:							\
		retval = __get_user_asm_b((void *)&x,		\
					  (long)ptr);		\
		break;						\
	case 2:							\
		retval = __get_user_asm_w((void *)&x,		\
					  (long)ptr);		\
		break;						\
	case 4:							\
		retval = __get_user_asm_l((void *)&x,		\
					  (long)ptr);		\
		break;						\
	case 8:							\
		retval = __get_user_asm_q((void *)&x,		\
					  (long)ptr);		\
		break;						\
	default:						\
		__get_user_unknown();				\
		break;						\
	}							\
} while (0)

extern long __get_user_asm_b(void *, long);
extern long __get_user_asm_w(void *, long);
extern long __get_user_asm_l(void *, long);
extern long __get_user_asm_q(void *, long);
extern void __get_user_unknown(void);

#define __put_user_size(x,ptr,size,retval)			\
do {								\
	retval = 0;						\
	switch (size) {						\
	case 1:							\
		retval = __put_user_asm_b((void *)&x,		\
					  (__force long)ptr);	\
		break;						\
	case 2:							\
		retval = __put_user_asm_w((void *)&x,		\
					  (__force long)ptr);	\
		break;						\
	case 4:							\
		retval = __put_user_asm_l((void *)&x,		\
					  (__force long)ptr);	\
		break;						\
	case 8:							\
		retval = __put_user_asm_q((void *)&x,		\
					  (__force long)ptr);	\
		break;						\
	default:						\
		__put_user_unknown();				\
	}							\
} while (0)

extern long __put_user_asm_b(void *, long);
extern long __put_user_asm_w(void *, long);
extern long __put_user_asm_l(void *, long);
extern long __put_user_asm_q(void *, long);
extern void __put_user_unknown(void);

#endif /* __ASM_SH_UACCESS_64_H */
