git: 0eacc5c43321 - main - cam/cd: Add comments about ASC/ASCQ codes
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 27 Jan 2025 03:41:37 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=0eacc5c4332176b63d665f91f73f8be4a4294afb commit 0eacc5c4332176b63d665f91f73f8be4a4294afb Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2025-01-27 03:32:37 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2025-01-27 03:35:20 +0000 cam/cd: Add comments about ASC/ASCQ codes I added these comments to da a while ago, and they seem good. Sponsored by: Netflix --- sys/cam/scsi/scsi_cd.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c index 540419d4f153..d9a40544e845 100644 --- a/sys/cam/scsi/scsi_cd.c +++ b/sys/cam/scsi/scsi_cd.c @@ -466,6 +466,7 @@ cdasync(void *callback_arg, uint32_t code, if (xpt_path_periph(ccb->ccb_h.path) != periph && scsi_extract_sense_ccb(ccb, &error_code, &sense_key, &asc, &ascq)) { + /* 28/0: NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED */ if (asc == 0x28 && ascq == 0x00) disk_media_changed(softc->disk, M_NOWAIT); } @@ -1270,6 +1271,8 @@ cddone(struct cam_periph *periph, union ccb *done_ccb) * CDROM or WORM device, as long as it * doesn't return a "Logical unit not * supported" (0x25) error. + * + * 25/0: LOGICAL UNIT NOT SUPPORTED */ if ((have_sense) && (asc != 0x25) && (error_code == SSD_CURRENT_ERROR @@ -2887,13 +2890,19 @@ cderror(union ccb *ccb, uint32_t cam_flags, uint32_t sense_flags) error = cd6byteworkaround(ccb); } else if (scsi_extract_sense_ccb(ccb, &error_code, &sense_key, &asc, &ascq)) { - if (sense_key == SSD_KEY_ILLEGAL_REQUEST) + if (sense_key == SSD_KEY_ILLEGAL_REQUEST) { error = cd6byteworkaround(ccb); - else if (sense_key == SSD_KEY_UNIT_ATTENTION && - asc == 0x28 && ascq == 0x00) + } else if (sense_key == SSD_KEY_UNIT_ATTENTION && + asc == 0x28 && ascq == 0x00) { + /* 28/0: NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED */ disk_media_changed(softc->disk, M_NOWAIT); - else if (sense_key == SSD_KEY_NOT_READY && + } else if (sense_key == SSD_KEY_NOT_READY && asc == 0x3a && (softc->flags & CD_FLAG_SAW_MEDIA)) { + /* 3a/0: MEDIUM NOT PRESENT */ + /* 3a/1: MEDIUM NOT PRESENT - TRAY CLOSED */ + /* 3a/2: MEDIUM NOT PRESENT - TRAY OPEN */ + /* 3a/3: MEDIUM NOT PRESENT - LOADABLE */ + /* 3a/4: MEDIUM NOT PRESENT - MEDIUM AUXILIARY MEMORY ACCESSIBLE */ softc->flags &= ~CD_FLAG_SAW_MEDIA; disk_media_gone(softc->disk, M_NOWAIT); }