- Timestamp:
- 2006-05-28T18:17:36Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5552d60
- Parents:
- 3bf5976
- Location:
- arch
- Files:
-
- 5 edited
-
ia32/include/barrier.h (modified) (4 diffs)
-
mips32/include/barrier.h (modified) (1 diff)
-
mips32/include/cp0.h (modified) (1 diff)
-
mips32/src/interrupt.c (modified) (2 diffs)
-
mips32/src/mips32.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/include/barrier.h
r3bf5976 rd6e5cbc 30 30 #define __ia32_BARRIER_H__ 31 31 32 #include <arch/types.h>33 34 32 /* 35 33 * NOTE: … … 61 59 # define write_barrier() __asm__ volatile ("sfence\n" ::: "memory") 62 60 # else 63 # define write_barrier() 61 # define write_barrier() __asm__ volatile( "" ::: "memory"); 64 62 # endif 65 63 #elif CONFIG_FENCES_P3 … … 69 67 # define write_barrier() __asm__ volatile ("sfence\n" ::: "memory") 70 68 # else 71 # define write_barrier() 69 # define write_barrier() __asm__ volatile( "" ::: "memory"); 72 70 # endif 73 71 #else … … 77 75 # define write_barrier() cpuid_serialization() 78 76 # else 79 # define write_barrier() 77 # define write_barrier() __asm__ volatile( "" ::: "memory"); 80 78 # endif 81 79 #endif -
arch/mips32/include/barrier.h
r3bf5976 rd6e5cbc 36 36 #define CS_LEAVE_BARRIER() __asm__ volatile ("" ::: "memory") 37 37 38 #define memory_barrier() 39 #define read_barrier() 40 #define write_barrier() 38 #define memory_barrier() __asm__ volatile ("" ::: "memory") 39 #define read_barrier() __asm__ volatile ("" ::: "memory") 40 #define write_barrier() __asm__ volatile ("" ::: "memory") 41 41 42 42 #endif -
arch/mips32/include/cp0.h
r3bf5976 rd6e5cbc 50 50 /* 51 51 * Magic value for use in msim. 52 * On AMD Duron 800Mhz, this roughly seems like one us.53 52 */ 54 #define cp0_compare_value 10000 53 #define cp0_compare_value 100000 55 54 56 55 #define cp0_mask_all_int() cp0_status_write(cp0_status_read() & ~(cp0_status_im_mask)) -
arch/mips32/src/interrupt.c
r3bf5976 rd6e5cbc 77 77 } 78 78 79 /* TODO: This is SMP unsafe!!! */ 80 static unsigned long nextcount; 81 /** Start hardware clock */ 82 static void timer_start(void) 83 { 84 nextcount = cp0_compare_value + cp0_count_read(); 85 cp0_compare_write(nextcount); 86 } 87 79 88 static void timer_exception(int n, istate_t *istate) 80 89 { 81 cp0_compare_write(cp0_count_read() + cp0_compare_value); 90 unsigned long drift; 91 92 drift = cp0_count_read() - nextcount; 93 while (drift > cp0_compare_value) { 94 drift -= cp0_compare_value; 95 CPU->missed_clock_ticks++; 96 } 97 nextcount = cp0_count_read() + cp0_compare_value - drift; 98 cp0_compare_write(nextcount); 82 99 clock(); 83 100 } … … 101 118 int_register(0, "swint0", swint0); 102 119 int_register(1, "swint1", swint1); 120 timer_start(); 103 121 } 104 122 -
arch/mips32/src/mips32.c
r3bf5976 rd6e5cbc 81 81 /* Initialize dispatch table */ 82 82 exception_init(); 83 interrupt_init();84 85 83 arc_init(); 86 84 … … 90 88 memcpy(CACHE_EXC, (char *)cache_error_entry, EXCEPTION_JUMP_SIZE); 91 89 90 interrupt_init(); 92 91 /* 93 92 * Switch to BEV normal level so that exception vectors point to the kernel. … … 100 99 */ 101 100 cp0_mask_all_int(); 101 102 102 /* 103 103 * Unmask hardware clock interrupt. 104 104 */ 105 105 cp0_unmask_int(TIMER_IRQ); 106 107 /*108 * Start hardware clock.109 */110 cp0_compare_write(cp0_compare_value + cp0_count_read());111 106 112 107 console_init();
Note:
See TracChangeset
for help on using the changeset viewer.
