PCI控制器扫描PCI总线过程解析

news2024/12/23 6:18:42

1、PCI的三种地址空间介绍

地址空间描述命令说明
I/O空间供给设备驱动程序使用I/O操作命令对设备对应的I/O地址空间进行访问,此类访问不可预取
存储空间供给设备驱动程序使用memory操作命令对设备的Memory空间进行访问,其中Memory操作命令又可分为Prefechable(可预取)和Non-prefechable(不可预取)两种类型
配置空间提供Linux内核中的PCIe初始化代码使用配置访问命令对设备的配置空间进行读写访问,用来初始化设备,给设备分配资源

I/O空间和存储空间的区别:操作I/O地址空间,数据是未知的,操作存储空间,结果是已知的。如果是存储空间,写进去是1那读出来应该也是1;但是I/O地址,状态可能是由I/O外部决定的,去读I/O端口,这个端口是1还是0,由外部决定;

2、两种配置命令(Type 0和 Type 1)

(1)PCI总线协议中,设备分为PCI普通设备和PCI桥。PCI普通设备就是终端设备,比如网卡;PCI桥是转发消息的作用,可以构建多级的PCI总线拓扑;
(2)参考博客:《PCI设备和PCI桥的配置空间(header_type0、header_type1)和配置命令(type0、type1)详解》;

3、PCI主桥如何遍历挂载的PCI设备

3.1、header type 0中重要的字段

在这里插入图片描述

字段含义
Primary Bus Number上一级PCI总线号
Secondary Bus NumberPCI桥自己分配到的总线号
SubordinateBus NumberPCI总线域中的下级PCI总线号中最大的总线号

3.2、PCI根桥扫描过程

在这里插入图片描述

(1)HOST主桥依次使能挂载在PCI总线上设备的IDSEL引脚,扫描每个PCI插槽,尝试读取PCI设备的配置空间;
(2)通过读取PCI设备的配置空间Header Type字段,判断是PCI桥设备还是非PCI桥设备;
(3)通过type 0配置直接挂载的PCI设备,type 1配置通过PCI桥间接挂载的PCI设备;
(4)HOST主桥如果识别到PCI设备也是桥设备,会给PCI桥分配PCI总线号,并等到PCI桥设备去扫描更下一级PCI总线段的PCI设备;如果扫描到的是PCI普通设备,则直接通过type 0进行配置;
(5)当HOST主桥将所以PCI设备扫描完成并分配了相应资源,以后在PCI总线上就可以通过PCI地址来访问各个设备;

3.3、PCI根桥配置PCI设备举例分析

在这里插入图片描述
在这里插入图片描述

假设:HOST主桥要访问PCI总线3、设备号31、功能0、寄存器0xE
(1)HOST根桥在AD线上发送上面的type 1配置命令;
(2)PCI设备01是普通设备,忽略掉type 1类型的命令;PCI桥4会比较type 1命令的总线号3,不在自己以及后级总线的处理范围内,不转发;PCI桥1,比较type 1的总线号满足"1< 3 <= 3",将type 1命令转发到PCI总线1上;
(3)PCI总线1::PCI设备11忽略掉type 1类型命令,PCI桥2比较type 1的总线号满足"2<3 <= 3",将type 1命令转发到PCI总线2上;
(4)PCI总线3:PCI设备21忽略掉type 1类型命令,PCI桥3比较type 1的总线号满足"3<=3 <= 3",是自己能够处理的配置命令;
(5)PCI桥3将type 1配置命令,转换成type 0配置命令,并根据Device Number去选择对应PCI设备的IDSEL引脚,配置相应的设备;

4、如何区分当前设备是否是多功能设备?

在256字节的配置空间中,有个Header Type register,如果bit 7是0代表是单功能设备,如果bit 7是1代表多功能设备;

5、如何识别PCI/PCIE设备需要申请多大的地址空间?

参考博客:
《如何识别PCI/PCIE设备需要申请多大的地址空间?》;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux部署RocketMQ并使用SpringBoot创建生产、消费者

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;RocketMQ、消息队列☀️每日 一言&#xff1a;在你心灰意冷、心烦意乱时也不要停下你的脚步&#xff01; 一、前言 RocketMQ&#xff08;Apache RocketMQ&#xff09;是一种开源的分布式消息中间…

【Day-21慢就是快】代码随想录-栈与队列-逆波兰表达式求值

逆波兰表达式&#xff1a;是一种后缀表达式&#xff0c;所谓后缀就是指运算符写在后面。 平常使用的算式则是一种中缀表达式&#xff0c;如 ( 1 2 ) * ( 3 4 ) 。 该算式的逆波兰表达式写法为 ( ( 1 2 ) ( 3 4 ) * ) 。 逆波兰表达式主要有以下两个优点&#xff1a; 去掉…

Cesium 显示经纬高

文章目录 需求分析 需求 页面展示经、纬度和高 分析 html <div id"latlng_show" style"width:340px;height:30px;position:absolute;bottom:40px;right:200px;z-index:1;font-size:15px;"><div style"width:100px;height:30px;float:left;…

浅析三维模型OBJ格式轻量化压缩文件大小的技术方法

