1478b8fecSSam Ravnborg/* NGcopy_to_user.S: Niagara optimized copy to userspace. 2478b8fecSSam Ravnborg * 3478b8fecSSam Ravnborg * Copyright (C) 2006, 2007 David S. Miller (davem@davemloft.net) 4478b8fecSSam Ravnborg */ 5478b8fecSSam Ravnborg 6478b8fecSSam Ravnborg#define EX_ST(x) \ 7478b8fecSSam Ravnborg98: x; \ 8478b8fecSSam Ravnborg .section __ex_table,"a";\ 9478b8fecSSam Ravnborg .align 4; \ 1040bdac7dSDavid S. Miller .word 98b, __ret_one_asi;\ 11478b8fecSSam Ravnborg .text; \ 12478b8fecSSam Ravnborg .align 4; 13478b8fecSSam Ravnborg 14478b8fecSSam Ravnborg#ifndef ASI_AIUS 15478b8fecSSam Ravnborg#define ASI_AIUS 0x11 16478b8fecSSam Ravnborg#endif 17478b8fecSSam Ravnborg 18478b8fecSSam Ravnborg#define FUNC_NAME NGcopy_to_user 19478b8fecSSam Ravnborg#define STORE(type,src,addr) type##a src, [addr] ASI_AIUS 20478b8fecSSam Ravnborg#define STORE_ASI ASI_BLK_INIT_QUAD_LDD_AIUS 21478b8fecSSam Ravnborg#define EX_RETVAL(x) %g0 22478b8fecSSam Ravnborg 23478b8fecSSam Ravnborg#ifdef __KERNEL__ 24478b8fecSSam Ravnborg /* Writing to %asi is _expensive_ so we hardcode it. 25478b8fecSSam Ravnborg * Reading %asi to check for KERNEL_DS is comparatively 26478b8fecSSam Ravnborg * cheap. 27478b8fecSSam Ravnborg */ 28478b8fecSSam Ravnborg#define PREAMBLE \ 29478b8fecSSam Ravnborg rd %asi, %g1; \ 30478b8fecSSam Ravnborg cmp %g1, ASI_AIUS; \ 31aeb39876SDavid S. Miller bne,pn %icc, ___copy_in_user; \ 32478b8fecSSam Ravnborg nop 33478b8fecSSam Ravnborg#endif 34478b8fecSSam Ravnborg 35478b8fecSSam Ravnborg#include "NGmemcpy.S" 36