EVT_UCX_ROOTHUB_GET_INFO fungsi panggilan balik (ucxroothub.h)

Implementasi driver klien yang dipanggil UCX ketika menerima permintaan informasi tentang hub akar.

Sintaks

EVT_UCX_ROOTHUB_GET_INFO EvtUcxRoothubGetInfo;

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

Parameter

[in] UcxRootHub

Handel ke objek UCX yang mewakili hub akar.

[in] Request

Struktur jenis ROOTHUB_INFO.

Nilai kembali

Tidak ada

Keterangan

Driver klien UCX mendaftarkan fungsi panggilan balik ini dengan ekstensi pengontrol host USB (UCX) dengan memanggil metode UcxRootHubCreate .

Struktur _ROOTHUB_INFO berisi jumlah port USB 2.0 dan USB 3.0 yang didukung oleh hub akar.

Setelah UCX memanggil fungsi EVT_UCX_ROOTHUB_GET_INFO , jumlah port yang diekspos oleh hub akar dijamin tetap sama. Perhatikan bahwa ini adalah port virtual, bukan port fisik. Setiap konektor USB fisik diwakili oleh satu atau beberapa port dengan kecepatan yang berbeda pada hub akar.

Driver klien mengembalikan status penyelesaian dalam Permintaan. Driver dapat menyelesaikan WDFREQUEST secara asinkron.

Contoh

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

Persyaratan

Persyaratan Nilai
Target Platform Windows
Versi KMDF minimum 1,0
Versi UMDF minimum 2.0
Header ucxroothub.h (termasuk Ucxclass.h)
IRQL DISPATCH_LEVEL

Lihat juga

_ROOTHUB_INFO