Changeset b8230b9 in mainline for kernel/arch/ppc32
- Timestamp:
- 2010-05-22T22:20:37Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d354d57
- Parents:
- 3d6beaa
- Location:
- kernel/arch/ppc32
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/include/elf.h
r3d6beaa rb8230b9 27 27 */ 28 28 29 /** @addtogroup ppc32 29 /** @addtogroup ppc32 30 30 * @{ 31 31 */ … … 36 36 #define KERN_ppc32_ELF_H_ 37 37 38 #define ELF_MACHINEEM_PPC39 #define ELF_DATA_ENCODING 40 #define ELF_CLASS 38 #define ELF_MACHINE EM_PPC 39 #define ELF_DATA_ENCODING ELFDATA2MSB 40 #define ELF_CLASS ELFCLASS32 41 41 42 42 #endif -
kernel/arch/ppc32/include/faddr.h
r3d6beaa rb8230b9 27 27 */ 28 28 29 /** @addtogroup ppc32 29 /** @addtogroup ppc32 30 30 * @{ 31 31 */ … … 38 38 #include <typedefs.h> 39 39 40 #define FADDR(fptr) 40 #define FADDR(fptr) ((uintptr_t) (fptr)) 41 41 42 42 #endif -
kernel/arch/ppc32/include/fpu_context.h
r3d6beaa rb8230b9 27 27 */ 28 28 29 /** @addtogroup ppc32 29 /** @addtogroup ppc32 30 30 * @{ 31 31 */ … … 36 36 #define KERN_ppc32_FPU_CONTEXT_H_ 37 37 38 #ifndef KERN_ppc32_TYPES_H_ 39 #include <typedefs.h> 40 #endif 38 #include <typedefs.h> 41 39 42 40 typedef struct { -
kernel/arch/ppc32/include/interrupt.h
r3d6beaa rb8230b9 38 38 #include <arch/exception.h> 39 39 40 #define IVT_ITEMS 1641 #define IVT_FIRST 040 #define IVT_ITEMS 16 41 #define IVT_FIRST 0 42 42 43 #define VECTOR_DATA_STORAGE 244 #define VECTOR_INSTRUCTION_STORAGE 345 #define VECTOR_EXTERNAL 446 #define VECTOR_DECREMENTER 843 #define VECTOR_DATA_STORAGE 2 44 #define VECTOR_INSTRUCTION_STORAGE 3 45 #define VECTOR_EXTERNAL 4 46 #define VECTOR_DECREMENTER 8 47 47 48 48 extern void start_decrementer(void); 49 49 extern void interrupt_init(void); 50 extern void extint_handler(int n, istate_t *istate);50 extern void extint_handler(int, istate_t *); 51 51 52 52 #endif -
kernel/arch/ppc32/include/mm/as.h
r3d6beaa rb8230b9 27 27 */ 28 28 29 /** @addtogroup ppc32mm 29 /** @addtogroup ppc32mm 30 30 * @{ 31 31 */ … … 36 36 #define KERN_ppc32_AS_H_ 37 37 38 #define KERNEL_ADDRESS_SPACE_SHADOWED_ARCH 38 #define KERNEL_ADDRESS_SPACE_SHADOWED_ARCH 0 39 39 40 #define KERNEL_ADDRESS_SPACE_START_ARCH 41 #define KERNEL_ADDRESS_SPACE_END_ARCH 42 #define USER_ADDRESS_SPACE_START_ARCH 43 #define USER_ADDRESS_SPACE_END_ARCH 40 #define KERNEL_ADDRESS_SPACE_START_ARCH ((unsigned long) 0x80000000) 41 #define KERNEL_ADDRESS_SPACE_END_ARCH ((unsigned long) 0xffffffff) 42 #define USER_ADDRESS_SPACE_START_ARCH ((unsigned long) 0x00000000) 43 #define USER_ADDRESS_SPACE_END_ARCH ((unsigned long) 0x7fffffff) 44 44 45 #define USTACK_ADDRESS_ARCH 45 #define USTACK_ADDRESS_ARCH (0x7fffffff - (PAGE_SIZE - 1)) 46 46 47 47 typedef struct { … … 50 50 #include <genarch/mm/as_pt.h> 51 51 52 #define as_constructor_arch(as, flags) 53 #define as_destructor_arch(as) 54 #define as_create_arch(as, flags) 52 #define as_constructor_arch(as, flags) (as != as) 53 #define as_destructor_arch(as) (as != as) 54 #define as_create_arch(as, flags) (as != as) 55 55 #define as_deinstall_arch(as) 56 56 #define as_invalidate_translation_cache(as, page, cnt) -
kernel/arch/ppc32/include/mm/asid.h
r3d6beaa rb8230b9 27 27 */ 28 28 29 /** @addtogroup ppc32mm 29 /** @addtogroup ppc32mm 30 30 * @{ 31 31 */ … … 38 38 #include <typedefs.h> 39 39 40 #define ASID_MAX_ARCH 40 #define ASID_MAX_ARCH 4096 41 41 42 42 typedef uint32_t asid_t; -
kernel/arch/ppc32/include/mm/page.h
r3d6beaa rb8230b9 27 27 */ 28 28 29 /** @addtogroup ppc32mm 29 /** @addtogroup ppc32mm 30 30 * @{ 31 31 */ … … 38 38 #include <arch/mm/frame.h> 39 39 40 #define PAGE_WIDTH 41 #define PAGE_SIZE 40 #define PAGE_WIDTH FRAME_WIDTH 41 #define PAGE_SIZE FRAME_SIZE 42 42 43 43 #ifdef KERNEL 44 44 45 45 #ifndef __ASM__ 46 # define KA2PA(x)(((uintptr_t) (x)) - 0x80000000)47 # define PA2KA(x)(((uintptr_t) (x)) + 0x80000000)46 #define KA2PA(x) (((uintptr_t) (x)) - 0x80000000) 47 #define PA2KA(x) (((uintptr_t) (x)) + 0x80000000) 48 48 #else 49 # define KA2PA(x)((x) - 0x80000000)50 # define PA2KA(x)((x) + 0x80000000)49 #define KA2PA(x) ((x) - 0x80000000) 50 #define PA2KA(x) ((x) + 0x80000000) 51 51 #endif 52 52 … … 65 65 66 66 /* Number of entries in each level. */ 67 #define PTL0_ENTRIES_ARCH 68 #define PTL1_ENTRIES_ARCH 69 #define PTL2_ENTRIES_ARCH 70 #define PTL3_ENTRIES_ARCH 67 #define PTL0_ENTRIES_ARCH 1024 68 #define PTL1_ENTRIES_ARCH 0 69 #define PTL2_ENTRIES_ARCH 0 70 #define PTL3_ENTRIES_ARCH 1024 71 71 72 72 /* Page table sizes for each level. */ 73 #define PTL0_SIZE_ARCH 74 #define PTL1_SIZE_ARCH 75 #define PTL2_SIZE_ARCH 76 #define PTL3_SIZE_ARCH 73 #define PTL0_SIZE_ARCH ONE_FRAME 74 #define PTL1_SIZE_ARCH 0 75 #define PTL2_SIZE_ARCH 0 76 #define PTL3_SIZE_ARCH ONE_FRAME 77 77 78 78 /* Macros calculating indices into page tables on each level. */ 79 #define PTL0_INDEX_ARCH(vaddr) 80 #define PTL1_INDEX_ARCH(vaddr) 81 #define PTL2_INDEX_ARCH(vaddr) 82 #define PTL3_INDEX_ARCH(vaddr) 79 #define PTL0_INDEX_ARCH(vaddr) (((vaddr) >> 22) & 0x3ff) 80 #define PTL1_INDEX_ARCH(vaddr) 0 81 #define PTL2_INDEX_ARCH(vaddr) 0 82 #define PTL3_INDEX_ARCH(vaddr) (((vaddr) >> 12) & 0x3ff) 83 83 84 84 /* Get PTE address accessors for each level. */ 85 85 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) \ 86 86 (((pte_t *) (ptl0))[(i)].pfn << 12) 87 87 88 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) \ 88 89 (ptl1) 90 89 91 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) \ 90 92 (ptl2) 91 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) \ 93 94 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) \ 92 95 (((pte_t *) (ptl3))[(i)].pfn << 12) 93 96 94 97 /* Set PTE address accessors for each level. */ 95 98 #define SET_PTL0_ADDRESS_ARCH(ptl0) 99 96 100 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) \ 97 101 (((pte_t *) (ptl0))[(i)].pfn = (a) >> 12) 102 98 103 #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) 99 104 #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) 105 100 106 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) \ 101 107 (((pte_t *) (ptl3))[(i)].pfn = (a) >> 12) … … 104 110 #define GET_PTL1_FLAGS_ARCH(ptl0, i) \ 105 111 get_pt_flags((pte_t *) (ptl0), (size_t) (i)) 112 106 113 #define GET_PTL2_FLAGS_ARCH(ptl1, i) \ 107 114 PAGE_PRESENT 115 108 116 #define GET_PTL3_FLAGS_ARCH(ptl2, i) \ 109 117 PAGE_PRESENT 118 110 119 #define GET_FRAME_FLAGS_ARCH(ptl3, i) \ 111 120 get_pt_flags((pte_t *) (ptl3), (size_t) (i)) 112 121 113 122 /* Set PTE flags accessors for each level. */ 114 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) 123 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) \ 115 124 set_pt_flags((pte_t *) (ptl0), (size_t) (i), (x)) 125 116 126 #define SET_PTL2_FLAGS_ARCH(ptl1, i, x) 117 127 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) 128 118 129 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) \ 119 130 set_pt_flags((pte_t *) (ptl3), (size_t) (i), (x)) 120 131 121 132 /* Macros for querying the last-level PTEs. */ 122 #define PTE_VALID_ARCH(pte) 123 #define PTE_PRESENT_ARCH(pte) 124 #define PTE_GET_FRAME_ARCH(pte) 125 #define PTE_WRITABLE_ARCH(pte) 126 #define PTE_EXECUTABLE_ARCH(pte) 133 #define PTE_VALID_ARCH(pte) (*((uint32_t *) (pte)) != 0) 134 #define PTE_PRESENT_ARCH(pte) ((pte)->present != 0) 135 #define PTE_GET_FRAME_ARCH(pte) ((pte)->pfn << 12) 136 #define PTE_WRITABLE_ARCH(pte) 1 137 #define PTE_EXECUTABLE_ARCH(pte) 1 127 138 128 139 #ifndef __ASM__ … … 133 144 /** Page Table Entry. */ 134 145 typedef struct { 135 unsigned present : 1; /**< Present bit. */136 unsigned page_write_through : 1; /**< Write thought caching. */137 unsigned page_cache_disable : 1; /**< No caching. */138 unsigned accessed : 1; /**< Accessed bit. */139 unsigned global : 1; /**< Global bit. */140 unsigned valid : 1; /**< Valid content even if not present. */141 unsigned pfn : 20; /**< Physical frame number. */146 unsigned int present : 1; /**< Present bit. */ 147 unsigned int page_write_through : 1; /**< Write thought caching. */ 148 unsigned int page_cache_disable : 1; /**< No caching. */ 149 unsigned int accessed : 1; /**< Accessed bit. */ 150 unsigned int global : 1; /**< Global bit. */ 151 unsigned int valid : 1; /**< Valid content even if not present. */ 152 unsigned int pfn : 20; /**< Physical frame number. */ 142 153 } pte_t; 143 154 144 155 static inline unsigned int get_pt_flags(pte_t *pt, size_t i) 145 156 { 146 pte_t * p= &pt[i];157 pte_t *entry = &pt[i]; 147 158 148 return (((! p->page_cache_disable) << PAGE_CACHEABLE_SHIFT) |149 ((! p->present) << PAGE_PRESENT_SHIFT) |159 return (((!entry->page_cache_disable) << PAGE_CACHEABLE_SHIFT) | 160 ((!entry->present) << PAGE_PRESENT_SHIFT) | 150 161 (1 << PAGE_USER_SHIFT) | 151 162 (1 << PAGE_READ_SHIFT) | 152 163 (1 << PAGE_WRITE_SHIFT) | 153 164 (1 << PAGE_EXEC_SHIFT) | 154 ( p->global << PAGE_GLOBAL_SHIFT));165 (entry->global << PAGE_GLOBAL_SHIFT)); 155 166 } 156 167 157 168 static inline void set_pt_flags(pte_t *pt, size_t i, int flags) 158 169 { 159 pte_t * p= &pt[i];170 pte_t *entry = &pt[i]; 160 171 161 p->page_cache_disable = !(flags & PAGE_CACHEABLE);162 p->present = !(flags & PAGE_NOT_PRESENT);163 p->global = (flags & PAGE_GLOBAL) != 0;164 p->valid = 1;172 entry->page_cache_disable = !(flags & PAGE_CACHEABLE); 173 entry->present = !(flags & PAGE_NOT_PRESENT); 174 entry->global = (flags & PAGE_GLOBAL) != 0; 175 entry->valid = 1; 165 176 } 166 177 -
kernel/arch/ppc32/include/mm/tlb.h
r3d6beaa rb8230b9 27 27 */ 28 28 29 /** @addtogroup ppc32mm 29 /** @addtogroup ppc32mm 30 30 * @{ 31 31 */ … … 45 45 46 46 typedef struct { 47 unsigned v : 1; /**< Valid */48 unsigned vsid : 24; /**< Virtual Segment ID */49 unsigned h : 1; /**< Primary/secondary hash */50 unsigned api : 6; /**< Abbreviated Page Index */51 unsigned rpn : 20; /**< Real Page Number */52 unsigned reserved0 : 3;53 unsigned r : 1; /**< Reference */54 unsigned c : 1; /**< Change */55 unsigned wimg : 4; /**< Access control */56 unsigned reserved1 : 1;57 unsigned pp : 2; /**< Page protection */47 unsigned int v : 1; /**< Valid */ 48 unsigned int vsid : 24; /**< Virtual Segment ID */ 49 unsigned int h : 1; /**< Primary/secondary hash */ 50 unsigned int api : 6; /**< Abbreviated Page Index */ 51 unsigned int rpn : 20; /**< Real Page Number */ 52 unsigned int reserved0 : 3; 53 unsigned int r : 1; /**< Reference */ 54 unsigned int c : 1; /**< Change */ 55 unsigned int wimg : 4; /**< Access control */ 56 unsigned int reserved1 : 1; 57 unsigned int pp : 2; /**< Page protection */ 58 58 } phte_t; 59 59 60 60 typedef struct { 61 unsigned v : 1;62 unsigned vsid : 24;63 unsigned reserved0 : 1;64 unsigned api : 6;61 unsigned int v : 1; 62 unsigned int vsid : 24; 63 unsigned int reserved0 : 1; 64 unsigned int api : 6; 65 65 } ptehi_t; 66 66 67 67 typedef struct { 68 unsigned rpn : 20;69 unsigned xpn : 3;70 unsigned reserved0 : 1;71 unsigned c : 1;72 unsigned wimg : 4;73 unsigned x : 1;74 unsigned pp : 2;68 unsigned int rpn : 20; 69 unsigned int xpn : 3; 70 unsigned int reserved0 : 1; 71 unsigned int c : 1; 72 unsigned int wimg : 4; 73 unsigned int x : 1; 74 unsigned int pp : 2; 75 75 } ptelo_t; 76 76 77 77 extern void pht_init(void); 78 extern void pht_refill(int n, istate_t *istate); 79 extern bool pht_refill_real(int n, istate_t *istate) __attribute__ ((section("K_UNMAPPED_TEXT_START"))); 80 extern void tlb_refill_real(int n, uint32_t tlbmiss, ptehi_t ptehi, ptelo_t ptelo, istate_t *istate) __attribute__ ((section("K_UNMAPPED_TEXT_START"))); 78 extern void pht_refill(int, istate_t *); 79 80 extern bool pht_refill_real(int, istate_t *) 81 __attribute__ ((section("K_UNMAPPED_TEXT_START"))); 82 extern void tlb_refill_real(int, uint32_t, ptehi_t, ptelo_t, istate_t *) 83 __attribute__ ((section("K_UNMAPPED_TEXT_START"))); 81 84 82 85 #endif -
kernel/arch/ppc32/src/context.S
r3d6beaa rb8230b9 29 29 #include <arch/context_offset.h> 30 30 31 .text 31 .text 32 32 33 33 .global context_save_arch … … 46 46 li r3, 1 47 47 blr 48 48 49 49 context_restore_arch: 50 50 CONTEXT_RESTORE_ARCH_CORE r3 -
kernel/arch/ppc32/src/ddi/ddi.c
r3d6beaa rb8230b9 46 46 * 47 47 * @return 0 on success or an error code from errno.h. 48 * 48 49 */ 49 50 int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size) -
kernel/arch/ppc32/src/debug/panic.s
r3d6beaa rb8230b9 35 35 lis %r14, halt@ha 36 36 addi %r14, %r14, halt@l 37 mtlr %r14 37 mtlr %r14 # fake stack to make printf return to halt 38 38 b printf -
kernel/arch/ppc32/src/fpu_context.S
r3d6beaa rb8230b9 30 30 #include <arch/context_offset.h> 31 31 32 .text 32 .text 33 33 34 34 .global fpu_context_save … … 87 87 88 88 blr 89 89 90 90 fpu_context_restore: 91 91 // FPU_CONTEXT_LOAD r3
Note:
See TracChangeset
for help on using the changeset viewer.