qemu: PCI 设备模拟

 

目录

1. PCI设备

2. PCI设备模拟

3. PCI设备中断模拟


1. PCI设备

可以参考 :PCI/PCIe基础——配置空间分布_vc66vcc的博客-CSDN博客_pcie配置空间

2. PCI设备模拟

PCI 设备类型

pci_device_type_info,是抽象类型

TYPE_PCI_BUS

pci_device_class_init

pci_qdev_realize

TYPE_PCI_DEVICE

pci_register_bar: 注册 MR 为 BAR${region_num}, 如BAR0

PCIHostState: 北桥PCI部分

i440fx_pcihost_initfn: 北桥初始化,注册cfg 和 data 的MR动作

i440fx_pcihost_realize,北桥实例化,完成IO地址MR注册

pci_host_config_write:写CONFGADDR,选择PCI设备和寄存器

pci_host_data_write:写入CONFGDATA数据

pci_data_write

SEABIOS分配各种BAR/MMIO地址,写入PORT_PCI_DATA(PCI主桥的IO配置空间),QEMU响应函数是

pci_default_write_config

pci_update_mappings

3. PCI设备中断模拟

在实例化的时候写入PCI设备配置空间内0x3d处的一个字节,指明使用了哪个中断引脚 INTA-D

PCI设备使用的中断引脚与中断控制器的中断线连接起来,通常叫做PCI设备的中断路由。设计三个概念

  1. 中断引脚
  2. 中断线
  3. PC链接设备

中断路由两部分

  1. 设备INTA到LINA的交错连线
  2. PCI链接设备路由到具体的IRQ线上,BIOS设定

QEMU中PCI设备中断初始化

i440fx_init

pci_bus_irqs

pci_slot_get_pirq,得到LNK[A-D],调用piix3_set_irq,作为参数 pirq

piix3_set_irq

piix3_set_irq_level

piix3_set_irq_pic

QEMU中PCI设备触发中断

pci_set_irq,pci_intx得到INTX引脚编号(INTX[A-D])

pci_irq_handler

pci_change_irq_level

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值