[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 5/6] Move PIC interrupt vector base from 0x40 to 0x20
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 5/6] Move PIC interrupt vector base from 0x40 to 0x20 |
Date: |
Sun, 28 Mar 2021 23:27:41 +0200 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
This was mixing setting the base to 0x20 with the introduction of lapic.
I committed only the former. You can now include the latter with the
rest of the code that supports lapic.
Damien Zammit, le dim. 28 mars 2021 17:03:19 +1100, a ecrit:
> ---
> i386/i386/locore.S | 15 +++++++++++++++
> i386/i386/pic.h | 4 +++-
> i386/i386at/idt.h | 17 +++++++++++------
> i386/i386at/int_init.c | 15 +++++++++++++--
> 4 files changed, 42 insertions(+), 9 deletions(-)
>
> diff --git a/i386/i386/locore.S b/i386/i386/locore.S
> index bee3630c..8a1054a6 100644
> --- a/i386/i386/locore.S
> +++ b/i386/i386/locore.S
> @@ -607,6 +607,7 @@ ENTRY(call_continuation)
> jmp *%eax /* goto continuation */
>
>
> +/* IOAPIC has 24 interrupts, put spurious in the same array */
>
> #define INTERRUPT(n) \
> .data 2 ;\
> @@ -621,6 +622,7 @@ ENTRY(call_continuation)
> .data 2
> DATA(int_entry_table)
> .text
> +/* Legacy APIC interrupts or PIC interrupts */
> INTERRUPT(0)
> INTERRUPT(1)
> INTERRUPT(2)
> @@ -637,6 +639,19 @@ INTERRUPT(12)
> INTERRUPT(13)
> INTERRUPT(14)
> INTERRUPT(15)
> +#ifdef APIC
> +/* APIC PCI interrupts PIRQ A-H */
> +INTERRUPT(16)
> +INTERRUPT(17)
> +INTERRUPT(18)
> +INTERRUPT(19)
> +INTERRUPT(20)
> +INTERRUPT(21)
> +INTERRUPT(22)
> +INTERRUPT(23)
> +/* Spurious interrupt, set irq number to vect number */
> +INTERRUPT(255)
> +#endif
>
> /* XXX handle NMI - at least print a warning like Linux does. */
>
> diff --git a/i386/i386/pic.h b/i386/i386/pic.h
> index 6434bf08..0ccf1c9a 100644
> --- a/i386/i386/pic.h
> +++ b/i386/i386/pic.h
> @@ -96,7 +96,7 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> */
>
> #if defined(AT386) || defined(ATX86_64)
> -#define PICM_VECTBASE 0x40
> +#define PICM_VECTBASE 0x20
> #define PICS_VECTBASE PICM_VECTBASE + 0x08
> #endif /* defined(AT386) */
>
> @@ -176,6 +176,8 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> #define READ_IR_ONRD 0x00
> #define READ_IS_ONRD 0x01
>
> +#define PIC_MASK_ZERO 0x00
> +
> #ifndef __ASSEMBLER__
> extern void picinit (void);
> extern int curr_pic_mask;
> diff --git a/i386/i386at/idt.h b/i386/i386at/idt.h
> index 56e6296c..ac065aef 100644
> --- a/i386/i386at/idt.h
> +++ b/i386/i386at/idt.h
> @@ -24,13 +24,18 @@
> #ifndef _I386AT_IDT_
> #define _I386AT_IDT_
>
> -/* On a standard PC, we only need 16 interrupt vectors,
> - because that's all the PIC hardware supports. */
> -/* XX But for some reason we program the PIC
> - to use vectors 0x40-0x4f rather than 0x20-0x2f. Fix. */
> -#define IDTSZ (0x20+0x20+0x10)
> +/* There are 256 interrupt vectors on x86,
> + * the first 32 are taken by cpu faults */
> +#define IDTSZ (0x100)
>
> -#define PIC_INT_BASE 0x40
> +/* PIC sits at 0x20-0x2f */
> +#define PIC_INT_BASE 0x20
> +
> +/* IOAPIC sits at 0x30-0x47 */
> +#define IOAPIC_INT_BASE 0x30
> +
> +/* IOAPIC spurious interrupt vector set to 0xff */
> +#define IOAPIC_SPURIOUS_BASE 0xff
>
> #include <i386/idt-gen.h>
>
> diff --git a/i386/i386at/int_init.c b/i386/i386at/int_init.c
> index 43daad8b..6da627dd 100644
> --- a/i386/i386at/int_init.c
> +++ b/i386/i386at/int_init.c
> @@ -30,10 +30,21 @@ extern vm_offset_t int_entry_table[];
> void int_init(void)
> {
> int i;
> -
> - for (i = 0; i < 16; i++)
> +#ifndef APIC
> + for (i = 0; i < 16; i++) {
> fill_idt_gate(PIC_INT_BASE + i,
> int_entry_table[i], KERNEL_CS,
> ACC_PL_K|ACC_INTR_GATE, 0);
> + }
> +#else
> + for (i = 0; i < 24; i++) {
> + fill_idt_gate(IOAPIC_INT_BASE + i,
> + int_entry_table[i], KERNEL_CS,
> + ACC_PL_K|ACC_INTR_GATE, 0);
> + }
> + fill_idt_gate(IOAPIC_SPURIOUS_BASE,
> + int_entry_table[24], KERNEL_CS,
> + ACC_PL_K|ACC_INTR_GATE, 0);
> +#endif
> }
>
> --
> 2.30.1
>
>
--
Samuel
Progress (n.): The process through which the Internet has evolved from
smart people in front of dumb terminals to dumb people in front of smart
terminals.
- [PATCH 2/6] fixup acpi base table search, (continued)
- [PATCH 2/6] fixup acpi base table search, Damien Zammit, 2021/03/28
- [PATCH 1/6] Make linux drivers optional, Damien Zammit, 2021/03/28
- [PATCH 3/6] Don't allow writing to acpi table in memory, Damien Zammit, 2021/03/28
- [PATCH 4/6] Existing SMP apic code improvements, Damien Zammit, 2021/03/28
- [PATCH 5/6] Move PIC interrupt vector base from 0x40 to 0x20, Damien Zammit, 2021/03/28
- Re: [PATCH 5/6] Move PIC interrupt vector base from 0x40 to 0x20,
Samuel Thibault <=
- [PATCH 6/6] ioapic support switchable back to pic, Damien Zammit, 2021/03/28
- Re: [PATCH v2 gnumach] - IOAPIC and LAPIC support, Samuel Thibault, 2021/03/28