Fonctionnalités fournies par le port SCSI
Le pilote de port SCSI offre les fonctionnalités suivantes :
Microsoft Windows prend en charge les systèmes qui contiennent différents types de bus d’E/S et/ou plusieurs bus d’E/S du même type. Un schéma d’adressage commun est nécessaire pour gérer cette variété.
Les appareils PCI peuvent avoir des ressources de port d’E/S et de registre de mémoire. Les adresses logiques permettent de rendre cette distinction transparente pour le pilote de port.
Certains systèmes contiennent des HBA connectés à plusieurs bus ; Un tel HBA peut nécessiter plusieurs ensembles de traductions d’adresses.
Les adresses logiques sont nécessaires pour la portabilité entre les machines CISC et RISC.
Réessayer les irps lorsqu’un appareil est trop occupé pour les traiter.
Les pilotes de classe de stockage n’ont pas besoin d’implémenter d’algorithmes pour réessayer des IRP lorsque les appareils sont trop occupés pour les traiter. Le pilote de port SCSI implémente cette fonctionnalité.
Application de valeurs de délai d’attente pour les demandes.
Le pilote de classe définit une valeur de délai d’attente pour les requêtes, et le port SCSI est responsable de son application. Toutefois, le pilote de port SCSI peut appliquer les valeurs de délai d’attente du pilote de classe de manière flexible, en tenant compte de l’état du bus. Par exemple, si une liaison Fibre Channel gérée par le port SCSI tombe pendant 20 secondes, le port SCSI peut suspendre le compteur de délai d’attente pendant le temps d’arrêt, de sorte que, pour instance, les demandes dont le délai est de 10 secondes n’échouent que 10 secondes après la remise en service du lien. Le port SCSI augmente les valeurs de délai d’attente affectées aux requêtes en réponse à une augmentation du trafic d’E/S, car avec un trafic d’E/S plus lourd, les appareils auront besoin de plus de temps pour effectuer les demandes.
Gestion des erreurs de cible et de trafic du contrôleur, ainsi que des conditions d’erreur de transport (en d’autres termes, les erreurs liées à la transmission réelle de données sur le bus). Par exemple :
- Erreurs de parité de bus
- délai d’expiration de la sélection
Fournir aux pilotes de classe des informations sur les limitations de l’adaptateur hôte.
Il incombe au pilote de classe de réglementer la taille des transferts de données en fonction des limites des adaptateurs de bus hôte (HBA). Toutefois, le port SCSI fournit au pilote de classe les informations dont il a besoin pour accomplir cette tâche. Le port SCSI fournit ces informations dans un descripteur d’adaptateur (STORAGE_ADAPTER_DESCRIPTOR) en réponse à une demande IOCTL IOCTL_STORAGE_QUERY_PROPERTY . Le pilote de classe est chargé de diviser les demandes en blocs de la taille appropriée en fonction des informations signalées dans ce descripteur.
Traduction d’adresses relatives de bus en adresses logiques.
Lorsqu’ils sont interrogés, les adaptateurs fournissent des adresses relatives de bus pour les ports d’E/S, les registres de commandes et les registres de status de contrôle. Toutefois, un pilote miniport ne peut pas utiliser d’adresses relatives de bus pour communiquer avec son adaptateur de bus hôte (HBA). Le port SCSI traduit les adresses relatives de bus en adresses logiques, afin que les pilotes miniport puissent accéder aux adresses de bus de manière transparente. Il existe plusieurs raisons à cela :
Vérifier qu’un appareil et tous ses appareils sous-jacents sont mis sous tension (à l’état d’alimentation de l’appareil D0) avant le démarrage de l’appareil.
Lorsqu’un appareil n’est pas prêt à être mis sous tension, le port SCSI met en file d’attente une demande D0 pour cet appareil jusqu’à ce que l’appareil soit prêt.
Mise en file d’attente des requêtes asynchrones des pilotes de classe et transfert synchrone vers l’appareil cible.
Les pilotes de classe n’ont pas besoin d’attendre la fin d’une demande avant d’envoyer la requête suivante. Le port SCSI assume la responsabilité de mettre en file d’attente ces demandes afin d’éviter d’surcharger la puissance de traitement du matériel sous-jacent.
Prise en charge de la gestion interne et externe des files d’attente de demandes d’E/S internes.
La plupart des opérations de gestion des files d’attente sont lancées par le port SCSI lui-même. Par instance, le port SCSI fige sa file d’attente lorsqu’une erreur se produit et signale la condition d’erreur au pilote de classe, afin que le pilote de classe puisse répondre avant que d’autres demandes ne soient traitées. Toutefois, le port SCSI répond également aux demandes du pilote de classe ou d’autres pilotes de niveau supérieur pour verrouiller, déverrouiller, figer ou libérer sa file d’attente de requêtes interne. Les pilotes de niveau supérieur peuvent forcer le port SCSI à libérer sa file d’attente interne à l’aide de la requête SRB_FUNCTION_RELEASE_QUEUE. Pour une explication de ce que signifie « figer », « verrouiller » ou « déverrouiller » une file d’attente, consultez Gestion de la file d’attente du pilote de port SCSI.
Traduction des erreurs signalées par l’appareil dans le format de données de détection SCSI-2 pour traitement par le pilote de classe.
Le port SCSI fournit des services au pilote miniport au moyen des routines de bibliothèque de ports SCSI. Les enregistreurs de pilotes miniport peuvent appeler ces routines au lieu de coder les fonctionnalités qu’ils fournissent dans un seul pilote de port monolithique. Voici quelques-uns des services les plus importants offerts par l’utilisation de ces routines :
Un pilote miniport de port SCSI peut déléguer de nombreuses opérations d’initialisation dépendantes du système d’exploitation à la routine de bibliothèque ScsiPortInitialize du port SCSI. Cela rend un pilote miniport port SCSI plus portable sur différentes versions du système d’exploitation. Pour obtenir une explication des tâches d’initialisation d’un pilote miniport port SCSI, consultez SCSI Miniport DriverEntry Routine.
Les pilotes miniport de port SCSI pour les appareils non PnP ne sont pas chargés de localiser les adaptateurs et de signaler leurs ressources au gestionnaire PnP. Cette opération est effectuée dans ScsiPortInitialize.
Les pilotes miniport de port SCSI n’initialisent pas les points d’entrée de répartition dans l’objet pilote. Le pilote de port SCSI le fait pour le compte du pilote miniport lorsque le pilote miniport appelle ScsiPortInitialize.
Les pilotes miniport de port SCSI ne convertissent pas les adresses relatives aux bus en adresses logiques à l’aide de HalTranslateBusAddress. Les pilotes miniport de port SCSI effectuent cette opération en appelant ScsiPortGetDeviceBase.
Pour obtenir un résumé des routines de bibliothèque que le port SCSI met à la disposition des pilotes miniport de port SCSI, consultez Routines de prise en charge des pilotes de port SCSI.