Changeset View
Changeset View
Standalone View
Standalone View
sys/cam/scsi/scsi_cd.c
Show First 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | #define CD_Q_BIT_STRING \ | ||||
"\002BCD_TRACKS" \ | "\002BCD_TRACKS" \ | ||||
"\00510_BYTE_ONLY" \ | "\00510_BYTE_ONLY" \ | ||||
"\007RETRY_BUSY" | "\007RETRY_BUSY" | ||||
typedef enum { | typedef enum { | ||||
CD_FLAG_NEW_DISC = 0x0002, | CD_FLAG_NEW_DISC = 0x0002, | ||||
CD_FLAG_DISC_LOCKED = 0x0004, | CD_FLAG_DISC_LOCKED = 0x0004, | ||||
CD_FLAG_DISC_REMOVABLE = 0x0008, | CD_FLAG_DISC_REMOVABLE = 0x0008, | ||||
CD_FLAG_SAW_MEDIA = 0x0010, | |||||
CD_FLAG_ACTIVE = 0x0080, | CD_FLAG_ACTIVE = 0x0080, | ||||
CD_FLAG_SCHED_ON_COMP = 0x0100, | CD_FLAG_SCHED_ON_COMP = 0x0100, | ||||
CD_FLAG_RETRY_UA = 0x0200, | CD_FLAG_RETRY_UA = 0x0200, | ||||
CD_FLAG_VALID_MEDIA = 0x0400, | CD_FLAG_VALID_MEDIA = 0x0400, | ||||
CD_FLAG_VALID_TOC = 0x0800, | CD_FLAG_VALID_TOC = 0x0800, | ||||
CD_FLAG_SCTX_INIT = 0x1000, | CD_FLAG_SCTX_INIT = 0x1000, | ||||
CD_FLAG_MEDIA_WAIT = 0x2000, | CD_FLAG_MEDIA_WAIT = 0x2000, | ||||
CD_FLAG_MEDIA_SCAN_ACT = 0x4000 | CD_FLAG_MEDIA_SCAN_ACT = 0x4000 | ||||
▲ Show 20 Lines • Show All 1,370 Lines • ▼ Show 20 Lines | case CD_CCB_MEDIA_SIZE: | ||||
} | } | ||||
free(rdcap, M_SCSICD); | free(rdcap, M_SCSICD); | ||||
if (error == 0) { | if (error == 0) { | ||||
softc->disk->d_sectorsize = softc->params.blksize; | softc->disk->d_sectorsize = softc->params.blksize; | ||||
softc->disk->d_mediasize = | softc->disk->d_mediasize = | ||||
(off_t)softc->params.blksize * | (off_t)softc->params.blksize * | ||||
softc->params.disksize; | softc->params.disksize; | ||||
softc->flags |= CD_FLAG_SAW_MEDIA | CD_FLAG_VALID_MEDIA; | softc->flags |= CD_FLAG_VALID_MEDIA; | ||||
softc->state = CD_STATE_MEDIA_TOC_HDR; | softc->state = CD_STATE_MEDIA_TOC_HDR; | ||||
} else { | } else { | ||||
softc->flags &= ~(CD_FLAG_VALID_MEDIA | | softc->flags &= ~(CD_FLAG_VALID_MEDIA | | ||||
CD_FLAG_VALID_TOC); | CD_FLAG_VALID_TOC); | ||||
bioq_flush(&softc->bio_queue, NULL, EINVAL); | bioq_flush(&softc->bio_queue, NULL, EINVAL); | ||||
softc->state = CD_STATE_MEDIA_ALLOW; | softc->state = CD_STATE_MEDIA_ALLOW; | ||||
cdmediaprobedone(periph); | cdmediaprobedone(periph); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,379 Lines • ▼ Show 20 Lines | error = cd6byteworkaround(ccb); | ||||
&error_code, &sense_key, &asc, &ascq)) { | &error_code, &sense_key, &asc, &ascq)) { | ||||
if (sense_key == SSD_KEY_ILLEGAL_REQUEST) { | if (sense_key == SSD_KEY_ILLEGAL_REQUEST) { | ||||
error = cd6byteworkaround(ccb); | error = cd6byteworkaround(ccb); | ||||
} else if (sense_key == SSD_KEY_UNIT_ATTENTION && | } else if (sense_key == SSD_KEY_UNIT_ATTENTION && | ||||
asc == 0x28 && ascq == 0x00) { | asc == 0x28 && ascq == 0x00) { | ||||
/* 28/0: NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED */ | /* 28/0: NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED */ | ||||
disk_media_changed(softc->disk, M_NOWAIT); | 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)) { | asc == 0x3a && (softc->flags & CD_FLAG_VALID_MEDIA)) { | ||||
/* 3a/0: MEDIUM NOT PRESENT */ | /* 3a/0: MEDIUM NOT PRESENT */ | ||||
/* 3a/1: MEDIUM NOT PRESENT - TRAY CLOSED */ | /* 3a/1: MEDIUM NOT PRESENT - TRAY CLOSED */ | ||||
/* 3a/2: MEDIUM NOT PRESENT - TRAY OPEN */ | /* 3a/2: MEDIUM NOT PRESENT - TRAY OPEN */ | ||||
/* 3a/3: MEDIUM NOT PRESENT - LOADABLE */ | /* 3a/3: MEDIUM NOT PRESENT - LOADABLE */ | ||||
/* 3a/4: MEDIUM NOT PRESENT - MEDIUM AUXILIARY MEMORY ACCESSIBLE */ | /* 3a/4: MEDIUM NOT PRESENT - MEDIUM AUXILIARY MEMORY ACCESSIBLE */ | ||||
softc->flags &= ~CD_FLAG_SAW_MEDIA; | softc->flags &= ~CD_FLAG_VALID_MEDIA; | ||||
disk_media_gone(softc->disk, M_NOWAIT); | disk_media_gone(softc->disk, M_NOWAIT); | ||||
} | } | ||||
} | } | ||||
if (error == ERESTART) | if (error == ERESTART) | ||||
return (error); | return (error); | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 1,149 Lines • Show Last 20 Lines |