mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 08:06:32 +00:00
🔧 将enable msi的部分更新为使用msi_desc来完成
This commit is contained in:
@ -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
|
||||
|
||||
|
27
kernel/arch/x86_64/ia64_msi.c
Normal file
27
kernel/arch/x86_64/ia64_msi.c
Normal 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);
|
||||
}
|
11
kernel/arch/x86_64/ia64_msi.h
Normal file
11
kernel/arch/x86_64/ia64_msi.h
Normal 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);
|
Reference in New Issue
Block a user