首页 > 其他分享 >PCI Express Port Bus Drive

PCI Express Port Bus Drive

时间:2022-12-07 04:33:05浏览次数:55  
标签:Express Drive port PCIe PCI device Port

https://zhuanlan.zhihu.com/p/380414834

本文介绍PCI Express Port Bus driver基础知识,如何使能注册和反注册PCI Express Port Bus Driver. PCIe Port bus driver 所处PCIe软件架构位置如下图红色。

  • PCI Express Port Bus Driver作用

PCIe port包含Root Port and the Switch Port, switch port又分为Upstream Port和Downstream Port。PCIe port通常提供多个高级服务,如native hotplug support (HP), power management event support (PME), advanced error reporting support (AER), and Downstream Port Containment(DPC)。PCIe port bus driver就是提供PCIe port driver设备的创建,中断申请,为PCIe高级服务做好基础准备。

  • PCI Express Port Bus Driver实现

drivers/pci/pcie/portdrv_pci.c

  1. 关键结构

支持设备类型 PCI-Express port、PCI-to-PCI bridge、Root Complex Event Collector

/*
 * LINUX Device Driver Model
 */
static const struct pci_device_id port_pci_ids[] = { 
    /* handle any PCI-Express port */
    { PCI_DEVICE_CLASS(((PCI_CLASS_BRIDGE_PCI << 8) | 0x00), ~0) },
    /* subtractive decode PCI-to-PCI bridge, class type is 060401h */
    { PCI_DEVICE_CLASS(((PCI_CLASS_BRIDGE_PCI << 8) | 0x01), ~0) },
    /* handle any Root Complex Event Collector */
    { PCI_DEVICE_CLASS(((PCI_CLASS_SYSTEM_RCEC << 8) | 0x00), ~0) },
    { },
};

static const struct pci_error_handlers pcie_portdrv_err_handler = { 
    .error_detected = pcie_portdrv_error_detected,
    .slot_reset = pcie_portdrv_slot_reset,
    .mmio_enabled = pcie_portdrv_mmio_enabled,
    .resume = pcie_portdrv_err_resume,
};

static struct pci_driver pcie_portdriver = { 
    .name       = "pcieport",
    .id_table   = &port_pci_ids[0],

    .probe      = pcie_portdrv_probe,
    .remove     = pcie_portdrv_remove,
    .shutdown   = pcie_portdrv_remove,

    .err_handler    = &pcie_portdrv_err_handler,

    .driver.pm  = PCIE_PORTDRV_PM_OPS,
};

关键接口pcie_port_device_register, 为高级服务Hotplug、AER、DPC、PME申请中中断,

注册PCIe port service设备。

/**
 * pcie_port_device_register - register PCI Express port
 * @dev: PCI Express port to register
 *
 * Allocate the port extension structure and register services associated with
 * the port.
 */
int pcie_port_device_register(struct pci_dev *dev);

高级服务Hotplug、AER、DPC、PME申请中断实现

/**
 * pcie_init_service_irqs - initialize irqs for PCI Express port services
 * @dev: PCI Express port to handle
 * @irqs: Array of irqs to populate
 * @mask: Bitmask of port capabilities returned by get_port_device_capability()
 *      
 * Return value: Interrupt mode associated with the port
 */
static int pcie_init_service_irqs(struct pci_dev *dev, int *irqs, int mask)

AER中断定义PCIe 5.0 section 7.8.4.10 Root Error Status Register (Offset 30h)

Hotplug和PME使用的是同一个中断,其定义在PCIe 5.0 section 7.5.3.2 PCI Express Capabilities Register (Offset 02h)

DPC中断定义在PCIe 5.0 section 7.9.15.2 DPC Capability Register (Offset 04h)

PCI Express port service device接口的申请

/**
 * pcie_device_init - allocate and initialize PCI Express port service device
 * @pdev: PCI Express port to associate the service device with
 * @service: Type of service to associate with the service device
 * @irq: Interrupt vector to associate with the service device
 */
static int pcie_device_init(struct pci_dev *pdev, int service, int irq)
  • 小结

本文介绍PCIe软件中的PCI Express Port Bus Driver,通过此文可以掌握了解其功能和关键结构和接口的定义实现。

标签:Express,Drive,port,PCIe,PCI,device,Port
From: https://www.cnblogs.com/hshy/p/16961964.html

相关文章

  • 使用DevExpress WPF主题设计器轻松创建Office 2019绿色主题(一)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专......
  • 使用express-jwt解析token时req.user=undefind
    使用express-jwt解析token时req.user=undefind,原因:在路由文件里使用express的实例app来use express-jwt中间件了,这样做是不规范的解决方法:使用router实例来use  expr......
  • LeetCode:282. Expression Add Operators
    LeetCode:282.ExpressionAddOperators题目描述Givenastringthatcontainsonlydigits0-9andatargetvalue,returnallpossibilitiestoaddbinaryoperators......
  • pcie驱动
    1.驱动mtkwifi驱动基于pci进行扩展,第一个文件:/os/linux/pci_main_dev.c文件用于创建和注册基于pci接口的网络设备,PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和......
  • DevExpress TreeList使用心得
    最近做项目新增光纤线路清查功能模块,思路和算法已经想好了,些代码时候居然在一个控件上纠结了好长的时间,虽然后来搞定了,但是好记性不然烂笔头,还是写下来,以后要用到的时候直接......
  • DevExpress TreeList 调优_绑定数据源方式, 放弃原来的AppendNode加载数据的方式
    注意事项1:由于一旦绑定了数据源dataTable的些许变化便在TreeList中有所体现,所以等dataTable完全填充好了之后再绑定数据源.注意事项2:dataTable每行的父节点ID当加载到......
  • PCIe AER
    ConceptsAER:AdvanceerrorreportingPCIe提供两种报错机制:baselinecapability和AERcapabilityBaselinecapabilityisrequiredbyallPCIecomponentsproviding......
  • 整理记录一下DevExpress中更换Form窗体皮肤的操作过程
    俗话说得好:”好记心不如烂笔杆儿“,这不,前些时间突然心血来潮,想用C#来写写软件,其实我的计算机中老早就装上了DevExpress的开发环境了,可是一直跟自己找借口,没有动手写过一个......
  • DevExpress 给TreeList添加右键菜单
    只有在右击节点时才会触发privatevoidtreeList1_MouseDown(objectsender,MouseEventArgse){if(e.Button==MouseButtons.Right)......
  • 操作Devexpress treelist中的项
    如果需要在单元格添加时则用TreeList如果只是单纯读取数据或检索数据时则用GridControl​​​​1.如果点击添加时则添加TreeList的节点:protectedinternalvoidbtnAdd_Cli......