]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
inmates: Add delay_us service to timing library
authorJan Kiszka <jan.kiszka@siemens.com>
Sat, 19 Jul 2014 14:05:06 +0000 (16:05 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Tue, 22 Jul 2014 13:49:33 +0000 (15:49 +0200)
This performs a busy-wait for the specified microseconds.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
inmates/lib/x86/inmate.h
inmates/lib/x86/timing.c

index adc3b56ed1842acf0b44c1549bebdaa8d3ecab6b..0f7b5e12a5b4d7ba058f9c7b0d8c5ba33f649d93 100644 (file)
@@ -18,6 +18,7 @@
 #define INMATE_CS64            0x10
 #define INMATE_DS32            0x18
 
+#define NS_PER_USEC            1000UL
 #define NS_PER_MSEC            1000000UL
 #define NS_PER_SEC             1000000000UL
 
@@ -210,6 +211,7 @@ void ioapic_pin_set_vector(unsigned int pin,
 void inmate_main(void);
 
 unsigned long pm_timer_read(void);
+void delay_us(unsigned long microsecs);
 unsigned long apic_timer_init(unsigned int vector);
 void apic_timer_set(unsigned long timeout_ns);
 
index c3b722fce6e2ab888d1c501b962586f0604eb7f7..bb53a89abe3f7a2ac640473c71044a8b95d1f3c0 100644 (file)
@@ -34,6 +34,14 @@ unsigned long pm_timer_read(void)
        return tmr + overflows;
 }
 
+void delay_us(unsigned long microsecs)
+{
+       unsigned long timeout = pm_timer_read() + microsecs * NS_PER_USEC;
+
+       while ((long)(timeout - pm_timer_read()) > 0)
+               cpu_relax();
+}
+
 unsigned long apic_timer_init(unsigned int vector)
 {
        unsigned long start, end;