diff options
Diffstat (limited to 'sg_cmds.h')
-rw-r--r-- | sg_cmds.h | 130 |
1 files changed, 86 insertions, 44 deletions
@@ -35,17 +35,18 @@ * Additional sense data categories (to those defined in sg_lib.h). */ -#define SG_LIB_CAT_ILLEGAL_REQ_WITH_INFO 9 /* Illegal request (other than */ +#define SG_LIB_CAT_ILLEGAL_REQ_WITH_INFO 17 /* Illegal request (other than */ /* invalid opcode) plus 'info' field: */ /* [sk,asc,ascq: 0x5,*,*] */ -#define SG_LIB_CAT_MEDIUM_HARD_WITH_INFO 10 /* medium or hardware error */ +#define SG_LIB_CAT_MEDIUM_HARD_WITH_INFO 18 /* medium or hardware error */ /* sense key plus 'info' field: */ /* [sk,asc,ascq: 0x3/0x4,*,*] */ /* Invokes a FORMAT UNIT (SBC-3) command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Format unit not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_format_unit(int sg_fd, int fmtpinfo, int rto_req, int longlist, int fmtdata, int cmplist, int dlist_format, int timeout_secs, @@ -55,66 +56,76 @@ extern int sg_ll_format_unit(int sg_fd, int fmtpinfo, int rto_req, /* Invokes a SCSI GET CONFIGURATION command (MMC-3,4,5). * Returns 0 when successful, SG_LIB_CAT_INVALID_OP if command not * supported, SG_LIB_CAT_ILLEGAL_REQ if field in cdb not supported, - * else -1 */ + * SG_LIB_CAT_UNIT_ATTENTION, else -1 */ extern int sg_ll_get_config(int sg_fd, int rt, int starting, void * resp, int mx_resp_len, int noisy, int verbose); -/* Invokes a SCSI INQUIRY command and yields the response */ -/* Returns 0 when successful, -1 -> pass through failed, -2 -> bad response */ +/* Invokes a SCSI INQUIRY command and yields the response + * Returns 0 when successful, SG_LIB_CAT_INVALID_OP -> not supported, + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other errors */ extern int sg_ll_inquiry(int sg_fd, int cmddt, int evpd, int pg_op, void * resp, int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI LOG SELECT command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Log Select not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_log_select(int sg_fd, int pcr, int sp, int pc, + int pg_code, int subpg_code, unsigned char * paramp, int param_len, int noisy, int verbose); /* Invokes a SCSI LOG SENSE command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Log Sense not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_log_sense(int sg_fd, int ppc, int sp, int pc, int pg_code, - int paramp, unsigned char * resp, int mx_resp_len, - int noisy, int verbose); + int subpg_code, int paramp, unsigned char * resp, + int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI MODE SELECT (6) command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> invalid opcode, SG_LIB_CAT_ILLEGAL_REQ -> - * bad field in cdb, -1 -> other failure */ + * bad field in cdb, * SG_LIB_CAT_NOT_READY -> device not ready, + * SG_LIB_CAT_UNIT_ATTENTION, -1 -> other failure */ extern int sg_ll_mode_select6(int sg_fd, int pf, int sp, void * paramp, int param_len, int noisy, int verbose); /* Invokes a SCSI MODE SELECT (10) command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> invalid opcode, SG_LIB_CAT_ILLEGAL_REQ -> - * bad field in cdb, -1 -> other failure */ + * bad field in cdb, * SG_LIB_CAT_NOT_READY -> device not ready, + * SG_LIB_CAT_UNIT_ATTENTION, -1 -> other failure */ extern int sg_ll_mode_select10(int sg_fd, int pf, int sp, void * paramp, int param_len, int noisy, int verbose); /* Invokes a SCSI MODE SENSE (6) command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> invalid opcode, SG_LIB_CAT_ILLEGAL_REQ -> - * bad field in cdb, -1 -> other failure */ + * bad field in cdb, * SG_LIB_CAT_NOT_READY -> device not ready, + * SG_LIB_CAT_UNIT_ATTENTION, -1 -> other failure */ extern int sg_ll_mode_sense6(int sg_fd, int dbd, int pc, int pg_code, int sub_pg_code, void * resp, int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI MODE SENSE (10) command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> invalid opcode, SG_LIB_CAT_ILLEGAL_REQ -> - * bad field in cdb, -1 -> other failure */ + * bad field in cdb, * SG_LIB_CAT_NOT_READY -> device not ready, + * SG_LIB_CAT_UNIT_ATTENTION, -1 -> other failure */ extern int sg_ll_mode_sense10(int sg_fd, int llbaa, int dbd, int pc, int pg_code, int sub_pg_code, void * resp, int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI PERSISTENT RESERVE IN command (SPC). Returns 0 * when successful, SG_LIB_CAT_INVALID_OP if command not supported, - * SG_LIB_CAT_ILLEGAL_REQ if field in cdb not supported, else -1 */ + * SG_LIB_CAT_ILLEGAL_REQ if field in cdb not supported, + * SG_LIB_CAT_UNIT_ATTENTION, else -1 */ extern int sg_ll_persistent_reserve_in(int sg_fd, int rq_servact, void * resp, int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI PERSISTENT RESERVE OUT command (SPC). Returns 0 * when successful, SG_LIB_CAT_INVALID_OP if command not supported, - * SG_LIB_CAT_ILLEGAL_REQ if field in cdb not supported, else -1 */ + * SG_LIB_CAT_ILLEGAL_REQ if field in cdb not supported, + * SG_LIB_CAT_UNIT_ATTENTION, else -1 */ extern int sg_ll_persistent_reserve_out(int sg_fd, int rq_servact, int rq_scope, unsigned int rq_type, void * paramp, int param_len, @@ -124,28 +135,31 @@ extern int sg_ll_persistent_reserve_out(int sg_fd, int rq_servact, * prevent==0 allows removal, prevent==1 prevents removal ... * Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> command not supported - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_prevent_allow(int sg_fd, int prevent, int noisy, int verbose); /* Invokes a SCSI READ CAPACITY (10) command. Return of 0 -> success, - * SG_LIB_CAT_INVALID_OP -> invalid opcode, SG_LIB_CAT_MEDIA_CHANGED - * -> media changed, SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, - * -1 -> other failure */ + * SG_LIB_CAT_INVALID_OP -> invalid opcode, SG_LIB_CAT_UNIT_ATTENTION + * -> perhaps media changed, SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_readcap_10(int sg_fd, int pmi, unsigned int lba, void * resp, int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI READ CAPACITY (16) command. Returns 0 -> success, - * -1 -> failure, SG_LIB_CAT_MEDIA_CHANGED -> repeat, SG_LIB_CAT_INVALID_OP - * -> cdb not supported, SG_LIB_CAT_IlLEGAL_REQ -> bad field in cdb */ + * SG_LIB_CAT_UNIT_ATTENTION -> media changed??, SG_LIB_CAT_INVALID_OP + * -> cdb not supported, SG_LIB_CAT_IlLEGAL_REQ -> bad field in cdb + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_readcap_16(int sg_fd, int pmi, unsigned long long llba, void * resp, int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI READ DEFECT DATA (10) command (SBC). Return of 0 -> * success, SG_LIB_CAT_INVALID_OP -> invalid opcode, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_read_defect10(int sg_fd, int req_plist, int req_glist, int dl_format, void * resp, int mx_resp_len, int noisy, int verbose); @@ -155,34 +169,50 @@ extern int sg_ll_read_defect10(int sg_fd, int req_plist, int req_glist, * SG_LIB_CAT_INVALID_OP -> READ LONG(10) not supported, * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, * SG_LIB_CAT_ILLEGAL_REQ_WITH_INFO -> bad field in cdb, with info - * field written to 'offsetp', -1 -> other failure */ + * field written to 'offsetp', SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_read_long10(int sg_fd, int correct, unsigned long lba, void * resp, int xfer_len, int * offsetp, int noisy, int verbose); +/* Invokes a SCSI READ LONG (16) command (SBC). Note that 'xfer_len' + * is in bytes. Returns 0 -> success, + * SG_LIB_CAT_INVALID_OP -> READ LONG(16) not supported, + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, + * SG_LIB_CAT_ILLEGAL_REQ_WITH_INFO -> bad field in cdb, with info + * field written to 'offsetp', SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ +extern int sg_ll_read_long16(int sg_fd, int correct, unsigned long long llba, + void * resp, int xfer_len, int * offsetp, + int noisy, int verbose); + /* Invokes a SCSI READ MEDIA SERIAL NUMBER command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Read media serial number not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_read_media_serial_num(int sg_fd, void * resp, int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI REASSIGN BLOCKS command. Return of 0 -> success, - * SG_LIB_CAT_INVALID_OP -> invalid opcode, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_INVALID_OP -> invalid opcode, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_reassign_blocks(int sg_fd, int longlba, int longlist, void * paramp, int param_len, int noisy, int verbose); /* Invokes a SCSI RECEIVE DIAGNOSTIC RESULTS command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Receive diagnostic results not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_receive_diag(int sg_fd, int pcv, int pg_code, void * resp, int mx_resp_len, int noisy, int verbose); /* Invokes a SCSI REPORT DEVICE IDENTIFIER command. Return of 0 -> success, - * SG_LIB_CAT_INVALID_OP -> Read media serial number not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_INVALID_OP -> Report media serial number not supported, + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_report_dev_id(int sg_fd, void * resp, int max_resp_len, int noisy, int verbose); @@ -194,7 +224,8 @@ extern int sg_ll_report_luns(int sg_fd, int select_report, void * resp, /* Invokes a SCSI REPORT TARGET PORT GROUPS command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Report Target Port Groups not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, + * SG_LIB_CAT_UNIT_ATTENTION, -1 -> other failure */ extern int sg_ll_report_tgt_prt_grp(int sg_fd, void * resp, int mx_resp_len, int noisy, int verbose); @@ -207,7 +238,8 @@ extern int sg_ll_request_sense(int sg_fd, int desc, void * resp, /* Invokes a SCSI SEND DIAGNOSTIC command. Foreground, extended self tests can * take a long time, if so set long_duration flag. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Send diagnostic not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_send_diag(int sg_fd, int sf_code, int pf_bit, int sf_bit, int devofl_bit, int unitofl_bit, int long_duration, void * paramp, int param_len, int noisy, @@ -215,28 +247,33 @@ extern int sg_ll_send_diag(int sg_fd, int sf_code, int pf_bit, int sf_bit, /* Invokes a SCSI SET DEVICE IDENTIFIER command. Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Read media serial number not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_set_dev_id(int sg_fd, void * paramp, int param_len, int noisy, int verbose); /* Invokes a SCSI START STOP UNIT command (MMC + SBC). * Return of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Start stop unit not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure */ + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_start_stop_unit(int sg_fd, int immed, int fl_num, int power_cond, int fl, int loej, int start, int noisy, int verbose); /* Invokes a SCSI SYNCHRONIZE CACHE (10) command. Return of 0 -> success, - * -1 -> failure, SG_LIB_CAT_MEDIA_CHANGED -> repeat, SG_LIB_CAT_INVALID_OP - * -> cdb not supported, SG_LIB_CAT_IlLEGAL_REQ -> bad field in cdb */ + * SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_INVALID_OP -> cdb not supported, + * SG_LIB_CAT_IlLEGAL_REQ -> bad field in cdb + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_sync_cache_10(int sg_fd, int sync_nv, int immed, int group, unsigned int lba, unsigned int count, int noisy, int verbose); /* Invokes a SCSI TEST UNIT READY command. * 'pack_id' is just for diagnostics, safe to set to 0. - * Return of 0 -> success, -1 -> failure */ + * Return of 0 -> success, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_test_unit_ready(int sg_fd, int pack_id, int noisy, int verbose); @@ -244,7 +281,8 @@ extern int sg_ll_test_unit_ready(int sg_fd, int pack_id, int noisy, * 'pack_id' is just for diagnostics, safe to set to 0. * Looks for progress indicator if 'progress' non-NULL; * if found writes value [0..65535] else write -1. - * Return of 0 -> success, -1 -> failure */ + * Return of 0 -> success, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_test_unit_ready_progress(int sg_fd, int pack_id, int * progress, int noisy, int verbose); @@ -253,10 +291,10 @@ extern int sg_ll_test_unit_ready_progress(int sg_fd, int pack_id, * Note that 'veri_len' is in blocks while 'data_out_len' is in bytes. * Returns of 0 -> success, * SG_LIB_CAT_INVALID_OP -> Verify(10) not supported, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, * SG_LIB_CAT_MEDIUM_HARD -> medium or hardware error, no valid info, * SG_LIB_CAT_MEDIUM_HARD_WITH_INFO -> as previous, with valid info, - * -1 -> other failure */ + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_verify10(int sg_fd, int dpo, int bytechk, unsigned long lba, int veri_len, void * data_out, int data_out_len, unsigned long * infop, int noisy, int verbose); @@ -266,7 +304,8 @@ extern int sg_ll_verify10(int sg_fd, int dpo, int bytechk, unsigned long lba, * SG_LIB_CAT_INVALID_OP -> WRITE LONG(10) not supported, * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, * SG_LIB_CAT_ILLEGAL_REQ_WITH_INFO -> bad field in cdb, with info - * field written to 'offsetp', -1 -> other failure */ + * field written to 'offsetp', SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, -1 -> other failure */ extern int sg_ll_write_long10(int sg_fd, int cor_dis, unsigned long lba, void * data_out, int xfer_len, int * offsetp, int noisy, int verbose); @@ -286,8 +325,9 @@ struct sg_simple_inquiry_resp { char revision[5]; }; -/* Yields most of first 36 bytes of a standard INQUIRY (evpd==0) response. */ -/* Returns 0 when successful, -1 -> pass through failed, -2 -> bad response */ +/* Yields most of first 36 bytes of a standard INQUIRY (evpd==0) response. + * Returns 0 when successful, SG_LIB_CAT_INVALID_OP -> not supported, + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other errors */ extern int sg_simple_inquiry(int sg_fd, struct sg_simple_inquiry_resp * inq_data, int noisy, int verbose); @@ -311,7 +351,9 @@ extern int sg_mode_page_offset(const unsigned char * resp, int resp_len, * and saved values respectively. Each element should be NULL or * at least mx_mpage_len bytes long. * Return of 0 -> overall success, SG_LIB_CAT_INVALID_OP -> invalid opcode, - * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, -1 -> other failure. + * SG_LIB_CAT_ILLEGAL_REQ -> bad field in cdb, SG_LIB_CAT_UNIT_ATTENTION, + * SG_LIB_CAT_NOT_READY -> device not ready, + * SG_LIB_CAT_MALFORMED -> bad response, -1 -> other failure. * If success_mask pointer is not NULL then zeroes it then sets bit 0, 1, * 2 and/or 3 if the current, changeable, default and saved values * respectively have been fetched. If error on current page |