aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/isp
diff options
context:
space:
mode:
authorKenneth D. Merry <ken@FreeBSD.org>2011-10-03 20:32:55 +0000
committerKenneth D. Merry <ken@FreeBSD.org>2011-10-03 20:32:55 +0000
commit1cc052e80fd45ab48416357521ed570077c418b9 (patch)
tree7b282ccd4d59d892882bbd5ce805d71ea69df7bd /sys/dev/isp
parentdb92413e6a46c7de98a4014edd7ba645ed880516 (diff)
Notes
Diffstat (limited to 'sys/dev/isp')
-rw-r--r--sys/dev/isp/isp_freebsd.h26
1 files changed, 19 insertions, 7 deletions
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index 1fb5fc56a89fe..9d14039846a2b 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -438,11 +438,19 @@ default: \
#define XS_SNSP(ccb) (&(ccb)->sense_data)
#define XS_SNSLEN(ccb) \
- imin((sizeof((ccb)->sense_data)), ccb->sense_len)
+ imin((sizeof((ccb)->sense_data)), ccb->sense_len - ccb->sense_resid)
-#define XS_SNSKEY(ccb) ((ccb)->sense_data.flags & 0xf)
-#define XS_SNSASC(ccb) ((ccb)->sense_data.add_sense_code)
-#define XS_SNSASCQ(ccb) ((ccb)->sense_data.add_sense_code_qual)
+#define XS_SNSKEY(ccb) (scsi_get_sense_key(&(ccb)->sense_data, \
+ ccb->sense_len - ccb->sense_resid, \
+ /*show_errors*/ 1))
+
+#define XS_SNSASC(ccb) (scsi_get_asc(&(ccb)->sense_data, \
+ ccb->sense_len - ccb->sense_resid, \
+ /*show_errors*/ 1))
+
+#define XS_SNSASCQ(ccb) (scsi_get_ascq(&(ccb)->sense_data, \
+ ccb->sense_len - ccb->sense_resid, \
+ /*show_errors*/ 1))
#define XS_TAG_P(ccb) \
(((ccb)->ccb_h.flags & CAM_TAG_ACTION_VALID) && \
(ccb)->tag_action != CAM_TAG_ACTION_NONE)
@@ -476,9 +484,13 @@ default: \
#define XS_INITERR(ccb) \
XS_SETERR(ccb, CAM_REQ_INPROG), (ccb)->ccb_h.spriv_field0 = 0
-#define XS_SAVE_SENSE(xs, sense_ptr, sense_len) \
- (xs)->ccb_h.status |= CAM_AUTOSNS_VALID; \
- memcpy(&(xs)->sense_data, sense_ptr, imin(XS_SNSLEN(xs), sense_len))
+#define XS_SAVE_SENSE(xs, sense_ptr, slen) do { \
+ (xs)->ccb_h.status |= CAM_AUTOSNS_VALID; \
+ memcpy(&(xs)->sense_data, sense_ptr, imin(XS_SNSLEN(xs),\
+ slen)); \
+ if (slen < (xs)->sense_len) \
+ (xs)->sense_resid = (xs)->sense_len - slen; \
+ } while (0);
#define XS_SENSE_VALID(xs) (((xs)->ccb_h.status & CAM_AUTOSNS_VALID) != 0)