Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/ia64/include Import FreeBSD update



details:   https://anonhg.NetBSD.org/src/rev/9432da23b09d
branches:  trunk
changeset: 346966:9432da23b09d
user:      scole <scole%NetBSD.org@localhost>
date:      Mon Aug 08 12:25:35 2016 +0000

description:
Import FreeBSD update

diffstat:

 sys/arch/ia64/include/ia64_cpu.h |  139 ++++++++++++++++++++++++++++++++------
 1 files changed, 117 insertions(+), 22 deletions(-)

diffs (210 lines):

diff -r e426ef778d63 -r 9432da23b09d sys/arch/ia64/include/ia64_cpu.h
--- a/sys/arch/ia64/include/ia64_cpu.h  Mon Aug 08 10:21:34 2016 +0000
+++ b/sys/arch/ia64/include/ia64_cpu.h  Mon Aug 08 12:25:35 2016 +0000
@@ -1,6 +1,7 @@
-/*     $NetBSD: ia64_cpu.h,v 1.2 2009/07/20 04:41:37 kiyohara Exp $    */
+/*     $NetBSD: ia64_cpu.h,v 1.3 2016/08/08 12:25:35 scole Exp $       */
 
 /*-
+ * Copyright (c) 2007 Marcel Moolenaar
  * Copyright (c) 2000 Doug Rabson
  * All rights reserved.
  *
@@ -25,13 +26,37 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     $FreeBSD$
+ * $FreeBSD: releng/10.1/sys/ia64/include/ia64_cpu.h 223170 2011-06-17 04:26:03Z marcel $
  */
 
 #ifndef _MACHINE_IA64_CPU_H_
 #define _MACHINE_IA64_CPU_H_
 
 /*
+ * Local Interrupt ID.
+ */
+#define        IA64_LID_GET_SAPIC_ID(x)        ((u_int)((x) >> 16) & 0xffff)
+#define        IA64_LID_SET_SAPIC_ID(x)        ((u_int)((x) & 0xffff) << 16)
+
+/*
+ * Definition of DCR bits.
+ */
+#define        IA64_DCR_PP             0x0000000000000001
+#define        IA64_DCR_BE             0x0000000000000002
+#define        IA64_DCR_LC             0x0000000000000004
+#define        IA64_DCR_DM             0x0000000000000100
+#define        IA64_DCR_DP             0x0000000000000200
+#define        IA64_DCR_DK             0x0000000000000400
+#define        IA64_DCR_DX             0x0000000000000800
+#define        IA64_DCR_DR             0x0000000000001000
+#define        IA64_DCR_DA             0x0000000000002000
+#define        IA64_DCR_DD             0x0000000000004000
+
+#define        IA64_DCR_DEFAULT                                        \
+    (IA64_DCR_DM | IA64_DCR_DP | IA64_DCR_DK | IA64_DCR_DX |   \
+     IA64_DCR_DR | IA64_DCR_DA | IA64_DCR_DD)
+
+/*
  * Definition of PSR and IPSR bits.
  */
 #define IA64_PSR_BE            0x0000000000000002
@@ -180,10 +205,6 @@
        __asm __volatile("fc %0" :: "r"(va));
 }
 
-/*
- * Flush Instruction Cache
- */
-
 static __inline void
 ia64_fc_i(uint64_t va)
 {
@@ -238,7 +259,7 @@
 static __inline void
 ia64_ptc_e(uint64_t v)
 {
-       __asm __volatile("ptc.e %0;; srlz.d;;" :: "r"(v));
+       __asm __volatile("ptc.e %0;; srlz.i;;" :: "r"(v));
 }
 
 /*
@@ -247,7 +268,7 @@
 static __inline void
 ia64_ptc_g(uint64_t va, uint64_t log2size)
 {
-       __asm __volatile("ptc.g %0,%1;; srlz.d;;" :: "r"(va), "r"(log2size));
+       __asm __volatile("ptc.g %0,%1;;" :: "r"(va), "r"(log2size));
 }
 
 /*
@@ -256,7 +277,7 @@
 static __inline void
 ia64_ptc_ga(uint64_t va, uint64_t log2size)
 {
-       __asm __volatile("ptc.ga %0,%1;; srlz.d;;" :: "r"(va), "r"(log2size));
+       __asm __volatile("ptc.ga %0,%1;;" :: "r"(va), "r"(log2size));
 }
 
 /*
@@ -265,7 +286,84 @@
 static __inline void
 ia64_ptc_l(uint64_t va, uint64_t log2size)
 {
-       __asm __volatile("ptc.l %0,%1;; srlz.d;;" :: "r"(va), "r"(log2size));
+       __asm __volatile("ptc.l %0,%1;; srlz.i;;" :: "r"(va), "r"(log2size));
+}
+
+/*
+ * Invalidate the ALAT on the local processor.
+ */
+static __inline void
+ia64_invala(void)
+{
+       __asm __volatile("invala;;");
+}
+
+/*
+ * Unordered memory load.
+ */
+
+static __inline uint8_t
+ia64_ld1(uint8_t *p)
+{
+       uint8_t v;
+
+       __asm __volatile("ld1 %0=[%1];;" : "=r"(v) : "r"(p));
+       return (v);
+}
+
+static __inline uint16_t
+ia64_ld2(uint16_t *p)        
+{
+       uint16_t v;
+
+       __asm __volatile("ld2 %0=[%1];;" : "=r"(v) : "r"(p));
+       return (v);
+}
+
+static __inline uint32_t
+ia64_ld4(uint32_t *p)        
+{
+       uint32_t v;
+
+       __asm __volatile("ld4 %0=[%1];;" : "=r"(v) : "r"(p));
+       return (v);
+}
+
+static __inline uint64_t
+ia64_ld8(uint64_t *p)        
+{
+       uint64_t v;
+
+       __asm __volatile("ld8 %0=[%1];;" : "=r"(v) : "r"(p));
+       return (v);
+}
+
+/*
+ * Unordered memory store.
+ */
+
+static __inline void
+ia64_st1(uint8_t *p, uint8_t v)
+{
+       __asm __volatile("st1 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st2(uint16_t *p, uint16_t v)
+{
+       __asm __volatile("st2 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st4(uint32_t *p, uint32_t v)
+{
+       __asm __volatile("st4 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st8(uint64_t *p, uint64_t v)
+{
+       __asm __volatile("st8 [%0]=%1;;" :: "r"(p), "r"(v));
 }
 
 /*
@@ -393,7 +491,7 @@
 static __inline void
 ia64_set_rr(uint64_t rrbase, uint64_t v)
 {
-       __asm __volatile("mov rr[%0]=%1;; srlz.d;;"
+       __asm __volatile("mov rr[%0]=%1"
                         :: "r"(rrbase), "r"(v) : "memory");
 }
 
@@ -421,17 +519,14 @@
        __asm __volatile("rsm psr.dfh;; srlz.d");
 }
 
-static __inline void
-ia64_srlz_d(void)
-{
-       __asm __volatile("srlz.d");
-}
-
-static __inline void
-ia64_srlz_i(void)
-{
-       __asm __volatile("srlz.i;;");
-}
+/*
+ * Avoid inline functions for the following so that they still work
+ * correctly when inlining is not enabled (e.g. -O0). Function calls
+ * need data serialization after setting psr, which results in a
+ * hazard.
+ */
+#define        ia64_srlz_d()   __asm __volatile("srlz.d")
+#define        ia64_srlz_i()   __asm __volatile("srlz.i;;")
 
 #endif /* !_LOCORE */
 



Home | Main Index | Thread Index | Old Index