PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION función de devolución de llamada (hdaudio.h)

La AllocateDmaBufferWithNotification rutina asigna un búfer de datos en la memoria del sistema para un motor DMA.

El tipo de puntero de función para una AllocateDmaBufferWithNotification rutina se define de la siguiente manera.

Sintaxis

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 el valor de contexto del miembro Context de la estructura HDAUDIO_BUS_INTERFACE_V2 .

[in] Handle

Identificador que identifica el motor DMA. Este valor de identificador se obtuvo de una llamada anterior a AllocateCaptureDmaEngine o AllocateRenderDmaEngine.

[in] NotificationCount

Especifica el número de notificaciones necesarias, en función de la progresión de DMA a través del búfer de audio. Actualmente, se admite un valor de 1 o 2. Cuando el valor es 1, todos los eventos de notificación registrados se indican cada vez que se completa el búfer de audio cíclico y DMA vuelve al principio. Cuando el valor es 2, los eventos de notificación registrados se notifican a medida que DMA pasa el punto medio del búfer de audio, así como al final (o el punto de ajuste).

[in] RequestedBufferSize

Especifica el tamaño del búfer solicitado, en bytes.

[out] BufferMdl

Recupera las páginas de memoria física que contienen el búfer asignado. Este parámetro apunta a una variable asignada por el autor de la llamada que es un puntero a una lista de descriptores de memoria (PMDL). Esta rutina escribe un puntero que describe el búfer de lista de descriptores de memoria, en la variable PMDL.

[out] AllocatedBufferSize

Recupera el tamaño del búfer asignado, en bytes. Este parámetro apunta a una variable de SIZE_T asignada por el autor de la llamada en la que la rutina escribe el tamaño del búfer asignado.

OffsetFromFirstPage

[out] StreamId

Recupera el identificador de secuencia. Este parámetro apunta a una variable UCHAR asignada por el autor de la llamada en la que la rutina escribe el identificador de flujo que la rutina asigna a la secuencia.

[out] FifoSize

Recupera el tamaño FIFO del motor DMA, en bytes. Este parámetro apunta a una variable ULONG asignada por el autor de la llamada en la que la rutina escribe el tamaño de FIFO.

Valor devuelto

La AllocateDmaBufferWithNotification rutina devuelve STATUS_SUCCESS si la llamada se realiza correctamente. De lo contrario, la rutina devuelve un código de error adecuado. En la tabla siguiente se muestran algunos de los posibles códigos de error de devolución.

Código devuelto Descripción
STATUS_UNSUCCESSFUL
Indica que el autor de la llamada se ejecuta en un IRQL demasiado alto.
STATUS_INSUFFICIENT_RESOURCES
Indica que se ha producido un error en la asignación del búfer.
STATUS_INVALID_HANDLE
Indica que el valor del parámetro handle no es válido.
STATUS_INVALID_PARAMETER
Indica que uno de los valores de parámetro es incorrecto (puntero incorrecto).
STATUS_DEVICE_NOT_READY
Indica que se agota el tiempo de espera de programación de hardware. Si esto ocurre, el hardware podría estar en un estado en peligro.
STATUS_INVALID_DEVICE_REQUEST
Indica que la secuencia no está en el estado de restablecimiento o que ya se ha asignado un búfer para el motor DMA y que aún no se ha liberado.

Comentarios

La AllocateDmaBufferWithNotification rutina se usa junto con la rutina FreeDmaBufferWithNotification . Estas dos rutinas solo están disponibles en la versión HDAUDIO_BUS_INTERFACE_V2 de la DDI de audio HD. A diferencia de SetupDmaEngineWithBdl, que configura el motor DMA para usar un búfer DMA asignado anteriormente, AllocateDmaBufferWithNotification asigna un búfer DMA y también configura el motor DMA para usar el búfer.

Si el motor DMA no puede usar un búfer del tamaño solicitado en el parámetro requestedBufferSize, la rutina asigna un búfer lo más cercano posible al tamaño solicitado.

El controlador de función para un códec de audio o módem es responsable de programar el códec para administrar las transferencias de datos y reconocer el identificador de secuencia.

AllocateDmaBufferWithNotification genera una MDL que enumera las páginas de memoria física que contienen el búfer. La dirección base del búfer coincide con el inicio de la primera página física de la lista.

Durante la vigencia de un identificador de motor DMA, AllocateDmaBufferWithNotification se puede llamar sucesivamente para asignar nuevos búferes DMA. Sin embargo, antes de llamar a AllocateDmaBufferWithNotification, cualquier búfer DMA asignado anteriormente debe liberarse llamando a FreeDmaBufferWithNotification.

Durante las llamadas a AllocateDmaBufferWithNotification y FreeDmaBufferWithNotification, el motor DMA debe estar en el estado de flujo de restablecimiento. El motor DMA se encuentra en el estado de flujo de restablecimiento inmediatamente después de la llamada a AllocateCaptureDmaEngine o AllocateRenderDmaEngine. Para cambiar el motor DMA al estado de ejecución, llame a SetDmaEngineState.

El tamaño de FIFO es el número máximo de bytes que el motor DMA puede contener en su búfer interno. Según la implementación de hardware, el tamaño de FIFO de un motor DMA puede ser estático o variar dinámicamente con los cambios en el formato de secuencia. Para obtener más información sobre el tamaño de FIFO, consulte La especificación de audio de alta definición de Intel.

En Windows Vista y versiones posteriores de Windows, un controlador de miniporte waveRT llama a esta rutina cuando recibe la solicitud de propiedad KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION .

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de Windows.
Plataforma de destino Escritorio
Encabezado hdaudio.h (incluye Hdaudio.h)
IRQL PASSIVE_LEVEL.

Consulte también

AllocateCaptureDmaEngine

AllocateRenderDmaEngine

HDAUDIO_BUS_INTERFACE_V2

KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION

SetDmaEngineState

SetupDmaEngineWithBdl