Lines Matching refs:softc

367 	struct cd_softc *softc;  in cdoninvalidate()  local
370 softc = (struct cd_softc *)periph->softc; in cdoninvalidate()
382 bioq_flush(&softc->bio_queue, NULL, ENXIO); in cdoninvalidate()
384 disk_gone(softc->disk); in cdoninvalidate()
390 struct cd_softc *softc; in cdcleanup() local
392 softc = (struct cd_softc *)periph->softc; in cdcleanup()
395 if ((softc->flags & CD_FLAG_SCTX_INIT) != 0 in cdcleanup()
396 && sysctl_ctx_free(&softc->sysctl_ctx) != 0) { in cdcleanup()
400 callout_drain(&softc->mediapoll_c); in cdcleanup()
401 disk_destroy(softc->disk); in cdcleanup()
402 free(softc, M_DEVBUF); in cdcleanup()
411 struct cd_softc *softc; in cdasync() local
455 softc = (struct cd_softc *)periph->softc; in cdasync()
467 disk_media_changed(softc->disk, M_NOWAIT); in cdasync()
473 softc = (struct cd_softc *)periph->softc; in cdasync()
474 if (softc->state == CD_STATE_NORMAL && !softc->tur) { in cdasync()
476 softc->tur = 1; in cdasync()
487 softc = (struct cd_softc *)periph->softc; in cdasync()
492 softc->flags |= CD_FLAG_RETRY_UA; in cdasync()
493 LIST_FOREACH(ccbh, &softc->pending_ccbs, periph_links.le) in cdasync()
508 struct cd_softc *softc; in cdsysctlinit() local
515 softc = (struct cd_softc *)periph->softc; in cdsysctlinit()
519 sysctl_ctx_init(&softc->sysctl_ctx); in cdsysctlinit()
521 softc->flags |= CD_FLAG_SCTX_INIT; in cdsysctlinit()
523 softc->sysctl_tree = SYSCTL_ADD_NODE_WITH_LABEL(&softc->sysctl_ctx, in cdsysctlinit()
528 if (softc->sysctl_tree == NULL) { in cdsysctlinit()
538 SYSCTL_ADD_PROC(&softc->sysctl_ctx,SYSCTL_CHILDREN(softc->sysctl_tree), in cdsysctlinit()
541 &softc->minimum_command_size, 0, cdcmdsizesysctl, "I", in cdsysctlinit()
587 struct cd_softc *softc; in cdregister() local
599 softc = (struct cd_softc *)malloc(sizeof(*softc),M_DEVBUF, in cdregister()
601 if (softc == NULL) { in cdregister()
607 LIST_INIT(&softc->pending_ccbs); in cdregister()
608 STAILQ_INIT(&softc->mode_queue); in cdregister()
609 softc->state = CD_STATE_PROBE; in cdregister()
610 bioq_init(&softc->bio_queue); in cdregister()
612 softc->flags |= CD_FLAG_DISC_REMOVABLE; in cdregister()
614 periph->softc = softc; in cdregister()
615 softc->periph = periph; in cdregister()
626 softc->quirks = ((struct cd_quirk_entry *)match)->quirks; in cdregister()
628 softc->quirks = CD_Q_NONE; in cdregister()
633 softc->quirks |= CD_Q_10_BYTE_ONLY; in cdregister()
635 TASK_INIT(&softc->sysctl_task, 0, cdsysctlinit, periph); in cdregister()
638 if (softc->quirks & CD_Q_10_BYTE_ONLY) in cdregister()
639 softc->minimum_command_size = 10; in cdregister()
641 softc->minimum_command_size = 6; in cdregister()
654 TUNABLE_INT_FETCH(tmpstr, &softc->minimum_command_size); in cdregister()
657 if (softc->minimum_command_size < 6) in cdregister()
658 softc->minimum_command_size = 6; in cdregister()
659 else if (softc->minimum_command_size > 6) in cdregister()
660 softc->minimum_command_size = 10; in cdregister()
674 softc->disk = disk_alloc(); in cdregister()
675 softc->disk->d_devstat = devstat_new_entry("cd", in cdregister()
681 softc->disk->d_open = cdopen; in cdregister()
682 softc->disk->d_close = cdclose; in cdregister()
683 softc->disk->d_strategy = cdstrategy; in cdregister()
684 softc->disk->d_gone = cddiskgonecb; in cdregister()
685 softc->disk->d_ioctl = cdioctl; in cdregister()
686 softc->disk->d_name = "cd"; in cdregister()
687 cam_strvis(softc->disk->d_descr, cgd->inq_data.vendor, in cdregister()
688 sizeof(cgd->inq_data.vendor), sizeof(softc->disk->d_descr)); in cdregister()
689 strlcat(softc->disk->d_descr, " ", sizeof(softc->disk->d_descr)); in cdregister()
690 cam_strvis(&softc->disk->d_descr[strlen(softc->disk->d_descr)], in cdregister()
692 sizeof(softc->disk->d_descr) - strlen(softc->disk->d_descr)); in cdregister()
693 softc->disk->d_unit = periph->unit_number; in cdregister()
694 softc->disk->d_drv1 = periph; in cdregister()
696 softc->disk->d_maxsize = DFLTPHYS; /* traditional default */ in cdregister()
698 softc->disk->d_maxsize = maxphys; /* for safety */ in cdregister()
700 softc->disk->d_maxsize = cpi.maxio; in cdregister()
701 softc->disk->d_flags = 0; in cdregister()
702 softc->disk->d_hba_vendor = cpi.hba_vendor; in cdregister()
703 softc->disk->d_hba_device = cpi.hba_device; in cdregister()
704 softc->disk->d_hba_subvendor = cpi.hba_subvendor; in cdregister()
705 softc->disk->d_hba_subdevice = cpi.hba_subdevice; in cdregister()
706 snprintf(softc->disk->d_attachment, sizeof(softc->disk->d_attachment), in cdregister()
720 callout_init_mtx(&softc->mediapoll_c, cam_periph_mtx(periph), 0); in cdregister()
721 if ((softc->flags & CD_FLAG_DISC_REMOVABLE) && in cdregister()
724 callout_reset_sbt(&softc->mediapoll_c, cd_poll_period * SBT_1S, in cdregister()
776 struct cd_softc *softc; in cdclose() local
779 softc = (struct cd_softc *)periph->softc; in cdclose()
791 if ((softc->flags & CD_FLAG_DISC_REMOVABLE) != 0) in cdclose()
798 softc->disk->d_devstat->flags |= DEVSTAT_BS_UNAVAILABLE; in cdclose()
803 softc->flags &= ~(CD_FLAG_VALID_MEDIA|CD_FLAG_VALID_TOC); in cdclose()
818 struct cd_softc *softc; in cdrunccb() local
823 softc = (struct cd_softc *)periph->softc; in cdrunccb()
826 softc->disk->d_devstat); in cdrunccb()
840 struct cd_softc *softc; in cdstrategy() local
847 softc = (struct cd_softc *)periph->softc; in cdstrategy()
861 bioq_disksort(&softc->bio_queue, bp); in cdstrategy()
867 if ((softc->flags & CD_FLAG_VALID_MEDIA) == 0) in cdstrategy()
879 struct cd_softc *softc; in cdstart() local
884 softc = (struct cd_softc *)periph->softc; in cdstart()
888 switch (softc->state) { in cdstart()
891 bp = bioq_first(&softc->bio_queue); in cdstart()
893 if (softc->tur) { in cdstart()
894 softc->tur = 0; in cdstart()
908 if (softc->tur) { in cdstart()
909 softc->tur = 0; in cdstart()
912 bioq_remove(&softc->bio_queue, bp); in cdstart()
930 softc->params.blksize, in cdstart()
931 bp->bio_bcount / softc->params.blksize, in cdstart()
938 if (softc->params.blksize == 2352) { in cdstart()
947 LIST_INSERT_HEAD(&softc->pending_ccbs, in cdstart()
949 softc->outstanding_cmds++; in cdstart()
952 if ((softc->flags & CD_FLAG_RETRY_UA) != 0) { in cdstart()
954 softc->flags &= ~CD_FLAG_RETRY_UA; in cdstart()
958 bp = bioq_first(&softc->bio_queue); in cdstart()
962 if (bp != NULL || softc->tur) { in cdstart()
990 if (softc->state == CD_STATE_PROBE) in cdstart()
1000 softc->disk->d_sectorsize = 2048; in cdstart()
1001 softc->disk->d_mediasize = 0; in cdstart()
1012 if (softc->state == CD_STATE_PROBE) in cdstart()
1026 if (softc->state == CD_STATE_MEDIA_PREVENT in cdstart()
1027 && (softc->flags & CD_FLAG_DISC_LOCKED) != 0) { in cdstart()
1028 softc->state = CD_STATE_MEDIA_SIZE; in cdstart()
1038 /*action*/ (softc->state == CD_STATE_MEDIA_ALLOW) ? in cdstart()
1044 if (softc->state == CD_STATE_MEDIA_ALLOW) in cdstart()
1054 bzero(&softc->toc, sizeof(softc->toc)); in cdstart()
1056 toch = &softc->toc.header; in cdstart()
1075 bzero(&softc->toc, sizeof(softc->toc)); in cdstart()
1084 /*data_ptr*/ (uint8_t *)&softc->toc, in cdstart()
1085 /*dxfer_len*/ softc->toc_read_len ? in cdstart()
1086 softc->toc_read_len : in cdstart()
1087 sizeof(softc->toc), in cdstart()
1098 leadout = &softc->leadout; in cdstart()
1123 struct cd_softc *softc; in cddone() local
1129 softc = (struct cd_softc *)periph->softc; in cddone()
1162 bioq_flush(&softc->bio_queue, NULL, EIO); in cddone()
1187 softc->outstanding_cmds--; in cddone()
1199 cdp = &softc->params; in cddone()
1200 announce_buf = softc->announce_temp; in cddone()
1338 sbuf_new(&sb, softc->announce_buf, CD_ANNOUNCE_SZ, in cddone()
1341 xpt_announce_quirks_sbuf(periph, &sb, softc->quirks, in cddone()
1350 taskqueue_enqueue(taskqueue_thread,&softc->sysctl_task); in cddone()
1352 softc->state = CD_STATE_NORMAL; in cddone()
1368 disk_create(softc->disk, DISK_VERSION); in cddone()
1430 softc->flags |= CD_FLAG_DISC_LOCKED; in cddone()
1432 softc->flags &= ~CD_FLAG_DISC_LOCKED; in cddone()
1433 softc->state = CD_STATE_MEDIA_SIZE; in cddone()
1437 softc->flags &= ~CD_FLAG_DISC_LOCKED; in cddone()
1438 softc->state = CD_STATE_NORMAL; in cddone()
1439 if (bioq_first(&softc->bio_queue) != NULL) in cddone()
1465 softc->params.disksize =scsi_4btoul(rdcap->addr) + 1; in cddone()
1466 softc->params.blksize = scsi_4btoul(rdcap->length); in cddone()
1469 if (softc->params.blksize == 0) in cddone()
1481 if (softc->params.blksize > 2048 in cddone()
1482 && softc->params.blksize <= 2352) in cddone()
1483 softc->params.blksize = 2048; in cddone()
1488 softc->disk->d_sectorsize = softc->params.blksize; in cddone()
1489 softc->disk->d_mediasize = in cddone()
1490 (off_t)softc->params.blksize * in cddone()
1491 softc->params.disksize; in cddone()
1492 softc->flags |= CD_FLAG_VALID_MEDIA; in cddone()
1493 softc->state = CD_STATE_MEDIA_TOC_HDR; in cddone()
1495 softc->flags &= ~(CD_FLAG_VALID_MEDIA | in cddone()
1497 bioq_flush(&softc->bio_queue, NULL, EINVAL); in cddone()
1498 softc->state = CD_STATE_MEDIA_ALLOW; in cddone()
1554 softc->flags &= ~CD_FLAG_VALID_TOC; in cddone()
1555 bzero(&softc->toc, sizeof(softc->toc)); in cddone()
1559 softc->state = CD_STATE_NORMAL; in cddone()
1569 if (bioq_first(&softc->bio_queue) != NULL) in cddone()
1578 toch = &softc->toc.header; in cddone()
1580 if (softc->quirks & CD_Q_BCD_TRACKS) { in cddone()
1592 num_entries > nitems(softc->toc.entries)) { in cddone()
1593 softc->flags &= ~CD_FLAG_VALID_TOC; in cddone()
1594 bzero(&softc->toc, sizeof(softc->toc)); in cddone()
1598 softc->state = CD_STATE_NORMAL; in cddone()
1608 if (bioq_first(&softc->bio_queue) != NULL) in cddone()
1612 softc->toc_read_len = num_entries * in cddone()
1614 softc->toc_read_len += sizeof(*toch); in cddone()
1616 softc->state = CD_STATE_MEDIA_TOC_FULL; in cddone()
1627 softc->toc.entries[cdindex - toch->starting_track] = in cddone()
1637 softc->state = CD_STATE_MEDIA_TOC_LEAD; in cddone()
1643 if (softc->quirks & CD_Q_BCD_TRACKS) { in cddone()
1645 softc->toc.entries[cdindex].track = in cddone()
1646 bcd2bin(softc->toc.entries[cdindex].track); in cddone()
1650 softc->flags |= CD_FLAG_VALID_TOC; in cddone()
1652 if ((softc->toc.entries[0].control & 4) == 0) { in cddone()
1653 softc->disk->d_sectorsize =softc->params.blksize = 2352; in cddone()
1654 softc->disk->d_mediasize = in cddone()
1655 (off_t)softc->params.blksize * in cddone()
1656 softc->params.disksize; in cddone()
1658 softc->state = CD_STATE_NORMAL; in cddone()
1667 if ((softc->disk->d_devstat->flags & DEVSTAT_BS_UNAVAILABLE)!=0) in cddone()
1668 softc->disk->d_devstat->flags &= in cddone()
1670 softc->disk->d_devstat->block_size = softc->params.blksize; in cddone()
1676 if (bioq_first(&softc->bio_queue) != NULL) in cddone()
1742 struct cd_softc *softc; in cdioctl() local
1748 softc = (struct cd_softc *)periph->softc; in cdioctl()
1768 if (((softc->flags & CD_FLAG_VALID_MEDIA) == 0) in cdioctl()
1827 if (softc->flags & CD_FLAG_VALID_TOC) { in cdioctl()
1832 th = &softc->toc.header; in cdioctl()
1846 sentry = &softc->toc.entries[st].addr; in cdioctl()
1847 eentry = &softc->toc.entries[et].addr; in cdioctl()
1863 if (softc->quirks & CD_Q_BCD_TRACKS) { in cdioctl()
1980 if (softc->quirks & CD_Q_BCD_TRACKS) in cdioctl()
1991 if (softc->quirks & CD_Q_BCD_TRACKS) in cdioctl()
2021 if (softc->quirks & CD_Q_BCD_TRACKS) { in cdioctl()
2078 if (softc->quirks & CD_Q_BCD_TRACKS) { in cdioctl()
2140 if (softc->quirks & CD_Q_BCD_TRACKS) in cdioctl()
2156 if (softc->quirks & CD_Q_BCD_TRACKS) { in cdioctl()
2203 if (softc->quirks & CD_Q_BCD_TRACKS) { in cdioctl()
2235 if (softc->quirks & CD_Q_BCD_TRACKS) in cdioctl()
2560 *(int *)addr = softc->params.blksize; in cdioctl()
2567 softc->disk->d_sectorsize = softc->params.blksize = *(int *)addr; in cdioctl()
2613 struct cd_softc *softc; in cdprevent() local
2619 softc = (struct cd_softc *)periph->softc; in cdprevent()
2622 && (softc->flags & CD_FLAG_DISC_LOCKED) == 0) in cdprevent()
2624 && (softc->flags & CD_FLAG_DISC_LOCKED) != 0)) { in cdprevent()
2645 softc->flags &= ~CD_FLAG_DISC_LOCKED; in cdprevent()
2647 softc->flags |= CD_FLAG_DISC_LOCKED; in cdprevent()
2654 struct cd_softc *softc; in cdmediaprobedone() local
2657 softc = (struct cd_softc *)periph->softc; in cdmediaprobedone()
2659 softc->flags &= ~CD_FLAG_MEDIA_SCAN_ACT; in cdmediaprobedone()
2661 if ((softc->flags & CD_FLAG_MEDIA_WAIT) != 0) { in cdmediaprobedone()
2662 softc->flags &= ~CD_FLAG_MEDIA_WAIT; in cdmediaprobedone()
2663 wakeup(&softc->toc); in cdmediaprobedone()
2676 struct cd_softc *softc; in cdcheckmedia() local
2680 softc = (struct cd_softc *)periph->softc; in cdcheckmedia()
2689 softc->flags |= CD_FLAG_MEDIA_WAIT; in cdcheckmedia()
2690 if ((softc->flags & CD_FLAG_MEDIA_SCAN_ACT) == 0) { in cdcheckmedia()
2691 softc->state = CD_STATE_MEDIA_PREVENT; in cdcheckmedia()
2692 softc->flags |= CD_FLAG_MEDIA_SCAN_ACT; in cdcheckmedia()
2698 error = msleep(&softc->toc, cam_periph_mtx(periph), PRIBIO,"cdmedia",0); in cdcheckmedia()
2704 if (error == 0 && (softc->flags & CD_FLAG_VALID_MEDIA) == 0) in cdcheckmedia()
2715 struct cd_softc *softc; in cd6byteworkaround() local
2720 softc = (struct cd_softc *)periph->softc; in cd6byteworkaround()
2741 STAILQ_FOREACH(params, &softc->mode_queue, links) { in cd6byteworkaround()
2760 softc->minimum_command_size = 10; in cd6byteworkaround()
2862 struct cd_softc *softc; in cderror() local
2867 softc = (struct cd_softc *)periph->softc; in cderror()
2886 disk_media_changed(softc->disk, M_NOWAIT); in cderror()
2888 asc == 0x3a && (softc->flags & CD_FLAG_VALID_MEDIA)) { in cderror()
2894 softc->flags &= ~CD_FLAG_VALID_MEDIA; in cderror()
2895 disk_media_gone(softc->disk, M_NOWAIT); in cderror()
2909 if (softc->quirks & CD_Q_RETRY_BUSY) in cderror()
2918 struct cd_softc *softc = periph->softc; in cdmediapoll() local
2920 if (softc->state == CD_STATE_NORMAL && !softc->tur && in cdmediapoll()
2921 softc->outstanding_cmds == 0) { in cdmediapoll()
2923 softc->tur = 1; in cdmediapoll()
2930 callout_schedule_sbt(&softc->mediapoll_c, in cdmediapoll()
3028 struct cd_softc *softc; in cdgetmode() local
3033 softc = (struct cd_softc *)periph->softc; in cdgetmode()
3039 data->cdb_size = softc->minimum_command_size; in cdgetmode()
3057 /* minimum_cmd_size */ softc->minimum_command_size, in cdgetmode()
3069 STAILQ_INSERT_TAIL(&softc->mode_queue, data, links); in cdgetmode()
3076 STAILQ_REMOVE(&softc->mode_queue, data, cd_mode_params, links); in cdgetmode()
3127 struct cd_softc *softc; in cdsetmode() local
3132 softc = (struct cd_softc *)periph->softc; in cdsetmode()
3148 cdb_size = softc->minimum_command_size; in cdsetmode()
3204 STAILQ_INSERT_TAIL(&softc->mode_queue, data, links); in cdsetmode()
3211 STAILQ_REMOVE(&softc->mode_queue, data, cd_mode_params, links); in cdsetmode()