scsi_decoder.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  s_scsi_sense
struct  sbc_st_std_inquiry_data

Defines

#define SBC_CMD_TEST_UNIT_READY   (0x00)
#define SBC_CMD_REQUEST_SENSE   (0x03)
#define SBC_CMD_FORMAT_UNIT   (0x04)
#define SBC_CMD_READ_6   (0x08)
#define SBC_CMD_INQUIRY   (0x12)
#define SBC_CMD_MODE_SELECT_6   (0x15)
#define SBC_CMD_READ_FORMAT_CAPACITY   (0x23)
#define SBC_CMD_MODE_SENSE_6   (0x1A)
#define SBC_CMD_START_STOP_UNIT   (0x1B)
#define SBC_CMD_RECEIVE_DIAGNOSTICS   (0x1C)
#define SBC_CMD_SEND_DIAGNOSTIC   (0x1D)
#define SBC_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL   (0x1E)
#define SBC_CMD_READ_LONG   (0x23)
#define SBC_CMD_READ_CAPACITY   (0x25)
#define SBC_CMD_READ_CD_ROM_CAPACITY   (0x25)
#define SBC_CMD_READ_10   (0x28)
#define SBC_CMD_WRITE_10   (0x2A)
#define SBC_CMD_SEEK   (0x2B)
#define SBC_CMD_WRITE_VERIFY_10   (0x2E)
#define SBC_CMD_VERIFY_10   (0x2F)
#define SBC_CMD_SYNCHRONIZE_CACHE   (0x35)
#define SBC_CMD_WRITE_BUFFER   (0x3B)
#define SBC_CMD_CHANGE_DEFINITION   (0x40)
#define SBC_CMD_READ_TOC   (0x43)
#define SBC_CMD_MODE_SELECT_10   (0x55)
#define SBC_CMD_RESERVE_10   (0x56)
#define SBC_CMD_RELEASE_10   (0x57)
#define SBC_CMD_MODE_SENSE_10   (0x5A)
#define SBC_CONTROL_BYTE   (0x00)
#define SBC_CMD_DIR_IN   (0x80)
#define SBC_CMD_DIR_OUT   (0x00)
#define SBC_SENSE_KEY_NO_SENSE   (0x00)
#define SBC_SENSE_KEY_RECOVERED_ERROR   (0x01)
#define SBC_SENSE_KEY_NOT_READY   (0x02)
#define SBC_SENSE_KEY_MEDIUM_ERROR   (0x03)
#define SBC_SENSE_KEY_HARDWARE_ERROR   (0x04)
#define SBC_SENSE_KEY_ILLEGAL_REQUEST   (0x05)
#define SBC_SENSE_KEY_UNIT_ATTENTION   (0x06)
#define SBC_SENSE_KEY_DATA_PROTECT   (0x07)
#define SBC_SENSE_KEY_BLANK_CHECK   (0x08)
#define SBC_SENSE_KEY_VENDOR_SPECIFIC   (0x09)
#define SBC_SENSE_KEY_COPY_ABORTED   (0x0A)
#define SBC_SENSE_KEY_ABORTED_COMMAND   (0x0B)
#define SBC_SENSE_KEY_VOLUME_OVERFLOW   (0x0D)
#define SBC_SENSE_KEY_MISCOMPARE   (0x0E)
#define SBC_ASC_NO_ADDITIONAL_SENSE_INFORMATION   (0x00)
#define SBC_ASC_LOGICAL_UNIT_NOT_READY   (0x04)
#define SBC_ASC_INVALID_FIELD_IN_CDB   (0x24)
#define SBC_ASC_WRITE_PROTECTED   (0x27)
#define SBC_ASC_FORMAT_ERROR   (0x31)
#define SBC_ASC_INVALID_COMMAND_OPERATION_CODE   (0x20)
#define SBC_ASC_NOT_READY_TO_READY_CHANGE   (0x28)
#define SBC_ASC_MEDIUM_NOT_PRESENT   (0x3A)
#define SBC_ASCQ_FORMAT_COMMAND_FAILED   (0x01)
#define SBC_ASCQ_INITIALIZING_COMMAND_REQUIRED   (0x02)
#define SBC_ASCQ_OPERATION_IN_PROGRESS   (0x07)
#define SBC_RESPONSE_CODE_SENSE   (0x70)
#define SBC_ADDITIONAL_SENSE_LENGTH   (0x0A)
#define SBC_COMMAND_SPECIFIC_INFORMATION_3   (0x00)
#define SBC_COMMAND_SPECIFIC_INFORMATION_2   (0x00)
#define SBC_COMMAND_SPECIFIC_INFORMATION_1   (0x00)
#define SBC_COMMAND_SPECIFIC_INFORMATION_0   (0x00)
#define SBC_FIELD_REPLACEABLE_UNIT_CODE   (0x00)
#define SBC_SENSE_KEY_SPECIFIC_2   (0x00)
#define SBC_SENSE_KEY_SPECIFIC_1   (0x00)
#define SBC_SENSE_KEY_SPECIFIC_0   (0x00)
#define SBC_READ_CAPACITY_LENGTH   (0x08)
#define SBC_DEFAULT_MEDIUM_TYPE   (0x00)
#define SBC_FLEXIBLE_DISK_SINGLE_SIDED_UNSPECIFIED   (0x01)
#define SBC_FLEXIBLE_DISK_DOUBLE_SIDED_UNSPECIFIED   (0x02)
#define SBC_MEDIUM_TYPE   SBC_DEFAULT_MEDIUM_TYPE
#define SBC_DEV_SPEC_PARAM_WR_ENABLE   (0x00)
#define SBC_DEV_SPEC_PARAM_WR_PROTECT   (0x80)
#define SBC_BLOCK_DESCRIPTOR_LENGTH   (0x00)
#define SBC_MSK_DBD   (0x08)
#define SBC_MSK_PAGE_CONTROL   (0xC0)
#define SBC_MSK_PAGE_CODE   (0x3F)
#define SBC_PAGE_CODE_READ_WRITE_ERROR_RECOVERY   (0x01)
#define SBC_PAGE_CODE_FORMAT_DEVICE   (0x03)
#define SBC_PAGE_CODE_FLEXIBLE_DISK   (0x05)
#define SBC_PAGE_CODE_CACHING_MODE_PAGE   (0x08)
#define SBC_PAGE_CODE_INFORMATIONAL_EXCEPTIONS   (0x1C)
#define SBC_PAGE_CODE_ALL   (0x3F)
#define SBC_PAGE_LENGTH_INFORMATIONAL_EXCEPTIONS   (0x0A)
#define SBC_PAGE_LENGTH_READ_WRITE_ERROR_RECOVERY   (0x0A)
#define SBC_PAGE_LENGTH_FLEXIBLE_DISK   (0x1E)
#define SBC_PAGE_LENGTH_FORMAT_DEVICE   (0x16)
#define SBC_MODE_DATA_LENGTH_INFORMATIONAL_EXCEPTIONS   (SBC_PAGE_LENGTH_INFORMATIONAL_EXCEPTIONS + 2 + 3)
#define SBC_MODE_DATA_LENGTH_READ_WRITE_ERROR_RECOVERY   (SBC_PAGE_LENGTH_READ_WRITE_ERROR_RECOVERY + 2 + 3 )
#define SBC_MODE_DATA_LENGTH_FLEXIBLE_DISK   (SBC_PAGE_LENGTH_FLEXIBLE_DISK + 2 + 3 )
#define SBC_MODE_DATA_LENGTH_FORMAT_DEVICE   (SBC_PAGE_LENGTH_FORMAT_DEVICE + 2 + 3 )
#define SBC_MODE_DATA_LENGTH_CODE_ALL
#define SBC_MRIE   (0x05)
#define SBC_TRACK_PER_ZONE_MSB   (0x00)
#define SBC_TRACK_PER_ZONE_LSB   (0x00)
#define SBC_ALTERNATE_SECTORS_PER_ZONE_MSB   (0x00)
#define SBC_ALTERNATE_SECTORS_PER_ZONE_LSB   (0x00)
#define SBC_ALTERNATE_TRACK_PER_ZONE_MSB   (0x00)
#define SBC_ALTERNATE_TRACK_PER_ZONE_LSB   (0x00)
#define SBC_ALTERNATE_TRACK_PER_LU_MSB   (0x00)
#define SBC_ALTERNATE_TRACK_PER_LU_LSB   (0x00)
#define SBC_TRANSFER_RATE_MSB   (0x13)
#define SBC_TRANSFER_RATE_LSB   (0x88)
#define SBC_NUMBER_OF_HEAD   (0x04)
#define SBC_SECTOR_PER_TRACK   (0x20)
#define SBC_DATA_BYTE_PER_SECTOR_MSB   (0x02)
#define SBC_DATA_BYTE_PER_SECTOR_LSB   (0x00)
#define SBC_NUMBER_OF_CYLINDERS_MSB   (0x01)
#define SBC_NUMBER_OF_CYLINDERS_LSB   (0xE9)
#define SBC_STARTING_CYLINDER_WRITE_COMPENSATION_MSB   (0x00)
#define SBC_STARTING_CYLINDER_WRITE_COMPENSATION_LSB   (0x00)
#define SBC_STARTING_CYLINDER_REDUCED_WRITE_MSB   (0x00)
#define SBC_STARTING_CYLINDER_REDUCED_WRITE_LSB   (0x00)
#define SBC_DEVICE_STEP_RATE_MSB   (0x00)
#define SBC_DEVICE_STEP_RATE_LSB   (0x00)
#define SBC_DEVICE_STEP_PULSE_WIDTH   (0x00)
#define SBC_HEAD_SETTLE_DELAY_MSB   (0x00)
#define SBC_HEAD_SETTLE_DELAY_LSB   (0x00)
#define SBC_MOTOR_ON_DELAY   (0x00)
#define SBC_MOTOR_OFF_DELAY   (0x00)
#define SBC_STEP_PULSE_PER_CYLINDER   (0x00)
#define SBC_WRITE_COMPENSATION   (0x00)
#define SBC_HEAD_LOAD_DELAY   (0x00)
#define SBC_HEAD_UNLOAD_DELAY   (0x00)
#define SBC_PIN34_PIN2   (0x00)
#define SBC_PIN4_PIN1   (0x00)
#define SBC_MEDIUM_ROTATION_RATE_MSB   (0x00)
#define SBC_MEDIUM_ROTATION_RATE_LSB   (0x00)
#define SBC_READ_RETRY_COUNT   (0x03)
#define SBC_WRITE_RETRY_COUNT   (0x80)
#define SBC_CORRECTION_SPAN   (0x00)
#define SBC_HEAD_OFFSET_COUNT   (0x00)
#define SBC_DATA_STROBE_OFFSET   (0x00)
#define SBC_RECOVERY_LIMIT_MSB   (0x00)
#define SBC_RECOVERY_LIMIT_LSB   (0x00)
#define SBC_MAX_INQUIRY_DATA   (0x60)
#define Sbc_send_failed()   (g_scsi_status = COMMAND_FAILED)
#define Sbc_send_check_condition()   (g_scsi_status = CHECK_CONDITION)
#define Sbc_send_good()   (g_scsi_status = COMMAND_PASSED)
#define Sbc_build_sense(skey, sasc, sascq)
#define Sbc_valid_write_usb(length)
#define COMMAND_PASSED   0x00
#define COMMAND_FAILED   0x01
#define CHECK_CONDITION   0x02
#define PHASE_ERROR   0x02

