Lines Matching +full:send +full:- +full:flush +full:- +full:out +full:- +full:sequence

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
9 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
22 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
28 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
51 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
73 * length for an ATA non-data command.
76 * values in a non-data ATA command constuct.
78 * @param[out] ata_io This parameter specifies the ATA IO request structure
80 * @param[in] sequence This parameter specifies the translator sequence
87 SATI_TRANSLATOR_SEQUENCE_T * sequence
90 sequence->data_direction = SATI_DATA_DIRECTION_NONE;
91 sequence->protocol = SAT_PROTOCOL_NON_DATA;
92 sequence->ata_transfer_length = 0;
101 * @param[out] ata_io This parameter specifies the ATA IO request structure
103 * @param[in] sequence This parameter specifies the translator sequence
110 SATI_TRANSLATOR_SEQUENCE_T * sequence
116 sequence->data_direction = SATI_DATA_DIRECTION_IN;
117 sequence->protocol = SAT_PROTOCOL_PIO_DATA_IN;
118 sequence->ata_transfer_length = sizeof(ATA_IDENTIFY_DEVICE_DATA_T);
124 * @param[out] ata_io This parameter specifies the ATA IO request structure
126 * @param[in] sequence This parameter specifies the translator sequence
133 SATI_TRANSLATOR_SEQUENCE_T * sequence
140 sequence->data_direction = SATI_DATA_DIRECTION_IN;
141 sequence->protocol = SAT_PROTOCOL_DEVICE_DIAGNOSTIC;
142 sequence->ata_transfer_length = 16;
151 * @param[in] sequence This parameter specifies the translation sequence
153 * @param[out] destination_scsi_io This parameter specifies the SCSI IO
163 * in the 0x20 - 0x7E ASCII range.
169 SATI_TRANSLATOR_SEQUENCE_T * sequence,
177 // default to " " (i.e. 0x20) for all non-ascii printable characters.
185 sequence, destination_scsi_io, destination_offset, source_value
192 * It will perform the byte swap from the 16-bit identify field
195 * @param[in] sequence This parameter specifies the translation sequence
197 * @param[out] destination_scsi_io This parameter specifies the SCSI IO
210 * in the 0x20 - 0x7E ASCII range.
215 SATI_TRANSLATOR_SEQUENCE_T * sequence,
228 sequence,
236 sequence,
245 length -= 2;
253 * @param[in] sequence This parameter specifies the translation sequence
255 * @param[out] destination_scsi_io This parameter specifies the SCSI IO
267 SATI_TRANSLATOR_SEQUENCE_T * sequence,
277 sequence, destination_scsi_io, destination_offset, *source_buffer
282 length--;
287 * @brief This method extracts the Logical Block Address high and low 32-bit
288 * values and the sector count 32-bit value from the ATA identify
293 * @param[out] lba_high This parameter specifies the upper 32 bits for the
295 * 16-bits should always be 0, since 48-bits of LBA is the most
297 * @param[out] lba_low This parameter specifies the lower 32 bits for the
299 * @param[out] sector_size This parameter specifies the 32-bits of sector
314 // 48-bit addressing. Bit 10 of Word 86 of ATA Identify
315 if (identify->command_set_enabled1
318 // This drive supports 48-bit addressing
320 *lba_high = identify->max_48bit_lba[7] << 24;
321 *lba_high |= identify->max_48bit_lba[6] << 16;
322 *lba_high |= identify->max_48bit_lba[5] << 8;
323 *lba_high |= identify->max_48bit_lba[4];
325 *lba_low = identify->max_48bit_lba[3] << 24;
326 *lba_low |= identify->max_48bit_lba[2] << 16;
327 *lba_low |= identify->max_48bit_lba[1] << 8;
328 *lba_low |= identify->max_48bit_lba[0];
332 // This device doesn't support 48-bit addressing
333 // Pull out the largest LBA from words 60 and 61.
335 *lba_low = identify->total_num_sectors[3] << 24;
336 *lba_low |= identify->total_num_sectors[2] << 16;
337 *lba_low |= identify->total_num_sectors[1] << 8;
338 *lba_low |= identify->total_num_sectors[0];
343 if (identify->physical_logical_sector_info
346 *sector_size = identify->words_per_logical_sector[3] << 24;
347 *sector_size |= identify->words_per_logical_sector[2] << 16;
348 *sector_size |= identify->words_per_logical_sector[1] << 8;
349 *sector_size |= identify->words_per_logical_sector[0];
364 * @param[out] ata_io This parameter specifies the ATA IO request structure
366 * @param[in] sequence This parameter specifies the translator sequence
373 SATI_TRANSLATOR_SEQUENCE_T * sequence
379 sati_ata_non_data_command(ata_io, sequence);
391 * @param[in] value This parameter specifies the 8-bit value to be written
413 * @param[out] rsp_iu This parameter specifies the user request's
431 rsp_iu->sense_data_length[3] = sense_data_length;
432 rsp_iu->sense_data_length[2] = 0;
433 rsp_iu->sense_data_length[1] = 0;
434 rsp_iu->sense_data_length[0] = 0;
435 rsp_iu->status = scsi_status;
436 rsp_iu->data_present = data_present;
444 * @param[in,out] scsi_io This parameter specifies the user's IO request
448 * @param[out] sense_data This parameter
454 SATI_TRANSLATOR_SEQUENCE_T * sequence,
467 sati_scsi_get_sense_data_length(sequence, scsi_io),
471 *sense_data = (U8*) rsp_iu->data;
486 U8 sati_scsi_get_sense_data_response_code(SATI_TRANSLATOR_SEQUENCE_T * sequence)
488 if (sequence->device->descriptor_sense_enable)
504 U8 sati_scsi_get_descriptor_sense_data_length(SATI_TRANSLATOR_SEQUENCE_T * sequence,
561 U8 sati_scsi_get_sense_data_length(SATI_TRANSLATOR_SEQUENCE_T * sequence, void * scsi_io)
565 response_code = sati_scsi_get_sense_data_response_code(sequence);
575 return sati_scsi_get_descriptor_sense_data_length(sequence, scsi_io);
587 * @param[in] sequence This parameter specifies the translation sequence
589 * @param[in,out] scsi_io This parameter specifies the user's IO request
605 SATI_TRANSLATOR_SEQUENCE_T * sequence,
615 response_code = sati_scsi_get_sense_data_response_code(sequence);
621 sati_scsi_fixed_sense_data_construct(sequence, scsi_io, scsi_status, response_code,
626 sati_scsi_descriptor_sense_data_construct(sequence, scsi_io, scsi_status, response_code,
631 sequence->is_sense_response_set = TRUE;
642 * @param[out] descriptor_len This parameter returns the length of constructed
661 * @brief This method will construct the command-specific descriptor for
669 * @param[out] descriptor_len This parameter returns the length of constructed
672 * to set the command-specific information buffer.
692 // COMMAND-SPECIFIC INFORMATION field shall be set to FFFF_FFFF_FFFF_FFFFh
706 * @param[out] descriptor_len This parameter returns the length of constructed
736 * @param[in,out] scsi_io This parameter specifies the user's IO request
742 * @param[out] descriptor_len This parameter returns the length of constructed
766 sense_len - offset);
771 sense_len - offset,
781 sense_len - offset,
787 sense_len - offset,
818 sense_len - offset,
831 * @param[in] sequence This parameter specifies the translation sequence
833 * @param[in,out] scsi_io This parameter specifies the user's IO request
849 SATI_TRANSLATOR_SEQUENCE_T * sequence,
861 sati_scsi_get_sense_data_buffer(sequence, scsi_io, scsi_status, &sense_data, &sense_len);
879 sati_set_sense_data_byte(sense_data, sense_len, 7, sati_scsi_get_descriptor_sense_data_length(sequence, scsi_io) - 8);
887 * @param[in] sequence This parameter specifies the translation sequence
889 * @param[in,out] scsi_io This parameter specifies the user's IO request
905 SATI_TRANSLATOR_SEQUENCE_T * sequence,
917 sati_scsi_get_sense_data_buffer(sequence, scsi_io, scsi_status, &sense_data, &sense_len);
919 // Write out the sense data format per SPC-4.
935 sati_set_sense_data_byte(sense_data, sense_len, 7, (sense_len < 18 ? sense_len - 1 : 17) - 7);
984 sati_set_sense_data_byte(sense_data, sense_len, 7, (sense_len < 18 ? sense_len - 1 : 17) - 7);
1002 * @param[in] sequence This parameter specifies the translation sequence
1004 * @param[in,out] scsi_io This parameter specifies the user's IO request
1021 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1040 sati_set_sense_data_byte(sense_data, sense_len, 7, sati_scsi_get_descriptor_sense_data_length(sequence, scsi_io) - 8);
1049 * @param[in] sequence This parameter specifies the translation sequence
1051 * @param[in,out] scsi_io This parameter specifies the user's IO request
1070 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1087 sati_scsi_get_sense_data_buffer(sequence, scsi_io, scsi_status, &sense_data, &sense_len);
1096 information_buff[2] = ncq_log->lba_47_40;
1097 information_buff[3] = ncq_log->lba_39_32;
1098 information_buff[4] = ncq_log->lba_31_24;
1099 information_buff[5] = ncq_log->lba_23_16;
1100 information_buff[6] = ncq_log->lba_15_8;
1101 information_buff[7] = ncq_log->lba_7_0;
1104 sequence,
1120 * @param[in] sequence This parameter specifies the translation sequence
1122 * @param[in,out] scsi_io This parameter specifies the user's IO request
1141 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1157 sati_scsi_get_sense_data_buffer(sequence, scsi_io, scsi_status, &sense_data, &sense_len);
1159 if(ncq_log->lba_39_32 > 0)
1171 sati_set_sense_data_byte(sense_data, sense_len, 3, ncq_log->lba_31_24);
1172 sati_set_sense_data_byte(sense_data, sense_len, 4, ncq_log->lba_23_16);
1173 sati_set_sense_data_byte(sense_data, sense_len, 5, ncq_log->lba_15_8);
1174 sati_set_sense_data_byte(sense_data, sense_len, 6, ncq_log->lba_7_0);
1186 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1197 response_code = sati_scsi_get_sense_data_response_code(sequence);
1203 sati_scsi_read_ncq_error_fixed_sense_construct(sequence, scsi_io, ata_input_data, scsi_status,
1208 sati_scsi_read_ncq_error_descriptor_sense_construct(sequence, scsi_io, ata_input_data, scsi_status,
1213 sequence->is_sense_response_set = TRUE;
1221 * @param[in] sequence This parameter specifies the translation sequence
1223 * @param[in,out] scsi_io This parameter specifies the user's IO request
1242 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1258 sati_scsi_get_sense_data_buffer(sequence, scsi_io, scsi_status, &sense_data, &sense_len);
1275 sequence,
1291 * @param[in] sequence This parameter specifies the translation sequence
1293 * @param[in,out] scsi_io This parameter specifies the user's IO request
1312 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1328 sati_scsi_get_sense_data_buffer(sequence, scsi_io, scsi_status, &sense_data, &sense_len);
1358 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1369 response_code = sati_scsi_get_sense_data_response_code(sequence);
1375 sati_scsi_read_error_fixed_sense_construct(sequence, scsi_io, ata_input_data, scsi_status,
1380 sati_scsi_read_error_descriptor_sense_construct(sequence, scsi_io, ata_input_data, scsi_status,
1385 sequence->is_sense_response_set = TRUE;
1392 * @param[in] sequence This parameter specifies the translation sequence
1394 * @param[in,out] scsi_io This parameter specifies the user's IO request
1400 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1408 rsp_iu->data_present = 0x01;
1409 rsp_iu->response_data_length[3] = sizeof(U32);
1410 rsp_iu->status = 0;
1411 ((U8 *)rsp_iu->data)[3] = response_data;
1421 * @param[in,out] scsi_io This parameter specifies the user's IO request
1432 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1438 if (byte_offset < sequence->allocation_length)
1447 * @param[in] sequence This parameter specifies the translation sequence
1449 * @param[in,out] scsi_io This parameter specifies the user's IO request
1455 * written out into the user's payload buffer.
1460 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1466 if (byte_offset < sequence->allocation_length)
1468 sequence->number_data_bytes_set++;
1478 * @param[in] sequence This parameter specifies the translation sequence
1480 * @param[in,out] scsi_io This parameter specifies the user's IO request
1486 * written out into the user's payload buffer.
1491 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1499 sati_set_data_byte(sequence, scsi_io, byte_offset, (U8)value & 0xFF);
1501 sati_set_data_byte(sequence, scsi_io, byte_offset, (U8)(value >> 8) & 0xFF);
1503 sati_set_data_byte(sequence, scsi_io, byte_offset, (U8)(value >> 16) & 0xFF);
1505 sati_set_data_byte(sequence, scsi_io, byte_offset, (U8)(value >> 24) & 0xFF);
1509 * @brief This method will construct the ATA flush cache command.
1514 * @param[out] ata_io This parameter specifies the ATA IO request structure
1515 * for which to build the FLUSH CACHE command.
1516 * @param[in] sequence This parameter specifies the translator sequence
1523 SATI_TRANSLATOR_SEQUENCE_T * sequence
1529 sati_ata_non_data_command(ata_io, sequence);
1538 * @param[out] ata_io This parameter specifies the ATA IO request structure
1540 * @param[in] sequence This parameter specifies the translator sequence
1549 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1558 sequence->device->ata_standby_timer = (U8) count;
1560 sati_ata_non_data_command(ata_io, sequence);
1569 * @param[out] ata_io This parameter specifies the ATA IO request structure
1571 * @param[in] sequence This parameter specifies the translator sequence
1578 SATI_TRANSLATOR_SEQUENCE_T * sequence
1584 sati_ata_non_data_command(ata_io, sequence);
1593 * @param[out] ata_io This parameter specifies the ATA IO request structure
1595 * @param[in] sequence This parameter specifies the translator sequence
1602 SATI_TRANSLATOR_SEQUENCE_T * sequence
1613 sati_ata_non_data_command(ata_io, sequence);
1623 * @param[out] ata_io This parameter specifies the ATA IO request structure
1625 * @param[in] sequence This parameter specifies the translator sequence
1632 SATI_TRANSLATOR_SEQUENCE_T * sequence
1643 sati_ata_non_data_command(ata_io, sequence);
1652 * @param[out] ata_io This parameter specifies the ATA IO request structure
1654 * @param[in] sequence This parameter specifies the translator sequence
1661 SATI_TRANSLATOR_SEQUENCE_T * sequence
1670 sequence->device->ata_standby_timer = 0x00;
1675 sati_ata_non_data_command(ata_io, sequence);
1684 * @param[out] ata_io This parameter specifies the ATA IO request structure
1686 * @param[in] sequence This parameter specifies the translator sequence
1693 SATI_TRANSLATOR_SEQUENCE_T * sequence
1699 sati_ata_non_data_command(ata_io, sequence);
1709 * @param[out] ata_io This parameter specifies the ATA IO request structure
1711 * @param[in] sequence This parameter specifies the translator sequence
1718 SATI_TRANSLATOR_SEQUENCE_T * sequence
1725 //According to SAT-2 (v7) 9.11.3
1728 //According to SAT-2 (v7) 9.11.3, set LBA to a value between zero and the
1730 //From the unit test, it seems we have to set LBA to a non-zero value.
1733 sati_ata_non_data_command(ata_io, sequence);
1746 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1759 sati_ata_non_data_command(ata_io, sequence);
1772 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1786 sequence->data_direction = SATI_DATA_DIRECTION_IN;
1787 sequence->protocol = SAT_PROTOCOL_PIO_DATA_IN;
1788 sequence->ata_transfer_length = transfer_length;
1801 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1810 sati_ata_non_data_command(ata_io, sequence);
1822 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1830 sati_ata_non_data_command(ata_io, sequence);
1850 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1865 sequence->data_direction = SATI_DATA_DIRECTION_IN;
1866 sequence->protocol = SAT_PROTOCOL_PIO_DATA_IN;
1867 sequence->ata_transfer_length = transfer_length;
1876 * @param[in] sequence - SATI sequence data with the device state.
1882 SATI_TRANSLATOR_SEQUENCE_T * sequence,
1886 if(sequence->device->state == SATI_DEVICE_STATE_STOPPED)
1889 sequence,
1905 * @param[out] ata_io This parameter specifies the ATA IO request structure
1907 * @param[in] sequence This parameter specifies the translator sequence
1914 SATI_TRANSLATOR_SEQUENCE_T * sequence
1920 sequence->data_direction = SATI_DATA_DIRECTION_IN;
1921 sequence->protocol = SAT_PROTOCOL_PIO_DATA_IN;
1922 sequence->ata_transfer_length = 512;
1928 * will send PIO out data to the target device's buffer.
1930 * @param[out] ata_io This parameter specifies the ATA IO request structure
1932 * @param[in] sequence This parameter specifies the translator sequence
1939 SATI_TRANSLATOR_SEQUENCE_T * sequence
1946 sequence->data_direction = SATI_DATA_DIRECTION_OUT;
1947 sequence->protocol = SAT_PROTOCOL_PIO_DATA_OUT;
1948 sequence->ata_transfer_length = 512;
1954 * will send PIO out data containing new firmware for the target drive.
1956 * @param[out] ata_io This parameter specifies the ATA IO request structure
1958 * @param[in] sequence This parameter specifies the translator sequence
1960 * @param[in] mode This parameter specifies the download microcode sub-command
1972 SATI_TRANSLATOR_SEQUENCE_T * sequence,
2000 sati_ata_non_data_command(ata_io, sequence);
2004 sequence->data_direction = SATI_DATA_DIRECTION_OUT;
2005 sequence->protocol = SAT_PROTOCOL_PIO_DATA_OUT;
2006 sequence->ata_transfer_length = allocation_length;