DXGKDDI_DPSBMTRANSMISSION callback function (dispmprt.h)

The DXGKDDI_DPSBMTRANSMISSION callback is used to communicate with DisplayPort (DP) branch devices and sink devices behind branch devices via the sideband channel.

Syntax

DXGKDDI_DPSBMTRANSMISSION DxgkddiDpsbmtransmission;

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

Parameters

Context

Context pointer provided when querying the interface.

pArgs

Pointer to a DXGKARG_DPSBMTRANSMISSION structure.

Return value

DXGKDDI_DPSBMTRANSMISSION returns STATUS_SUCCESS if it succeeds; otherwise it returns an error code such as one of the following:

Error Code Meaning
STATUS_DRIVER_INTERNAL_ERROR An internal software error occurred.
STATUS_ACCESS_DENIED The request is not supported. For Windows 10 version 2004, only Sideband Message requests listed in the Remarks section below are supported.
STATUS_BUFFER_TOO_SMALL The buffer is too small for Sideband message reply or other operations.
STATUS_DEVICE_HARDWARE_ERROR A hardware error occurred.
STATUS_DEVICE_POWERED_OFF The device is powered off.
STATUS_DEVICE_NOT_CONNECTED The device is not connected.
STATUS_DEVICE_PROTOCOL_ERROR An error occurred at the DP AUX, I2C over AUX protocol level. The driver can use DPNativeError to encode more details about the error.

Remarks

For Windows 10 version 2004, a driver is only required to support the following query type of Sideband Message (SBM) requests:

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

The display kernel runtime blocks other SBM requests.

For a SBM Transaction, a request is written to and reply is read from fixed DPCD ranges per the DP spec (DOWN_REQ and UP_REP), so there is no address field.

DXGKDDI_DPSBMTRANSMISSION is “atomic”, so the driver should wait for and receive the reply of the SBM request before returning. The SBM request in pArgs->Data is fully packetized by the caller, so the driver can directly write the RequestLength of Data in SBM packet size sequentially into DPCD range for DOWN_REQ. The driver should receive the SBM reply packets directly into Data without processing/interpretation.

The driver should use the End_Of_Message bit in the SideBand_MSG_Header to decide if a full reply has been received but should avoid further processing. Data can hold a reply up to MaxReplyLength in bytes, so the driver needs to discard the overflowing packet. The driver should return the actual length of the reply in ActualReplyLength.

The driver doesn’t need to specifically check for a NAK reply, which is decoded by the caller just as another ACK reply. For a NAK reply, driver should return STATUS_SUCCESS.

The MaxReplyLength is at least 48 bytes, which is the maximum Sideband Message packet size. This allows the raw message to be copied directly for a single packet reply. For a reply with multiple packets, MaxReplyLength is calculated based on a packet size of 16 bytes and longest Relative Address in the SBM header to lower the possibility of insufficient buffer.

The CanUseCachedData flag indicates that driver can return a cached reply data, but it needs to be in SBM packet format.

Requirements

Requirement Value
Minimum supported client Windows 10, version 2004
Header dispmprt.h

See also

DXGKARG_DPSBMTRANSMISSION