]> err.no Git - linux-2.6/blobdiff - include/linux/irq.h
Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
[linux-2.6] / include / linux / irq.h
index 8930fb0ac9c7f91bbc5c0c9f012e58302137f171..1695054e8c63909a62b8e12d16fe5ca1c8cc625c 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/spinlock.h>
 #include <linux/cpumask.h>
 #include <linux/irqreturn.h>
+#include <linux/errno.h>
 
 #include <asm/irq.h>
 #include <asm/ptrace.h>
@@ -57,10 +58,9 @@ typedef      void fastcall (*irq_flow_handler_t)(unsigned int irq,
 #define IRQ_NOPROBE            0x00020000      /* IRQ is not valid for probing */
 #define IRQ_NOREQUEST          0x00040000      /* IRQ cannot be requested */
 #define IRQ_NOAUTOEN           0x00080000      /* IRQ will not be enabled on request irq */
-#define IRQ_DELAYED_DISABLE    0x00100000      /* IRQ disable (masking) happens delayed. */
-#define IRQ_WAKEUP             0x00200000      /* IRQ triggers system wakeup */
-#define IRQ_MOVE_PENDING       0x00400000      /* need to re-target IRQ destination */
-#define IRQ_NO_BALANCING       0x00800000      /* IRQ is excluded from balancing */
+#define IRQ_WAKEUP             0x00100000      /* IRQ triggers system wakeup */
+#define IRQ_MOVE_PENDING       0x00200000      /* need to re-target IRQ destination */
+#define IRQ_NO_BALANCING       0x00400000      /* IRQ is excluded from balancing */
 
 #ifdef CONFIG_IRQ_PER_CPU
 # define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU)
@@ -130,6 +130,7 @@ struct irq_chip {
  *
  * @handle_irq:                highlevel irq-events handler [if NULL, __do_IRQ()]
  * @chip:              low level interrupt hardware access
+ * @msi_desc:          MSI descriptor
  * @handler_data:      per-IRQ data for the irq_chip methods
  * @chip_data:         platform-specific per-chip private data for the chip
  *                     methods, to allow shared chip implementations
@@ -146,8 +147,6 @@ struct irq_chip {
  * @dir:               /proc/irq/ procfs entry
  * @affinity_entry:    /proc/irq/smp_affinity procfs entry on SMP
  * @name:              flow handler name for /proc/interrupts output
- *
- * Pad this out to 32 bytes for cache and indexing reasons.
  */
 struct irq_desc {
        irq_flow_handler_t      handle_irq;
@@ -174,7 +173,7 @@ struct irq_desc {
        struct proc_dir_entry   *dir;
 #endif
        const char              *name;
-} ____cacheline_aligned;
+} ____cacheline_internodealigned_in_smp;
 
 extern struct irq_desc irq_desc[NR_IRQS];
 
@@ -199,17 +198,6 @@ extern int setup_irq(unsigned int irq, struct irqaction *new);
 # define handle_dynamic_tick(a)                do { } while (0)
 #endif
 
-#ifdef CONFIG_SMP
-static inline void set_native_irq_info(int irq, cpumask_t mask)
-{
-       irq_desc[irq].affinity = mask;
-}
-#else
-static inline void set_native_irq_info(int irq, cpumask_t mask)
-{
-}
-#endif
-
 #ifdef CONFIG_SMP
 
 #if defined(CONFIG_GENERIC_PENDING_IRQ) || defined(CONFIG_IRQBALANCE)
@@ -238,11 +226,21 @@ static inline void set_pending_irq(unsigned int irq, cpumask_t mask)
 
 #endif /* CONFIG_GENERIC_PENDING_IRQ */
 
+extern int irq_set_affinity(unsigned int irq, cpumask_t cpumask);
+extern int irq_can_set_affinity(unsigned int irq);
+
 #else /* CONFIG_SMP */
 
 #define move_native_irq(x)
 #define move_masked_irq(x)
 
+static inline int irq_set_affinity(unsigned int irq, cpumask_t cpumask)
+{
+       return -EINVAL;
+}
+
+static inline int irq_can_set_affinity(unsigned int irq) { return 0; }
+
 #endif /* CONFIG_SMP */
 
 #ifdef CONFIG_IRQBALANCE
@@ -318,9 +316,6 @@ extern void note_interrupt(unsigned int irq, struct irq_desc *desc,
 /* Resending of interrupts :*/
 void check_irq_resend(struct irq_desc *desc, unsigned int irq);
 
-/* Initialize /proc/irq/ */
-extern void init_irq_proc(void);
-
 /* Enable/disable irq debugging output: */
 extern int noirqdebug_setup(char *str);