msi domain 分析 GICV3-ITS-PCI

文章详细阐述了在GICV3(GenericInterruptControllerv3)架构下,如何进行PCIMSI(MessageSignaledInterrupts)域的初始化。流程包括its_pci_msi_init函数的调用,通过its_pci_of_msi_init和its_pci_msi_init_one逐步创建中断域,并使用默认的msi_domain_ops和its_pci_msi_ops进行操作设置。过程中涉及中断处理芯片its_msi_irq_chip的配置以及irq_domain的创建和层级结构的构建。
摘要由CSDN通过智能技术生成

GICV3-ITS-PCI msi-domain

its_pci_msi_init
	its_pci_of_msi_init
		its_pci_msi_init_one
			pci_msi_create_irq_domain(handle, &its_pci_msi_domain_info, parent)
				pci_msi_domain_update_dom_ops(info);
					...pci_msi_domain_ops_default
				domain = msi_create_irq_domain(fwnode, info, parent);
					msi_domain_update_dom_ops(info);
						...msi_domain_ops_default
					irq_domain_create_hierarchy(fwnode, &msi_domain_ops, info)
						irq_domain_create_tree(fwnode, ops, host_data);
							__irq_domain_add(fwnode, 0, ~0, 0, ops, host_data)
								domain->host_data = host_data; 
								// host_data 是 its_pci_msi_domain_info

static struct msi_domain_info its_pci_msi_domain_info = {
    .flags  =  MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS | 
               MSI_FLAG_MULTI_PCI_MSI   | MSI_FLAG_PCI_MSIX,  
    .ops    =  &its_pci_msi_ops,     
    
    .chip   =  &its_msi_irq_chip, 
    // 这个成员是给irq domain 用的                                    
}; 

static struct msi_domain_ops its_pci_msi_ops = {
    .msi_prepare    = its_pci_msi_prepare,
};

static struct msi_domain_ops pci_msi_domain_ops_default = {
	.set_desc	= pci_msi_domain_set_desc,
	.msi_check	= pci_msi_domain_check_cap,
	.handle_error	= pci_msi_domain_handle_error,
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值