Functions

Bool scsi_decode_command (void)
Bool sbc_inquiry (void)
Bool sbc_mode_sense (Bool sense_10)
Bool sbc_mode_select_6 (void)
Bool sbc_request_sense (void)
Bool sbc_format (void)
Bool sbc_write_10 (void)
Bool sbc_read_10 (void)
Bool sbc_test_unit_ready (void)
Bool sbc_read_capacity (void)
Bool sbc_prevent_allow_medium_removal (void)
void sbc_lun_status_is_good (void)
 This fonction send the UFI status GOOD.
void sbc_lun_status_is_busy_or_change (void)
 This fonction send the UFI status busy and change.
void sbc_lun_status_is_not_present (void)
 This fonction send the UFI status "lun not present".
void sbc_lun_status_is_fail (void)
 This fonction send the UFI status FAIL.
void sbc_lun_status_is_protected (void)
 This fonction send the UFI status FAIL because write protection.
void sbc_lun_status_is_cdb_field (void)
 This fonction send the UFI status FAIL because CDB field is invalid.


Detailed Description

This file contains declarations for the SCSI decoder module.

Author:
Atmel Corporation: http://www.atmel.com
Support and FAQ: http://support.atmel.no/

Definition in file scsi_decoder.h.


Define Documentation

#define SBC_CMD_TEST_UNIT_READY   (0x00)

Definition at line 75 of file scsi_decoder.h.

Referenced by host_mem_test_unit_ready(), and scsi_decode_command().

#define SBC_CMD_REQUEST_SENSE   (0x03)

Definition at line 76 of file scsi_decoder.h.

Referenced by host_mem_request_sense(), and scsi_decode_command().

#define SBC_CMD_FORMAT_UNIT   (0x04)

Definition at line 77 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_READ_6   (0x08)

Definition at line 78 of file scsi_decoder.h.

#define SBC_CMD_INQUIRY   (0x12)

Definition at line 79 of file scsi_decoder.h.

Referenced by host_mem_inquiry(), and scsi_decode_command().

#define SBC_CMD_MODE_SELECT_6   (0x15)

Definition at line 80 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_READ_FORMAT_CAPACITY   (0x23)

Definition at line 81 of file scsi_decoder.h.

#define SBC_CMD_MODE_SENSE_6   (0x1A)

Definition at line 82 of file scsi_decoder.h.

Referenced by host_mem_wr_protect(), and scsi_decode_command().

#define SBC_CMD_START_STOP_UNIT   (0x1B)

Definition at line 83 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_RECEIVE_DIAGNOSTICS   (0x1C)

Definition at line 84 of file scsi_decoder.h.

#define SBC_CMD_SEND_DIAGNOSTIC   (0x1D)

Definition at line 85 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL   (0x1E)

Definition at line 86 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_READ_LONG   (0x23)

Definition at line 87 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_READ_CAPACITY   (0x25)

Definition at line 88 of file scsi_decoder.h.

Referenced by host_mem_read_capacity(), and scsi_decode_command().

#define SBC_CMD_READ_CD_ROM_CAPACITY   (0x25)

Definition at line 89 of file scsi_decoder.h.

#define SBC_CMD_READ_10   (0x28)

Definition at line 90 of file scsi_decoder.h.

Referenced by host_mem_mem_2_ram(), and scsi_decode_command().

#define SBC_CMD_WRITE_10   (0x2A)

Definition at line 91 of file scsi_decoder.h.

Referenced by host_mem_ram_2_mem(), and scsi_decode_command().

#define SBC_CMD_SEEK   (0x2B)

Definition at line 92 of file scsi_decoder.h.

