Freigeben über


EVT_UCX_ROOTHUB_GET_INFO Rückruffunktion (ucxroothub.h)

Die Implementierung des Clienttreibers, die UCX aufruft, wenn sie eine Anforderung für Informationen zum Stammhub empfängt.

Syntax

EVT_UCX_ROOTHUB_GET_INFO EvtUcxRoothubGetInfo;

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

Parameter

[in] UcxRootHub

Ein Handle zu einem UCX-Objekt, das den Stammhub darstellt.

[in] Request

Eine Struktur vom Typ ROOTHUB_INFO.

Rückgabewert

Nichts

Bemerkungen

Der UCX-Clienttreiber registriert diese Rückruffunktion mit der USB-Hostcontrollererweiterung (UCX), indem die UcxRootHubCreate-Methode aufgerufen wird.

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 aufruft, bleibt die Anzahl der Ports, die vom Stammhub verfügbar gemacht werden, garantiert gleich bleiben. Beachten Sie, dass es sich hierbei um virtuelle Ports und nicht um physische Ports handelt. Jeder physische USB-Anschluss wird durch einen oder mehrere Ports unterschiedlicher Geschwindigkeit auf dem Stammhub dargestellt.

Der Clienttreiber gibt den Abschlussstatus in Anforderungs-zurück. Der Treiber kann den 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- Fenster
Minimale KMDF-Version 1.0
Mindest-UMDF-Version 2.0
Header- ucxroothub.h (include Ucxclass.h)
IRQL- DISPATCH_LEVEL

Siehe auch

_ROOTHUB_INFO