csky: Misc headers
This patch adds csky registers' definition, bitops, byteorder, asm-offsets codes. Signed-off-by: Guo Ren <ren_guo@c-sky.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
82
arch/csky/include/asm/bitops.h
Normal file
82
arch/csky/include/asm/bitops.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
|
||||
|
||||
#ifndef __ASM_CSKY_BITOPS_H
|
||||
#define __ASM_CSKY_BITOPS_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <asm/barrier.h>
|
||||
|
||||
/*
|
||||
* asm-generic/bitops/ffs.h
|
||||
*/
|
||||
static inline int ffs(int x)
|
||||
{
|
||||
if (!x)
|
||||
return 0;
|
||||
|
||||
asm volatile (
|
||||
"brev %0\n"
|
||||
"ff1 %0\n"
|
||||
"addi %0, 1\n"
|
||||
: "=&r"(x)
|
||||
: "0"(x));
|
||||
return x;
|
||||
}
|
||||
|
||||
/*
|
||||
* asm-generic/bitops/__ffs.h
|
||||
*/
|
||||
static __always_inline unsigned long __ffs(unsigned long x)
|
||||
{
|
||||
asm volatile (
|
||||
"brev %0\n"
|
||||
"ff1 %0\n"
|
||||
: "=&r"(x)
|
||||
: "0"(x));
|
||||
return x;
|
||||
}
|
||||
|
||||
/*
|
||||
* asm-generic/bitops/fls.h
|
||||
*/
|
||||
static __always_inline int fls(int x)
|
||||
{
|
||||
asm volatile(
|
||||
"ff1 %0\n"
|
||||
: "=&r"(x)
|
||||
: "0"(x));
|
||||
|
||||
return (32 - x);
|
||||
}
|
||||
|
||||
/*
|
||||
* asm-generic/bitops/__fls.h
|
||||
*/
|
||||
static __always_inline unsigned long __fls(unsigned long x)
|
||||
{
|
||||
return fls(x) - 1;
|
||||
}
|
||||
|
||||
#include <asm-generic/bitops/ffz.h>
|
||||
#include <asm-generic/bitops/fls64.h>
|
||||
#include <asm-generic/bitops/find.h>
|
||||
|
||||
#ifndef _LINUX_BITOPS_H
|
||||
#error only <linux/bitops.h> can be included directly
|
||||
#endif
|
||||
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
#include <asm-generic/bitops/hweight.h>
|
||||
#include <asm-generic/bitops/lock.h>
|
||||
#include <asm-generic/bitops/atomic.h>
|
||||
|
||||
/*
|
||||
* bug fix, why only could use atomic!!!!
|
||||
*/
|
||||
#include <asm-generic/bitops/non-atomic.h>
|
||||
#define __clear_bit(nr, vaddr) clear_bit(nr, vaddr)
|
||||
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#endif /* __ASM_CSKY_BITOPS_H */
|
50
arch/csky/include/asm/checksum.h
Normal file
50
arch/csky/include/asm/checksum.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
|
||||
|
||||
#ifndef __ASM_CSKY_CHECKSUM_H
|
||||
#define __ASM_CSKY_CHECKSUM_H
|
||||
|
||||
#include <linux/in6.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
static inline __sum16 csum_fold(__wsum csum)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
asm volatile(
|
||||
"mov %1, %0\n"
|
||||
"rori %0, 16\n"
|
||||
"addu %0, %1\n"
|
||||
"lsri %0, 16\n"
|
||||
: "=r"(csum), "=r"(tmp)
|
||||
: "0"(csum));
|
||||
|
||||
return (__force __sum16) ~csum;
|
||||
}
|
||||
#define csum_fold csum_fold
|
||||
|
||||
static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
|
||||
unsigned short len, unsigned short proto, __wsum sum)
|
||||
{
|
||||
asm volatile(
|
||||
"clrc\n"
|
||||
"addc %0, %1\n"
|
||||
"addc %0, %2\n"
|
||||
"addc %0, %3\n"
|
||||
"inct %0\n"
|
||||
: "=r"(sum)
|
||||
: "r"((__force u32)saddr), "r"((__force u32)daddr),
|
||||
#ifdef __BIG_ENDIAN
|
||||
"r"(proto + len),
|
||||
#else
|
||||
"r"((proto + len) << 8),
|
||||
#endif
|
||||
"0" ((__force unsigned long)sum)
|
||||
: "cc");
|
||||
return sum;
|
||||
}
|
||||
#define csum_tcpudp_nofold csum_tcpudp_nofold
|
||||
|
||||
#include <asm-generic/checksum.h>
|
||||
|
||||
#endif /* __ASM_CSKY_CHECKSUM_H */
|
26
arch/csky/include/asm/reg_ops.h
Normal file
26
arch/csky/include/asm/reg_ops.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
#ifndef __ASM_REGS_OPS_H
|
||||
#define __ASM_REGS_OPS_H
|
||||
|
||||
#define mfcr(reg) \
|
||||
({ \
|
||||
unsigned int tmp; \
|
||||
asm volatile( \
|
||||
"mfcr %0, "reg"\n" \
|
||||
: "=r"(tmp) \
|
||||
: \
|
||||
: "memory"); \
|
||||
tmp; \
|
||||
})
|
||||
|
||||
#define mtcr(reg, val) \
|
||||
({ \
|
||||
asm volatile( \
|
||||
"mtcr %0, "reg"\n" \
|
||||
: \
|
||||
: "r"(val) \
|
||||
: "memory"); \
|
||||
})
|
||||
|
||||
#endif /* __ASM_REGS_OPS_H */
|
Reference in New Issue
Block a user