Share via


EVT_UCX_ROOTHUB_GET_INFO fonction de rappel (ucxroothub.h)

Implémentation du pilote client qu’UCX appelle 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

None

Remarques

Le pilote client UCX inscrit cette fonction de rappel avec l’extension de contrôleur hôte USB (UCX) 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 qu’UCX a appelé la fonction EVT_UCX_ROOTHUB_GET_INFO , le nombre de ports exposés par le hub racine reste le même. Notez qu’il s’agit de ports virtuels, pas de ports physiques. Chaque connecteur USB physique est représenté par un ou plusieurs ports de vitesse différente sur le hub racine.

Le pilote client retourne l’achèvement status dans La requête. 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);
}

Configuration requise

Condition requise Valeur
Plateforme cible Windows
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête ucxroothub.h (inclure Ucxclass.h)
IRQL DISPATCH_LEVEL

Voir aussi

_ROOTHUB_INFO