Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La structure IDE_REQUEST_BLOCK définit un bloc de requête IDE.
Syntaxe
typedef struct _IDE_REQUEST_BLOCK {
USHORT Function;
UCHAR IrbStatus;
UCHAR AtaStatus;
UCHAR AtaError;
UCHAR Channel;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoBufferLength;
UCHAR SenseInfoBufferType;
UCHAR QueueTag;
ULONG ReservedAsUlong;
ULONG IrbFlags;
ULONG TimeOutValue;
ULONG DataTransferLength;
PVOID IrbExtension;
PVOID DataBuffer;
PVOID SenseInfoBuffer;
PVOID NextIrb;
PVOID Reserved;
union {
IDE_TASK_FILE IdeTaskFile;
UCHAR Cdb[16];
IDE_POWER_INFO PowerChange;
UCHAR AsUChar[16];
};
} IDE_REQUEST_BLOCK, *PIDE_REQUEST_BLOCK;
Members
Function
Spécifie la catégorie à laquelle appartient la requête. Le tableau ci-dessous décrit la classification des demandes d’E/S.
| Fonction | Sous-commandes | Description |
| IRB_FUNCTION_ATA_COMMAND |
IRB_FUNCTION_ATA_IDENTIFY IRB_FUNCTION_ATA_READ IRB_FUNCTION_ATA_WRITE IRB_FUNCTION_ATA_FLUSH IRB_FUNCTION_ATA_SMART |
Indique que l’IRB contient un IdeTaskFile qui décrit la commande ATA. Les sous-commandes indiquent un regroupement plus fin de requête pour une recherche plus rapide. |
| IRB_FUNCTION_ATAPI_COMMAND | IRB_FUNCTION_REQUEST_SENSE | Indique que l’IRB contient une base de données CDB qui décrit la commande ATAPI. |
| IRB_FUNCTION_MINIPORT_COMMAND |
IRB_FUNCTION_ADAPTER_FLUSH IRB_FUNCTION_SHUTDOWN IRB_FUNCTION_POWER_CHANGE IRB_FUNCTION_POWER_REBOOT IRB_FUNCTION_LUN_RESET IRB_FUNCTION_MINIPORT_IOCTL |
Indique que l’IRB est pour le miniport. Il incombe au miniport d’interpréter correctement la commande. |
IrbStatus
Le miniport doit définir ce membre pour indiquer l’état de l’opération spécifiée. Le tableau ci-dessous décrit les différentes valeurs IrbStatus et leur signification.
| Valeur | Signification |
| IRB_STATUS_PENDING | Indique que la demande est en cours. Le pilote de port initialise IrbStatus à cette valeur. Un pilote miniport ne doit jamais définir le membre IrbStatus sur cette valeur. |
| IRB_STATUS_SUCCESS | Indique que la demande a été effectuée avec succès. |
| IRB_STATUS_DATALENGTH_MISMATCH | Indique qu’une erreur de dépassement ou de sous-exécution des données s’est produite. Le miniport doit mettre à jour le champ DataTransferLength dans l’IRB pour indiquer la quantité réelle de données transférées en cas de sous-exécution. |
| IRB_STATUS_DEVICE_ERROR | Indique que l’appareil a retourné une erreur. Le pilote miniport doit mettre à jour les champs AtaStatus et AtaError dans l’Irb vers le contenu de l’état ATA de l’appareil et s’inscrire à l’achèvement de la commande. |
| IRB_STATUS_INVALID_REQUEST | Indique que le miniport ne prend pas en charge la demande donnée. |
| IRB_STATUS_BUS_RESET | Indique qu’une réinitialisation de bus s’est produite lors du traitement de la demande donnée. |
| IRB_STATUS_SELECTION_TIMEOUT | Indique que l’appareil de destination n’a pas pu être sélectionné. |
| IRB_STATUS_BUSY | Indique que l’appareil est occupé. Le pilote de port retente toute demande terminée avec cet état. Une demande terminée avec l’état occupé n’est retentée qu’une seule fois. Il incombe au pilote miniport de suspendre la file d’attente de requêtes à l’aide d’AtaPortDeviceBusy si l’appareil ne peut pas gérer la demande pendant une certaine période de temps. |
| IRB_STATUS_AUTOSENSE_VALID | IRB_STATUS_AUTOSENSE_VALID est un masque de bits qui indique des données de sens valides dans le membre SenseInfoBuffer de l’IRB. |
| IRB_STATUS_RETURN_TASKFILE_VALID | IRB_STATUS_RETURN_TASKFILE_VALID est un masque de bits qui indique un fichier de tâche de retour valide dans le membre SenseInfoBuffer de l’IRB. |
AtaStatus
Indique l’état retourné par l’appareil dans son registre d’état. Le pilote miniport doit mettre à jour ce champ lors de la fin d’une IRB avec IRB_STATUS_DEVICE_ERROR.
AtaError
Indique la valeur d’erreur retournée par l’appareil dans son registre d’erreurs. Le pilote miniport doit mettre à jour ce champ lors de la fin d’une IRB avec IRB_STATUS_DEVICE_ERROR.
Channel
Spécifie le numéro de canal.
TargetId
Spécifie l’ID cible de l’appareil.
Lun
Spécifie le numéro d’unité logique de l’appareil.
CdbLength
Spécifie la longueur en octets de la mémoire tampon pointée par Cdb.
SenseInfoBufferLength
Spécifie la longueur en octets de la mémoire tampon pointée par SenseInfoBuffer.
SenseInfoBufferType
Spécifie le type de structure de données retourné dans SenseInfoBuffer. Étant donné que les commandes ATA n’ont pas besoin de la commande request sense, ATA_PASS_THROUGH commandes utilisent SenseInfoBuffer pour renvoyer les informations du fichier de tâche. Pour les commandes ATA_PASS_THROUGH, comme indiqué dans le membre IrbFlags , la taille de tâche de retour appropriée doit être signalée comme SENSE_INFO_BUFFER_RETURN_TYPE_28BIT_TASKFILE ou
SENSE_INFO_BUFFER_RETURN_TYPE_48BIT_TASKFILE.
QueueTag
Balise de file d’attente pour cette IRB. Le pilote de port définit ce champ sur 0.
ReservedAsUlong
Réservé pour une utilisation ultérieure.
IrbFlags
Qualifie la demande avec certaines actions qui doivent être effectuées. Le tableau ci-dessous les décrit en détail.
| Marquer | Description |
| IRB_FLAGS_DRDY_REQUIRED | Indique que le pilote miniport doit attendre que l’appareil définisse le bit DRDY dans le registre d’état ATA avant d’émettre cette commande. |
| IRB_FLAGS_USE_DMA | Indique que la requête a une liste de points/regroupements associée et que le pilote miniport peut utiliser DMA pour transférer des données pour cette requête. |
| IRB_FLAGS_MAP_BUFFERS | Indique que le champ DataBuffer dans l’IRB est mappé. Le miniport peut accéder en toute sécurité à DataBuffer lorsque cet indicateur est défini. Le pilote miniport ne doit pas accéder à DataBuffer si l’indicateur n’est pas défini. Le pilote miniport peut demander au pilote de port de mapper la mémoire tampon de données en définissant cet indicateur dans l’IRB dans sa routine IdeHwBuildIo . |
| IRB_FLAGS_48BIT | Indique que la commande ATA dans l’IRB appartient au jeu de fonctionnalités LBA 48 bits. Le champ Précédent de la structure _IDE_TASK_FILE est valide lorsque cet indicateur est défini. |
| IRB_FLAGS_PIO_MULTIPLE | Indique que la commande ATA doit être transférée à l’aide de la méthode MULTIPLE ATA PIO. |
| IRB_FLAGS_RETURN_RESULTS | Indique que le fichier de tâche de retour ATA doit être copié dans SenseInfoBuffer. |
| IRB_FLAGS_DATA_IN | Indique que les données doivent être transférées de l’appareil au système hôte (une opération de lecture). |
| IRB_FLAGS_DATA_OUT | Indique que les données doivent être transférées vers l’appareil à partir du système hôte (une opération d’écriture). |
| IRB_FLAGS_DISCARDABLE | Indique que la commande doit être effectuée de manière optimale. (remarque : ce n’est pas actuellement employé par ATAport). |
| IRB_FLAGS_HIGH_PRIORITY | Indique que cette IRB doit être traitée dès que possible, avant que les IRB non prioritaires soient actuellement dans le miniport ATA. |
TimeOutValue
Indique l’heure en secondes après laquelle la requête expire.
DataTransferLength
Contient la longueur en octets de la mémoire tampon de données qui contient les données à transférer.
IrbExtension
Pointeur vers l’extension par requête allouée par le pilote de port.
DataBuffer
Pointeur vers la mémoire tampon où résident les données.
SenseInfoBuffer
Pointeur vers la mémoire tampon qui contient les données de sens.
NextIrb
Pointeur vers l’IRB suivante à traiter. Le pilote de port définit cette valeur sur NULL. Le pilote miniport peut utiliser ce champ pour lier des irBs ensemble.
Reserved
Réservé pour une utilisation ultérieure.
IdeTaskFile
Contient une structure de type IDE_TASK_FILE qui contient le fichier de tâche IDE pour le contrôleur indiqué. Ce membre est défini chaque fois que le résultat d’une opération AND au niveau du bit entre le membre de la fonction et IRB_FUNCTION_ATA_COMMAND n’est pas différent de zéro.
Cdb[16]
Contient un bloc de descripteur de commande (CDB). Ce membre est défini chaque fois que le résultat d’une opération AND au niveau du bit entre le membre de la fonction et IRB_FUNCTION_ATAPI_COMMAND n’est pas zéro.
PowerChange
Indique une valeur d’énumération de type POWER_CHANGE_INFO qui définit une transition d’état d’alimentation. Ce membre est défini chaque fois que la fonction est égale à IRB_FUNCTION_POWER_CHANGE.
AsUChar[16]
Fournit un moyen d’accéder aux membres IdeTaskFile, PowerChange et Cdb en tant que données caractères non signées.
Remarques
La structure IDE_REQUEST_BLOCK fournit une fonctionnalité similaire à la SCSI_REQUEST_BLOCK , mais avec des caractéristiques plus adaptées à la gestion des appareils sur un bus IDE.
Spécifications
| Requirement | Valeur |
|---|---|
| Header | irb.h (include Irb.h) |