diff options
Diffstat (limited to 'include/asm-xtensa')
-rw-r--r-- | include/asm-xtensa/bitops.h | 69 | ||||
-rw-r--r-- | include/asm-xtensa/byteorder.h | 3 | ||||
-rw-r--r-- | include/asm-xtensa/coprocessor.h | 8 | ||||
-rw-r--r-- | include/asm-xtensa/div64.h | 15 | ||||
-rw-r--r-- | include/asm-xtensa/elf.h | 3 | ||||
-rw-r--r-- | include/asm-xtensa/fcntl.h | 100 | ||||
-rw-r--r-- | include/asm-xtensa/mmu_context.h | 1 | ||||
-rw-r--r-- | include/asm-xtensa/page.h | 2 | ||||
-rw-r--r-- | include/asm-xtensa/param.h | 4 | ||||
-rw-r--r-- | include/asm-xtensa/ptrace.h | 8 | ||||
-rw-r--r-- | include/asm-xtensa/shmparam.h | 2 | ||||
-rw-r--r-- | include/asm-xtensa/sigcontext.h | 24 | ||||
-rw-r--r-- | include/asm-xtensa/thread_info.h | 2 | ||||
-rw-r--r-- | include/asm-xtensa/unistd.h | 4 |
14 files changed, 61 insertions, 184 deletions
diff --git a/include/asm-xtensa/bitops.h b/include/asm-xtensa/bitops.h index d815649617a..1c1e0d933ee 100644 --- a/include/asm-xtensa/bitops.h +++ b/include/asm-xtensa/bitops.h @@ -7,7 +7,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 2001 - 2005 Tensilica Inc. + * Copyright (C) 2001 - 2007 Tensilica Inc. */ #ifndef _XTENSA_BITOPS_H @@ -31,53 +31,30 @@ #if XCHAL_HAVE_NSA -static __inline__ int __cntlz (unsigned long x) +static inline unsigned long __cntlz (unsigned long x) { int lz; asm ("nsau %0, %1" : "=r" (lz) : "r" (x)); - return 31 - lz; + return lz; } -#else - -static __inline__ int __cntlz (unsigned long x) -{ - unsigned long sum, x1, x2, x4, x8, x16; - x1 = x & 0xAAAAAAAA; - x2 = x & 0xCCCCCCCC; - x4 = x & 0xF0F0F0F0; - x8 = x & 0xFF00FF00; - x16 = x & 0xFFFF0000; - sum = x2 ? 2 : 0; - sum += (x16 != 0) * 16; - sum += (x8 != 0) * 8; - sum += (x4 != 0) * 4; - sum += (x1 != 0); - - return sum; -} - -#endif - /* * ffz: Find first zero in word. Undefined if no zero exists. * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). */ -static __inline__ int ffz(unsigned long x) +static inline int ffz(unsigned long x) { - if ((x = ~x) == 0) - return 32; - return __cntlz(x & -x); + return 31 - __cntlz(~x & -~x); } /* * __ffs: Find first bit set in word. Return 0 for bit 0 */ -static __inline__ int __ffs(unsigned long x) +static inline int __ffs(unsigned long x) { - return __cntlz(x & -x); + return 31 - __cntlz(x & -x); } /* @@ -86,9 +63,9 @@ static __inline__ int __ffs(unsigned long x) * differs in spirit from the above ffz (man ffs). */ -static __inline__ int ffs(unsigned long x) +static inline int ffs(unsigned long x) { - return __cntlz(x & -x) + 1; + return 32 - __cntlz(x & -x); } /* @@ -96,20 +73,36 @@ static __inline__ int ffs(unsigned long x) * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. */ -static __inline__ int fls (unsigned int x) +static inline int fls (unsigned int x) { - return __cntlz(x); + return 32 - __cntlz(x); } + +#else + +/* Use the generic implementation if we don't have the nsa/nsau instructions. */ + +# include <asm-generic/bitops/ffs.h> +# include <asm-generic/bitops/__ffs.h> +# include <asm-generic/bitops/ffz.h> +# include <asm-generic/bitops/fls.h> + +#endif + #include <asm-generic/bitops/fls64.h> #include <asm-generic/bitops/find.h> #include <asm-generic/bitops/ext2-non-atomic.h> #ifdef __XTENSA_EL__ -# define ext2_set_bit_atomic(lock,nr,addr) test_and_set_bit((nr),(addr)) -# define ext2_clear_bit_atomic(lock,nr,addr) test_and_clear_bit((nr),(addr)) +# define ext2_set_bit_atomic(lock,nr,addr) \ + test_and_set_bit((nr), (unsigned long*)(addr)) +# define ext2_clear_bit_atomic(lock,nr,addr) \ + test_and_clear_bit((nr), (unsigned long*)(addr)) #elif defined(__XTENSA_EB__) -# define ext2_set_bit_atomic(lock,nr,addr) test_and_set_bit((nr) ^ 0x18, (addr)) -# define ext2_clear_bit_atomic(lock,nr,addr) test_and_clear_bit((nr)^0x18,(addr)) +# define ext2_set_bit_atomic(lock,nr,addr) \ + test_and_set_bit((nr) ^ 0x18, (unsigned long*)(addr)) +# define ext2_clear_bit_atomic(lock,nr,addr) \ + test_and_clear_bit((nr) ^ 0x18, (unsigned long*)(addr)) #else # error processor byte order undefined! #endif diff --git a/include/asm-xtensa/byteorder.h b/include/asm-xtensa/byteorder.h index 0f540a5f4c0..765edf17a9a 100644 --- a/include/asm-xtensa/byteorder.h +++ b/include/asm-xtensa/byteorder.h @@ -12,6 +12,7 @@ #define _XTENSA_BYTEORDER_H #include <asm/types.h> +#include <linux/compiler.h> static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) { @@ -78,4 +79,4 @@ static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) # error processor byte order undefined! #endif -#endif /* __ASM_XTENSA_BYTEORDER_H */ +#endif /* _XTENSA_BYTEORDER_H */ diff --git a/include/asm-xtensa/coprocessor.h b/include/asm-xtensa/coprocessor.h index bd09ec02d57..aa212103455 100644 --- a/include/asm-xtensa/coprocessor.h +++ b/include/asm-xtensa/coprocessor.h @@ -64,6 +64,7 @@ typedef struct { # define COPROCESSOR_INFO_SIZE 8 # endif #endif +#endif /* XCHAL_HAVE_CP */ #ifndef __ASSEMBLY__ @@ -74,8 +75,11 @@ extern void save_coprocessor_registers(void*, int); # else # define release_coprocessors(task) # endif -#endif -#endif +typedef unsigned char cp_state_t[XTENSA_CP_EXTRA_SIZE] + __attribute__ ((aligned (XTENSA_CP_EXTRA_ALIGN))); + +#endif /* !__ASSEMBLY__ */ + #endif /* _XTENSA_COPROCESSOR_H */ diff --git a/include/asm-xtensa/div64.h b/include/asm-xtensa/div64.h index 20965e3af1d..f35678cb0a9 100644 --- a/include/asm-xtensa/div64.h +++ b/include/asm-xtensa/div64.h @@ -5,21 +5,12 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 2001 - 2005 Tensilica Inc. + * Copyright (C) 2001 - 2007 Tensilica Inc. */ #ifndef _XTENSA_DIV64_H #define _XTENSA_DIV64_H -#include <linux/types.h> +#include <asm-generic/div64.h> -#define do_div(n,base) ({ \ - int __res = n % ((unsigned int) base); \ - n /= (unsigned int) base; \ - __res; }) - -static inline uint64_t div64_64(uint64_t dividend, uint64_t divisor) -{ - return dividend / divisor; -} -#endif +#endif /* _XTENSA_DIV64_H */ diff --git a/include/asm-xtensa/elf.h b/include/asm-xtensa/elf.h index f0f9fd8560a..1569b53cec9 100644 --- a/include/asm-xtensa/elf.h +++ b/include/asm-xtensa/elf.h @@ -13,7 +13,6 @@ #ifndef _XTENSA_ELF_H #define _XTENSA_ELF_H -#include <asm/variant/core.h> #include <asm/ptrace.h> /* Xtensa processor ELF architecture-magic number */ @@ -49,7 +48,7 @@ typedef struct { elf_greg_t lcount; elf_greg_t sar; elf_greg_t syscall; - elf_greg_t ar[XCHAL_NUM_AREGS]; + elf_greg_t ar[64]; } xtensa_gregset_t; #define ELF_NGREG (sizeof(xtensa_gregset_t) / sizeof(elf_greg_t)) diff --git a/include/asm-xtensa/fcntl.h b/include/asm-xtensa/fcntl.h index 0609fc691b7..46ab12db573 100644 --- a/include/asm-xtensa/fcntl.h +++ b/include/asm-xtensa/fcntl.h @@ -1,99 +1 @@ -/* - * include/asm-xtensa/fcntl.h - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * - * Copyright (C) 1995, 1996, 1997, 1998 by Ralf Baechle - * Copyright (C) 2001 - 2005 Tensilica Inc. - */ - -#ifndef _XTENSA_FCNTL_H -#define _XTENSA_FCNTL_H - -/* open/fcntl - O_SYNC is only implemented on blocks devices and on files - located on an ext2 file system */ -#define O_ACCMODE 0003 -#define O_RDONLY 00 -#define O_WRONLY 01 -#define O_RDWR 02 -#define O_CREAT 0100 /* not fcntl */ -#define O_EXCL 0200 /* not fcntl */ -#define O_NOCTTY 0400 /* not fcntl */ -#define O_TRUNC 01000 /* not fcntl */ -#define O_APPEND 02000 -#define O_NONBLOCK 04000 -#define O_NDELAY O_NONBLOCK -#define O_SYNC 010000 -#define FASYNC 020000 /* fcntl, for BSD compatibility */ -#define O_DIRECT 040000 /* direct disk access hint */ -#define O_LARGEFILE 0100000 -#define O_DIRECTORY 0200000 /* must be a directory */ -#define O_NOFOLLOW 0400000 /* don't follow links */ -#define O_NOATIME 01000000 - -#define F_DUPFD 0 /* dup */ -#define F_GETFD 1 /* get close_on_exec */ -#define F_SETFD 2 /* set/clear close_on_exec */ -#define F_GETFL 3 /* get file->f_flags */ -#define F_SETFL 4 /* set file->f_flags */ -#define F_GETLK 5 -#define F_SETLK 6 -#define F_SETLKW 7 - -#define F_SETOWN 8 /* for sockets. */ -#define F_GETOWN 9 /* for sockets. */ -#define F_SETSIG 10 /* for sockets. */ -#define F_GETSIG 11 /* for sockets. */ - -#define F_GETLK64 12 /* using 'struct flock64' */ -#define F_SETLK64 13 -#define F_SETLKW64 14 - -/* for F_[GET|SET]FL */ -#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ - -/* for posix fcntl() and lockf() */ -#define F_RDLCK 0 -#define F_WRLCK 1 -#define F_UNLCK 2 - -/* for old implementation of bsd flock () */ -#define F_EXLCK 4 /* or 3 */ -#define F_SHLCK 8 /* or 4 */ - -/* for leases */ -#define F_INPROGRESS 16 - -/* operations for bsd flock(), also used by the kernel implementation */ -#define LOCK_SH 1 /* shared lock */ -#define LOCK_EX 2 /* exclusive lock */ -#define LOCK_NB 4 /* or'd with one of the above to prevent - blocking */ -#define LOCK_UN 8 /* remove lock */ - -#define LOCK_MAND 32 /* This is a mandatory flock */ -#define LOCK_READ 64 /* ... Which allows concurrent read operations */ -#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */ -#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */ - -struct flock { - short l_type; - short l_whence; - off_t l_start; - off_t l_len; - pid_t l_pid; -}; - -struct flock64 { - short l_type; - short l_whence; - loff_t l_start; - loff_t l_len; - pid_t l_pid; -}; - -#define F_LINUX_SPECIFIC_BASE 1024 - -#endif /* _XTENSA_FCNTL_H */ +#include <asm-generic/fcntl.h> diff --git a/include/asm-xtensa/mmu_context.h b/include/asm-xtensa/mmu_context.h index 92f948392eb..c0fd8e5b451 100644 --- a/include/asm-xtensa/mmu_context.h +++ b/include/asm-xtensa/mmu_context.h @@ -14,6 +14,7 @@ #define _XTENSA_MMU_CONTEXT_H #include <linux/stringify.h> +#include <linux/sched.h> #include <asm/pgtable.h> #include <asm/cacheflush.h> diff --git a/include/asm-xtensa/page.h b/include/asm-xtensa/page.h index c631d006194..1213cde7543 100644 --- a/include/asm-xtensa/page.h +++ b/include/asm-xtensa/page.h @@ -131,6 +131,6 @@ void copy_user_page(void *to,void* from,unsigned long vaddr,struct page* page); #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) -#endif /* __KERNEL__ */ #include <asm-generic/memory_model.h> +#endif /* __KERNEL__ */ #endif /* _XTENSA_PAGE_H */ diff --git a/include/asm-xtensa/param.h b/include/asm-xtensa/param.h index 6f281392e3f..ce3a336cad0 100644 --- a/include/asm-xtensa/param.h +++ b/include/asm-xtensa/param.h @@ -11,15 +11,13 @@ #ifndef _XTENSA_PARAM_H #define _XTENSA_PARAM_H -#include <asm/variant/core.h> - #ifdef __KERNEL__ # define HZ 100 /* internal timer frequency */ # define USER_HZ 100 /* for user interfaces in "ticks" */ # define CLOCKS_PER_SEC (USER_HZ) /* frequnzy at which times() counts */ #endif -#define EXEC_PAGESIZE (1 << XCHAL_MMU_MIN_PTE_PAGE_SIZE) +#define EXEC_PAGESIZE 4096 #ifndef NGROUPS #define NGROUPS 32 diff --git a/include/asm-xtensa/ptrace.h b/include/asm-xtensa/ptrace.h index 1b7fe363fad..77ff02d307b 100644 --- a/include/asm-xtensa/ptrace.h +++ b/include/asm-xtensa/ptrace.h @@ -11,8 +11,6 @@ #ifndef _XTENSA_PTRACE_H #define _XTENSA_PTRACE_H -#include <asm/variant/core.h> - /* * Kernel stack * @@ -101,7 +99,8 @@ struct pt_regs { unsigned long windowbase; /* 48 */ unsigned long windowstart; /* 52 */ unsigned long syscall; /* 56 */ - int reserved[2]; /* 64 */ + unsigned long icountlevel; /* 60 */ + int reserved[1]; /* 64 */ /* Make sure the areg field is 16 bytes aligned. */ int align[0] __attribute__ ((aligned(16))); @@ -113,6 +112,9 @@ struct pt_regs { }; #ifdef __KERNEL__ + +#include <asm/variant/core.h> + # define task_pt_regs(tsk) ((struct pt_regs*) \ (task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1) # define user_mode(regs) (((regs)->ps & 0x00000020)!=0) diff --git a/include/asm-xtensa/shmparam.h b/include/asm-xtensa/shmparam.h index d3b65bfa71c..c8cc16c3da9 100644 --- a/include/asm-xtensa/shmparam.h +++ b/include/asm-xtensa/shmparam.h @@ -9,8 +9,6 @@ #ifndef _XTENSA_SHMPARAM_H #define _XTENSA_SHMPARAM_H -#include <asm/processor.h> - /* * Xtensa can have variable size caches, and if * the size of single way is larger than the page size, diff --git a/include/asm-xtensa/sigcontext.h b/include/asm-xtensa/sigcontext.h index a7517729141..e3381cee505 100644 --- a/include/asm-xtensa/sigcontext.h +++ b/include/asm-xtensa/sigcontext.h @@ -5,21 +5,12 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 2001 - 2003 Tensilica Inc. + * Copyright (C) 2001 - 2007 Tensilica Inc. */ #ifndef _XTENSA_SIGCONTEXT_H #define _XTENSA_SIGCONTEXT_H -#define _ASMLANGUAGE -#include <asm/processor.h> -#include <asm/coprocessor.h> - - -struct _cpstate { - unsigned char _cpstate[XTENSA_CP_EXTRA_SIZE]; -} __attribute__ ((aligned (XTENSA_CP_EXTRA_ALIGN))); - struct sigcontext { unsigned long oldmask; @@ -27,18 +18,13 @@ struct sigcontext { /* CPU registers */ unsigned long sc_pc; unsigned long sc_ps; - unsigned long sc_wmask; - unsigned long sc_windowbase; - unsigned long sc_windowstart; unsigned long sc_lbeg; unsigned long sc_lend; unsigned long sc_lcount; unsigned long sc_sar; - unsigned long sc_depc; - unsigned long sc_dareg0; - unsigned long sc_treg[4]; - unsigned long sc_areg[XCHAL_NUM_AREGS]; - struct _cpstate *sc_cpstate; + unsigned long sc_acclo; + unsigned long sc_acchi; + unsigned long sc_a[16]; }; -#endif /* __ASM_XTENSA_SIGCONTEXT_H */ +#endif /* _XTENSA_SIGCONTEXT_H */ diff --git a/include/asm-xtensa/thread_info.h b/include/asm-xtensa/thread_info.h index 5ae34ab7159..3fa29799b43 100644 --- a/include/asm-xtensa/thread_info.h +++ b/include/asm-xtensa/thread_info.h @@ -116,6 +116,7 @@ static inline struct thread_info *current_thread_info(void) #define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */ #define TIF_IRET 5 /* return with iret */ #define TIF_MEMDIE 6 +#define TIF_RESTORE_SIGMASK 7 /* restore signal mask in do_signal() */ #define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */ #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) @@ -125,6 +126,7 @@ static inline struct thread_info *current_thread_info(void) #define _TIF_SINGLESTEP (1<<TIF_SINGLESTEP) #define _TIF_IRET (1<<TIF_IRET) #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) +#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ #define _TIF_ALLWORK_MASK 0x0000FFFF /* work to do on any return to u-space */ diff --git a/include/asm-xtensa/unistd.h b/include/asm-xtensa/unistd.h index 8a7fb6964ce..9bd34024431 100644 --- a/include/asm-xtensa/unistd.h +++ b/include/asm-xtensa/unistd.h @@ -485,8 +485,8 @@ __SYSCALL(217, sys_sched_get_priority_min, 1) __SYSCALL(218, sys_sched_rr_get_interval, 2) #define __NR_sched_yield 219 __SYSCALL(219, sys_sched_yield, 0) -#define __NR_sigreturn 222 -__SYSCALL(222, xtensa_sigreturn, 0) +#define __NR_available222 222 +__SYSCALL(222, sys_ni_syscall, 0) /* Signal Handling */ |