ponto de entrada do driver de dispositivo ddconfig

Propósito

Executa funções de configuração para um driver de dispositivo.

Sintaxe

#include <sys/device.h>
#include <sys/types.h>
 
int ddconfig ( devno,  cmd,  uiop)
dev_t devno;
int cmd;
struct uio *uiop;

Parâmetros

Item Descrição
devno Especifica os números de dispositivos principais e menores.
cmd Especifica a função a ser executada pela rotina ddconfig .
uiop Aponta para uma estrutura uio descrevendo a área de dados relevante para informações de configuração.

Descrição

O ponto de entrada ddconfig é usado para configurar um driver de dispositivo. Ele pode ser chamado para fazer as seguintes tarefas:

  • Inicialize o driver do dispositivo.
  • Finalize o driver do dispositivo.
  • Solicitar dados de configuração para o dispositivo suportado.
  • Executar outras funções de configuração específicas do dispositivo.

A rotina ddconfig é chamada pelo método Configurar, Unconfigure ou Change do dispositivo. Geralmente, é chamado uma vez para cada número de dispositivo (principal e menor) a ser suportado. Este é, no entanto, dependente de dispositivos. O método de dispositivo específico e a rotina ddconfig determinam o número de vezes que ele é chamado.

A rotina ddconfig também pode fornecer funções adicionais de dispositivo relacionado à configuração, como, por exemplo, devolver dados vitais do produto (VPD). A rotina ddconfig geralmente é invocada através da subroutina sysconfig pelo método de Configurar específico do dispositivo.

Os drivers de dispositivos e seus métodos geralmente suportam esses valores para o parâmetro cmd :

Valor Descrição
CFG_INIT Inicializa o driver de dispositivo e áreas de dados internos. Isso geralmente envolve o número menor especificado pelo parâmetro devno , para validade. A rotina ddconfig do driver de dispositivo também instala os pontos de entrada do driver do dispositivo na tabela de interruptor do dispositivo, se esta foi a primeira vez chamada (para o número principal especificado). Isso pode ser realizado usando o serviço de kernel devswadd juntamente com uma estrutura devsw para adicionar os pontos de entrada do driver do dispositivo na tabela de comutadores do dispositivo para o número do dispositivo principal fornecido no parâmetro devno .

O parâmetro de comando CFG_INIT também deve copiar as informações dependentes do dispositivo (encontradas na estrutura dependente do dispositivo fornecida pelo ouvinte) em uma área de salvamento estática ou dinamicamente alocada para o dispositivo especificado. Essas informações devem ser usadas quando a rotina ddopen é chamada posteriormente.

O endereço e o endereço da estrutura dependente do dispositivo estão descritos na estrutura uio apontada pelo parâmetro uiop . O serviço kernel uiomove pode ser usado para copiar a estrutura do dependente do dispositivo na área de dados do driver de dispositivo.

Quando a rotina ddopen é chamada, o driver do dispositivo passa informações dependentes do dispositivo para as rotinas ou outros drivers de dispositivo que fornecem a função de manipulador de dispositivo, a fim de inicializar o dispositivo. O atraso na inicialização do dispositivo até que a chamada ddopen seja recebida é útil a fim de retardar o uso de recursos de sistema valiosos (como canais DMA e níveis de interrupção) até que o dispositivo seja realmente necessário.

CFG_TERM Finaliza o driver de dispositivo associado ao número do dispositivo especificado, conforme representado pelo parâmetro devno . A rotina ddconfig determina se qualquer abertura está pendente no parâmetro devno especificado. Se nenhum for, o processamento de comandos CFG_TERM marca o dispositivo como finalizado, desautorizando qualquer abertura subsequente ao dispositivo. Todas as áreas de dados dinamicamente alocadas associadas ao número do dispositivo especificado devem ser liberadas.

Se esta finalização remove o último número menor suportado pelo driver do dispositivo a partir do uso, o serviço kernel devswdel deverá ser chamado para remover os pontos de entrada do driver do dispositivo da tabela de comutadores do dispositivo para o parâmetro devno especificado.

Se abrir estão pendentes no dispositivo especificado, a operação de finalização é rejeitada com um código de erro apropriado retornado. O método Unconfigure pode, posteriormente, descarregar o driver do dispositivo se todos os usos dele tiverem sido finalizados.

Para determinar se todos os usos do driver do dispositivo foram finalizados, um método de dispositivo pode fazer uma chamada subroutine sysconfig . Ao utilizar a operação sysconfig SYS_QDVSW , o método do dispositivo pode aprender se o driver de dispositivo se retirou ou não da tabela de comutação do dispositivo.

CFG_QVPD Dispositivo de consultas-dados vitais do produto vital (VPD).

Para esta função, a rotina de chamada configura uma estrutura uio apontada pelo parâmetro uiop para a rotina ddconfig . Esta estrutura uio define uma área no armazenamento do chamante em que a rotina ddconfig é para escrever o VPD. O serviço kernel uiomove pode ser usado para fornecer a operação de cópia de dados.

A área de dados apontada pelo parâmetro uiop tem dois propósitos diferentes, dependendo da função cmd . Se o comando CFG_INIT tiver sido solicitado, a estrutura uiop descreve o local e o comprimento da estrutura de dados dependente do dispositivo (DDS) a partir da qual se lê as informações. Se o comando CFG_QVPD foi solicitado, a estrutura uiop descreve a área na qual se escrevem informações vitais de dados do produto. O conteúdo e o formato dessas informações são estabelecidos pelos métodos de dispositivo específicos em conjunto com o driver de dispositivo.

O serviço kernel uiomove pode ser usado para facilitar a cópia de informações para dentro ou para fora dessa área de dados. O formato da estrutura uio é definido no arquivo /usr/include/sys/uio.h e descrito mais adiante na estrutura uio .

Ambiente de Execução

A rotina ddconfig e suas operações são chamadas apenas no ambiente de processo.

Valores De Retorno

A rotina ddconfig configura o código de retorno para 0 se nenhum erro for detectado para a operação especificada. Se um erro deve ser retornado ao ouvinte, deve ser fornecido um código de retorno não zero. O código de retorno usado deve ser um dos valores definidos no arquivo /usr/include/sys/errno.h .

Se esta rotina foi invocada por uma chamada subroutine sysconfig , o código de retorno é transmitido para o seu caller (geralmente um método de dispositivo). É passado apresentando o código de erro no errno variável global e fornecendo uma-1 código de retorno para a sub-rotina.