@@ -10,6 +10,34 @@ struct msi_msg {
u32 data; /* 16 bits of msi message data */
};
+struct msi_ops;
+
+struct msi_irqs {
+ u8 msi_enabled:1;
+ u8 msix_enabled:1;
+ int node;
+ struct list_head msi_list;
+ void *data;
+ struct msi_ops *ops;
+};
+
+struct msix_entry {
+ u32 vector; /* kernel uses to write allocated vector */
+ u16 entry; /* driver uses to specify entry, OS writes */
+};
+
+struct msi_ops {
+ void (*msi_set_enable)(struct msi_irqs *msi, int enable, int type);
+ struct msi_desc *(*msi_setup_entry)(struct msi_irqs *msi);
+ int (*msix_setup_entries)(struct msi_irqs *msi, void __iomem *base,
+ struct msix_entry *entries, int nvec);
+ u32 (*msi_mask_irq)(struct msi_desc *desc, u32 mask, u32 flag);
+ u32 (*msix_mask_irq)(struct msi_desc *desc, u32 flag);
+ void (*msi_read_message)(struct msi_desc *desc, struct msi_msg *msg);
+ void (*msi_write_message)(struct msi_desc *desc, struct msi_msg *msg);
+ void (*msi_set_intx)(struct msi_irqs *msi, int enable);
+};
+
/* Helper functions */
struct irq_data;
struct msi_desc;
@@ -42,7 +70,7 @@ struct msi_desc {
void __iomem *mask_base;
u8 mask_pos;
};
- struct pci_dev *dev;
+ struct msi_irqs *msi;
/* Last set MSI message */
struct msi_msg msg;
@@ -32,8 +32,8 @@
#include <uapi/linux/pci.h>
#include <linux/pci_ids.h>
-
#include <linux/msi.h>
+
/*
* The PCI interface treats multi-function devices as independent
* devices. The slot/function address of each device is encoded
@@ -1182,11 +1182,6 @@ enum pci_dma_burst_strategy {
strategy_parameter byte boundaries */
};
-struct msix_entry {
- u32 vector; /* kernel uses to write allocated vector */
- u16 entry; /* driver uses to specify entry, OS writes */
-};
-
#ifdef CONFIG_PCI_MSI
int pci_msi_vec_count(struct pci_dev *dev);
Currently, MSI driver is bonding with PCI everywhere. Now introduce a new struct msi_irqs to manage all MSI related informations in a MSI support device. In addition, we introduce struct msi_ops to hook all device specific MSI operations. Then MSI driver can be decoupled with PCI. Signed-off-by: Yijing Wang <wangyijing@huawei.com> --- include/linux/msi.h | 30 +++++++++++++++++++++++++++++- include/linux/pci.h | 7 +------ 2 files changed, 30 insertions(+), 7 deletions(-)