diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-09-08 12:23:20 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-09-08 12:23:20 +0200 |
| commit | 77357ba0bd02eb9ef76af15697f62f6021c0a4fe (patch) | |
| tree | e60b2d74357168e423613fed8ec529aed84c564e /kernel | |
| parent | 2a204125c98699aa2baa8f6f91fc5129f6eb7385 (diff) | |
fixed waiting for keypress in bootloader.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel.c | 11 | ||||
| -rw-r--r-- | kernel/shell.c | 1 | ||||
| -rw-r--r-- | kernel/x86.c | 28 |
3 files changed, 40 insertions, 0 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c index a9f8e54..533ff7c 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -130,13 +130,24 @@ void kernel_main(uint32_t initial_stack, int mp) // mem_init(0x7c00+1,*((uint16_t *)(0x7c00))); + // init spinlocks + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"Initializing Spinlocks"); + + init_spinlocks(); + + lock_spin(0); + // // Start the other Processors (also before paging !) // smp_log_procdata(&procdata); + + lock_spin(0); + smp_start_aps(&procdata,0x80000); // starts at 0x90000 // but it will be copied over mbr + // // Activate Virtual Memory (paging) // diff --git a/kernel/shell.c b/kernel/shell.c index b377ce0..9767a58 100644 --- a/kernel/shell.c +++ b/kernel/shell.c @@ -85,6 +85,7 @@ void shell_execute() else { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"command unknown"); + lock_release(0); } pos=0; diff --git a/kernel/x86.c b/kernel/x86.c index 782baec..7775ab7 100644 --- a/kernel/x86.c +++ b/kernel/x86.c @@ -49,6 +49,10 @@ uint32_t x86_get_cr1() return cr; } +void x86_mov(uint8_t val) +{ +} + uint32_t x86_get_cr2() { uint32_t cr; @@ -134,4 +138,28 @@ void x86_flush_tlb(uint32_t addr) asm volatile("invlpg (%0)" ::"r" (addr) : "memory"); } +//xchg +volatile uint8_t x86_xchg(volatile uint8_t *addr, uint8_t val) +{ + uint8_t result; + + // test. because asm does not work !? + uint8_t oldval=*addr; + *addr=val; + return oldval; + + + + // The + in "+m" denotes a read-modify-write operand. + asm volatile("lock xchg %0, %1" : + "+m" (*addr), "=a" (result) : + "1" (val) : + "cc"); + + //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"xchg val:%d with addr:0x%08X : result: %d",val,addr,result); +// + return result; +} + + |
