Partager via


structure IDE_REQUEST_BLOCK (irb.h)

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

Note Le pilote de port ATA et les modèles de pilotes miniport ATA peuvent être modifiés ou indisponibles à l’avenir. Au lieu de cela, nous vous recommandons d’utiliser le du pilote Storport et modèles de pilotes Storport miniport.
 

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)

Voir aussi

AtaPortDeviceBusy

IDE_TASK_FILE

POWER_CHANGE_INFO

SCSI_REQUEST_BLOCK