Linux 内核中的 PCI 总线支持
🗝️ 缩略语
- ACPI - 高级配置和电源接口
- ACS - 访问控制服务
- AER - 高级错误报告端口服务
- ASPM - 活动状态电源管理
- EDR - 错误断开恢复
- FLR - 功能级重置
- HT - 超传输
- BAR - 基地址寄存器
- BW - 带宽
- DPC - 下游端口包含端口服务
- EP - 端点
- mmrbc - 最大内存读取字节数
- mps - 最大有效负载大小
- MWI - 内存写入无效
- PM - 电源管理
- PMC - ... ... 控制器
- PME - ... ... 事件,端口服务
- SR-IOV - 单根输入/输出虚拟化
- VF - 虚拟函数
⚲ 用户空间 API
从 shell 中查询信息
- man 8 lspci -vv
- column -t /proc/bus/pci/devices
- man 2 pciconfig_read, man 2 pciconfig_write, man 2 pciconfig_iobase - pci 设备信息处理
- uapi/linux/pci.hinc
- uapi/linux/pci_regs.hinc
⚲ 内核空间 API
- linux/pci.hinc
- pci_device_id id - 包含供应商、设备和类别 ID。它用于探测。
- pci_driver id - 核心结构体
- module_pci_driver id- 帮助宏注册 pci_driver。它使用 pci_register_driver id 和 pci_unregister_driver id.
- pci_dev id - 设备描述符
- pci_enable_device id, pci_disable_device id - 必须在 pci_driver 的探测和移除回调中调用。
- pci_set_drvdata id, pci_get_drvdata id
- pci_nameid
- pci_set_masterid
- pcim_iomap_regions id / pcim_iounmap_regions id 或 pci_request_region id, pci_request_regions id/ pci_release_regions id,
- pci_iomap id, pci_iounmap id
- pci_alloc_irq_vectors id/ pci_free_irq_vectors id, pci_request_irq id或 pci_irq_vector id
- to_pci_devid
- pci_resource_flags id, pci_resource_start id, pci_resource_len id
- pci_dev_putid
- pci_read_config_dword id, pci_write_config_dword id
- pci_set_power_stateid
👁 示例
linux/pci_ids.hinc
drivers/pcisrc
pci_opsid
PCI 子系统 doc,较新的在上面
X86_REROUTE_FOR_BROKEN_BOOT_IRQS
内核参数 docpci=ioapicreroute
从 shell 中查询信息
find /sys/kernel/config/pci_ep/
EPC - EP 控制器
linux/pci-epc.h inc pci_epc_create id, devm_pci_epc_create id
EPF - EP 功能
linux/pci-epf.h inc pci_epf_create id
内部结构: drivers/pci/endpoint/ src
测试端点功能的驱动程序: drivers/pci/endpoint/functions/pci-epf-test.c src
PCIe 虚拟化,SR-IOV doc, 2009
API: pci_enable_sriov id, pci_disable_sriov id, sriov_configure id
MSI - 消息信号中断 doc, 2008
MSI 示例
vectors = pci_alloc_irq_vectors id(pci_dev, 1, 1, PCI_IRQ_MSI | PCI_IRQ_MSIX);
irq = pci_irq_vector id(pci_dev, 0);
AER - 高级错误报告 文档, 2006
API: linux/aer.h 包含文件, pci_enable_pcie_error_reporting 标识符, pci_disable_pcie_error_reporting 标识符, pci_aer_clear_nonfatal_status 标识符
API: pci_error_handlers 标识符, pci_ers_result 标识符, pci_channel_state_t 标识符
PCIe - PCI Express 端口总线驱动程序 文档, 2004
API: pcie_port_service_driver 标识符,pcie_port_service_register 标识符, pcie_port_service_unregister 标识符
pci_get_device 标识符, pci_get_class 标识符, pci_get_subsys 标识符, pci_dev_put 标识符
💾 历史记录
📚 参考资料