Funzione SCSIPortGetDeviceBase (srb.h)

La routine SCSIPortGetDeviceBase restituisce un indirizzo di base logico mappato che può essere usato per comunicare con un HBA. Ogni driver miniport deve passare gli indirizzi dell'intervallo di accesso logico mappati a SCSIPort.. PortaXxx e SCSIPort.. Registrare le routine Xxx per comunicare con i relativi HBA.Register Xxx routines to communicate with its HBA(s).

Nota I modelli di driver di porta SCSI e miniport SCSI possono essere modificati o non disponibili in futuro. È invece consigliabile usare i modelli di driver Storport e Miniport Storport.
 

Sintassi

SCSIPORT_API PVOID ScsiPortGetDeviceBase(
  [in] PVOID                 HwDeviceExtension,
  [in] INTERFACE_TYPE        BusType,
  [in] ULONG                 SystemIoBusNumber,
  [in] SCSI_PHYSICAL_ADDRESS IoAddress,
  [in] ULONG                 NumberOfBytes,
  [in] BOOLEAN               InIoSpace
);

Parametri

[in] HwDeviceExtension

Puntatore all'estensione del dispositivo hardware. Si tratta di un'area di archiviazione per HBA che il driver di porta alloca e inizializza per conto del driver miniport. I driver miniport in genere archiviano informazioni specifiche di HBA in questa estensione, ad esempio lo stato dell'HBA e gli intervalli di accesso mappati di HBA. Questa area è disponibile per il driver miniport nel membro DeviceExtension-HwDeviceExtension> dell'oggetto dispositivo HBA immediatamente dopo che il driver miniport chiama SCSIPortInitialize. Il driver di porta libera questa memoria quando rimuove il dispositivo.

[in] BusType

Specifica il tipo di interfaccia del bus di I/O in cui è connesso l'HBA. La routine HwScsiFindAdapter del driver miniport ottiene il valore per questo parametro dal membro AdapterInterfaceType del PORT_CONFIGURATION_INFORMATION di input.

[in] SystemIoBusNumber

Specifica il numero assegnato dal sistema del bus di I/O in cui è connesso l'HBA. La routine HwScsiFindAdapter ottiene il valore per questo parametro dal membro SystemIoBusNumber del PORT_CONFIGURATION_INFORMATION di input.

[in] IoAddress

Specifica l'indirizzo di base relativo al bus di un intervallo usato dall'HBA. La routine HwScsiFindAdapter ottiene il valore per questo parametro da uno degli elementi AccessRanges nella PORT_CONFIGURATION_INFORMATION se il driver di porta fornisce informazioni sulla configurazione dell'intervallo. In caso contrario, questo indirizzo può essere un valore restituito da SCSIPortGetBusData o da un valore predefinito fornito da un driver miniport. Evitare di usare un indirizzo di base pari a zero perché lo stato restituito riuscito può essere in conflitto con lo stato di errore (NULL).

[in] NumberOfBytes

Specifica le dimensioni in byte dell'intervallo che il mapping deve coprire. La routine HwScsiFindAdapter ottiene il valore di questo parametro dallo stesso elemento AccessRanges di IoAddress se il driver di porta fornisce informazioni di configurazione dell'intervallo. In caso contrario, questo valore può essere restituito da SCSIPortGetBusData o da un driver miniport fornito per impostazione predefinita. In qualsiasi caso, il driver non deve accedere all'hardware all'esterno dell'intervallo restituito, mappato.

[in] InIoSpace

TRUE indica che l'intervallo da mappare è nello spazio di I/O e il driver miniport passerà gli indirizzi mappati in questo intervallo a SCSIPort... PortaXxx per comunicare con l'HBA. La routine HwScsiFindAdapter ottiene il valore di questo parametro dallo stesso elemento AccessRanges di IoAddress. Si noti che un driver miniport deve invertire il valore del membro InMemorySpace in un elemento di tipo ACCESS_RANGE prima che venga passato a SCSIPortGetDeviceBase come argomento InIoSpace . FALSE indica che l'intervallo da mappare è nello spazio di memoria.