#define SBC_CMD_WRITE_VERIFY_10   (0x2E)

Definition at line 93 of file scsi_decoder.h.

#define SBC_CMD_VERIFY_10   (0x2F)

Definition at line 94 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_SYNCHRONIZE_CACHE   (0x35)

Definition at line 95 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_WRITE_BUFFER   (0x3B)

Definition at line 96 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_CHANGE_DEFINITION   (0x40)

Definition at line 97 of file scsi_decoder.h.

#define SBC_CMD_READ_TOC   (0x43)

Definition at line 98 of file scsi_decoder.h.

#define SBC_CMD_MODE_SELECT_10   (0x55)

Definition at line 99 of file scsi_decoder.h.

#define SBC_CMD_RESERVE_10   (0x56)

Definition at line 100 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_RELEASE_10   (0x57)

Definition at line 101 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CMD_MODE_SENSE_10   (0x5A)

Definition at line 102 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_CONTROL_BYTE   (0x00)

Definition at line 104 of file scsi_decoder.h.

#define SBC_CMD_DIR_IN   (0x80)

Definition at line 105 of file scsi_decoder.h.

Referenced by host_mem_inquiry(), host_mem_mem_2_ram(), host_mem_read_capacity(), host_mem_request_sense(), and host_mem_wr_protect().

#define SBC_CMD_DIR_OUT   (0x00)

Definition at line 106 of file scsi_decoder.h.

Referenced by host_mem_ram_2_mem(), and host_mem_test_unit_ready().

#define SBC_SENSE_KEY_NO_SENSE   (0x00)

Definition at line 112 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_good().

#define SBC_SENSE_KEY_RECOVERED_ERROR   (0x01)

Definition at line 113 of file scsi_decoder.h.

#define SBC_SENSE_KEY_NOT_READY   (0x02)

Definition at line 114 of file scsi_decoder.h.

Referenced by host_mem_request_sense(), and sbc_lun_status_is_not_present().

#define SBC_SENSE_KEY_MEDIUM_ERROR   (0x03)

Definition at line 115 of file scsi_decoder.h.

#define SBC_SENSE_KEY_HARDWARE_ERROR   (0x04)

Definition at line 116 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_fail().

#define SBC_SENSE_KEY_ILLEGAL_REQUEST   (0x05)

Definition at line 117 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_cdb_field(), and scsi_decode_command().

#define SBC_SENSE_KEY_UNIT_ATTENTION   (0x06)

Definition at line 118 of file scsi_decoder.h.

Referenced by host_mem_request_sense(), and sbc_lun_status_is_busy_or_change().

#define SBC_SENSE_KEY_DATA_PROTECT   (0x07)

Definition at line 119 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_protected().

#define SBC_SENSE_KEY_BLANK_CHECK   (0x08)

Definition at line 120 of file scsi_decoder.h.

#define SBC_SENSE_KEY_VENDOR_SPECIFIC   (0x09)

Definition at line 121 of file scsi_decoder.h.

#define SBC_SENSE_KEY_COPY_ABORTED   (0x0A)

Definition at line 122 of file scsi_decoder.h.

#define SBC_SENSE_KEY_ABORTED_COMMAND   (0x0B)

Definition at line 123 of file scsi_decoder.h.

#define SBC_SENSE_KEY_VOLUME_OVERFLOW   (0x0D)

Definition at line 124 of file scsi_decoder.h.

#define SBC_SENSE_KEY_MISCOMPARE   (0x0E)

Definition at line 125 of file scsi_decoder.h.

#define SBC_ASC_NO_ADDITIONAL_SENSE_INFORMATION   (0x00)

Definition at line 130 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_fail(), and sbc_lun_status_is_good().

#define SBC_ASC_LOGICAL_UNIT_NOT_READY   (0x04)

Definition at line 131 of file scsi_decoder.h.

#define SBC_ASC_INVALID_FIELD_IN_CDB   (0x24)

Definition at line 132 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_cdb_field().

#define SBC_ASC_WRITE_PROTECTED   (0x27)

Definition at line 133 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_protected().

#define SBC_ASC_FORMAT_ERROR   (0x31)

Definition at line 134 of file scsi_decoder.h.

#define SBC_ASC_INVALID_COMMAND_OPERATION_CODE   (0x20)

Definition at line 135 of file scsi_decoder.h.

Referenced by scsi_decode_command().

#define SBC_ASC_NOT_READY_TO_READY_CHANGE   (0x28)

Definition at line 136 of file scsi_decoder.h.

Referenced by host_mem_request_sense(), and sbc_lun_status_is_busy_or_change().

#define SBC_ASC_MEDIUM_NOT_PRESENT   (0x3A)

Definition at line 137 of file scsi_decoder.h.

Referenced by host_mem_request_sense(), and sbc_lun_status_is_not_present().

#define SBC_ASCQ_FORMAT_COMMAND_FAILED   (0x01)

Definition at line 142 of file scsi_decoder.h.

#define SBC_ASCQ_INITIALIZING_COMMAND_REQUIRED   (0x02)

Definition at line 143 of file scsi_decoder.h.

#define SBC_ASCQ_OPERATION_IN_PROGRESS   (0x07)

Definition at line 144 of file scsi_decoder.h.

#define SBC_RESPONSE_CODE_SENSE   (0x70)

Definition at line 150 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_ADDITIONAL_SENSE_LENGTH   (0x0A)

Definition at line 151 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_COMMAND_SPECIFIC_INFORMATION_3   (0x00)

Definition at line 152 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_COMMAND_SPECIFIC_INFORMATION_2   (0x00)

Definition at line 153 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_COMMAND_SPECIFIC_INFORMATION_1   (0x00)

Definition at line 154 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_COMMAND_SPECIFIC_INFORMATION_0   (0x00)

Definition at line 155 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_FIELD_REPLACEABLE_UNIT_CODE   (0x00)

Definition at line 156 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_SENSE_KEY_SPECIFIC_2   (0x00)

Definition at line 157 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_SENSE_KEY_SPECIFIC_1   (0x00)

Definition at line 158 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_SENSE_KEY_SPECIFIC_0   (0x00)

Definition at line 159 of file scsi_decoder.h.

Referenced by sbc_request_sense().

#define SBC_READ_CAPACITY_LENGTH   (0x08)

Definition at line 162 of file scsi_decoder.h.

Referenced by sbc_read_capacity().

#define SBC_DEFAULT_MEDIUM_TYPE   (0x00)

Definition at line 170 of file scsi_decoder.h.

#define SBC_FLEXIBLE_DISK_SINGLE_SIDED_UNSPECIFIED   (0x01)

Definition at line 171 of file scsi_decoder.h.

#define SBC_FLEXIBLE_DISK_DOUBLE_SIDED_UNSPECIFIED   (0x02)

Definition at line 172 of file scsi_decoder.h.

#define SBC_MEDIUM_TYPE   SBC_DEFAULT_MEDIUM_TYPE

Definition at line 174 of file scsi_decoder.h.

Referenced by sbc_header_mode_sense().

#define SBC_DEV_SPEC_PARAM_WR_ENABLE   (0x00)

Definition at line 176 of file scsi_decoder.h.

Referenced by sbc_header_mode_sense().

#define SBC_DEV_SPEC_PARAM_WR_PROTECT   (0x80)

Definition at line 177 of file scsi_decoder.h.

Referenced by sbc_header_mode_sense().

#define SBC_BLOCK_DESCRIPTOR_LENGTH   (0x00)

Definition at line 178 of file scsi_decoder.h.

Referenced by sbc_header_mode_sense().

