summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2012-06-10 01:13:04 +0000
committerandrew <andrew@FreeBSD.org>2012-06-10 01:13:04 +0000
commit723899fa5c91cf5bb546942f05ad02ffb04560cf (patch)
treea54857d5b64fb392edc9c816a507c21fc49fe892
parent070b3c041473a0ce18654dc5b1e1100d4b7896d2 (diff)
downloadFreeBSD-src-723899fa5c91cf5bb546942f05ad02ffb04560cf.zip
FreeBSD-src-723899fa5c91cf5bb546942f05ad02ffb04560cf.tar.gz
Pull out the common code to initialise proc0 & thread0 from initarm to a
common function. Reviewed by: imp
-rw-r--r--sys/arm/arm/machdep.c18
-rw-r--r--sys/arm/at91/at91_machdep.c10
-rw-r--r--sys/arm/econa/econa_machdep.c10
-rw-r--r--sys/arm/include/machdep.h1
-rw-r--r--sys/arm/mv/mv_machdep.c11
-rw-r--r--sys/arm/s3c2xx0/s3c24x0_machdep.c12
-rw-r--r--sys/arm/sa11x0/assabet_machdep.c8
-rw-r--r--sys/arm/xscale/i80321/ep80219_machdep.c10
-rw-r--r--sys/arm/xscale/i80321/iq31244_machdep.c10
-rw-r--r--sys/arm/xscale/i8134x/crb_machdep.c10
-rw-r--r--sys/arm/xscale/ixp425/avila_machdep.c10
-rw-r--r--sys/arm/xscale/pxa/pxa_machdep.c10
12 files changed, 30 insertions, 90 deletions
diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c
index 1ec4bc4..0cceab0f 100644
--- a/sys/arm/arm/machdep.c
+++ b/sys/arm/arm/machdep.c
@@ -92,6 +92,8 @@ __FBSDID("$FreeBSD$");
#include <machine/vmparam.h>
#include <machine/sysarch.h>
+static struct trapframe proc0_tf;
+
uint32_t cpu_reset_address = 0;
int cold = 1;
vm_offset_t vector_page;
@@ -709,3 +711,19 @@ fake_preload_metadata(void)
return (lastaddr);
}
+
+/*
+ * Initialize proc0
+ */
+void
+init_proc0(vm_offset_t kstack)
+{
+ proc_linkup0(&proc0, &thread0);
+ thread0.td_kstack = kstack;
+ thread0.td_pcb = (struct pcb *)
+ (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
+ thread0.td_pcb->pcb_flags = 0;
+ thread0.td_frame = &proc0_tf;
+ pcpup->pc_curpcb = thread0.td_pcb;
+}
+
diff --git a/sys/arm/at91/at91_machdep.c b/sys/arm/at91/at91_machdep.c
index a6b8d87..b05ef9a 100644
--- a/sys/arm/at91/at91_machdep.c
+++ b/sys/arm/at91/at91_machdep.c
@@ -132,8 +132,6 @@ struct pv_addr undstack;
struct pv_addr abtstack;
struct pv_addr kernelstack;
-static struct trapframe proc0_tf;
-
/* Static device mappings. */
const struct pmap_devmap at91_devmap[] = {
/*
@@ -550,13 +548,7 @@ initarm(struct arm_boot_params *abp)
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+ init_proc0(kernelstack.pv_va);
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
diff --git a/sys/arm/econa/econa_machdep.c b/sys/arm/econa/econa_machdep.c
index 411cb97..237ec48 100644
--- a/sys/arm/econa/econa_machdep.c
+++ b/sys/arm/econa/econa_machdep.c
@@ -123,8 +123,6 @@ struct pv_addr undstack;
struct pv_addr abtstack;
struct pv_addr kernelstack;
-static struct trapframe proc0_tf;
-
/* Static device mappings. */
static const struct pmap_devmap econa_devmap[] = {
{
@@ -341,13 +339,7 @@ initarm(struct arm_boot_params *abp)
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+ init_proc0(kernelstack.pv_va);
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
diff --git a/sys/arm/include/machdep.h b/sys/arm/include/machdep.h
index 85c4114..b403d94 100644
--- a/sys/arm/include/machdep.h
+++ b/sys/arm/include/machdep.h
@@ -7,6 +7,7 @@
/* misc prototypes used by the many arm machdeps */
void arm_lock_cache_line(vm_offset_t);
vm_offset_t fake_preload_metadata(void);
+void init_proc0(vm_offset_t kstack);
void halt(void);
void data_abort_handler(trapframe_t *);
void prefetch_abort_handler(trapframe_t *);
diff --git a/sys/arm/mv/mv_machdep.c b/sys/arm/mv/mv_machdep.c
index 2f2d628..a557773 100644
--- a/sys/arm/mv/mv_machdep.c
+++ b/sys/arm/mv/mv_machdep.c
@@ -145,8 +145,6 @@ struct pv_addr undstack;
struct pv_addr abtstack;
struct pv_addr kernelstack;
-static struct trapframe proc0_tf;
-
static struct mem_region availmem_regions[FDT_MEM_REGIONS];
static int availmem_regions_sz;
@@ -576,14 +574,7 @@ initarm(struct arm_boot_params *abp)
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_kstack_pages = KSTACK_PAGES;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+ init_proc0(kernelstack.pv_va);
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
diff --git a/sys/arm/s3c2xx0/s3c24x0_machdep.c b/sys/arm/s3c2xx0/s3c24x0_machdep.c
index af4eaf9..398b53d 100644
--- a/sys/arm/s3c2xx0/s3c24x0_machdep.c
+++ b/sys/arm/s3c2xx0/s3c24x0_machdep.c
@@ -138,8 +138,6 @@ struct pv_addr undstack;
struct pv_addr abtstack;
struct pv_addr kernelstack;
-static struct trapframe proc0_tf;
-
#define _A(a) ((a) & ~L1_S_OFFSET)
#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1))
@@ -406,14 +404,8 @@ initarm(struct arm_boot_params *abp)
prefetch_abort_handler_address = (u_int)prefetch_abort_handler;
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
-
- proc_linkup(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+
+ init_proc0(kernelstack.pv_va);
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
diff --git a/sys/arm/sa11x0/assabet_machdep.c b/sys/arm/sa11x0/assabet_machdep.c
index ee93f84..54a2adb 100644
--- a/sys/arm/sa11x0/assabet_machdep.c
+++ b/sys/arm/sa11x0/assabet_machdep.c
@@ -147,7 +147,6 @@ struct pv_addr irqstack;
struct pv_addr undstack;
struct pv_addr abtstack;
struct pv_addr kernelstack;
-static struct trapframe proc0_tf;
/* Static device mappings. */
static const struct pmap_devmap assabet_devmap[] = {
@@ -387,12 +386,7 @@ initarm(struct arm_boot_params *abp)
/* Set stack for exception handlers */
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
+ init_proc0(kernelstack.pv_va);
/* Enable MMU, I-cache, D-cache, write buffer. */
diff --git a/sys/arm/xscale/i80321/ep80219_machdep.c b/sys/arm/xscale/i80321/ep80219_machdep.c
index e0cfeed..803fec1 100644
--- a/sys/arm/xscale/i80321/ep80219_machdep.c
+++ b/sys/arm/xscale/i80321/ep80219_machdep.c
@@ -136,8 +136,6 @@ struct pv_addr abtstack;
struct pv_addr kernelstack;
struct pv_addr minidataclean;
-static struct trapframe proc0_tf;
-
/* #define IQ80321_OBIO_BASE 0xfe800000UL */
/* #define IQ80321_OBIO_SIZE 0x00100000UL */
@@ -379,13 +377,7 @@ initarm(struct arm_boot_params *abp)
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+ init_proc0(kernelstack.pv_va);
/* Enable MMU, I-cache, D-cache, write buffer. */
diff --git a/sys/arm/xscale/i80321/iq31244_machdep.c b/sys/arm/xscale/i80321/iq31244_machdep.c
index d5e7549..ae642c5 100644
--- a/sys/arm/xscale/i80321/iq31244_machdep.c
+++ b/sys/arm/xscale/i80321/iq31244_machdep.c
@@ -136,8 +136,6 @@ struct pv_addr abtstack;
struct pv_addr kernelstack;
struct pv_addr minidataclean;
-static struct trapframe proc0_tf;
-
#define IQ80321_OBIO_BASE 0xfe800000UL
#define IQ80321_OBIO_SIZE 0x00100000UL
/* Static device mappings. */
@@ -377,13 +375,7 @@ initarm(struct arm_boot_params *abp)
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+ init_proc0(kernelstack.pv_va);
/* Enable MMU, I-cache, D-cache, write buffer. */
diff --git a/sys/arm/xscale/i8134x/crb_machdep.c b/sys/arm/xscale/i8134x/crb_machdep.c
index cb0cefc..7d49d40 100644
--- a/sys/arm/xscale/i8134x/crb_machdep.c
+++ b/sys/arm/xscale/i8134x/crb_machdep.c
@@ -135,8 +135,6 @@ struct pv_addr undstack;
struct pv_addr abtstack;
struct pv_addr kernelstack;
-static struct trapframe proc0_tf;
-
/* Static device mappings. */
static const struct pmap_devmap iq81342_devmap[] = {
{
@@ -353,13 +351,7 @@ initarm(struct arm_boot_params *abp)
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+ init_proc0(kernelstack.pv_va);
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
diff --git a/sys/arm/xscale/ixp425/avila_machdep.c b/sys/arm/xscale/ixp425/avila_machdep.c
index 01a770d..a91fd20 100644
--- a/sys/arm/xscale/ixp425/avila_machdep.c
+++ b/sys/arm/xscale/ixp425/avila_machdep.c
@@ -140,8 +140,6 @@ struct pv_addr abtstack;
struct pv_addr kernelstack;
struct pv_addr minidataclean;
-static struct trapframe proc0_tf;
-
/* Static device mappings. */
static const struct pmap_devmap ixp425_devmap[] = {
/* Physical/Virtual address for I/O space */
@@ -443,13 +441,7 @@ initarm(struct arm_boot_params *abp)
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup0(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+ init_proc0(kernelstack.pv_va);
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
diff --git a/sys/arm/xscale/pxa/pxa_machdep.c b/sys/arm/xscale/pxa/pxa_machdep.c
index 56e1402..69311d4 100644
--- a/sys/arm/xscale/pxa/pxa_machdep.c
+++ b/sys/arm/xscale/pxa/pxa_machdep.c
@@ -136,8 +136,6 @@ struct pv_addr abtstack;
struct pv_addr kernelstack;
struct pv_addr minidataclean;
-static struct trapframe proc0_tf;
-
static void pxa_probe_sdram(bus_space_tag_t, bus_space_handle_t,
uint32_t *, uint32_t *);
@@ -367,13 +365,7 @@ initarm(struct arm_boot_params *abp)
undefined_handler_address = (u_int)undefinedinstruction_bounce;
undefined_init();
- proc_linkup(&proc0, &thread0);
- thread0.td_kstack = kernelstack.pv_va;
- thread0.td_pcb = (struct pcb *)
- (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
- thread0.td_pcb->pcb_flags = 0;
- thread0.td_frame = &proc0_tf;
- pcpup->pc_curpcb = thread0.td_pcb;
+ init_proc0(kernelstack.pv_va);
/* Enable MMU, I-cache, D-cache, write buffer. */
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
OpenPOWER on IntegriCloud