diff options
| author | Kenneth D. Merry <ken@FreeBSD.org> | 2011-10-03 20:32:55 +0000 |
|---|---|---|
| committer | Kenneth D. Merry <ken@FreeBSD.org> | 2011-10-03 20:32:55 +0000 |
| commit | 1cc052e80fd45ab48416357521ed570077c418b9 (patch) | |
| tree | 7b282ccd4d59d892882bbd5ce805d71ea69df7bd /sys/dev/isp | |
| parent | db92413e6a46c7de98a4014edd7ba645ed880516 (diff) | |
Notes
Diffstat (limited to 'sys/dev/isp')
| -rw-r--r-- | sys/dev/isp/isp_freebsd.h | 26 |
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) |
