Merge tag 'linux-user-for-7.1-pull-request' of https://gitlab.com/laurent_vivier...
[qemu.git] / pc-bios / s390-ccw / helper.h
1 /*
2 * Helper Functions
3 *
4 * Copyright (c) 2019 IBM Corp.
5 *
6 * Author(s): Jason J. Herne <jjherne@us.ibm.com>
7 *
8 * This work is licensed under the terms of the GNU GPL, version 2 or (at
9 * your option) any later version. See the COPYING file in the top-level
10 * directory.
11 */
12
13 #ifndef S390_CCW_HELPER_H
14 #define S390_CCW_HELPER_H
15
16 #include "s390-ccw.h"
17 #include "s390-time.h"
18
19 /* Avoids compiler warnings when casting a pointer to a u32 */
20 static inline uint32_t ptr2u32(void *ptr)
21 {
22 IPL_assert((uint64_t)ptr <= 0xffffffffull, "ptr2u32: ptr too large");
23 return (uint32_t)(uint64_t)ptr;
24 }
25
26 /* Avoids compiler warnings when casting a u32 to a pointer */
27 static inline void *u32toptr(uint32_t n)
28 {
29 return (void *)(uint64_t)n;
30 }
31
32 static inline void yield(void)
33 {
34 asm volatile ("diag %%r0,%%r0,0x44"
35 : :
36 : "memory", "cc");
37 }
38
39 static inline void sleep(unsigned int seconds)
40 {
41 ulong target = get_time_seconds() + seconds;
42
43 while (get_time_seconds() < target) {
44 yield();
45 }
46 }
47
48 #endif