Suspensão seletiva em drivers USB (WDF)

Um driver da função USB suporta a deteção de ociosidade durante a execução implementando a suspensão seletiva USB. Aqui está o conteúdo para desenvolvedores de drivers sobre como implementar a suspensão seletiva em drivers USB baseados no Windows® Driver Foundation (WDF).

Sobre a suspensão seletiva

Suspensão seletiva é a capacidade de desligar e depois retomar um dispositivo USB ocioso enquanto o computador ao qual ele está conectado permanece no estado de trabalho (S0). Para uma operação eficiente em termos de energia, especialmente em PCs móveis, todos os dispositivos e drivers USB devem suportar suspensão seletiva. Desligar um dispositivo quando ele está ocioso, mas enquanto o sistema permanece no estado S0, tem as seguintes vantagens significativas:

  • A suspensão seletiva economiza energia.
  • A suspensão seletiva pode ajudar a reduzir fatores ambientais, como carga térmica e ruído.

Se o hardware do dispositivo puder entrar em modo de poupança de energia enquanto estiver ocioso, o driver deverá suportar essa característica. O suporte de suspensão seletiva num driver USB baseado no Windows® Driver Foundation (WDF) requer, no máximo, alguns retornos de chamada extras além daqueles necessários para o suporte básico Plug and Play.

Cada driver de função para um dispositivo USB deve implementar gerenciamento de energia agressivo que suspende um dispositivo ocioso enquanto o sistema está em execução. Este tópico descreve como implementar a suspensão seletiva em um driver baseado em WDF. Se não estiveres familiarizado com o WDF, consulta o Kit de Controladores do Windows (WDK) e o Guia de Desenvolvimento de Drivers com o Windows Driver Foundation.

Os dispositivos USB suportam a deteção de ociosidade em tempo de execução através da suspensão seletiva USB. A suspensão seletiva permite que um dispositivo ocioso seja colocado em um estado suspenso sem afetar outros dispositivos conectados ao mesmo hub ou, no caso de um dispositivo multifuncional, sem afetar as outras funções do dispositivo. Quando todos os dispositivos ou funções tiverem sido suspensos, todo o hub ou dispositivo multifuncional poderá ser desligado.

Do ponto de vista do hardware, a suspensão seletiva é um estado físico em uma porta USB. Quando todas as funções anexadas à porta estão ociosas, a porta pode entrar em suspensão seletiva.

Para estar em conformidade com a especificação USB, todos os dispositivos USB devem suportar suspensão seletiva. Quando o barramento USB está ocioso, o dispositivo deve ser capaz de se desligar. Os drivers de hub USB fornecidos pela Microsoft implementam a suspensão seletiva no nível de hardware.

Os controladores de função USB devem implementar a suspensão seletiva para as suas funções específicas do dispositivo através do WDF, que se comunica com os controladores de barramento e gere as solicitações de controlo de Entrada/Saída do dispositivo que suspendem e retomam as operações do dispositivo. O WDF permite que os drivers de modo kernel e de modo de usuário ofereçam suporte à suspensão seletiva.

Os detalhes do código de suspensão seletiva USB de um driver de função dependem se o driver é executado no modo de usuário ou no modo kernel. Considere estas diretrizes:

  • Use a estrutura de driver de modo de usuário (UMDF) para implementar drivers USB sempre que possível. Os drivers de modo de usuário são menos propensos a corromper dados do sistema e são mais simples de depurar do que os drivers de modo kernel.
  • Utilize a estrutura de driver em modo kernel (KMDF) somente se o driver transmitir dados através de pontos de extremidade isócronos ou exigir outras funcionalidades ou recursos disponíveis apenas em modo kernel.

Propriedade da política de energia, filas de E/S e suspensão seletiva

O proprietário da política de energia (PPO) para um conjunto de dispositivos é o driver que determina em qual estado de energia o dispositivo deve estar em qualquer momento dado. Apenas um driver em cada pilha de dispositivos pode ser o PPO. O driver de função normalmente é o PPO para o seu dispositivo.

Se o driver USB suportar suspensão seletiva e estiver em camadas acima do PPO em sua pilha de dispositivos, o driver não deverá usar filas gerenciadas por energia. Isso é verdade para os drivers UMDF e KMDF. Se chegarem solicitações para filas gerenciadas por energia enquanto o dispositivo estiver suspenso, toda a pilha de dispositivos poderá parar.

A Figura 1 mostra o fluxo de solicitações de E/S para um driver USB através de suas filas de E/S.

Fluxograma de solicitações para um driver USB WDF.

Na figura, chega um pedido para um driver USB. A plataforma adiciona o pedido à fila adequada.

Se a fila não for gerida energeticamente, a estrutura apresentará a solicitação ao controlador de acordo com o tipo de distribuição que o controlador configurou para a fila (sequencial, paralelo ou manual). Em seguida, o condutor trata do pedido.

Se a fila for gerenciada por energia e o dispositivo não estiver suspenso, a estrutura apresentará a solicitação ao driver de acordo com o tipo de despacho configurado.

No entanto, se o dispositivo for suspenso, as ações da estrutura dependerão se o driver é o PPO para a pilha de dispositivos. Se o driver for o PPO, o framework comunica-se com os drivers principais USB para ligar o dispositivo. Depois que o dispositivo for retomado, a estrutura apresenta a solicitação ao driver.

Se o driver não for o PPO, o framework não tomará mais ações porque só o PPO pode retomar o dispositivo. O pedido permanece na fila. A pilha de dispositivos para de funcionar se o PPO não receber nenhuma solicitação para retomar o dispositivo.

Nesta secção

Tópico Descrição
Suspensão seletiva nos drivers UMDF Este tópico descreve como os drivers de função UMDF suportam suspensão seletiva USB.
Suspensão seletiva nos drivers de função KMDF USB Este tópico descreve como os drivers de funções KMDF suportam a suspensão seletiva de USB.