diff options
Diffstat (limited to 'src/include/smp.h')
-rw-r--r-- | src/include/smp.h | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/include/smp.h b/src/include/smp.h index f4e3aa8..e331036 100644 --- a/src/include/smp.h +++ b/src/include/smp.h @@ -1,7 +1,10 @@ #ifndef SMP_INCLUDED #define SMP_INCLUDED #include <stdint.h> -void smp_boot(); +#include <stdbool.h> +#include <cpuid.h> +#include <printf.h> +void smp_prepare(); extern uint8_t corecount; static inline void lock(uint8_t *lock) { @@ -18,9 +21,25 @@ static inline void unlock(uint8_t *lock) { asm("lock andb [%0], 0"::"r"(lock)); } -static inline void waitup(uint8_t *loto) { +static inline bool get_set_mutex(uint16_t *mutex) { + bool ret; + asm("lock bts %1, 0\n" + "jc .mutex_taken\n" + "mov %0, 0\n" + "jmp .done\n" + ".mutex_taken:\n" + "mov %0, 1\n" + ".done:\n" + :"=r"(ret) + :"m"(*mutex)); + return ret; } + + +//THIS IS ONLY UNTIL WE GET MULTITHREADING SET UP +uint8_t get_coreid(); + #define CREATE_LOTO(name) #endif |