🔧 将enable msi的部分更新为使用msi_desc来完成

This commit is contained in:
fslongjin
2022-07-25 13:50:03 +08:00
parent 7ca8f42c17
commit 2b0b727893
8 changed files with 152 additions and 89 deletions

View File

@ -1,7 +1,10 @@
CFLAGS += -I .
all: x86_64_ipi.o
all: x86_64_ipi.o ia64_msi.o
x86_64_ipi.o: x86_64_ipi.c
gcc $(CFLAGS) -c x86_64_ipi.c -o x86_64_ipi.o
ia64_msi.o: ia64_msi.c
gcc $(CFLAGS) -c ia64_msi.c -o ia64_msi.o

View File

@ -0,0 +1,27 @@
#include "ia64_msi.h"
/**
* @brief 生成架构相关的msi的message address
*
*/
#define ia64_pci_get_arch_msi_message_address(processor) ((0xfee00000UL | (processor << 12)))
/**
* @brief 生成架构相关的message data
*
*/
#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))))
/**
* @brief 生成msi消息
*
* @param msi_desc msi描述符
* @return struct msi_msg_t* msi消息指针在描述符内
*/
struct msi_msg_t *msi_arch_get_msg(struct msi_desc_t *msi_desc)
{
msi_desc->msg.address_hi = 0;
msi_desc->msg.address_lo = ia64_pci_get_arch_msi_message_address(msi_desc->processor);
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);
return &(msi_desc->msg);
}

View File

@ -0,0 +1,11 @@
#pragma once
#include <driver/pci/msi.h>
/**
* @brief 生成msi消息
*
* @param msi_desc msi描述符
* @return struct msi_msg_t* msi消息指针在描述符内
*/
struct msi_msg_t *msi_arch_get_msg(struct msi_desc_t *msi_desc);