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);