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 |