Commit bc5e81a1 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Linus Torvalds
Browse files

[PATCH] x86_64 irq: Add constants for the reserved IRQ vectors.



For the ISA irqs we reserve 16 vectors.  This patch adds constants for
those vectors and modifies the code to use them.  Making the code a
little clearer and making it possible to move these vectors in the future.
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b93179bd
...@@ -299,7 +299,7 @@ void init_8259A(int auto_eoi) ...@@ -299,7 +299,7 @@ void init_8259A(int auto_eoi)
* outb_p - this has to work on a wide range of PC hardware. * outb_p - this has to work on a wide range of PC hardware.
*/ */
outb_p(0x11, 0x20); /* ICW1: select 8259A-1 init */ outb_p(0x11, 0x20); /* ICW1: select 8259A-1 init */
outb_p(0x20 + 0, 0x21); /* ICW2: 8259A-1 IR0-7 mapped to 0x20-0x27 */ outb_p(IRQ0_VECTOR, 0x21); /* ICW2: 8259A-1 IR0-7 mapped to 0x20-0x27 */
outb_p(0x04, 0x21); /* 8259A-1 (the master) has a slave on IR2 */ outb_p(0x04, 0x21); /* 8259A-1 (the master) has a slave on IR2 */
if (auto_eoi) if (auto_eoi)
outb_p(0x03, 0x21); /* master does Auto EOI */ outb_p(0x03, 0x21); /* master does Auto EOI */
...@@ -307,7 +307,7 @@ void init_8259A(int auto_eoi) ...@@ -307,7 +307,7 @@ void init_8259A(int auto_eoi)
outb_p(0x01, 0x21); /* master expects normal EOI */ outb_p(0x01, 0x21); /* master expects normal EOI */
outb_p(0x11, 0xA0); /* ICW1: select 8259A-2 init */ outb_p(0x11, 0xA0); /* ICW1: select 8259A-2 init */
outb_p(0x20 + 8, 0xA1); /* ICW2: 8259A-2 IR0-7 mapped to 0x28-0x2f */ outb_p(IRQ8_VECTOR, 0xA1); /* ICW2: 8259A-2 IR0-7 mapped to 0x28-0x2f */
outb_p(0x02, 0xA1); /* 8259A-2 is a slave on master's IR2 */ outb_p(0x02, 0xA1); /* 8259A-2 is a slave on master's IR2 */
outb_p(0x01, 0xA1); /* (slave's support for AEOI in flat mode outb_p(0x01, 0xA1); /* (slave's support for AEOI in flat mode
is to be investigated) */ is to be investigated) */
...@@ -398,24 +398,24 @@ device_initcall(i8259A_init_sysfs); ...@@ -398,24 +398,24 @@ device_initcall(i8259A_init_sysfs);
static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL}; static struct irqaction irq2 = { no_action, 0, CPU_MASK_NONE, "cascade", NULL, NULL};
DEFINE_PER_CPU(vector_irq_t, vector_irq) = { DEFINE_PER_CPU(vector_irq_t, vector_irq) = {
[0 ... FIRST_EXTERNAL_VECTOR - 1] = -1, [0 ... IRQ0_VECTOR - 1] = -1,
[FIRST_EXTERNAL_VECTOR + 0] = 0, [IRQ0_VECTOR] = 0,
[FIRST_EXTERNAL_VECTOR + 1] = 1, [IRQ1_VECTOR] = 1,
[FIRST_EXTERNAL_VECTOR + 2] = 2, [IRQ2_VECTOR] = 2,
[FIRST_EXTERNAL_VECTOR + 3] = 3, [IRQ3_VECTOR] = 3,
[FIRST_EXTERNAL_VECTOR + 4] = 4, [IRQ4_VECTOR] = 4,
[FIRST_EXTERNAL_VECTOR + 5] = 5, [IRQ5_VECTOR] = 5,
[FIRST_EXTERNAL_VECTOR + 6] = 6, [IRQ6_VECTOR] = 6,
[FIRST_EXTERNAL_VECTOR + 7] = 7, [IRQ7_VECTOR] = 7,
[FIRST_EXTERNAL_VECTOR + 8] = 8, [IRQ8_VECTOR] = 8,
[FIRST_EXTERNAL_VECTOR + 9] = 9, [IRQ9_VECTOR] = 9,
[FIRST_EXTERNAL_VECTOR + 10] = 10, [IRQ10_VECTOR] = 10,
[FIRST_EXTERNAL_VECTOR + 11] = 11, [IRQ11_VECTOR] = 11,
[FIRST_EXTERNAL_VECTOR + 12] = 12, [IRQ12_VECTOR] = 12,
[FIRST_EXTERNAL_VECTOR + 13] = 13, [IRQ13_VECTOR] = 13,
[FIRST_EXTERNAL_VECTOR + 14] = 14, [IRQ14_VECTOR] = 14,
[FIRST_EXTERNAL_VECTOR + 15] = 15, [IRQ15_VECTOR] = 15,
[FIRST_EXTERNAL_VECTOR + 16 ... NR_VECTORS - 1] = -1 [IRQ15_VECTOR + 1 ... NR_VECTORS - 1] = -1
}; };
void __init init_ISA_irqs (void) void __init init_ISA_irqs (void)
......
...@@ -54,22 +54,22 @@ struct irq_cfg { ...@@ -54,22 +54,22 @@ struct irq_cfg {
/* irq_cfg is indexed by the sum of all RTEs in all I/O APICs. */ /* irq_cfg is indexed by the sum of all RTEs in all I/O APICs. */
struct irq_cfg irq_cfg[NR_IRQS] __read_mostly = { struct irq_cfg irq_cfg[NR_IRQS] __read_mostly = {
[0] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 0 }, [0] = { .domain = CPU_MASK_ALL, .vector = IRQ0_VECTOR, },
[1] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 1 }, [1] = { .domain = CPU_MASK_ALL, .vector = IRQ1_VECTOR, },
[2] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 2 }, [2] = { .domain = CPU_MASK_ALL, .vector = IRQ2_VECTOR, },
[3] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 3 }, [3] = { .domain = CPU_MASK_ALL, .vector = IRQ3_VECTOR, },
[4] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 4 }, [4] = { .domain = CPU_MASK_ALL, .vector = IRQ4_VECTOR, },
[5] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 5 }, [5] = { .domain = CPU_MASK_ALL, .vector = IRQ5_VECTOR, },
[6] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 6 }, [6] = { .domain = CPU_MASK_ALL, .vector = IRQ6_VECTOR, },
[7] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 7 }, [7] = { .domain = CPU_MASK_ALL, .vector = IRQ7_VECTOR, },
[8] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 8 }, [8] = { .domain = CPU_MASK_ALL, .vector = IRQ8_VECTOR, },
[9] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 9 }, [9] = { .domain = CPU_MASK_ALL, .vector = IRQ9_VECTOR, },
[10] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 10 }, [10] = { .domain = CPU_MASK_ALL, .vector = IRQ10_VECTOR, },
[11] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 11 }, [11] = { .domain = CPU_MASK_ALL, .vector = IRQ11_VECTOR, },
[12] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 12 }, [12] = { .domain = CPU_MASK_ALL, .vector = IRQ12_VECTOR, },
[13] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 13 }, [13] = { .domain = CPU_MASK_ALL, .vector = IRQ13_VECTOR, },
[14] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 14 }, [14] = { .domain = CPU_MASK_ALL, .vector = IRQ14_VECTOR, },
[15] = { .domain = CPU_MASK_ALL, .vector = FIRST_EXTERNAL_VECTOR + 15 }, [15] = { .domain = CPU_MASK_ALL, .vector = IRQ15_VECTOR, },
}; };
static int assign_irq_vector(int irq, cpumask_t mask); static int assign_irq_vector(int irq, cpumask_t mask);
......
...@@ -35,6 +35,22 @@ ...@@ -35,6 +35,22 @@
/* /*
* Vectors 0x20-0x2f are used for ISA interrupts. * Vectors 0x20-0x2f are used for ISA interrupts.
*/ */
#define IRQ0_VECTOR FIRST_EXTERNAL_VECTOR
#define IRQ1_VECTOR IRQ0_VECTOR + 1
#define IRQ2_VECTOR IRQ0_VECTOR + 2
#define IRQ3_VECTOR IRQ0_VECTOR + 3
#define IRQ4_VECTOR IRQ0_VECTOR + 4
#define IRQ5_VECTOR IRQ0_VECTOR + 5
#define IRQ6_VECTOR IRQ0_VECTOR + 6
#define IRQ7_VECTOR IRQ0_VECTOR + 7
#define IRQ8_VECTOR IRQ0_VECTOR + 8
#define IRQ9_VECTOR IRQ0_VECTOR + 9
#define IRQ10_VECTOR IRQ0_VECTOR + 10
#define IRQ11_VECTOR IRQ0_VECTOR + 11
#define IRQ12_VECTOR IRQ0_VECTOR + 12
#define IRQ13_VECTOR IRQ0_VECTOR + 13
#define IRQ14_VECTOR IRQ0_VECTOR + 14
#define IRQ15_VECTOR IRQ0_VECTOR + 15
/* /*
* Special IRQ vectors used by the SMP architecture, 0xf0-0xff * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
...@@ -69,7 +85,7 @@ ...@@ -69,7 +85,7 @@
* we start at 0x31 to spread out vectors evenly between priority * we start at 0x31 to spread out vectors evenly between priority
* levels. (0x80 is the syscall vector) * levels. (0x80 is the syscall vector)
*/ */
#define FIRST_DEVICE_VECTOR 0x31 #define FIRST_DEVICE_VECTOR (IRQ15_VECTOR + 2)
#define FIRST_SYSTEM_VECTOR 0xef /* duplicated in irq.h */ #define FIRST_SYSTEM_VECTOR 0xef /* duplicated in irq.h */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment