当前位置: 首页 > news >正文

(DXE_DRIVER)PciHostBridge

UEFI-PciHostBridge

1、PciHostBridge简介

   PciHostBridge: 提供PCI配置空间,IO,MEM空间访问接口以及统一维护平台相关的PCI资源,提供gEfiPciHostBridgeResourceAllocationProtocolGuid,创建RootBridge等为PciBusDxe提供服务;

2、PciHostBridge 配置空间

在这里插入图片描述
  PCI桥可管理其下PCI子树
  SubBus:当前PCI子树中编号最大的PCI总线号
  SecBus:当前PCI桥的下游总线的总线号
  PriBus:当前PCI桥的上游总线的总线号
初始化为0
  Secondary Latency Timer:管理PCI桥发往下游总线的超时机制。
  I/O Limit 、I/O Base、Memory Limit、Memory Base:存放子树中所有设备使用的I/O或MEM地址空间集合的基地址及大小。PCI规定MEM的这个空间至少为1MB。
  Prefetchable Memory Limit、Prefetchable Memory Base:存放子树中所有设备使用的可预取MEM空间的基地址及大小。
Bridge Control Register:用来管理下游总线

3、PciHostBridgeDxe

3.1 InitializePciHostBridge

 PciHostBridgeGetRootBridges(ScanForRootBridges):
1、 一个PCI总线域的Bus取值范围为 0 ~ 255,Dev 0 ~ 31, Func 0 ~ 7.  通过Bus/Dev/Func三层for循环轮询,挨个检查每个Func的configuration space的Vendor ID是否为FFFFh. 按照PCI spec定义FFFFh表示Func不存在。
2、如果轮询发现一个Bus下至少存在一个Func, 则表示Root Bridge存在(有意义)。然后在RootBridges数组为这个Root Bridge分配并初始化一个PCI_ROOT_BRIDGE元素。

在这里插入图片描述
分配HostBridge IO空间
在这里插入图片描述
分配内存空间
在这里插入图片描述

3.2 相关指针

在这里插入图片描述

  • EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL;实例是由DXE驱动程序生成的,可以查询以识别关联的PCI根桥的设备句柄。
  • GetNextRootBridge:返回与此Host bridge关联的下一个PCI根桥的device handle。
  • NotifyPhase:这些是来自PCI总线驱动程序的通知,它即将进入某个
    PCI枚举过程的阶段。该成员功能可用于通知主桥驱动程序执行特定动作,包括任何芯片组特定的初始化,以便芯片组准备好进入下一阶段。
    1、 case EfiPciHostBridgeAllocateResources:
    PCI枚举器应发出此通知,在开始新的枚举过程之前。
    在这里插入图片描述
    2、EfiPciHostBridgeBeginBusAllocation:开始总线分配
    3、EfiPciHostBridgeEndBusAllocation:结束总线分配
    4、EfiPciHostBridgeBeginResourceAllocation:HostBridge开始资源分配
    5、EfiPciHostBridgeAllocateResources:HostBridge分配资源。
    在这里插入图片描述
    6、EfiPciHostBridgeSetResources:HostBridge设置资源
    7、EfiPciHostBridgeFreeResources:HostBridge释放资源
    8、EfiPciHostBridgeEndResourceAllocation:HostBridge 结束资源分配
  • GetNextRootBridge:返回与此Host bridge关联的下一个PCI根桥的device handle。
    在这里插入图片描述
  • GetAttributes:返回PCI根桥的分配属性。
  • StartBusEnumeration:为总线枚举进程设置指定的PCI根桥。主要填充EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR结构体。
  • SetBusNumbers:输入参数Configuration指定的总线范围。
  • SubmitResources:从Configuration中获取I/O 和内存资源,提交到PCI root bridge里。
  • GetProposedResources:从Configuration获取资源

4、PciBusDriver

1、EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
  实例是由DXE驱动程序生成的,可以查询以识别关联的PCI根桥的设备句柄。

2、GetNextRootBridge:返回与此Host bridge关联的下一个PCI根桥的device handle。

