Partilhar via


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

A AllocateDmaBufferWithNotification rotina aloca um buffer de dados na memória do sistema para um mecanismo de DMA.

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

Sintaxe

PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION PallocateDmaBufferWithNotification;

NTSTATUS PallocateDmaBufferWithNotification(
  [in]  PVOID _context,
  [in]  HANDLE Handle,
  [in]  ULONG NotificationCount,
  [in]  SIZE_T RequestedBufferSize,
  [out] PMDL *BufferMdl,
  [out] PSIZE_T AllocatedBufferSize,
        PSIZE_T OffsetFromFirstPage,
  [out] PUCHAR StreamId,
  [out] PULONG FifoSize
)
{...}

Parâmetros

[in] _context

Especifica o valor de contexto do membro Context da estrutura HDAUDIO_BUS_INTERFACE_V2 .

[in] Handle

Um identificador que identifica o mecanismo de DMA. Esse valor de identificador foi obtido de uma chamada anterior para AllocateCaptureDmaEngine ou AllocateRenderDmaEngine.

[in] NotificationCount

Especifica o número de notificações necessárias, com base na progressão do AMD por meio do buffer de áudio. Atualmente, há suporte para um valor de 1 ou 2. Quando o valor é 1, todos os eventos de notificação registrados são sinalizados sempre que o buffer de áudio cíclico é concluído e o AMD é encapsulado de volta ao início. Quando o valor é 2, todos os eventos de notificação registrados são notificados à medida que o AMD passa o ponto médio do buffer de áudio, bem como no final (ou o ponto de solução alternativa).

[in] RequestedBufferSize

Especifica o tamanho do buffer solicitado, em bytes.

[out] BufferMdl

Recupera as páginas de memória física que contêm o buffer alocado. Esse parâmetro aponta para uma variável alocada pelo chamador que é um ponteiro para uma PMDL (lista de descritores de memória). Essa rotina grava um ponteiro que descreve o buffer de lista de descritores de memória na variável PMDL.

[out] AllocatedBufferSize

Recupera o tamanho do buffer alocado, em bytes. Esse parâmetro aponta para uma variável de SIZE_T alocada pelo chamador na qual a rotina grava o tamanho do buffer alocado.

OffsetFromFirstPage

[out] StreamId

Recupera o identificador de fluxo. Esse parâmetro aponta para uma variável UCHAR alocada pelo chamador na qual a rotina grava o identificador de fluxo que a rotina atribui ao fluxo.

[out] FifoSize

Recupera o tamanho fifo do mecanismo de DMA, em bytes. Esse parâmetro aponta para uma variável ULONG alocada pelo chamador na qual a rotina grava o tamanho do FIFO.

Retornar valor

A AllocateDmaBufferWithNotification rotina retornará STATUS_SUCCESS se a chamada for bem-sucedida. Caso contrário, a rotina retornará um código de erro apropriado. A tabela a seguir mostra alguns dos possíveis códigos de erro de retorno.

Código de retorno Descrição
STATUS_UNSUCCESSFUL
Indica que o chamador está em execução em um IRQL muito alto.
STATUS_INSUFFICIENT_RESOURCES
Indica que a alocação do buffer falhou.
STATUS_INVALID_HANDLE
Indica que o valor do parâmetro handle é inválido.
STATUS_INVALID_PARAMETER
Indica que um dos valores de parâmetro está incorreto (ponteiro inválido).
STATUS_DEVICE_NOT_READY
Indica que a programação de hardware atingiu o tempo limite. Se isso ocorrer, o hardware poderá estar em um estado comprometido.
STATUS_INVALID_DEVICE_REQUEST
Indica que o fluxo não está no estado de redefinição ou que um buffer já está alocado para o mecanismo de DMA e ainda não foi liberado.

Comentários

A AllocateDmaBufferWithNotification rotina é usada junto com a rotina FreeDmaBufferWithNotification . Essas duas rotinas estão disponíveis apenas na versão HDAUDIO_BUS_INTERFACE_V2 da DDI de áudio HD. Ao contrário de SetupDmaEngineWithBdl, que configura o mecanismo de DMA para usar um buffer de DMA alocado anteriormente, AllocateDmaBufferWithNotification aloca um buffer DMA e também configura o mecanismo de DMA para usar o buffer.

Se o mecanismo de DMA não puder usar um buffer do tamanho solicitado no parâmetro requestedBufferSize, a rotina alocará um buffer o mais próximo possível do tamanho solicitado.

O driver de função de um codec de áudio ou modem é responsável por programar o codec para gerenciar as transferências de dados e reconhecer o identificador de fluxo.

AllocateDmaBufferWithNotification gera um MDL que lista as páginas de memória física que contêm o buffer. O endereço base do buffer coincide com o início da primeira página física na lista.

Durante o tempo de vida de um identificador de mecanismo de DMA, AllocateDmaBufferWithNotification pode ser chamado sucessivamente para alocar novos buffers de DMA. No entanto, antes de chamar AllocateDmaBufferWithNotification, qualquer buffer de DMA alocado anteriormente deve primeiro ser liberado chamando FreeDmaBufferWithNotification.

Durante as chamadas para AllocateDmaBufferWithNotification e FreeDmaBufferWithNotification, o mecanismo de DMA deve estar no estado de fluxo de redefinição. O mecanismo DMA está no estado de fluxo de redefinição imediatamente após a chamada para AllocateCaptureDmaEngine ou AllocateRenderDmaEngine. Para alterar o mecanismo DMA para o estado de execução, chame SetDmaEngineState.

O tamanho do FIFO é o número máximo de bytes que o mecanismo de DMA pode conter em seu buffer interno. Dependendo da implementação de hardware, o tamanho FIFO de um mecanismo de DMA pode ser estático ou variar dinamicamente com alterações no formato de fluxo. Para obter mais informações sobre o tamanho do FIFO, consulte a Especificação de áudio de alta definição da Intel.

No Windows Vista e versões posteriores do Windows, um driver de miniporto WaveRT chama essa rotina quando recebe a solicitação de propriedade KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION .

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows Vista e versões posteriores do Windows.
Plataforma de Destino Área de Trabalho
Cabeçalho hdaudio.h (inclua Hdaudio.h)
IRQL PASSIVE_LEVEL.

Confira também

AllocateCaptureDmaEngine

AllocateRenderDmaEngine

HDAUDIO_BUS_INTERFACE_V2

KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION

SetDmaEngineState

SetupDmaEngineWithBdl