Share via


EVT_UCX_ROOTHUB_GET_INFO función de devolución de llamada (ucxroothub.h)

La implementación del controlador de cliente que UCX llama cuando recibe una solicitud de información sobre el centro raíz.

Sintaxis

EVT_UCX_ROOTHUB_GET_INFO EvtUcxRoothubGetInfo;

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

Parámetros

[in] UcxRootHub

Identificador de un objeto UCX que representa el centro raíz.

[in] Request

Estructura de tipo ROOTHUB_INFO.

Valor devuelto

None

Observaciones

El controlador cliente UCX registra esta función de devolución de llamada con la extensión del controlador de host USB (UCX) llamando al método UcxRootHubCreate .

La estructura _ROOTHUB_INFO contiene el número de puertos USB 2.0 y USB 3.0 admitidos por el concentrador raíz.

Después de que UCX llame a la función EVT_UCX_ROOTHUB_GET_INFO , se garantiza que el número de puertos expuestos por el centro raíz siga siendo el mismo. Tenga en cuenta que son puertos virtuales, no puertos físicos. Cada conector USB físico se representa mediante uno o varios puertos de velocidad diferente en el concentrador raíz.

El controlador cliente devuelve el estado de finalización en Solicitud. El controlador puede completar WDFREQUEST de forma asincrónica.

Ejemplos

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

Requisitos

Requisito Value
Plataforma de destino Windows
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado ucxroothub.h (incluya Ucxclass.h)
IRQL DISPATCH_LEVEL

Consulte también

_ROOTHUB_INFO