Compartilhar via


Objetos e identificadores UCX usados por um driver de controlador de host

O UCX estende a funcionalidade de objeto WDF para definir seus próprios objetos UCX específicos para USB. O UCX usa esses objetos para enfileirar solicitações para qualquer driver de controlador de host subjacente.

Resumo

  • Os objetos UCX são usados pelo driver do controlador de host para manipular operações relacionadas ao controlador, seu hub raiz e todos os pontos de extremidade.
  • Os objetos UCX são criados pelo driver do controlador de host, e a vida útil de cada objeto é gerenciada pelo UCX.

APIs importantes

O UCX estende a funcionalidade de objeto WDF para definir seus próprios objetos UCX específicos para USB. O UCX usa esses objetos para enfileirar solicitações para qualquer driver de controlador de host subjacente.

Para obter mais detalhes sobre objetos WDF, consulte Introdução a objetos de estrutura.

UCXCONTROLLER: objeto do controlador de host

Representa o controlador de host que é criado pelo driver do controlador de host. O driver deve criar apenas um objeto de controlador de host por instância de controlador de host. Normalmente criado dentro do retorno de chamada EvtDriverDeviceAdd chamando o método UcxControllerCreate.

Quando o driver do controlador de host cria o objeto, o driver registra sua implementação de funções de retorno de chamada que são invocadas pelo UCX. O driver também deve identificar o tipo de barramento ao qual o controlador de host está conectado, como ACPI ou PCI. O driver também fornece informações do dispositivo controlador de host usando a estrutura UCX_CONTROLLER_CONFIG que é passada para a chamada UcxControllerCreate.

Para lidar com solicitações de E/S, o driver do controlador de host deve registrar uma interface de dispositivo GUID_DEVINTERFACE_USB_HOST_CONTROLLER. O driver não é necessário para implementar as IOCTLs definidas nesta interface. Em vez disso, o cliente UCX passa as solicitações IOCTL recebidas nessa interface para o UCX chamando UcxIoDeviceControl.

Confira a seguir as funções de retorno de chamada associadas ao objeto do controlador de host, que são invocadas pelo UCX. Essas funções devem ser implementadas pelo driver do controlador de host.

*EVT_UCX_CONTROLLER_USBDEVICE_ADD
Chamado quando o driver do hub determinar, por meio da interação com o hub raiz e/ou hub(s) externo(s), que um novo dispositivo está presente no barramento.

*EVT_UCX_CONTROLLER_QUERY_USB_CAPABILITY
Chamado pelo UCX para coletar informações sobre vários recursos compatíveis com controladores de host USB.

*EVT_UCX_CONTROLLER_RESET
Chamado pelo UCX para redefinir o hardware do controlador, possivelmente em resposta a um erro detectado.

*EVT_UCX_CONTROLLER_GET_CURRENT_FRAMENUMBER
Usado para recuperar o número de quadro atual do controlador de host, que é usado pelo driver de hub para agendar transferências isócronas.

UCXROOTHUB: Objeto de hub raiz

Obtém e controla o status das portas raiz do controlador de host. Criado pelo driver do controlador de host, normalmente dentro do retorno de chamada EvtDriverDeviceAdd, chamando o método UcxRootHubCreate depois que o objeto do controlador de host é criado. Deve haver apenas um objeto de hub raiz por instância do controlador de host. Na chamada UcxRootHubCreate, o driver registra suas implementações de retorno de chamada.

EVT_UCX_ROOTHUB_GET_INFO
Retorna o número de portas USB 2.0 e USB 3.0 do hub raiz.

EVT_UCX_ROOTHUB_GET_20PORT_INFO
Retornar informações sobre as portas USB 2.0 ou USB 3.0 (*EVT_UCX_ROOTHUB_GET_30PORT_INFO) do hub raiz.

Depois que o objeto de hub raiz é criado e inicializado, o driver de hub interage com as portas de hub raiz enviando transferências de interrupção e controle. O UCX auxilia nessas transferências invocando essas funções de retorno de chamada implementadas pelo driver do controlador do host.

EVT_UCX_ROOTHUB_CONTROL_URB
Processa solicitações de controle de recursos do hub USB.

EVT_UCX_ROOTHUB_INTERRUPT_TX
Processa a solicitação de informações sobre portas alteradas.

Para obter mais informações, consulte Funções de retorno de chamada do hub raiz de um driver do controlador de host.

UCXUSBDEVICE: objeto de dispositivo USB

Representa um dispositivo USB físico conectado ao barramento. Criado pelo driver do controlador de host, normalmente dentro do retorno de chamada EVT_UCX_CONTROLLER_USBDEVICE_ADD, chamando o método UcxUsbDeviceCreate.

Quando o objeto é criado, o driver do controlador de host registra sua implementação das funções de retorno de chamada com a chamada de UcxUsbDeviceCreate.

Essas funções de retorno de chamada destinam-se a manter o controlador e o driver informados sobre o status atual dos dispositivos USB.

EVT_UCX_USBDEVICE_ENABLE
Prepara o controlador para executar transferências para o ponto de extremidade padrão do dispositivo.

