xmemdma64 Serviço Kernel

Propósito

Prepara uma página para acesso direto à memória (DMA) E/S ou processa uma página depois que a DMA E/S estiver concluída.

Sintaxe

#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

Item Descrição
DP Especifica um descritor de memória cruzada.    
xaddr Identifica o endereço que especifica a página para transferência.
sinalizadores Especifica se deve preparar uma página para E/S DMA ou processá-la após a E/S DMA ser concluída. Os valores possíveis são:
XMEM_HIDE
Prepara a página para E/S DMA. Se cache-inconsistente, então o cache de dados é flushed, a página de memória está oculta e o endereço real da página é retornado. Se cache-consistente, então o bit modificado é configurado e o endereço real da página é retornado.
XMEM_UNHIDE
Processa a página após a DMA I/O. Também, esta sinalização revela a página, releitura quaisquer processos de espera na página, e configura o bit modificado em conformidade.
XMEM_ACC_CHK
Executa verificação de acesso na página. Quando esta sinalização é definida, os atributos de proteção da página são verificados.
XMEM_WRITE_ONLY
Marca a transferência pretendida como saída apenas. Esta sinalização é usada com XMEM_ACC_CHK para indicar que o acesso de leitura à página é suficiente.

Descrição

O serviço kernel xmemdma64 opera na página que é especificado pelo parâmetro xaddr na região que é especificado pelo descritor de memória cruzada. Se o descritor de memória cruzada for para o kernel, o parâmetro xaddr especifica um endereço de kernel. Caso contrário, o parâmetro xaddr especifica o deslocamento na região que está descrita no descritor de memória cruzada.

O serviço kernel xmemdma64 é fornecido para máquinas que possuem caches de memória do processador, mas que não executam a E/S DMA através do cache.

Se o parâmetro bandeira indicar XMEM_HIDE (ou seja, XMEM_UNHIDE não estiver configurado) e é o primeiro ocultar para a página, o serviço kernel xmemdma64 prepara a página para E/S DMA, dando descarga no cache e tornando a página inválida. Quando o bit XMEM_UNHIDE é configurado e ele é o último desescondo para a página, acontecem os seguintes eventos:

  1. A página é feita válida.

    Se a página não estiver no estado de E/S do pager:

  2. Quaisquer processos que estejam esperando na página são readaptados.
  3. O bit modificado para a página é configurado, a menos que a página tenha uma chave de armazenamento de leitura.

A página é feita não válida durante operações do DMA para que não seja enderesável com qualquer endereço virtual. Ele impede qualquer processo de leitura ou carregamento de qualquer parte da página no cache durante a operação DMA.

A página que é especificada deve estar na memória e deve ser pintada.

Se o bit XMEM_ACC_CHK for configurado, então o serviço kernel xmemdma64 também verifica permissões de acesso à página. Se o acesso da página for de leitura, então, o bit XMEM_WRITE_ONLY deve ser configurado no parâmetro bandeira .

Nota: O serviço kernel xmemdma64 não esconde ou revela a página, nem executa qualquer falha de cache. A função primária do serviço é para tradução real de endereço.

Ambiente de Execução

O serviço kernel xmemdma64 pode ser chamado a partir do ambiente processo ou interrupção .

Valores De Retorno

Na conclusão bem-sucedida, o serviço xmemdma64 retorna o endereço real correspondente aos parâmetros xaddr e xp .

Códigos De Erro

O serviço kernel xmemdma64 retorna um valor de XMEM_FAIL se um dos seguintes for true:

  • O descritor era inválido.
  • A página que é especificada pelo parâmetro xaddr ou xp é inválida.
  • O acesso não é permitido à página.