Servicio de kernel d_map_page

Finalidad

Realiza la correlación DMA específica de la plataforma para una única página.

Sintaxis

#include <sys/dma.h>
#include <sys/xmem.h>

int d_map_page(*handle, flags, baddr, *busaddr, *xmp)
struct d_handle *handle;
int flags;
caddr_t baddr;
uint *busaddr;
struct xmem *xmp;
Nota: Lo siguiente es la definición de interfaz para d_map_page cuando se establecen los distintivos DMA_ADDRESS_64 y DMA_ENABLE_64 en la llamada d_map_init .
int d_map_page(*handle, flags, baddr, *busaddr, *xmp)
struct d_handle *handle;
int flags;
unsigned long long baddr;
unsigned long long *busaddr;
struct xmem *xmp;

Parámetros

Elemento Descripción
descriptor de contexto Indica el descriptor de contexto exclusivo devuelto por el servicio de kernel de d_map_init .
distintivos Especifica uno de los siguientes distintivos:
DMA_READ
Transferencias desde un dispositivo a la memoria.
BUS_DMA
Transfiere de un dispositivo a otro dispositivo.
DMA_BYPASS
No compruebe el acceso a la página.
DMA_STMAP
Indica una correlación a corto plazo.
baddr Especifica la dirección de almacenamiento intermedio.
busaddr Apunta al campo busaddr .
xmp Descriptor de memoria cruzada para el almacenamiento intermedio.

Descripción

El servicio de kernel de d_map_page es una rutina de programa de utilidad específica del bus determinada por el servicio de kernel de d_map_init o d_map_init_ext que realiza la correlación específica de plataforma de una sola 4KB o menos transferencia para dispositivos maestros DMA. El servicio de kernel de d_map_page es una versión de vía de acceso rápida del servicio d_map_list . Toda la cantidad de transferencia debe caber dentro de una sola página para poder utilizar este servicio. Este servicio acepta una dirección virtual y completa la dirección de bus adecuada para que el dispositivo se utilice en la transferencia DMA. A menos que se establezca el distintivo DMA_BYPASS , este servicio también verifica los permisos de acceso a la página. Si la correlación es a corto plazo (es decir, no se correlaciona tan pronto como se completa la E/S), debe establecer el distintivo DMA_STMAP .

Si el almacenamiento intermedio es un almacenamiento intermedio de espacio de kernel global, el descriptor de memoria cruzada se puede establecer para que apunte al descriptor de memoria cruzada de GLOBAL exportado, xmem_global.

Si la transferencia no se puede correlacionar debido a restricciones de recursos, el servicio de d_map_page devuelve DMA_NORES. Si la transferencia no se puede correlacionar debido a violaciones de acceso a páginas, este servicio devuelve DMA_NOACC.

Nota: Puede utilizar la macro D_MAP_PAGE proporcionada en el archivo /usr/include/sys/dma.h para codificar llamadas al servicio de kernel d_map_page .

Valores de retorno

Elemento Descripción
DMA_NORES Indica que los recursos no están disponibles.
Nota: d_map_page no se realiza ninguna correlación, el controlador de dispositivo debe esperar hasta que se liberen los recursos y volver a intentar la llamada de d_map_page .
Elemento Descripción
DMA_NOACC Indica que no hay permiso de acceso a la página.
Nota: d_map_page no se realiza ninguna correlación, el controlador de dispositivo debe fallar la solicitud de E/S correspondiente.
Elemento Descripción
DMA_SUCC Indica que el parámetro busaddr contiene la dirección de bus que se debe utilizar para la transferencia de dispositivos.
Nota: d_map_page se ha realizado una correlación satisfactoria, el controlador de dispositivo debe llamar a d_unmap_page cuando la E/S se ha completado o cuando el controlador de dispositivo ha finalizado con el área correlacionada en el caso de una correlación a largo plazo.