mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2026-01-21 09:10:37 -05:00
372 lines
8.2 KiB
C
372 lines
8.2 KiB
C
/* trap
|
|
*
|
|
* Copyright (C) 2025 Advanced Micro Devices, Inc. or its affiliates. All Rights Reserved.
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
* this software and associated documentation files (the "Software"), to deal in
|
|
* the Software without restriction, including without limitation the rights to
|
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
* subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in all
|
|
* copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef _TRAP_H_
|
|
#define _TRAP_H_
|
|
|
|
#include "stdint.h"
|
|
|
|
#define TRAP_PIC_TIMER 32
|
|
#define TRAP_YIELD 33
|
|
#define TRAP_HYPERVISOR_EVENT 37
|
|
#define TRAP_SPURIOUS 39
|
|
#define TRAP_SCI 41
|
|
#define TRAP_TIMER 50
|
|
#define TRAP_SYSCALL 128
|
|
|
|
typedef uint64_t (*SYSTEMCALL)(uint64_t *argptr);
|
|
|
|
struct TSS {
|
|
uint32_t res0;
|
|
uint64_t rsp0;
|
|
uint64_t rsp1;
|
|
uint64_t rsp2;
|
|
uint64_t res1;
|
|
uint64_t ist1;
|
|
uint64_t ist2;
|
|
uint64_t ist3;
|
|
uint64_t ist4;
|
|
uint64_t ist5;
|
|
uint64_t ist6;
|
|
uint64_t ist7;
|
|
uint64_t res2;
|
|
uint16_t res3;
|
|
uint16_t iopb;
|
|
} __attribute__((packed));
|
|
|
|
struct IdtEntry{
|
|
uint16_t low;
|
|
uint16_t selector;
|
|
uint8_t res0;
|
|
uint8_t attr;
|
|
uint16_t mid;
|
|
uint32_t high;
|
|
uint32_t res1;
|
|
};
|
|
|
|
struct IdtPtr {
|
|
uint16_t limit;
|
|
uint64_t addr;
|
|
} __attribute__((packed));
|
|
|
|
struct TrapFrame {
|
|
int64_t r15;
|
|
int64_t r14;
|
|
int64_t r13;
|
|
int64_t r12;
|
|
int64_t r11;
|
|
int64_t r10;
|
|
int64_t r9;
|
|
int64_t r8;
|
|
int64_t rbp;
|
|
int64_t rdi;
|
|
int64_t rsi;
|
|
int64_t rdx;
|
|
int64_t rcx;
|
|
int64_t rbx;
|
|
int64_t rax;
|
|
int64_t trapno;
|
|
int64_t errorcode;
|
|
int64_t rip;
|
|
int64_t cs;
|
|
int64_t rflags;
|
|
int64_t rsp;
|
|
int64_t ss;
|
|
};
|
|
|
|
static inline void eoi(void) {
|
|
*(volatile unsigned int*)0xFEE000B0 = 0x0;
|
|
}
|
|
|
|
void sysint(void);
|
|
void vIDTInit(void);
|
|
void load_idt(struct IdtPtr *ptr);
|
|
unsigned char read_isr(void);
|
|
uint64_t read_cr2(void);
|
|
void TrapReturn(void);
|
|
uint64_t load_cr3();
|
|
void send_char_to_cli();
|
|
void starttask(void *);
|
|
|
|
void vector0(void);
|
|
void vector1(void);
|
|
void vector2(void);
|
|
void vector3(void);
|
|
void vector4(void);
|
|
void vector5(void);
|
|
void vector6(void);
|
|
void vector7(void);
|
|
void vector8(void);
|
|
void vector9(void);
|
|
void vector10(void);
|
|
void vector11(void);
|
|
void vector12(void);
|
|
void vector13(void);
|
|
void vector14(void);
|
|
void vector15(void);
|
|
void vector16(void);
|
|
void vector17(void);
|
|
void vector18(void);
|
|
void vector19(void);
|
|
void vector20(void);
|
|
void vector21(void);
|
|
void vector22(void);
|
|
void vector23(void);
|
|
void vector24(void);
|
|
void vector25(void);
|
|
void vector26(void);
|
|
void vector27(void);
|
|
void vector28(void);
|
|
void vector29(void);
|
|
void vector30(void);
|
|
void vector31(void);
|
|
void vector32(void);
|
|
void vector33(void);
|
|
void vector34(void);
|
|
void vector35(void);
|
|
void vector36(void);
|
|
void vector37(void);
|
|
void vector38(void);
|
|
void vector39(void);
|
|
void vector40(void);
|
|
void vector41(void);
|
|
void vector42(void);
|
|
void vector43(void);
|
|
void vector44(void);
|
|
void vector45(void);
|
|
void vector46(void);
|
|
void vector47(void);
|
|
void vector48(void);
|
|
void vector49(void);
|
|
void vector50(void);
|
|
void vector51(void);
|
|
void vector52(void);
|
|
void vector53(void);
|
|
void vector54(void);
|
|
void vector55(void);
|
|
void vector56(void);
|
|
void vector57(void);
|
|
void vector58(void);
|
|
void vector59(void);
|
|
void vector60(void);
|
|
void vector61(void);
|
|
void vector62(void);
|
|
void vector63(void);
|
|
void vector64(void);
|
|
void vector65(void);
|
|
void vector66(void);
|
|
void vector67(void);
|
|
void vector68(void);
|
|
void vector69(void);
|
|
void vector70(void);
|
|
void vector71(void);
|
|
void vector72(void);
|
|
void vector73(void);
|
|
void vector74(void);
|
|
void vector75(void);
|
|
void vector76(void);
|
|
void vector77(void);
|
|
void vector78(void);
|
|
void vector79(void);
|
|
void vector80(void);
|
|
void vector81(void);
|
|
void vector82(void);
|
|
void vector83(void);
|
|
void vector84(void);
|
|
void vector85(void);
|
|
void vector86(void);
|
|
void vector87(void);
|
|
void vector88(void);
|
|
void vector89(void);
|
|
void vector90(void);
|
|
void vector91(void);
|
|
void vector92(void);
|
|
void vector93(void);
|
|
void vector94(void);
|
|
void vector95(void);
|
|
void vector96(void);
|
|
void vector97(void);
|
|
void vector98(void);
|
|
void vector99(void);
|
|
void vector100(void);
|
|
void vector101(void);
|
|
void vector102(void);
|
|
void vector103(void);
|
|
void vector104(void);
|
|
void vector105(void);
|
|
void vector106(void);
|
|
void vector107(void);
|
|
void vector108(void);
|
|
void vector109(void);
|
|
void vector110(void);
|
|
void vector111(void);
|
|
void vector112(void);
|
|
void vector113(void);
|
|
void vector114(void);
|
|
void vector115(void);
|
|
void vector116(void);
|
|
void vector117(void);
|
|
void vector118(void);
|
|
void vector119(void);
|
|
void vector120(void);
|
|
void vector121(void);
|
|
void vector122(void);
|
|
void vector123(void);
|
|
void vector124(void);
|
|
void vector125(void);
|
|
void vector126(void);
|
|
void vector127(void);
|
|
void vector128(void);
|
|
void vector129(void);
|
|
void vector130(void);
|
|
void vector131(void);
|
|
void vector132(void);
|
|
void vector133(void);
|
|
void vector134(void);
|
|
void vector135(void);
|
|
void vector136(void);
|
|
void vector137(void);
|
|
void vector138(void);
|
|
void vector139(void);
|
|
void vector140(void);
|
|
void vector141(void);
|
|
void vector142(void);
|
|
void vector143(void);
|
|
void vector144(void);
|
|
void vector145(void);
|
|
void vector146(void);
|
|
void vector147(void);
|
|
void vector148(void);
|
|
void vector149(void);
|
|
void vector150(void);
|
|
void vector151(void);
|
|
void vector152(void);
|
|
void vector153(void);
|
|
void vector154(void);
|
|
void vector155(void);
|
|
void vector156(void);
|
|
void vector157(void);
|
|
void vector158(void);
|
|
void vector159(void);
|
|
void vector160(void);
|
|
void vector161(void);
|
|
void vector162(void);
|
|
void vector163(void);
|
|
void vector164(void);
|
|
void vector165(void);
|
|
void vector166(void);
|
|
void vector167(void);
|
|
void vector168(void);
|
|
void vector169(void);
|
|
void vector170(void);
|
|
void vector171(void);
|
|
void vector172(void);
|
|
void vector173(void);
|
|
void vector174(void);
|
|
void vector175(void);
|
|
void vector176(void);
|
|
void vector177(void);
|
|
void vector178(void);
|
|
void vector179(void);
|
|
void vector180(void);
|
|
void vector181(void);
|
|
void vector182(void);
|
|
void vector183(void);
|
|
void vector184(void);
|
|
void vector185(void);
|
|
void vector186(void);
|
|
void vector187(void);
|
|
void vector188(void);
|
|
void vector189(void);
|
|
void vector190(void);
|
|
void vector191(void);
|
|
void vector192(void);
|
|
void vector193(void);
|
|
void vector194(void);
|
|
void vector195(void);
|
|
void vector196(void);
|
|
void vector197(void);
|
|
void vector198(void);
|
|
void vector199(void);
|
|
void vector200(void);
|
|
void vector201(void);
|
|
void vector202(void);
|
|
void vector203(void);
|
|
void vector204(void);
|
|
void vector205(void);
|
|
void vector206(void);
|
|
void vector207(void);
|
|
void vector208(void);
|
|
void vector209(void);
|
|
void vector210(void);
|
|
void vector211(void);
|
|
void vector212(void);
|
|
void vector213(void);
|
|
void vector214(void);
|
|
void vector215(void);
|
|
void vector216(void);
|
|
void vector217(void);
|
|
void vector218(void);
|
|
void vector219(void);
|
|
void vector220(void);
|
|
void vector221(void);
|
|
void vector222(void);
|
|
void vector223(void);
|
|
void vector224(void);
|
|
void vector225(void);
|
|
void vector226(void);
|
|
void vector227(void);
|
|
void vector228(void);
|
|
void vector229(void);
|
|
void vector230(void);
|
|
void vector231(void);
|
|
void vector232(void);
|
|
void vector233(void);
|
|
void vector234(void);
|
|
void vector235(void);
|
|
void vector236(void);
|
|
void vector237(void);
|
|
void vector238(void);
|
|
void vector239(void);
|
|
void vector240(void);
|
|
void vector241(void);
|
|
void vector242(void);
|
|
void vector243(void);
|
|
void vector244(void);
|
|
void vector245(void);
|
|
void vector246(void);
|
|
void vector247(void);
|
|
void vector248(void);
|
|
void vector249(void);
|
|
void vector250(void);
|
|
void vector251(void);
|
|
void vector252(void);
|
|
void vector253(void);
|
|
void vector254(void);
|
|
void vector255(void);
|
|
|
|
#endif
|