ia64_msi.c 962 B

12345678910111213141516171819202122232425262728
  1. #include "ia64_msi.h"
  2. /**
  3. * @brief 生成架构相关的msi的message address
  4. *
  5. */
  6. #define ia64_pci_get_arch_msi_message_address(processor) ((0xfee00000UL | (processor << 12)))
  7. /**
  8. * @brief 生成架构相关的message data
  9. *
  10. */
  11. #define ia64_pci_get_arch_msi_message_data(vector, processor, edge_trigger, assert) ((uint32_t)((vector & 0xff) | (edge_trigger == 1 ? 0 : (1 << 15)) | ((assert == 0) ? 0 : (1 << 14))))
  12. /**
  13. * @brief 生成msi消息
  14. *
  15. * @param msi_desc msi描述符
  16. * @return struct msi_msg_t* msi消息指针(在描述符内)
  17. */
  18. struct msi_msg_t *msi_arch_get_msg(struct msi_desc_t *msi_desc)
  19. {
  20. msi_desc->msg.address_hi = 0;
  21. msi_desc->msg.address_lo = ia64_pci_get_arch_msi_message_address(msi_desc->processor);
  22. msi_desc->msg.data = ia64_pci_get_arch_msi_message_data(msi_desc->irq_num, msi_desc->processor, msi_desc->edge_trigger, msi_desc->assert);
  23. msi_desc->msg.vector_control = 0;
  24. return &(msi_desc->msg);
  25. }