Changeset 48c1ef9 in mainline for arch/ppc64/include
- Timestamp:
- 2006-05-21T20:38:18Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 040542aa
- Parents:
- bd55bbb
- Location:
- arch/ppc64/include
- Files:
-
- 13 edited
- 1 moved
-
asm.h (modified) (7 diffs)
-
asm/regname.h (modified) (1 diff)
-
atomic.h (modified) (4 diffs)
-
barrier.h (modified) (1 diff)
-
boot/boot.h (modified) (3 diffs)
-
byteorder.h (modified) (1 diff)
-
cpuid.h (modified) (1 diff)
-
elf.h (modified) (1 diff)
-
exception.h (moved) (moved from arch/ppc64/include/console.h ) (2 diffs)
-
mm/asid.h (modified) (1 diff)
-
mm/frame.h (modified) (1 diff)
-
mm/page.h (modified) (2 diffs)
-
mm/tlb.h (modified) (1 diff)
-
types.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc64/include/asm.h
rbd55bbb r48c1ef9 40 40 * @return Old interrupt priority level. 41 41 */ 42 static inline ipl_t interrupts_enable(void) { 42 static inline ipl_t interrupts_enable(void) 43 { 43 44 ipl_t v; 44 45 ipl_t tmp; 45 46 46 __asm__volatile (47 asm volatile ( 47 48 "mfmsr %0\n" 48 49 "mfmsr %1\n" … … 61 62 * @return Old interrupt priority level. 62 63 */ 63 static inline ipl_t interrupts_disable(void) { 64 static inline ipl_t interrupts_disable(void) 65 { 64 66 ipl_t v; 65 67 ipl_t tmp; 66 68 67 __asm__volatile (69 asm volatile ( 68 70 "mfmsr %0\n" 69 71 "mfmsr %1\n" … … 81 83 * @param ipl Saved interrupt priority level. 82 84 */ 83 static inline void interrupts_restore(ipl_t ipl) { 85 static inline void interrupts_restore(ipl_t ipl) 86 { 84 87 ipl_t tmp; 85 88 86 __asm__volatile (89 asm volatile ( 87 90 "mfmsr %1\n" 88 91 "rlwimi %0, %1, 0, 17, 15\n" … … 93 96 : "=r" (ipl), "=r" (tmp) 94 97 : "0" (ipl) 98 : "cr0" 95 99 ); 96 100 } … … 102 106 * @return Current interrupt priority level. 103 107 */ 104 static inline ipl_t interrupts_read(void) { 108 static inline ipl_t interrupts_read(void) 109 { 105 110 ipl_t v; 106 __asm__ volatile ( 111 112 asm volatile ( 107 113 "mfmsr %0\n" 108 114 : "=r" (v) … … 121 127 __address v; 122 128 123 __asm__ volatile ("and %0, %%sp, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1))); 124 129 asm volatile ( 130 "and %0, %%sp, %1\n" 131 : "=r" (v) 132 : "r" (~(STACK_SIZE - 1)) 133 ); 125 134 return v; 126 135 } … … 133 142 void asm_delay_loop(__u32 t); 134 143 144 extern void userspace_asm(__address uspace_uarg, __address stack, __address entry); 145 135 146 #endif -
arch/ppc64/include/asm/regname.h
rbd55bbb r48c1ef9 195 195 #define msr_ir (1 << 4) 196 196 #define msr_dr (1 << 5) 197 #define msr_pr (1 << 14) 198 #define msr_ee (1 << 15) 197 199 198 200 /* HID0 bits */ -
arch/ppc64/include/atomic.h
rbd55bbb r48c1ef9 34 34 long tmp; 35 35 36 asm __volatile__(36 asm volatile ( 37 37 "1:\n" 38 38 "lwarx %0, 0, %2\n" … … 42 42 : "=&r" (tmp), "=m" (val->count) 43 43 : "r" (&val->count), "m" (val->count) 44 : "cc"); 44 : "cc" 45 ); 45 46 } 46 47 … … 49 50 long tmp; 50 51 51 asm __volatile__(52 asm volatile ( 52 53 "1:\n" 53 54 "lwarx %0, 0, %2\n" … … 57 58 : "=&r" (tmp), "=m" (val->count) 58 59 : "r" (&val->count), "m" (val->count) 59 : "cc"); 60 : "cc" 61 ); 60 62 } 61 63 -
arch/ppc64/include/barrier.h
rbd55bbb r48c1ef9 30 30 #define __ppc64_BARRIER_H__ 31 31 32 #define CS_ENTER_BARRIER() __asm__volatile ("" ::: "memory")33 #define CS_LEAVE_BARRIER() __asm__volatile ("" ::: "memory")32 #define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") 33 #define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") 34 34 35 #define memory_barrier() __asm__volatile ("sync" ::: "memory")36 #define read_barrier() __asm__volatile ("sync" ::: "memory")37 #define write_barrier() __asm__volatile ("eieio" ::: "memory")35 #define memory_barrier() asm volatile ("sync" ::: "memory") 36 #define read_barrier() asm volatile ("sync" ::: "memory") 37 #define write_barrier() asm volatile ("eieio" ::: "memory") 38 38 39 39 #endif -
arch/ppc64/include/boot/boot.h
rbd55bbb r48c1ef9 35 35 #define TEMP_STACK_SIZE 0x100 36 36 37 #define TASKMAP_MAX_RECORDS 32 37 38 #define MEMMAP_MAX_RECORDS 32 38 39 … … 42 43 43 44 typedef struct { 45 __address addr; 46 __u64 size; 47 } utask_t; 48 49 typedef struct { 50 __u32 count; 51 utask_t tasks[TASKMAP_MAX_RECORDS]; 52 } taskmap_t; 53 54 typedef struct { 44 55 __address start; 45 __u 32size;56 __u64 size; 46 57 } memzone_t; 47 58 48 59 typedef struct { 49 __u 32total;60 __u64 total; 50 61 __u32 count; 51 62 memzone_t zones[MEMMAP_MAX_RECORDS]; … … 61 72 62 73 typedef struct { 74 taskmap_t taskmap; 63 75 memmap_t memmap; 64 76 screen_t screen; -
arch/ppc64/include/byteorder.h
rbd55bbb r48c1ef9 54 54 __address v; 55 55 56 __asm__ volatile ("lwbrx %0, %1, %2\n" : "=r" (v) : "i" (0) , "r" (&n)); 57 56 asm volatile ( 57 "lwbrx %0, %1, %2\n" 58 : "=r" (v) 59 : "i" (0), "r" (&n) 60 ); 58 61 return v; 59 62 } 63 60 64 #endif -
arch/ppc64/include/cpuid.h
rbd55bbb r48c1ef9 39 39 static inline void cpu_version(struct cpu_info *info) 40 40 { 41 __asm__volatile (42 "mf spr %0, 287\n"41 asm volatile ( 42 "mfpvr %0\n" 43 43 : "=r" (*info) 44 44 ); -
arch/ppc64/include/elf.h
rbd55bbb r48c1ef9 30 30 #define __ppc64_ELF_H__ 31 31 32 #define ELF_MACHINE EM_PPC 32 #define ELF_MACHINE EM_PPC64 33 33 #define ELF_DATA_ENCODING ELFDATA2MSB 34 34 #define ELF_CLASS ELFCLASS32 -
arch/ppc64/include/exception.h
rbd55bbb r48c1ef9 1 1 /* 2 * Copyright (C) 200 5 Jakub Jermar2 * Copyright (C) 2006 Martin Decky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 #ifndef __ppc64_ CONSOLE_H__30 #define __ppc64_ CONSOLE_H__29 #ifndef __ppc64_EXCEPTION_H__ 30 #define __ppc64_EXCEPTION_H__ 31 31 32 extern void ppc64_console_init(void); 32 #ifndef __ppc64_TYPES_H__ 33 # include <arch/types.h> 34 #endif 35 36 #include <typedefs.h> 37 38 struct istate { 39 __u64 r0; 40 __u64 r2; 41 __u64 r3; 42 __u64 r4; 43 __u64 r5; 44 __u64 r6; 45 __u64 r7; 46 __u64 r8; 47 __u64 r9; 48 __u64 r10; 49 __u64 r11; 50 __u64 r13; 51 __u64 r14; 52 __u64 r15; 53 __u64 r16; 54 __u64 r17; 55 __u64 r18; 56 __u64 r19; 57 __u64 r20; 58 __u64 r21; 59 __u64 r22; 60 __u64 r23; 61 __u64 r24; 62 __u64 r25; 63 __u64 r26; 64 __u64 r27; 65 __u64 r28; 66 __u64 r29; 67 __u64 r30; 68 __u64 r31; 69 __u64 cr; 70 __u64 pc; 71 __u64 srr1; 72 __u64 lr; 73 __u64 ctr; 74 __u64 xer; 75 __u64 r12; 76 __u64 sp; 77 }; 78 79 static inline void istate_set_retaddr(istate_t *istate, __address retaddr) 80 { 81 istate->pc = retaddr; 82 } 33 83 34 84 #endif -
arch/ppc64/include/mm/asid.h
rbd55bbb r48c1ef9 32 32 typedef int asid_t; 33 33 34 #define ASID_MAX_ARCH 334 #define ASID_MAX_ARCH 3 35 35 36 #define asid_get() (ASID_START+1)36 #define asid_get() (ASID_START+1) 37 37 38 38 #endif -
arch/ppc64/include/mm/frame.h
rbd55bbb r48c1ef9 31 31 32 32 #define FRAME_WIDTH 12 /* 4K */ 33 #define FRAME_SIZE (1 <<FRAME_WIDTH)33 #define FRAME_SIZE (1 << FRAME_WIDTH) 34 34 35 35 #ifdef KERNEL 36 36 #ifndef __ASM__ 37 38 #include <arch/types.h> 39 40 extern __address last_frame; 37 41 38 42 extern void frame_arch_init(void); -
arch/ppc64/include/mm/page.h
rbd55bbb r48c1ef9 45 45 #endif 46 46 47 #define PTL0_ENTRIES_ARCH 0 48 #define PTL1_ENTRIES_ARCH 0 49 #define PTL2_ENTRIES_ARCH 0 50 #define PTL3_ENTRIES_ARCH 0 47 /* 48 * Implementation of generic 4-level page table interface, 49 * the hardware Page Hash Table is used as cache. 50 * 51 * Page table layout: 52 * - 32-bit virtual addressess 53 * - Offset is 12 bits => pages are 4K long 54 * - PTL0 has 1024 entries (10 bits) 55 * - PTL1 is not used 56 * - PTL2 is not used 57 * - PLT3 has 1024 entries (10 bits) 58 */ 51 59 52 #define PTL0_INDEX_ARCH(vaddr) 0 53 #define PTL1_INDEX_ARCH(vaddr) 0 54 #define PTL2_INDEX_ARCH(vaddr) 0 55 #define PTL3_INDEX_ARCH(vaddr) 0 60 #define PTL0_ENTRIES_ARCH 1024 61 #define PTL1_ENTRIES_ARCH 0 62 #define PTL2_ENTRIES_ARCH 0 63 #define PTL3_ENTRIES_ARCH 1024 64 65 #define PTL0_INDEX_ARCH(vaddr) (((vaddr) >> 22) & 0x3ff) 66 #define PTL1_INDEX_ARCH(vaddr) 0 67 #define PTL2_INDEX_ARCH(vaddr) 0 68 #define PTL3_INDEX_ARCH(vaddr) (((vaddr) >> 12) & 0x3ff) 69 70 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) (((pte_t *) (ptl0))[(i)].pfn << 12) 71 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) (ptl1) 72 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) (ptl2) 73 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) (((pte_t *) (ptl3))[(i)].pfn << 12) 56 74 57 75 #define SET_PTL0_ADDRESS_ARCH(ptl0) 58 59 #define GET_PTL1_ADDRESS_ARCH(ptl0, i) ((pte_t *) 0) 60 #define GET_PTL2_ADDRESS_ARCH(ptl1, i) ((pte_t *) 0) 61 #define GET_PTL3_ADDRESS_ARCH(ptl2, i) ((pte_t *) 0) 62 #define GET_FRAME_ADDRESS_ARCH(ptl3, i) ((pte_t *) 0) 63 64 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) 76 #define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) (((pte_t *) (ptl0))[(i)].pfn = (a) >> 12) 65 77 #define SET_PTL2_ADDRESS_ARCH(ptl1, i, a) 66 78 #define SET_PTL3_ADDRESS_ARCH(ptl2, i, a) 67 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) 79 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) (((pte_t *) (ptl3))[(i)].pfn = (a) >> 12) 68 80 69 #define GET_PTL1_FLAGS_ARCH(ptl0, i) 070 #define GET_PTL2_FLAGS_ARCH(ptl1, i) 071 #define GET_PTL3_FLAGS_ARCH(ptl2, i) 072 #define GET_FRAME_FLAGS_ARCH(ptl3, i) 081 #define GET_PTL1_FLAGS_ARCH(ptl0, i) get_pt_flags((pte_t *) (ptl0), (index_t) (i)) 82 #define GET_PTL2_FLAGS_ARCH(ptl1, i) PAGE_PRESENT 83 #define GET_PTL3_FLAGS_ARCH(ptl2, i) PAGE_PRESENT 84 #define GET_FRAME_FLAGS_ARCH(ptl3, i) get_pt_flags((pte_t *) (ptl3), (index_t) (i)) 73 85 74 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) 86 #define SET_PTL1_FLAGS_ARCH(ptl0, i, x) set_pt_flags((pte_t *) (ptl0), (index_t) (i), (x)) 75 87 #define SET_PTL2_FLAGS_ARCH(ptl1, i, x) 76 88 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) 77 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) 89 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) set_pt_flags((pte_t *) (ptl3), (index_t) (i), (x)) 78 90 79 #define PTE_VALID_ARCH(p ) 180 #define PTE_PRESENT_ARCH(p ) 181 #define PTE_GET_FRAME_ARCH(p ) 091 #define PTE_VALID_ARCH(pte) (*((__u32 *) (pte)) != 0) 92 #define PTE_PRESENT_ARCH(pte) ((pte)->p != 0) 93 #define PTE_GET_FRAME_ARCH(pte) ((pte)->pfn << 12) 82 94 83 95 #ifndef __ASM__ … … 87 99 #include <arch/types.h> 88 100 101 static inline int get_pt_flags(pte_t *pt, index_t i) 102 { 103 pte_t *p = &pt[i]; 104 105 return ( 106 (1 << PAGE_CACHEABLE_SHIFT) | 107 ((!p->p) << PAGE_PRESENT_SHIFT) | 108 (1 << PAGE_USER_SHIFT) | 109 (1 << PAGE_READ_SHIFT) | 110 (1 << PAGE_WRITE_SHIFT) | 111 (1 << PAGE_EXEC_SHIFT) | 112 (p->g << PAGE_GLOBAL_SHIFT) 113 ); 114 } 115 116 static inline void set_pt_flags(pte_t *pt, index_t i, int flags) 117 { 118 pte_t *p = &pt[i]; 119 120 p->p = !(flags & PAGE_NOT_PRESENT); 121 p->g = (flags & PAGE_GLOBAL) != 0; 122 p->valid = 1; 123 } 124 89 125 extern void page_arch_init(void); 126 127 #define PHT_BITS 16 128 #define PHT_ORDER 4 129 130 typedef struct { 131 unsigned v : 1; /**< Valid */ 132 unsigned vsid : 24; /**< Virtual Segment ID */ 133 unsigned h : 1; /**< Primary/secondary hash */ 134 unsigned api : 6; /**< Abbreviated Page Index */ 135 unsigned rpn : 20; /**< Real Page Number */ 136 unsigned reserved0 : 3; 137 unsigned r : 1; /**< Reference */ 138 unsigned c : 1; /**< Change */ 139 unsigned wimg : 4; /**< Access control */ 140 unsigned reserved1 : 1; 141 unsigned pp : 2; /**< Page protection */ 142 } phte_t; 143 144 extern void pht_refill(bool data, istate_t *istate); 145 extern void pht_init(void); 90 146 91 147 #endif /* __ASM__ */ -
arch/ppc64/include/mm/tlb.h
rbd55bbb r48c1ef9 30 30 #define __ppc64_TLB_H__ 31 31 32 #define tlb_arch_init()33 #define tlb_print()34 32 35 33 #endif -
arch/ppc64/include/types.h
rbd55bbb r48c1ef9 34 34 typedef signed char __s8; 35 35 typedef signed short __s16; 36 typedef signed long__s32;37 typedef signed long long__s64;36 typedef signed int __s32; 37 typedef signed long __s64; 38 38 39 39 typedef unsigned char __u8; … … 43 43 44 44 typedef __u64 __address; 45 typedef __u 32pfn_t;45 typedef __u64 pfn_t; 46 46 47 47 typedef __u64 ipl_t; 48 48 49 typedef __u 64__native;49 typedef __u32 __native; 50 50 51 typedef __u32 pte_t; 51 /** Page Table Entry. */ 52 typedef struct { 53 unsigned p : 1; /**< Present bit. */ 54 unsigned a : 1; /**< Accessed bit. */ 55 unsigned g : 1; /**< Global bit. */ 56 unsigned valid : 1; /**< Valid content even if not present. */ 57 unsigned pfn : 20; /**< Physical frame number. */ 58 } pte_t; 52 59 53 60 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
