Compartilhar via


PSET_DMA_ENGINE_STATE função de retorno de chamada (hdaudio.h)

A rotina SetDmaEngineState define o estado de um ou mais mecanismos de DMA para o estado Executando, Parado, Pausado ou Redefinir.

O tipo de ponteiro de função para uma rotina SetDmaEngineState é definido da seguinte maneira.

Sintaxe

PSET_DMA_ENGINE_STATE PsetDmaEngineState;

NTSTATUS PsetDmaEngineState(
  [in] PVOID _context,
  [in] HDAUDIO_STREAM_STATE StreamState,
  [in] ULONG NumberOfHandles,
  [in] PHANDLE Handles
)
{...}

Parâmetros

[in] _context

Especifica o valor de contexto do membro Context da estrutura HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2 ou HDAUDIO_BUS_INTERFACE_BDL .

[in] StreamState

Especifica o novo estado do fluxo. Defina esse parâmetro como um dos seguintes valores de enumeração HDAUDIO_STREAM_STATE:

  • PauseState (pausado)
  • ResetState (redefinir)
  • RunState (em execução)
  • StopState (parado)
Na implementação atual, PauseState e StopState representam o mesmo estado de hardware.

[in] NumberOfHandles

Especifica o número de identificadores na matriz handles . Defina esse parâmetro como um valor diferente de zero.

[in] Handles

Ponteiro para uma matriz de identificadores para mecanismos de DMA. Especifique um valor não NULL para esse parâmetro.

Retornar valor

SetDmaEngineState retornará STATUS_SUCCESS se a chamada for bem-sucedida na alteração dos estados dos mecanismos de DMA. Caso contrário, a rotina retornará um código de erro apropriado. A tabela a seguir mostra alguns dos possíveis códigos de status de retorno.

Código de retorno Descrição
STATUS_INVALID_HANDLE
Indica que um dos identificadores é inválido.
STATUS_INVALID_PARAMETER
Indica que um dos valores de parâmetro está incorreto (valor de parâmetro inválido ou ponteiro inválido).
STATUS_INVALID_DEVICE_REQUEST
Indica que nenhum buffer está alocado no momento para um dos mecanismos de DMA.

Comentários

Essa rotina altera o estado de um ou mais mecanismos de DMA para o estado especificado pelo parâmetro streamState . A rotina sincroniza as transições de estado de todos os mecanismos de AMD que os identificadores na matriz de identificadores identificam. Para obter mais informações, consulte Sincronizando dois ou mais fluxos.

Antes de chamar essa rotina, configure cada mecanismo de AMD na matriz de identificadores :

  • Se estiver usando a versão HDAUDIO_BUS_INTERFACE da DDI de áudio HD, chame AllocateDmaBuffer para configurar o mecanismo de DMA.
  • Se estiver usando a versão HDAUDIO_BUS_INTERFACE_BDL da DDI, chame SetupDmaEngineWithBdl para configurar o mecanismo de DMA.
Se nenhum buffer DMA estiver alocado no momento para qualquer mecanismo de DMA na matriz handles , uma tentativa de alterar o fluxo para qualquer estado diferente de Redefinir fará com que a chamada SetDmaEngineState falhe e retorne o código de erro STATUS_INVALID_DEVICE_REQUEST.

O estado do fluxo não pode fazer a transição diretamente entre Executando e Redefinindo. Em vez disso, o fluxo deve passar primeiro por um estado intermediário de Pausado ou Parado:

  • Em um estado Executando ou Redefinindo, o estado do fluxo pode ser alterado diretamente para Pausado ou Parado.
  • De um estado pausado ou interrompido, o estado do fluxo pode ser alterado diretamente para Executando ou Redefinindo.
Um driver de áudio WDM chama essa rotina durante uma chamada para seu método SetState . Por exemplo, consulte IMiniportWaveCyclicStream::SetState.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho hdaudio.h (inclua Hdaudio.h)
IRQL <=DISPATCH_LEVEL

Confira também

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

IMiniportWaveCyclicStream::SetState

SetupDmaEngineWithBdl