EVT_UCX_ROOTHUB_GET_INFO Rückruffunktion (ucxroothub.h)

Die Implementierung des Clienttreibers, die UCX aufruft, wenn eine Anforderung für Informationen zum Stammhub empfangen wird.

Syntax

EVT_UCX_ROOTHUB_GET_INFO EvtUcxRoothubGetInfo;

void EvtUcxRoothubGetInfo(
  [in] UCXROOTHUB UcxRootHub,
  [in] WDFREQUEST Request
)
{...}

Parameter

[in] UcxRootHub

Ein Handle für ein UCX-Objekt, das den Stammhub darstellt.

[in] Request

Eine Struktur vom Typ ROOTHUB_INFO.

Rückgabewert

Keine

Bemerkungen

Der UCX-Clienttreiber registriert diese Rückruffunktion bei der USB-Hostcontrollererweiterung (UCX), indem er die UcxRootHubCreate-Methode aufruft .

Die _ROOTHUB_INFO-Struktur enthält die Anzahl der USB 2.0- und USB 3.0-Ports, die vom Stammhub unterstützt werden.

Nachdem UCX die EVT_UCX_ROOTHUB_GET_INFO-Funktion aufgerufen hat, bleibt die Anzahl der Ports, die vom Stammhub verfügbar gemacht werden, garantiert gleich. Beachten Sie, dass dies virtuelle Ports und keine physischen Ports sind. Jeder physische USB-Anschluss wird durch einen oder mehrere Ports mit unterschiedlicher Geschwindigkeit auf dem Stammhub dargestellt.

Der Clienttreiber gibt den Abschluss status in Anforderung zurück. Der Treiber kann WDFREQUEST asynchron abschließen.

Beispiele

VOID
RootHub_EvtRootHubGetInfo(
    UCXROOTHUB         UcxRootHub,
    WDFREQUEST         Request
)
/*++

    For sample demonstration purposes, this function returns statically
    defined information for the root hub.

--*/
{
    PUCX_ROOTHUB_CONTEXT    ucxRootHubContext;
    WDF_REQUEST_PARAMETERS  wdfRequestParams;
    PROOTHUB_INFO           rootHubInfo;
    NTSTATUS                status;

    ucxRootHubContext = GetUcxRootHubContext(UcxRootHub);

    WDF_REQUEST_PARAMETERS_INIT(&wdfRequestParams);
    WdfRequestGetParameters(Request, &wdfRequestParams);

    rootHubInfo = (PROOTHUB_INFO)wdfRequestParams.Parameters.Others.Arg1;

    if (rootHubInfo->Size < sizeof(ROOTHUB_INFO)) {
        DbgTrace(TL_ERROR, RootHub, "Invalid ROOTHUB_INFO Size %d", rootHubInfo->Size);
        status = STATUS_INVALID_PARAMETER;
        goto RootHub_EvtRootHubGetInfo;
    }

    rootHubInfo->ControllerType = ControllerTypeSoftXhci;
    rootHubInfo->NumberOf20Ports = ucxRootHubContext->NumberOf20Ports;
    rootHubInfo->NumberOf30Ports = ucxRootHubContext->NumberOf30Ports;
    rootHubInfo->MaxU1ExitLatency = ucxRootHubContext->U1DeviceExitLatency;
    rootHubInfo->MaxU2ExitLatency = ucxRootHubContext->U2DeviceExitLatency;

    DbgTrace(TL_INFO, RootHub, "RootHub_UcxEvtGetInfo NumberOf20Ports %d NumberOf30Ports %d", rootHubInfo->NumberOf20Ports, rootHubInfo->NumberOf30Ports);

    status = STATUS_SUCCESS;

RootHub_EvtRootHubGetInfo:

    WdfRequestComplete(Request, status);
}

Anforderungen

Anforderung Wert
Zielplattform Windows
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile ucxroothub.h (include Ucxclass.h)
IRQL DISPATCH_LEVEL

Weitere Informationen

_ROOTHUB_INFO