InterruptWait(), InterruptWait_r()
Wait for a hardware interrupt
Synopsis:
#include <sys/neutrino.h>
int InterruptWait( int flags,
const uint64_t * timeout );
int InterruptWait_r( int flags,
const uint64_t * timeout );
Arguments:
- flags
- A bitwise OR of zero or more of the following values:
- _NTO_INTR_WAIT_FLAGS_FAST
- _NTO_INTR_WAIT_FLAGS_UNMASK
For more information, see
Flags,
below. - timeout
- This should currently be NULL. This may change in future versions.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The InterruptWait() or InterruptWait_r() kernel calls wait for a hardware interrupt. These calls block while waiting for an interrupt to occur. For more information, see Blocking states below.
The InterruptWait() and InterruptWait_r() functions are identical except in the way they indicate errors. See the Returns section for details.
On a multicore system, a thread that calls InterruptWait() runs on any CPU, limited only by the scheduler and the runmask.
Flags
The flags argument is a bitwise OR of zero or more of the following values:
- _NTO_INTR_WAIT_FLAGS_FAST
- Use a lightweight blocking mechanism when waiting for an interrupt. Timeouts aren't
supported if you use this flag.Note:This flag is only valid from an IST that called InterruptAttachThread().
- _NTO_INTR_WAIT_FLAGS_UNMASK
- Unmask the interrupt before waiting. You won't need to call InterruptUnmask().
Blocking states
- STATE_INTR
- If the calling thread called InterruptAttachThread() and became an IST, the kernel blocks the IST on its interrupt semaphore while waiting for an interrupt to occur.
Returns:
The only difference between these functions is the way they indicate errors:
- InterruptWait()
- If an error occurs, -1 is returned and errno is set. Any other value returned indicates success.
- InterruptWait_r()
- EOK is returned on success. This function does NOT set errno. If an error occurs, any value in the Errors section may be returned.
Errors:
- EINTR
- The call was interrupted by a signal.
- ENODEV
- The calling thread isn't an IST.
- ENOTSUP
- The reserved arguments aren't NULL.
- ETIMEDOUT
- A kernel timeout unblocked the call. See TimerTimeout().
Classification:
Safety: | |
---|---|
Cancellation point | No |
Signal handler | Yes |
Thread | Yes |