Line 0
Link Here
|
|
|
1 |
--- uscsi_subr.c.orig 2011-11-15 19:51:44.387439246 +0200 |
2 |
+++ uscsi_subr.c 2011-11-27 16:41:07.706327140 +0200 |
3 |
@@ -412,6 +412,7 @@ uscsi_command(int flags, struct uscsi_de |
4 |
struct scsi_sense_data *cam_sense_data; |
5 |
union ccb ccb; |
6 |
uint32_t cam_sense; |
7 |
+ u_int sense_len; |
8 |
uint8_t *keypos; |
9 |
int camflags; |
10 |
|
11 |
@@ -468,17 +469,33 @@ uscsi_command(int flags, struct uscsi_de |
12 |
|
13 |
/* print sense info */ |
14 |
cam_sense_data = &ccb.csio.sense_data; |
15 |
+ sense_len = ccb.csio.sense_len - ccb.csio.sense_resid; |
16 |
if (uscsi_sense) { |
17 |
+#if __FreeBSD_version > 900043 |
18 |
+ int error_code, sense_key; |
19 |
+ uint8_t sks[3]; |
20 |
+ |
21 |
+ scsi_extract_sense_len(cam_sense_data, sense_len, |
22 |
+ &error_code, &sense_key, |
23 |
+ &uscsi_sense->asc, &uscsi_sense->ascq, /*show_errors*/ 0); |
24 |
+ |
25 |
+ if ((scsi_get_sks(cam_sense_data, sense_len, sks) == 0)) { |
26 |
+ uscsi_sense->skey_valid = 1; |
27 |
+ uscsi_sense->sense_key = (sks[1] << 8) | sks[2]; |
28 |
+ } else |
29 |
+ uscsi_sense->skey_valid = 0; |
30 |
+#else |
31 |
uscsi_sense->asc = cam_sense_data->add_sense_code; |
32 |
uscsi_sense->ascq = cam_sense_data->add_sense_code_qual; |
33 |
keypos = cam_sense_data->sense_key_spec; |
34 |
uscsi_sense->skey_valid = keypos[0] & 128; |
35 |
uscsi_sense->sense_key = (keypos[1] << 8) | (keypos[2]); |
36 |
+#endif |
37 |
} |
38 |
|
39 |
uscsi_print_sense((char *) disc->dev_name, |
40 |
cmd, cmdlen, |
41 |
- (uint8_t *) cam_sense_data, 8 + cam_sense_data->extra_len, 1); |
42 |
+ (uint8_t *) cam_sense_data, sense_len, 1); |
43 |
|
44 |
return EFAULT; |
45 |
} |