#define SBC_MSK_DBD   (0x08)

Definition at line 180 of file scsi_decoder.h.

#define SBC_MSK_PAGE_CONTROL   (0xC0)

Definition at line 181 of file scsi_decoder.h.

#define SBC_MSK_PAGE_CODE   (0x3F)

Definition at line 182 of file scsi_decoder.h.

Referenced by sbc_mode_sense().

#define SBC_PAGE_CODE_READ_WRITE_ERROR_RECOVERY   (0x01)

Definition at line 188 of file scsi_decoder.h.

Referenced by sbc_mode_sense(), and send_read_write_error_recovery_page().

#define SBC_PAGE_CODE_FORMAT_DEVICE   (0x03)

Definition at line 189 of file scsi_decoder.h.

#define SBC_PAGE_CODE_FLEXIBLE_DISK   (0x05)

Definition at line 190 of file scsi_decoder.h.

#define SBC_PAGE_CODE_CACHING_MODE_PAGE   (0x08)

Definition at line 191 of file scsi_decoder.h.

#define SBC_PAGE_CODE_INFORMATIONAL_EXCEPTIONS   (0x1C)

Definition at line 192 of file scsi_decoder.h.

Referenced by sbc_mode_sense(), and send_informational_exceptions_page().

#define SBC_PAGE_CODE_ALL   (0x3F)

Definition at line 193 of file scsi_decoder.h.

Referenced by sbc_mode_sense().

#define SBC_PAGE_LENGTH_INFORMATIONAL_EXCEPTIONS   (0x0A)

Definition at line 195 of file scsi_decoder.h.

Referenced by send_informational_exceptions_page().

#define SBC_PAGE_LENGTH_READ_WRITE_ERROR_RECOVERY   (0x0A)

Definition at line 196 of file scsi_decoder.h.

Referenced by send_read_write_error_recovery_page().

#define SBC_PAGE_LENGTH_FLEXIBLE_DISK   (0x1E)

Definition at line 197 of file scsi_decoder.h.

#define SBC_PAGE_LENGTH_FORMAT_DEVICE   (0x16)

Definition at line 198 of file scsi_decoder.h.

#define SBC_MODE_DATA_LENGTH_INFORMATIONAL_EXCEPTIONS   (SBC_PAGE_LENGTH_INFORMATIONAL_EXCEPTIONS + 2 + 3)

Definition at line 202 of file scsi_decoder.h.

Referenced by sbc_mode_sense().

#define SBC_MODE_DATA_LENGTH_READ_WRITE_ERROR_RECOVERY   (SBC_PAGE_LENGTH_READ_WRITE_ERROR_RECOVERY + 2 + 3 )

Definition at line 203 of file scsi_decoder.h.

Referenced by sbc_mode_sense().

#define SBC_MODE_DATA_LENGTH_FLEXIBLE_DISK   (SBC_PAGE_LENGTH_FLEXIBLE_DISK + 2 + 3 )

Definition at line 204 of file scsi_decoder.h.

#define SBC_MODE_DATA_LENGTH_FORMAT_DEVICE   (SBC_PAGE_LENGTH_FORMAT_DEVICE + 2 + 3 )

Definition at line 205 of file scsi_decoder.h.

#define SBC_MODE_DATA_LENGTH_CODE_ALL

Value:

Definition at line 207 of file scsi_decoder.h.

Referenced by sbc_mode_sense().

#define SBC_MRIE   (0x05)

Definition at line 214 of file scsi_decoder.h.

Referenced by send_informational_exceptions_page().

#define SBC_TRACK_PER_ZONE_MSB   (0x00)

Definition at line 217 of file scsi_decoder.h.

#define SBC_TRACK_PER_ZONE_LSB   (0x00)

Definition at line 218 of file scsi_decoder.h.

#define SBC_ALTERNATE_SECTORS_PER_ZONE_MSB   (0x00)

Definition at line 219 of file scsi_decoder.h.

#define SBC_ALTERNATE_SECTORS_PER_ZONE_LSB   (0x00)

Definition at line 220 of file scsi_decoder.h.

#define SBC_ALTERNATE_TRACK_PER_ZONE_MSB   (0x00)

Definition at line 221 of file scsi_decoder.h.

#define SBC_ALTERNATE_TRACK_PER_ZONE_LSB   (0x00)

Definition at line 222 of file scsi_decoder.h.

#define SBC_ALTERNATE_TRACK_PER_LU_MSB   (0x00)

Definition at line 223 of file scsi_decoder.h.

#define SBC_ALTERNATE_TRACK_PER_LU_LSB   (0x00)

Definition at line 224 of file scsi_decoder.h.

#define SBC_TRANSFER_RATE_MSB   (0x13)

Definition at line 227 of file scsi_decoder.h.

#define SBC_TRANSFER_RATE_LSB   (0x88)

Definition at line 228 of file scsi_decoder.h.

#define SBC_NUMBER_OF_HEAD   (0x04)

Definition at line 236 of file scsi_decoder.h.

#define SBC_SECTOR_PER_TRACK   (0x20)

Definition at line 237 of file scsi_decoder.h.

#define SBC_DATA_BYTE_PER_SECTOR_MSB   (0x02)

Definition at line 238 of file scsi_decoder.h.

#define SBC_DATA_BYTE_PER_SECTOR_LSB   (0x00)

Definition at line 239 of file scsi_decoder.h.

#define SBC_NUMBER_OF_CYLINDERS_MSB   (0x01)

Definition at line 240 of file scsi_decoder.h.

#define SBC_NUMBER_OF_CYLINDERS_LSB   (0xE9)

Definition at line 241 of file scsi_decoder.h.

#define SBC_STARTING_CYLINDER_WRITE_COMPENSATION_MSB   (0x00)

Definition at line 242 of file scsi_decoder.h.

#define SBC_STARTING_CYLINDER_WRITE_COMPENSATION_LSB   (0x00)

Definition at line 243 of file scsi_decoder.h.

#define SBC_STARTING_CYLINDER_REDUCED_WRITE_MSB   (0x00)

Definition at line 244 of file scsi_decoder.h.

#define SBC_STARTING_CYLINDER_REDUCED_WRITE_LSB   (0x00)

Definition at line 245 of file scsi_decoder.h.

#define SBC_DEVICE_STEP_RATE_MSB   (0x00)

Definition at line 246 of file scsi_decoder.h.

#define SBC_DEVICE_STEP_RATE_LSB   (0x00)

Definition at line 247 of file scsi_decoder.h.

#define SBC_DEVICE_STEP_PULSE_WIDTH   (0x00)

Definition at line 248 of file scsi_decoder.h.

#define SBC_HEAD_SETTLE_DELAY_MSB   (0x00)

Definition at line 249 of file scsi_decoder.h.

#define SBC_HEAD_SETTLE_DELAY_LSB   (0x00)

Definition at line 250 of file scsi_decoder.h.

#define SBC_MOTOR_ON_DELAY   (0x00)

Definition at line 251 of file scsi_decoder.h.

#define SBC_MOTOR_OFF_DELAY   (0x00)

Definition at line 252 of file scsi_decoder.h.

#define SBC_STEP_PULSE_PER_CYLINDER   (0x00)

Definition at line 253 of file scsi_decoder.h.

#define SBC_WRITE_COMPENSATION   (0x00)

Definition at line 254 of file scsi_decoder.h.

#define SBC_HEAD_LOAD_DELAY   (0x00)

Definition at line 255 of file scsi_decoder.h.

#define SBC_HEAD_UNLOAD_DELAY   (0x00)

Definition at line 256 of file scsi_decoder.h.

