From dcd8ad63316eac672492bc18112bbbb52811c3fc Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Fri, 24 Apr 2015 05:35:48 +0200 Subject: More structural changes to get ready for stand-alone event engines --- pcilib/irq.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 pcilib/irq.c (limited to 'pcilib/irq.c') diff --git a/pcilib/irq.c b/pcilib/irq.c new file mode 100644 index 0000000..3d387bb --- /dev/null +++ b/pcilib/irq.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "pci.h" + +#include "tools.h" +#include "error.h" + +int pcilib_wait_irq(pcilib_t *ctx, pcilib_irq_hw_source_t source, pcilib_timeout_t timeout, size_t *count) { + int err; + + interrupt_wait_t arg = { 0 }; + + arg.source = source; + arg.timeout = timeout; + + if (count) arg.count = 1; + + err = ioctl(ctx->handle, PCIDRIVER_IOC_WAITI, &arg); + if (err) { + pcilib_error("PCIDRIVER_IOC_WAITI ioctl have failed"); + return PCILIB_ERROR_FAILED; + } + + if (!arg.count) return PCILIB_ERROR_TIMEOUT; + + if (count) *count = arg.count; + + return 0; +} + +int pcilib_clear_irq(pcilib_t *ctx, pcilib_irq_hw_source_t source) { + int err; + + err = ioctl(ctx->handle, PCIDRIVER_IOC_CLEAR_IOQ, source); + if (err) { + pcilib_error("PCIDRIVER_IOC_CLEAR_IOQ ioctl have failed"); + return PCILIB_ERROR_FAILED; + } + + return 0; +} + + -- cgit v1.2.3