1# zx_interrupt_ack
2
3## NAME
4
5<!-- Updated by update-docs-from-abigen, do not edit. -->
6
7interrupt_ack - Acknowledge an interrupt and re-arm it.
8
9## SYNOPSIS
10
11<!-- Updated by update-docs-from-abigen, do not edit. -->
12
13```
14#include <zircon/syscalls.h>
15
16zx_status_t zx_interrupt_ack(zx_handle_t handle);
17```
18
19## DESCRIPTION
20
21`zx_interrupt_ack()` acknowledges an interrupt object, causing it to be eligible
22to trigger again (and delivering a packet to the port it is bound to).
23
24If the interrupt object is a physical interrupt, if it is a level interrupt and
25still asserted, or is an edge interrupt that has been asserted since it last
26triggered, the interrupt will trigger immediately, delivering a packet to the
27port it is bound to.
28
29Virtual interrupts behave as edge interrupts.
30
31This syscall only operates on interrupts which are bound to a port.  Interrupts
32being waited upon with [`zx_interrupt_wait()`] do not need to be re-armed with this
33call -- it happens automatically when [`zx_interrupt_wait()`] is called.
34
35## RIGHTS
36
37<!-- Updated by update-docs-from-abigen, do not edit. -->
38
39*handle* must be of type **ZX_OBJ_TYPE_INTERRUPT** and have **ZX_RIGHT_WRITE**.
40
41## RETURN VALUE
42
43`zx_interrupt_ack()` returns **ZX_OK** on success. In the event
44of failure, a negative error value is returned.
45
46## ERRORS
47
48**ZX_ERR_BAD_HANDLE** *handle* is an invalid handle.
49
50**ZX_ERR_WRONG_TYPE** *handle* is not an interrupt object.
51
52**ZX_ERR_BAD_STATE** *handle* is not bound to a port.
53
54**ZX_ERR_CANCELED**  [`zx_interrupt_destroy()`] was called on *handle*.
55
56**ZX_ERR_ACCESS_DENIED** *handle* lacks **ZX_RIGHT_WRITE**.
57
58## SEE ALSO
59
60 - [`zx_handle_close()`]
61 - [`zx_interrupt_bind()`]
62 - [`zx_interrupt_create()`]
63 - [`zx_interrupt_destroy()`]
64 - [`zx_interrupt_trigger()`]
65 - [`zx_interrupt_wait()`]
66 - [`zx_port_wait()`]
67
68<!-- References updated by update-docs-from-abigen, do not edit. -->
69
70[`zx_handle_close()`]: handle_close.md
71[`zx_interrupt_bind()`]: interrupt_bind.md
72[`zx_interrupt_create()`]: interrupt_create.md
73[`zx_interrupt_destroy()`]: interrupt_destroy.md
74[`zx_interrupt_trigger()`]: interrupt_trigger.md
75[`zx_interrupt_wait()`]: interrupt_wait.md
76[`zx_port_wait()`]: port_wait.md
77