#define SBC_PIN34_PIN2   (0x00)

Definition at line 257 of file scsi_decoder.h.

#define SBC_PIN4_PIN1   (0x00)

Definition at line 258 of file scsi_decoder.h.

#define SBC_MEDIUM_ROTATION_RATE_MSB   (0x00)

Definition at line 259 of file scsi_decoder.h.

#define SBC_MEDIUM_ROTATION_RATE_LSB   (0x00)

Definition at line 260 of file scsi_decoder.h.

#define SBC_READ_RETRY_COUNT   (0x03)

Definition at line 263 of file scsi_decoder.h.

Referenced by send_read_write_error_recovery_page().

#define SBC_WRITE_RETRY_COUNT   (0x80)

Definition at line 264 of file scsi_decoder.h.

Referenced by send_read_write_error_recovery_page().

#define SBC_CORRECTION_SPAN   (0x00)

Definition at line 265 of file scsi_decoder.h.

Referenced by send_read_write_error_recovery_page().

#define SBC_HEAD_OFFSET_COUNT   (0x00)

Definition at line 266 of file scsi_decoder.h.

Referenced by send_read_write_error_recovery_page().

#define SBC_DATA_STROBE_OFFSET   (0x00)

Definition at line 267 of file scsi_decoder.h.

Referenced by send_read_write_error_recovery_page().

#define SBC_RECOVERY_LIMIT_MSB   (0x00)

Definition at line 268 of file scsi_decoder.h.

Referenced by send_read_write_error_recovery_page().

#define SBC_RECOVERY_LIMIT_LSB   (0x00)

Definition at line 269 of file scsi_decoder.h.

Referenced by send_read_write_error_recovery_page().

#define SBC_MAX_INQUIRY_DATA   (0x60)

Definition at line 274 of file scsi_decoder.h.

Referenced by sbc_inquiry().

 
#define Sbc_send_failed (  )     (g_scsi_status = COMMAND_FAILED)

Definition at line 306 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_busy_or_change(), sbc_lun_status_is_cdb_field(), sbc_lun_status_is_fail(), sbc_lun_status_is_not_present(), sbc_lun_status_is_protected(), and scsi_decode_command().

 
#define Sbc_send_check_condition (  )     (g_scsi_status = CHECK_CONDITION)

Definition at line 307 of file scsi_decoder.h.

 
#define Sbc_send_good (  )     (g_scsi_status = COMMAND_PASSED)

Definition at line 308 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_good().

#define Sbc_build_sense ( skey,
sasc,
sascq   ) 

Value:

( g_scsi_sense.key  = skey, \
                                               g_scsi_sense.asc  = sasc, \
                                               g_scsi_sense.ascq = sascq )

Definition at line 309 of file scsi_decoder.h.

Referenced by sbc_lun_status_is_busy_or_change(), sbc_lun_status_is_cdb_field(), sbc_lun_status_is_fail(), sbc_lun_status_is_good(), sbc_lun_status_is_not_present(), sbc_lun_status_is_protected(), and scsi_decode_command().

#define Sbc_valid_write_usb ( length   ) 

Value:

Definition at line 312 of file scsi_decoder.h.

Referenced by sbc_inquiry(), sbc_mode_sense(), sbc_read_capacity(), and sbc_request_sense().

#define COMMAND_PASSED   0x00

Definition at line 316 of file scsi_decoder.h.

#define COMMAND_FAILED   0x01

Definition at line 317 of file scsi_decoder.h.

#define CHECK_CONDITION   0x02

Definition at line 318 of file scsi_decoder.h.

#define PHASE_ERROR   0x02

Definition at line 319 of file scsi_decoder.h.


Function Documentation

Bool scsi_decode_command ( void   ) 

SCSI decoder function This function read the SCSI command and launches the appropriate function

Warning:
Code:.. bytes (function code length)
Parameters:
nonr 
Returns:
FALSE: result KO, TRUE: result OK

0x1B - Optional

Definition at line 135 of file scsi_decoder.c.

References FALSE, g_scsi_command, SBC_ASC_INVALID_COMMAND_OPERATION_CODE, Sbc_build_sense, SBC_CMD_FORMAT_UNIT, SBC_CMD_INQUIRY, SBC_CMD_MODE_SELECT_6, SBC_CMD_MODE_SENSE_10, SBC_CMD_MODE_SENSE_6, SBC_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL, SBC_CMD_READ_10, SBC_CMD_READ_CAPACITY, SBC_CMD_READ_LONG, SBC_CMD_RELEASE_10, SBC_CMD_REQUEST_SENSE, SBC_CMD_RESERVE_10, SBC_CMD_SEND_DIAGNOSTIC, SBC_CMD_START_STOP_UNIT, SBC_CMD_SYNCHRONIZE_CACHE, SBC_CMD_TEST_UNIT_READY, SBC_CMD_VERIFY_10, SBC_CMD_WRITE_10, SBC_CMD_WRITE_BUFFER, sbc_inquiry(), sbc_lun_status_is_good(), sbc_mode_sense(), sbc_prevent_allow_medium_removal(), sbc_read_10(), sbc_read_capacity(), sbc_request_sense(), Sbc_send_failed, SBC_SENSE_KEY_ILLEGAL_REQUEST, sbc_test_unit_ready(), sbc_write_10(), Scsi_start_read_action, Scsi_start_write_action, Scsi_stop_read_action, Scsi_stop_write_action, and TRUE.

00136 {
00137    Bool status;
00138 
00139    if (g_scsi_command[0] == SBC_CMD_WRITE_10)
00140    {
00141       Scsi_start_write_action();
00142       status = sbc_write_10();
00143       Scsi_stop_write_action();
00144       return status;
00145    }
00146    if (g_scsi_command[0] == SBC_CMD_READ_10 )
00147    {
00148       Scsi_start_read_action();
00149       status = sbc_read_10();
00150       Scsi_stop_read_action();
00151       return status;
00152    }
00153 
00154    switch (g_scsi_command[0])
00155    {
00156       case SBC_CMD_REQUEST_SENSE:               // 0x03 - Mandatory
00157       return sbc_request_sense();
00158       break;
00159 
00160       case SBC_CMD_INQUIRY:                     // 0x12 - Mandatory
00161       return sbc_inquiry();
00162       break;
00163 
00164       case SBC_CMD_TEST_UNIT_READY:             // 0x00 - Mandatory
00165       return sbc_test_unit_ready();
00166       break;
00167 
00168       case SBC_CMD_READ_CAPACITY:               // 0x25 - Mandatory
00169       return sbc_read_capacity();
00170       break;
00171 
00172       case SBC_CMD_MODE_SENSE_6:                // 0x1A - Optional
00173       return sbc_mode_sense( FALSE );
00174       break;
00175 
00176       case SBC_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:// 0x1E
00177       return sbc_prevent_allow_medium_removal();
00178       break;
00179 
00180       case SBC_CMD_VERIFY_10:                   // 0x2F - Optional
00181       sbc_lun_status_is_good();
00182       break;
00183 
00184       case SBC_CMD_MODE_SENSE_10:               // 0x5A - Optional
00185       return sbc_mode_sense( TRUE );
00186       break;
00187 
00188       case SBC_CMD_FORMAT_UNIT:                 // 0x04 - Mandatory
00189       case SBC_CMD_MODE_SELECT_6:               // 0x15 - Optional
00190       case SBC_CMD_START_STOP_UNIT:             
00191       case SBC_CMD_SEND_DIAGNOSTIC:             // 0x1D - 
00192       case SBC_CMD_READ_LONG:                   // 0x23 - Optional
00193       case SBC_CMD_SYNCHRONIZE_CACHE:           // 0x35 - Optional
00194       case SBC_CMD_WRITE_BUFFER:                // 0x3B - Optional
00195       case SBC_CMD_RESERVE_10:                  // 0x56 - Mandatory
00196       case SBC_CMD_RELEASE_10:                  // 0x57 - Mandatory - see chapter 7.16 - SPC 2
00197       default:
00198       // Command not supported
00199       Sbc_send_failed();
00200       Sbc_build_sense(SBC_SENSE_KEY_ILLEGAL_REQUEST, SBC_ASC_INVALID_COMMAND_OPERATION_CODE, 0x00);
00201       return FALSE;
00202       break;
00203    }
00204    return TRUE;
00205 }

