+/**\r
+ Submit ATAPI request sense command.\r
+\r
+ @param[in] This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.\r
+ @param[in] Target The Target is an array of size TARGET_MAX_BYTES and it represents\r
+ the id of the SCSI device to send the SCSI Request Packet. Each\r
+ transport driver may choose to utilize a subset of this size to suit the needs\r
+ of transport target representation. For example, a Fibre Channel driver\r
+ may use only 8 bytes (WWN) to represent an FC target.\r
+ @param[in] Lun The LUN of the SCSI device to send the SCSI Request Packet.\r
+ @param[in] SenseData A pointer to store sense data.\r
+ @param[in] SenseDataLength The sense data length.\r
+ @param[in] Timeout The timeout value to execute this cmd, uses 100ns as a unit.\r
+\r
+ @retval EFI_SUCCESS Send out the ATAPI packet command successfully.\r
+ @retval EFI_DEVICE_ERROR The device failed to send data.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AtaPacketRequestSense (\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun,\r
+ IN VOID *SenseData,\r
+ IN UINT8 SenseDataLength,\r
+ IN UINT64 Timeout\r
+ )\r
+{\r
+ EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET Packet;\r
+ UINT8 Cdb[12];\r
+ EFI_STATUS Status;\r
+\r
+ ZeroMem (&Packet, sizeof (EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET));\r
+ ZeroMem (Cdb, 12);\r
+\r
+ Cdb[0] = ATA_CMD_REQUEST_SENSE;\r
+ Cdb[4] = SenseDataLength;\r
+\r
+ Packet.Timeout = Timeout;\r
+ Packet.Cdb = Cdb;\r
+ Packet.CdbLength = 12;\r
+ Packet.DataDirection = EFI_EXT_SCSI_DATA_DIRECTION_READ;\r
+ Packet.InDataBuffer = SenseData;\r
+ Packet.InTransferLength = SenseDataLength;\r
+\r
+ Status = ExtScsiPassThruPassThru (This, Target, Lun, &Packet, NULL);\r
+\r
+ return Status;\r
+}\r
+\r