windows驱动开发-PCI讨论(二)

认识PCI设备,还是要从配置空间说起,当PCI在ACPI和PCI复合体上电和枚举完成后,PCI根复合体会从PCI设备读出PCI设备的配置空间,许多信息(例如寄存器、内存空间、中断信息等等)都是是从配置空间获取的,所以接下来会详细讲解PCI配置空间。

PCI配置空间的大小是256个字节(0x00~0xFF),而PCIe的配置空间扩大到了0x00~0xFFF;一般来说配置空间会像下面这样分区:

接下来尽可能详细的解释这部分配置:

type 0 Header

配置空间的截图如下:

这部分需要注意的是寄存器,status寄存器、command寄存器、BIST寄存器、Base Address Register0~5、ROM寄存器、INT寄存器、PMCSR寄存器,其它只读位的寄存器暂时不讨论。

status寄存器:

状态寄存器用于记录PCI总线相关事件的状态信息:

command寄存器:

命令寄存器提供对设备生成和响应PCI周期的能力的粗略控制。当0被写入该寄存器时,除了配置访问之外的所有访问,设备都从PCI总线上逻辑断开。所有设备都需要支持此基本功能级别。根据设备的功能,可以实现也可以不实现命令寄存器中的各个位:

BIST寄存器:

此可选寄存器用于BIST的控制和状态。不支持BIST的设备必须始终返回值0(即,将其视为保留寄存器)。调用BIST的设备不得妨碍PCI总线的正常操作。 

Base Address Register0~5:

BAR寄存器比较特殊,它可能有多种形态:

和其他寄存器不一样,这个寄存器反而不建议去修改,虽然这个寄存器是可以读写的,但是往往只有系统知道如何正确的初始化,并且对于驱动来说,直到怎么使用这个寄存器比如何初始化它更重要。

一个经典的PCIe案例中,寄存器被分为三类,64位地址空间需要6个寄存器才能完全映射,如果仔细观察,就会发现寄存器和资源几乎一致:

第一个称之为基础寄存器空间,它往往用于初始化对应的PCI设备中的子系统以及烧录系统等特殊行为,在任何时候它都是可用的,一般它会被映射到I/O空间内;

第二个称之为设备寄存器空间,往往用于具体的PCIe的设备的功能设置,这部分可能大于4KB但是小于1MB;一般大小为4KB的倍数(这并不意外,低于4KB也会被设置为4KB的寄存器空间,因为内存页面的设置是以页面为单位的,寄存器设置也是如此),不过这部分需要总线驱动映射之后才可以用,在PCI设备中,一般会有一个嵌入式系统,这个系统初始化之前,是没办法映射设备寄存器和功能寄存器空间。

第三个也是功能寄存器空间,这里面可以映射的数量级更多一些;也是需要设备初始化之后才可以使用的。

ROM寄存器:

该寄存器被定义为处理该扩展ROM的基地址和大小信息。PCI设备可以带一个扩展ROM,通过执行ROM中存放的代码来完成与设备有关的初始化,同时也有可能完成系统的引导功能。

  

INT LINE寄存器


中断线路寄存器用于传输中断线路路由信息。寄存器必须由任何使用中断引脚的设备或设备功能来实现。POST软件将在初始化和配置系统时将路由信息写入该寄存器。
该寄存器中的值告诉设备的中断引脚连接到系统中断控制器的哪个输入。设备本身不使用该值,而是由设备驱动程序和操作系统使用。设备驱动程序和操作系统可以使用这些信息来确定优先级和矢量信息。此寄存器中的值是特定于系统体系结构的。

PMCSR寄存器

此16位寄存器用于管理PCI功能的电源管理状态以及启用/监视PME:

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

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

相关文章

动手学操作系统(三、通过IO接口直接控制显卡)

动手学操作系统(三、通过IO接口直接控制显卡) 在之前的学习内容中,我们成功编写了MBR主引导记录,在终端上进行了打印显示,在这一节我们使用MBR通过IO接口来直接控制显卡输出字符。 文章目录 动手学操作系统&#xff0…

逻辑回归(头歌)

第1关:逻辑回归算法大体思想 #encodingutf8import numpy as np#sigmoid函数 def sigmoid(t):#输入:负无穷到正无穷的实数#输出:转换后的概率值#********** Begin **********#result 1.0 / (1 np.exp(-t))#********** End **********#retur…

43、Flink 的 Window Join 详解

1.Window Join a)概述 Window join 作用在两个流中有相同 key 且处于相同窗口的元素上,窗口可以通过 window assigner 定义,并且两个流中的元素都会被用于计算窗口的结果。 两个流中的元素在组合之后,会被传递给用户定义的 Joi…

外汇天眼:野村证券和Laser Digital与GMO互联网集团合作发行日元和美元稳定币

野村控股和Laser Digital将与GMO互联网集团合作,在日本探索发行日元和美元稳定币。GMO互联网集团的美国子公司GMO-Z.com Trust Company, Inc. 在纽约州金融服务部的监管框架下,在以太坊、恒星币和Solana等主要区块链上发行稳定币。GMO-Z.com Trust Compa…

MySQL增删查改进阶

数据库约束表的关系增删查改 目录 一.数据库约束类型 NOT NULL约束类型 UNIQUE 唯一约束 DEFAULT 默认值约束 PRIMARY KEY:主键约束 FOREIGN KEY :W外键约束 二,查询 count()两种用法 sum,avg,max…

Vue3_创建项目

目录 一、创建vue项目 1.下载vue 2.进入刚才创建的项目 3.安装依赖 4.运行项目 ​5.打包项目放入生产环境 二、vue项目组成 1.项目文件结构 2.项目重要文件 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、C…

