summaryrefslogtreecommitdiffstats
path: root/sys/sparc64/include
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2010-02-20 23:24:19 +0000
committermarius <marius@FreeBSD.org>2010-02-20 23:24:19 +0000
commit27efbf647d0328612f1c44a888957c1f15f2b67c (patch)
treee93ca7084184f69831be9ec848380cb2e7a4faf0 /sys/sparc64/include
parentbd54d0edd70c92645e019f14c299149217d2a60f (diff)
downloadFreeBSD-src-27efbf647d0328612f1c44a888957c1f15f2b67c.zip
FreeBSD-src-27efbf647d0328612f1c44a888957c1f15f2b67c.tar.gz
Some machines can not only consist of CPUs running at different speeds
but also of different types, f.e. Sun Fire V890 can be equipped with a mix of UltraSPARC IV and IV+ CPUs, requiring different MMU initialization and different workarounds for model specific errata. Therefore move the CPU implementation number from a global variable to the per-CPU data. Functions which are called before the latter is available are passed the implementation number as a parameter now.
Diffstat (limited to 'sys/sparc64/include')
-rw-r--r--sys/sparc64/include/cache.h2
-rw-r--r--sys/sparc64/include/cpu.h2
-rw-r--r--sys/sparc64/include/md_var.h4
-rw-r--r--sys/sparc64/include/pcpu.h1
-rw-r--r--sys/sparc64/include/pmap.h2
-rw-r--r--sys/sparc64/include/smp.h2
-rw-r--r--sys/sparc64/include/ver.h26
7 files changed, 22 insertions, 17 deletions
diff --git a/sys/sparc64/include/cache.h b/sys/sparc64/include/cache.h
index 9dd7191..9c4804b 100644
--- a/sys/sparc64/include/cache.h
+++ b/sys/sparc64/include/cache.h
@@ -91,7 +91,7 @@ struct cacheinfo {
struct pcpu;
-typedef void cache_enable_t(void);
+typedef void cache_enable_t(u_int cpu_impl);
typedef void cache_flush_t(void);
typedef void dcache_page_inval_t(vm_paddr_t pa);
typedef void icache_page_inval_t(vm_paddr_t pa);
diff --git a/sys/sparc64/include/cpu.h b/sys/sparc64/include/cpu.h
index b593f13..c0845a0 100644
--- a/sys/sparc64/include/cpu.h
+++ b/sys/sparc64/include/cpu.h
@@ -52,7 +52,7 @@
extern char btext[];
extern char etext[];
-void cheetah_init(void);
+void cheetah_init(u_int cpu_impl);
void cpu_halt(void);
void cpu_reset(void);
void fork_trampoline(void);
diff --git a/sys/sparc64/include/md_var.h b/sys/sparc64/include/md_var.h
index 592d980..a1f3980 100644
--- a/sys/sparc64/include/md_var.h
+++ b/sys/sparc64/include/md_var.h
@@ -47,8 +47,8 @@ extern vm_paddr_t kstack0_phys;
struct pcpu;
struct md_utrap;
-const char *cpu_cpuid_prop(void);
-uint32_t cpu_get_mid(void);
+const char *cpu_cpuid_prop(u_int cpu_impl);
+uint32_t cpu_get_mid(u_int cpu_impl);
void cpu_identify(u_long vers, u_int clock, u_int id);
void cpu_setregs(struct pcpu *pc);
int is_physical_memory(vm_paddr_t addr);
diff --git a/sys/sparc64/include/pcpu.h b/sys/sparc64/include/pcpu.h
index 7d2f5a0..f5735bf 100644
--- a/sys/sparc64/include/pcpu.h
+++ b/sys/sparc64/include/pcpu.h
@@ -54,6 +54,7 @@ struct pmap;
u_long pc_tickref; \
u_long pc_tickadj; \
u_int pc_clock; \
+ u_int pc_impl; \
u_int pc_mid; \
u_int pc_node; \
u_int pc_tlb_ctx; \
diff --git a/sys/sparc64/include/pmap.h b/sys/sparc64/include/pmap.h
index 91c2a51..83c8190 100644
--- a/sys/sparc64/include/pmap.h
+++ b/sys/sparc64/include/pmap.h
@@ -80,7 +80,7 @@ struct pmap {
#define pmap_page_get_memattr(m) VM_MEMATTR_DEFAULT
#define pmap_page_set_memattr(m, ma) (void)0
-void pmap_bootstrap(void);
+void pmap_bootstrap(u_int cpu_impl);
vm_paddr_t pmap_kextract(vm_offset_t va);
void pmap_kenter(vm_offset_t va, vm_page_t m);
void pmap_kremove(vm_offset_t);
diff --git a/sys/sparc64/include/smp.h b/sys/sparc64/include/smp.h
index 8735543..467c6b6 100644
--- a/sys/sparc64/include/smp.h
+++ b/sys/sparc64/include/smp.h
@@ -94,7 +94,7 @@ void cpu_mp_shutdown(void);
typedef void cpu_ipi_selected_t(u_int, u_long, u_long, u_long);
extern cpu_ipi_selected_t *cpu_ipi_selected;
-void mp_init(void);
+void mp_init(u_int cpu_impl);
extern struct mtx ipi_mtx;
extern struct ipi_cache_args ipi_cache_args;
diff --git a/sys/sparc64/include/ver.h b/sys/sparc64/include/ver.h
index 0fb7933..ad6841b 100644
--- a/sys/sparc64/include/ver.h
+++ b/sys/sparc64/include/ver.h
@@ -43,24 +43,28 @@
#ifndef LOCORE
-#define VER_MANUF_MASK (((1L<<VER_MANUF_SIZE)-1)<<VER_MANUF_SHIFT)
-#define VER_IMPL_MASK (((1L<<VER_IMPL_SIZE)-1)<<VER_IMPL_SHIFT)
-#define VER_MASK_MASK (((1L<<VER_MASK_SIZE)-1)<<VER_MASK_SHIFT)
-#define VER_MAXTL_MASK (((1L<<VER_MAXTL_SIZE)-1)<<VER_MAXTL_SHIFT)
-#define VER_MAXWIN_MASK (((1L<<VER_MAXWIN_SIZE)-1)<<VER_MAXWIN_SHIFT)
+#define VER_MANUF_MASK \
+ (((1UL << VER_MANUF_SIZE) - 1) << VER_MANUF_SHIFT)
+#define VER_IMPL_MASK \
+ (((1UL << VER_IMPL_SIZE) - 1) << VER_IMPL_SHIFT)
+#define VER_MASK_MASK \
+ (((1UL << VER_MASK_SIZE) - 1) << VER_MASK_SHIFT)
+#define VER_MAXTL_MASK \
+ (((1UL << VER_MAXTL_SIZE) - 1) << VER_MAXTL_SHIFT)
+#define VER_MAXWIN_MASK \
+ (((1UL << VER_MAXWIN_SIZE) - 1) << VER_MAXWIN_SHIFT)
-#define VER_MANUF(ver) \
+#define VER_MANUF(ver) \
(((ver) & VER_MANUF_MASK) >> VER_MANUF_SHIFT)
-#define VER_IMPL(ver) \
+#define VER_IMPL(ver) \
(((ver) & VER_IMPL_MASK) >> VER_IMPL_SHIFT)
-#define VER_MASK(ver) \
+#define VER_MASK(ver) \
(((ver) & VER_MASK_MASK) >> VER_MASK_SHIFT)
-#define VER_MAXTL(ver) \
+#define VER_MAXTL(ver) \
(((ver) & VER_MAXTL_MASK) >> VER_MAXTL_SHIFT)
-#define VER_MAXWIN(ver) \
+#define VER_MAXWIN(ver) \
(((ver) & VER_MAXWIN_MASK) >> VER_MAXWIN_SHIFT)
-extern int cpu_impl;
extern char sparc64_model[];
#endif /* !LOCORE */
OpenPOWER on IntegriCloud