Funzione ScsiPortGetUncachedExtension (srb.h)
La routine ScsiPortGetUncachedExtension alloca memoria che può essere usata sia dalla CPU che da un HBA master del bus per DMA o per i dati condivisi.
Sintassi
SCSIPORT_API PVOID ScsiPortGetUncachedExtension(
[in] PVOID HwDeviceExtension,
[in] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
[in] ULONG NumberOfBytes
);
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 archivia in genere informazioni specifiche dell'HBA in questa estensione, ad esempio lo stato dell'HBA e gli intervalli di accesso mappati dell'HBA. Questa area è disponibile per il driver miniport nel membro DeviceExtension-HwDeviceExtension> dell'oggetto dispositivo HBA subito dopo che il driver miniport chiama ScsiPortInitialize. Il driver della porta libera questa memoria quando rimuove il dispositivo.
[in] ConfigInfo
Specifica informazioni sulle funzionalità DMA dell'HBA. I membri seguenti devono essere compilati: DmaChannel o DmaPort, DmaWidth, DmaSpeed, MaximumTransferLength, ScatterGather, Master impostato su TRUE, NumberOfPhysicalBreaks, AdapterInterfaceType, Dma32BitAddresses, SystemIoBusNumber, AutoRequestSense e SrbExtensionSize.
I membri che non sono pertinenti all'HBA, ad esempio DmaChannel per un adattatore bus-master EISA, devono essere lasciati così com'è.
[in] NumberOfBytes
Indica le dimensioni in byte dell'estensione non memorizzata nella cache da allocare. I driver in Windows XP e nei sistemi operativi precedenti non devono allocare più di 100 kilobyte di estensione non memorizzata nella cache e se partecipano alle operazioni di I/O nel file di ibernazione o nel file di dump di arresto anomalo del sistema, devono limitare la quantità di estensione non memorizzata nella cache allocata a meno di 32 kilobyte.
Valore restituito
ScsiPortGetUncachedExtension restituisce un puntatore di indirizzo virtuale all'estensione non memorizzata nella cache. Se non è in grado di allocare la memoria richiesta, restituisce NULL.
Commenti
ScsiPortGetUncachedExtension può essere chiamato solo dalla routine HwScsiFindAdapter del driver miniport e solo per un HBA master del bus. Le chiamate da altre routine del driver miniport genereranno un errore di sistema o un'operazione non corretta per il chiamante.
Poiché i computer di fascia alta hanno cache e memorie di grandi dimensioni, qualsiasi memoria da condividere tra un HBA e la CPU deve essere allocata in modo speciale. Le cassette postali o le code di richieste di I/O nella memoria di sistema sono esempi di questo tipo di memoria condivisa.
Un driver miniport deve impostare SrbExtensionSize. Prima di chiamare ScsiPortGetUncachedExtension per modificare le dimensioni dell'archiviazione per richiesta in base a NumberOfPhysicalBreaks.
La routine HwScsiFindAdapter può chiamare ScsiPortGetUncachedExtension una sola volta per ogni HBA master del bus supportata dal driver miniport.
Per ottenere l'indirizzo fisico per l'estensione non memorizzata nella cache che può essere usata dall'HBA, chiamare ScsiPortGetPhysicalAddress.
Il driver ScsiPort libera la memoria allocata da ScsiPortGetUncachedExtension quando il dispositivo adattatore viene arrestato.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Desktop |
Intestazione | srb.h (include Miniport.h, Scsi.h) |
Libreria | Scsiport.lib |