1/*
2 * Copyright 2022, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _OBSD_COMPAT_SYS_SYSTM_H_
6#define _OBSD_COMPAT_SYS_SYSTM_H_
7
8
9#include_next <sys/systm.h>
10#include <sys/kernel.h>
11
12#include <int.h>
13
14
15#define	INFSLP	UINT64_MAX
16
17
18static inline void
19explicit_bzero(void *buf, size_t len)
20{
21	memset(buf, 0, len);
22}
23
24
25#define tsleep(identifier, priority, wmesg, timeout) \
26	msleep(identifier, &Giant, priority, wmesg, timeout)
27#define tsleep_nsec(identifier, priority, wmesg, nsecs) \
28	tsleep(identifier, priority, wmesg, USEC_2_TICKS(nsecs / 1000))
29
30
31#ifdef INVARIANTS
32#define DIAGNOSTIC
33#endif
34
35#ifdef DIAGNOSTIC
36#define KASSERT_OPENBSD(x)				ASSERT_ALWAYS(x)
37#define KASSERTMSG(x, format, args...)	ASSERT_ALWAYS_PRINT(x, format, args)
38#else
39#define KASSERT_OPENBSD(x)
40#define KASSERTMSG(x, format, args...)
41#endif
42
43#undef KASSERT
44#define KASSERT KASSERT_OPENBSD
45
46
47#define KERNEL_LOCK()	mtx_lock(&Giant)
48#define KERNEL_UNLOCK() mtx_unlock(&Giant)
49
50
51/* #pragma mark - interrupts */
52
53#define	IPL_NONE		0
54#define	IPL_HIGH		1
55
56#define	IPL_NET			IPL_NONE
57
58#define	IPL_MPSAFE		0x100
59
60#define	splsoft()		splraise(IPL_SOFT)
61#define	splsoftclock()	splraise(IPL_SOFTCLOCK)
62#define	splsoftnet()	splraise(IPL_SOFTNET)
63#define	splsofttty()	splraise(IPL_SOFTTTY)
64#define	splbio()		splraise(IPL_BIO)
65#define	splnet()		splraise(IPL_NET)
66#define	spltty()		splraise(IPL_TTY)
67#define	splvm()			splraise(IPL_VM)
68#define	splaudio()		splraise(IPL_AUDIO)
69#define	splclock()		splraise(IPL_CLOCK)
70#define	splsched()		splraise(IPL_SCHED)
71#define	splstatclock()	splraise(IPL_STATCLOCK)
72#define	splhigh()		splraise(IPL_HIGH)
73
74
75static inline int
76splraise(int ipl)
77{
78	if (ipl == IPL_NONE)
79		return 0;
80	return disable_interrupts();
81}
82
83
84static inline void
85splx(int ipl)
86{
87	restore_interrupts(ipl);
88}
89
90static void
91splassert(int ipl)
92{
93	const int ints = are_interrupts_enabled();
94	if (ints && ipl != IPL_NONE)
95		panic("splassert: interrupts enabled but should be disabled");
96	else if (!ints && ipl == IPL_NONE)
97		panic("splassert: interrupts disabled but should be enabled");
98}
99
100
101#endif	/* _OBSD_COMPAT_SYS_SYSTM_H_ */
102