1 /**
2  * @file ipi.h
3  * @author fslongjin(longjin@RinGoTek.cn)
4  * @brief 多核通信驱动
5  * @version 0.1
6  * @date 2022-04-07
7  *
8  * @copyright Copyright (c) 2022
9  *
10  */
11 
12 #pragma once
13 
14 #include <common/kprint.h>
15 #include <driver/interrupt/apic/apic.h>
16 
17 /**
18  * @brief 发送ipi消息
19  *
20  * @param dest_mode 目标模式
21  * @param deliver_status 投递模式
22  * @param level 信号驱动电平
23  * @param trigger 触发模式
24  * @param vector 中断向量
25  * @param deliver_mode 投递模式
26  * @param dest_shorthand 投递目标速记值
27  * @param destination 投递目标
28  */
29 void ipi_send_IPI(uint32_t dest_mode, uint32_t deliver_status, uint32_t level, uint32_t trigger,
30                   uint32_t vector, uint32_t deliver_mode, uint32_t dest_shorthand,  uint32_t destination);
31 
32 /**
33  * @brief ipi中断处理注册函数
34  *
35  * @param irq_num 中断向量号
36  * @param arg 参数
37  * @param handler 处理函数
38  * @param param 参数
39  * @param controller 当前为NULL
40  * @param irq_name ipi中断名
41  * @return int 成功:0
42  */
43 int ipi_regiserIPI(uint64_t irq_num, void *arg,
44                    void (*handler)(uint64_t irq_num, uint64_t param, struct pt_regs *regs),
45                    uint64_t param, hardware_intr_controller *controller, char *irq_name);