Here is the call graph for this function:

Bool sbc_inquiry ( void   ) 

This function manages the SCSI INQUIRY command (0x12) The SCSI Inquiry field contains information regarding parameters of the target. For example:

Warning:
Code:.. bytes (function code length)
Parameters:
none 
Returns:
FALSE: result KO, TRUE: result OK

Definition at line 290 of file scsi_decoder.c.

References FALSE, g_sbc_product_id, g_sbc_revision_id, g_sbc_vendor_id, g_scsi_command, i, sbc_lun_status_is_cdb_field(), sbc_lun_status_is_good(), SBC_MAX_INQUIRY_DATA, Sbc_valid_write_usb, TRUE, and Usb_write_byte.

00291 {
00292    U8 allocation_length, i;
00293 
00294 #ifdef __GNUC__
00295    PGM_VOID_P ptr;
00296 #else
00297    U8 code *ptr;
00298 #endif
00299 
00300    if( (0 != (g_scsi_command[1] & 0x03) )       // CMDT and EPVD bits are 0
00301    ||  (0 !=  g_scsi_command[2]         ) )     // PAGE or OPERATION CODE fields = 0x00?
00302    {  
00303       // (CMDT=EVPD <> 0) or (PAGE CODE <> 0x00)
00304       // No standard inquiry asked
00305       sbc_lun_status_is_cdb_field();
00306       return FALSE;
00307    }
00308 
00309    // Manage the standard inquiry command
00310    // Check the size of inquiry data
00311    allocation_length = g_scsi_command[4];
00312    if (allocation_length > SBC_MAX_INQUIRY_DATA)
00313    {
00314       allocation_length = SBC_MAX_INQUIRY_DATA;
00315    }
00316 
00317    // send first inquiry data (0 to 8)
00318    ptr = (code U8*) &sbc_std_inquiry_data;
00319 
00320    for ( i=0 ; ((i != 36) && (allocation_length > i)); i++)
00321    {
00322       if( 8 == i )
00323       {  // send vendor id (8 to 16)
00324            ptr = (code U8 *) &g_sbc_vendor_id;
00325       }
00326       if( 16 == i )
00327       {  // send product id (16 to 32)
00328          ptr = (code U8 *) &g_sbc_product_id;
00329       }
00330       if( 32 == i )
00331       {  // send revision id (32 to 36)
00332          ptr = (code U8 *) &g_sbc_revision_id;
00333       }
00334 #ifndef __GNUC__
00335       Usb_write_byte((U8)(*ptr++));
00336 #else    // AVRGCC does not support point to PGM space
00337 //warning with AVRGCC assumes devices descriptors are stored in the lower 64Kbytes of on-chip flash memory
00338       Usb_write_byte(pgm_read_byte_near((unsigned int)ptr++));
00339 #endif
00340 
00341    }
00342    Sbc_valid_write_usb(i);
00343    sbc_lun_status_is_good();
00344    return TRUE;      
00345 }

Here is the call graph for this function:

Bool sbc_mode_sense ( Bool  b_sense_10  ) 

This function manages the SCSI MODE SENSE command (0x1A for sense 6 and 0x5A for sense 10) The SCSI mode sense function returns parameters to an application client. It is a complementary command to the SCSI MODE SELECT command.

Warning:
Code:.. bytes (function code length)
Parameters:
b_sens_10 ( TRUE = sense 10, TRUE = sense 6)
Returns:
FALSE: result KO, TRUE: result OK

Definition at line 554 of file scsi_decoder.c.

References FALSE, g_scsi_command, sbc_header_mode_sense(), sbc_lun_status_is_cdb_field(), sbc_lun_status_is_good(), SBC_MODE_DATA_LENGTH_CODE_ALL, SBC_MODE_DATA_LENGTH_INFORMATIONAL_EXCEPTIONS, SBC_MODE_DATA_LENGTH_READ_WRITE_ERROR_RECOVERY, SBC_MSK_PAGE_CODE, SBC_PAGE_CODE_ALL, SBC_PAGE_CODE_INFORMATIONAL_EXCEPTIONS, SBC_PAGE_CODE_READ_WRITE_ERROR_RECOVERY, Sbc_valid_write_usb, send_informational_exceptions_page(), send_read_write_error_recovery_page(), and TRUE.

00555 {
00556    U8 allocation_length;
00557 
00558    if( b_sense_10 )
00559       allocation_length = g_scsi_command[8];
00560    else
00561       allocation_length = g_scsi_command[4];
00562 
00563    // switch for page code
00564    switch ( g_scsi_command[2] & SBC_MSK_PAGE_CODE )
00565    {
00566       case SBC_PAGE_CODE_INFORMATIONAL_EXCEPTIONS:
00567       sbc_header_mode_sense( b_sense_10 , SBC_MODE_DATA_LENGTH_INFORMATIONAL_EXCEPTIONS );
00568       send_informational_exceptions_page();
00569       Sbc_valid_write_usb(SBC_MODE_DATA_LENGTH_INFORMATIONAL_EXCEPTIONS + 1);
00570       break;
00571 
00572       case SBC_PAGE_CODE_READ_WRITE_ERROR_RECOVERY:
00573       sbc_header_mode_sense( b_sense_10 , SBC_MODE_DATA_LENGTH_READ_WRITE_ERROR_RECOVERY );
00574       send_read_write_error_recovery_page(allocation_length);
00575       Sbc_valid_write_usb(SBC_MODE_DATA_LENGTH_READ_WRITE_ERROR_RECOVERY + 1);
00576       break;
00577 
00578       case SBC_PAGE_CODE_ALL:
00579       if( b_sense_10 ) {
00580          sbc_header_mode_sense( b_sense_10 , (allocation_length < (SBC_MODE_DATA_LENGTH_CODE_ALL+2))? (allocation_length-2) : SBC_MODE_DATA_LENGTH_CODE_ALL );
00581       }else{
00582          sbc_header_mode_sense( b_sense_10 , (allocation_length < (SBC_MODE_DATA_LENGTH_CODE_ALL+1))? (allocation_length-1) : SBC_MODE_DATA_LENGTH_CODE_ALL );
00583       }
00584       if( b_sense_10 )
00585       {
00586          if (allocation_length == 8)
00587          {
00588             Sbc_valid_write_usb(8);
00589             break;
00590          }
00591       }
00592       else
00593       {
00594          if (allocation_length == 4)
00595          {
00596             Sbc_valid_write_usb(4);
00597             break;
00598          }
00599       }
00600       // send page by ascending order code
00601       send_read_write_error_recovery_page(allocation_length);  // 12 bytes
00602       if (allocation_length > 12)
00603       {
00604          send_informational_exceptions_page();                 // 12 bytes
00605          Sbc_valid_write_usb(SBC_MODE_DATA_LENGTH_CODE_ALL + 1);
00606       }
00607       else
00608       {
00609          Sbc_valid_write_usb(allocation_length);
00610       }
00611       break;
00612 
00613       default:
00614       sbc_lun_status_is_cdb_field();
00615       return FALSE;
00616       break;
00617    }
00618    sbc_lun_status_is_good();
00619    return TRUE;
00620 }

