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 |
---|---|
|
Indica que o chamador está em execução em um IRQL que é muito alto. |
|
Indica que a alocação de buffer falhou. |
|
Indica que o valor do parâmetro de identificador é inválido. |
|
Indica que um dos valores de parâmetro está incorreto (ponteiro incorreto). |
|
Indica que a programação de hardware atingiu o tempo limite. Se isso ocorrer, o hardware poderá estar em um estado comprometido. |
|
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. |