Funcionalidades proporcionadas por Storport
El controlador Storport proporciona las siguientes funcionalidades:
Direccionamiento
Microsoft Windows admite sistemas que contienen diferentes tipos de buses de E/S o varios buses de E/S del mismo tipo. Se necesita un esquema de direccionamiento común para controlar esta variedad.
Los dispositivos PCI pueden tener recursos de registro de memoria y puerto de E/S. Las direcciones lógicas ayudan a hacer esta distinción transparente para el controlador de puerto.
Algunos sistemas contienen HBA que están conectados a más de un bus; este tipo de HBA puede requerir varios conjuntos de traducciones de direcciones.
Las direcciones lógicas son necesarias para la portabilidad entre máquinas basadas en CISC y basadas en RISC.
Reintentos y control de errores
Los controladores de clase de almacenamiento no tienen que implementar algoritmos para reintentar IRP cuando los dispositivos están demasiado ocupados para procesarlos. El controlador storport implementa esta funcionalidad.
El controlador de clase establece un valor de tiempo de espera para las solicitudes y Storport es responsable de aplicarlo. Sin embargo, el controlador storport puede aplicar los valores de tiempo de espera del controlador de clase de forma flexible, teniendo en cuenta el estado del autobús. Por ejemplo, si un vínculo de canal de fibra administrado por Storport deja de funcionar durante 20 segundos, Storport podría suspender el contador de tiempo de espera durante el tiempo de instrucciones, de modo que, por ejemplo, las solicitudes con un tiempo de espera de 10 segundos no se producirán hasta 10 segundos después de que se vuelva a realizar la copia de seguridad del vínculo. Storport aumenta los valores de tiempo de espera asignados a las solicitudes en respuesta a un aumento del tráfico de E/S, ya que, con tráfico de E/S más pesado, los dispositivos requerirán más tiempo para completar las solicitudes.
Storport controla los errores de destino y ocupado por el controlador, así como las condiciones de error de transporte (es decir, los errores relacionados con la transmisión real de datos en el autobús). Por ejemplo:
- Errores de paridad de bus
- tiempos de espera de selección
Configuración, puesta en cola y administración de estado de energía
Proporcionar a los controladores de clase información sobre las limitaciones del adaptador de host: es responsabilidad del controlador de clase regular el tamaño de las transferencias de datos para adaptarse a los límites de los adaptadores de bus host (HBA). Sin embargo, Storport proporciona al controlador de clase la información que necesita para realizar esta tarea. Storport proporciona esta información en un descriptor de adaptador (STORAGE_ADAPTER_DESCRIPTOR) en respuesta a una solicitud IOCTL (IOCTL_STORAGE_QUERY_PROPERTY). El controlador de clase es responsable de dividir las solicitudes en fragmentos del tamaño adecuado en función de la información notificada en este descriptor.
Traducción de direcciones relativas de bus a direcciones lógicas: cuando se consultan, los adaptadores suministran direcciones relativas a bus para puertos de E/S, registros de comandos y registros de estado de control. Sin embargo, un controlador de minipuerto no puede usar direcciones relativas al bus para comunicarse con su adaptador de bus host (HBA). Storport traduce las direcciones relativas al bus a direcciones lógicas, de modo que los controladores de miniporte puedan acceder a las direcciones de autobús de forma transparente. Hay varias razones para esto:
Asegurarse de que un dispositivo y todos sus dispositivos subyacentes estén encendidos (en el estado de alimentación del dispositivo D0) antes de que se inicie el dispositivo: cuando un dispositivo no está listo para encenderse, Storport pone en cola una solicitud D0 para ese dispositivo hasta que el dispositivo esté listo.
Puesta en cola de solicitudes asincrónicas de controladores de clase y reenvío asincrónicamente al dispositivo de destino: los controladores de clase no tienen que esperar a que se complete una solicitud antes de enviar la siguiente solicitud. Storport asume la responsabilidad de poner en cola estas solicitudes para evitar sobrecargar la potencia de procesamiento del hardware subyacente.
Compatibilidad con la administración interna y externa de colas de solicitudes de E/S internas: La mayoría de las operaciones de administración de colas las inicia Storport. Por ejemplo, Storport inmoviliza su cola cuando se produce un error e informa de la condición de error al controlador de clase, de modo que el controlador de clase pueda responder antes de procesar más solicitudes. Sin embargo, Storport también responde a las solicitudes del controlador de clase u otros controladores de nivel superior para bloquear, desbloquear, inmovilizar o descongelar su cola de solicitudes interna. Los controladores de nivel superior pueden forzar a Storport a descongelar su cola interna mediante la solicitud de SRB_FUNCTION_RELEASE_QUEUE. Para obtener una explicación de lo que significa "inmovilizar", "bloquear" o "desbloquear" una cola, consulte Administración de colas de Storport.
Traducción de errores notificados por el dispositivo en formato de datos de detección SCSI-3 para su procesamiento por parte del controlador de clase.
Storport proporciona servicios al controlador de miniport mediante las rutinas de la biblioteca de Storport. Los escritores de controladores de minipuerto pueden llamar a estas rutinas en lugar de codificar la funcionalidad que proporcionan en un único controlador de puerto monolítico. Algunos de los servicios más importantes que se proporcionan mediante estas rutinas son los siguientes:
Un controlador de minipuerto de Storport puede delegar muchas operaciones de inicialización dependientes del sistema operativo a la rutina de biblioteca StorPortInitialize de Storport . Por ejemplo, el controlador storport controla los detalles relacionados con la asignación de PnP y DMA. Esto reduce la cantidad de trabajo que debe hacer un controlador de miniporte storport. Para obtener una explicación de las tareas de inicialización de un controlador de miniport de Storport, consulte Inicialización de hardware con Storport.
Los controladores de miniport storport para dispositivos que no son PnP se reservan la tarea de localizar adaptadores e informar de sus recursos al administrador de PnP. Esto se hace en StorPortInitialize.
Los controladores de miniport storport no inicializan los puntos de entrada de envío en el objeto de controlador. El controlador Storport lo hace en nombre del controlador de miniport cuando el controlador de miniporta llama a StorPortInitialize.
Los controladores de miniport storport no convierten direcciones relativas a bus a direcciones lógicas mediante HalTranslateBusAddress. Los controladores de minipuerto de Storport hacen esto mediante una llamada a StorPortGetDeviceBase.
Para obtener una lista completa de las rutinas de biblioteca que Storport pone a disposición de los controladores de miniport de Storport, consulte Rutinas de soporte técnico del controlador de Storport.