+msienv_t
+isrm_msi_start(struct device* dev)
+{
+ /*
+ * In x86, the MSI topology is rather simple, as the only
+ * source is the PCI itself, and the write destination is
+ * explictly defined in specification, so we don't need the
+ * msienv to hold dynamically probed address
+ */
+ return NULL;
+}
+
+int
+isrm_msi_avaliable(msienv_t msienv)
+{
+ return 1;
+}
+
+msi_vector_t
+isrm_msi_alloc(msienv_t msienv, cpu_t cpu, int index, isr_cb handler)
+{
+ unsigned int iv = isrm_ivexalloc(handler);
+
+ // we ignore the cpu redirection for now.
+ return (msi_vector_t){
+ .msi_addr = __APIC_BASE_PADDR,
+ .msi_data = iv,
+ .mapped_iv = iv
+ };
+}
+
+void
+isrm_msi_set_sideband(msienv_t msienv, ptr_t sideband)
+{
+ return;
+}
+
+void
+isrm_msi_done(msienv_t msienv)
+{
+ return;
+}
+
+
+
+int
+isrm_bind_dtn(struct dtn_intr* node)
+{
+ fail("not supported");
+}