Lines Matching +full:page +full:- +full:offset
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.
59 * translate the SCSI mode sense (6 and 10-byte) commands.
82 * @brief This method indicates if the supplied page control is supported
84 * (i.e. non-volatile) are not supported.
88 * @return This method returns an indication of whether the page control
90 * @retval SATI_SUCCESS This value is returned if the page control is
93 * page control is not supported.
127 * @brief This method indicates if the page code field in the SCSI CDB
133 * CDB being translated (e.g. 6-byte, 10-byte, 12-byte, etc.)
135 * @return This method returns an indication as to whether the page code
137 * @retval SATI_SUCCESS This value is returned if the page code is
140 * page code is not supported.
155 sequence->type = SATI_SEQUENCE_MODE_SENSE_6_CACHING; in sati_mode_sense_is_page_code_supported()
157 sequence->type = SATI_SEQUENCE_MODE_SENSE_10_CACHING; in sati_mode_sense_is_page_code_supported()
162 sequence->type = SATI_SEQUENCE_MODE_SENSE_6_ALL_PAGES; in sati_mode_sense_is_page_code_supported()
164 sequence->type = SATI_SEQUENCE_MODE_SENSE_10_ALL_PAGES; in sati_mode_sense_is_page_code_supported()
169 sequence->type = SATI_SEQUENCE_MODE_SENSE_6_READ_WRITE_ERROR; in sati_mode_sense_is_page_code_supported()
171 sequence->type = SATI_SEQUENCE_MODE_SENSE_10_READ_WRITE_ERROR; in sati_mode_sense_is_page_code_supported()
176 sequence->type = SATI_SEQUENCE_MODE_SENSE_6_DISCONNECT_RECONNECT; in sati_mode_sense_is_page_code_supported()
178 sequence->type = SATI_SEQUENCE_MODE_SENSE_10_DISCONNECT_RECONNECT; in sati_mode_sense_is_page_code_supported()
183 sequence->type = SATI_SEQUENCE_MODE_SENSE_6_CONTROL; in sati_mode_sense_is_page_code_supported()
185 sequence->type = SATI_SEQUENCE_MODE_SENSE_10_CONTROL; in sati_mode_sense_is_page_code_supported()
190 sequence->type = SATI_SEQUENCE_MODE_SENSE_6_POWER_CONDITION; in sati_mode_sense_is_page_code_supported()
192 sequence->type = SATI_SEQUENCE_MODE_SENSE_10_POWER_CONDITION; in sati_mode_sense_is_page_code_supported()
196 // The informational exceptions control page is only useful in sati_mode_sense_is_page_code_supported()
198 if ((sequence->device->capabilities | SATI_DEVICE_CAP_SMART_SUPPORT) in sati_mode_sense_is_page_code_supported()
230 sequence->type = SATI_SEQUENCE_MODE_SENSE_6_INFORMATIONAL_EXCP_CONTROL; in sati_mode_sense_is_page_code_supported()
232 sequence->type = SATI_SEQUENCE_MODE_SENSE_10_INFORMATIONAL_EXCP_CONTROL; in sati_mode_sense_is_page_code_supported()
260 * for which to calculate the mode page header.
264 * @return This method returns the size, in bytes, for the mode page header.
274 // The Mode page header length is different for 6-byte vs. 10-byte CDBs. in sati_mode_sense_calculate_page_header()
283 // The LLBAA bit is not defined for 6-byte mode sense requests. in sati_mode_sense_calculate_page_header()
319 * Validate that the supplied page control (PC) field is supported. in sati_mode_sense_translate_command()
326 * Validate that the supplied page code is supported. in sati_mode_sense_translate_command()
345 * @param[in] offset This parameter specifies the offset into the data
354 U32 offset in sati_mode_sense_build_std_block_descriptor() argument
367 // Fill in the 4-byte logical block address field. in sati_mode_sense_build_std_block_descriptor()
368 sati_set_data_byte(sequence, scsi_io, offset, (U8)((lba_low>>24) & 0xFF)); in sati_mode_sense_build_std_block_descriptor()
369 sati_set_data_byte(sequence, scsi_io, offset+1, (U8)((lba_low>>16) & 0xFF)); in sati_mode_sense_build_std_block_descriptor()
370 sati_set_data_byte(sequence, scsi_io, offset+2, (U8)((lba_low>>8) & 0xFF)); in sati_mode_sense_build_std_block_descriptor()
371 sati_set_data_byte(sequence, scsi_io, offset+3, (U8)(lba_low & 0xFF)); in sati_mode_sense_build_std_block_descriptor()
374 sati_set_data_byte(sequence, scsi_io, offset+4, 0); in sati_mode_sense_build_std_block_descriptor()
377 sati_set_data_byte(sequence,scsi_io, offset+5, (U8)((sector_size>>16) & 0xFF)); in sati_mode_sense_build_std_block_descriptor()
378 sati_set_data_byte(sequence,scsi_io, offset+6, (U8)((sector_size>>8) & 0xFF)); in sati_mode_sense_build_std_block_descriptor()
379 sati_set_data_byte(sequence,scsi_io, offset+7, (U8)(sector_size & 0xFF)); in sati_mode_sense_build_std_block_descriptor()
392 * @param[in] page_start This parameter specifies the starting offset at
393 * which to copy the mode page data.
394 * @param[in] page_control This parameter specifies the page control
396 * @param[in] page_code This specifies the mode sense page to copy.
398 * @return This method returns the size of the mode page data being copied.
415 // Copy the changeable mode page information. in sati_mode_sense_copy_initial_data()
440 * @brief This method performs the read/write error recovery mode page
448 * @param[in] offset This parameter specifies the offset into the data
451 * @return This method returns the size of the mode page data that was
458 U32 offset in sati_mode_sense_read_write_error_translate_data() argument
468 offset, in sati_mode_sense_read_write_error_translate_data()
473 // Currently we do not override any bits in this mode page from the in sati_mode_sense_read_write_error_translate_data()
480 * @brief This method performs the disconnect/reconnect mode page
488 * @param[in] offset This parameter specifies the offset into the data
491 * @return This method returns the size of the mode page data that was
498 U32 offset in sati_mode_sense_disconnect_reconnect_translate_data() argument
508 offset, in sati_mode_sense_disconnect_reconnect_translate_data()
513 // Currently we do not override any bits in this mode page from the in sati_mode_sense_disconnect_reconnect_translate_data()
520 * @brief This method performs the caching mode page specific data
528 * @param[in] offset This parameter specifies the offset into the data
531 * @return This method returns the size of the mode page data that was
538 U32 offset in sati_mode_sense_caching_translate_data() argument
548 offset, in sati_mode_sense_caching_translate_data()
559 // Update the Write Cache Enabled (WCE) bit in the mode page data in sati_mode_sense_caching_translate_data()
561 if ((identify->command_set_enabled0 & ATA_IDENTIFY_DEVICE_WCE_ENABLE) != 0) in sati_mode_sense_caching_translate_data()
563 sati_get_data_byte(sequence, scsi_io, offset+2, &value); in sati_mode_sense_caching_translate_data()
565 sati_set_data_byte(sequence, scsi_io, offset+2, value); in sati_mode_sense_caching_translate_data()
567 sequence->number_data_bytes_set--; in sati_mode_sense_caching_translate_data()
570 // Update the Disable Read Ahead (DRA) bit in the mode page data in sati_mode_sense_caching_translate_data()
572 if ((identify->command_set_enabled0 & ATA_IDENTIFY_DEVICE_RA_ENABLE) == 0) in sati_mode_sense_caching_translate_data()
575 // - SCSI = Disable Read Ahead in sati_mode_sense_caching_translate_data()
576 // - ATA = Read Ahead in sati_mode_sense_caching_translate_data()
577 sati_get_data_byte(sequence, scsi_io, offset+12, &value); in sati_mode_sense_caching_translate_data()
579 sati_set_data_byte(sequence, scsi_io, offset+12, value); in sati_mode_sense_caching_translate_data()
584 sequence->number_data_bytes_set--; in sati_mode_sense_caching_translate_data()
592 * @brief This method performs the control mode page specific data
600 * @param[in] offset This parameter specifies the offset into the data
603 * @return This method returns the size of the mode page data that was
610 U32 offset in sati_mode_sense_control_translate_data() argument
621 offset, in sati_mode_sense_control_translate_data()
626 if (sequence->device->descriptor_sense_enable) in sati_mode_sense_control_translate_data()
628 sati_get_data_byte(sequence, scsi_io, offset+2, in sati_mode_sense_control_translate_data()
631 sati_set_data_byte(sequence, scsi_io, offset+2, in sati_mode_sense_control_translate_data()
640 * page specific data translation based upon the contents of the
647 * @param[in] offset This parameter specifies the offset into the data
650 * @return This method returns the size of the mode page data that was
657 U32 offset in sati_mode_sense_informational_excp_control_translate_data() argument
667 offset, in sati_mode_sense_informational_excp_control_translate_data()
678 sati_get_data_byte(sequence, scsi_io, offset+2, &value); in sati_mode_sense_informational_excp_control_translate_data()
681 if ( (identify->command_set_supported0 in sati_mode_sense_informational_excp_control_translate_data()
683 && (identify->command_set_enabled0 in sati_mode_sense_informational_excp_control_translate_data()
696 sati_set_data_byte(sequence, scsi_io, offset+2, value); in sati_mode_sense_informational_excp_control_translate_data()
701 sequence->number_data_bytes_set--; in sati_mode_sense_informational_excp_control_translate_data()
708 * @brief This method performs the Power Condition mode page
716 * @param[in] offset This parameter specifies the offset into the data
719 * @return This method returns the size of the mode page data that was
726 U32 offset in sati_mode_sense_power_condition_translate_data() argument
740 (identify->capabilities1 & STANDBY_TIMER_SUPPORTED)) in sati_mode_sense_power_condition_translate_data()
744 ata_sb_timer = sequence->device->ata_standby_timer; in sati_mode_sense_power_condition_translate_data()
753 standby_timer = ((ata_sb_timer - 240) * 18000); in sati_mode_sense_power_condition_translate_data()
773 sati_set_data_byte(sequence, scsi_io, offset, SCSI_MODE_PAGE_POWER_CONDITION); in sati_mode_sense_power_condition_translate_data()
774 sati_set_data_byte(sequence, scsi_io, offset + 1, (SCSI_MODE_PAGE_1A_LENGTH - 2)); in sati_mode_sense_power_condition_translate_data()
775 sati_set_data_byte(sequence, scsi_io, offset + 2, 0x00); in sati_mode_sense_power_condition_translate_data()
776 sati_set_data_byte(sequence, scsi_io, offset + 3, standby_enabled); in sati_mode_sense_power_condition_translate_data()
777 sati_set_data_byte(sequence, scsi_io, offset + 4, 0x00); in sati_mode_sense_power_condition_translate_data()
778 sati_set_data_byte(sequence, scsi_io, offset + 5, 0x00); in sati_mode_sense_power_condition_translate_data()
779 sati_set_data_byte(sequence, scsi_io, offset + 6, 0x00); in sati_mode_sense_power_condition_translate_data()
780 sati_set_data_byte(sequence, scsi_io, offset + 7, 0x00); in sati_mode_sense_power_condition_translate_data()
781 sati_set_data_byte(sequence, scsi_io, offset + 8, (U8) (standby_timer >> 24)); in sati_mode_sense_power_condition_translate_data()
782 sati_set_data_byte(sequence, scsi_io, offset + 9, (U8) (standby_timer >> 16)); in sati_mode_sense_power_condition_translate_data()
783 sati_set_data_byte(sequence, scsi_io, offset + 10, (U8) (standby_timer >> 8)); in sati_mode_sense_power_condition_translate_data()
784 sati_set_data_byte(sequence, scsi_io, offset + 11, (U8) standby_timer); in sati_mode_sense_power_condition_translate_data()
790 * @brief This method performs the all pages mode page specific data
793 * for all of mode pages and sub-pages in a single page.
800 * @param[in] offset This parameter specifies the offset into the data
803 * @return This method returns the size of the mode page data that was
810 U32 offset in sati_mode_sense_all_pages_translate_data() argument
813 offset += sati_mode_sense_read_write_error_translate_data( in sati_mode_sense_all_pages_translate_data()
814 sequence, scsi_io, identify, offset in sati_mode_sense_all_pages_translate_data()
817 offset += sati_mode_sense_disconnect_reconnect_translate_data( in sati_mode_sense_all_pages_translate_data()
818 sequence, scsi_io, identify, offset in sati_mode_sense_all_pages_translate_data()
821 offset += sati_mode_sense_caching_translate_data( in sati_mode_sense_all_pages_translate_data()
822 sequence, scsi_io, identify, offset in sati_mode_sense_all_pages_translate_data()
825 offset += sati_mode_sense_control_translate_data( in sati_mode_sense_all_pages_translate_data()
826 sequence, scsi_io, identify, offset in sati_mode_sense_all_pages_translate_data()
829 offset += sati_mode_sense_informational_excp_control_translate_data( in sati_mode_sense_all_pages_translate_data()
830 sequence, scsi_io, identify, offset in sati_mode_sense_all_pages_translate_data()
833 return offset; in sati_mode_sense_all_pages_translate_data()