Compartir a través de


Administración de energía de ACX

En este tema se describe la administración de energía de ACX. Para obtener información sobre la enumeración de dispositivos ACX, el inicio y el apagado y el reequilibrio del dispositivo, consulte Enumeración de dispositivos ACX. Para obtener información general sobre ACX, consulte Introducción a las extensiones de clase de audio ACX.

ACX utiliza el comportamiento de energía PnP de KMDF de WDF. Para obtener más información sobre las secuencias de administración de energía de KMDF, consulte Secuencias de devolución de llamada de administración de energía y PnP.

Se recomienda que los controladores ACX implementen completamente la administración de energía de WDF, por ejemplo mediante la implementación de WDF_PNPPOWER_EVENT_CALLBACKS structure. Para obtener más información, consulte Compatibilidad con PnP y administración de energía en el controlador.

Eliminación sorpresa del dispositivo ACX

El framework WDF puede invocar a EvtDeviceSurpriseRemoval en cualquier momento; esto significa que este callback no se serializa con la secuencia de apagado. El controlador WDF no debería tomar ninguna medida al recibir este 'callback', excepto para tomar nota de que el dispositivo fue quitado por sorpresa.

La secuencia de devolución de llamada para la eliminación por sorpresa durante el apagado es idéntica a los casos de apagado Dx y eliminación. WDF no invoca las siguientes devoluciones de llamada en la ruta de eliminación por sorpresa:

Para obtener más información, consulte Secuencias de devolución de llamada de PnP y Administración de energía y Uso de colas de E/S Power-Managed.

Inicio y encendido del circuito ACX

Se puede agregar una AcxCircuit dinámica en cualquier momento. El controlador crea un nuevo dispositivo PDO secundario y asocia el nuevo AcxCircuit al controlar la devolución de llamada de WDF PrepareHardware para este dispositivo PDO. La duración de un circuito "dinámico" no está enlazada a la duración del FDO.

Solo se puede agregar un AcxCircuit "estático" cuando el controlador maneja la devolución de llamada PrepareHardware de WDF para su dispositivo FDO. La duración de un circuito "estático" está enlazada a la duración del FDO.

Un controlador ACX también puede crear objetos AcxFactoryCircuit (proveedores de circuitos) durante la secuencia de encendido mediante la función AcxFactoryCircuitCreate. Un objeto AcxFactoryCircuit usa la creación de circuitos dinámicos para agregar ACXCIRCUITS cuando ACX lo solicite. Esta característica es muy útil al crear puntos finales compuestos, es decir, un punto final de audio formado por dos o más circuitos ACX conectados entre sí.

El circuito ACX define las siguientes devoluciones de llamada que se invocan durante la inicialización de AcxCircuit o del punto de conexión de audio:

  • EvtAcxCircuitPrepareHardware: ACX invoca esta devolución de llamada justo después de que WDF entregue su devolución de llamada de preparación de hardware. Ofrece la oportunidad al conductor de realizar cualquier "preparación de hardware" específica del circuito. ACX serializa esta llamada. El dispositivo no está en D0 cuando se invoca esta llamada.

  • EvtAcxCircuitPowerUp: ACX invoca este callback justo después de volver de Dx. ACX serializa esta llamada. El dispositivo está en D0.

Para los extremos compuestos, AcxCircuits puede opcionalmente registrarse para estas devoluciones de llamada:

  • EvtAcxCircuitCompositeCircuitInitialize, invocado la primera vez que ACX detecta que este ACXCIRCUIT es visible, es decir, el dispositivo asociado entró en D0 e hizo que este circuito fuera visible para entidades externas a su propio stack. Las interfaces de audio del circuito todavía están en estado OFF.

  • EvtAcxCircuitCompositeInitialize, invocado cada vez que ACX finaliza la inicialización de un punto de conexión compuesto. Después de este callback, ACX activa las interfaces de audio de este circuito.

  • EvtAcxCircuitCompositeDeinitialize, invocado cada vez que ACX está desmontando un punto de conexión compuesto. Es posible que los controladores no reciban esta devolución de llamada si su propia pila ha sido eliminada inesperadamente, o no pueden procesar la E/S.

Si están presentes, las instancias de flujo se restauran a sus estados previos al apagado.

Apagado y eliminación del circuito ACX

El AcxCircuit "dinámico" se puede quitar en cualquier momento al invalidar y quitar el objeto de dispositivo asociado al circuito. El circuito asociado se puede quitar o desacoplar del dispositivo removido cuando el controlador gestiona los callbacks de WDF PrepareHardware/ReleaseHardware para este dispositivo PDO. Como se mencionó anteriormente, la duración de un circuito "dinámico" no está enlazada a la duración del FDO.

Una "AcxCircuit" estática solo se puede quitar cuando el controlador gestiona las devoluciones de llamada WDF PrepareHardware/ReleaseHardware para su dispositivo FDO. La duración de un circuito "estático" está enlazada a la duración del FDO.

El controlador puede quitar un AcxFactoryCircuit (proveedor de circuitos) en sus devoluciones de llamada PrepareHardware/ReleaseHardware de WDF. Eliminar un AcxFactoryCircuit tiene el efecto de eliminar todos sus AcxCircuit(s) "dinámicos" asociados. AcxCircuit(s) también se puede quitar cuando el administrador de ACX indica a una fábrica de circuitos que quite un circuito específico, o cuando el administrador de ACX cierre sus manejadores de AcxFactoryCircuit; en este escenario, ACX cierra todos los circuitos que están asociados a ese identificador.

