struttura ACCESS_RANGE (srb.h)
Un ACCESS_RANGE descrive un intervallo di porte di memoria o I/O utilizzato da un hba.
Sintassi
typedef struct _ACCESS_RANGE {
SCSI_PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
BOOLEAN RangeInMemory;
} ACCESS_RANGE, *PACCESS_RANGE;
Members
RangeStart
Contiene un indirizzo di tipo SCSI_PHYSICAL_ADDRESS che specifica l'indirizzo di base relativo al bus dell'intervallo. Si tratta di un indirizzo che può essere passato a ScsiPortGetDeviceBase.
RangeLength
Specifica le dimensioni, in byte o il numero di porte nell'intervallo. Un driver miniport deve garantire che questo valore corrisponda all'intervallo effettivamente decodificato dall'adattatore. Ad esempio, se l'HBA usa sette registri ma risponde a otto, questo membro deve essere impostato su 8.
RangeInMemory
Indica che l'intervallo è in memoria quando TRUE, anziché nello spazio di I/O. Se FALSE, l'intervallo è nello spazio di I/O.
Commenti
Ogni ACCESS_RANGE è un elemento della matrice AccessRanges all'interno della struttura PORT_CONFIGURATION_INFORMATION passata alla routine HwScsiFindAdapter di un driver miniport.
Se possibile, il driver di porta specifico del sistema operativo configura ogni elemento dell'intervallo di accesso con un intervallo HBA relativo al bus per il driver miniport prima di chiamare la routine HwScsiFindAdapter del driver miniport. In caso contrario, il driver della porta zeri gli elementi dell'intervallo per i quali non può fornire informazioni di configurazione.
Se il driver di porta fornisce un intervallo, la routine HwScsiFindAdapter del driver miniport deve usare solo gli indirizzi forniti e non deve mai tentare di trovare altri HBA sullo stesso bus usando indirizzi di propria deviatura. Il tentativo di accedere ad altri intervalli di porte o di memoria relativi al bus quando il driver di porta ha fornito informazioni sull'intervallo, in particolare nei sistemi solo x86 in cui alcuni dispositivi vengono inizializzati in modalità reale x86, possono causare l'esito negativo dell'inizializzazione di altri dispositivi nel bus o anche causare l'errore del processo di avvio del sistema.
Ogni driver miniport deve avere un set di intervalli predefiniti relativi al bus per provare se il driver di porta specifico del sistema operativo non può fornire le informazioni. Un driver miniport deve chiamare ScsiPortValidateRange per controllare la sicurezza di qualsiasi intervallo di accesso fornito dal driver miniport prima di tentare di eseguire il mapping di tale intervallo con ScsiPortGetDeviceBase e usare gli indirizzi logici restituiti per accedere a una scheda, in particolare se uno dei relativi HBA ha un BIOS.
Qualsiasi intervallo di accesso compilato da un driver miniport per il driver di porta specifico del sistema operativo nel PORT_CONFIGURATION_INFORMATION deve avere il membro RangeStart impostato su un indirizzo relativo al bus, ad esempio un valore restituito da ScsiPortGetBusData.
L'indirizzo logico di base corrispondente restituito da ScsiPortGetDeviceBase deve essere archiviato, in genere nell'estensione del dispositivo del driver miniport, come indirizzo RangeStart per un intervallo mappato di porte di I/O o indirizzi di memoria usati per chiamare le routine ScsiPortReadXxx e ScsiPortWriteXxx .
Requisiti
Requisito | Valore |
---|---|
Intestazione | srb.h (include Srb.h, Storport.h, Strmini.h) |
Vedi anche
PORT_CONFIGURATION_INFORMATION (SCSI)