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 |