aboutsummaryrefslogtreecommitdiff
path: root/pc-bios/s390-ccw/helper.h
diff options
context:
space:
mode:
Diffstat (limited to 'pc-bios/s390-ccw/helper.h')
-rw-r--r--pc-bios/s390-ccw/helper.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/pc-bios/s390-ccw/helper.h b/pc-bios/s390-ccw/helper.h
index 78d5bc7442..dfcfea0ff0 100644
--- a/pc-bios/s390-ccw/helper.h
+++ b/pc-bios/s390-ccw/helper.h
@@ -14,11 +14,12 @@
#define S390_CCW_HELPER_H
#include "s390-ccw.h"
+#include "s390-time.h"
/* Avoids compiler warnings when casting a pointer to a u32 */
static inline uint32_t ptr2u32(void *ptr)
{
- IPL_assert((uint64_t)ptr <= 0xffffffff, "ptr2u32: ptr too large");
+ IPL_assert((uint64_t)ptr <= 0xffffffffull, "ptr2u32: ptr too large");
return (uint32_t)(uint64_t)ptr;
}
@@ -28,4 +29,20 @@ static inline void *u32toptr(uint32_t n)
return (void *)(uint64_t)n;
}
+static inline void yield(void)
+{
+ asm volatile ("diag 0,0,0x44"
+ : :
+ : "memory", "cc");
+}
+
+static inline void sleep(unsigned int seconds)
+{
+ ulong target = get_time_seconds() + seconds;
+
+ while (get_time_seconds() < target) {
+ yield();
+ }
+}
+
#endif