devswadd Kernel Service

Finalidad

Añade una entrada de dispositivo a la tabla de conmutador de dispositivo.

Sintaxis

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/device.h>
int devswadd ( devno,  dswptr)
dev_t devno;
struct devsw *dswptr;

Parámetros

Elemento Descripción
devno Especifica el números de dispositivo mayor y menor que se va a asociar con la entrada especificada en la tabla de conmutación de dispositivos.
dswptr Apunta a la estructura de conmutador de dispositivo que se va a añadir a la tabla de conmutación de dispositivo.

Descripción

Normalmente, la rutina ddconfig de un controlador de dispositivo llama al servicio del kernel de devswadd para añadir o sustituir los puntos de entrada del controlador de dispositivo en la tabla de conmutación de dispositivos. La tabla de conmutación de dispositivo es una tabla de estructuras de conmutador de dispositivo (devsw) indexadas por el número de dispositivo principal del controlador de dispositivo. Esta tabla de estructuras es utilizada por los servicios de interfaz de controlador de dispositivo en el kernel para facilitar las rutinas de controlador de dispositivo de llamada.

La parte principal del número de dispositivo del parámetro devno se utiliza para especificar el índice en la tabla de conmutador de dispositivo donde el servicio devswadd debe colocar la entrada de conmutador de dispositivo especificada. Antes de que este servicio copie la estructura del conmutador de dispositivo en la tabla de conmutador de dispositivo, comprueba la entrada existente para determinar si algún dispositivo abierto la está utilizando. Si un dispositivo abierto ocupa actualmente la entrada que se va a sustituir, el servicio devswadd no realiza la actualización. En su lugar, devuelve un valor de error de EEXIST . Si la actualización es satisfactoria, devuelve un valor de 0.

Los puntos de entrada de la estructura de conmutador de dispositivo que no están soportados por el controlador de dispositivo se deben manejar de una de dos maneras. Si una llamada a un punto de entrada no soportado debe dar como resultado el retorno de un código de error, el punto de entrada debe establecerse en la rutina nodev en la estructura. Como resultado, cualquier llamada a este punto de entrada invoca automáticamente la rutina nodev , que devuelve un código de error de ENDEV . El kernel proporciona la rutina nodev .

De lo contrario, una llamada a un punto de entrada no soportado debe tratarse como una función de no operación. A continuación, el punto de entrada correspondiente debe establecerse en la rutina nulldev . La rutina nulldev , que también proporciona el kernel, no realiza ninguna operación si se llama y devuelve un código de retorno 0.

En sistemas multiprocesador, todas las rutinas de controlador de dispositivo se ejecutan de forma predeterminada en el primer procesador iniciado cuando se arrancó el sistema. Esto garantiza la compatibilidad con los controladores de dispositivo de uniprocesador. Si el controlador de dispositivo que se está añadiendo se ha diseñado para que sea seguro multiprocesador, establezca el distintivo DEV_MPSAFE en eld_optsde la estructura devsw pasada al servicio de kernel de devswadd . Las rutinas de controlador de dispositivo se ejecutarán en cualquier procesador disponible.

Todos los demás campos de la estructura que no se utilizan deben establecerse en 0. Algunos campos de la estructura son para uso del kernel; el servicio devswadd no copia estos campos en la tabla de conmutación de dispositivos. Estos campos se documentan en el archivo /usr/include/device.h .

Entorno de ejecución

El servicio de kernel de devswadd sólo se puede llamar desde entorno de proceso .

Valores de retorno

Elemento Descripción
0 Indica una operación satisfactoria.
EEXIST Indica que la entrada de conmutador de dispositivo especificada está en uso y no se puede sustituir.
ENOMEM Indica que la entrada no se puede fijar debido a una memoria real insuficiente.
EINVAL Indica que la parte principal del número de dispositivo del parámetro devno supera el número máximo permitido de entradas de conmutador de dispositivo.