[PCIe] PCIe 枚举过程-TODO

1. 设备的发现与bdf number的确定

枚举的第一个过程是rc端通过向bus上发起配置空间访问获取整个总线拓扑上的设备信息。

简单说来就是去遍历每个bus,以及bus下device的配置空间。如果读到有效的device ID值(非全F)则认为发现了可用的设备。

1.1 bdf number的分配

bus device function这3个number的分配是很有意思的事情。对于每个pcie设备来说,配置空间中并没有寄存器可以用来配置或者修改bdf number。那么这3个值在到底是怎么确定的呢。

经典的说法是,bdf number是由pcie总线的硬件拓扑来决定的。这个说法按照pcie的规范来说没有问题,但前提条件是必须先按照规范对整个总线进行枚举。在枚举之前,实际上每个设备的bdf number是不确定的。[注1]

1.1.1 function number的确定

function number是用于多function设备用于区分设备中具体访问的是哪个function的。那么对于大部分单function的设备来说,function number就固定为0;对于多个function的device或者支持虚拟function的device,function number也是由device内部来进行管理和区分的,不需要通过总线枚举来确定。

1.1.2 device和bus number的确定

为支持ID路由,每个PCIE设备(端点和交换开关)中都应设置有贮存设备总线号和设备号的寄存器,复位时,该寄存器清0,每当设备在它的原级链路上检测到一个Type0的 config transaction 事务包时,它就从该TLP头标中的第8~9字节“捕获”总线号和设备 号作为它自己的bus和device号,并贮存入上述总线号和设备号寄存器。所以说在接收至少一个 Type0配置访问事务包以前,设备不会响应除配置周期以外的任何事务。PCIE协 议中没有定义贮存总线号和设备号信息的配置空间单元,只是规定了它必须做这件事。

两个对接的PCIE设备,主设备是RC端,从设备是EP端,那么上电复位后,EP是如何获取自身的bus number的呢?

在这样的一个PCIE结构中,上电复位后,RC端发起一个对EP的配置访问事务,EP会解析配置请求中的bus number,并保存下来,作为自身的bus number号。之后就可以相应其他TLP事务了。也就是说,上电复位后,EP必须先接收到一个配置请求,然后才能响应其他TLP事务。

@【注1】,这里提一点,如果没有按照规范对设备进行枚举。对于rc直接接一个ep device的情况,在裸机的环境下实际上rc的driver可以为对端ep分配任意的bus和device number。因为pcie是点对点连接,第一笔Type0的 config transaction 事务的bus和device number无论是何值,都会被对端ep接收到,并保存下来作为自己的bus和device number。后续用这个bus和device number就可以访问对端的ep设备,直到ep设备复位。

1.2 枚举

前面内容已经说明了一个设备的bdf number的确定,那么枚举的过程也就是rc的系统软件通过配置空间访问来确定以及扫描整个总线拓扑的过程。

 

2. bar的分配

  • 6
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
编写基于WPF的桌面应用——Todo,是一个非常有趣且具有挑战性的任务。WPF是一种用于创建桌面应用程序的技术,它提供了丰富的用户界面元素和MVVM(模型-视图-视图模型)模式,使开发人员能够创建美观且响应式的应用程序。 首先,在WPF中创建Todo应用的用户界面会更加直观和灵活。可以使用各种控件和布局,如列表框、按钮、文本框等,来设计Todo列表的显示和编辑界面。还可以添加复选框来标记已完成的任务,使用滚动视图以处理较长的任务列表,并设计一致的样式和颜色方案以提升用户体验。 其次,在WPF中实现Todo应用的功能也相对简单。可以创建一个Todo类来表示单个任务,包含任务标题、描述、截止日期等属性,并在界面中创建一个列表来显示所有的任务。用户可以通过输入框和按钮,添加、修改或删除任务。可以使用数据绑定机制将任务数据与界面元素实时同步,并借助WPF的命令系统实现任务操作的逻辑。此外,还可以使用数据验证机制对任务的属性进行验证,以确保输入的合法性。 另外,WPF还提供了强大的样式和模板功能,使开发人员能够轻松地对界面进行自定义。可以根据个人喜好和应用的特点,设计各种不同的主题和样式,使Todo应用拥有独特而美观的外观。 总之,编写基于WPF的桌面应用Todo是一项有趣且具有挑战性的任务。借助WPF丰富的用户界面元素和强大的功能,我们可以创造出一个美观、功能完善的Todo应用,提升用户体验并提高工作效率。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值