/*
 * Copyright (c) 2026, Chloe M.
 * Provided under the BSD-3 clause.
 *
 * Description: AMD64 interrupt vectors
 * Author:      Chloe M.
 */

#include <machine/frameasm.h>

    .text
    .globl TrapDivError
TrapDivError:
    INTR_ENTRY($0x00)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapDebugException
TrapDebugException:
    INTR_ENTRY($0x01)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapNmi
TrapNmi:
    INTR_ENTRY($0x02)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapBreakPoint
TrapBreakPoint:
    INTR_ENTRY($0x03)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapOverflow
TrapOverflow:
    INTR_ENTRY($0x04)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapBoundRange
TrapBoundRange:
    INTR_ENTRY($0x05)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapInvalidOpcode
TrapInvalidOpcode:
    INTR_ENTRY($0x06)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapNoCoprocessor
TrapNoCoprocessor:
    INTR_ENTRY($0x07)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapDoubleFault
TrapDoubleFault:
    INTR_ENTRY_EC($0x08)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapReserved
TrapReserved:
    INTR_ENTRY($0x09)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapInvalidTss
TrapInvalidTss:
    INTR_ENTRY_EC($0x0A)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapSegNotPresent
TrapSegNotPresent:
    INTR_ENTRY_EC($0x0B)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapStackSegmentFault
TrapStackSegmentFault:
    INTR_ENTRY_EC($0x0C)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapGeneralProtection
TrapGeneralProtection:
    INTR_ENTRY_EC($0x0D)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl TrapPageFault
TrapPageFault:
    INTR_ENTRY_EC($0x0E)
    mov %rsp, %rdi
    call MdTrapDispatch
1:  cli
    hlt
    jmp 1b

    .globl LapicTmrIsr
LapicTmrIsr:
    INTR_ENTRY($0x81)
    mov %rsp, %rdi
    call HalContextSwitch
    call MdLapicSendEoi
    INTR_EXIT()

    .globl TrapLegacySyscall
TrapLegacySyscall:
    INTR_ENTRY($0x2C)
    mov %rsp, %rdi
    call MdSyscallDispatch
    INTR_EXIT()