Valore restituito

SCSIPortGetDeviceBase restituisce un indirizzo di base logico mappato per l'oggetto IoAddress specificato se ha eseguito correttamente il mapping dell'intervallo specificato da IoAddress a NumberOfBytes. Se non è possibile eseguire il mapping di un determinato intervallo, SCSIPortGetDeviceBase restituisce NULL.

Commenti

Le piattaforme del sistema operativo basato su NT possono avere diversi tipi di autobus di I/O e diversi autobus I/O dello stesso tipo. Inoltre, hal può eseguire il mapping dello spazio di I/O alla memoria in alcune piattaforme.

Di conseguenza, un driver miniport non può usare indirizzi di intervallo di accesso relativi al bus per comunicare con il relativo HBA. Per mantenere la portabilità del driver miniport tra computer basati su CISC e RISC, gli indirizzi usati per accedere agli HBA devono essere convertiti con SCSIPortGetDeviceBase.

Ogni driver miniport deve usare gli indirizzi dell'intervallo logico dello spazio di sistema, mappati da SCSIPortGetDeviceBase, per comunicare con i relativi HBA(s). Chiamate a SCSIPort... Le routine Port/RegisterXxx richiedono questi indirizzi logici mappati.

SCSIPortGetDeviceBase può essere chiamato più volte, a seconda del numero di hbA supportati dal driver miniport e del numero di intervalli di accesso necessari per ogni HBA. Ogni intervallo mappato corrisponde a un intervallo di indirizzi del dispositivo relativi al bus specificati in un elemento di tipo ACCESS_RANGE della matrice AccessRanges .

SCSIPortGetDeviceBase può essere chiamato solo da una routine HwScsiFindAdapter di un driver miniport o da HwScsiAdapterControl quando il tipo di controllo è SCSISetRunningConfig. Le chiamate da altre routine del driver miniport causano un errore di sistema o un'operazione errata per il chiamante.

Seguire queste linee guida per chiamare SCSIPortGetDeviceBase:

  • Se HwScsiFindAdapter usa un set di driver miniport fornito da intervalli di accesso o valori relativi al bus predefiniti restituiti da SCSIPortGetBusData, deve chiamare SCSIPortValidateRange prima di tentare di chiamare SCSIPortGetDeviceBase.
  • Se HwScsiFindAdapter determina che un determinato HBA non è uno che il driver miniport supporta, deve chiamare SCSIPortFreeDeviceBase per rilasciare i mapping configurati per comunicare con tale HBA.
L'indirizzo logico restituito da SCSIPortGetDeviceBase deve essere usato per tutti i riferimenti successivi apportati all'hardware, ma non deve essere aggiunto a alcuna specifica AccessRanges nella PORT_CONFIGURATION_INFORMATION. I writer di driver miniport non devono considerare il numero di bit usati nell'indirizzo di base logico restituito da SCSIPortGetDeviceBase.

SCSIPortGetDeviceBase usa SCSI_PHYSICAL_ADDRESS per rappresentare indirizzi relativi al bus.

typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;

Il tipo SCSI_PHYSICAL_ADDRESS è un tipo di dati indipendente dal sistema operativo che i driver miniport SCSI usano per rappresentare indirizzi fisici o un indirizzo relativo al bus.

Nota I modelli di driver di porta SCSI e miniport SCSI possono essere modificati o non disponibili in futuro. È invece consigliabile usare i modelli di driver Storport e Miniport Storport.
 

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione srb.h (include Miniport.h, SCSI.h)
Libreria Scsiport.lib

Vedi anche

ACCESS_RANGE

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

SCSIPortFreeDeviceBase

SCSIPortGetBusData

SCSIPortValidateRange