Changeset 7f341820 in mainline
- Timestamp:
- 2009-02-17T14:09:31Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 30e2bba
- Parents:
- 85156d3
- Files:
-
- 1 added
- 1 deleted
- 13 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
HelenOS.config
r85156d3 r7f341820 282 282 283 283 % Support for SMP 284 ! [(PLATFORM=ia32&MACHINE!=athlon-xp)|PLATFORM=amd64|PLATFORM=sparc64|PLATFORM=ia64 ] CONFIG_SMP (y/n)284 ! [(PLATFORM=ia32&MACHINE!=athlon-xp)|PLATFORM=amd64|PLATFORM=sparc64|PLATFORM=ia64|(PLATFORM=mips32&MACHINE=msim)] CONFIG_SMP (y/n) 285 285 286 286 % Improved support for hyperthreading -
kernel/arch/mips32/Makefile.inc
r85156d3 r7f341820 34 34 TOOLCHAIN_DIR = $(CROSS_PREFIX)/mipsel 35 35 36 KERNEL_LOAD_ADDRESS = 0x8010000037 38 36 GCC_CFLAGS += -mno-abicalls -G 0 -fno-zero-initialized-in-bss 39 37 40 DEFS += -D__32_BITS__ -DKERNEL_LOAD_ADDRESS=$(KERNEL_LOAD_ADDRESS)38 DEFS += -D__32_BITS__ 41 39 42 40 ## Accepted MACHINEs … … 75 73 arch/$(KARCH)/src/panic.S \ 76 74 arch/$(KARCH)/src/mips32.c \ 77 arch/$(KARCH)/src/dummy.S \78 75 arch/$(KARCH)/src/console.c \ 79 76 arch/$(KARCH)/src/asm.S \ … … 91 88 arch/$(KARCH)/src/drivers/msim.c \ 92 89 arch/$(KARCH)/src/drivers/serial.c \ 93 arch/$(KARCH)/src/smp/order.c 90 arch/$(KARCH)/src/smp/dorder.c \ 91 arch/$(KARCH)/src/smp/smp.c -
kernel/arch/mips32/_link.ld.in
r85156d3 r7f341820 9 9 #undef mips 10 10 #define mips mips 11 12 #define KERNEL_LOAD_ADDRESS 0x80100000 11 13 12 14 OUTPUT_ARCH(mips) -
kernel/arch/mips32/include/asm.h
r85156d3 r7f341820 56 56 uintptr_t v; 57 57 58 asm volatile ("and %0, $29, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1))); 58 asm volatile ( 59 "and %0, $29, %1\n" 60 : "=r" (v) 61 : "r" (~(STACK_SIZE-1)) 62 ); 59 63 60 64 return v; … … 64 68 extern void asm_delay_loop(uint32_t t); 65 69 extern void userspace_asm(uintptr_t ustack, uintptr_t uspace_uarg, 66 70 uintptr_t entry); 67 71 68 72 extern ipl_t interrupts_disable(void); … … 70 74 extern void interrupts_restore(ipl_t ipl); 71 75 extern ipl_t interrupts_read(void); 76 extern void asm_delay_loop(uint32_t t); 72 77 73 78 static inline void pio_write_8(ioport_t port, uint8_t v) -
kernel/arch/mips32/include/atomic.h
r85156d3 r7f341820 36 36 #define KERN_mips32_ATOMIC_H_ 37 37 38 #define atomic_inc(x) 39 #define atomic_dec(x) 38 #define atomic_inc(x) ((void) atomic_add(x, 1)) 39 #define atomic_dec(x) ((void) atomic_add(x, -1)) 40 40 41 #define atomic_postinc(x) (atomic_add(x, 1) - 1)42 #define atomic_postdec(x) (atomic_add(x, -1) + 1)41 #define atomic_postinc(x) (atomic_add(x, 1) - 1) 42 #define atomic_postdec(x) (atomic_add(x, -1) + 1) 43 43 44 #define atomic_preinc(x) atomic_add(x, 1)45 #define atomic_predec(x) atomic_add(x, -1)44 #define atomic_preinc(x) atomic_add(x, 1) 45 #define atomic_predec(x) atomic_add(x, -1) 46 46 47 47 /* Atomic addition of immediate value. … … 55 55 { 56 56 long tmp, v; 57 57 58 58 asm volatile ( 59 59 "1:\n" 60 60 " ll %0, %1\n" 61 " addu %0, %0, %3\n" 62 " 61 " addu %0, %0, %3\n" /* same as addi, but never traps on overflow */ 62 " move %2, %0\n" 63 63 " sc %0, %1\n" 64 " beq %0, %4, 1b\n" 64 " beq %0, %4, 1b\n" /* if the atomic operation failed, try again */ 65 65 " nop\n" 66 66 : "=&r" (tmp), "+m" (val->count), "=&r" (v) 67 67 : "r" (i), "i" (0) 68 ); 68 ); 69 70 return v; 71 } 69 72 73 static inline uint32_t test_and_set(atomic_t *val) { 74 uint32_t tmp, v; 75 76 asm volatile ( 77 "1:\n" 78 " ll %2, %1\n" 79 " bnez %2, 2f\n" 80 " li %0, %3\n" 81 " sc %0, %1\n" 82 " beqz %0, 1b\n" 83 "2:\n" 84 : "=&r" (tmp), "+m" (val->count), "=&r" (v) 85 : "i" (1) 86 ); 87 70 88 return v; 71 89 } -
kernel/arch/mips32/include/cpu.h
r85156d3 r7f341820 43 43 uint32_t rev_num; 44 44 } cpu_arch_t; 45 45 46 46 #endif 47 47 -
kernel/arch/mips32/include/interrupt.h
r85156d3 r7f341820 39 39 #include <arch/exception.h> 40 40 41 #define IVT_ITEMS 32 42 #define IVT_FIRST 0 41 #define IVT_ITEMS 32 42 #define IVT_FIRST 0 43 44 #define VECTOR_TLB_SHOOTDOWN_IPI EXC_Int 43 45 44 46 extern function virtual_timer_fnc; -
kernel/arch/mips32/include/smp/dorder.h
r85156d3 r7f341820 27 27 */ 28 28 29 #ifndef KERN_mips32_ ORDER_H_30 #define KERN_mips32_ ORDER_H_29 #ifndef KERN_mips32_DORDER_H_ 30 #define KERN_mips32_DORDER_H_ 31 31 32 32 extern void ipi_broadcast_arch(int ipi); -
kernel/arch/mips32/src/asm.S
r85156d3 r7f341820 28 28 29 29 #include <arch/asm/regname.h> 30 30 31 31 .text 32 32 … … 46 46 .set noreorder 47 47 .set nomacro 48 49 .global asm_delay_loop 50 asm_delay_loop: 51 j $31 52 nop 48 53 49 54 .global cpu_halt -
kernel/arch/mips32/src/debugger.c
r85156d3 r7f341820 163 163 if (breakpoints[i].address == (uintptr_t)argv->intval) { 164 164 printf("Duplicate breakpoint %d.\n", i); 165 spinlock_unlock(&bkpoint s_lock);165 spinlock_unlock(&bkpoint_lock); 166 166 return 0; 167 167 } else if (breakpoints[i].address == (uintptr_t)argv->intval + … … 170 170 printf("Adjacent breakpoints not supported, conflict " 171 171 "with %d.\n", i); 172 spinlock_unlock(&bkpoint s_lock);172 spinlock_unlock(&bkpoint_lock); 173 173 return 0; 174 174 } 175 175 176 176 } 177 177 -
kernel/arch/mips32/src/interrupt.c
r85156d3 r7f341820 42 42 #include <ddi/device.h> 43 43 44 #define IRQ_COUNT 8 45 #define TIMER_IRQ 7 44 #define IRQ_COUNT 8 45 #define TIMER_IRQ 7 46 #define DORDER_IRQ 5 46 47 47 48 function virtual_timer_fnc = NULL; -
kernel/arch/mips32/src/mips32.c
r85156d3 r7f341820 167 167 } 168 168 169 void calibrate_delay_loop(void) 170 { 171 } 172 169 173 void userspace(uspace_arg_t *kernel_uarg) 170 174 { -
kernel/arch/mips32/src/mm/tlb.c
r85156d3 r7f341820 27 27 */ 28 28 29 /** @addtogroup mips32mm 29 /** @addtogroup mips32mm 30 30 * @{ 31 31 */ … … 42 42 #include <arch.h> 43 43 #include <symtab.h> 44 #include <synch/ spinlock.h>44 #include <synch/mutex.h> 45 45 #include <print.h> 46 46 #include <debug.h> … … 93 93 pte_t *pte; 94 94 int pfrc; 95 95 96 96 badvaddr = cp0_badvaddr_read(); 97 98 spinlock_lock(&AS->lock);97 98 mutex_lock(&AS->lock); 99 99 asid = AS->asid; 100 spinlock_unlock(&AS->lock);101 100 mutex_unlock(&AS->lock); 101 102 102 page_table_lock(AS, true); 103 103 104 104 pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate, &pfrc); 105 105 if (!pte) { -
kernel/arch/mips32/src/smp/dorder.c
r85156d3 r7f341820 27 27 */ 28 28 29 /** @addtogroup mips32 29 /** @addtogroup mips32 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #include <arch/smp/ order.h>35 #include <arch/smp/dorder.h> 36 36 37 #define MSIM_ ORDER_ADDRESS0xB000000437 #define MSIM_DORDER_ADDRESS 0xB0000004 38 38 39 39 void ipi_broadcast_arch(int ipi) 40 40 { 41 *((volatile unsigned int *) MSIM_ORDER_ADDRESS) = 0x7FFFFFFF; 41 #ifdef CONFIG_SMP 42 *((volatile unsigned int *) MSIM_DORDER_ADDRESS) = 0x7FFFFFFF; 43 #endif 42 44 } 43 45 -
kernel/generic/src/mm/as.c
r85156d3 r7f341820 123 123 124 124 link_initialize(&as->inactive_as_with_asid_link); 125 mutex_initialize(&as->lock, MUTEX_PASSIVE); 125 mutex_initialize(&as->lock, MUTEX_PASSIVE); 126 126 127 127 rc = as_constructor_arch(as, flags);
Note:
See TracChangeset
for help on using the changeset viewer.