summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit/AMD64/HalCoreInterruptHandler.cpp
blob: c35d52cc6fe294dd9a02fc4af2345bfc1b3bd09c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
 *	========================================================
 *
 *	HCore
 * 	Copyright Mahrouss Logic, all rights reserved.
 *
 * 	========================================================
 */

#include <ArchKit/ArchKit.hpp>
#include <NewKit/String.hpp>

/// BUGS = 1

/// @brief System call interrupt (like DOS and NT)
#define kKernelSyscallInterrupt (0x21)

EXTERN_C {
  HCore::Void rt_handle_interrupts(HCore::HAL::StackFramePtr stack) {
    HCore::kcout << "HCoreKrnl: Interrupting Hart...\r\n";

    switch (stack->IntNum) {
      case kKernelSyscallInterrupt: {
        HCore::kcout << "HCoreKrnl: System call raised, checking.."
                     << HCore::end_line();
        rt_syscall_handle(stack);
        break;
      }

      default:
        break;
    }

    if ((stack->IntNum - 32) >= 12) {
      HCore::kcout << "HCoreKrnl: EOI Master PIC...\r\n";
      HCore::HAL::Out8(0xA0, 0x20);
    }

    HCore::kcout << "HCoreKrnl: EOI Slave PIC...\r\n";
    HCore::HAL::Out8(0x20, 0x20);
  }
}