EVT_UCX_USBDEVICE_DISABLE
Libera os recursos do controlador associados ao dispositivo e seu ponto de extremidade padrão.

EVT_UCX_USBDEVICE_ADDRESS
Programa um endereço no controlador e envia uma transferência SET_ADDRESS ao dispositivo, para trazê-lo para o estado endereçado.

EVT_UCX_USBDEVICE_ENDPOINTS_CONFIGURE
Programa pontos de extremidade não padrão no controlador e/ou libera outros pontos de extremidade não padrão.

EVT_UCX_USBDEVICE_RESET
Uma notificação do controlador de que um dispositivo foi redefinido, caso em que o driver executa qualquer ação necessária para sincronizar o controlador com o dispositivo USB.

EVT_UCX_USBDEVICE_UPDATE
Notifica o controlador sobre vários bits de informações relacionados ao dispositivo.

EVT_UCX_USBDEVICE_HUB_INFO
Uma notificação sobre as propriedades do hub, se o identificador UCXUSBDEVICE for para um dispositivo de hub.

EVT_UCX_USBDEVICE_ENDPOINT_ADD
Notifica o driver para criar um ponto de extremidade para o dispositivo. EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD para o ponto de extremidade padrão.

Quando uma interface em um dispositivo USB 3.0 suspenso sinaliza um despertar, espera-se que o driver chame UcxUsbDeviceRemoteWakeNotification para notificar o UCX.

Depois que o objeto é criado, a vida útil do objeto é gerenciada pelo UCX, e o driver não deve excluir o objeto.

UCXENDPOINT: objeto de ponto de extremidade

Representa um ponto de extremidade em um objeto de dispositivo USB. Os objetos de ponto de extremidade são criados pelo controlador de host durante um retorno de chamada EVT_UCX_USBDEVICE_DEFAULT_ENDPOINT_ADD ou EVT_UCX_USBDEVICE_ENDPOINT_ADD. Quando um objeto de ponto de extremidade é criado, o driver registra suas funções de retorno de chamada.

O driver também cria um objeto de fila de estrutura para cada ponto de extremidade e passa o WDFQUEUE dessa fila para o UCX chamando UcxEndpointSetWdfIoQueue. Depois que o ponto de extremidade é criado, a vida útil do objeto e suas filas associadas são gerenciadas pelo UCX, e o driver não deve excluir esses objetos em si.

O objeto de ponto de extremidade implementa várias funções de retorno de chamada que permitem que o driver auxilie o UCX com operações relacionadas ao ponto de extremidade.

EVT_UCX_ENDPOINT_ABORT
Anule a fila associada ao ponto de extremidade.

EVT_UCX_ENDPOINT_OK_TO_CANCEL_TRANSFERS
Notifique o driver do controlador de que ele pode concluir transferências canceladas no ponto de extremidade.

EVT_UCX_ENDPOINT_PURGE
Conclua todas as solicitações de E/S pendentes no ponto de extremidade.

EVT_UCX_ENDPOINT_START
Inicie a fila associada ao ponto de extremidade.

EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD
Crie fluxos estáticos.

EVT_UCX_ENDPOINT_RESET
Notifique o driver para redefinir a programação do ponto de extremidade do controlador.

Quando o driver do controlador de host recebe um USB 3.0 No Ping Response Error em um ponto de extremidade, o driver deve chamar UcxEndpointNoPingResponseError. Essa chamada resulta no recebimento de EVT_UCX_USBDEVICE_UPDATE pelo objeto. Para obter mais informações, consulte Configurar pontos de extremidade USB em um driver do controlador de host.

UCXSTREAMS: objeto Stream

Representa um número de pipes para o dispositivo em um único ponto de extremidade. O driver do controlador de host cria objetos de fluxo no retorno de chamada EVT_UCX_ENDPOINT_STATIC_STREAMS_ADD chamando UcxStaticStreamsCreate.

Durante a chamada de UcxStaticStreamsCreate, o driver do controlador de host registra suas funções de retorno de chamada. Para um objeto de ponto de extremidade específico, o driver pode determinar se ele criou um objeto de fluxo e retornar o identificador UCXSTREAMS chamando UcxEndpointGetStaticStreamsReferenced.

Depois que o objeto é criado, o driver cria um objeto de fila de estrutura para cada fluxo e envia o identificador WDFQUEUE para o UCX chamando UcxStaticStreamsSetStreamInfo.

O objeto de fluxo fornece várias funções de retorno de chamada ao controlador de host para ajudar o UCX a gerenciar os fluxos estáticos.

EVT_UCX_ENDPOINT_STATIC_STREAMS_DISABLE
Libere recursos do controlador para todos os fluxos de um ponto de extremidade.

EVT_UCX_ENDPOINT_STATIC_STREAMS_ENABLE
Habilite o hardware do controlador de todos os fluxos para esse ponto de extremidade.

A vida útil do objeto e as filas associadas são gerenciadas pelo UCX, e o driver não deve excluir os objetos.