diff options
Diffstat (limited to 'sys/i386/i386/msi.c')
-rw-r--r-- | sys/i386/i386/msi.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/sys/i386/i386/msi.c b/sys/i386/i386/msi.c index 7be702a..321078c 100644 --- a/sys/i386/i386/msi.c +++ b/sys/i386/i386/msi.c @@ -480,6 +480,30 @@ msix_alloc(device_t dev, int index, int *irq, int *new) } int +msix_remap(int index, int irq) +{ + struct msi_intsrc *msi; + + sx_xlock(&msi_sx); + msi = (struct msi_intsrc *)intr_lookup_source(irq); + if (msi == NULL) { + sx_xunlock(&msi_sx); + return (ENOENT); + } + + /* Make sure this is an MSI-X message. */ + if (!msi->msi_msix) { + sx_xunlock(&msi_sx); + return (EINVAL); + } + + KASSERT(msi->msi_dev != NULL, ("unowned message")); + msi->msi_index = index; + sx_xunlock(&msi_sx); + return (0); +} + +int msix_release(int irq) { struct msi_intsrc *msi; |