Partager via


IDE_REQUEST_BLOCK structure (irb.h)

La structure IDE_REQUEST_BLOCK définit un bloc de requête IDE.

Note Les modèles de pilote de port ATA et de pilote miniport ATA 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 _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;

Membres

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 la demande pour une recherche plus rapide.
IRB_FUNCTION_ATAPI_COMMAND IRB_FUNCTION_REQUEST_SENSE Indique que l’IRB contient une 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 la CISR est destinée au miniport. Il incombe au miniport d’interpréter la commande de manière appropriée.

IrbStatus

Le miniport doit définir ce membre sur indique le status 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 sous-exécution ou de dépassement de 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’appareil ATA status et le registre d’erreurs à 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 requête effectuée avec ce status. Une requête terminée avec des status occupés n’est retentée qu’une seule fois. Il incombe au pilote miniport de suspendre la file d’attente des requêtes à l’aide d’AtaPortDeviceBusy si l’appareil ne peut pas gérer la demande pendant une certaine période.
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 le status retourné par l’appareil dans son status registre. Le pilote miniport doit mettre à jour ce champ lors de l’exécution 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 l’exécution 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ée 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 des informations sur le fichier de tâches. Pour ATA_PASS_THROUGH commandes, telles qu’identifiées dans le membre IrbFlags , la taille taskFile 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 un usage futur.

IrbFlags

Qualifie la demande avec certaines actions qui doivent être effectuées. Le tableau ci-dessous les décrit en détail.

Indicateur Description
IRB_FLAGS_DRDY_REQUIRED Indique que le pilote miniport doit attendre que l’appareil définisse le bit DRDY dans le registre de status 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 à l’ensemble 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 ATA PIO Multiple.
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 vers le système hôte (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 dans les meilleurs efforts. (remarque : ce n’est pas actuellement employé par ATAport).
IRB_FLAGS_HIGH_PRIORITY Indique que cette CISR doit être traitée dès que possible, avant les IRB non prioritaires actuellement dans le miniport ATA.

TimeOutValue

Indique le délai en secondes après lequel 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 sense.

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 IRB ensemble.

Reserved

Réservé pour un usage futur.

IdeTaskFile

Contient une structure de type IDE_TASK_FILE qui contient le fichier de tâches IDE pour le contrôleur indiqué. Ce membre est défini chaque fois que le résultat d’un AND au niveau du bit entre le membre Function et IRB_FUNCTION_ATA_COMMAND est 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’un AND au niveau du bit entre le membre Function et IRB_FUNCTION_ATAPI_COMMAND est différent de 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 Function est égal à IRB_FUNCTION_POWER_CHANGE.

AsUChar[16]

Fournit un moyen d’accéder aux membres IdeTaskFile, PowerChange et Cdb en tant que données de caractères non signés.

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.

Configuration requise

Condition requise Valeur
En-tête irb.h (include Irb.h)

Voir aussi

AtaportDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK