summaryrefslogtreecommitdiffstats
path: root/sys/arm/include
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2015-02-12 04:15:55 +0000
committerian <ian@FreeBSD.org>2015-02-12 04:15:55 +0000
commita9d7d10c208a910d1f4132d0ff76c4cc58676124 (patch)
tree622c4009e7db7c61b1ae2b3a27d4f247f9351d43 /sys/arm/include
parentdff1ee7f45c73c94ead5792fd2f879e70e6232c8 (diff)
downloadFreeBSD-src-a9d7d10c208a910d1f4132d0ff76c4cc58676124.zip
FreeBSD-src-a9d7d10c208a910d1f4132d0ff76c4cc58676124.tar.gz
MFC r276187, r276190, r271422:
Rename pmap_kenter_temp to pmap_kenter_temporary to be consistent with the other architectures with this function. Eliminate unnecessary references to pte.h internals by using the standard pmap_kenter_temporary() to map pages while dumping. Cleanup up ARM *frame structures.
Diffstat (limited to 'sys/arm/include')
-rw-r--r--sys/arm/include/db_machdep.h2
-rw-r--r--sys/arm/include/frame.h72
-rw-r--r--sys/arm/include/pcb.h39
-rw-r--r--sys/arm/include/pmap.h2
4 files changed, 30 insertions, 85 deletions
diff --git a/sys/arm/include/db_machdep.h b/sys/arm/include/db_machdep.h
index da3b30e..741cae9 100644
--- a/sys/arm/include/db_machdep.h
+++ b/sys/arm/include/db_machdep.h
@@ -38,7 +38,7 @@
typedef vm_offset_t db_addr_t;
typedef int db_expr_t;
-#define PC_REGS() ((db_addr_t)kdb_thrctx->un_32.pcb32_pc)
+#define PC_REGS() ((db_addr_t)kdb_thrctx->pcb_regs.sf_pc)
#define BKPT_INST (KERNEL_BREAKPOINT)
#define BKPT_SIZE (INSN_SIZE)
diff --git a/sys/arm/include/frame.h b/sys/arm/include/frame.h
index 1e6f43a..7655d89 100644
--- a/sys/arm/include/frame.h
+++ b/sys/arm/include/frame.h
@@ -86,57 +86,16 @@ struct trapframe {
#define tf_r13 tf_usr_sp
#define tf_r14 tf_usr_lr
#define tf_r15 tf_pc
-/*
- * * Scheduler activations upcall frame. Pushed onto user stack before
- * * calling an SA upcall.
- * */
-
-struct saframe {
-#if 0 /* in registers on entry to upcall */
- int sa_type;
- struct sa_t ** sa_sas;
- int sa_events;
- int sa_interrupted;
-#endif
- void * sa_arg;
-};
/*
- * * Signal frame. Pushed onto user stack before calling sigcode.
- * */
-
-/* the pointers are use in the trampoline code to locate the ucontext */
+ * Signal frame. Pushed onto user stack before calling sigcode.
+ * The pointers are used in the trampoline code to locate the ucontext.
+ */
struct sigframe {
- siginfo_t sf_si; /* actual saved siginfo */
+ siginfo_t sf_si; /* actual saved siginfo */
ucontext_t sf_uc; /* actual saved ucontext */
};
-/*
- * System stack frames.
- */
-
-
-typedef struct irqframe {
- unsigned int if_spsr;
- unsigned int if_r0;
- unsigned int if_r1;
- unsigned int if_r2;
- unsigned int if_r3;
- unsigned int if_r4;
- unsigned int if_r5;
- unsigned int if_r6;
- unsigned int if_r7;
- unsigned int if_r8;
- unsigned int if_r9;
- unsigned int if_r10;
- unsigned int if_r11;
- unsigned int if_r12;
- unsigned int if_usr_sp;
- unsigned int if_usr_lr;
- unsigned int if_svc_sp;
- unsigned int if_svc_lr;
- unsigned int if_pc;
-} irqframe_t;
/*
* Switch frame.
@@ -144,16 +103,23 @@ typedef struct irqframe {
* It is important this is a multiple of 8 bytes so the stack is correctly
* aligned when we create new threads.
*/
-
-struct switchframe {
- u_int pad; /* Used to pad the struct to a multiple of 8-bytes */
- u_int sf_r4;
- u_int sf_r5;
- u_int sf_r6;
- u_int sf_r7;
- u_int sf_pc;
+struct switchframe
+{
+ register_t sf_r4;
+ register_t sf_r5;
+ register_t sf_r6;
+ register_t sf_r7;
+ register_t sf_r8;
+ register_t sf_r9;
+ register_t sf_r10;
+ register_t sf_r11;
+ register_t sf_r12;
+ register_t sf_sp;
+ register_t sf_lr;
+ register_t sf_pc;
};
+
/*
* Stack frame. Used during stack traces (db_trace.c)
*/
diff --git a/sys/arm/include/pcb.h b/sys/arm/include/pcb.h
index 252d94e..b5ed607 100644
--- a/sys/arm/include/pcb.h
+++ b/sys/arm/include/pcb.h
@@ -39,50 +39,29 @@
#define _MACHINE_PCB_H_
#include <machine/fp.h>
+#include <machine/frame.h>
-struct trapframe;
-
-struct pcb_arm32 {
- vm_offset_t pcb32_pagedir; /* PT hooks */
- uint32_t *pcb32_pl1vec; /* PTR to vector_base L1 entry*/
- uint32_t pcb32_l1vec; /* Value to stuff on ctx sw */
- u_int pcb32_dacr; /* Domain Access Control Reg */
- /*
- * WARNING!
- * cpuswitch.S relies on pcb32_r8 being quad-aligned in struct pcb
- * (due to the use of "strd" when compiled for XSCALE)
- */
- u_int pcb32_r8; /* used */
- u_int pcb32_r9; /* used */
- u_int pcb32_r10; /* used */
- u_int pcb32_r11; /* used */
- u_int pcb32_r12; /* used */
- u_int pcb32_sp; /* used */
- u_int pcb32_lr;
- u_int pcb32_pc;
-};
-#define pcb_pagedir un_32.pcb32_pagedir
-#define pcb_pl1vec un_32.pcb32_pl1vec
-#define pcb_l1vec un_32.pcb32_l1vec
-#define pcb_dacr un_32.pcb32_dacr
-#define pcb_cstate un_32.pcb32_cstate
-
/*
* WARNING!
- * See warning for struct pcb_arm32, above, before changing struct pcb!
+ * Keep pcb_regs first for faster access in switch.S
*/
struct pcb {
+ struct switchframe pcb_regs; /* CPU state */
u_int pcb_flags;
#define PCB_OWNFPU 0x00000001
#define PCB_NOALIGNFLT 0x00000002
caddr_t pcb_onfault; /* On fault handler */
- struct pcb_arm32 un_32;
+ vm_offset_t pcb_pagedir; /* PT hooks */
+ uint32_t *pcb_pl1vec; /* PTR to vector_base L1 entry*/
+ uint32_t pcb_l1vec; /* Value to stuff on ctx sw */
+ u_int pcb_dacr; /* Domain Access Control Reg */
+
struct vfp_state pcb_vfpstate; /* VP/NEON state */
u_int pcb_vfpcpu; /* VP/NEON last cpu */
} __aligned(8); /*
* We need the PCB to be aligned on 8 bytes, as we may
- * access it using ldrd/strd, and some CPUs require it
+ * access it using ldrd/strd, and ARM ABI require it
* to by aligned on 8 bytes.
*/
diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h
index 70c337a..3f0b9e9 100644
--- a/sys/arm/include/pmap.h
+++ b/sys/arm/include/pmap.h
@@ -256,7 +256,7 @@ int pmap_change_attr(vm_offset_t, vm_size_t, int);
void pmap_kenter(vm_offset_t va, vm_paddr_t pa);
void pmap_kenter_nocache(vm_offset_t va, vm_paddr_t pa);
void pmap_kenter_device(vm_offset_t va, vm_paddr_t pa);
-void *pmap_kenter_temp(vm_paddr_t pa, int i);
+void *pmap_kenter_temporary(vm_paddr_t pa, int i);
void pmap_kenter_user(vm_offset_t va, vm_paddr_t pa);
vm_paddr_t pmap_kextract(vm_offset_t va);
void pmap_kremove(vm_offset_t);
OpenPOWER on IntegriCloud