DXGKDDI_DPSBMTRANSMISSION回调函数 (dispmprt.h)

DXGKDDI_DPSBMTRANSMISSION回调用于通过边带通道与 DisplayPort (DP) 分支设备和分支设备后面的接收器设备通信。

语法

DXGKDDI_DPSBMTRANSMISSION DxgkddiDpsbmtransmission;

NTSTATUS DxgkddiDpsbmtransmission(
  HANDLE Context,
  PDXGKARG_DPSBMTRANSMISSION pArgs
)
{...}

参数

Context

查询接口时提供的上下文指针。

pArgs

指向 DXGKARG_DPSBMTRANSMISSION 结构的指针。

返回值

如果成功,DXGKDDI_DPSBMTRANSMISSION 返回STATUS_SUCCESS;否则,它将返回如下所示的错误代码之一:

错误代码 含义
STATUS_DRIVER_INTERNAL_ERROR 出现内部软件错误。
STATUS_ACCESS_DENIED 不支持该请求。 对于 Windows 10 版本 2004,仅支持以下 “备注 ”部分中列出的边带消息请求。
STATUS_BUFFER_TOO_SMALL 缓冲区太小,无法回复边带消息或其他操作。
STATUS_DEVICE_HARDWARE_ERROR 发生了硬件错误。
STATUS_DEVICE_POWERED_OFF 设备已关闭电源。
STATUS_DEVICE_NOT_CONNECTED 设备未连接。
STATUS_DEVICE_PROTOCOL_ERROR DP AUX、I2C 在 AUX 协议级别发生错误。 驱动程序可以使用 DPNativeError 来编码有关错误的更多详细信息。

注解

对于 Windows 10 版本 2004,驱动程序只需要支持以下查询类型的边带消息 (SBM) 请求:

  • GET_MESSAGE_TRANSACTION_VERSION
  • LINK_ADDRESS
  • QUERY_PAYLOAD
  • REMOTE_DPCD_READ
  • REMOTE_I2C_READ
  • QUERY_STREAM_ENCRYPTION_STATUS

显示内核运行时会阻止其他 SBM 请求。

对于 SBM 事务,会根据 DP 规范 (DOWN_REQ 和UP_REP) 写入请求,并从固定 DPCD 范围读取答复,因此没有地址字段。

DXGKDDI_DPSBMTRANSMISSION 是“原子”,因此驱动程序应在返回之前等待并接收 SBM 请求的回复。 pArgs-Data> 中的 SBM 请求由调用方完全数据包化,因此驱动程序可以直接将 SBM 数据包大小中的RequestLength 按顺序写入 DPCD 范围,以便DOWN_REQ。 驱动程序应将 SBM 回复数据包直接接收到 数据 中,而无需处理/解释。

驱动程序应使用SideBand_MSG_Header中的End_Of_Message位来确定是否已收到完整回复,但应避免进一步处理。 数据 可以保留 对 MaxReplyLength 的回复(以字节为单位),因此驱动程序需要放弃溢出的数据包。 驱动程序应在 ActualReplyLength 中返回回复的实际长度。

驱动程序不需要专门检查 NAK 回复,该回复由调用方解码为另一个 ACK 回复。 对于 NAK 回复,驱动程序应返回STATUS_SUCCESS。

MaxReplyLength 至少为 48 个字节,这是最大边带消息数据包大小。 这允许直接复制原始消息进行单个数据包回复。 对于包含多个数据包的回复, MaxReplyLength 基于 16 字节的数据包大小和 SBM 标头中最长的相对地址进行计算,以降低缓冲区不足的可能性。

CanUseCachedData 标志指示驱动程序可以返回缓存的答复数据,但它需要采用 SBM 数据包格式。

要求

要求
最低受支持的客户端 Windows 10 版本 2004
标头 dispmprt.h

另请参阅

DXGKARG_DPSBMTRANSMISSION