x86_64_ipi.h 1.3 KB

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