【安全产品】基于HFish的MySQL蜜罐溯源实验记录

MySQL蜜罐对攻击者机器任意文件读取 用HFish在3306端口部署MySQL蜜罐 配置读取文件路径 攻击者的mysql客户端版本为5.7(要求低于8.0) 之后用命令行直连 mysql -h 124.222.136.33 -P 3306 -u root -p 可以看到成功连上蜜罐的3306服务,但进行查询后会直接lost con…

for循环绑定id,更新html页面的文字内容

需求&#xff1a;将方法中内容对齐 实现方式 给for循环中每个方法添加一个动态的id在DOM结果渲染完后&#xff0c;更新页面数据&#xff0c;否则会报错&#xff0c;找不到对应节点或对应节点为空 <view v-for"(item, index) in itemList" :key"index"…

OWASP十大API漏洞解析:如何抵御Bot攻击?

新型数字经济中&#xff0c;API是物联网设备、Web和移动应用以及业务合作伙伴流程的入口点。然而&#xff0c;API也是犯罪分子的前门&#xff0c;许多人依靠Bot来发动攻击。对于安全团队来说&#xff0c;保护API并缓解Bot攻击至关重要。那么Bot在API攻击中处于怎样的地位&#…

【ARM+Codesys案例】T3/RK3568/树莓派+Codesys枕式包装机运动控制器

枕式包装机是一种包装能力非常强&#xff0c;且能适合多种规格用于食品和非食品包装的连续式包装机。它不但能用于无商标包装材料的包装&#xff0c;而且能够使用预先印有商标图案的卷筒材料进行高速包装。同时&#xff0c;具有稳定性高、生产效率高&#xff0c;适合连续包装、…

C语言 数组—— 一维数组下标越界问题分析

目录 数组元素的访问 一维数组元素的越界访问 二维数组元素的越界访问 小结 数组元素的访问 访问数组元素时&#xff0c; 下标越界 是大忌&#xff01;  编译器通常不检查下标越界&#xff0c;导致程序运行时错误  下标越界&#xff0c;将访问数组以外的空间  …

pyqt窗体水印

pyqt窗体水印 介绍效果代码 介绍 给窗体加上水印 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPainter, QColor, QFont,QPen from PyQt5.QtCore import Qtclass WatermarkedWindow(QMainWindow):def __init__(se…

鸿蒙4.2小版本推出,鸿蒙5.0已经不远了

上个月&#xff0c;市场上迎来了华为鸿蒙系统4字开头的小升级&#xff0c;版本来到了4.2版本。 我们先来看看4.2版本都给用户带来哪些特色&#xff1a; 界面切换更流畅&#xff1a;无论是响应速度还是操作手感&#xff0c;用户都将感受到更加迅速和顺滑的体验 搜星速度的显著…

工具:Visual Studio Code

一、VSCode生成exe 二、在vs中断点调试 如果没效果需要安装如下与unity相连接的插件 三、注释 1、代码注释 注释和取消都是都是同一个命令&#xff1a;选中代码&#xff0c;然后按住CtrlShift/ 2、方法或类注释 /// 四、导航 五、将变量注释展示到解释面板 1、直接显示 [Too…

pip安装软件包提示“没有那个文件或目录”问题的处理

文章目录 一、Python.h&#xff1a;没有那个文件或目录二、lber.h&#xff1a;没有那个文件或目录 一、Python.h&#xff1a;没有那个文件或目录 pip install -I python-ldap3.0.0b1 #异常提示In file included from Modules/LDAPObject.c:3:0:Modules/common.h:9:20: 致命错…

【NVM】持久内存的架构

1 内存数据持久化 1.1 数据持久化 持久内存系统包含如下关键组件&#xff1a;微处理器、连接微处理器内存总线上的持久内存模组&#xff08;Persistent MemoryModule&#xff0c;PMM&#xff09;及持久内存上的非易失性存储介质。 使用持久内存来实现数据的持久化&#xff0c…

SpringCloud系列(22)--Ribbon默认负载轮询算法原理及源码解析

前言&#xff1a;在上一篇文章中我们介绍了如何去切换Ribbon的负载均衡模式&#xff0c;而本章节内容则是介绍Ribbon默认负载轮询算法的原理。 1、负载轮询算法公式 rest接口第N次请求数 % 服务器集群总数 实际调用服务器下标&#xff08;每次服务器重启后rest接口计数从1开始…

爬虫在金融领域的应用:股票数据收集

介绍 在金融领域&#xff0c;准确及时的数据收集对于市场分析和投资决策至关重要。股票价格作为金融市场的重要指标之一&#xff0c;通过网络爬虫技术可以高效地从多个网站获取实时股票价格信息。本文将介绍网络爬虫在金融领域中的应用&#xff0c;重点讨论如何利用Scrapy框架…

给uniapp的扩展组件uni-file-picker设置默认显示的图片

官方给出的代码如下所示&#xff0c;但是按照官网给出的代码图片并没有显示出来。 <template><uni-file-picker readonly :value"fileLists" :imageStyles"imageStyles" file-mediatype"image"></uni-file-picker> </temp…

四川农业大学Java实训项目圆满收官,汇智知了堂引领学子实践创新

近日&#xff0c;四川农业大学与汇智知了堂共同举办的Java实训项目正式迎来了项目汇报阶段。本次实训是汇智知了堂在高等教育领域深化校企合作、推动产教融合的一次重要实践&#xff0c;旨在为广大学子提供一个将理论知识与实际操作相结合的平台。 在实训过程中&#xff0c;汇…