1 #pragma once
2 
3 #include <arch/arch.h>
4 #if ARCH(I386) || ARCH(X86_64)
5 #include <arch/x86_64/x86_64_ipi.h>
6 #else
7 #error "error type of arch!"
8 #endif
9 
10 /**
11  * @brief 发送ipi消息
12  *
13  * @param dest_mode 目标模式
14  * @param deliver_status 投递模式
15  * @param level 信号驱动电平
16  * @param trigger 触发模式
17  * @param vector 中断向量
18  * @param deliver_mode 投递模式
19  * @param dest_shorthand 投递目标速记值
20  * @param apic_type apic的类型 (0:xapic 1: x2apic)
21  * @param destination 投递目标
22  */
23 extern void ipi_send_IPI(uint32_t dest_mode, uint32_t deliver_status, uint32_t level, uint32_t trigger,
24                          uint32_t vector, uint32_t deliver_mode, uint32_t dest_shorthand, uint32_t destination);
25 
26 /**
27  * @brief ipi中断处理注册函数
28  *
29  * @param irq_num 中断向量号
30  * @param arg 参数
31  * @param handler 处理函数
32  * @param param 参数
33  * @param controller 当前为NULL
34  * @param irq_name ipi中断名
35  * @return int 成功:0
36  */
37 extern int ipi_regiserIPI(uint64_t irq_num, void *arg,
38                           void (*handler)(uint64_t irq_num, uint64_t param, struct pt_regs *regs),
39                           uint64_t param, hardware_intr_controller *controller, char *irq_name);