3、NotifyPhase:这些是来自PCI总线驱动程序的通知,它即将进入某个
PCI枚举过程的阶段。该成员功能可用于通知主桥驱动程序执行特定动作,包括任何芯片组特定的初始化,以便芯片组准备好进入下一阶段。
此时定义了八个通知阶段。请参见以下内容:

EfiPciHostBridgeBeginEnumeration:PCI枚举器应发出此通知,在开始新的枚举过程之前。
EfiPciHostBridgeBeginBusAllocation:开始总线分配
EfiPciHostBridgeEndBusAllocation:结束总线分配
EfiPciHostBridgeBeginResourceAllocation:HostBridge开始资源分配
EfiPciHostBridgeAllocateResources:HostBridge分配资源
EfiPciHostBridgeSetResources:HostBridge设置资源
EfiPciHostBridgeFreeResources:HostBridge释放资源
EfiPciHostBridgeEndResourceAllocation:HostBridge 结束资源分配

4、GetAttributes:返回PCI根桥的分配属性。

5、StartBusEnumeration:为总线枚举进程设置指定的PCI根桥。

6、SetBusNumbers:对PCI根桥硬件进行编程,以便对指定的PCI总线范围进行解码,该成员函数对指定的PCI根桥进行编程,以解码输入参数Configuration指定的总线范围。

7、SubmitResources:提交特定的PCI root bridge 的I/O 和内存资源

8、GetProposedResources:得到特定的PCI root bridge 被提交的资源

9、PreprocessController:提供从PCI总线驱动程序到各个PCI控制器(设备/功能)的挂钩PCI枚举过程的阶段,允许主桥驱动程序预先初始化单个枚举之前的PCI控制器。

2、EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR
  来自ACPI规范中的以下两种资源描述符类型只能用于描述不兼容的PCI设备资源需求:
  QWORD地址空间描述符可以描述动态或固定资源的内存、I/O和总线号范围。
PCI根桥接器的配置用一个或多个QWORD地址空间描述符来描述,然后是一个结束标记。下面的表5-20和表5-21包含了这两种描述符类型
在这里插入图片描述
在这里插入图片描述

4、PciBusDriver

4.1 PCI枚举过程

  Dev和Fun号应该是和硬件设计有关系,也就是硬件就已经固定,软件的枚举过程是更多的是在分配Bus号。
  对CPU来说,最开始仅仅知道Bus0的存在,Bus0下面都有什么设备,PCIE树是怎么样的一概不知。因此首先从Bus0,Dev0(桥A)开始,先去读Dev0中Fun0的DID&VID(一定是从Fun0开始),看其是否返回0,如果不为0则表示设备存在,继续下一步。若返回FFFF,则Dev0中没有Fun0(任何设备的第一种功能一定是0),因此该设备不存在,继续探查Bus0,Dev1,Fun0。
  PCI设备的扫描是基于深度优先搜索算法(DFS:Depth First Search),也就是说,下级分支最多的PCI桥将最先完成其子设备的扫描。BUS:0-255,Device:0-31,Function:0-7
在这里插入图片描述

4.2 PCI枚举设计

  • 1、如果硬件支持动态更改PCI根总线的数量或更改与PCI根总线相关联的段号,则必须在下一个步骤之前完成这些更改。
  • 2、PCI主机桥接驱动程序(s)为系统中的PCI主机桥接创建一个设备句柄,并在该句柄上安装一个EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL实例。
  • 3、PCI Root Bridge驱动程序(s)会为每个PCI根桥接器创建一个设备句柄,并在该句柄上安装以下内容:
    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL的一个实例
    EFI_DEVICE_PATH_PROTOCOL的一个实例
    预计单个驱动程序将处理一个PCI Host Bridge,以及所有关联的PCI根桥。EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL的副句柄字段必须使用包含EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL实例的PCI主机桥接的句柄进行初始化。

4.3 PCI分配BUS号

在这里插入图片描述
  当枚举过程结束后,系统中就已经维护了PCI设备的各类信息了,在设备驱动匹配模型中,总线和设备都已经具备了。

