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:
XMEM_HIDE
Prepara la página para la E/S de DMA. Si la memoria caché es incoherente, la memoria caché de datos se vacía, se oculta la página de memoria y se devuelve la dirección de la página real. Si la memoria caché es coherente, se establece el bit modificado y se devuelve la dirección real de la página.
XMEM_UNHIDE
Procesa la página después de la E/S de DMA. Además, este distintivo revela la página, lee cualquier proceso de espera en la página y establece el bit modificado en consecuencia.
XMEM_ACC_CHK
Realiza la comprobación de acceso en la página. Cuando se establece este distintivo, se verifican los atributos de protección de página.
XMEM_WRITE_ONLY
Marca la transferencia prevista sólo como salida. Este distintivo se utiliza con XMEM_ACC_CHK para indicar que el acceso de sólo lectura a la página es suficiente.

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:

  1. La página se hace válida.

    Si la página no está en estado de E/S de buscapersonas:

  2. Los procesos que están esperando en la página están preparados.
  3. 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 .

Nota: El servicio de kernel de xmemdma64 no oculta ni revela la página, ni realiza ningún vaciado de memoria caché. La función principal del servicio es para la traducción de direcciones reales.

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.