SCSI_POWER_REQUEST_BLOCK structure (storport.h)
La structure SCSI_POWER_REQUEST_BLOCK est une version spéciale d’une SCSI_REQUEST_BLOCK utilisée pour les demandes de gestion de l’alimentation.
Notes
Les modèles de pilote de port SCSI et de pilote miniport SCSI peuvent être modifiés ou indisponibles à l’avenir. Au lieu de cela, nous vous recommandons d’utiliser les modèles de pilote Storport et de pilote miniport Storport .
Syntaxe
typedef struct _SCSI_POWER_REQUEST_BLOCK {
USHORT Length;
UCHAR Function;
UCHAR SrbStatus;
UCHAR SrbPowerFlags;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
STOR_DEVICE_POWER_STATE DevicePowerState;
ULONG SrbFlags;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
PVOID SenseInfoBuffer;
struct _SCSI_REQUEST_BLOCK *NextSrb;
PVOID OriginalRequest;
PVOID SrbExtension;
STOR_POWER_ACTION PowerAction;
ULONG Reserved;
UCHAR Reserved5[16];
} SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK;
Membres
Length
Taille, en octets, de la structure SCSI_POWER_REQUEST_BLOCK .
Function
Opération à exécuter. Pour la structure SCSI_POWER_REQUEST_BLOCK , ce membre est toujours défini sur SRB_FUNCTION_POWER.
SrbStatus
État de la demande terminée. Ce membre doit être défini par le pilote miniport avant qu’il informe le pilote Storport que la demande est terminée. Un pilote miniport informe le pilote Storport que la demande est terminée en appelant la fonction StorPortNotification avec le type de notification RequestComplete .
Consultez SCSI_REQUEST_BLOCK dans la documentation WDK pour obtenir la liste des valeurs possibles pour ce membre.
SrbPowerFlags
Indicateurs de gestion de l’alimentation. Actuellement, le seul indicateur autorisé est SRB_POWER_FLAGS_ADAPTER_REQUEST, ce qui indique que la demande de gestion de l’alimentation concerne l’adaptateur. Si cet indicateur est défini, le pilote miniport doit ignorer les valeurs dans PathId, TargetId et Lun.
PathId
Identificateur de bus ou de port SCSI pour la demande. Cette valeur est basée sur zéro.
TargetId
Le contrôleur cible ou l’identificateur d’appareil sur le bus.
Lun
Numéro d’unité logique (LUN) de l’appareil.
DevicePowerState
Valeur d’énumérateur de type STOR_DEVICE_POWER_STATE qui spécifie l’état d’alimentation demandé de l’appareil.
SrbFlags
Le pilote Miniport doit ignorer ce membre.
DataTransferLength
Le pilote Miniport doit ignorer ce membre.
TimeOutValue
Intervalle, en secondes, pendant lequel la demande peut s’exécuter avant que le pilote Storport détermine que la requête a expiré.
DataBuffer
Le pilote Miniport doit ignorer ce membre.
SenseInfoBuffer
Le pilote Miniport doit ignorer ce membre.
NextSrb
Le pilote Miniport doit ignorer ce membre.
OriginalRequest
Le pilote Miniport doit ignorer ce membre.
SrbExtension
Pointeur vers l’extension SRB. Un pilote miniport ne doit pas utiliser ce membre s’il a défini SrbExtensionSize sur zéro dans la structure HW_INITIALIZATION_DATA . Le pilote Storport n’initialise pas la mémoire vers laquelle pointe ce membre. L’adaptateur HBA peut accéder directement aux données que le pilote miniport écrit dans l’extension SRB. Un pilote miniport peut obtenir l’adresse physique de l’extension SRB en appelant la routine StorPortGetPhysicalAddress .
PowerAction
Valeur d’énumérateur de type STOR_POWER_ACTION qui spécifie le type d’arrêt du système sur le point de se produire. Cette valeur est significative uniquement si l’appareil passe à l’état d’alimentation D1, D2 ou D3, comme indiqué par le membre DevicePowerState .
Reserved
Réservé pour le système.
Reserved5[16]
Réservé pour le système.
Remarques
Le pilote Storport appelle HwStorBuildIo pour passer des SRM au pilote miniport. HwStorBuildIo doit vérifier le membre Function du SRB pour déterminer le type du SRB. Si le membre Function est défini sur SRB_FUNCTION_POWER, le SRB est une structure de type SCSI_POWER_REQUEST_BLOCK.
Le pilote Storport envoie SCSI_POWER_REQUEST_BLOCK demandes à un pilote miniport pour informer le pilote miniport des événements d’alimentation Windows qui affectent les périphériques de stockage connectés à l’adaptateur. Dans le cas d’un événement de mise sous tension, cette demande permet au pilote miniport de s’initialiser. Dans le cas d’un événement de mise en veille prolongée ou d’arrêt, cette demande permet au pilote miniport de terminer les demandes d’E/S et de se préparer à une mise hors tension. Le pilote miniport peut utiliser la valeur dans le membre PowerAction du SCSI_POWER_REQUEST_BLOCK pour déterminer les actions requises. Une fois que le pilote miniport a terminé la demande de SCSI_POWER_REQUEST_BLOCK , le pilote Storport appelle HwScsiAdapterControl avec une demande de contrôle ScsiStopAdapter pour mettre hors tension l’adaptateur. Le pilote miniport se réinitialise lors du traitement de la requête SRB_FUNCTION_POWER, ou il peut attendre et réinitialiser quand le pilote Storport appelle HwStorAdapterControl pour effectuer une demande de contrôle ScsiRestartAdapter .
Lors de la transition de l’état d’alimentation D0 vers un état de faible puissance (D1, D2 ou D3), le pilote Storport envoie une demande de SCSI_POWER_REQUEST_BLOCK au pilote miniport avant que le pilote de bus sous-jacent n’éteigne l’adaptateur.
Les conditions suivantes doivent exister avant que le pilote Storport envoie une demande de SCSI_POWER_REQUEST_BLOCK au pilote miniport :
- L’adaptateur n’est pas arrêté.
- La file d’attente d’E/S de l’adaptateur est suspendue.
- Le matériel de l’adaptateur est mis sous tension.
- Le miniport peut accéder aux ressources matérielles de l’adaptateur.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | storport.h (inclure Storport.h, Minitape.h, Srb.h) |