Here is the call graph for this function:

Bool sbc_mode_select_6 ( void   ) 

Bool sbc_request_sense ( void   ) 

This function manages the SCSI REQUEST SENSE command (0x03) The SCSI Sense contains the status of the last command This status is composed of 3 Bytes :

Definition at line 225 of file scsi_decoder.c.

References s_scsi_sense::asc, s_scsi_sense::ascq, g_scsi_command, i, s_scsi_sense::key, SBC_ADDITIONAL_SENSE_LENGTH, SBC_COMMAND_SPECIFIC_INFORMATION_0, SBC_COMMAND_SPECIFIC_INFORMATION_1, SBC_COMMAND_SPECIFIC_INFORMATION_2, SBC_COMMAND_SPECIFIC_INFORMATION_3, SBC_FIELD_REPLACEABLE_UNIT_CODE, sbc_lun_status_is_good(), SBC_RESPONSE_CODE_SENSE, SBC_SENSE_KEY_SPECIFIC_0, SBC_SENSE_KEY_SPECIFIC_1, SBC_SENSE_KEY_SPECIFIC_2, Sbc_valid_write_usb, TRUE, and Usb_write_byte.

00226 {
00227    U8  allocation_length, i;
00228    U8  request_sens_output[18];                             // the maximum size of request is 17
00229 
00230    allocation_length = g_scsi_command[4];                   // Allocation length
00231    if( allocation_length > 18 )
00232    {
00233       allocation_length = 18;
00234    }
00235    // Initialize the request sense data
00236    request_sens_output[0] = SBC_RESPONSE_CODE_SENSE;        // 70h
00237    request_sens_output[1] = 0x00;                           // Obsolete
00238    request_sens_output[2] = g_scsi_sense.key;
00239 
00240    request_sens_output[3] = 0x00;                           // For direct access media, Information field
00241    request_sens_output[4] = 0x00;                           // give the unsigned logical block
00242    request_sens_output[5] = 0x00;                           // address associated with the sense key
00243    request_sens_output[6] = 0x00;
00244 
00245    request_sens_output[7] = SBC_ADDITIONAL_SENSE_LENGTH;    // UFI device shall not adjust the Additional sense length to reflect truncation
00246    request_sens_output[8] = SBC_COMMAND_SPECIFIC_INFORMATION_3;
00247    request_sens_output[9] = SBC_COMMAND_SPECIFIC_INFORMATION_2;
00248    request_sens_output[10] = SBC_COMMAND_SPECIFIC_INFORMATION_1;
00249    request_sens_output[11] = SBC_COMMAND_SPECIFIC_INFORMATION_0;
00250 
00251    request_sens_output[12] = g_scsi_sense.asc;
00252    request_sens_output[13] = g_scsi_sense.ascq;
00253 
00254    request_sens_output[14] = SBC_FIELD_REPLACEABLE_UNIT_CODE;
00255    request_sens_output[15] = SBC_SENSE_KEY_SPECIFIC_2;
00256    request_sens_output[16] = SBC_SENSE_KEY_SPECIFIC_1;
00257    request_sens_output[17] = SBC_SENSE_KEY_SPECIFIC_0;
00258 
00259    // Send the request data
00260    for( i=0 ; i<allocation_length ; i++ )
00261    {
00262        Usb_write_byte( request_sens_output[i] );
00263    }
00264    Sbc_valid_write_usb( allocation_length );
00265 
00266    sbc_lun_status_is_good();
00267    return TRUE;
00268 }

Here is the call graph for this function:

Bool sbc_format ( void   ) 

Bool sbc_write_10 ( void   ) 

Definition at line 472 of file scsi_decoder.c.

References CTRL_BUSY, CTRL_FAIL, CTRL_GOOD, CTRL_NO_PRESENT, FALSE, g_scsi_command, g_scsi_data_remaining, Is_usb_ms_data_direction_in, LSB, mem_wr_protect(), MSB, MSB0, MSB1, MSB2, MSB3, sbc_lun_status_is_busy_or_change(), sbc_lun_status_is_cdb_field(), sbc_lun_status_is_fail(), sbc_lun_status_is_good(), sbc_lun_status_is_not_present(), sbc_lun_status_is_protected(), TRUE, usb_2_memory(), and usb_LUN.

00473 {
00474    U32   mass_addr;                       // rd or wr block address
00475    U16   mass_size;                       // rd or write nb of blocks
00476 
00477    MSB0(mass_addr) = g_scsi_command[2];   // read address
00478    MSB1(mass_addr) = g_scsi_command[3];
00479    MSB2(mass_addr) = g_scsi_command[4];
00480    MSB3(mass_addr) = g_scsi_command[5];
00481 
00482    MSB(mass_size) = g_scsi_command[7];    // read size
00483    LSB(mass_size) = g_scsi_command[8];
00484    
00485    if( Is_usb_ms_data_direction_in() )
00486    {
00487       sbc_lun_status_is_cdb_field();
00488       return FALSE;
00489    }
00490 
00491    if( 0 == g_scsi_data_remaining )
00492    {
00493       if( mass_size == (g_scsi_data_remaining/512) )
00494       {
00495          sbc_lun_status_is_good();
00496       }else{
00497          sbc_lun_status_is_cdb_field();
00498       }
00499       return TRUE;
00500    }
00501    
00502    if( TRUE == mem_wr_protect( usb_LUN ) )
00503    {
00504       sbc_lun_status_is_protected();
00505       return FALSE;
00506    }
00507 
00508    switch (usb_2_memory( usb_LUN , mass_addr, g_scsi_data_remaining/512 ))
00509    {
00510       case CTRL_GOOD :
00511       if( mass_size == (g_scsi_data_remaining/512) )
00512       {
00513          sbc_lun_status_is_good();
00514       }else{
00515          sbc_lun_status_is_cdb_field();
00516       }
00517       g_scsi_data_remaining = 0;
00518       break;
00519 
00520       case CTRL_NO_PRESENT :
00521       sbc_lun_status_is_not_present();
00522       return FALSE;
00523       break;
00524 
00525       case CTRL_BUSY :
00526       sbc_lun_status_is_busy_or_change();
00527       return FALSE;
00528       break;
00529 
00530       case CTRL_FAIL :
00531       default :
00532       sbc_lun_status_is_fail();
00533       return FALSE;
00534       break;
00535    }
00536    return TRUE;
00537 }

Here is the call graph for this function:

Bool sbc_read_10 ( void   ) 

Definition at line 411 of file scsi_decoder.c.

References CTRL_BUSY, CTRL_FAIL, CTRL_GOOD, CTRL_NO_PRESENT, FALSE, g_scsi_command, g_scsi_data_remaining, Is_usb_ms_data_direction_out, LSB, memory_2_usb(), MSB, MSB0, MSB1, MSB2, MSB3, sbc_lun_status_is_busy_or_change(), sbc_lun_status_is_cdb_field(), sbc_lun_status_is_fail(), sbc_lun_status_is_good(), sbc_lun_status_is_not_present(), TRUE, and usb_LUN.

