diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2006-10-04 05:16:59 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-04 10:55:29 -0400 |
commit | 3b7d1921f4cdd6d6ddb7899ae7a8d413991c5cf4 (patch) | |
tree | 5f809e0c4310f60dfa6f65d54fbaf9f01e2ebff9 /drivers/pci/msi.h | |
parent | 277bc33bc2479707e88b0b2ae6fe56e8e4aabe81 (diff) |
[PATCH] msi: refactor and move the msi irq_chip into the arch code
It turns out msi_ops was simply not enough to abstract the architecture
specific details of msi. So I have moved the resposibility of constructing
the struct irq_chip to the architectures, and have two architecture specific
functions arch_setup_msi_irq, and arch_teardown_msi_irq.
For simple architectures those functions can do all of the work. For
architectures with platform dependencies they can call into the appropriate
platform code.
With this msi.c is finally free of assuming you have an apic, and this
actually takes less code.
The helpers for the architecture specific code are declared in the linux/msi.h
to keep them separate from the msi functions used by drivers in linux/pci.h
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Andi Kleen <ak@suse.de>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Greg KH <greg@kroah.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/pci/msi.h')
-rw-r--r-- | drivers/pci/msi.h | 27 |
1 files changed, 0 insertions, 27 deletions
diff --git a/drivers/pci/msi.h b/drivers/pci/msi.h index 77823bfed5c1..f0cca1772f9c 100644 --- a/drivers/pci/msi.h +++ b/drivers/pci/msi.h | |||
@@ -6,8 +6,6 @@ | |||
6 | #ifndef MSI_H | 6 | #ifndef MSI_H |
7 | #define MSI_H | 7 | #define MSI_H |
8 | 8 | ||
9 | #include <asm/msi.h> | ||
10 | |||
11 | /* | 9 | /* |
12 | * MSI-X Address Register | 10 | * MSI-X Address Register |
13 | */ | 11 | */ |
@@ -49,29 +47,4 @@ | |||
49 | #define msix_mask(address) (address | PCI_MSIX_FLAGS_BITMASK) | 47 | #define msix_mask(address) (address | PCI_MSIX_FLAGS_BITMASK) |
50 | #define msix_is_pending(address) (address & PCI_MSIX_FLAGS_PENDMASK) | 48 | #define msix_is_pending(address) (address & PCI_MSIX_FLAGS_PENDMASK) |
51 | 49 | ||
52 | struct msi_desc { | ||
53 | struct { | ||
54 | __u8 type : 5; /* {0: unused, 5h:MSI, 11h:MSI-X} */ | ||
55 | __u8 maskbit : 1; /* mask-pending bit supported ? */ | ||
56 | __u8 unused : 1; | ||
57 | __u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */ | ||
58 | __u8 pos; /* Location of the msi capability */ | ||
59 | __u16 entry_nr; /* specific enabled entry */ | ||
60 | unsigned default_irq; /* default pre-assigned irq */ | ||
61 | }msi_attrib; | ||
62 | |||
63 | struct { | ||
64 | __u16 head; | ||
65 | __u16 tail; | ||
66 | }link; | ||
67 | |||
68 | void __iomem *mask_base; | ||
69 | struct pci_dev *dev; | ||
70 | |||
71 | #ifdef CONFIG_PM | ||
72 | /* PM save area for MSIX address/data */ | ||
73 | struct msi_msg msg_save; | ||
74 | #endif | ||
75 | }; | ||
76 | |||
77 | #endif /* MSI_H */ | 50 | #endif /* MSI_H */ |