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 对于 Sideband 消息回复或其他作,缓冲区太小。
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 为“atomic”,因此驱动程序应在返回之前等待并接收 SBM 请求的答复。 pArgs->数据 中的 SBM 请求由调用方完全数据包化,因此驱动程序可以直接将 SBM 数据包大小中 数据RequestLength 写入 DPCD 范围,以便DOWN_REQ。 驱动程序应直接从 数据 接收 SBM 回复数据包,而无需处理/解释。

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

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

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

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

要求

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

另请参阅

DXGKARG_DPSBMTRANSMISSION