summaryrefslogtreecommitdiff
path: root/include/kernel/trap.h
blob: ddc1d123eb290f5da2a9f1d5ed5c2cf6435f56bd (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
43
44
45
46
47
48
49
50
51
52
53
54
55
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Copyright (C) 2026 Richard QIn
 */

#pragma once
#include "common/types.h"

struct Trapframe
{
    /* 0 */ uint64 kernel_satp;
    /* 8 */ uint64 kernel_sp;
    /* 16 */ uint64 kernel_trap;
    /* 24 */ uint64 epc;
    /* 32 */ uint64 kernel_hartid;

    /* 40 */ uint64 ra;   // x1
    /* 48 */ uint64 sp;   // x2
    /* 56 */ uint64 gp;   // x3
    /* 64 */ uint64 tp;   // x4
    /* 72 */ uint64 t0;   // x5
    /* 80 */ uint64 t1;   // x6
    /* 88 */ uint64 t2;   // x7
    /* 96 */ uint64 s0;   // x8 (Frame Pointer)
    /* 104 */ uint64 s1;  // x9
    /* 112 */ uint64 a0;  // x10
    /* 120 */ uint64 a1;  // x11
    /* 128 */ uint64 a2;  // x12
    /* 136 */ uint64 a3;  // x13
    /* 144 */ uint64 a4;  // x14
    /* 152 */ uint64 a5;  // x15
    /* 160 */ uint64 a6;  // x16
    /* 168 */ uint64 a7;  // x17
    /* 176 */ uint64 s2;  // x18
    /* 184 */ uint64 s3;  // x19
    /* 192 */ uint64 s4;  // x20
    /* 200 */ uint64 s5;  // x21
    /* 208 */ uint64 s6;  // x22
    /* 216 */ uint64 s7;  // x23
    /* 224 */ uint64 s8;  // x24
    /* 232 */ uint64 s9;  // x25
    /* 240 */ uint64 s10; // x26
    /* 248 */ uint64 s11; // x27
    /* 256 */ uint64 t3;  // x28
    /* 264 */ uint64 t4;  // x29
    /* 272 */ uint64 t5;  // x30
    /* 280 */ uint64 t6;  // x31
};

namespace Trap
{
    void init();
    void inithart();
    int devintr();
}