1.1 --- a/pkg/devices/lib/dma/src/jz4780.cc Wed Feb 21 00:33:55 2024 +0100
1.2 +++ b/pkg/devices/lib/dma/src/jz4780.cc Fri Feb 23 22:52:35 2024 +0100
1.3 @@ -24,11 +24,14 @@
1.4 #include <l4/devices/hw_mmio_register_block.h>
1.5
1.6 #include <l4/sys/cache.h>
1.7 -#include <l4/sys/icu.h>
1.8 #include <l4/sys/ipc.h>
1.9 #include <l4/sys/irq.h>
1.10 +#include <l4/sys/rcv_endpoint.h>
1.11 #include <l4/util/util.h>
1.12
1.13 +#include <pthread.h>
1.14 +#include <pthread-l4.h>
1.15 +
1.16 #include <stdio.h>
1.17
1.18
1.19 @@ -394,7 +397,12 @@
1.20 Dma_jz4780_channel::wait_for_irq()
1.21 {
1.22 if (l4_is_valid_cap(_irq))
1.23 + {
1.24 + if (l4_error(l4_rcv_ep_bind_thread(_irq, pthread_l4_cap(pthread_self()), 0)))
1.25 + return false;
1.26 +
1.27 return !l4_error(l4_irq_receive(_irq, L4_IPC_NEVER)) && _chip->have_interrupt(_channel);
1.28 + }
1.29 else
1.30 return true;
1.31 }
1.32 @@ -406,7 +414,12 @@
1.33 Dma_jz4780_channel::wait_for_irq(unsigned int timeout)
1.34 {
1.35 if (l4_is_valid_cap(_irq))
1.36 + {
1.37 + if (l4_error(l4_rcv_ep_bind_thread(_irq, pthread_l4_cap(pthread_self()), 0)))
1.38 + return false;
1.39 +
1.40 return !l4_error(l4_irq_receive(_irq, l4_timeout(L4_IPC_TIMEOUT_NEVER, l4util_micros2l4to(timeout)))) && _chip->have_interrupt(_channel);
1.41 + }
1.42 else
1.43 return true;
1.44 }