diff options
author | Marvin Borner | 2020-08-09 17:27:08 +0200 |
---|---|---|
committer | Marvin Borner | 2020-08-09 17:27:08 +0200 |
commit | 544acef0986977ef9d3a05d87bb9f55163b1280a (patch) | |
tree | 764d28f454b818c3ac19d59df17ecd914f9d7ecf /lib/inc/cpu.h | |
parent | 162d024a53e1e31e00ff0b6f47dd4590edebc551 (diff) |
Temporary cpu and serial drivers in libc
Diffstat (limited to 'lib/inc/cpu.h')
-rw-r--r-- | lib/inc/cpu.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/inc/cpu.h b/lib/inc/cpu.h new file mode 100644 index 0000000..eb09291 --- /dev/null +++ b/lib/inc/cpu.h @@ -0,0 +1,29 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + +#ifndef CPU_H +#define CPU_H + +#include <def.h> + +u8 inb(u16 port); +u16 inw(u16 port); +u32 inl(u16 port); +void insl(u16 port, void *addr, int n); + +void outb(u16 port, u8 data); +void outw(u16 port, u16 data); +void outl(u16 port, u32 data); +void cli(); +void sti(); +void hlt(); +void idle(); + +static inline void spinlock(int *ptr) +{ + int prev; + do + __asm__ volatile("lock xchgl %0,%1" : "=a"(prev) : "m"(*ptr), "a"(1)); + while (prev); +} + +#endif |