4.4 PciBusDriver代码流程

MdeModulePkg\Bus\Pci\PciBusDxe\PciBus.c
PciBusDriverBindingStart():Start this driver on ControllerHandle and enumerate Pci bus and start all device under PCI bus.

 PciBusDriverBindingStart()1. PciEnumerator1、打开gEfiPciHostBridgeResourceAllocationProtocolGuid2、PciHostBridge枚举1、初始化RootBridgeList2、创建根桥设备RootBridgeDev3、PciRootBridgeEnumerator:枚举根桥下的所有总线1、PciScanBus:分配总线号1、递归搜索BUS,device,function2、维护根桥、设备信息4、有效根桥增加到RootBridgeLis链表中5、有效设备加到RootBridgeDev链表中3、PciHostBridgeResourceAllocator 提交资源分配1、CreateResourceNode:创建资源节点2、通过遍历受此根网桥约束的所有设备来创建资源映射3、 基于全部资源树,构造ACPI资源节点,向pci主桥协议提交资源aperture 4、提交AcpiConfig  PciResAlloc->SubmitResources5、通知平台开始对资源进行编程  NotifyPhase (PciResAlloc, EfiPciHostBridgeAllocateResources);     6、通知pci总线驱动程序开始对资源进行编程 NotifyPhase (PciResAlloc, EfiPciHostBridgeSetResources)7、通知资源分配阶段结束 NotifyPhase (PciResAlloc, EfiPciHostBridgeFreeResources);2. StartPciDevices1、Start all the devices under the entire host bridge.2、PciIoDevice->Handle 上安装gEfiDevicePathProtocolGuid,gEfiPciIoProtocolGuidGetPciRom:Get the OpRom provided by platformPciRomAddImageMapping:Add the Rom Image to internal database填充PciIoDevice与optionrom相关字段。ProcessOpRomImage ():Load and start the Option Rom image.

相关文章:

(DXE_DRIVER)PciHostBridge

UEFI-PciHostBridge 1、PciHostBridge简介 PciHostBridge: 提供PCI配置空间,IO,MEM空间访问接口以及统一维护平台相关的PCI资源,提供gEfiPciHostBridgeResourceAllocationProtocolGuid,创建RootBridge等为PciBusDxe提供服务; 2、PciHostBridge 配置空间 PCI桥可管理其下PCI子…...

SpringMVC的增删改查的案例

目录 前言: 1.总体思路: 2.前期准备 3.前台页面 前言: 我们今天来学习研究SpringMVC的增删改查,希望这篇博客能够帮助正在学习,工作的你们!!! 1.总体思路: 首先我们得…...

golang入门笔记——nginx

文章目录 Nginx介绍Nginx的安装Nginx文件Nginx反向代理负载均衡nginx动静分离URLRewrite防盗链nginx高可用配置安全性Nginx限流Nginx缓存集成Lua脚本OpenRestry Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强&#x…...

最新报告!TikTok 市场小家电大商机,GMV破亿的爆款如何复制?

近期,新锐小家电品牌Gaabor空气炸锅在东南亚卖爆了,单款商品GMV短时间内突破两亿,在印尼、泰国、马来西亚、菲律宾、越南均开设本土TikTok 小店,增长势头还在持续。 但Gaabor并不是个例。 整个东南亚家电市场规模增长迅速&#…...

功能定义-紧急制动系统

功能简介 紧急制动系统的触发过程如上图所示: 安全距离报警:当两车距离较近时,会给予驾驶员相应提示 预报警:当两车存在碰撞风险但风险较低【Danger Level1】时,会给予驾驶员提示【提示相比之前更为明显】 制动预填充&…...

Map与Set的区别

map与set是一种进行搜索的数据结构。 一 Map map存储的是key-value的键值对。 1 map中的常见方法 方法作用put(key,value)向map中存放key-value键值对get(key)根据key值得到value值getOrDefault(key,value)获取值为key的value,若不存在,则将key值对应…...

基于uwb和IMU融合的三维空间定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................................................................kkk 0; for E…...

