Gestion de l'alimentation ACX
Cette rubrique traite de la gestion de l'alimentation ACX. Pour plus d'informations sur l'énumération des appareils ACX, le démarrage et l'arrêt, et le rééquilibrage des appareils, reportez-vous à l'énumération des appareils ACX. Pour une vue d’ensemble générale d’ACX, veuillez consulter la section vue d’ensemble des extensions audio de classe ACX.
ACX exploite le comportement d'alimentation KMDF PnP de WDF. Pour plus d'informations sur les séquences de gestion de l'alimentation KMDF, voir Séquences de rappel PnP et de gestion de l'alimentation.
Il est recommandé que les pilotes ACX implémentent complètement la gestion de l'alimentation WDF, par exemple en implémentant la structure WDF_PNPPOWER_EVENT_CALLBACKS. Pour plus d'informations, voir Prise en charge du PnP et de la gestion de l'alimentation dans votre pilote.
Suppression de la surprise de l'appareil ACX
Le cadre WDF peut appeler l'EvtDeviceSurpriseRemoval à tout moment, c'est-à-dire que ce rappel n'est pas sérialisé avec la séquence de mise hors tension. Le pilote WDF ne doit prendre aucune mesure à la réception de ce rappel, si ce n'est de prendre note du fait que l'appareil a été retiré par surprise.
La séquence de rappel de retrait surprise lors de la mise hors tension est identique aux cas de mise hors tension Dx et de retrait, WDF n'invoque pas les rappels suivants sur le chemin du retrait surprise :
- EvtDeviceArmWakeFrom*, tel que EvtDeviceArmWakeFromS0
- EvtIoStop (purge des files d'attente gérées par l'alimentation) EvtWdfIoQueueIoStop
- EvtDeviceSelfManagedIoFlush (vidange des tampons d'E/S)
Pour plus d'informations, voir Séquences de rappel PnP et de gestion de l'alimentation et Utilisation des files d'attente d'E/S gérées par l'alimentation.
Mise sous tension et démarrage du circuit ACX
Un circuit AcxCircuit "dynamique" peut être ajouté à tout moment. Le pilote crée un nouvel appareil PDO enfant et associe le nouveau circuit AcxCircuit lorsqu'il traite le rappel WDF PrepareHardware pour cet appareil PDO. La durée de vie d'un circuit "dynamique" n'est pas liée à la durée de vie du FDO.
Un circuit AcxCircuit "statique" ne peut être ajouté que lorsque le pilote traite le rappel WDF PrepareHardware pour son appareil FDO. La durée de vie d'un circuit "statique" est liée à la durée de vie du FDO.
Un pilote ACX peut également créer des objets AcxFactoryCircuit (fournisseurs de circuits) pendant la séquence de mise sous tension à l'aide de la fonction AcxFactoryCircuitCreate. Un objet AcxFactoryCircuit utilise la création dynamique de circuits pour ajouter des ACXCIRCUITS à la requête de l'ACX. Cette fonctionnalité est très utile lors de la construction de points terminaison composites, c'est-à-dire de points terminaison audio constitués de deux ou plusieurs ACXCIRCUITs reliés entre eux.
Le circuit ACX définit les rappels suivants, qui sont invoqués lors de l'initialisation de l'AcxCircuit / du point de terminaison audio :
EvtAcxCircuitPrepareHardware : L'ACX invoque ce rappel juste après que le WDF a envoyé son rappel de préparation du matériel. Cela permet au pilote d'effectuer toute préparation matérielle spécifique au circuit. Cet appel est sérialisé par l'ACX. L'appareil n'est pas en D0 lorsque cet appel est invoqué.
EvtAcxCircuitPowerUp : L'ACX invoque ce rappel juste après être revenu de Dx. Cet appel est sérialisé par l'ACX. L'appareil est en D0.
Pour les points de terminaison composites, les AcxCircuits peuvent s'enregistrer pour ces rappels :
EvtAcxCircuitCompositeCircuitInitialize, invoqué la première fois qu'ACX détecte que cet ACXCIRCUIT est visible, c'est-à-dire que l'appareil associé est passé en D0 et a rendu ce circuit visible aux entités externes à sa propre pile. Les interfaces audio du circuit sont toujours dans l'état OFF.
EvtAcxCircuitCompositeInitialize, invoqué chaque fois que l'ACX termine l'initialisation d'un point de terminaison composite. Après ce rappel, l'ACX active les interfaces audio de ce circuit.
EvtAcxCircuitCompositeDeinitialize, invoqué chaque fois que l'ACX démantèle un point de terminaison composite. Les pilotes peuvent ne pas recevoir ce rappel si leur propre pile a été supprimée par surprise ou incapable de traiter les E/S.
Si elles sont présentes, les instances de flux sont restaurées dans l'état où elles se trouvaient avant la mise hors tension.
Mise hors tension et retrait du circuit ACX
Un circuit AcxCircuit "dynamique" peut être supprimé à tout moment en invalidant et en supprimant l'objet appareil associé au circuit. Le circuit associé peut être supprimé / détaché de l'appareil supprimé lorsque le pilote gère les rappels WDF PrepareHardware/ReleaseHardware pour cet appareil PDO. Comme indiqué ci-dessus, la durée de vie d'un circuit "dynamique" n'est pas liée à la durée de vie du FDO.
Un circuit AcxCircuit "statique" ne peut être supprimé que lorsque le pilote traite les rappels WDF PrepareHardware/ReleaseHardware pour son appareil FDO. La durée de vie d'un circuit "statique" est liée à la durée de vie du FDO.
Le pilote peut supprimer un AcxFactoryCircuit (fournisseur de circuit) dans ses rappels WDF PrepareHardware/ReleaseHardware. La suppression d'un AcxFactoryCircuit a pour effet de supprimer tous les AcxCircuits "dynamiques" qui lui sont associés. Les AcxCircuits peuvent également être supprimés lorsque le gestionnaire ACX demande à une fabrique de circuits de supprimer un circuit spécifique, ou lorsque le gestionnaire ACX ferme ses handles AcxFactoryCircuit - dans ce cas, l'ACX ferme tous les circuits associés à ce handle.
La structure ACX_CIRCUIT_PNPPOWER_CALLBACKS décrit les rappels suivants qui peuvent être utilisés par un pilote ACX.
EvtAcxCircuitPowerDown : l'ACX invoque ce rappel juste avant d'entrer dans Sx/Dx/Stop/Removal/SurpriseRemoval et lorsque le pilote supprime le circuit. Cet appel est sérialisé par l'ACX. L'appareil est en D0, mais n'oubliez pas que l'appareil peut être retiré par surprise à tout moment (ce qui signifie que le matériel associé a disparu).
EvtAcxCircuitReleaseHardware : ACX invoque ce callback juste avant que WDF ne délivre son callback WDF release hardware. Il donne l'occasion au pilote d'effectuer un nettoyage pendant que le circuit est encore en vie. Cet appel est sérialisé par l'ACX. L'appareil n'est pas en D0 lorsque cet appel est invoqué.
EvtWdfObjectContextCleanup : WDF invoque ce rappel lorsque l'objet WDF/ACX est supprimé. Cet appel est synchrone avec la suppression de l'appel de l'objet WDF. L'appareil peut ne pas être en D0 lorsque cet appel est invoqué. Le rappel est exécuté au niveau passif.
EvtWdfObjectContextDestory : Le WDF invoque ce rappel après la disparition de la dernière référence sur cet objet. Cet appel est asynchrone avec la suppression de l'appel de l'objet WDF. L'appareil peut ne pas être en D0 lorsque cet appel est invoqué. Ce rappel n'est invoqué qu'après la disparition de la dernière référence à l'objet. Le rappel est exécuté au niveau< = DPC. L'IRQL exact dépend de l'IRQL du threading qui libère la dernière référence.
Gestion des temps morts des appareils ACX
ACX exploite l'infrastructure de gestion des temps morts du WDF. Les pilotes ACX utilisent les DDIs WDF suivantes pour activer la gestion des temps morts :
WdfDeviceAssignS0IdleSettings : cet appel spécifie le type de délai d'inactivité et la gestion de l'inactivité. Le pilote ACX est libre d'utiliser le paramètre approprié pour son appareil.
WdfDeviceStopIdle : cet appel empêche l'appareil de tourner au ralenti. Notez que cet appel ne bloque pas les requêtes Sx. C'est-à-dire que l'appareil passe en Dx indépendamment du nombre de références de puissance actives lorsque le système passe à un état de puissance plus faible.
WdfDeviceResumeIdle : cet appel permet à l'appareil de relancer son délai de mise en veille.
Dans un scénario multi-piles/circuits, les différentes piles peuvent avoir des délais d'inactivité différents. Cela s'explique par les différents paramètres/exigences en matière d'alimentation de chaque pile, et donc par des délais d'inactivité différents. Pour des informations générales sur le multi-pile, voir Communications entre pilotes ACX multi-pile.
Pilote ACX et files d'attente gérées par l'alimentation
WDF prend en charge les files d'attente d'E/S gérées par l'alimentation. Ce type de file est entièrement intégré à la gestion de l'alimentation de WDF. WDF invoque les rappels de la file d'attente à différentes étapes de la séquence de mise sous tension/hors tension de WDF. Pour plus d'informations, reportez-vous à la section Utilisation des files d'attente d'E/S gérées par l'alimentation.
Les pilotes ACX peuvent utiliser ce type de file d'attente uniquement si le pilote n'utilise pas la fonctionnalité mono/multi-composant avec multi-état (Fx).
Pilote ACX et états D3Hot / D3Cold (D3)
Les pilotes audio savent quand passer en D3Hot ou D3Cold en fonction des informations disponibles dans l'énumération ACX_DX_EXIT_LATENCY.
typedef enum _ACX_DX_EXIT_LATENCY {
AcxDxExitLatencyInstant = 0,
AcxDxExitLatencyFast,
AcxDxExitLatencyResponsive
} ACX_DX_EXIT_LATENCY;
AcxDxExitLatencyFast correspond à D3Hot (DSP activé) et AcxDxExitLatencyResponsive correspond à D3Cold (DSP désactivé).
Les pilotes audio peuvent obtenir la valeur ACX_DX_EXIT_LATENCY en appelant la fonction AcxDeviceGetCurrentDxExitLatency.
WDF connaît les capacités D3Cold du pilote via le champ ExcludeD3Cold de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS. Le pilote transmet cette structure à la fonction WdfDeviceAssignS0IdleSettings.
Les pilotes WDF peuvent invoquer le WdfDeviceAssignS0IdleSettings plusieurs fois pour activer ou désactiver D3Cold en fonction de l'environnement du système, c'est-à-dire en réponse à l'ACX. Pour plus d'informations, voir la structure WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS.
Cadre de gestion de l'alimentation (PoFx) et délai d'inactivité géré par le pilote.
Gestion de l'alimentation au niveau des composants
Notez que WDF ne prend pas directement en charge les états des appareils/composants Fx. Pour utiliser ces états, le pilote doit utiliser le délai d'inactivité géré par le pilote. Pour plus d'informations sur l'utilisation des états de composants d'appareils Fx et le délai d'attente géré par le pilote, reportez-vous aux rubriques suivantes.
- Gestion de l'alimentation au niveau des composants
- Prise en charge des appareils à composants multiples avec un état d'alimentation fonctionnel unique ou multiple
Cadre de gestion de l'alimentation (PoFx)
Windows fournit un cadre de gestion de l'alimentation en cours d'exécution (PoFx) qui ajoute la prise en charge de la gestion de l'alimentation au niveau des composants. Un composant, ou sous-dispositif, est une unité matérielle fonctionnelle d'un appareil qui peut être mise sous tension ou passer à un état de faible consommation indépendamment des autres composants du même appareil. Pour plus d'informations, consultez la section Vue d'ensemble du cadre de gestion de l'alimentation.
Voir aussi
Documentation de référence de l’ACX
Vue d’ensemble des extensions de classe audio ACX
Utilisation des files d'attente d'E/S gérées par l'alimentation.