OID_SRIOV_PROBED_BARS
NDIS (OID) 查询请求OID_SRIOV_PROBED_BARS发出对象标识符,以获取网络适配器的 PCI Express (PCIe) 基址寄存器 (BA) 的值。 此函数返回网络适配器在 PCI 总线驱动程序执行的查询后报告的 BAR 值。 此查询确定网络适配器所需的内存或 I/O 地址空间。
NDIS 向网络适配器的 PCIe 物理功能 (PF) 的微型端口驱动程序发出OID_SRIOV_PROBED_BARS的 OID 查询请求。 对于支持单根 I/O 虚拟化 (SR-IOV) 接口的 PF 微型端口驱动程序,需要此 OID 查询请求。
NDIS_OID_REQUEST 结构的 InformationBuffer 成员包含指向缓冲区的指针。 此缓冲区的格式设置为包含以下内容:
一个NDIS_SRIOV_PROBED_BARS_INFO结构,包含用于对网络适配器的 PCI BA 执行读取操作的参数。
PCIe 网络适配器的每个 BAR 的 ULONG 值的数组。 此数组中的最大元素数为PCI_TYPE0_ADDRESSES。
注解
在 Hyper-V 父分区的管理操作系统中运行的 PCI 总线驱动程序查询网络适配器的每个 PCI 基址寄存器 (BAR) 的内存或 I/O 地址空间要求。 PCI 总线驱动程序在首次在总线上检测到适配器时执行此查询。
通过此 PCI BAR 查询,PCI 总线驱动程序确定以下内容:
网络适配器是否支持 PCI BAR。
如果支持 BAR,则 BAR 需要多少内存或 I/O 地址空间。
虚拟 PCI (VPCI) 总线驱动程序在 Hyper-V 子分区的来宾操作系统中运行。 将 PCI Express (PCIe) Virtual Function (VF) 附加到子分区时,VPCI 总线驱动程序将为 VF (VF 网络适配器) 公开虚拟网络适配器 。 在执行此操作之前,VPCI 总线驱动程序必须执行 PCI BAR 查询,以确定 VF 网络适配器所需的内存或地址空间。
由于对 PCI 配置空间的访问是一种特权操作,因此只能由 Hyper-V 父分区的管理操作系统中运行的组件执行。 当 VPCI 总线驱动程序查询 PCI BA 时,NDIS 向 PF 微型端口驱动程序发出OID_SRIOV_PROBED_BARS的 OID 查询请求。 此 OID 查询请求返回的结果将转发到 VPCI 总线驱动程序,以便它可以确定 VF 网络适配器需要多少内存地址空间。
注意 OID_SRIOV_PROBED_BARS的 OID 请求只能由 NDIS 发出。 OID 请求不得由过度分配驱动程序(例如筛选器驱动程序的协议)发出。
OID_SRIOV_PROBED_BARS查询请求包含 NDIS_SRIOV_PROBED_BARS_INFO 结构。 当 PF 微型端口驱动程序处理此 OID 时,驱动程序必须返回由 NDIS_SRIOV_PROBED_BARS_INFO 结构的 BaseRegisterValuesOffset 成员引用的数组中的 PCI BAR 值。 对于数组中的每个偏移量,PF 微型端口驱动程序必须将 array 元素设置为 BAR 的 ULONG 值,该偏移量与物理适配器的 PCI 配置空间中的偏移量相同。
驱动程序返回的每个 BAR 值必须与在管理操作系统中运行的 PCI 驱动程序执行的 PCI BAR 查询后面的值相同。 PF 微型端口驱动程序可以调用 NdisMQueryProbedBars 来确定此信息。
有关 PCI 设备的 BA 的详细信息,请参阅 PCI 本地总线规范。
有关如何查询 VF 的 PCI BAR 寄存器的详细信息,请参阅 查询虚拟函数的 PCI 基址寄存器。
返回状态代码
PF 微型端口驱动程序为OID_SRIOV_PROBED_BARS的查询请求返回以下状态代码之一:
状态代码 | 说明 |
---|---|
NDIS_STATUS_SUCCESS |
OID 请求已成功完成。 |
NDIS_STATUS_NOT_SUPPORTED |
PF 微型端口驱动程序不支持单根 I/O 虚拟化 (SR-IOV) 接口,或者未启用该接口。 |
NDIS_STATUS_INVALID_PARAMETER |
NDIS_SRIOV_PROBED_BARS_INFO 结构的一个或多个成员具有无效值。 |
NDIS_STATUS_INVALID_LENGTH |
信息缓冲区小于 (NDIS_SRIOV_PROBED_BARS_INFO) + PCI_TYPE0_ADDRESSES) (大小。 PF 微型端口驱动程序必须设置 DATA。QUERY_INFORMATION。NDIS_OID_REQUEST结构中的 BytesNeeded 成员达到所需的最小缓冲区大小。 |
NDIS_STATUS_FAILURE |
请求因其他原因而失败。 |
要求
版本 |
在 NDIS 6.30 及更高版本中受支持。 |
标头 |
Ntddndis.h (包括 Ndis.h) |