Visual Studio 2019下使用C++与Python进行混合编程——环境配置与C++调用Python API接口

前言 在vs2019下使用C与Python进行混合编程,在根源上讲,Python 本身就是一个C库,那么这里使用其中最简单的一种方法是把Python的C API来嵌入C项目中,来实现混合编程。当前的环境是,win10,IDE是vs2019,python版本是3.9&#xff0c…...

STM32F4X RTC

STM32F4X RTC 什么是RTCSTM32F4X RTCSTM32F4X RTC框图STM32F4X RTC计数频率STM32F4X RTC日历STM32F4X RTC闹钟 STM32F4X RTC例程 什么是RTC RTC全程叫Real-Time Clock实时时钟,是MCU中一个用来计时的模块。RTC的一个主要作用是用来显示实时时间,就像日常…...

[git] 如何克隆仓库,进行项目撰写,并绑定自己的远程仓库

摘要:删除.git文件,才可重新绑定远程仓库。 具体步骤: 文件夹右键,进入”Git Bash Here“执行命令 1. 执行 ”git clone 仓库地址“,克隆仓库 2. 在生成的仓库中,删除 .git 文件 3. git init 初始化仓库…...

【C++】模拟实现二叉搜索树的增删查改功能

个人主页:🍝在肯德基吃麻辣烫 我的gitee:C仓库 个人专栏:C专栏 文章目录 一、二叉搜索树的Insert操作(非递归)分析过程代码求解 二、二叉搜索树的Erase操作(非递归)分析过程代码求解…...

Yolov8-pose关键点检测:模型轻量化创新 | ScConv结合c2f | CVPR2023

💡💡💡本文解决什么问题:ScConv(空间和通道重建卷积),一个即插即用的架构单元,可以可以直接用来替代各种卷积神经网络中的标准卷积。 ScConv | GFLOPs从9.6降低至9,参数量从6482kb降低至6479kb Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_637742…...

【洛谷 P1060】[NOIP2006 普及组] 开心的金明 题解(动态规划+01背包)

[NOIP2006 普及组] 开心的金明 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说…...

什么是CI/CD:持续集成与持续交付?(InsCode AI 创作助手)

在现代软件开发领域,CICD(Continuous Integration and Continuous Delivery)是一种关键性的开发实践,它有助于提高软件交付的质量和效率。本文将深入探讨CICD的定义、原理和重要性,以及如何在项目中实施CICD流程。 什…...

redis 高可用

Redis 高可用 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供…...

什么样的词条可以创建维基百科?

维基百科在国内用得比较少,有一些特殊原因,维基百科的控制权海外,目前维基百科和谷歌是一样的,在国内是无法正常访问的。但做海外推广的朋友都是知道维基百科的,小马识途营销顾问认为它在世界互联网领域的地位&#xf…...

poll epoll初学习

正是select这些缺点,才有了poll 1.I/O多路转接之poll 2.I/O多路转接之epoll 其中的struct epoll_event:...

BMS电池管理系统——电芯需求数据(三)

BMS电池管理系统 文章目录 BMS电池管理系统前言一、有什么基础数据二、基础数据分析1.充放电的截至电压2.SOC-OCV关系表3.充放电电流限制表4.充放电容量特性5.自放电率 总结 前言 在新能源产业中电芯的开发也占有很大部分,下面我们就来看一下电芯的需求数据有哪些 …...

【uniapp】关于小程序输入框聚焦、失焦(输入法占位)的问题

聊天小程序,界面带有输入框,当输入框中聚焦后,底部自动谈起输入法。此时输入框也要随之出现在输入法上方。默认情况下,输入框此时会被输入法覆盖掉。 以下是亲自实践,解决这个问题的方法: 一、小程序大概…...

MySQL的故事——创建高性能的索引

创建高性能的索引 文章目录 创建高性能的索引一、索引基础二、索引的优点三、高性能的索引策略 一、索引基础 要理解MySQL中索引是如何工作的,最简单的方法就是去看看一本书的“索引 ”部分:如果在一本书中找到某个特定主题,一般会先看书的“…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...