aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorRoland Dreier <roland@topspin.com>2004-08-01 20:12:44 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-08-01 20:12:44 -0700
commit77e3ae29a790a02d1eade16ad6b52e974317b3c4 (patch)
tree5e3b409a003b8c0ea3d7ec36cb6e232388f0e844 /include
parent85d559af7552d8fcea3d82e569200e3303a4c98b (diff)
downloadhistory-77e3ae29a790a02d1eade16ad6b52e974317b3c4.tar.gz
[PATCH] MSI: MSI/MSI-X API updates
Second half of MSI rewrite: fix the API and update documentation. Split enabling MSI and MSI-X to separate pci_enable_msi()/pci_disable_msi() and pci_enable_msix()/pci_disable_msix() functions. free_irq() no longer has the side effect of freeing interrupt vectors (so a device driver can do multiple request_irq()/free_irq() cycles on the same MSI/MSI_X vector). From: Tom L. Nguyen <tom.l.nguyen@intel.com> Signed-off-by: Roland Dreier <roland@topspin.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/pci.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h
index abfb688bde5fb2..ae511a7e11f39a 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -831,16 +831,27 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass
extern struct pci_dev *isa_bridge;
#endif
+struct msix_entry {
+ u16 vector; /* kernel uses to write allocated vector */
+ u16 entry; /* driver uses to specify entry, OS writes */
+};
+
#ifndef CONFIG_PCI_USE_VECTOR
static inline void pci_scan_msi_device(struct pci_dev *dev) {}
static inline int pci_enable_msi(struct pci_dev *dev) {return -1;}
+static inline void pci_disable_msi(struct pci_dev *dev) {}
+static inline int pci_enable_msix(struct pci_dev* dev,
+ struct msix_entry *entries, int nvec) {return -1;}
+static inline void pci_disable_msix(struct pci_dev *dev) {}
static inline void msi_remove_pci_irq_vectors(struct pci_dev *dev) {}
#else
extern void pci_scan_msi_device(struct pci_dev *dev);
extern int pci_enable_msi(struct pci_dev *dev);
+extern void pci_disable_msi(struct pci_dev *dev);
+extern int pci_enable_msix(struct pci_dev* dev,
+ struct msix_entry *entries, int nvec);
+extern void pci_disable_msix(struct pci_dev *dev);
extern void msi_remove_pci_irq_vectors(struct pci_dev *dev);
-extern int msi_alloc_vectors(struct pci_dev* dev, int *vector, int nvec);
-extern int msi_free_vectors(struct pci_dev* dev, int *vector, int nvec);
#endif
#endif /* CONFIG_PCI */