Punto de entrada de controlador de dispositivo
Finalidad
Cierra una instancia de dispositivo previamente abierta.
Sintaxis
Parámetros
| Elemento | Descripción |
|---|---|
| devno | Especifica el números de dispositivo mayor y menor de la instancia de dispositivo que se cerrará. |
| chan | Especifica el número de canal. |
Descripción
Se llama al punto de entrada dimida cuando la subrutina cerrar o el servicio de kernel de fp_close cierra una instancia de dispositivo abierta anteriormente. El kernel llama a la rutina bajo diferentes circunstancias para controladores de dispositivo multiplexados y no multiplexados.
Para controladores de dispositivo no multiplexados, el kernel llama a la rutina dimida cuando el último proceso que tiene la instancia de dispositivo abierta la cierra. Esto hace que el recuento de referencia de g-nodo se decrete en 0 y que el nodo g se desasigne.
Para los controladores de dispositivo multiplexados, se llama a la rutina dimida para cada cierre asociado con una apertura explícita. En otras palabras, la rutina dimida del controlador de dispositivo se invoca una vez para cada vez que se ha invocado su rutina ddopen para el canal.
En algunos casos, los almacenamientos intermedios de datos se deben grabar en el dispositivo antes de volver de la rutina dimida . Se trata de almacenamientos intermedios que contienen datos que se grabarán en el dispositivo que el controlador de dispositivo ha puesto en cola pero que todavía no se han grabado.
Los controladores de dispositivo no multiplexados deben restablecer el dispositivo asociado a un estado inactivo y cambiar el estado del dispositivo de controlador de dispositivo a cerrado. Esto puede implicar llamar al servicio del kernel de fp_close para que emita un cierre a un manejador de dispositivo abierto asociado para el dispositivo. Devolver el dispositivo a un estado desocupado impide que el dispositivo genere más solicitudes de interrupción o acceso directo a la memoria (DMA). Los canales DMA y los niveles de interrupción asignados para este dispositivo deben liberarse, hasta que se vuelva a abrir el dispositivo, para liberar recursos del sistema críticos que utiliza este dispositivo.
Los controladores de dispositivo multiplexados deben proporcionar la misma inmovilización del dispositivo, pero no en la rutina dimida . Devolver el dispositivo al estado desocupado y liberar sus recursos debe retrasarse hasta que se llame a la rutina ddmpx para desasignar el último canal asignado en el dispositivo.
En todos los casos, la instancia de dispositivo se considera cerrada una vez que la rutina dimida ha vuelto al llamante, incluso si se devuelve un código de retorno distinto de cero.
Entorno de ejecución
La rutina dimida sólo se ejecuta en entorno de proceso. Debe proporcionar la serialización necesaria de sus estructuras de datos utilizando los servicios de kernel de bloqueo junto con una palabra de bloqueo privada definida en el controlador.
Valores de retorno
El punto de entrada dimida puede indicar una condición de error al programa de aplicación de modalidad de usuario devolviendo un código de retorno distinto de cero. Esto hace que la llamada a la subrutina devuelva un valor de-1 . También hace que el código de retorno esté disponible para la aplicación de modalidad de usuario en la variable global errno . El código de retorno utilizado debe ser uno de los valores definidos en el/usr/include/sys/errno.h archivo.
El dispositivo siempre se considera cerrado aunque se devuelva un código de retorno distinto de cero.
Cuando sea aplicable, se deben utilizar los valores de retorno definidos en el estándar POSIX 1003.1 para la subrutina close .