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 .fixup; \ 9478b8fecSSam Ravnborg .align 4; \ 10478b8fecSSam Ravnborg99: wr %g0, ASI_AIUS, %asi;\ 11478b8fecSSam Ravnborg ret; \ 12478b8fecSSam Ravnborg restore %g0, 1, %o0; \ 13478b8fecSSam Ravnborg .section __ex_table,"a";\ 14478b8fecSSam Ravnborg .align 4; \ 15478b8fecSSam Ravnborg .word 98b, 99b; \ 16478b8fecSSam Ravnborg .text; \ 17478b8fecSSam Ravnborg .align 4; 18478b8fecSSam Ravnborg 19478b8fecSSam Ravnborg#ifndef ASI_AIUS 20478b8fecSSam Ravnborg#define ASI_AIUS 0x11 21478b8fecSSam Ravnborg#endif 22478b8fecSSam Ravnborg 23478b8fecSSam Ravnborg#define FUNC_NAME NGcopy_to_user 24478b8fecSSam Ravnborg#define STORE(type,src,addr) type##a src, [addr] ASI_AIUS 25478b8fecSSam Ravnborg#define STORE_ASI ASI_BLK_INIT_QUAD_LDD_AIUS 26478b8fecSSam Ravnborg#define EX_RETVAL(x) %g0 27478b8fecSSam Ravnborg 28478b8fecSSam Ravnborg#ifdef __KERNEL__ 29478b8fecSSam Ravnborg /* Writing to %asi is _expensive_ so we hardcode it. 30478b8fecSSam Ravnborg * Reading %asi to check for KERNEL_DS is comparatively 31478b8fecSSam Ravnborg * cheap. 32478b8fecSSam Ravnborg */ 33478b8fecSSam Ravnborg#define PREAMBLE \ 34478b8fecSSam Ravnborg rd %asi, %g1; \ 35478b8fecSSam Ravnborg cmp %g1, ASI_AIUS; \ 36478b8fecSSam Ravnborg bne,pn %icc, memcpy_user_stub; \ 37478b8fecSSam Ravnborg nop 38478b8fecSSam Ravnborg#endif 39478b8fecSSam Ravnborg 40478b8fecSSam Ravnborg#include "NGmemcpy.S" 41