浅析三维模型OBJ格式轻量化压缩文件大小的技术方法 在减小三维模型OBJ格式轻量化文件大小方面&#xff0c;有许多技术和方法可以使用。下面我将介绍一些常用的方法来减小OBJ文件的大小。 1、优化顶点数量&#xff1a;减少OBJ文件中的顶点数量是减小文件大小的一种有效方法。可…

LSF 安装目录,快速参考 LSF 命令、守护程序、配置文件、日志文件和重要集群配置参数

样本 UNIX 和 Linux 安装目录 守护程序错误日志文件 守护程序错误日志文件存储在 LSF_LOGDIR 在 lsf.conf 文件中定义的目录中。 LSF 基本系统守护程序日志文件LSF 批处理系统守护程序日志文件pim.log.host_namembatchd.log.host_namembatchd.log.host_namesbatchd.log.host_…

【Go 基础篇】切片:Go语言中的灵活数据结构

在Go语言中&#xff0c;切片&#xff08;Slice&#xff09;是一种强大且灵活的数据结构&#xff0c;用于管理和操作一系列元素。与数组相比&#xff0c;切片的大小可以动态调整&#xff0c;这使得它成为处理动态数据集合的理想选择。本文将围绕Go语言中切片的引入&#xff0c;介…

Java【手撕双指针】LeetCode 18. “四数之和“, 图文详解思路分析 + 代码

文章目录 前言一、四数之和1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表, 堆…

C# Emgu.CV 条码检测

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Util; using static Emgu.C…

ThinkPHP 资源路由的简单使用,restfull风格API

ThinkPHP 资源路由的简单使用&#xff0c;restfull风格API 一、资源控制器二、资源控制器简单使用 一、资源控制器 资源控制器可以轻松的创建RESTFul资源控制器&#xff0c;可以通过命令行生成需要的资源控制器&#xff0c;例如生成index应用的TestR资源控制器使用&#xff1a…

layoutdm:discrete diffusion model for controllable layout generation

自动布局生成是我之前做banner生成中非常重要的一步&#xff0c;好的布局是成功的一半&#xff0c;在19年之前甚至更早时间&#xff0c;我们做这块主要是对标阿里的鹿班&#xff0c;那时候的技术方案主要是我之前发的smartbanner中&#xff0c;基本还是要靠模板以及相应的pipel…

软考A计划-网络工程师-必考知识点-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

[C/C++]笔记-函数的栈空间(避免栈空间溢出)

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

机器视觉工程师们,人生而不平等,你更要迈出第一步的勇气

我永远相信人生而不公平&#xff0c;所以你必须跨出第一步。 有些事情试试才知道&#xff0c;每一个人每件事对待每一个人都是公平公正的。 很多小白&#xff0c;做事情总有一种胆怯的心理&#xff0c;我给一句忠告&#xff0c;先干再说&#xff0c;一边干&#xff0c;一边思考…

基于加密接口的测试用例设计

这里写目录标题 一、环境准备二、原理三、实战练习 一、环境准备 1、对响应加密的接口。对它发起一个get请求后&#xff0c;得到一个加密过后的响应信息。(如果有可用的加密过的接口以及了解它的解密方法&#xff0c;可以跳过) 2、准备一个加密文件 加密字段 3、使用python…

Java【手撕双指针】LeetCode 15. “三数之和“, 图文详解思路分析 + 代码

文章目录 前言一、三数之和1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表, 堆…

【base64】JavaScriptuniapp 将图片转为base64并展示

Base64是一种用于编码二进制数据的方法&#xff0c;它将二进制数据转换为文本字符串。它的主要目的是在网络传输或存储过程中&#xff0c;通过将二进制数据转换为可打印字符的形式进行传输 JavaScript 压缩图片 <html><body><script src"https://code.j…

Python绘图系统10:在父组件中使用子组件的函数

文章目录 Combobox绑定事件互相调用源代码 Python绘图系统&#xff1a; &#x1f4c8;从0开始实现一个三维绘图系统自定义控件&#xff1a;坐标设置控件&#x1f4c9;坐标列表控件&#x1f4c9;支持多组数据的绘图系统图表类型和风格&#xff1a;散点图和条形图&#x1f4ca;混…

【2023】数字信号处理之Fourier分析

目录 一、基础概念 1. 时域 2. 频域 3. Fourier分析级数变换 Fourier级数 Fourier变换 离散谱 连续谱 4. 欧拉公式&#xff01;&#xff01;&#xff01; 欧拉恒等式 二 、三角函数系及Fourier级数 1. 三角函数系 概念 性质——周期性、正交性、完备性 Fourier系…

AI时代,程序员需要焦虑吗?

原文来自 微信公众号"互联网技术人进阶之路". 目录 前言一、程序员会被 AI 取代么&#xff1f;二、服务端开发尚难被 AI 取代三、服务端开发何去何从&#xff1f;四、业界首部体系化、全景式解读服务端开发的著作第一部分&#xff1a;服务端开发的技术和方法第二部分…

java基于SpringBoot+vue的宠物用品商城交易平台的设计与实现y704t

在此基础上&#xff0c;结合现有宠物用品交易体系的特点&#xff0c;运用新技术&#xff0c;构建了以 springboot为基础的宠物用品交易信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;根据需求分析结果进行了系统的设计&#xff0c;并将其划分为管理员和用户二种角色…