| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library zx; |
| |
| @transport("Syscall") |
| protocol interrupt { |
| /// Create an interrupt object. |
| /// Rights: src_obj must have resource kind ZX_RSRC_KIND_IRQ. |
| interrupt_create(resource struct { |
| src_obj handle:RESOURCE; |
| src_num uint32; |
| options uint32; |
| }) -> (resource struct { |
| status status; |
| out_handle handle:INTERRUPT; |
| }); |
| |
| /// Bind an interrupt object to a port. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_INTERRUPT and have ZX_RIGHT_READ. |
| /// Rights: port_handle must be of type ZX_OBJ_TYPE_PORT and have ZX_RIGHT_WRITE. |
| interrupt_bind(resource struct { |
| handle handle:INTERRUPT; |
| port_handle handle:PORT; |
| key uint64; |
| options uint32; |
| }) -> (struct { |
| status status; |
| }); |
| |
| /// Wait for an interrupt. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_INTERRUPT and have ZX_RIGHT_WAIT. |
| @blocking |
| interrupt_wait(resource struct { |
| handle handle:INTERRUPT; |
| }) -> (struct { |
| status status; |
| out_timestamp optional_time; |
| }); |
| |
| // TODO(fxbug.dev/32803): No DESTROY rights here. |
| /// Destroys an interrupt object. |
| interrupt_destroy(resource struct { |
| handle handle:INTERRUPT; |
| }) -> (struct { |
| status status; |
| }); |
| |
| /// Acknowledge an interrupt and re-arm it. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_INTERRUPT and have ZX_RIGHT_WRITE. |
| interrupt_ack(resource struct { |
| handle handle:INTERRUPT; |
| }) -> (struct { |
| status status; |
| }); |
| |
| /// Triggers a virtual interrupt object. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_INTERRUPT and have ZX_RIGHT_SIGNAL. |
| interrupt_trigger(resource struct { |
| handle handle:INTERRUPT; |
| options uint32; |
| timestamp time; |
| }) -> (struct { |
| status status; |
| }); |
| |
| /// Bind an interrupt object to a VCPU. |
| /// Rights: handle must be of type ZX_OBJ_TYPE_INTERRUPT and have ZX_RIGHT_READ. |
| /// Rights: vcpu must be of type ZX_OBJ_TYPE_VCPU and have ZX_RIGHT_WRITE. |
| interrupt_bind_vcpu(resource struct { |
| handle handle:INTERRUPT; |
| vcpu handle:VCPU; |
| options uint32; |
| }) -> (struct { |
| status status; |
| }); |
| }; |