00412 {
00413    U32   mass_addr;                       // rd or wr block address
00414    U16   mass_size;                       // rd or write nb of blocks
00415 
00416    MSB0(mass_addr) = g_scsi_command[2];   // read address
00417    MSB1(mass_addr) = g_scsi_command[3];
00418    MSB2(mass_addr) = g_scsi_command[4];
00419    MSB3(mass_addr) = g_scsi_command[5];
00420 
00421    MSB(mass_size) = g_scsi_command[7];    // read size
00422    LSB(mass_size) = g_scsi_command[8];
00423    
00424    if( Is_usb_ms_data_direction_out() )
00425    {
00426       sbc_lun_status_is_cdb_field();
00427       return FALSE;
00428    }
00429    if( 0 == g_scsi_data_remaining )
00430    {
00431       if( mass_size == (g_scsi_data_remaining/512) )
00432       {
00433          sbc_lun_status_is_good();
00434       }else{
00435          sbc_lun_status_is_cdb_field();
00436       }
00437       return TRUE;
00438    }
00439 
00440    switch ( memory_2_usb( usb_LUN , mass_addr,  g_scsi_data_remaining/512 ) )
00441    {
00442       case CTRL_GOOD :
00443       if( mass_size == (g_scsi_data_remaining/512) )
00444       {
00445          sbc_lun_status_is_good();
00446       }else{
00447          sbc_lun_status_is_cdb_field();
00448       }
00449       g_scsi_data_remaining = 0;
00450       break;
00451 
00452       case CTRL_NO_PRESENT :
00453       sbc_lun_status_is_not_present();
00454       return FALSE;
00455       break;
00456 
00457       case CTRL_BUSY :
00458       sbc_lun_status_is_busy_or_change();
00459       return FALSE;
00460       break;
00461 
00462       case CTRL_FAIL :
00463       default :
00464       sbc_lun_status_is_fail();
00465       return FALSE;
00466       break;
00467    }
00468    return TRUE;
00469 }

Here is the call graph for this function:

Bool sbc_test_unit_ready ( void   ) 

Definition at line 348 of file scsi_decoder.c.

References CTRL_BUSY, CTRL_FAIL, CTRL_GOOD, CTRL_NO_PRESENT, mem_test_unit_ready(), sbc_lun_status_is_busy_or_change(), sbc_lun_status_is_fail(), sbc_lun_status_is_good(), sbc_lun_status_is_not_present(), TRUE, and usb_LUN.

00349 {
00350    switch ( mem_test_unit_ready(usb_LUN) )
00351    {
00352       case CTRL_GOOD :
00353       sbc_lun_status_is_good();
00354       break;
00355 
00356       case CTRL_NO_PRESENT :
00357       sbc_lun_status_is_not_present();
00358       break;
00359 
00360       case CTRL_BUSY :
00361       sbc_lun_status_is_busy_or_change();
00362       break;
00363 
00364       case CTRL_FAIL :
00365       default :
00366       sbc_lun_status_is_fail();
00367       break;
00368    }
00369    return TRUE;
00370 }

Here is the call graph for this function:

Bool sbc_read_capacity ( void   ) 

Definition at line 373 of file scsi_decoder.c.

References CTRL_BUSY, CTRL_FAIL, CTRL_GOOD, CTRL_NO_PRESENT, FALSE, mem_read_capacity(), MSB0, MSB1, MSB2, MSB3, sbc_lun_status_is_busy_or_change(), sbc_lun_status_is_fail(), sbc_lun_status_is_good(), sbc_lun_status_is_not_present(), SBC_READ_CAPACITY_LENGTH, Sbc_valid_write_usb, TRUE, usb_LUN, and Usb_write_byte.

00374 {
00375    U32 mem_size_nb_sector;
00376 
00377    switch ( mem_read_capacity( usb_LUN, &mem_size_nb_sector ) )
00378    {
00379       case CTRL_GOOD :
00380       Usb_write_byte(MSB0(mem_size_nb_sector));    // return nb block
00381       Usb_write_byte(MSB1(mem_size_nb_sector));
00382       Usb_write_byte(MSB2(mem_size_nb_sector));
00383       Usb_write_byte(MSB3(mem_size_nb_sector));
00384       Usb_write_byte( 0               );           // return block size (= 512B)
00385       Usb_write_byte( 0               );
00386       Usb_write_byte( (U8)(512 >> 8)  );
00387       Usb_write_byte( (U8)(512 & 0xFF));
00388 
00389       Sbc_valid_write_usb(SBC_READ_CAPACITY_LENGTH);
00390       sbc_lun_status_is_good();
00391       return TRUE;
00392       break;
00393 
00394       case CTRL_NO_PRESENT :
00395       sbc_lun_status_is_not_present();
00396       break;
00397 
00398       case CTRL_BUSY :
00399       sbc_lun_status_is_busy_or_change();
00400       break;
00401 
00402       case CTRL_FAIL :
00403       default :
00404       sbc_lun_status_is_fail();
00405       break;
00406    }
00407    return FALSE;
00408 }

Here is the call graph for this function:

Bool sbc_prevent_allow_medium_removal ( void   ) 

This function manages the SCSI PREVENT ALLOW MEDIUM REMOVAL command (0x1E) The SCSI prevent allow medium removal command requests that the target enable or disable the removal of the medium in the logical unit.

Warning:
Code:.. bytes (function code length)
Parameters:
none 
Returns:
FALSE: result KO, TRUE: result OK

Definition at line 743 of file scsi_decoder.c.

References sbc_lun_status_is_good(), and TRUE.

00744 {
00745    sbc_lun_status_is_good();
00746    return TRUE;
00747 }

Here is the call graph for this function:

void sbc_lun_status_is_good ( void   ) 

This fonction send the UFI status GOOD.

Definition at line 752 of file scsi_decoder.c.

References SBC_ASC_NO_ADDITIONAL_SENSE_INFORMATION, Sbc_build_sense, Sbc_send_good, and SBC_SENSE_KEY_NO_SENSE.

void sbc_lun_status_is_busy_or_change ( void   ) 

This fonction send the UFI status busy and change.

Definition at line 768 of file scsi_decoder.c.

References SBC_ASC_NOT_READY_TO_READY_CHANGE, Sbc_build_sense, Sbc_send_failed, and SBC_SENSE_KEY_UNIT_ATTENTION.

void sbc_lun_status_is_not_present ( void   ) 

This fonction send the UFI status "lun not present".

Definition at line 760 of file scsi_decoder.c.

References SBC_ASC_MEDIUM_NOT_PRESENT, Sbc_build_sense, Sbc_send_failed, and SBC_SENSE_KEY_NOT_READY.

void sbc_lun_status_is_fail ( void   ) 

This fonction send the UFI status FAIL.

Definition at line 776 of file scsi_decoder.c.

References SBC_ASC_NO_ADDITIONAL_SENSE_INFORMATION, Sbc_build_sense, Sbc_send_failed, and SBC_SENSE_KEY_HARDWARE_ERROR.

void sbc_lun_status_is_protected ( void   ) 

This fonction send the UFI status FAIL because write protection.

Definition at line 784 of file scsi_decoder.c.

References SBC_ASC_WRITE_PROTECTED, Sbc_build_sense, Sbc_send_failed, and SBC_SENSE_KEY_DATA_PROTECT.

void sbc_lun_status_is_cdb_field ( void   ) 

This fonction send the UFI status FAIL because CDB field is invalid.

Definition at line 792 of file scsi_decoder.c.

References SBC_ASC_INVALID_FIELD_IN_CDB, Sbc_build_sense, Sbc_send_failed, and SBC_SENSE_KEY_ILLEGAL_REQUEST.


Generated on Fri May 15 15:41:45 2009 for ATMEL by  doxygen 1.5.3