Changeset c621f4aa in mainline for kernel/arch/arm32/include
- Timestamp:
- 2010-07-25T10:11:13Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 377cce8
- Parents:
- 24a2517 (diff), a2da43c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- kernel/arch/arm32/include
- Files:
-
- 1 added
- 21 edited
-
arch.h (modified) (1 diff)
-
asm.h (modified) (3 diffs)
-
atomic.h (modified) (9 diffs)
-
context.h (modified) (1 diff)
-
cpu.h (modified) (1 diff)
-
cycle.h (modified) (1 diff)
-
exception.h (modified) (8 diffs)
-
faddr.h (modified) (2 diffs)
-
fpu_context.h (modified) (1 diff)
-
interrupt.h (modified) (2 diffs)
-
mach/gta02/gta02.h (added)
-
mach/integratorcp/integratorcp.h (modified) (2 diffs)
-
mach/testarm/testarm.h (modified) (2 diffs)
-
machine_func.h (modified) (4 diffs)
-
memstr.h (modified) (2 diffs)
-
mm/asid.h (modified) (1 diff)
-
mm/frame.h (modified) (1 diff)
-
mm/page.h (modified) (9 diffs)
-
mm/page_fault.h (modified) (2 diffs)
-
mm/tlb.h (modified) (1 diff)
-
ras.h (modified) (2 diffs)
-
types.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/include/arch.h
r24a2517 rc621f4aa 45 45 46 46 typedef struct { 47 uintptr_taddr;48 uint32_t size;47 void *addr; 48 size_t size; 49 49 char name[BOOTINFO_TASK_NAME_BUFLEN]; 50 50 } utask_t; 51 51 52 52 typedef struct { 53 uint32_t cnt;53 size_t cnt; 54 54 utask_t tasks[TASKMAP_MAX_RECORDS]; 55 55 } bootinfo_t; -
kernel/arch/arm32/include/asm.h
r24a2517 rc621f4aa 38 38 39 39 #include <typedefs.h> 40 #include <arch/types.h>41 40 #include <arch/stack.h> 42 41 #include <config.h> 43 42 #include <arch/interrupt.h> 43 #include <trace.h> 44 44 45 45 /** No such instruction on ARM to sleep CPU. */ 46 static inline void cpu_sleep(void)46 NO_TRACE static inline void cpu_sleep(void) 47 47 { 48 48 } 49 49 50 static inline void pio_write_8(ioport8_t *port, uint8_t v)50 NO_TRACE static inline void pio_write_8(ioport8_t *port, uint8_t v) 51 51 { 52 52 *port = v; 53 53 } 54 54 55 static inline void pio_write_16(ioport16_t *port, uint16_t v)55 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t v) 56 56 { 57 57 *port = v; 58 58 } 59 59 60 static inline void pio_write_32(ioport32_t *port, uint32_t v)60 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t v) 61 61 { 62 62 *port = v; 63 63 } 64 64 65 static inline uint8_t pio_read_8(ioport8_t *port)65 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 66 66 { 67 67 return *port; 68 68 } 69 69 70 static inline uint16_t pio_read_16(ioport16_t *port)70 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 71 71 { 72 72 return *port; 73 73 } 74 74 75 static inline uint32_t pio_read_32(ioport32_t *port)75 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 76 76 { 77 77 return *port; … … 85 85 * 86 86 */ 87 static inline uintptr_t get_stack_base(void)87 NO_TRACE static inline uintptr_t get_stack_base(void) 88 88 { 89 89 uintptr_t v; 90 90 91 asm volatile ( 91 92 "and %[v], sp, %[size]\n" … … 93 94 : [size] "r" (~(STACK_SIZE - 1)) 94 95 ); 96 95 97 return v; 96 98 } -
kernel/arch/arm32/include/atomic.h
r24a2517 rc621f4aa 38 38 39 39 #include <arch/asm.h> 40 #include <trace.h> 40 41 41 42 /** Atomic addition. … … 47 48 * 48 49 */ 49 static inline long atomic_add(atomic_t *val, int i) 50 NO_TRACE static inline atomic_count_t atomic_add(atomic_t *val, 51 atomic_count_t i) 50 52 { 51 long ret;52 53 53 /* 54 54 * This implementation is for UP pre-ARMv6 systems where we do not have … … 57 57 ipl_t ipl = interrupts_disable(); 58 58 val->count += i; 59 ret = val->count;59 atomic_count_t ret = val->count; 60 60 interrupts_restore(ipl); 61 61 … … 66 66 * 67 67 * @param val Variable to be incremented. 68 * 68 69 */ 69 static inline void atomic_inc(atomic_t *val)70 NO_TRACE static inline void atomic_inc(atomic_t *val) 70 71 { 71 72 atomic_add(val, 1); … … 75 76 * 76 77 * @param val Variable to be decremented. 78 * 77 79 */ 78 static inline void atomic_dec(atomic_t *val) {80 NO_TRACE static inline void atomic_dec(atomic_t *val) { 79 81 atomic_add(val, -1); 80 82 } … … 84 86 * @param val Variable to be incremented. 85 87 * @return Value after incrementation. 88 * 86 89 */ 87 static inline longatomic_preinc(atomic_t *val)90 NO_TRACE static inline atomic_count_t atomic_preinc(atomic_t *val) 88 91 { 89 92 return atomic_add(val, 1); … … 94 97 * @param val Variable to be decremented. 95 98 * @return Value after decrementation. 99 * 96 100 */ 97 static inline longatomic_predec(atomic_t *val)101 NO_TRACE static inline atomic_count_t atomic_predec(atomic_t *val) 98 102 { 99 103 return atomic_add(val, -1); … … 104 108 * @param val Variable to be incremented. 105 109 * @return Value before incrementation. 110 * 106 111 */ 107 static inline longatomic_postinc(atomic_t *val)112 NO_TRACE static inline atomic_count_t atomic_postinc(atomic_t *val) 108 113 { 109 114 return atomic_add(val, 1) - 1; … … 114 119 * @param val Variable to be decremented. 115 120 * @return Value before decrementation. 121 * 116 122 */ 117 static inline longatomic_postdec(atomic_t *val)123 NO_TRACE static inline atomic_count_t atomic_postdec(atomic_t *val) 118 124 { 119 125 return atomic_add(val, -1) + 1; -
kernel/arch/arm32/include/context.h
r24a2517 rc621f4aa 52 52 #ifndef __ASM__ 53 53 54 #include < arch/types.h>54 #include <typedefs.h> 55 55 56 56 /** Thread context containing registers that must be preserved across function -
kernel/arch/arm32/include/cpu.h
r24a2517 rc621f4aa 37 37 #define KERN_arm32_CPU_H_ 38 38 39 #include < arch/types.h>39 #include <typedefs.h> 40 40 #include <arch/asm.h> 41 41 -
kernel/arch/arm32/include/cycle.h
r24a2517 rc621f4aa 37 37 #define KERN_arm32_CYCLE_H_ 38 38 39 /** Returns count of CPU cycles. 39 #include <trace.h> 40 41 /** Return count of CPU cycles. 40 42 * 41 * No such instruction on ARM to get count of cycles.43 * No such instruction on ARM to get count of cycles. 42 44 * 43 * @return Count of CPU cycles. 45 * @return Count of CPU cycles. 46 * 44 47 */ 45 static inline uint64_t get_cycle(void)48 NO_TRACE static inline uint64_t get_cycle(void) 46 49 { 47 50 return 0; -
kernel/arch/arm32/include/exception.h
r24a2517 rc621f4aa 28 28 */ 29 29 30 /** @addtogroup arm32 30 /** @addtogroup arm32 31 31 * @{ 32 32 */ … … 38 38 #define KERN_arm32_EXCEPTION_H_ 39 39 40 #include < arch/types.h>40 #include <typedefs.h> 41 41 #include <arch/regutils.h> 42 #include <trace.h> 42 43 43 44 /** If defined, forces using of high exception vectors. */ … … 45 46 46 47 #ifdef HIGH_EXCEPTION_VECTORS 47 #define EXC_BASE_ADDRESS 0xffff000048 #define EXC_BASE_ADDRESS 0xffff0000 48 49 #else 49 #define EXC_BASE_ADDRESS 0x050 #define EXC_BASE_ADDRESS 0x0 50 51 #endif 51 52 52 53 /* Exception Vectors */ 53 #define EXC_RESET_VEC (EXC_BASE_ADDRESS + 0x0)54 #define EXC_UNDEF_INSTR_VEC (EXC_BASE_ADDRESS + 0x4)55 #define EXC_SWI_VEC (EXC_BASE_ADDRESS + 0x8)56 #define EXC_PREFETCH_ABORT_VEC (EXC_BASE_ADDRESS + 0xc)57 #define EXC_DATA_ABORT_VEC (EXC_BASE_ADDRESS + 0x10)58 #define EXC_IRQ_VEC (EXC_BASE_ADDRESS + 0x18)59 #define EXC_FIQ_VEC (EXC_BASE_ADDRESS + 0x1c)54 #define EXC_RESET_VEC (EXC_BASE_ADDRESS + 0x0) 55 #define EXC_UNDEF_INSTR_VEC (EXC_BASE_ADDRESS + 0x4) 56 #define EXC_SWI_VEC (EXC_BASE_ADDRESS + 0x8) 57 #define EXC_PREFETCH_ABORT_VEC (EXC_BASE_ADDRESS + 0xc) 58 #define EXC_DATA_ABORT_VEC (EXC_BASE_ADDRESS + 0x10) 59 #define EXC_IRQ_VEC (EXC_BASE_ADDRESS + 0x18) 60 #define EXC_FIQ_VEC (EXC_BASE_ADDRESS + 0x1c) 60 61 61 62 /* Exception numbers */ … … 68 69 #define EXC_FIQ 6 69 70 70 71 71 /** Kernel stack pointer. 72 72 * 73 73 * It is set when thread switches to user mode, 74 74 * and then used for exception handling. 75 * 75 76 */ 76 77 extern uintptr_t supervisor_sp; 77 78 78 79 79 /** Temporary exception stack pointer. … … 81 81 * Temporary stack is used in exceptions handling routines 82 82 * before switching to thread's kernel stack. 83 * 83 84 */ 84 85 extern uintptr_t exc_stack; 85 86 86 87 87 /** Struct representing CPU state saved when an exception occurs. */ … … 90 90 uint32_t sp; 91 91 uint32_t lr; 92 92 93 93 uint32_t r0; 94 94 uint32_t r1; … … 104 104 uint32_t fp; 105 105 uint32_t r12; 106 106 107 107 uint32_t pc; 108 108 } istate_t; 109 109 110 111 /** Sets Program Counter member of given istate structure. 110 /** Set Program Counter member of given istate structure. 112 111 * 113 * @param istate istate structure112 * @param istate istate structure 114 113 * @param retaddr new value of istate's PC member 114 * 115 115 */ 116 static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr) 116 NO_TRACE static inline void istate_set_retaddr(istate_t *istate, 117 uintptr_t retaddr) 117 118 { 118 istate->pc = retaddr;119 istate->pc = retaddr; 119 120 } 120 121 121 122 /** Returns true if exception happened while in userspace. */ 123 static inline int istate_from_uspace(istate_t *istate) 122 /** Return true if exception happened while in userspace. */ 123 NO_TRACE static inline int istate_from_uspace(istate_t *istate) 124 124 { 125 return (istate->spsr & STATUS_REG_MODE_MASK) == USER_MODE;125 return (istate->spsr & STATUS_REG_MODE_MASK) == USER_MODE; 126 126 } 127 127 128 129 /** Returns Program Counter member of given istate structure. */ 130 static inline unative_t istate_get_pc(istate_t *istate) 128 /** Return Program Counter member of given istate structure. */ 129 NO_TRACE static inline unative_t istate_get_pc(istate_t *istate) 131 130 { 132 return istate->pc;131 return istate->pc; 133 132 } 134 133 135 static inline unative_t istate_get_fp(istate_t *istate)134 NO_TRACE static inline unative_t istate_get_fp(istate_t *istate) 136 135 { 137 136 return istate->fp; 138 137 } 139 138 140 141 139 extern void install_exception_handlers(void); 142 140 extern void exception_init(void); 143 extern void print_istate(istate_t *istate);144 141 extern void reset_exception_entry(void); 145 142 extern void irq_exception_entry(void); … … 150 147 extern void swi_exception_entry(void); 151 148 152 153 149 #endif 154 150 -
kernel/arch/arm32/include/faddr.h
r24a2517 rc621f4aa 27 27 */ 28 28 29 /** @addtogroup arm32 29 /** @addtogroup arm32 30 30 * @{ 31 31 */ … … 37 37 #define KERN_arm32_FADDR_H_ 38 38 39 #include < arch/types.h>39 #include <typedefs.h> 40 40 41 41 /** Calculate absolute address of function referenced by fptr pointer. 42 42 * 43 43 * @param fptr Function pointer. 44 * 44 45 */ 45 #define FADDR(fptr) ((uintptr_t) (fptr))46 #define FADDR(fptr) ((uintptr_t) (fptr)) 46 47 47 48 #endif -
kernel/arch/arm32/include/fpu_context.h
r24a2517 rc621f4aa 39 39 #define KERN_arm32_FPU_CONTEXT_H_ 40 40 41 #include < arch/types.h>41 #include <typedefs.h> 42 42 43 43 #define FPU_CONTEXT_ALIGN 0 -
kernel/arch/arm32/include/interrupt.h
r24a2517 rc621f4aa 37 37 #define KERN_arm32_INTERRUPT_H_ 38 38 39 #include < arch/types.h>39 #include <typedefs.h> 40 40 #include <arch/exception.h> 41 41 42 42 /** Initial size of exception dispatch table. */ 43 #define IVT_ITEMS 643 #define IVT_ITEMS 6 44 44 45 45 /** Index of the first item in exception dispatch table. */ 46 #define IVT_FIRST 0 47 46 #define IVT_FIRST 0 48 47 49 48 extern void interrupt_init(void); … … 52 51 extern void interrupts_restore(ipl_t ipl); 53 52 extern ipl_t interrupts_read(void); 54 53 extern bool interrupts_disabled(void); 55 54 56 55 #endif -
kernel/arch/arm32/include/mach/integratorcp/integratorcp.h
r24a2517 rc621f4aa 36 36 */ 37 37 38 #ifndef KERN_arm32_ MACHINE_H_39 #define KERN_arm32_ MACHINE_H_38 #ifndef KERN_arm32_icp_H_ 39 #define KERN_arm32_icp_H_ 40 40 41 41 #include <arch/machine_func.h> … … 102 102 extern void icp_timer_irq_start(void); 103 103 extern void icp_cpu_halt(void); 104 extern void icp_irq_exception( int exc_no, istate_t *istate);105 extern uintptr_t icp_get_memory_size(void);104 extern void icp_irq_exception(unsigned int, istate_t *); 105 extern void icp_get_memory_extents(uintptr_t *, uintptr_t *); 106 106 extern void icp_frame_init(void); 107 108 extern struct arm_machine_ops icp_machine_ops; 109 110 /** Size of IntegratorCP IRQ number range (starting from 0) */ 111 #define ICP_IRQ_COUNT 8 107 112 108 113 #endif -
kernel/arch/arm32/include/mach/testarm/testarm.h
r24a2517 rc621f4aa 37 37 */ 38 38 39 #ifndef KERN_arm32_ MACHINE_H_40 #define KERN_arm32_ MACHINE_H_39 #ifndef KERN_arm32_testarm_H_ 40 #define KERN_arm32_testarm_H_ 41 41 42 42 #include <arch/machine_func.h> 43 43 44 /** Last interrupt number (beginning from 0) whose status is probed 45 * from interrupt controller 46 */ 47 #define GXEMUL_IRQC_MAX_IRQ 8 48 #define GXEMUL_KBD_IRQ 2 49 #define GXEMUL_TIMER_IRQ 4 44 /** Size of GXemul IRQ number range (starting from 0) */ 45 #define GXEMUL_IRQ_COUNT 32 46 #define GXEMUL_KBD_IRQ 2 47 #define GXEMUL_TIMER_IRQ 4 50 48 51 49 /** Timer frequency */ … … 72 70 extern void gxemul_timer_irq_start(void); 73 71 extern void gxemul_cpu_halt(void); 74 extern void gxemul_irq_exception( int exc_no, istate_t *istate);75 extern uintptr_t gxemul_get_memory_size(void);72 extern void gxemul_irq_exception(unsigned int, istate_t *); 73 extern void gxemul_get_memory_extents(uintptr_t *, uintptr_t *); 76 74 extern void gxemul_frame_init(void); 77 75 76 extern struct arm_machine_ops gxemul_machine_ops; 78 77 79 78 #endif -
kernel/arch/arm32/include/machine_func.h
r24a2517 rc621f4aa 43 43 44 44 #include <console/console.h> 45 #include < arch/types.h>45 #include <typedefs.h> 46 46 #include <arch/exception.h> 47 47 48 #define MACHINE_GENFUNC machine_genfunc49 50 48 struct arm_machine_ops { 51 void (*machine_init)(void);52 void (*machine_timer_irq_start)(void);53 void (*machine_cpu_halt)(void);54 uintptr_t (*machine_get_memory_size)(void);55 void (*machine_irq_exception)(int, istate_t*);56 void (*machine_frame_init)(void);57 void (*machine_output_init)(void);58 void (*machine_input_init)(void);49 void (*machine_init)(void); 50 void (*machine_timer_irq_start)(void); 51 void (*machine_cpu_halt)(void); 52 void (*machine_get_memory_extents)(uintptr_t *, uintptr_t *); 53 void (*machine_irq_exception)(unsigned int, istate_t *); 54 void (*machine_frame_init)(void); 55 void (*machine_output_init)(void); 56 void (*machine_input_init)(void); 59 57 }; 60 58 61 extern struct arm_machine_ops machine_ops; 59 /** Pointer to arm_machine_ops structure being used. */ 60 extern struct arm_machine_ops *machine_ops; 62 61 62 /** Initialize machine_ops pointer. */ 63 extern void machine_ops_init(void); 63 64 64 65 /** Maps HW devices to the kernel address space using #hw_map. */ … … 73 74 extern void machine_cpu_halt(void); 74 75 75 76 /** Returns size of available memory. 76 /** Get extents of available memory. 77 77 * 78 * @return Size of available memory. 78 * @param start Place to store memory start address. 79 * @param size Place to store memory size. 79 80 */ 80 extern uintptr_t machine_get_memory_size(void); 81 81 extern void machine_get_memory_extents(uintptr_t *start, uintptr_t *size); 82 82 83 83 /** Interrupt exception handler. … … 86 86 * @param istate Saved processor state. 87 87 */ 88 extern void machine_irq_exception( int exc_no, istate_t *istate);88 extern void machine_irq_exception(unsigned int exc_no, istate_t *istate); 89 89 90 90 … … 104 104 extern void machine_input_init(void); 105 105 106 extern void machine_genfunc(void); 106 extern size_t machine_get_irq_count(void); 107 107 108 #endif 108 109 -
kernel/arch/arm32/include/memstr.h
r24a2517 rc621f4aa 27 27 */ 28 28 29 /** @addtogroup arm32 29 /** @addtogroup arm32 30 30 * @{ 31 31 */ … … 39 39 #define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)) 40 40 41 extern void memsetw(void *dst, size_t cnt, uint16_t x); 42 extern void memsetb(void *dst, size_t cnt, uint8_t x); 43 44 extern int memcmp(const void *a, const void *b, size_t cnt); 41 extern void memsetw(void *, size_t, uint16_t); 42 extern void memsetb(void *, size_t, uint8_t); 45 43 46 44 #endif -
kernel/arch/arm32/include/mm/asid.h
r24a2517 rc621f4aa 39 39 #define KERN_arm32_ASID_H_ 40 40 41 #include < arch/types.h>41 #include <typedefs.h> 42 42 43 43 #define ASID_MAX_ARCH 3 /* minimal required number */ -
kernel/arch/arm32/include/mm/frame.h
r24a2517 rc621f4aa 43 43 #ifndef __ASM__ 44 44 45 #include < arch/types.h>45 #include <typedefs.h> 46 46 47 47 #define BOOT_PAGE_TABLE_SIZE 0x4000 48 #define BOOT_PAGE_TABLE_ADDRESS 0x4000 48 49 #ifdef MACHINE_gta02 50 #define BOOT_PAGE_TABLE_ADDRESS 0x30010000 51 #else 52 #define BOOT_PAGE_TABLE_ADDRESS 0x00008000 53 #endif 49 54 50 55 #define BOOT_PAGE_TABLE_START_FRAME (BOOT_PAGE_TABLE_ADDRESS >> FRAME_WIDTH) 51 56 #define BOOT_PAGE_TABLE_SIZE_IN_FRAMES (BOOT_PAGE_TABLE_SIZE >> FRAME_WIDTH) 57 58 #ifdef MACHINE_gta02 59 #define PHYSMEM_START_ADDR 0x30008000 60 #else 61 #define PHYSMEM_START_ADDR 0x00000000 62 #endif 52 63 53 64 extern uintptr_t last_frame; -
kernel/arch/arm32/include/mm/page.h
r24a2517 rc621f4aa 27 27 */ 28 28 29 /** @addtogroup arm32mm 29 /** @addtogroup arm32mm 30 30 * @{ 31 31 */ … … 40 40 #include <mm/mm.h> 41 41 #include <arch/exception.h> 42 #include <trace.h> 42 43 43 44 #define PAGE_WIDTH FRAME_WIDTH … … 192 193 /** Sets the address of level 0 page table. 193 194 * 194 * @param pt Pointer to the page table to set. 195 */ 196 static inline void set_ptl0_addr(pte_t *pt) 195 * @param pt Pointer to the page table to set. 196 * 197 */ 198 NO_TRACE static inline void set_ptl0_addr(pte_t *pt) 197 199 { 198 200 asm volatile ( … … 205 207 /** Returns level 0 page table entry flags. 206 208 * 207 * @param pt Level 0 page table. 208 * @param i Index of the entry to return. 209 */ 210 static inline int get_pt_level0_flags(pte_t *pt, size_t i) 209 * @param pt Level 0 page table. 210 * @param i Index of the entry to return. 211 * 212 */ 213 NO_TRACE static inline int get_pt_level0_flags(pte_t *pt, size_t i) 211 214 { 212 215 pte_level0_t *p = &pt[i].l0; 213 216 int np = (p->descriptor_type == PTE_DESCRIPTOR_NOT_PRESENT); 214 217 215 218 return (np << PAGE_PRESENT_SHIFT) | (1 << PAGE_USER_SHIFT) | 216 219 (1 << PAGE_READ_SHIFT) | (1 << PAGE_WRITE_SHIFT) | … … 220 223 /** Returns level 1 page table entry flags. 221 224 * 222 * @param pt Level 1 page table. 223 * @param i Index of the entry to return. 224 */ 225 static inline int get_pt_level1_flags(pte_t *pt, size_t i) 225 * @param pt Level 1 page table. 226 * @param i Index of the entry to return. 227 * 228 */ 229 NO_TRACE static inline int get_pt_level1_flags(pte_t *pt, size_t i) 226 230 { 227 231 pte_level1_t *p = &pt[i].l1; 228 232 229 233 int dt = p->descriptor_type; 230 234 int ap = p->access_permission_0; 231 235 232 236 return ((dt == PTE_DESCRIPTOR_NOT_PRESENT) << PAGE_PRESENT_SHIFT) | 233 237 ((ap == PTE_AP_USER_RO_KERNEL_RW) << PAGE_READ_SHIFT) | … … 241 245 } 242 246 243 244 247 /** Sets flags of level 0 page table entry. 245 248 * 246 * @param pt level 0 page table 247 * @param i index of the entry to be changed 248 * @param flags new flags 249 */ 250 static inline void set_pt_level0_flags(pte_t *pt, size_t i, int flags) 249 * @param pt level 0 page table 250 * @param i index of the entry to be changed 251 * @param flags new flags 252 * 253 */ 254 NO_TRACE static inline void set_pt_level0_flags(pte_t *pt, size_t i, int flags) 251 255 { 252 256 pte_level0_t *p = &pt[i].l0; 253 257 254 258 if (flags & PAGE_NOT_PRESENT) { 255 259 p->descriptor_type = PTE_DESCRIPTOR_NOT_PRESENT; … … 262 266 p->descriptor_type = PTE_DESCRIPTOR_COARSE_TABLE; 263 267 p->should_be_zero = 0; 264 }268 } 265 269 } 266 270 … … 268 272 /** Sets flags of level 1 page table entry. 269 273 * 270 * We use same access rights for the whole page. When page is not preset we 271 * store 1 in acess_rigts_3 so that at least one bit is 1 (to mark correct 272 * page entry, see #PAGE_VALID_ARCH). 273 * 274 * @param pt Level 1 page table. 275 * @param i Index of the entry to be changed. 276 * @param flags New flags. 277 */ 278 static inline void set_pt_level1_flags(pte_t *pt, size_t i, int flags) 274 * We use same access rights for the whole page. When page 275 * is not preset we store 1 in acess_rigts_3 so that at least 276 * one bit is 1 (to mark correct page entry, see #PAGE_VALID_ARCH). 277 * 278 * @param pt Level 1 page table. 279 * @param i Index of the entry to be changed. 280 * @param flags New flags. 281 * 282 */ 283 NO_TRACE static inline void set_pt_level1_flags(pte_t *pt, size_t i, int flags) 279 284 { 280 285 pte_level1_t *p = &pt[i].l1; … … 287 292 p->access_permission_3 = p->access_permission_0; 288 293 } 289 294 290 295 p->cacheable = p->bufferable = (flags & PAGE_CACHEABLE) != 0; 291 296 292 297 /* default access permission */ 293 298 p->access_permission_0 = p->access_permission_1 = 294 299 p->access_permission_2 = p->access_permission_3 = 295 300 PTE_AP_USER_NO_KERNEL_RW; 296 301 297 302 if (flags & PAGE_USER) { 298 303 if (flags & PAGE_READ) { -
kernel/arch/arm32/include/mm/page_fault.h
r24a2517 rc621f4aa 37 37 #define KERN_arm32_PAGE_FAULT_H_ 38 38 39 #include < arch/types.h>39 #include <typedefs.h> 40 40 41 41 … … 81 81 } instruction_union_t; 82 82 83 extern void prefetch_abort( int n, istate_t *istate);84 extern void data_abort( int n, istate_t *istate);83 extern void prefetch_abort(unsigned int, istate_t *); 84 extern void data_abort(unsigned int, istate_t *); 85 85 86 86 #endif -
kernel/arch/arm32/include/mm/tlb.h
r24a2517 rc621f4aa 27 27 */ 28 28 29 /** @addtogroup arm32mm 29 /** @addtogroup arm32mm 30 30 * @{ 31 31 */ -
kernel/arch/arm32/include/ras.h
r24a2517 rc621f4aa 1 1 /* 2 * Copyright (c) 2009 Jakub Jermar 2 * Copyright (c) 2009 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 38 38 39 39 #include <arch/exception.h> 40 #include < arch/types.h>40 #include <typedefs.h> 41 41 42 #define RAS_START 043 #define RAS_END 142 #define RAS_START 0 43 #define RAS_END 1 44 44 45 45 extern uintptr_t *ras_page; 46 46 47 47 extern void ras_init(void); 48 extern void ras_check( int, istate_t *);48 extern void ras_check(unsigned int, istate_t *); 49 49 50 50 #endif -
kernel/arch/arm32/include/types.h
r24a2517 rc621f4aa 27 27 */ 28 28 29 /** @addtogroup arm32 29 /** @addtogroup arm32 30 30 * @{ 31 31 */ … … 38 38 39 39 #ifndef DOXYGEN 40 # define ATTRIBUTE_PACKED __attribute__((packed))40 #define ATTRIBUTE_PACKED __attribute__((packed)) 41 41 #else 42 #define ATTRIBUTE_PACKED42 #define ATTRIBUTE_PACKED 43 43 #endif 44 45 typedef signed char int8_t;46 typedef signed short int16_t;47 typedef signed long int32_t;48 typedef signed long long int64_t;49 50 typedef unsigned char uint8_t;51 typedef unsigned short uint16_t;52 typedef unsigned long uint32_t;53 typedef unsigned long long uint64_t;54 44 55 45 typedef uint32_t size_t; … … 62 52 typedef uint32_t unative_t; 63 53 typedef int32_t native_t; 54 typedef uint32_t atomic_count_t; 64 55 65 56 typedef struct { 66 57 } fncptr_t; 67 58 68 #define PRIp "x" /**< Format for uintptr_t. */69 #define PRIs "u" /**< Format for size_t. */59 #define PRIp "x" /**< Format for uintptr_t. */ 60 #define PRIs "u" /**< Format for size_t. */ 70 61 71 #define PRId8 "d" /**< Format for int8_t. */72 #define PRId16 "d" /**< Format for int16_t. */73 #define PRId32 "d" /**< Format for int32_t. */74 #define PRId64 "lld" /**< Format for int64_t. */75 #define PRIdn "d" /**< Format for native_t. */62 #define PRId8 "d" /**< Format for int8_t. */ 63 #define PRId16 "d" /**< Format for int16_t. */ 64 #define PRId32 "d" /**< Format for int32_t. */ 65 #define PRId64 "lld" /**< Format for int64_t. */ 66 #define PRIdn "d" /**< Format for native_t. */ 76 67 77 #define PRIu8 "u" /**< Format for uint8_t. */78 #define PRIu16 "u" /**< Format for uint16_t. */79 #define PRIu32 "u" /**< Format for uint32_t. */80 #define PRIu64 "llu" /**< Format for uint64_t. */81 #define PRIun "u" /**< Format for unative_t. */68 #define PRIu8 "u" /**< Format for uint8_t. */ 69 #define PRIu16 "u" /**< Format for uint16_t. */ 70 #define PRIu32 "u" /**< Format for uint32_t. */ 71 #define PRIu64 "llu" /**< Format for uint64_t. */ 72 #define PRIun "u" /**< Format for unative_t. */ 82 73 83 #define PRIx8 "x" /**< Format for hexadecimal (u)int8_t. */84 #define PRIx16 "x" /**< Format for hexadecimal (u)int16_t. */85 #define PRIx32 "x" /**< Format for hexadecimal (u)uint32_t. */86 #define PRIx64 "llx" /**< Format for hexadecimal (u)int64_t. */87 #define PRIxn "x" /**< Format for hexadecimal (u)native_t. */74 #define PRIx8 "x" /**< Format for hexadecimal (u)int8_t. */ 75 #define PRIx16 "x" /**< Format for hexadecimal (u)int16_t. */ 76 #define PRIx32 "x" /**< Format for hexadecimal (u)uint32_t. */ 77 #define PRIx64 "llx" /**< Format for hexadecimal (u)int64_t. */ 78 #define PRIxn "x" /**< Format for hexadecimal (u)native_t. */ 88 79 89 80 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
