ScsiPortGetUncachedExtension, fonction (srb.h)
Le ScsiPortGetUncachedExtension routine alloue de la mémoire qui peut être utilisée à la fois par l’UC et un HBA maître bus pour DMA ou pour les données partagées.
Syntaxe
SCSIPORT_API PVOID ScsiPortGetUncachedExtension(
[in] PVOID HwDeviceExtension,
[in] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
[in] ULONG NumberOfBytes
);
Paramètres
[in] HwDeviceExtension
Pointeur vers l’extension de périphérique matériel. Il s’agit d’une zone de stockage par HBA que le pilote de port alloue et initialise pour le compte du pilote miniport. Les pilotes miniport stockent généralement des informations spécifiques à un HBA dans cette extension, telles que l’état de l’adaptateur HBA et les plages d’accès mappées de l’adaptateur HBA. Cette zone est disponible pour le pilote miniport dans le DeviceExtension->HwDeviceExtension membre de l’objet d’appareil du HBA immédiatement après l’appel du pilote miniport ScsiPortInitialize. Le pilote de port libère cette mémoire lorsqu’il supprime l’appareil.
[in] ConfigInfo
Spécifie des informations sur les fonctionnalités DMA du HBA. Les membres suivants doivent être renseignés : DmaChannel ou DmaPort, DmaWidth, DmaSpeed, MaximumTransferLength, ScatterGather, Master set pour TRUE, NumberOfPhysicalBreaks, AdapterInterfaceType, Dma32BitAddresses, SystemIoBusNumber, AutoRequestSenseet SrbExtensionSize.
Les membres qui ne sont pas pertinents pour l’adaptateur HBA, tels que DmaChannel pour un adaptateur EISA bus-master, doivent être laissés comme c’est le cas.
[in] NumberOfBytes
Indique la taille en octets de l’extension non mise en cache à allouer. Les pilotes dans Windows XP et les systèmes d’exploitation antérieurs ne doivent pas allouer plus de 100 kilo-octets d’extension non mise en cache et s’ils participent aux opérations d’E/S sur le fichier de mise en veille prolongée ou au fichier de vidage sur incident, ils doivent limiter la quantité d’extension non mise en cache qu’ils allouent à moins de 32 kilo-octets.
Valeur de retour
ScsiPortGetUncachedExtension retourne un pointeur d’adresse virtuelle vers l’extension non mise en cache. S’il ne peut pas allouer la mémoire demandée, il retourne NULL .
Remarques
ScsiPortGetUncachedExtension ne peut être appelé qu’à partir de la routine HwScsiFindAdapter du pilote miniport et uniquement pour un HBA maître de bus. Les appels provenant d’autres routines de pilotes miniport entraînent une défaillance système ou une opération incorrecte pour l’appelant.
Étant donné que les machines haut de gamme ont des caches et des mémoires volumineuses, toute mémoire à partager entre un HBA et l’UC doit être spécialement allouée. Les boîtes aux lettres ou les files d’attente de demandes d’E/S dans la mémoire système sont des exemples de ce type de mémoire partagée.
Un pilote miniport doit définir SrbExtensionSize. avant d’appeler ScsiPortGetUncachedExtension pour modifier la taille de son stockage par requête en fonction de NumberOfPhysicalBreaks.
La routine HwScsiFindAdapter peut appeler ScsiPortGetUncachedExtension une seule fois pour chaque HBA maître de bus pris en charge par le pilote miniport.
Pour obtenir l’adresse physique de l’extension non mise en cache que l’adaptateur HBA peut utiliser, appelez ScsiPortGetPhysicalAddress.
Le pilote ScsiPort libère la mémoire allouée par ScsiPortGetUncachedExtension lorsque l’appareil de l’adaptateur est arrêté.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Bureau |
d’en-tête | srb.h (include Miniport.h, Scsi.h) |
bibliothèque | Scsiport.lib |