首页 > 其他分享 >查看PCIe bridge设备的bus number

查看PCIe bridge设备的bus number

时间:2024-12-03 10:30:50浏览次数:7  
标签:bridge u8 bus number subordinate secondary

PCIe设备的这三个bus number是用于定义PCIe拓扑结构的重要参数。

Primary Bus Number:桥设备上游总线号

Secondary Bus Number:桥设备直接连接的下游总线号

Subordinate Bus Number:该桥下所有总线中最大的总线号

在PCIe配置空间中的定义如下:

struct pci_bridge_config_space {
    // ... 其他字段 ...
    u8 primary_bus;      // 偏移 0x18
    u8 secondary_bus;    // 偏移 0x19
    u8 subordinate_bus;  // 偏移 0x1A
    u8 sec_latency;      // 偏移 0x1B
    // ... 其他字段 ...
};

其中secondary bus number和subordinate bus number可以通过sys接口中的文件进行查看:

也可以通过lspci查看对应设备地址空间的0x18h,0x19h,0x1ah三位来对应primary bus number,secondary bus number和subordinate bus number。

代码中实际使用方式

// 检查设备是否在特定总线范围内
static bool is_device_in_range(struct pci_dev *bridge, struct pci_dev *dev) {
u8 secondary, subordinate;
pci_read_config_byte(bridge, PCI_SECONDARY_BUS, &secondary);
pci_read_config_byte(bridge, PCI_SUBORDINATE_BUS, &subordinate);

return (dev->bus->number >= secondary && 
        dev->bus->number <= subordinate);

}
// 查找设备所属的桥
static struct pci_dev *find_parent_bridge(struct pci_dev *dev) {
struct pci_dev *bridge;
pci_for_each_dev(bridge) {
    if (pci_is_bridge(bridge) && 
        is_device_in_range(bridge, dev)) {
        return bridge;
    }
}

return NULL;

}

需要注意的是,只有PCIe bridge设备有对应的三个bus number。

标签:bridge,u8,bus,number,subordinate,secondary
From: https://blog.csdn.net/aolitianya/article/details/144182661

相关文章

  • CMU_15445_P3_bustub_事务与锁管理机制
    CMU_15445_P3_bustub_事务与锁管理机制BUSTUB中定义了一个Query在执行的时候应该包括的基本的上下文信息,也就是类ExecutorContext.我们可以看到这个类的定义的属性为:classExecutorContext{private:/**Thetransactioncontextassociatedwiththisexecutorcon......
  • [C++][CMake][Error] set_target_properties called with incorrect number of argume
    1简介这篇文章将探讨了在使用CMake构建C++项目时,调用set_target_properties函数时参数数量不正确所引发的问题。2错误案例以下为可能发生错误的案例include_directories(${CMAKE_SOURCE_DIR}/common)find_package(Threads)add_library(libusbmuxdSHAREDlibusbm......
  • [笔记]杜教筛 & Powerful Number 筛
    杜教筛杜教筛的作用杜教筛可以快速求出积性函数前缀和。如\(\varphi\),\(\mu\)等。什么是杜教筛定义\(f(x)\)为一个积性函数,求\(F(x)=\sum\limits_{i=1}^{n}f(x)\)。考虑构造函数\(h,g\),使得\(h=f*g\),即\(h(n)=\sum\limits_{d|n}f(d)g(\dfrac{n}{d}......
  • LLM Defenses Are Not Robustto Multi-Turn Human Jailbreaks Yet
    ......
  • modbus通讯协议
    一.modbus的四种传输协议:ModbusRTU:使用二进制格式进行数据传输,通讯效率更高.ModbusASCII使用ASCII码进行数据传输,可读性好,但通讯效率更低.ModbusTCP/IP是基于以太网的一种通讯方式,它将Modbus协议封装在TCP/IP协议栈中,通过以太网传输数据。具有高速、稳定的特点.ModbusUD......
  • NTFS Permissions Reporter 与 Albus Bit NTFS Permissions Auditor Pro 两款工具的对
    NTFSPermissionsReporter与AlbusBitNTFSPermissionsAuditorPro两款工具的对比表格,展示它们在功能、优缺点、适用场景等方面的主要区别:功能/特点NTFSPermissionsReporterAlbusBitNTFSPermissionsAuditorPro主要功能文件权限审计、报告生成、权限继承......
  • .NET9 EFcore支持早期MSSQL数据库 ROW_NUMBER()分页
    前言NET程序员是很幸福的,MS在上个月发布了NET9.0RTM,带来了不少的新特性,但是呢,我们是不是还有很多同学软硬件都还没更上,比如,自己的电脑还在跑Win7,公司服务器还在跑MSSQL2005-2008的!这不就引入了我们本文要探索的问题,因为MS早在EFcore3.1后就不再内置支持ROW_NUMBER()了,......
  • 五、基于 Guava EventBus事件驱动架构实现动态扩展的技术方案
    构建动态可扩展的事件驱动架构:基于GuavaEventBus的实践在现代应用开发中,模块解耦与动态扩展是关键需求,而事件驱动架构提供了一种高效、优雅的解决方案。本文将以GoogleGuava的EventBus为例,详细讲解如何构建动态可扩展的事件驱动架构,并进行优化设计。1.什么是事......
  • [Javascript] Import the Same JavaScript Module Multiple Times with Cache Busting
    WhenattemptingtoloadthesamemoduletwiceinJavaScriptyou'llhitacacheandcodewon'tre-run.Inscenarioswhereyouactuallydowanttohavestateinyourmodules,you'llhavetouseacache-bustingtechniquebypassingaquerypar......
  • MySQL中的ROW_NUMBER窗口函数简单了解下
    ROW_NUMBER()是MySQL8引入的窗口函数之一,它为查询结果集中的每一行分配一个唯一的顺序号(行号)。这个顺序号是基于窗口函数的ORDERBY子句进行排序的,可以根据指定的排序顺序生成连续的整数值。ROW_NUMBER()在分页、去重、分组内排序等场景中非常有用。本文涉及到的脚本测试请......