2019-06-04 10:11:33 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
2005-04-16 15:20:36 -07:00
/ *
* linux/ a r c h / a r m / l i b / c s u m p a r t i a l c o p y u s e r . S
*
* Copyright ( C ) 1 9 9 5 - 1 9 9 8 R u s s e l l K i n g
*
* 2 7 / 0 3 / 0 3 Ian M o l t o n C l e a n u p C O N F I G _ C P U
* /
# include < l i n u x / l i n k a g e . h >
# include < a s m / a s s e m b l e r . h >
# include < a s m / e r r n o . h >
2005-09-09 21:08:59 +02:00
# include < a s m / a s m - o f f s e t s . h >
2005-04-16 15:20:36 -07:00
.text
2015-08-19 20:40:41 +01:00
# ifdef C O N F I G _ C P U _ S W _ D O M A I N _ P A N
.macro save_regs
mrc p15 , 0 , i p , c3 , c0 , 0
stmfd s p ! , { r1 , r2 , r4 - r8 , i p , l r }
uaccess_ e n a b l e i p
.endm
.macro load_regs
ldmfd s p ! , { r1 , r2 , r4 - r8 , i p , l r }
mcr p15 , 0 , i p , c3 , c0 , 0
ret l r
.endm
# else
2005-04-16 15:20:36 -07:00
.macro save_regs
2008-08-29 18:31:27 +01:00
stmfd s p ! , { r1 , r2 , r4 - r8 , l r }
2005-04-16 15:20:36 -07:00
.endm
2006-01-12 16:53:51 +00:00
.macro load_regs
2008-08-29 18:31:27 +01:00
ldmfd s p ! , { r1 , r2 , r4 - r8 , p c }
2005-04-16 15:20:36 -07:00
.endm
2015-08-19 20:40:41 +01:00
# endif
2005-04-16 15:20:36 -07:00
.macro load1 b , r e g 1
2009-07-24 12:32:57 +01:00
ldrusr \ r e g 1 , r0 , 1
2005-04-16 15:20:36 -07:00
.endm
.macro load2 b , r e g 1 , r e g 2
2009-07-24 12:32:57 +01:00
ldrusr \ r e g 1 , r0 , 1
ldrusr \ r e g 2 , r0 , 1
2005-04-16 15:20:36 -07:00
.endm
.macro load1 l , r e g 1
2009-07-24 12:32:57 +01:00
ldrusr \ r e g 1 , r0 , 4
2005-04-16 15:20:36 -07:00
.endm
.macro load2 l , r e g 1 , r e g 2
2009-07-24 12:32:57 +01:00
ldrusr \ r e g 1 , r0 , 4
ldrusr \ r e g 2 , r0 , 4
2005-04-16 15:20:36 -07:00
.endm
.macro load4 l , r e g 1 , r e g 2 , r e g 3 , r e g 4
2009-07-24 12:32:57 +01:00
ldrusr \ r e g 1 , r0 , 4
ldrusr \ r e g 2 , r0 , 4
ldrusr \ r e g 3 , r0 , 4
ldrusr \ r e g 4 , r0 , 4
2005-04-16 15:20:36 -07:00
.endm
/ *
* unsigned i n t
2020-07-12 22:56:34 -04:00
* csum_ p a r t i a l _ c o p y _ f r o m _ u s e r ( c o n s t c h a r * s r c , c h a r * d s t , i n t l e n )
* r0 = s r c , r1 = d s t , r2 = l e n
* Returns : r0 = c h e c k s u m o r 0
2005-04-16 15:20:36 -07:00
* /
# define F N _ E N T R Y E N T R Y ( c s u m _ p a r t i a l _ c o p y _ f r o m _ u s e r )
2008-08-28 11:22:32 +01:00
# define F N _ E X I T E N D P R O C ( c s u m _ p a r t i a l _ c o p y _ f r o m _ u s e r )
2005-04-16 15:20:36 -07:00
# include " c s u m p a r t i a l c o p y g e n e r i c . S "
/ *
2020-07-12 22:56:34 -04:00
* We r e p o r t f a u l t b y r e t u r n i n g 0 c s u m - i m p o s s i b l e i n n o r m a l c a s e , s i n c e
* we s t a r t w i t h 0 x f f f f f f f f f o r i n i t i a l s u m .
2005-04-16 15:20:36 -07:00
* /
2015-03-24 10:41:09 +01:00
.pushsection .text .fixup , " ax"
2005-04-16 15:20:36 -07:00
.align 4
2020-07-12 22:56:34 -04:00
9001 : mov r0 , #0
2006-01-12 16:53:51 +00:00
load_ r e g s
2010-04-19 10:15:03 +01:00
.popsection