Suspensão seletiva em drivers USB (WDF)
Um driver de função USB dá suporte à detecção ociosa de runtime implementando a suspensão seletiva usb. Aqui está o conteúdo para desenvolvedores de driver sobre como implementar a suspensão seletiva em drivers USB baseados no WDF (Windows® Driver Foundation).
Sobre a suspensão seletiva
A suspensão seletiva é a capacidade de desligar e, posteriormente, retomar um dispositivo USB ocioso enquanto o computador ao qual ele está anexado permanece no estado de trabalho (S0). Para uma operação eficiente em termos de energia, especialmente em computadores móveis, todos os dispositivos USB e drivers devem dar suporte à 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 desligar enquanto estiver ocioso, o driver deverá dar suporte a esse recurso. O suporte de suspensão seletiva em um driver USB baseado no WDF (Windows® Driver Foundation) 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 um gerenciamento agressivo de energia 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 você não estiver familiarizado com o WDF, consulte o WDK (Kit de Driver do Windows) e o Desenvolvimento de Drivers com o Windows Driver Foundation.
Os dispositivos USB dão suporte à detecção ociosa de runtime por meio 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 no 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 estiverem ociosas, a porta poderá entrar em suspensão seletiva.
Para estar em conformidade com a especificação USB, todos os dispositivos USB devem dar suporte à suspensão seletiva. Quando o barramento USB está ocioso, o dispositivo deve ser capaz de desligar. Os drivers de hub USB fornecidos pela Microsoft implementam a suspensão seletiva no nível do hardware.
Os drivers de função USB devem implementar a suspensão seletiva para suas funções de dispositivo individuais por meio do WDF, que se comunica com os drivers de barramento e gerencia as solicitações de controle de E/S do dispositivo que suspendem e retomam as funções do dispositivo. O WDF permite que os drivers do modo kernel e do 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 UMDF (estrutura de driver do modo de usuário) 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 do modo kernel.
- Use a estrutura de driver do modo kernel (KMDF) somente se o driver transmitir dados por meio de pontos de extremidade isócronos ou exigir outros recursos ou recursos disponíveis apenas no modo kernel.
Propriedade da política de energia, filas de E/S e suspensão seletiva
O PPO (proprietário da política de energia) para uma pilha de dispositivos é o driver que determina em qual estado de energia o dispositivo deve estar a qualquer momento. Somente um driver em cada pilha de dispositivos pode ser o PPO. O driver de função normalmente é o PPO para seu dispositivo.
Se o driver USB der suporte à 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 é verdadeiro para drivers UMDF e KMDF. Se as solicitações chegarem 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 por meio de suas filas de E/S.
Na figura, uma solicitação chega para um driver USB. A estrutura adiciona a solicitação à fila apropriada.
Se a fila não for gerenciada por energia, a estrutura apresentará a solicitação ao driver de acordo com o tipo de expedição configurado pelo driver para a fila (sequencial, paralela ou manual). Em seguida, o driver manipula a solicitação.
Se a fila for gerenciada por energia e o dispositivo não for suspenso, a estrutura apresentará a solicitação ao driver de acordo com o tipo de expedição configurado.
No entanto, se o dispositivo for suspenso, as ações da estrutura dependerão se o driver é o PPO para a pilha do dispositivo. Se o driver for o PPO, a estrutura se comunicará com os drivers pai USB para ligar o dispositivo. Depois que o dispositivo for retomado, a estrutura apresentará a solicitação ao driver.
Se o driver não for o PPO, a estrutura não executará mais nenhuma ação porque somente o PPO poderá retomar o dispositivo. A solicitação permanece na fila. A pilha do dispositivo fica parada se o PPO não receber nenhuma solicitação que faça com que ele retome o dispositivo.
Nesta seção
Tópico | Descrição |
---|---|
Suspensão seletiva em drivers UMDF | Este tópico descreve como os drivers de função UMDF dão suporte à suspensão seletiva usb. |
Suspensão seletiva em drivers de função USB KMDF | Este tópico descreve como os drivers de função KMDF dão suporte à suspensão seletiva usb. |