La estructura ACX_CIRCUIT_PNPPOWER_CALLBACKS proporciona una descripción de las siguientes devoluciones de llamada que puede usar un controlador ACX.

  • EvtAcxCircuitPowerDown: ACX invoca esta función de retorno justo antes de pasar a Sx/Dx/Stop/Removal/SurpriseRemoval y cuando el controlador desconecta el circuito. ACX serializa esta llamada. El dispositivo está en D0, aunque tenga en cuenta que el dispositivo podría ser retirado inesperadamente en cualquier momento (lo que significa que el hardware asociado ha desaparecido).

  • EvtAcxCircuitReleaseHardware: ACX invoca esta devolución de llamada justo antes de que WDF entregue su devolución de llamada de hardware de versión WDF. Ofrece la oportunidad de que el conductor realice cualquier limpieza mientras el circuito sigue activo. ACX serializa esta llamada. El dispositivo no está en D0 cuando se invoca esta llamada.

  • EvtWdfObjectContextCleanup: WDF invoca esta devolución de llamada cuando se elimina el objeto WDF/ACX. Esta llamada es sincrónica con la eliminación de la llamada al objeto WDF. Es posible que el dispositivo no esté en D0 cuando se invoca esta llamada. La callback se ejecuta en el nivel Pasivo.

  • EvtWdfObjectContextDestory: WDF invoca esta devolución de llamada después de que desaparezca la última referencia de este objeto. Esta llamada es asincrónica con la eliminación de la llamada al objeto WDF. Es posible que el dispositivo no esté en D0 cuando se invoca esta llamada. Esta devolución de llamada solo se invoca después de que la última referencia del objeto desaparezca. La devolución de llamada se ejecuta en <= nivel DPC. El IRQL exacto depende del IRQL del subproceso que libera la última referencia.

Gestión de inactividad de dispositivos ACX

ACX aprovecha la infraestructura de administración inactiva de WDF. Los controladores ACX utilizan los siguientes DDIs de WDF para habilitar la gestión de inactividad.

  • WdfDeviceAssignS0IdleSettings: esta llamada especifica el tipo de tiempo de espera de inactividad y la gestión de inactividad. El controlador ACX es libre de usar la configuración adecuada para su dispositivo.

  • WdfDeviceStopIdle: esta llamada impide que el dispositivo se desdine. Tenga en cuenta que su llamada no bloquea las solicitudes Sx. Es decir, el dispositivo entra en Dx independientemente del número de referencias de energía activa cuando el sistema va a un estado de potencia inferior.

  • WdfDeviceResumeIdle: esta llamada permite al dispositivo reiniciar su tiempo de espera de inactividad.

En un escenario de varios circuitos o pila, es posible que diferentes pilas tengan tiempos de espera de inactividad diferentes. Esto se debe a los distintos requisitos o configuraciones de energía de cada pila, por lo que los distintos tiempos de espera de inactividad son adecuados. Para obtener información general sobre varias pilas, consulte Comunicaciones entre controladores de varias pilas de ACX.

Controlador ACX y colas gestionadas por energía

WDF admite colas de E/S administradas por energía. Este tipo de cola está totalmente integrada con la administración de energía WDF. WDF invoca los callbacks de la cola en varios pasos de la secuencia de encendido/apagado de WDF. Para obtener más información, consulte Uso de Power-Managed colas de E/S.

Los controladores ACX pueden usar este tipo de cola solo si el controlador no usa el componente único o multicomponente con la característica de varios estados (Fx).

Estados del controlador ACX y D3Hot / D3Cold (D3)

Los controladores de audio saben cuándo ir en D3Hot o D3Cold en función de la información disponible en la enumeración ACX_DX_EXIT_LATENCY.

typedef enum _ACX_DX_EXIT_LATENCY { 
  AcxDxExitLatencyInstant     = 0,
  AcxDxExitLatencyFast,
  AcxDxExitLatencyResponsive
} ACX_DX_EXIT_LATENCY;

AcxDxExitLatencyFast corresponde a D3Hot (DSP on) y AcxDxExitLatencyResponsive corresponde a D3Cold (DSP desactivado).

Los controladores de audio pueden obtener el valor de ACX_DX_EXIT_LATENCY llamando a la función AcxDeviceGetCurrentDxExitLatency.

WDF conoce las funcionalidades D3Cold del controlador a través del campo ExcludeD3Cold del WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS. El controlador pasa esta estructura como entrada a la función WdfDeviceAssignS0IdleSettings.

Los controladores WDF pueden invocar WdfDeviceAssignS0IdleSettings varias veces para activar o desactivar D3Cold en función del entorno del sistema, es decir, en respuesta a ACX. Para obtener más información, consulte estructura de WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS.

Marco de administración de energía (PoFx) y tiempo de espera de inactividad administrado por controladores

Administración de energía de nivel de componente

Tenga en cuenta que WDF no admite directamente los estados del dispositivo o componente Fx. Para usar estos estados, el controlador debe usar el tiempo de espera de inactividad administrado por el controlador. Para obtener más información sobre el uso de componentes del dispositivo Fx y sus estados, así como el tiempo de espera de inactividad gestionado por el controlador, consulte los temas siguientes.

Marco de administración de energía (PoFx)

Windows proporciona un marco de administración de energía en tiempo de ejecución (PoFx) que agrega compatibilidad con la administración de energía de nivel de componente. Un componente, o subdispositivo, es una unidad de hardware funcional en un dispositivo que se puede activar o cambiar a un estado de baja potencia independientemente de los demás componentes del mismo dispositivo. Para obtener más información, consulte Información general de Power Management Framework.

Consulte también

Enumeración de dispositivos ACX

Documentación de referencia de la ACX

Información general sobre las extensiones de clase de audio de ACX

Uso de Power-Managed en las colas de E/S.

Secuencias de devolución de llamada de PnP y administración de energía