summaryrefslogtreecommitdiff
path: root/arch/x86/machine/trap.h
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2018-07-07 14:46:27 +0200
committerRichard Braun <rbraun@sceen.net>2018-07-07 14:47:28 +0200
commit0c0e2a02a42a8161e1b8dc1e1943fe5057ecb3a3 (patch)
treed5fa4c3160fc2c7ee910f9ff757549825f44a338 /arch/x86/machine/trap.h
parent3a1f3702ec2d4eb8e5d8528dfbcb3bed21b623cf (diff)
x86: refactor interrupt/exception handling
This commit merges the trap module into the cpu module in order to solve interface problems caused by the degree to which those two modules are actually coupled, i.e. it just makes a lot more sense to not separate them at all. The cpu module is also internally reworked with improved object and method definitions, that clarify the double fault handling code, among other things.
Diffstat (limited to 'arch/x86/machine/trap.h')
-rw-r--r--arch/x86/machine/trap.h186
1 files changed, 0 insertions, 186 deletions
diff --git a/arch/x86/machine/trap.h b/arch/x86/machine/trap.h
deleted file mode 100644
index c5bdc1f2..00000000
--- a/arch/x86/machine/trap.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2011-2014 Richard Braun.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- *
- * Trap (interrupt and exception) handling.
- *
- * This file is a top header in the inclusion hierarchy, and shouldn't include
- * other headers that may cause circular dependencies.
- */
-
-#ifndef X86_TRAP_H
-#define X86_TRAP_H
-
-#include <machine/page.h>
-
-/*
- * Architecture defined traps.
- */
-#define TRAP_DE 0 /* Divide Error */
-#define TRAP_DB 1 /* Debug */
-#define TRAP_NMI 2 /* NMI Interrupt */
-#define TRAP_BP 3 /* Breakpoint */
-#define TRAP_OF 4 /* Overflow */
-#define TRAP_BR 5 /* BOUND Range Exceeded */
-#define TRAP_UD 6 /* Invalid Opcode (Undefined Opcode) */
-#define TRAP_NM 7 /* Device Not Available (No Math Coprocessor) */
-#define TRAP_DF 8 /* Double Fault */
-#define TRAP_TS 10 /* Invalid TSS */
-#define TRAP_NP 11 /* Segment Not Present */
-#define TRAP_SS 12 /* Stack-Segment Fault */
-#define TRAP_GP 13 /* General Protection */
-#define TRAP_PF 14 /* Page Fault */
-#define TRAP_MF 16 /* x87 FPU Floating-Point Error (Math Fault) */
-#define TRAP_AC 17 /* Alignment Check */
-#define TRAP_MC 18 /* Machine Check */
-#define TRAP_XM 19 /* SIMD Floating-Point Exception */
-
-/*
- * Traps used for handling external interrupts.
- */
-#define TRAP_INTR_FIRST 32
-#define TRAP_INTR_LAST 223
-
-/*
- * System defined traps.
- *
- * The local APIC assigns one priority every 16 vectors.
- */
-#define TRAP_XCALL 238
-#define TRAP_THREAD_SCHEDULE 239
-#define TRAP_CPU_HALT 240
-#define TRAP_LAPIC_PMC_OF 252
-#define TRAP_LAPIC_TIMER 253
-#define TRAP_LAPIC_ERROR 254
-#define TRAP_LAPIC_SPURIOUS 255
-
-#define TRAP_NR_VECTORS 256
-
-#define TRAP_INTR_TABLE_SIZE 256
-
-#define TRAP_STACK_SIZE PAGE_SIZE
-
-#ifndef __ASSEMBLER__
-
-#include <stdint.h>
-#include <stdio.h>
-
-#include <kern/init.h>
-#include <kern/macros.h>
-
-#ifdef __LP64__
-
-struct trap_frame {
- uint64_t rax;
- uint64_t rbx;
- uint64_t rcx;
- uint64_t rdx;
- uint64_t rbp;
- uint64_t rsi;
- uint64_t rdi;
- uint64_t r8;
- uint64_t r9;
- uint64_t r10;
- uint64_t r11;
- uint64_t r12;
- uint64_t r13;
- uint64_t r14;
- uint64_t r15;
- uint64_t vector;
- uint64_t error;
- uint64_t rip;
- uint64_t cs;
- uint64_t rflags;
- uint64_t rsp;
- uint64_t ss;
-} __packed;
-
-#else /* __LP64__ */
-
-struct trap_frame {
- uint32_t eax;
- uint32_t ebx;
- uint32_t ecx;
- uint32_t edx;
- uint32_t ebp;
- uint32_t esi;
- uint32_t edi;
- uint16_t ds;
- uint16_t es;
- uint16_t fs;
- uint16_t gs;
- uint32_t vector;
- uint32_t error;
- uint32_t eip;
- uint32_t cs;
- uint32_t eflags;
- uint32_t esp; /* esp and ss are undefined if trapped in kernel */
- uint32_t ss;
-} __packed;
-
-#endif /* __LP64__ */
-
-/*
- * Type for trap handler functions.
- */
-typedef void (*trap_handler_fn_t)(struct trap_frame *);
-
-static inline void
-trap_trigger_double_fault(void)
-{
- printf("trap: double fault test\n");
- asm volatile("movl $0xdead, %esp; push $0");
-}
-
-/*
- * Unified trap entry point.
- */
-void trap_main(struct trap_frame *frame);
-
-/*
- * Register a trap handler.
- */
-void trap_register(unsigned int vector, trap_handler_fn_t handler_fn);
-
-/*
- * Display the content of a trap frame.
- */
-void trap_frame_show(struct trap_frame *frame);
-
-/*
- * Display the call trace interrupted by the trap of the given frame.
- */
-void trap_stack_show(struct trap_frame *frame);
-
-/*
- * Return a pointer to the local interrupt stack.
- *
- * This function is called by the low level trap handling code.
- *
- * Return NULL if no stack switching is required.
- */
-void * trap_get_interrupt_stack(const struct trap_frame *frame);
-
-/*
- * This init operation provides :
- * - initialization of all IDT entries and trap handlers
- * - double fault exception support
- */
-INIT_OP_DECLARE(trap_setup);
-
-#endif /* __ASSEMBLER__ */
-
-#endif /* X86_TRAP_H */