Merge branch 'master'
This commit is contained in:
commit
949ec2c8e6
38 changed files with 952 additions and 478 deletions
|
|
@ -5,113 +5,10 @@
|
|||
*
|
||||
* Copyright (C) 2002,2003 Jun Nakajima <jun.nakajima@intel.com>
|
||||
* Copyright (C) 2002,2003 Suresh Siddha <suresh.b.siddha@intel.com>
|
||||
* Copyright (C) 2005,2006 Hongjiu Lu <hongjiu.lu@intel.com>
|
||||
*
|
||||
*/
|
||||
#include <asm/types.h>
|
||||
|
||||
void __lfetch(int lfhint, void *y);
|
||||
void __lfetch_excl(int lfhint, void *y);
|
||||
void __lfetch_fault(int lfhint, void *y);
|
||||
void __lfetch_fault_excl(int lfhint, void *y);
|
||||
|
||||
/* In the following, whichFloatReg should be an integer from 0-127 */
|
||||
void __ldfs(const int whichFloatReg, void *src);
|
||||
void __ldfd(const int whichFloatReg, void *src);
|
||||
void __ldfe(const int whichFloatReg, void *src);
|
||||
void __ldf8(const int whichFloatReg, void *src);
|
||||
void __ldf_fill(const int whichFloatReg, void *src);
|
||||
void __stfs(void *dst, const int whichFloatReg);
|
||||
void __stfd(void *dst, const int whichFloatReg);
|
||||
void __stfe(void *dst, const int whichFloatReg);
|
||||
void __stf8(void *dst, const int whichFloatReg);
|
||||
void __stf_spill(void *dst, const int whichFloatReg);
|
||||
|
||||
void __st1_rel(void *dst, const __s8 value);
|
||||
void __st2_rel(void *dst, const __s16 value);
|
||||
void __st4_rel(void *dst, const __s32 value);
|
||||
void __st8_rel(void *dst, const __s64 value);
|
||||
__u8 __ld1_acq(void *src);
|
||||
__u16 __ld2_acq(void *src);
|
||||
__u32 __ld4_acq(void *src);
|
||||
__u64 __ld8_acq(void *src);
|
||||
|
||||
__u64 __fetchadd4_acq(__u32 *addend, const int increment);
|
||||
__u64 __fetchadd4_rel(__u32 *addend, const int increment);
|
||||
__u64 __fetchadd8_acq(__u64 *addend, const int increment);
|
||||
__u64 __fetchadd8_rel(__u64 *addend, const int increment);
|
||||
|
||||
__u64 __getf_exp(double d);
|
||||
|
||||
/* OS Related Itanium(R) Intrinsics */
|
||||
|
||||
/* The names to use for whichReg and whichIndReg below come from
|
||||
the include file asm/ia64regs.h */
|
||||
|
||||
__u64 __getIndReg(const int whichIndReg, __s64 index);
|
||||
__u64 __getReg(const int whichReg);
|
||||
|
||||
void __setIndReg(const int whichIndReg, __s64 index, __u64 value);
|
||||
void __setReg(const int whichReg, __u64 value);
|
||||
|
||||
void __mf(void);
|
||||
void __mfa(void);
|
||||
void __synci(void);
|
||||
void __itcd(__s64 pa);
|
||||
void __itci(__s64 pa);
|
||||
void __itrd(__s64 whichTransReg, __s64 pa);
|
||||
void __itri(__s64 whichTransReg, __s64 pa);
|
||||
void __ptce(__s64 va);
|
||||
void __ptcl(__s64 va, __s64 pagesz);
|
||||
void __ptcg(__s64 va, __s64 pagesz);
|
||||
void __ptcga(__s64 va, __s64 pagesz);
|
||||
void __ptri(__s64 va, __s64 pagesz);
|
||||
void __ptrd(__s64 va, __s64 pagesz);
|
||||
void __invala (void);
|
||||
void __invala_gr(const int whichGeneralReg /* 0-127 */ );
|
||||
void __invala_fr(const int whichFloatReg /* 0-127 */ );
|
||||
void __nop(const int);
|
||||
void __fc(__u64 *addr);
|
||||
void __sum(int mask);
|
||||
void __rum(int mask);
|
||||
void __ssm(int mask);
|
||||
void __rsm(int mask);
|
||||
__u64 __thash(__s64);
|
||||
__u64 __ttag(__s64);
|
||||
__s64 __tpa(__s64);
|
||||
|
||||
/* Intrinsics for implementing get/put_user macros */
|
||||
void __st_user(const char *tableName, __u64 addr, char size, char relocType, __u64 val);
|
||||
void __ld_user(const char *tableName, __u64 addr, char size, char relocType);
|
||||
|
||||
/* This intrinsic does not generate code, it creates a barrier across which
|
||||
* the compiler will not schedule data access instructions.
|
||||
*/
|
||||
void __memory_barrier(void);
|
||||
|
||||
void __isrlz(void);
|
||||
void __dsrlz(void);
|
||||
|
||||
__u64 _m64_mux1(__u64 a, const int n);
|
||||
__u64 __thash(__u64);
|
||||
|
||||
/* Lock and Atomic Operation Related Intrinsics */
|
||||
__u64 _InterlockedExchange8(volatile __u8 *trgt, __u8 value);
|
||||
__u64 _InterlockedExchange16(volatile __u16 *trgt, __u16 value);
|
||||
__s64 _InterlockedExchange(volatile __u32 *trgt, __u32 value);
|
||||
__s64 _InterlockedExchange64(volatile __u64 *trgt, __u64 value);
|
||||
|
||||
__u64 _InterlockedCompareExchange8_rel(volatile __u8 *dest, __u64 xchg, __u64 comp);
|
||||
__u64 _InterlockedCompareExchange8_acq(volatile __u8 *dest, __u64 xchg, __u64 comp);
|
||||
__u64 _InterlockedCompareExchange16_rel(volatile __u16 *dest, __u64 xchg, __u64 comp);
|
||||
__u64 _InterlockedCompareExchange16_acq(volatile __u16 *dest, __u64 xchg, __u64 comp);
|
||||
__u64 _InterlockedCompareExchange_rel(volatile __u32 *dest, __u64 xchg, __u64 comp);
|
||||
__u64 _InterlockedCompareExchange_acq(volatile __u32 *dest, __u64 xchg, __u64 comp);
|
||||
__u64 _InterlockedCompareExchange64_rel(volatile __u64 *dest, __u64 xchg, __u64 comp);
|
||||
__u64 _InterlockedCompareExchange64_acq(volatile __u64 *dest, __u64 xchg, __u64 comp);
|
||||
|
||||
__s64 _m64_dep_mi(const int v, __s64 s, const int p, const int len);
|
||||
__s64 _m64_shrp(__s64 a, __s64 b, const int count);
|
||||
__s64 _m64_popcnt(__s64 a);
|
||||
#include <ia64intrin.h>
|
||||
|
||||
#define ia64_barrier() __memory_barrier()
|
||||
|
||||
|
|
@ -122,15 +19,16 @@ __s64 _m64_popcnt(__s64 a);
|
|||
#define ia64_getreg __getReg
|
||||
#define ia64_setreg __setReg
|
||||
|
||||
#define ia64_hint(x)
|
||||
#define ia64_hint __hint
|
||||
#define ia64_hint_pause __hint_pause
|
||||
|
||||
#define ia64_mux1_brcst 0
|
||||
#define ia64_mux1_mix 8
|
||||
#define ia64_mux1_shuf 9
|
||||
#define ia64_mux1_alt 10
|
||||
#define ia64_mux1_rev 11
|
||||
#define ia64_mux1_brcst _m64_mux1_brcst
|
||||
#define ia64_mux1_mix _m64_mux1_mix
|
||||
#define ia64_mux1_shuf _m64_mux1_shuf
|
||||
#define ia64_mux1_alt _m64_mux1_alt
|
||||
#define ia64_mux1_rev _m64_mux1_rev
|
||||
|
||||
#define ia64_mux1 _m64_mux1
|
||||
#define ia64_mux1(x,v) _m_to_int64(_m64_mux1(_m_from_int64(x), (v)))
|
||||
#define ia64_popcnt _m64_popcnt
|
||||
#define ia64_getf_exp __getf_exp
|
||||
#define ia64_shrp _m64_shrp
|
||||
|
|
@ -158,7 +56,7 @@ __s64 _m64_popcnt(__s64 a);
|
|||
#define ia64_stf8 __stf8
|
||||
#define ia64_stf_spill __stf_spill
|
||||
|
||||
#define ia64_mf __mf
|
||||
#define ia64_mf __mf
|
||||
#define ia64_mfa __mfa
|
||||
|
||||
#define ia64_fetchadd4_acq __fetchadd4_acq
|
||||
|
|
@ -234,10 +132,10 @@ __s64 _m64_popcnt(__s64 a);
|
|||
|
||||
/* Values for lfhint in __lfetch and __lfetch_fault */
|
||||
|
||||
#define ia64_lfhint_none 0
|
||||
#define ia64_lfhint_nt1 1
|
||||
#define ia64_lfhint_nt2 2
|
||||
#define ia64_lfhint_nta 3
|
||||
#define ia64_lfhint_none __lfhint_none
|
||||
#define ia64_lfhint_nt1 __lfhint_nt1
|
||||
#define ia64_lfhint_nt2 __lfhint_nt2
|
||||
#define ia64_lfhint_nta __lfhint_nta
|
||||
|
||||
#define ia64_lfetch __lfetch
|
||||
#define ia64_lfetch_excl __lfetch_excl
|
||||
|
|
@ -254,4 +152,6 @@ do { \
|
|||
} \
|
||||
} while (0)
|
||||
|
||||
#define __builtin_trap() __break(0);
|
||||
|
||||
#endif /* _ASM_IA64_INTEL_INTRIN_H */
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ struct scatterlist;
|
|||
struct page;
|
||||
struct mm_struct;
|
||||
struct pci_bus;
|
||||
struct task_struct;
|
||||
|
||||
typedef void ia64_mv_setup_t (char **);
|
||||
typedef void ia64_mv_cpu_init_t (void);
|
||||
|
|
@ -34,6 +35,7 @@ typedef int ia64_mv_pci_legacy_read_t (struct pci_bus *, u16 port, u32 *val,
|
|||
u8 size);
|
||||
typedef int ia64_mv_pci_legacy_write_t (struct pci_bus *, u16 port, u32 val,
|
||||
u8 size);
|
||||
typedef void ia64_mv_migrate_t(struct task_struct * task);
|
||||
|
||||
/* DMA-mapping interface: */
|
||||
typedef void ia64_mv_dma_init (void);
|
||||
|
|
@ -85,6 +87,11 @@ machvec_noop_mm (struct mm_struct *mm)
|
|||
{
|
||||
}
|
||||
|
||||
static inline void
|
||||
machvec_noop_task (struct task_struct *task)
|
||||
{
|
||||
}
|
||||
|
||||
extern void machvec_setup (char **);
|
||||
extern void machvec_timer_interrupt (int, void *, struct pt_regs *);
|
||||
extern void machvec_dma_sync_single (struct device *, dma_addr_t, size_t, int);
|
||||
|
|
@ -146,6 +153,7 @@ extern void machvec_tlb_migrate_finish (struct mm_struct *);
|
|||
# define platform_readw_relaxed ia64_mv.readw_relaxed
|
||||
# define platform_readl_relaxed ia64_mv.readl_relaxed
|
||||
# define platform_readq_relaxed ia64_mv.readq_relaxed
|
||||
# define platform_migrate ia64_mv.migrate
|
||||
# endif
|
||||
|
||||
/* __attribute__((__aligned__(16))) is required to make size of the
|
||||
|
|
@ -194,6 +202,7 @@ struct ia64_machine_vector {
|
|||
ia64_mv_readw_relaxed_t *readw_relaxed;
|
||||
ia64_mv_readl_relaxed_t *readl_relaxed;
|
||||
ia64_mv_readq_relaxed_t *readq_relaxed;
|
||||
ia64_mv_migrate_t *migrate;
|
||||
} __attribute__((__aligned__(16))); /* align attrib? see above comment */
|
||||
|
||||
#define MACHVEC_INIT(name) \
|
||||
|
|
@ -238,6 +247,7 @@ struct ia64_machine_vector {
|
|||
platform_readw_relaxed, \
|
||||
platform_readl_relaxed, \
|
||||
platform_readq_relaxed, \
|
||||
platform_migrate, \
|
||||
}
|
||||
|
||||
extern struct ia64_machine_vector ia64_mv;
|
||||
|
|
@ -386,5 +396,8 @@ extern ia64_mv_dma_supported swiotlb_dma_supported;
|
|||
#ifndef platform_readq_relaxed
|
||||
# define platform_readq_relaxed __ia64_readq_relaxed
|
||||
#endif
|
||||
#ifndef platform_migrate
|
||||
# define platform_migrate machvec_noop_task
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_IA64_MACHVEC_H */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2002-2003, 2006 Silicon Graphics, Inc. All Rights Reserved.
|
||||
* Copyright (c) 2002-2003,2006 Silicon Graphics, Inc. All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License
|
||||
|
|
@ -66,6 +66,7 @@ extern ia64_mv_dma_sync_single_for_device sn_dma_sync_single_for_device;
|
|||
extern ia64_mv_dma_sync_sg_for_device sn_dma_sync_sg_for_device;
|
||||
extern ia64_mv_dma_mapping_error sn_dma_mapping_error;
|
||||
extern ia64_mv_dma_supported sn_dma_supported;
|
||||
extern ia64_mv_migrate_t sn_migrate;
|
||||
|
||||
/*
|
||||
* This stuff has dual use!
|
||||
|
|
@ -115,6 +116,7 @@ extern ia64_mv_dma_supported sn_dma_supported;
|
|||
#define platform_dma_sync_sg_for_device sn_dma_sync_sg_for_device
|
||||
#define platform_dma_mapping_error sn_dma_mapping_error
|
||||
#define platform_dma_supported sn_dma_supported
|
||||
#define platform_migrate sn_migrate
|
||||
|
||||
#include <asm/sn/io.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -131,6 +131,8 @@ struct ia64_mca_cpu {
|
|||
/* Array of physical addresses of each CPU's MCA area. */
|
||||
extern unsigned long __per_cpu_mca[NR_CPUS];
|
||||
|
||||
extern int cpe_vector;
|
||||
extern int ia64_cpe_irq;
|
||||
extern void ia64_mca_init(void);
|
||||
extern void ia64_mca_cpu_init(void *);
|
||||
extern void ia64_os_mca_dispatch(void);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,92 @@
|
|||
/*
|
||||
* Pull in the generic implementation for the mutex fastpath.
|
||||
* ia64 implementation of the mutex fastpath.
|
||||
*
|
||||
* Copyright (C) 2006 Ken Chen <kenneth.w.chen@intel.com>
|
||||
*
|
||||
* TODO: implement optimized primitives instead, or leave the generic
|
||||
* implementation in place, or pick the atomic_xchg() based generic
|
||||
* implementation. (see asm-generic/mutex-xchg.h for details)
|
||||
*/
|
||||
|
||||
#include <asm-generic/mutex-dec.h>
|
||||
#ifndef _ASM_MUTEX_H
|
||||
#define _ASM_MUTEX_H
|
||||
|
||||
/**
|
||||
* __mutex_fastpath_lock - try to take the lock by moving the count
|
||||
* from 1 to a 0 value
|
||||
* @count: pointer of type atomic_t
|
||||
* @fail_fn: function to call if the original value was not 1
|
||||
*
|
||||
* Change the count from 1 to a value lower than 1, and call <fail_fn> if
|
||||
* it wasn't 1 originally. This function MUST leave the value lower than
|
||||
* 1 even when the "1" assertion wasn't true.
|
||||
*/
|
||||
static inline void
|
||||
__mutex_fastpath_lock(atomic_t *count, void (*fail_fn)(atomic_t *))
|
||||
{
|
||||
if (unlikely(ia64_fetchadd4_acq(count, -1) != 1))
|
||||
fail_fn(count);
|
||||
}
|
||||
|
||||
/**
|
||||
* __mutex_fastpath_lock_retval - try to take the lock by moving the count
|
||||
* from 1 to a 0 value
|
||||
* @count: pointer of type atomic_t
|
||||
* @fail_fn: function to call if the original value was not 1
|
||||
*
|
||||
* Change the count from 1 to a value lower than 1, and call <fail_fn> if
|
||||
* it wasn't 1 originally. This function returns 0 if the fastpath succeeds,
|
||||
* or anything the slow path function returns.
|
||||
*/
|
||||
static inline int
|
||||
__mutex_fastpath_lock_retval(atomic_t *count, int (*fail_fn)(atomic_t *))
|
||||
{
|
||||
if (unlikely(ia64_fetchadd4_acq(count, -1) != 1))
|
||||
return fail_fn(count);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* __mutex_fastpath_unlock - try to promote the count from 0 to 1
|
||||
* @count: pointer of type atomic_t
|
||||
* @fail_fn: function to call if the original value was not 0
|
||||
*
|
||||
* Try to promote the count from 0 to 1. If it wasn't 0, call <fail_fn>.
|
||||
* In the failure case, this function is allowed to either set the value to
|
||||
* 1, or to set it to a value lower than 1.
|
||||
*
|
||||
* If the implementation sets it to a value of lower than 1, then the
|
||||
* __mutex_slowpath_needs_to_unlock() macro needs to return 1, it needs
|
||||
* to return 0 otherwise.
|
||||
*/
|
||||
static inline void
|
||||
__mutex_fastpath_unlock(atomic_t *count, void (*fail_fn)(atomic_t *))
|
||||
{
|
||||
int ret = ia64_fetchadd4_rel(count, 1);
|
||||
if (unlikely(ret < 0))
|
||||
fail_fn(count);
|
||||
}
|
||||
|
||||
#define __mutex_slowpath_needs_to_unlock() 1
|
||||
|
||||
/**
|
||||
* __mutex_fastpath_trylock - try to acquire the mutex, without waiting
|
||||
*
|
||||
* @count: pointer of type atomic_t
|
||||
* @fail_fn: fallback function
|
||||
*
|
||||
* Change the count from 1 to a value lower than 1, and return 0 (failure)
|
||||
* if it wasn't 1 originally, or return 1 (success) otherwise. This function
|
||||
* MUST leave the value lower than 1 even when the "1" assertion wasn't true.
|
||||
* Additionally, if the value was < 0 originally, this function must not leave
|
||||
* it to 0 on failure.
|
||||
*
|
||||
* If the architecture has no effective trylock variant, it should call the
|
||||
* <fail_fn> spinlock-based trylock variant unconditionally.
|
||||
*/
|
||||
static inline int
|
||||
__mutex_fastpath_trylock(atomic_t *count, int (*fail_fn)(atomic_t *))
|
||||
{
|
||||
if (likely(cmpxchg_acq(count, 1, 0)) == 1)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -50,7 +50,8 @@
|
|||
#define IA64_THREAD_PM_VALID (__IA64_UL(1) << 2) /* performance registers valid? */
|
||||
#define IA64_THREAD_UAC_NOPRINT (__IA64_UL(1) << 3) /* don't log unaligned accesses */
|
||||
#define IA64_THREAD_UAC_SIGBUS (__IA64_UL(1) << 4) /* generate SIGBUS on unaligned acc. */
|
||||
/* bit 5 is currently unused */
|
||||
#define IA64_THREAD_MIGRATION (__IA64_UL(1) << 5) /* require migration
|
||||
sync at ctx sw */
|
||||
#define IA64_THREAD_FPEMU_NOPRINT (__IA64_UL(1) << 6) /* don't log any fpswa faults */
|
||||
#define IA64_THREAD_FPEMU_SIGFPE (__IA64_UL(1) << 7) /* send a SIGFPE for fpswa faults */
|
||||
|
||||
|
|
|
|||
|
|
@ -158,8 +158,6 @@ struct k_sigaction {
|
|||
|
||||
#define ptrace_signal_deliver(regs, cookie) do { } while (0)
|
||||
|
||||
void set_sigdelayed(pid_t pid, int signo, int code, void __user *addr);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
# endif /* !__ASSEMBLY__ */
|
||||
|
|
|
|||
|
|
@ -283,5 +283,13 @@
|
|||
#define REMOTE_HUB_L(n, a) HUB_L(REMOTE_HUB_ADDR((n), (a)))
|
||||
#define REMOTE_HUB_S(n, a, d) HUB_S(REMOTE_HUB_ADDR((n), (a)), (d))
|
||||
|
||||
/*
|
||||
* Coretalk address breakdown
|
||||
*/
|
||||
#define CTALK_NASID_SHFT 40
|
||||
#define CTALK_NASID_MASK (0x3FFFULL << CTALK_NASID_SHFT)
|
||||
#define CTALK_CID_SHFT 38
|
||||
#define CTALK_CID_MASK (0x3ULL << CTALK_CID_SHFT)
|
||||
#define CTALK_NODE_OFFSET 0x3FFFFFFFFF
|
||||
|
||||
#endif /* _ASM_IA64_SN_ADDRS_H */
|
||||
|
|
|
|||
|
|
@ -3,15 +3,14 @@
|
|||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2002-2004 Silicon Graphics, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2002-2006 Silicon Graphics, Inc. All Rights Reserved.
|
||||
*/
|
||||
#ifndef _ASM_IA64_SN_RW_MMR_H
|
||||
#define _ASM_IA64_SN_RW_MMR_H
|
||||
|
||||
|
||||
/*
|
||||
* This file contains macros used to access MMR registers via
|
||||
* uncached physical addresses.
|
||||
* This file that access MMRs via uncached physical addresses.
|
||||
* pio_phys_read_mmr - read an MMR
|
||||
* pio_phys_write_mmr - write an MMR
|
||||
* pio_atomic_phys_write_mmrs - atomically write 1 or 2 MMRs with psr.ic=0
|
||||
|
|
@ -22,53 +21,8 @@
|
|||
*/
|
||||
|
||||
|
||||
extern inline long
|
||||
pio_phys_read_mmr(volatile long *mmr)
|
||||
{
|
||||
long val;
|
||||
asm volatile
|
||||
("mov r2=psr;;"
|
||||
"rsm psr.i | psr.dt;;"
|
||||
"srlz.i;;"
|
||||
"ld8.acq %0=[%1];;"
|
||||
"mov psr.l=r2;;"
|
||||
"srlz.i;;"
|
||||
: "=r"(val)
|
||||
: "r"(mmr)
|
||||
: "r2");
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern inline void
|
||||
pio_phys_write_mmr(volatile long *mmr, long val)
|
||||
{
|
||||
asm volatile
|
||||
("mov r2=psr;;"
|
||||
"rsm psr.i | psr.dt;;"
|
||||
"srlz.i;;"
|
||||
"st8.rel [%0]=%1;;"
|
||||
"mov psr.l=r2;;"
|
||||
"srlz.i;;"
|
||||
:: "r"(mmr), "r"(val)
|
||||
: "r2", "memory");
|
||||
}
|
||||
|
||||
extern inline void
|
||||
pio_atomic_phys_write_mmrs(volatile long *mmr1, long val1, volatile long *mmr2, long val2)
|
||||
{
|
||||
asm volatile
|
||||
("mov r2=psr;;"
|
||||
"rsm psr.i | psr.dt | psr.ic;;"
|
||||
"cmp.ne p9,p0=%2,r0;"
|
||||
"srlz.i;;"
|
||||
"st8.rel [%0]=%1;"
|
||||
"(p9) st8.rel [%2]=%3;;"
|
||||
"mov psr.l=r2;;"
|
||||
"srlz.i;;"
|
||||
:: "r"(mmr1), "r"(val1), "r"(mmr2), "r"(val2)
|
||||
: "p9", "r2", "memory");
|
||||
}
|
||||
extern long pio_phys_read_mmr(volatile long *mmr);
|
||||
extern void pio_phys_write_mmr(volatile long *mmr, long val);
|
||||
extern void pio_atomic_phys_write_mmrs(volatile long *mmr1, long val1, volatile long *mmr2, long val2);
|
||||
|
||||
#endif /* _ASM_IA64_SN_RW_MMR_H */
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
/* CE ASIC part & mfgr information */
|
||||
#define TIOCE_PART_NUM 0xCE00
|
||||
#define TIOCE_MFGR_NUM 0x36
|
||||
#define TIOCE_SRC_ID 0x01
|
||||
#define TIOCE_REV_A 0x1
|
||||
|
||||
/* CE Virtual PPB Vendor/Device IDs */
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
/* CE Host Bridge Vendor/Device IDs */
|
||||
#define CE_HOST_BRIDGE_VENDOR_ID 0x10a9
|
||||
#define CE_HOST_BRIDGE_DEVICE_ID 0x4003
|
||||
#define CE_HOST_BRIDGE_DEVICE_ID 0x4001
|
||||
|
||||
|
||||
#define TIOCE_NUM_M40_ATES 4096
|
||||
|
|
@ -463,6 +463,25 @@ typedef volatile struct tioce {
|
|||
u64 ce_end_of_struct; /* 0x044400 */
|
||||
} tioce_t;
|
||||
|
||||
/* ce_lsiX_gb_cfg1 register bit masks & shifts */
|
||||
#define CE_LSI_GB_CFG1_RXL0S_THS_SHFT 0
|
||||
#define CE_LSI_GB_CFG1_RXL0S_THS_MASK (0xffULL << 0)
|
||||
#define CE_LSI_GB_CFG1_RXL0S_SMP_SHFT 8
|
||||
#define CE_LSI_GB_CFG1_RXL0S_SMP_MASK (0xfULL << 8);
|
||||
#define CE_LSI_GB_CFG1_RXL0S_ADJ_SHFT 12
|
||||
#define CE_LSI_GB_CFG1_RXL0S_ADJ_MASK (0x7ULL << 12)
|
||||
#define CE_LSI_GB_CFG1_RXL0S_FLT_SHFT 15
|
||||
#define CE_LSI_GB_CFG1_RXL0S_FLT_MASK (0x1ULL << 15)
|
||||
#define CE_LSI_GB_CFG1_LPBK_SEL_SHFT 16
|
||||
#define CE_LSI_GB_CFG1_LPBK_SEL_MASK (0x3ULL << 16)
|
||||
#define CE_LSI_GB_CFG1_LPBK_EN_SHFT 18
|
||||
#define CE_LSI_GB_CFG1_LPBK_EN_MASK (0x1ULL << 18)
|
||||
#define CE_LSI_GB_CFG1_RVRS_LB_SHFT 19
|
||||
#define CE_LSI_GB_CFG1_RVRS_LB_MASK (0x1ULL << 19)
|
||||
#define CE_LSI_GB_CFG1_RVRS_CLK_SHFT 20
|
||||
#define CE_LSI_GB_CFG1_RVRS_CLK_MASK (0x3ULL << 20)
|
||||
#define CE_LSI_GB_CFG1_SLF_TS_SHFT 24
|
||||
#define CE_LSI_GB_CFG1_SLF_TS_MASK (0xfULL << 24)
|
||||
|
||||
/* ce_adm_int_mask/ce_adm_int_status register bit defines */
|
||||
#define CE_ADM_INT_CE_ERROR_SHFT 0
|
||||
|
|
@ -592,6 +611,11 @@ typedef volatile struct tioce {
|
|||
#define CE_URE_RD_MRG_ENABLE (0x1ULL << 0)
|
||||
#define CE_URE_WRT_MRG_ENABLE1 (0x1ULL << 4)
|
||||
#define CE_URE_WRT_MRG_ENABLE2 (0x1ULL << 5)
|
||||
#define CE_URE_WRT_MRG_TIMER_SHFT 12
|
||||
#define CE_URE_WRT_MRG_TIMER_MASK (0x7FFULL << CE_URE_WRT_MRG_TIMER_SHFT)
|
||||
#define CE_URE_WRT_MRG_TIMER(x) (((u64)(x) << \
|
||||
CE_URE_WRT_MRG_TIMER_SHFT) & \
|
||||
CE_URE_WRT_MRG_TIMER_MASK)
|
||||
#define CE_URE_RSPQ_BYPASS_DISABLE (0x1ULL << 24)
|
||||
#define CE_URE_UPS_DAT1_PAR_DISABLE (0x1ULL << 32)
|
||||
#define CE_URE_UPS_HDR1_PAR_DISABLE (0x1ULL << 33)
|
||||
|
|
@ -653,8 +677,12 @@ typedef volatile struct tioce {
|
|||
#define CE_URE_SI (0x1ULL << 0)
|
||||
#define CE_URE_ELAL_SHFT 4
|
||||
#define CE_URE_ELAL_MASK (0x7ULL << CE_URE_ELAL_SHFT)
|
||||
#define CE_URE_ELAL_SET(n) (((u64)(n) << CE_URE_ELAL_SHFT) & \
|
||||
CE_URE_ELAL_MASK)
|
||||
#define CE_URE_ELAL1_SHFT 8
|
||||
#define CE_URE_ELAL1_MASK (0x7ULL << CE_URE_ELAL1_SHFT)
|
||||
#define CE_URE_ELAL1_SET(n) (((u64)(n) << CE_URE_ELAL1_SHFT) & \
|
||||
CE_URE_ELAL1_MASK)
|
||||
#define CE_URE_SCC (0x1ULL << 12)
|
||||
#define CE_URE_PN1_SHFT 16
|
||||
#define CE_URE_PN1_MASK (0xFFULL << CE_URE_PN1_SHFT)
|
||||
|
|
@ -675,8 +703,12 @@ typedef volatile struct tioce {
|
|||
#define CE_URE_HPC (0x1ULL << 6)
|
||||
#define CE_URE_SPLV_SHFT 7
|
||||
#define CE_URE_SPLV_MASK (0xFFULL << CE_URE_SPLV_SHFT)
|
||||
#define CE_URE_SPLV_SET(n) (((u64)(n) << CE_URE_SPLV_SHFT) & \
|
||||
CE_URE_SPLV_MASK)
|
||||
#define CE_URE_SPLS_SHFT 15
|
||||
#define CE_URE_SPLS_MASK (0x3ULL << CE_URE_SPLS_SHFT)
|
||||
#define CE_URE_SPLS_SET(n) (((u64)(n) << CE_URE_SPLS_SHFT) & \
|
||||
CE_URE_SPLS_MASK)
|
||||
#define CE_URE_PSN1_SHFT 19
|
||||
#define CE_URE_PSN1_MASK (0x1FFFULL << CE_URE_PSN1_SHFT)
|
||||
#define CE_URE_PSN2_SHFT 32
|
||||
|
|
|
|||
|
|
@ -1227,28 +1227,6 @@ xpc_map_bte_errors(bte_result_t error)
|
|||
|
||||
|
||||
|
||||
static inline void *
|
||||
xpc_kmalloc_cacheline_aligned(size_t size, gfp_t flags, void **base)
|
||||
{
|
||||
/* see if kmalloc will give us cachline aligned memory by default */
|
||||
*base = kmalloc(size, flags);
|
||||
if (*base == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
if ((u64) *base == L1_CACHE_ALIGN((u64) *base)) {
|
||||
return *base;
|
||||
}
|
||||
kfree(*base);
|
||||
|
||||
/* nope, we'll have to do it ourselves */
|
||||
*base = kmalloc(size + L1_CACHE_BYTES, flags);
|
||||
if (*base == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
return (void *) L1_CACHE_ALIGN((u64) *base);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Check to see if there is any channel activity to/from the specified
|
||||
* partition.
|
||||
|
|
|
|||
|
|
@ -244,6 +244,13 @@ extern void ia64_load_extra (struct task_struct *task);
|
|||
__ia64_save_fpu((prev)->thread.fph); \
|
||||
} \
|
||||
__switch_to(prev, next, last); \
|
||||
/* "next" in old context is "current" in new context */ \
|
||||
if (unlikely((current->thread.flags & IA64_THREAD_MIGRATION) && \
|
||||
(task_cpu(current) != \
|
||||
task_thread_info(current)->last_cpu))) { \
|
||||
platform_migrate(current); \
|
||||
task_thread_info(current)->last_cpu = task_cpu(current); \
|
||||
} \
|
||||
} while (0)
|
||||
#else
|
||||
# define switch_to(prev,next,last) __switch_to(prev, next, last)
|
||||
|
|
|
|||
|
|
@ -26,16 +26,10 @@ struct thread_info {
|
|||
struct exec_domain *exec_domain;/* execution domain */
|
||||
__u32 flags; /* thread_info flags (see TIF_*) */
|
||||
__u32 cpu; /* current CPU */
|
||||
__u32 last_cpu; /* Last CPU thread ran on */
|
||||
mm_segment_t addr_limit; /* user-level address space limit */
|
||||
int preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */
|
||||
struct restart_block restart_block;
|
||||
struct {
|
||||
int signo;
|
||||
int code;
|
||||
void __user *addr;
|
||||
unsigned long start_time;
|
||||
pid_t pid;
|
||||
} sigdelayed; /* Saved information for TIF_SIGDELAYED */
|
||||
};
|
||||
|
||||
#define THREAD_SIZE KERNEL_STACK_SIZE
|
||||
|
|
@ -89,7 +83,6 @@ struct thread_info {
|
|||
#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
|
||||
#define TIF_SYSCALL_TRACE 3 /* syscall trace active */
|
||||
#define TIF_SYSCALL_AUDIT 4 /* syscall auditing active */
|
||||
#define TIF_SIGDELAYED 5 /* signal delayed from MCA/INIT/NMI/PMI context */
|
||||
#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */
|
||||
#define TIF_MEMDIE 17
|
||||
#define TIF_MCA_INIT 18 /* this task is processing MCA or INIT */
|
||||
|
|
@ -101,13 +94,12 @@ struct thread_info {
|
|||
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
|
||||
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
|
||||
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
|
||||
#define _TIF_SIGDELAYED (1 << TIF_SIGDELAYED)
|
||||
#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
|
||||
#define _TIF_MCA_INIT (1 << TIF_MCA_INIT)
|
||||
#define _TIF_DB_DISABLED (1 << TIF_DB_DISABLED)
|
||||
|
||||
/* "work to do on user-return" bits */
|
||||
#define TIF_ALLWORK_MASK (_TIF_NOTIFY_RESUME|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SIGDELAYED)
|
||||
#define TIF_ALLWORK_MASK (_TIF_NOTIFY_RESUME|_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT)
|
||||
/* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE or TIF_SYSCALL_AUDIT */
|
||||
#define TIF_WORK_MASK (TIF_ALLWORK_MASK&~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue