Servicio de kernel de xmemdma64
Finalidad
Prepara una página para la E/S de acceso directo a la memoria (DMA) o procesa una página después de que se haya completado la E/S de DMA.
Sintaxis
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/xmem.h> unsigned long long xmemdma64 (
struct xmem *dp,
caddr_t xaddr,>
int flags)Parámetros
| Elemento | Descripción | ||
|---|---|---|---|
| dp | Especifica un descriptor de memoria cruzada. | ||
| xaddr | Identifica la dirección que especifica la página para la transferencia. | ||
| distintivos | Especifica si se debe preparar una página para la E/S de DMA o procesarla después de que se haya completado la E/S de DMA. Los valores posibles son:
|
||
Descripción
El servicio de kernel de xmemdma64 funciona en la página especificada por el parámetro xaddr en la región que especifica el descriptor de memoria cruzada. Si el descriptor de memoria cruzada es para el kernel, el parámetro xaddr especifica una dirección de kernel. De lo contrario, el parámetro xaddr especifica el desplazamiento en la región que se describe en el descriptor de memoria cruzada.
El servicio de kernel de xmemdma64 se proporciona para máquinas que tienen memorias caché de memoria de procesador, pero que no realizan E/S de DMA a través de la memoria caché.
Si el parámetro Bandera indica XMEM_HIDE (es decir, XMEM_UNHIDE no está establecido) y es la primera oculta para la página, el servicio de kernel de xmemdma64 prepara la página para la E/S de DMA eliminando la memoria caché y haciendo que la página no sea válida. Cuando se establece el bit XMEM_UNHIDE y es el último oculto para la página, se producen los siguientes sucesos:
- La página se hace válida.
Si la página no está en estado de E/S de buscapersonas:
- Los procesos que están esperando en la página están preparados.
- El bit modificado para la página se establece a menos que la página tenga una clave de almacenamiento de sólo lectura.
La página no es válida durante las operaciones de DMA para que no sea direccionable con ninguna dirección virtual. Impide que cualquier proceso de lectura o carga de cualquier parte de la página en la memoria caché durante la operación DMA.
La página que se ha especificado debe estar en la memoria y debe estar marcada.
Si se establece el bit XMEM_ACC_CHK , el servicio de kernel de xmemdma64 también verifica los permisos de acceso a la página. Si el acceso a la página es de sólo lectura, el bit XMEM_WRITE_ONLY debe establecerse en el parámetro Bandera .
Entorno de ejecución
El servicio de kernel de xmemdma64 se puede llamar desde el entorno proceso o interrupción .
Valores de retorno
Al finalizar satisfactoriamente, el servicio xmemdma64 devuelve la dirección real correspondiente a los parámetros xaddr y xp .
Códigos de error
El servicio de kernel de xmemdma64 devuelve un valor de XMEM_FAIL si se cumple una de las siguientes condiciones:
- El descriptor no era válido.
- La página especificada por el parámetro xaddr o xp no es válida.
- No se permite el acceso a la página.