genode/repos/dde_linux/src/include/lx_emul/impl/delay.h
Christian Helmuth 6315e4503e dde_linux: adapt to changes in os/duration.h
The Linux emulation library provides preprocessor macros for min() and
max(), which now clash with implementation in duration.h. So, we disable
those macros in the delay implementation.
2019-01-07 12:25:44 +01:00

65 lines
1.3 KiB
C

/*
* \brief Implementation of linux/delay.h
* \author Norman Feske
* \date 2015-09-09
*/
/*
* Copyright (C) 2015-2017 Genode Labs GmbH
*
* This file is distributed under the terms of the GNU General Public License
* version 2.
*/
/*
* Disable preprocessor macros that are incompatible to Genode headers for this
* file.
*/
#pragma push_macro("max")
#pragma push_macro("min")
#undef max
#undef min
/* Genode includes */
#include <timer_session/connection.h>
#include <lx_kit/env.h>
#include <lx_kit/timer.h>
/*
* XXX "We may consider to use the Lx::Timer instead of opening a dedicated
* timer session" which I tried during the deprecation warning removal
* but it did not work out. At least the intel_fb at that point got stuck
* because the workqueue task got mutex blocked.
*/
static Genode::Constructible<Timer::Connection> _delay_timer;
static inline void __delay_timer(unsigned long usecs)
{
if (!_delay_timer.constructed()) {
_delay_timer.construct(Lx_kit::env().env());
}
_delay_timer->usleep(usecs);
}
void udelay(unsigned long usecs)
{
__delay_timer(usecs);
Lx::timer_update_jiffies();
}
void msleep(unsigned int msecs)
{
__delay_timer(1000 * msecs);
Lx::timer_update_jiffies();
}
void mdelay(unsigned long msecs) { msleep(msecs); }
#pragma pop_macro("max")
#pragma pop_macro("min")