Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) #ifndef _M68K_STRING_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #define _M68K_STRING_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) #include <linux/compiler.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #define __HAVE_ARCH_STRNLEN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) static inline size_t strnlen(const char *s, size_t count)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) 	const char *sc = s;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 	asm volatile ("\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 		"1:     subq.l  #1,%1\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 		"       jcs     2f\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 		"       tst.b   (%0)+\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 		"       jne     1b\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 		"       subq.l  #1,%0\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 		"2:"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 		: "+a" (sc), "+d" (count));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	return sc - s;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define __HAVE_ARCH_STRNCPY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) static inline char *strncpy(char *dest, const char *src, size_t n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	char *xdest = dest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	asm volatile ("\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 		"	jra	2f\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 		"1:	move.b	(%1),(%0)+\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 		"	jeq	2f\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 		"	addq.l	#1,%1\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 		"2:	subq.l	#1,%2\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 		"	jcc	1b\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 		: "+a" (dest), "+a" (src), "+d" (n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 		: : "memory");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	return xdest;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #ifndef CONFIG_COLDFIRE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define __HAVE_ARCH_STRCMP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) static inline int strcmp(const char *cs, const char *ct)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	char res;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	asm ("\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 		"1:	move.b	(%0)+,%2\n"	/* get *cs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 		"	cmp.b	(%1)+,%2\n"	/* compare a byte */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 		"	jne	2f\n"		/* not equal, break out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 		"	tst.b	%2\n"		/* at end of cs? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 		"	jne	1b\n"		/* no, keep going */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 		"	jra	3f\n"		/* strings are equal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 		"2:	sub.b	-(%1),%2\n"	/* *cs - *ct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 		"3:"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 		: "+a" (cs), "+a" (ct), "=d" (res));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 	return res;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #endif /* CONFIG_COLDFIRE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define __HAVE_ARCH_MEMMOVE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) extern void *memmove(void *, const void *, __kernel_size_t);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define memcmp(d, s, n) __builtin_memcmp(d, s, n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define __HAVE_ARCH_MEMSET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) extern void *memset(void *, int, __kernel_size_t);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define memset(d, c, n) __builtin_memset(d, c, n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define __HAVE_ARCH_MEMCPY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) extern void *memcpy(void *, const void *, __kernel_size_t);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define memcpy(d, s, n) __builtin_memcpy(d, s, n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #endif /* _M68K_STRING_H_ */