Changeset 32e8cd1 in mainline for kernel/arch/sparc32/include
- Timestamp:
- 2013-12-28T17:16:44Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c1023bcb
- Parents:
- f6f22cdb
- Location:
- kernel/arch/sparc32/include/arch
- Files:
-
- 28 edited
-
ambapp.h (modified) (1 diff)
-
arch.h (modified) (2 diffs)
-
asm.h (modified) (11 diffs)
-
atomic.h (modified) (8 diffs)
-
barrier.h (modified) (2 diffs)
-
context.h (modified) (2 diffs)
-
context_offset.h (modified) (1 diff)
-
cpu.h (modified) (2 diffs)
-
cycle.h (modified) (3 diffs)
-
exception.h (modified) (1 diff)
-
faddr.h (modified) (1 diff)
-
fpu_context.h (modified) (3 diffs)
-
interrupt.h (modified) (2 diffs)
-
istate.h (modified) (5 diffs)
-
machine/leon3/leon3.h (modified) (1 diff)
-
machine_func.h (modified) (3 diffs)
-
mm/as.h (modified) (1 diff)
-
mm/frame.h (modified) (2 diffs)
-
mm/km.h (modified) (1 diff)
-
mm/page.h (modified) (9 diffs)
-
mm/page_fault.h (modified) (1 diff)
-
mm/tlb.h (modified) (1 diff)
-
proc/task.h (modified) (2 diffs)
-
register.h (modified) (1 diff)
-
regwin.h (modified) (1 diff)
-
stack.h (modified) (1 diff)
-
trap.h (modified) (1 diff)
-
types.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc32/include/arch/ambapp.h
rf6f22cdb r32e8cd1 36 36 #define KERN_sparc32_AMBAPP_H_ 37 37 38 typedef struct 39 { 38 typedef struct { 40 39 /* Primary serial port location */ 41 40 uintptr_t uart_base; -
kernel/arch/sparc32/include/arch/arch.h
rf6f22cdb r32e8cd1 42 42 #include <arch/istate.h> 43 43 44 #define NWINDOWS844 #define NWINDOWS 8 45 45 46 46 /* ASI assignments: */ 47 #define ASI_CACHEMISS0x0148 #define ASI_CACHECTRL0x0249 #define ASI_MMUCACHE0x1050 #define ASI_MMUREGS0x1951 #define ASI_MMUBYPASS0x1c52 #define ASI_MMUFLUSH0x1847 #define ASI_CACHEMISS 0x01 48 #define ASI_CACHECTRL 0x02 49 #define ASI_MMUCACHE 0x10 50 #define ASI_MMUREGS 0x19 51 #define ASI_MMUBYPASS 0x1c 52 #define ASI_MMUFLUSH 0x18 53 53 54 54 #define TASKMAP_MAX_RECORDS 32 55 55 #define CPUMAP_MAX_RECORDS 32 56 56 57 #define BOOTINFO_TASK_NAME_BUFLEN 3257 #define BOOTINFO_TASK_NAME_BUFLEN 32 58 58 59 59 typedef struct { … … 75 75 } bootinfo_t; 76 76 77 extern void arch_pre_main(void * unused, bootinfo_t *bootinfo);78 extern void write_to_invalid(uint32_t l0, uint32_t l1, uint32_t l2);79 extern void read_from_invalid(uint32_t * l0, uint32_t *l1, uint32_t *l2);80 extern void preemptible_save_uspace(uintptr_t sp, istate_t *istate);81 extern void preemptible_restore_uspace(uintptr_t sp, istate_t *istate);77 extern void arch_pre_main(void *, bootinfo_t *); 78 extern void write_to_invalid(uint32_t, uint32_t, uint32_t); 79 extern void read_from_invalid(uint32_t *, uint32_t *, uint32_t *); 80 extern void preemptible_save_uspace(uintptr_t, istate_t *); 81 extern void preemptible_restore_uspace(uintptr_t, istate_t *); 82 82 extern void flush_windows(void); 83 83 -
kernel/arch/sparc32/include/arch/asm.h
rf6f22cdb r32e8cd1 43 43 NO_TRACE static inline void asm_delay_loop(uint32_t usec) 44 44 { 45 // FIXME TODO 45 46 } 46 47 47 48 NO_TRACE static inline __attribute__((noreturn)) void cpu_halt(void) 48 49 { 49 /* On real hardware this should stop processing further 50 instructions on the CPU (and possibly putting it into 51 low-power mode) without any possibility of exitting 52 this function. */ 53 50 // FIXME TODO 54 51 while (true); 55 52 } … … 57 54 NO_TRACE static inline void cpu_sleep(void) 58 55 { 59 /* On real hardware this should put the CPU into low-power 60 mode. However, the CPU is free to continue processing 61 futher instructions any time. The CPU also wakes up 62 upon an interrupt. */ 56 // FIXME TODO 63 57 } 64 58 … … 68 62 } 69 63 70 /** Word to port71 *72 * Output word to port73 *74 * @param port Port to write to75 * @param val Value to write76 *77 */78 64 NO_TRACE static inline void pio_write_16(ioport16_t *port, uint16_t val) 79 65 { … … 81 67 } 82 68 83 /** Double word to port84 *85 * Output double word to port86 *87 * @param port Port to write to88 * @param val Value to write89 *90 */91 69 NO_TRACE static inline void pio_write_32(ioport32_t *port, uint32_t val) 92 70 { … … 94 72 } 95 73 96 /** Byte from port97 *98 * Get byte from port99 *100 * @param port Port to read from101 * @return Value read102 *103 */104 74 NO_TRACE static inline uint8_t pio_read_8(ioport8_t *port) 105 75 { … … 107 77 } 108 78 109 /** Word from port110 *111 * Get word from port112 *113 * @param port Port to read from114 * @return Value read115 *116 */117 79 NO_TRACE static inline uint16_t pio_read_16(ioport16_t *port) 118 80 { … … 120 82 } 121 83 122 /** Double word from port123 *124 * Get double word from port125 *126 * @param port Port to read from127 * @return Value read128 *129 */130 84 NO_TRACE static inline uint32_t pio_read_32(ioport32_t *port) 131 85 { … … 133 87 } 134 88 135 NO_TRACE static inline uint32_t psr_read( )89 NO_TRACE static inline uint32_t psr_read(void) 136 90 { 137 91 uint32_t v; 138 92 139 93 asm volatile ( 140 94 "mov %%psr, %[v]\n" 141 95 : [v] "=r" (v) 142 96 ); 143 144 return v; 145 } 146 147 NO_TRACE static inline uint32_t wim_read( )97 98 return v; 99 } 100 101 NO_TRACE static inline uint32_t wim_read(void) 148 102 { 149 103 uint32_t v; 150 104 151 105 asm volatile ( 152 106 "mov %%wim, %[v]\n" 153 107 : [v] "=r" (v) 154 108 ); 155 156 return v; 157 } 158 159 NO_TRACE static inline uint32_t asi_u32_read( int asi, uintptr_t va)109 110 return v; 111 } 112 113 NO_TRACE static inline uint32_t asi_u32_read(unsigned int asi, uintptr_t va) 160 114 { 161 115 uint32_t v; 162 116 163 117 asm volatile ( 164 118 "lda [%[va]] %[asi], %[v]\n" 165 119 : [v] "=r" (v) 166 120 : [va] "r" (va), 167 [asi] "i" ((unsigned int) asi) 168 ); 169 170 return v; 171 } 172 173 NO_TRACE static inline void asi_u32_write(int asi, uintptr_t va, uint32_t v) 121 [asi] "i" (asi) 122 ); 123 124 return v; 125 } 126 127 NO_TRACE static inline void asi_u32_write(unsigned int asi, uintptr_t va, 128 uint32_t v) 174 129 { 175 130 asm volatile ( … … 177 132 :: [v] "r" (v), 178 133 [va] "r" (va), 179 [asi] "i" ( (unsigned int)asi)134 [asi] "i" (asi) 180 135 : "memory" 181 136 ); … … 200 155 NO_TRACE static inline ipl_t interrupts_enable(void) 201 156 { 157 psr_reg_t psr; 158 psr.value = psr_read(); 159 202 160 ipl_t pil; 203 204 psr_reg_t psr;205 psr.value = psr_read();206 161 pil = psr.pil; 207 psr.pil = 0xf; 162 163 psr.pil = 0x0f; 208 164 psr_write(psr.value); 209 165 210 166 return pil; 211 167 } … … 213 169 NO_TRACE static inline ipl_t interrupts_disable(void) 214 170 { 171 psr_reg_t psr; 172 psr.value = psr_read(); 173 215 174 ipl_t pil; 216 217 psr_reg_t psr;218 psr.value = psr_read();219 175 pil = psr.pil; 176 220 177 psr.pil = 0; 221 178 psr_write(psr.value); 222 179 223 180 return pil; 224 181 } -
kernel/arch/sparc32/include/arch/atomic.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup abs32le29 /** @addtogroup sparc32 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_ abs32le_ATOMIC_H_36 #define KERN_ abs32le_ATOMIC_H_35 #ifndef KERN_sparc32_ATOMIC_H_ 36 #define KERN_sparc32_ATOMIC_H_ 37 37 38 38 #include <typedefs.h> … … 47 47 REQUIRES(val->count < ATOMIC_COUNT_MAX) 48 48 { 49 /* On real hardware the increment has to be done 50 as an atomic action. */ 51 49 // FIXME TODO 52 50 val->count++; 53 51 } … … 58 56 REQUIRES(val->count > ATOMIC_COUNT_MIN) 59 57 { 60 /* On real hardware the decrement has to be done 61 as an atomic action. */ 62 58 // FIXME TODO 63 59 val->count--; 64 60 } … … 69 65 REQUIRES(val->count < ATOMIC_COUNT_MAX) 70 66 { 71 /* On real hardware both the storing of the previous 72 value and the increment have to be done as a single 73 atomic action. */ 67 // FIXME TODO 74 68 75 69 atomic_count_t prev = val->count; … … 84 78 REQUIRES(val->count > ATOMIC_COUNT_MIN) 85 79 { 86 /* On real hardware both the storing of the previous 87 value and the decrement have to be done as a single 88 atomic action. */ 80 // FIXME TODO 89 81 90 82 atomic_count_t prev = val->count; … … 101 93 REQUIRES_EXTENT_MUTABLE(val) 102 94 { 103 /* On real hardware the retrieving of the original 104 value and storing 1 have to be done as a single 105 atomic action. */ 95 // FIXME TODO 106 96 107 97 atomic_count_t prev = val->count; … … 114 104 REQUIRES_EXTENT_MUTABLE(val) 115 105 { 106 // FIXME TODO 107 116 108 do { 117 109 while (val->count); -
kernel/arch/sparc32/include/arch/barrier.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup abs32le29 /** @addtogroup sparc32 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_ abs32le_BARRIER_H_36 #define KERN_ abs32le_BARRIER_H_35 #ifndef KERN_sparc32_BARRIER_H_ 36 #define KERN_sparc32_BARRIER_H_ 37 37 38 /* 39 * Provisions are made to prevent compiler from reordering instructions itself. 40 */ 38 // FIXME TODO 41 39 42 40 #define CS_ENTER_BARRIER() -
kernel/arch/sparc32/include/arch/context.h
rf6f22cdb r32e8cd1 56 56 */ 57 57 typedef struct { 58 uintptr_t sp; /* %o6 */59 uintptr_t pc; /* %o7 */58 uintptr_t sp; /* %o6 */ 59 uintptr_t pc; /* %o7 */ 60 60 uint32_t i0; 61 61 uint32_t i1; … … 64 64 uint32_t i4; 65 65 uint32_t i5; 66 uintptr_t fp; /* %i6 */66 uintptr_t fp; /* %i6 */ 67 67 uintptr_t i7; 68 68 uint32_t l0; -
kernel/arch/sparc32/include/arch/context_offset.h
rf6f22cdb r32e8cd1 31 31 #define KERN_sparc32_CONTEXT_OFFSET_H_ 32 32 33 #define OFFSET_SP 034 #define OFFSET_PC 435 #define OFFSET_I0 836 #define OFFSET_I1 1237 #define OFFSET_I2 1638 #define OFFSET_I3 2039 #define OFFSET_I4 2440 #define OFFSET_I5 2841 #define OFFSET_FP 3242 #define OFFSET_I7 3643 #define OFFSET_L0 4044 #define OFFSET_L1 4445 #define OFFSET_L2 4846 #define OFFSET_L3 5247 #define OFFSET_L4 5648 #define OFFSET_L5 6049 #define OFFSET_L6 6450 #define OFFSET_L7 6833 #define OFFSET_SP 0 34 #define OFFSET_PC 4 35 #define OFFSET_I0 8 36 #define OFFSET_I1 12 37 #define OFFSET_I2 16 38 #define OFFSET_I3 20 39 #define OFFSET_I4 24 40 #define OFFSET_I5 28 41 #define OFFSET_FP 32 42 #define OFFSET_I7 36 43 #define OFFSET_L0 40 44 #define OFFSET_L1 44 45 #define OFFSET_L2 48 46 #define OFFSET_L3 52 47 #define OFFSET_L4 56 48 #define OFFSET_L5 60 49 #define OFFSET_L6 64 50 #define OFFSET_L7 68 51 51 52 52 #ifndef KERNEL 53 # define OFFSET_TP 72 53 54 #define OFFSET_TP 72 55 54 56 #endif 57 55 58 #ifdef __ASM__ 56 59 -
kernel/arch/sparc32/include/arch/cpu.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup abs32le29 /** @addtogroup sparc32 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_ abs32le_CPU_H_36 #define KERN_ abs32le_CPU_H_35 #ifndef KERN_sparc32_CPU_H_ 36 #define KERN_sparc32_CPU_H_ 37 37 38 /*39 * On real hardware this structure stores40 * information specific to the current41 * CPU model.42 */43 38 typedef struct { 44 39 } cpu_arch_t; -
kernel/arch/sparc32/include/arch/cycle.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup abs32le29 /** @addtogroup sparc32 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_ abs32le_CYCLE_H_36 #define KERN_ abs32le_CYCLE_H_35 #ifndef KERN_sparc32_CYCLE_H_ 36 #define KERN_sparc32_CYCLE_H_ 37 37 38 38 #include <trace.h> … … 40 40 NO_TRACE static inline uint64_t get_cycle(void) 41 41 { 42 // FIXME TODO 42 43 return 0; 43 44 } -
kernel/arch/sparc32/include/arch/exception.h
rf6f22cdb r32e8cd1 38 38 #define KERN_sparc32_EXCEPTION_H_ 39 39 40 #define TT_INSTRUCTION_ACCESS_EXCEPTION 0x0141 #define TT_I NSTRUCTION_ACCESS_MMU_MISS 0x3c42 #define TT_ INSTRUCTION_ACCESS_ERROR 0x2143 #define TT_ ILLEGAL_INSTRUCTION 0x0244 #define TT_ PRIVILEGED_INSTRUCTION 0x0345 #define TT_ FP_DISABLED 0x0846 #define TT_ DIVISION_BY_ZERO 0x2a47 #define TT_DATA_ACCESS_E XCEPTION 0x0948 #define TT_D ATA_ACCESS_MMU_MISS 0x2c49 #define TT_DATA_ACCESS_ ERROR 0x2950 #define TT_ MEM_ADDRESS_NOT_ALIGNED 0x0740 #define TT_INSTRUCTION_ACCESS_EXCEPTION 0x01 41 #define TT_ILLEGAL_INSTRUCTION 0x02 42 #define TT_PRIVILEGED_INSTRUCTION 0x03 43 #define TT_MEM_ADDRESS_NOT_ALIGNED 0x07 44 #define TT_FP_DISABLED 0x08 45 #define TT_DATA_ACCESS_EXCEPTION 0x09 46 #define TT_INSTRUCTION_ACCESS_ERROR 0x21 47 #define TT_DATA_ACCESS_ERROR 0x29 48 #define TT_DIVISION_BY_ZERO 0x2a 49 #define TT_DATA_ACCESS_MMU_MISS 0x2c 50 #define TT_INSTRUCTION_ACCESS_MMU_MISS 0x3c 51 51 52 52 #ifndef __ASM__ 53 53 54 /*#include <arch/interrupt.h>*/ 54 extern void instruction_access_exception(int, istate_t *); 55 extern void instruction_access_error(int, istate_t *); 56 extern void illegal_instruction(int, istate_t *); 57 extern void privileged_instruction(int, istate_t *); 58 extern void fp_disabled(int, istate_t *); 59 extern void fp_exception(int, istate_t *); 60 extern void tag_overflow(int, istate_t *); 61 extern void division_by_zero(int, istate_t *); 62 extern void data_access_exception(int, istate_t *); 63 extern void data_access_error(int, istate_t *); 64 extern void data_access_mmu_miss(int, istate_t *); 65 extern void data_store_error(int, istate_t *); 66 extern void mem_address_not_aligned(int, istate_t *); 55 67 56 extern void instruction_access_exception(int n, istate_t *istate); 57 extern void instruction_access_error(int n, istate_t *istate); 58 extern void illegal_instruction(int n, istate_t *istate); 59 extern void privileged_instruction(int n, istate_t *istate); 60 extern void fp_disabled(int n, istate_t *istate); 61 extern void fp_exception(int n, istate_t *istate); 62 extern void tag_overflow(int n, istate_t *istate); 63 extern void division_by_zero(int n, istate_t *istate); 64 extern void data_access_exception(int n, istate_t *istate); 65 extern void data_access_error(int n, istate_t *istate); 66 extern void data_access_mmu_miss(int n, istate_t *istate); 67 extern void data_store_error(int n, istate_t *istate); 68 extern void mem_address_not_aligned(int n, istate_t *istate); 69 extern sysarg_t syscall(sysarg_t a1, sysarg_t a2, sysarg_t a3, sysarg_t a4, sysarg_t a5, sysarg_t a6, sysarg_t id); 70 extern void irq_exception(unsigned int nr, istate_t *istate); 68 extern sysarg_t syscall(sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 69 sysarg_t, sysarg_t); 70 extern void irq_exception(unsigned int, istate_t *); 71 71 72 72 #endif /* !__ASM__ */ -
kernel/arch/sparc32/include/arch/faddr.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup abs32le29 /** @addtogroup sparc32 30 30 * @{ 31 31 */ -
kernel/arch/sparc32/include/arch/fpu_context.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup abs32le29 /** @addtogroup sparc32 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_ abs32le_FPU_CONTEXT_H_36 #define KERN_ abs32le_FPU_CONTEXT_H_35 #ifndef KERN_sparc32_FPU_CONTEXT_H_ 36 #define KERN_sparc32_FPU_CONTEXT_H_ 37 37 38 38 #include <typedefs.h> … … 40 40 #define FPU_CONTEXT_ALIGN 16 41 41 42 /*43 * On real hardware this stores the FPU registers44 * which are part of the CPU context.45 */46 42 typedef struct { 47 43 } fpu_context_t; -
kernel/arch/sparc32/include/arch/interrupt.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup abs32leinterrupt29 /** @addtogroup sparc32interrupt 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_ abs32le_INTERRUPT_H_36 #define KERN_ abs32le_INTERRUPT_H_35 #ifndef KERN_sparc32_INTERRUPT_H_ 36 #define KERN_sparc32_INTERRUPT_H_ 37 37 38 38 #include <typedefs.h> -
kernel/arch/sparc32/include/arch/istate.h
rf6f22cdb r32e8cd1 49 49 #endif /* KERNEL */ 50 50 51 /*52 * On real hardware this stores the registers which53 * need to be preserved during interupts.54 */55 51 typedef struct istate { 56 52 uintptr_t pstate; … … 63 59 REQUIRES_EXTENT_MUTABLE(istate) 64 60 { 65 /* On real hardware this checks whether the interrupted66 context originated from user space. */67 68 61 return !(istate->pc & UINT32_C(0x80000000)); 69 62 } … … 73 66 WRITES(&istate->ip) 74 67 { 75 /* On real hardware this sets the instruction pointer. */76 77 68 istate->pc = retaddr; 78 69 } … … 81 72 REQUIRES_EXTENT_MUTABLE(istate) 82 73 { 83 /* On real hardware this returns the instruction pointer. */84 85 74 return istate->pc; 86 75 } … … 89 78 REQUIRES_EXTENT_MUTABLE(istate) 90 79 { 91 /* On real hardware this returns the frame pointer. */ 92 93 return 0;//istate->fp; 80 return 0; 94 81 } 95 82 -
kernel/arch/sparc32/include/arch/machine/leon3/leon3.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup sparc32leon3 LEON330 * @brief LEON3 System-on-chip.31 * @ingroup arm3229 /** @addtogroup sparc32leon3 30 * @brief LEON3 System-on-chip. 31 * @ingroup sparc32 32 32 * @{ 33 33 */ 34 34 35 #ifndef KERN_sparc32_ leon3_H_36 #define KERN_sparc32_ leon3_H_35 #ifndef KERN_sparc32_LEON3_H_ 36 #define KERN_sparc32_LEON3_H_ 37 37 38 38 #include <arch/machine_func.h> 39 39 40 #define LEON3_SDRAM_START 0x40000000 41 #define LEON3_IRQ_COUNT 15 42 40 43 extern struct sparc_machine_ops leon3_machine_ops; 41 42 #define LEON3_SDRAM_START 0x4000000043 #define LEON3_IRQ_COUNT 1544 44 45 45 #endif -
kernel/arch/sparc32/include/arch/machine_func.h
rf6f22cdb r32e8cd1 32 32 */ 33 33 /** @file 34 * @brief Declarations of machine specific functions.34 * @brief Declarations of machine specific functions. 35 35 * 36 * These functions enable to differentiate more kinds of ARMemulators37 * or CPUs. It's the same concept as "arch" functions on the architecture38 * level.36 * These functions enable to differentiate more kinds of SPARC emulators 37 * or CPUs. It is the same concept as "arch" functions on the architecture 38 * level. 39 39 */ 40 40 … … 66 66 extern void machine_ops_init(void); 67 67 68 /** Map sHW devices to the kernel address space using #hw_map. */68 /** Map HW devices to the kernel address space using #hw_map. */ 69 69 extern void machine_init(bootinfo_t *); 70 70 71 72 /** Starts timer. */ 71 /** Start timer. */ 73 72 extern void machine_timer_irq_start(void); 74 73 75 76 /** Halts CPU. */ 74 /** Halt CPU. */ 77 75 extern void machine_cpu_halt(void); 78 76 79 77 /** Get extents of available memory. 80 78 * 81 * @param start Place to store memory start address.82 * @param size Place to store memory size.79 * @param start Place to store memory start address. 80 * @param size Place to store memory size. 83 81 */ 84 82 extern void machine_get_memory_extents(uintptr_t *start, size_t *size); … … 91 89 extern void machine_irq_exception(unsigned int exc_no, istate_t *istate); 92 90 93 94 /* 95 * Machine specific frame initialization 96 */ 91 /** Machine specific frame initialization */ 97 92 extern void machine_frame_init(void); 98 93 99 /* 100 * configure the serial line output device. 101 */ 94 /* Configure the serial line output device. */ 102 95 extern void machine_output_init(void); 103 96 104 /* 105 * configure the serial line input device. 106 */ 97 /** Configure the serial line input device. */ 107 98 extern void machine_input_init(void); 108 99 109 100 extern size_t machine_get_irq_count(void); 110 101 111 extern const char * machine_get_platform_name(void);102 extern const char *machine_get_platform_name(void); 112 103 113 104 #endif -
kernel/arch/sparc32/include/arch/mm/as.h
rf6f22cdb r32e8cd1 55 55 #define as_invalidate_translation_cache(as, page, cnt) 56 56 57 uintptr_t as_context_table;57 extern uintptr_t as_context_table; 58 58 59 59 extern void as_arch_init(void); -
kernel/arch/sparc32/include/arch/mm/frame.h
rf6f22cdb r32e8cd1 33 33 */ 34 34 35 #ifndef KERN_ abs32le_FRAME_H_36 #define KERN_ abs32le_FRAME_H_35 #ifndef KERN_sparc32_FRAME_H_ 36 #define KERN_sparc32_FRAME_H_ 37 37 38 38 #define FRAME_WIDTH 12 /* 4K */ … … 41 41 #include <typedefs.h> 42 42 43 #define PHYSMEM_START_ADDR0x4000000043 #define PHYSMEM_START_ADDR 0x40000000 44 44 45 #define BOOT_PT_ADDRESS0x4000800046 #define BOOT_PT_START_FRAME(BOOT_PT_ADDRESS >> FRAME_WIDTH)47 #define BOOT_PT_SIZE_FRAMES145 #define BOOT_PT_ADDRESS 0x40008000 46 #define BOOT_PT_START_FRAME (BOOT_PT_ADDRESS >> FRAME_WIDTH) 47 #define BOOT_PT_SIZE_FRAMES 1 48 48 49 49 extern void frame_low_arch_init(void); -
kernel/arch/sparc32/include/arch/mm/km.h
rf6f22cdb r32e8cd1 38 38 #include <typedefs.h> 39 39 40 #define KM_SPARC32_IDENTITY_STARTUINT32_C(0x80000000)41 #define KM_SPARC32_IDENTITY_SIZEUINT32_C(0x70000000)40 #define KM_SPARC32_IDENTITY_START UINT32_C(0x80000000) 41 #define KM_SPARC32_IDENTITY_SIZE UINT32_C(0x70000000) 42 42 43 #define KM_SPARC32_NON_IDENTITY_STARTUINT32_C(0xf0000000)44 #define KM_SPARC32_NON_IDENTITY_SIZEUINT32_C(0xff00000)43 #define KM_SPARC32_NON_IDENTITY_START UINT32_C(0xf0000000) 44 #define KM_SPARC32_NON_IDENTITY_SIZE UINT32_C(0xff00000) 45 45 46 46 extern void km_identity_arch_init(void); -
kernel/arch/sparc32/include/arch/mm/page.h
rf6f22cdb r32e8cd1 48 48 #define PA2KA(x) (((uintptr_t) (x)) + UINT32_C(0x40000000)) 49 49 50 #define PTE_ET_INVALID051 #define PTE_ET_DESCRIPTOR152 #define PTE_ET_ENTRY253 54 #define PTE_ACC_USER_RO_KERNEL_RO055 #define PTE_ACC_USER_RW_KERNEL_RW156 #define PTE_ACC_USER_RX_KERNEL_RX257 #define PTE_ACC_USER_RWX_KERNEL_RWX358 #define PTE_ACC_USER_XO_KERNEL_XO459 #define PTE_ACC_USER_RO_KERNEL_RW560 #define PTE_ACC_USER_NO_KERNEL_RX661 #define PTE_ACC_USER_NO_KERNEL_RWX750 #define PTE_ET_INVALID 0 51 #define PTE_ET_DESCRIPTOR 1 52 #define PTE_ET_ENTRY 2 53 54 #define PTE_ACC_USER_RO_KERNEL_RO 0 55 #define PTE_ACC_USER_RW_KERNEL_RW 1 56 #define PTE_ACC_USER_RX_KERNEL_RX 2 57 #define PTE_ACC_USER_RWX_KERNEL_RWX 3 58 #define PTE_ACC_USER_XO_KERNEL_XO 4 59 #define PTE_ACC_USER_RO_KERNEL_RW 5 60 #define PTE_ACC_USER_NO_KERNEL_RX 6 61 #define PTE_ACC_USER_NO_KERNEL_RWX 7 62 62 63 63 /* Number of entries in each level. */ … … 143 143 /** Page Table Descriptor. */ 144 144 typedef struct { 145 unsigned int table_pointer : 30;146 unsigned int et : 2;145 unsigned int table_pointer : 30; 146 unsigned int et : 2; 147 147 } __attribute__((packed)) ptd_t; 148 148 149 149 /** Page Table Entry. */ 150 150 typedef struct { 151 unsigned int frame_address : 24;152 unsigned int cacheable : 1;153 unsigned int modified : 1;154 unsigned int referenced : 1;155 unsigned int acc : 3;156 unsigned int et : 2;151 unsigned int frame_address : 24; 152 unsigned int cacheable : 1; 153 unsigned int modified : 1; 154 unsigned int referenced : 1; 155 unsigned int acc : 3; 156 unsigned int et : 2; 157 157 } __attribute__((packed)) pte_t; 158 158 … … 163 163 NO_TRACE static inline bool pte_is_writeable(pte_t *pt) 164 164 { 165 return ( 166 pt->acc == PTE_ACC_USER_RW_KERNEL_RW || 167 pt->acc == PTE_ACC_USER_RWX_KERNEL_RWX || 168 pt->acc == PTE_ACC_USER_RO_KERNEL_RW || 169 pt->acc == PTE_ACC_USER_NO_KERNEL_RWX 170 ); 165 return ((pt->acc == PTE_ACC_USER_RW_KERNEL_RW) || 166 (pt->acc == PTE_ACC_USER_RWX_KERNEL_RWX) || 167 (pt->acc == PTE_ACC_USER_RO_KERNEL_RW) || 168 (pt->acc == PTE_ACC_USER_NO_KERNEL_RWX)); 171 169 } 172 170 173 171 NO_TRACE static inline bool pte_is_executable(pte_t *pt) 174 172 { 175 return ( 176 pt->acc != PTE_ACC_USER_RO_KERNEL_RO && 177 pt->acc != PTE_ACC_USER_RW_KERNEL_RW && 178 pt->acc != PTE_ACC_USER_RO_KERNEL_RW 179 ); 173 return ((pt->acc != PTE_ACC_USER_RO_KERNEL_RO) && 174 (pt->acc != PTE_ACC_USER_RW_KERNEL_RW) && 175 (pt->acc != PTE_ACC_USER_RO_KERNEL_RW)); 180 176 } 181 177 … … 184 180 { 185 181 pte_t *p = &pt[i]; 186 187 bool notpresent = p->et == 0; 188 189 return ( 190 (p->cacheable << PAGE_CACHEABLE_SHIFT) | 191 (notpresent << PAGE_PRESENT_SHIFT) | 192 ((p->acc != PTE_ACC_USER_NO_KERNEL_RX && p->acc != PTE_ACC_USER_NO_KERNEL_RWX) << PAGE_USER_SHIFT) | 193 (1 << PAGE_READ_SHIFT) | 194 (( 195 p->acc == PTE_ACC_USER_RW_KERNEL_RW || 196 p->acc == PTE_ACC_USER_RWX_KERNEL_RWX || 197 p->acc == PTE_ACC_USER_RO_KERNEL_RW || 198 p->acc == PTE_ACC_USER_NO_KERNEL_RWX 199 ) << PAGE_WRITE_SHIFT) | 200 (( 201 p->acc != PTE_ACC_USER_RO_KERNEL_RO && 202 p->acc != PTE_ACC_USER_RW_KERNEL_RW && 203 p->acc != PTE_ACC_USER_RO_KERNEL_RW 204 ) << PAGE_EXEC_SHIFT) | 205 (1 << PAGE_GLOBAL_SHIFT) 206 ); 182 183 bool notpresent = (p->et == 0); 184 185 return ((p->cacheable << PAGE_CACHEABLE_SHIFT) | 186 (notpresent << PAGE_PRESENT_SHIFT) | 187 (((p->acc != PTE_ACC_USER_NO_KERNEL_RX) && 188 (p->acc != PTE_ACC_USER_NO_KERNEL_RWX)) << PAGE_USER_SHIFT) | 189 (1 << PAGE_READ_SHIFT) | 190 (((p->acc == PTE_ACC_USER_RW_KERNEL_RW) || 191 (p->acc == PTE_ACC_USER_RWX_KERNEL_RWX) || 192 (p->acc == PTE_ACC_USER_RO_KERNEL_RW) || 193 (p->acc == PTE_ACC_USER_NO_KERNEL_RWX)) << PAGE_WRITE_SHIFT) | 194 (((p->acc != PTE_ACC_USER_RO_KERNEL_RO) && 195 (p->acc != PTE_ACC_USER_RW_KERNEL_RW) && 196 (p->acc != PTE_ACC_USER_RO_KERNEL_RW)) << PAGE_EXEC_SHIFT) | 197 (1 << PAGE_GLOBAL_SHIFT)); 207 198 } 208 199 … … 213 204 pte_t *p = &pt[i]; 214 205 215 p->et = (flags & PAGE_NOT_PRESENT) 216 ? PTE_ET_INVALID 217 : PTE_ET_DESCRIPTOR; 206 p->et = (flags & PAGE_NOT_PRESENT) ? 207 PTE_ET_INVALID : PTE_ET_DESCRIPTOR; 218 208 } 219 209 … … 223 213 { 224 214 pte_t *p = &pt[i]; 225 215 226 216 p->et = PTE_ET_ENTRY; 227 217 p->acc = PTE_ACC_USER_NO_KERNEL_RWX; … … 240 230 } 241 231 } 242 232 243 233 if (flags & PAGE_NOT_PRESENT) 244 234 p->et = PTE_ET_INVALID; 245 235 246 236 p->cacheable = (flags & PAGE_CACHEABLE) != 0; 247 237 } … … 252 242 { 253 243 pte_t *p = &pt[i]; 254 244 255 245 p->et = PTE_ET_DESCRIPTOR; 256 246 } … … 261 251 { 262 252 pte_t *p = &pt[i]; 263 253 264 254 p->et = PTE_ET_ENTRY; 265 255 } -
kernel/arch/sparc32/include/arch/mm/page_fault.h
rf6f22cdb r32e8cd1 50 50 typedef struct { 51 51 unsigned int : 14; 52 unsigned int ebe : 8;53 unsigned int l : 2;54 unsigned int at : 3;55 unsigned int ft : 3;56 unsigned int fav : 1;57 unsigned int ow : 1;52 unsigned int ebe : 8; 53 unsigned int l : 2; 54 unsigned int at : 3; 55 unsigned int ft : 3; 56 unsigned int fav : 1; 57 unsigned int ow : 1; 58 58 } __attribute__((packed)) mmu_fault_status_t; 59 59 -
kernel/arch/sparc32/include/arch/mm/tlb.h
rf6f22cdb r32e8cd1 36 36 #define KERN_sparc32_TLB_H_ 37 37 38 #define MMU_CONTROL0x00039 #define MMU_CONTEXT_TABLE0x10040 #define MMU_CONTEXT0x20041 #define MMU_FAULT_STATUS0x30042 #define MMU_FAULT_ADDRESS0x40038 #define MMU_CONTROL 0x000 39 #define MMU_CONTEXT_TABLE 0x100 40 #define MMU_CONTEXT 0x200 41 #define MMU_FAULT_STATUS 0x300 42 #define MMU_FAULT_ADDRESS 0x400 43 43 44 44 #endif -
kernel/arch/sparc32/include/arch/proc/task.h
rf6f22cdb r32e8cd1 27 27 */ 28 28 29 /** @addtogroup abs32leproc29 /** @addtogroup sparc32proc 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_ abs32le_TASK_H_36 #define KERN_ abs32le_TASK_H_35 #ifndef KERN_sparc32_TASK_H_ 36 #define KERN_sparc32_TASK_H_ 37 37 38 38 #include <typedefs.h> 39 39 #include <adt/bitmap.h> 40 40 41 /*42 * On real hardware this structure stores task information43 * specific to the architecture.44 */45 41 typedef struct { 46 42 } task_arch_t; -
kernel/arch/sparc32/include/arch/register.h
rf6f22cdb r32e8cd1 42 42 uint32_t value; 43 43 struct { 44 unsigned int impl : 4;45 unsigned int ver : 4;46 unsigned int icc : 4;44 unsigned int impl : 4; 45 unsigned int ver : 4; 46 unsigned int icc : 4; 47 47 unsigned int : 6; 48 unsigned int ec : 1;49 unsigned int ef : 1;50 unsigned int pil : 4;51 unsigned int s : 1;52 unsigned int ps : 1;53 unsigned int et : 1;54 unsigned int cwp : 5;55 } __attribute__ ((packed));48 unsigned int ec : 1; 49 unsigned int ef : 1; 50 unsigned int pil : 4; 51 unsigned int s : 1; 52 unsigned int ps : 1; 53 unsigned int et : 1; 54 unsigned int cwp : 5; 55 } __attribute__((packed)); 56 56 } psr_reg_t; 57 57 -
kernel/arch/sparc32/include/arch/regwin.h
rf6f22cdb r32e8cd1 42 42 #include <align.h> 43 43 44 #define UWB_ALIGNMENT 1024 44 /* Window Save Area offsets. */ 45 #define L0_OFFSET 0 46 #define L1_OFFSET 4 47 #define L2_OFFSET 8 48 #define L3_OFFSET 12 49 #define L4_OFFSET 16 50 #define L5_OFFSET 20 51 #define L6_OFFSET 24 52 #define L7_OFFSET 28 53 #define I0_OFFSET 32 54 #define I1_OFFSET 36 55 #define I2_OFFSET 40 56 #define I3_OFFSET 44 57 #define I4_OFFSET 48 58 #define I5_OFFSET 52 59 #define I6_OFFSET 56 60 #define I7_OFFSET 60 45 61 46 /* Window Save Area offsets. */ 47 #define L0_OFFSET 0 48 #define L1_OFFSET 4 49 #define L2_OFFSET 8 50 #define L3_OFFSET 12 51 #define L4_OFFSET 16 52 #define L5_OFFSET 20 53 #define L6_OFFSET 24 54 #define L7_OFFSET 28 55 #define I0_OFFSET 32 56 #define I1_OFFSET 36 57 #define I2_OFFSET 40 58 #define I3_OFFSET 44 59 #define I4_OFFSET 48 60 #define I5_OFFSET 52 61 #define I6_OFFSET 56 62 #define I7_OFFSET 60 63 64 /* Uspace Window Buffer constants. */ 65 #define UWB_SIZE ((NWINDOWS - 1) * STACK_WINDOW_SAVE_AREA_SIZE) 66 #define UWB_ALIGNMENT 1024 67 #define UWB_ASIZE ALIGN_UP(UWB_SIZE, UWB_ALIGNMENT) 62 /* User space Window Buffer constants. */ 63 #define UWB_SIZE ((NWINDOWS - 1) * STACK_WINDOW_SAVE_AREA_SIZE) 64 #define UWB_ALIGNMENT 1024 65 #define UWB_ASIZE ALIGN_UP(UWB_SIZE, UWB_ALIGNMENT) 68 66 69 67 #endif -
kernel/arch/sparc32/include/arch/stack.h
rf6f22cdb r32e8cd1 39 39 #include <config.h> 40 40 41 #define MEM_STACK_SIZE STACK_SIZE41 #define MEM_STACK_SIZE STACK_SIZE 42 42 43 #define STACK_ITEM_SIZE 4 44 45 /** According to SPARC Compliance Definition, every stack frame is 16-byte aligned. */ 46 #define STACK_ALIGNMENT 8 43 #define STACK_ITEM_SIZE 4 44 #define STACK_ALIGNMENT 8 47 45 48 46 /** 49 47 * 16-extended-word save area for %i[0-7] and %l[0-7] registers. 50 48 */ 51 #define STACK_WINDOW_SAVE_AREA_SIZE (16 * STACK_ITEM_SIZE)49 #define STACK_WINDOW_SAVE_AREA_SIZE (16 * STACK_ITEM_SIZE) 52 50 53 51 /** 54 52 * Six extended words for first six arguments. 55 53 */ 56 #define STACK_ARG_SAVE_AREA_SIZE (6 * STACK_ITEM_SIZE)54 #define STACK_ARG_SAVE_AREA_SIZE (6 * STACK_ITEM_SIZE) 57 55 58 /* 56 /** 59 57 * Offsets of arguments on stack. 60 58 */ 61 #define STACK_ARG0 062 #define STACK_ARG1 463 #define STACK_ARG2 864 #define STACK_ARG3 1265 #define STACK_ARG4 1666 #define STACK_ARG5 2067 #define STACK_ARG6 2459 #define STACK_ARG0 0 60 #define STACK_ARG1 4 61 #define STACK_ARG2 8 62 #define STACK_ARG3 12 63 #define STACK_ARG4 16 64 #define STACK_ARG5 20 65 #define STACK_ARG6 24 68 66 69 67 #endif -
kernel/arch/sparc32/include/arch/trap.h
rf6f22cdb r32e8cd1 36 36 #define KERN_sparc32_TRAP_H_ 37 37 38 #define TRAP_ENTRY_SIZE1639 #define TRAP_TABLE_COUNT25640 #define TRAP_TABLE_SIZE(TRAP_ENTRY_SIZE * TRAP_TABLE_COUNT)38 #define TRAP_ENTRY_SIZE 16 39 #define TRAP_TABLE_COUNT 256 40 #define TRAP_TABLE_SIZE (TRAP_ENTRY_SIZE * TRAP_TABLE_COUNT) 41 41 42 42 #ifndef __ASM__ 43 43 44 extern void *trap_table; 45 44 46 #endif 45 47 -
kernel/arch/sparc32/include/arch/types.h
rf6f22cdb r32e8cd1 33 33 */ 34 34 35 #ifndef KERN_sparc32 le_TYPES_H_36 #define KERN_sparc32 le_TYPES_H_35 #ifndef KERN_sparc32_TYPES_H_ 36 #define KERN_sparc32_TYPES_H_ 37 37 38 38 #define ATOMIC_COUNT_MIN UINT32_MIN
Note:
See TracChangeset
for help on using the changeset viewer.
