Partager via


EVT_UCX_ROOTHUB_GET_INFO fonction de rappel (ucxroothub.h)

Implémentation du pilote client qui appelle UCX lorsqu’il reçoit une demande d’informations sur le hub racine.

Syntaxe

EVT_UCX_ROOTHUB_GET_INFO EvtUcxRoothubGetInfo;

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

Paramètres

[in] UcxRootHub

Handle vers un objet UCX qui représente le hub racine.

[in] Request

Structure de type ROOTHUB_INFO.

Valeur de retour

Aucun

Remarques

Le pilote client UCX inscrit cette fonction de rappel auprès de l’extension UCX (Host Controller Extension) USB en appelant la méthode UcxRootHubCreate.

La structure _ROOTHUB_INFO contient le nombre de ports USB 2.0 et USB 3.0 pris en charge par le hub racine.

Une fois UCX appelé la fonction EVT_UCX_ROOTHUB_GET_INFO, le nombre de ports exposés par le hub racine est garanti pour rester le même. Notez qu’il s’agit de ports virtuels, et non de ports physiques. Chaque connecteur USB physique est représenté par un ou plusieurs ports d’une vitesse différente sur le hub racine.

Le pilote client retourne l’état d’achèvement dans demande. Le pilote peut effectuer l’opération WDFREQUEST de manière asynchrone.

Exemples

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);
}

Exigences

Exigence Valeur
plateforme cible Windows
version minimale de KMDF 1.0
version minimale de UMDF 2.0
d’en-tête ucxroothub.h (include Ucxclass.h)
IRQL DISPATCH_LEVEL

Voir aussi

_ROOTHUB_INFO