Partilhar via


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

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

O tipo de ponteiro de função para uma rotina de AllocateDmaBufferWithNotification é 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 contextual da estrutura de 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 DMA 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 DMA é encapsulado de volta ao início. Quando o valor é 2, todos os eventos de notificação registrados são notificados à medida que o DMA passa pelo ponto médio do buffer de áudio, bem como no final (ou no ponto de quebra 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 por 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 DMA, em bytes. Esse parâmetro aponta para uma variável ULONG alocada pelo chamador na qual a rotina grava o tamanho do FIFO.

Valor de retorno

A rotina de AllocateDmaBufferWithNotification 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 que é muito alto.
STATUS_INSUFFICIENT_RESOURCES
Indica que a alocação de buffer falhou.
STATUS_INVALID_HANDLE
Indica que o valor do parâmetro de identificador é inválido.
STATUS_INVALID_PARAMETER
Indica que um dos valores de parâmetro está incorreto (ponteiro incorreto).
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 DMA e ainda não foi liberado.

Observações

A rotina de AllocateDmaBufferWithNotification é usada junto com a rotina de 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 DMA para usar um buffer DMA alocado anteriormente, AllocateDmaBufferWithNotification aloca um buffer DMA e também configura o mecanismo DMA para usar o buffer.

Se o mecanismo 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 da 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 DMA deve estar no estado do fluxo de redefinição. O mecanismo de 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 FIFO é o número máximo de bytes que o mecanismo DMA pode conter em seu buffer interno. Dependendo da implementação de hardware, o tamanho FIFO de um mecanismo 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 o de 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
de cliente com suporte mínimo Disponível no Windows Vista e versões posteriores do Windows.
da Plataforma de Destino Área de trabalho
cabeçalho hdaudio.h (inclua Hdaudio.h)
IRQL PASSIVE_LEVEL.

Consulte também

allocateCaptureDmaEngine

AllocateRenderDmaEngine

HDAUDIO_BUS_INTERFACE_V2

KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION

SetDmaEngineState

SetupDmaEngineWithBdl