genirq/msi: Move MSI sysfs handling from PCI to MSI core
[linux-2.6-microblaze.git] / include / linux / msi.h
index aef35fd..49cf6eb 100644 (file)
@@ -107,7 +107,8 @@ struct ti_sci_inta_msi_desc {
  *                     address or data changes
  * @write_msi_msg_data:        Data parameter for the callback.
  *
- * @masked:    [PCI MSI/X] Mask bits
+ * @msi_mask:  [PCI MSI]   MSI cached mask bits
+ * @msix_ctrl: [PCI MSI-X] MSI-X cached per vector control bits
  * @is_msix:   [PCI MSI/X] True if MSI-X
  * @multiple:  [PCI MSI/X] log2 num of messages allocated
  * @multi_cap: [PCI MSI/X] log2 num of messages supported
@@ -139,7 +140,10 @@ struct msi_desc {
        union {
                /* PCI MSI/X specific data */
                struct {
-                       u32 masked;
+                       union {
+                               u32 msi_mask;
+                               u32 msix_ctrl;
+                       };
                        struct {
                                u8      is_msix         : 1;
                                u8      multiple        : 3;
@@ -232,16 +236,17 @@ void free_msi_entry(struct msi_desc *entry);
 void __pci_read_msi_msg(struct msi_desc *entry, struct msi_msg *msg);
 void __pci_write_msi_msg(struct msi_desc *entry, struct msi_msg *msg);
 
-u32 __pci_msix_desc_mask_irq(struct msi_desc *desc, u32 flag);
-u32 __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag);
 void pci_msi_mask_irq(struct irq_data *data);
 void pci_msi_unmask_irq(struct irq_data *data);
 
+const struct attribute_group **msi_populate_sysfs(struct device *dev);
+void msi_destroy_sysfs(struct device *dev,
+                      const struct attribute_group **msi_irq_groups);
+
 /*
  * The arch hooks to setup up msi irqs. Default functions are implemented
  * as weak symbols so that they /can/ be overriden by architecture specific
- * code if needed. These hooks must be enabled by the architecture or by
- * drivers which depend on them via msi_controller based MSI handling.
+ * code if needed. These hooks can only be enabled by the architecture.
  *
  * If CONFIG_PCI_MSI_ARCH_FALLBACKS is not selected they are replaced by
  * stubs with warnings.
@@ -251,7 +256,6 @@ int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc);
 void arch_teardown_msi_irq(unsigned int irq);
 int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
 void arch_teardown_msi_irqs(struct pci_dev *dev);
-void default_teardown_msi_irqs(struct pci_dev *dev);
 #else
 static inline int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
 {
@@ -272,19 +276,6 @@ static inline void arch_teardown_msi_irqs(struct pci_dev *dev)
 void arch_restore_msi_irqs(struct pci_dev *dev);
 void default_restore_msi_irqs(struct pci_dev *dev);
 
-struct msi_controller {
-       struct module *owner;
-       struct device *dev;
-       struct device_node *of_node;
-       struct list_head list;
-
-       int (*setup_irq)(struct msi_controller *chip, struct pci_dev *dev,
-                        struct msi_desc *desc);
-       int (*setup_irqs)(struct msi_controller *chip, struct pci_dev *dev,
-                         int nvec, int type);
-       void (*teardown_irq)(struct msi_controller *chip, unsigned int irq);
-};
-
 #ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN
 
 #include <linux/irqhandler.h>