Funzionalità fornite dalla porta SCSI
Il driver porta SCSI offre le funzionalità seguenti:
Microsoft Windows supporta i sistemi che contengono diversi tipi di bus di I/O e/O e/o diversi autobus di I/O dello stesso tipo. È necessario uno schema di indirizzamento comune per gestire questa varietà.
I dispositivi PCI possono avere sia le risorse di registrazione di I/O che la memoria. Gli indirizzi logici consentono di rendere questa distinzione trasparente al driver di porta.
Alcuni sistemi contengono HBA connessi a più bus; tale HBA potrebbe richiedere diversi set di traduzioni degli indirizzi.
Gli indirizzi logici sono necessari per la portabilità tra computer basati su CISC e RISC.
Ripetere i tentativi di integrazione quando un dispositivo è troppo occupato per elaborarli.
I driver della classe di archiviazione non devono implementare algoritmi per ripetere i tentativi di irP quando i dispositivi sono troppo occupati per elaborarli. Il driver porta SCSI implementa questa funzionalità.
Applicazione dei valori di timeout per le richieste.
Il driver di classe imposta un valore di timeout per le richieste e la porta SCSI è responsabile dell'applicazione. Tuttavia, il driver porta SCSI può applicare i valori di timeout del driver di classe in modo flessibile, prendendo in considerazione lo stato del bus. Ad esempio, se un collegamento fibre channel gestito dalla porta SCSI scende per 20 secondi, la porta SCSI potrebbe sospendere il contatore del timeout durante il tempo di arresto, in modo che, ad esempio, le richieste con un timeout di 10 secondi non avranno esito negativo fino a 10 secondi dopo il backup del collegamento. La porta SCSI aumenta i valori di timeout assegnati alle richieste in risposta a un aumento del traffico di I/O, perché con traffico I/O più pesante, i dispositivi richiedono più tempo per completare le richieste.
Gestione degli errori di destinazione e occupato dal controller, nonché le condizioni di errore di trasporto (in altre parole, errori correlati alla trasmissione effettiva dei dati sul bus). Ad esempio:
- errori di parità del bus
- timeout di selezione
Fornire ai driver di classe informazioni sulle limitazioni dell'adattatore host.
È responsabilità del driver della classe regolare le dimensioni dei trasferimenti di dati in base ai limiti delle schede del bus host (HBA). Tuttavia, la porta SCSI fornisce il driver di classe con le informazioni necessarie per eseguire questa attività. La porta SCSI fornisce queste informazioni in un descrittore di adapter (STORAGE_ADAPTER_DESCRIPTOR) in risposta a una richiesta IOCTL IOCTL_STORAGE_QUERY_PROPERTY . Il driver di classe è responsabile dell'interruzione delle richieste in blocchi delle dimensioni appropriate in base alle informazioni segnalate in questo descrittore.
Conversione degli indirizzi relativi del bus in indirizzi logici.
Quando viene eseguita una query, gli adattatori forniscono indirizzi relativi al bus per le porte di I/O, i registri dei comandi e i registri di stato del controllo. Tuttavia, un driver miniport non può usare indirizzi relativi al bus per comunicare con la scheda del bus host (HBA). La porta SCSI converte gli indirizzi relativi del bus agli indirizzi logici, in modo che i driver miniport possano accedere agli indirizzi del bus in modo trasparente. per vari motivi:
Assicurarsi che un dispositivo e tutti i relativi dispositivi sottostanti vengano aggiornati (allo stato di alimentazione del dispositivo D0) prima dell'avvio del dispositivo.
Quando un dispositivo non è pronto per l'alimentazione, la porta SCSI accoda una richiesta D0 per tale dispositivo fino a quando il dispositivo non è pronto.
Accodamento di richieste asincrone da driver di classe e inoltro sincrono al dispositivo di destinazione.
I driver di classe non devono attendere il completamento di una richiesta prima di inviare la richiesta successiva. La porta SCSI presuppone la responsabilità di accodare queste richieste per evitare di sovraccaricare la potenza di elaborazione dell'hardware sottostante.
Supporto sia della gestione interna che esterna delle code di richieste di I/O interne.
La maggior parte delle operazioni di gestione della coda viene avviata dalla porta SCSI stessa. Ad esempio, la porta SCSI blocca la coda quando si verifica un errore e segnala la condizione di errore al driver di classe, in modo che il driver di classe possa rispondere prima di elaborare ulteriori richieste. Tuttavia, la porta SCSI risponde anche alle richieste dal driver di classe o da altri driver di livello superiore per bloccare, sbloccare, bloccare o annullare la coda interna delle richieste. I driver di livello superiore possono forzare la porta SCSI a liberare la coda interna usando la richiesta di SRB_FUNCTION_RELEASE_QUEUE. Per una spiegazione del significato di "blocco", "blocco" o "sblocco" di una coda, vedere Gestione code del driver di porta SCSI.
Conversione di errori segnalati dal dispositivo in formato dati di senso SCSI-2 per l'elaborazione dal driver di classe.
La porta SCSI fornisce servizi al driver miniport tramite le routine della libreria di porte SCSI. I writer di driver miniport possono chiamare queste routine anziché codificare le funzionalità fornite in un singolo driver di porta monolitica. Alcuni dei servizi più importanti offerti tramite queste routine sono i seguenti:
Un driver miniport porta SCSI può delegare molte operazioni di inizializzazione dipendenti dal sistema operativo alla routine di libreria SCSI SCSIPortInitialize . In questo modo un driver miniport porta SCSI più portabile tra diverse versioni del sistema operativo. Per una spiegazione dei compiti di inizializzazione di un driver miniport SCSI, vedere SCSI Miniport DriverEntry Routine.
I driver miniport porta SCSI per i dispositivi non PnP vengono risparmiati l'attività di individuazione delle schede e la segnalazione delle risorse alla gestione PnP. Questa operazione viene eseguita in SCSIPortInitialize.
I driver miniport porta SCSI non inizializzano i punti di ingresso di invio nell'oggetto driver. Il driver porta SCSI esegue questa operazione per conto del driver miniport quando il driver miniport chiama SCSIPortInitialize.
I driver miniport porta SCSI non convertono gli indirizzi relativi al bus in indirizzi logici usando HalTranslateBusAddress. I driver miniport porta SCSI eseguono questa operazione tramite una chiamata a SCSIPortGetDeviceBase.
Per un riepilogo delle routine di libreria che la porta SCSI rende disponibile per i driver miniport porta SCSI, vedere Routine di supporto del driver porta SCSI.