mirror of
https://git.freebsd.org/ports.git
synced 2025-04-28 09:36:41 -04:00
45 lines
1.4 KiB
C
45 lines
1.4 KiB
C
--- uscsi_subr.c.orig 2017-05-25 17:18:25 UTC
|
|
+++ uscsi_subr.c
|
|
@@ -412,6 +412,7 @@ uscsi_command(int flags, struct uscsi_dev *disc,
|
|
struct scsi_sense_data *cam_sense_data;
|
|
union ccb ccb;
|
|
uint32_t cam_sense;
|
|
+ u_int sense_len;
|
|
uint8_t *keypos;
|
|
int camflags;
|
|
|
|
@@ -468,17 +469,33 @@ uscsi_command(int flags, struct uscsi_dev *disc,
|
|
|
|
/* print sense info */
|
|
cam_sense_data = &ccb.csio.sense_data;
|
|
+ sense_len = ccb.csio.sense_len - ccb.csio.sense_resid;
|
|
if (uscsi_sense) {
|
|
+#if __FreeBSD_version > 900043
|
|
+ int error_code, sense_key;
|
|
+ uint8_t sks[3];
|
|
+
|
|
+ scsi_extract_sense_len(cam_sense_data, sense_len,
|
|
+ &error_code, &sense_key,
|
|
+ &uscsi_sense->asc, &uscsi_sense->ascq, /*show_errors*/ 0);
|
|
+
|
|
+ if ((scsi_get_sks(cam_sense_data, sense_len, sks) == 0)) {
|
|
+ uscsi_sense->skey_valid = 1;
|
|
+ uscsi_sense->sense_key = (sks[1] << 8) | sks[2];
|
|
+ } else
|
|
+ uscsi_sense->skey_valid = 0;
|
|
+#else
|
|
uscsi_sense->asc = cam_sense_data->add_sense_code;
|
|
uscsi_sense->ascq = cam_sense_data->add_sense_code_qual;
|
|
keypos = cam_sense_data->sense_key_spec;
|
|
uscsi_sense->skey_valid = keypos[0] & 128;
|
|
uscsi_sense->sense_key = (keypos[1] << 8) | (keypos[2]);
|
|
+#endif
|
|
}
|
|
|
|
uscsi_print_sense((char *) disc->dev_name,
|
|
cmd, cmdlen,
|
|
- (uint8_t *) cam_sense_data, 8 + cam_sense_data->extra_len, 1);
|
|
+ (uint8_t *) cam_sense_data, sense_len, 1);
|
|
|
|
return EFAULT;
|
|
}
|