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

news2024/9/22 19:43:49

认识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.coloradmin.cn/o/1706911.html

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

相关文章

黑马python-面向对象程序设计

1.定义类 class 类名: 代码 ….. 注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯 2.self: self指调用该函数的对象 3.创建对象 对象名类() 4.添加获取对象属性 对象名.属性名值 5._init_()方法&…

C#电子名片(vCard)

目录 1.介绍 2.基本定义 3.字段信息 4,字段详解。 4.1,预定义类型的用法 4.2,基本类型 4.3,通讯地址类型 4.4,电信通信类型 4.5,地理类型 4.6,解释类型 5,应用。 6&…

Java | Leetcode Java题解之第103题二叉树的锯齿形层序遍历

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> ans new LinkedList<List<Integer>>();if (root null) {return ans;}Queue<TreeNode> n…

vue-cli2项目中使用scss

前言&#xff1a; 首先要搞清楚Sass和Scss的区别&#xff1a; 实际上Sass和Scss是同一种东西&#xff0c;Scss是 Sass3 引入新的语法&#xff0c;它们都是css预处理器。通常称为Sass&#xff0c;但存在两种不同的语法风格&#xff1a; 文件扩展名&#xff1a;Sass 默认…

IP 分片过程及偏移量计算

IP 报头中的三个字段 1、 标识符&#xff08; ldentifier )&#xff1a;16 bit 该字段与 Flags 和 Fragment Offest 字段联合使用&#xff0c; 对较大的上层数据包进行分段&#xff08; fragment &#xff09; 操作。 路由器将一个包拆分后&#xff0c;所有拆分开的小包被标记…

地下18米的科技守护:旗晟综合管廊巡检机器人

近日&#xff0c;安徽某业主的地下18米深的地下管廊处&#xff0c;一种先进的巡检机器人正活跃在管廊轨道上&#xff0c;执行着重要的巡检任务&#xff0c;只见机器人在管廊轨道上平稳前行&#xff0c;它搭载着先进的检测设备&#xff0c;对地下管廊内的各种设施进行监测巡检&a…

从了解到掌握 Spark 计算框架(一)Spark 简介与基础概念

文章目录 什么是 Spark&#xff1f;核心特点 Spark 对比 MapReduceSpark 编程模型RDDDataFrameDataset Spark 运行模式Spark 生态 什么是 Spark&#xff1f; Spark 是一个基于内存的分布式计算框架&#xff0c;最初由加州大学伯克利分校的 AMPLab 开发&#xff0c;后来捐赠给了…

R25 型双极型晶体管 433功率放大器,集电极电流可达100mA

R25 型硅基微波双极型晶体管是一种常见的晶体管&#xff0c;主要用于高频电子放大线路中。常被用作放大器、开关、变频器等电子电路中的核心元件。在放大电路中&#xff0c;它可以将微弱的信号放大到足以驱动输出负载&#xff1b;在开关电路中&#xff0c;它可以实现电路的打开…

邦注科技三机一体除湿干燥机在工业中的应用

三机一体除湿干燥机在工业中的应用广泛且重要&#xff0c;其结合了传统除湿机、冷凝器和加热器的功能&#xff0c;具有节能、环保、方便等特点。以下是关于三机一体除湿干燥机在工业中应用的详细解析&#xff1a; 一、应用领域 电子制造行业&#xff1a;在半导体、集成电路和…

如何实时掌握手机号状态的API利器分析

在移动互联网的时代&#xff0c;手机号码不仅是通信的连接点&#xff0c;也是用户身份的关键识别。手机状态查询API 通过提供实时的手机号码状态查询服务&#xff0c;协助企业和组织更有效地管理用户信息&#xff0c;提升服务流程。 手机状态查询API 通过与电信运营商的数据库进…

使用nexus搭建的docker私库,定期清理无用的镜像,彻底释放磁盘空间

一、背景 我们使用nexus搭建了docker镜像&#xff0c;随着推送的镜像数量越来越多&#xff0c;导致nexus服务器的磁盘空间不够用了。于是&#xff0c;我们急需先手动删除一些过期的镜像&#xff0c;可发现磁盘空间并没有释放。 那么&#xff0c;如何才能彻底释放掉呢&#xff…

Linux:confluence8.5.9的部署(下载+安装+破ji)离线部署全流程

0.环境 Confluence也是比较吃运存了&#xff0c;我建议运行运存给到4g或者4g以上就可以了&#xff0c;核数可以给到1核或以上 我部署在centos7.9操作系统上&#xff0c;ip地址为&#xff1a;192.168.6.1&#xff0c;yum仓库使用的是自己的镜像文件&#xff0c;本章所有使用到…

【前端】XML和HTML的区别详解

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

nginx安装部署问题

记一次nginx启动报错问题处理 问题1 内网部署nginx&#xff0c;开始执行make&#xff0c;执行不了&#xff0c;后面装了依赖的环境 yum install gcc-c 和 yum install -y pcre pcre-devel 问题2&#xff0c;启动nginx报错 解决nginx: [emerg] unknown directive “stream“ in…

存内计算从浮点运算优化对数据经济的提升

本篇文章将介绍存内计算技术对于数据经济的提升&#xff0c;我们将从提出问题、解答问题与阐述应用三个方面进行展开介绍&#xff0c;并引入浮点存算、等新兴存算技术进行简要介绍。 一.数据经济&存内计算&#xff0c;结合是否可行&#xff1f; 数据经济与存内计算&#…

java项目级云MES源码(制造执行系统) springboot + vue-element-plus-admin生产制造业MES系统源码

java项目级云MES源码&#xff08;制造执行系统) springboot vue-element-plus-admin生产制造业MES系统源码 MES系统通过信息传递对从订单下达到产品完成的整个生产过程进行优化管理。当工厂发生实时事件时&#xff0c;MES制造执行系统功能的发挥重点体现在及时做出反应、报告&…

Cero保存stp格式模型时保留模型的渲染效果

如果默认保存则会丢失渲染效果 如果保存时修改选项如下

Rviz 复选框插件

Rviz 复选框插件 0.引言1.实现效果 0.引言 参考1参考2参考3参考4 我想做的插件是类似于 pangolin 侧面的复选框&#xff0c;动态传递 bool 值给程序内部使用。查了一下只能是通过插件的方式进行实现。但是Display 的参数在编译阶段就写死了&#xff0c;我想要在运行期给定参数…

MOS管开关电路简单笔记

没错&#xff0c;这一篇还是备忘录&#xff0c;复杂的东西一律不讨论。主要讨论增强型的PMOS与NMOS。 PMOS 首先上场的是PMOS,它的导通条件&#xff1a;Vg-Vs<0且|Vg-Vs>Vgsth|&#xff0c;PMOS的电流流向是S->D,D端接负载&#xff0c;S端接受控电源。MOS管一般无法…

ctfshow web 月饼杯

web1_此夜圆 <?php error_reporting(0);class a {public $uname;public $password;public function __construct($uname,$password){$this->uname$uname;$this->password$password;}public function __wakeup(){if($this->passwordyu22x){include(flag.php);echo…