PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION fonction de rappel (hdaudio.h)
La routine AllocateDmaBufferWithNotification
alloue une mémoire tampon de données dans la mémoire système pour un moteur DMA.
Le type de pointeur de fonction pour une routine AllocateDmaBufferWithNotification
est défini comme suit.
Syntaxe
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
)
{...}
Paramètres
[in] _context
Spécifie la valeur de contexte du membre Context de la structure HDAUDIO_BUS_INTERFACE_V2.
[in] Handle
Handle qui identifie le moteur DMA. Cette valeur de handle a été obtenue à partir d’un appel précédent à AllocateCaptureDmaEngine ou AllocateRenderDmaEngine.
[in] NotificationCount
Spécifie le nombre de notifications nécessaires, en fonction de la progression DMA par le biais de la mémoire tampon audio. Actuellement, la valeur 1 ou 2 est prise en charge. Lorsque la valeur est 1, tous les événements de notification inscrits sont signalés chaque fois que la mémoire tampon audio cyclique est terminée et que DMA revient au début. Lorsque la valeur est 2, tous les événements de notification inscrits sont notifiés, car DMA passe le point intermédiaire de la mémoire tampon audio ainsi qu’à la fin (ou au point wraparound).
[in] RequestedBufferSize
Spécifie la taille de mémoire tampon demandée, en octets.
[out] BufferMdl
Récupère les pages de mémoire physique qui contiennent la mémoire tampon allouée. Ce paramètre pointe vers une variable allouée par l’appelant qui est un pointeur vers une liste de descripteurs de mémoire (PMDL). Cette routine écrit un pointeur qui décrit la mémoire tampon de liste de descripteur de mémoire dans la variable PMDL.
[out] AllocatedBufferSize
Récupère la taille de mémoire tampon allouée, en octets. Ce paramètre pointe vers une variable SIZE_T allouée par l’appelant dans laquelle la routine écrit la taille de la mémoire tampon allouée.
OffsetFromFirstPage
[out] StreamId
Récupère l’identificateur de flux. Ce paramètre pointe vers une variable UCHAR allouée par l’appelant dans laquelle la routine écrit l’identificateur de flux que la routine affecte au flux.
[out] FifoSize
Récupère la taille FIFO du moteur DMA, en octets. Ce paramètre pointe vers une variable ULONG allouée par l’appelant dans laquelle la routine écrit la taille FIFO.
Valeur de retour
La routine AllocateDmaBufferWithNotification
retourne STATUS_SUCCESS si l’appel réussit. Sinon, la routine retourne un code d’erreur approprié. Le tableau suivant présente certains des codes d’erreur de retour possibles.
Retourner le code | Description |
---|---|
|
Indique que l’appelant est en cours d’exécution à un irQL trop élevé. |
|
Indique que l’allocation de mémoire tampon a échoué. |
|
Indique que la valeur du paramètre de handle n’est pas valide. |
|
Indique qu’une des valeurs de paramètre est incorrecte (pointeur incorrect). |
|
Indique que la programmation matérielle a expiré. Si cela se produit, le matériel peut être dans un état compromis. |
|
Indique que le flux n’est pas dans l’état de réinitialisation ou qu’une mémoire tampon est déjà allouée pour le moteur DMA et n’a pas encore été libérée. |
Remarques
La routine AllocateDmaBufferWithNotification
est utilisée avec la routine FreeDmaBufferWithNotification. Ces deux routines sont disponibles uniquement dans la version HDAUDIO_BUS_INTERFACE_V2 de hd audio DDI. Contrairement à SetupDmaEngineWithBdl, qui configure le moteur DMA pour utiliser une mémoire tampon DMA précédemment allouée, AllocateDmaBufferWithNotification
alloue une mémoire tampon DMA et configure également le moteur DMA pour utiliser la mémoire tampon.
Si le moteur DMA ne peut pas utiliser une mémoire tampon de la taille demandée dans le paramètre requestedBufferSize, la routine alloue une mémoire tampon aussi proche que possible de la taille demandée.
Le pilote de fonction d’un codec audio ou modem est chargé de programmer le codec pour gérer les transferts de données et reconnaître l’identificateur de flux.
AllocateDmaBufferWithNotification
génère un MDL qui répertorie les pages de mémoire physique qui contiennent la mémoire tampon. L’adresse de base de la mémoire tampon coïncide avec le début de la première page physique de la liste.
Pendant la durée de vie d’un handle de moteur DMA, AllocateDmaBufferWithNotification
peut être appelée successivement pour allouer de nouvelles mémoires tampons DMA. Toutefois, avant d’appeler AllocateDmaBufferWithNotification
, toute mémoire tampon DMA précédemment allouée doit d’abord être libérée en appelant FreeDmaBufferWithNotification.
Pendant les appels à AllocateDmaBufferWithNotification
et FreeDmaBufferWithNotification, le moteur DMA doit être dans l’état du flux de réinitialisation. Le moteur DMA est dans l’état du flux de réinitialisation immédiatement après l’appel à AllocateCaptureDmaEngine ou AllocateRenderDmaEngine. Pour remplacer le moteur DMA par l’état d’exécution, appelez SetDmaEngineState.
La taille FIFO est le nombre maximal d’octets que le moteur DMA peut contenir dans sa mémoire tampon interne. Selon l’implémentation matérielle, la taille FIFO d’un moteur DMA peut être statique ou varier dynamiquement avec les modifications apportées au format de flux. Pour plus d’informations sur la taille FIFO, consultez la Spécification d’Intel High Definition Audio.
Dans Windows Vista et les versions ultérieures de Windows, un pilote miniport WaveRT appelle cette routine lorsqu’il reçoit la demande de propriété KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible dans Windows Vista et versions ultérieures de Windows. |
plateforme cible | Bureau |
d’en-tête | hdaudio.h (include Hdaudio.h) |
IRQL | PASSIVE_LEVEL. |