[zx] Add zx::interrupt::bind_vcpu

This exposes the zx_interrupt_bind_vcpu syscall through the
zx::interrupt object.

MAC-180

Test: N/A
Change-Id: I3353d6546f6471aee179b74086343f570bcedf59
diff --git a/system/ulib/zx/include/lib/zx/interrupt.h b/system/ulib/zx/include/lib/zx/interrupt.h
index 2b874d3..2f559ae 100644
--- a/system/ulib/zx/include/lib/zx/interrupt.h
+++ b/system/ulib/zx/include/lib/zx/interrupt.h
@@ -10,6 +10,7 @@
 #include <lib/zx/port.h>
 #include <lib/zx/resource.h>
 #include <lib/zx/time.h>
+#include <lib/zx/vcpu.h>
 
 namespace zx {
 
@@ -49,6 +50,10 @@
         return zx_interrupt_bind(get(), port.get(), key, options);
     }
 
+    zx_status_t bind_vcpu(const zx::vcpu& vcpu, uint32_t options) {
+        return zx_interrupt_bind_vcpu(get(), vcpu.get(), options);
+    }
+
     zx_status_t ack() {
         return zx_interrupt_ack(get());
     }
diff --git a/system/utest/core/interrupt/interrupt-test.cpp b/system/utest/core/interrupt/interrupt-test.cpp
index 92246cc..5508fcc 100644
--- a/system/utest/core/interrupt/interrupt-test.cpp
+++ b/system/utest/core/interrupt/interrupt-test.cpp
@@ -189,8 +189,8 @@
     ASSERT_EQ(zx::vcpu::create(guest, 0, 0, &vcpu1), ZX_OK);
     ASSERT_EQ(zx::vcpu::create(guest, 0, 0, &vcpu2), ZX_OK);
 
-    ASSERT_EQ(zx_interrupt_bind_vcpu(interrupt.get(), vcpu1.get(), 0), ZX_OK);
-    ASSERT_EQ(zx_interrupt_bind_vcpu(interrupt.get(), vcpu2.get(), 0), ZX_OK);
+    ASSERT_EQ(interrupt.bind_vcpu(vcpu1, 0), ZX_OK);
+    ASSERT_EQ(interrupt.bind_vcpu(vcpu2, 0), ZX_OK);
 
     END_TEST;
 }
@@ -218,7 +218,7 @@
     ASSERT_EQ(zx::vcpu::create(guest, 0, 0, &vcpu), ZX_OK);
 
     ASSERT_EQ(interrupt.bind(port, 0, 0), ZX_OK);
-    ASSERT_EQ(zx_interrupt_bind_vcpu(interrupt.get(), vcpu.get(), 0), ZX_ERR_NOT_SUPPORTED);
+    ASSERT_EQ(interrupt.bind_vcpu(vcpu, 0), ZX_ERR_NOT_SUPPORTED);
 
     END_TEST;
 }
@@ -246,7 +246,7 @@
     ASSERT_EQ(zx::vcpu::create(guest, 0, 0, &vcpu), ZX_OK);
 
     ASSERT_EQ(interrupt.bind(port, 0, 0), ZX_OK);
-    ASSERT_EQ(zx_interrupt_bind_vcpu(interrupt.get(), vcpu.get(), 0), ZX_ERR_ALREADY_BOUND);
+    ASSERT_EQ(interrupt.bind_vcpu(vcpu, 0), ZX_ERR_ALREADY_BOUND);
 
     END_TEST;
 }
@@ -276,8 +276,8 @@
     ASSERT_EQ(zx::guest::create(*resource, 0, &guest2, &vmar2), ZX_OK);
     ASSERT_EQ(zx::vcpu::create(guest2, 0, 0, &vcpu2), ZX_OK);
 
-    ASSERT_EQ(zx_interrupt_bind_vcpu(interrupt.get(), vcpu1.get(), 0), ZX_OK);
-    ASSERT_EQ(zx_interrupt_bind_vcpu(interrupt.get(), vcpu2.get(), 0), ZX_ERR_INVALID_ARGS);
+    ASSERT_EQ(interrupt.bind_vcpu(vcpu1, 0), ZX_OK);
+    ASSERT_EQ(interrupt.bind_vcpu(vcpu2, 0), ZX_ERR_INVALID_ARGS);
 
     END_TEST;
 }