Lines Matching defs:sd

1 /*	$NetBSD: sd.c,v 1.337 2024/09/28 08:57:47 mlelstv Exp $	*/
50 __KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.337 2024/09/28 08:57:47 mlelstv Exp $");
133 CFATTACH_DECL3_NEW(sd, sizeof(struct sd_softc), sdmatch, sdattach, sddetach,
250 struct sd_softc *sd = device_private(self);
251 struct dk_softc *dksc = &sd->sc_dksc;
255 struct disk_parms *dp = &sd->params;
260 sd->type = (sa->sa_inqbuf.type & SID_TYPE);
261 memcpy(sd->name, sa->sa_inqbuf.product, uimin(16, sizeof(sd->name)));
262 memcpy(sd->typename, sa->sa_inqbuf.product, uimin(16, sizeof(sd->typename)));
264 if (sd->type == T_SIMPLE_DIRECT)
271 sd->flags |= SDF_ANCIENT;
291 callout_init(&sd->sc_callout, 0);
296 sd->sc_periph = periph;
325 result = sd_get_parms(sd, &sd->params, XS_CTL_DISCOVERY);
373 struct sd_softc *sd = device_private(self);
374 struct dk_softc *dksc = &sd->sc_dksc;
375 struct scsipi_periph *periph = sd->sc_periph;
394 callout_halt(&sd->sc_callout, NULL);
414 callout_destroy(&sd->sc_callout);
427 struct sd_softc *sd = device_private(self);
428 struct scsipi_periph *periph = sd->sc_periph;
484 param_error = sd_get_parms(sd, &sd->params, 0);
515 struct sd_softc *sd;
522 sd = device_lookup_private(&sd_cd, unit);
523 if (sd == NULL)
525 dksc = &sd->sc_dksc;
530 periph = sd->sc_periph;
560 struct sd_softc *sd = device_private(self);
561 struct dk_softc *dksc = &sd->sc_dksc;
562 struct scsipi_periph *periph = sd->sc_periph;
569 if ((sd->flags & SDF_DIRTY) != 0) {
570 if (sd_flush(sd, 0)) {
573 sd->flags &= ~SDF_FLUSHING;
575 sd->flags &= ~(SDF_FLUSHING|SDF_DIRTY);
601 struct sd_softc *sd;
606 sd = device_lookup_private(&sd_cd, unit);
607 dksc = &sd->sc_dksc;
620 struct sd_softc *sd = device_lookup_private(&sd_cd, SDUNIT(bp->b_dev));
621 struct dk_softc *dksc = &sd->sc_dksc;
622 struct scsipi_periph *periph = sd->sc_periph;
624 SC_DEBUG(sd->sc_periph, SCSIPI_DB2, ("sdstrategy "));
625 SC_DEBUG(sd->sc_periph, SCSIPI_DB1,
654 struct sd_softc *sd = device_private(dev);
655 struct scsipi_periph *periph = sd->sc_periph;
701 sd->flags |= SDF_DIRTY;
703 if (sd->params.blksize == DEV_BSIZE)
706 nblks = howmany(bp->b_bcount, sd->params.blksize);
783 callout_reset(&sd->sc_callout, hz / 2, sdrestart, sd);
806 struct sd_softc *sd = v;
807 struct dk_softc *dksc = &sd->sc_dksc;
821 struct sd_softc *sd = device_private(periph->periph_dev);
822 struct dk_softc *dksc = &sd->sc_dksc;
843 struct sd_softc *sd = device_private(xs->xs_periph->periph_dev);
844 struct dk_softc *dksc = &sd->sc_dksc;
847 if (sd->flags & SDF_FLUSHING) {
849 sd->flags &= ~(SDF_FLUSHING|SDF_DIRTY);
868 struct sd_softc *sd = device_lookup_private(&sd_cd, SDUNIT(bp->b_dev));
869 struct dk_softc *dksc = &sd->sc_dksc;
883 if ((sd->flags & SDF_ANCIENT) &&
884 ((sd->sc_periph->periph_flags &
892 scsipi_adapter_minphys(sd->sc_periph->periph_channel, bp);
931 struct sd_softc *sd = device_lookup_private(&sd_cd, SDUNIT(dev));
932 struct dk_softc *dksc = &sd->sc_dksc;
933 struct scsipi_periph *periph = sd->sc_periph;
938 SC_DEBUG(sd->sc_periph, SCSIPI_DB2, ("sdioctl 0x%lx ", cmd));
981 return (sd_getcache(sd, (int *) addr));
986 return (sd_setcache(sd, *(int *) addr));
995 if (((sd->flags & SDF_DIRTY) != 0 || *(int *)addr != 0)) {
996 error = sd_flush(sd, 0);
998 sd->flags &= ~SDF_FLUSHING;
1001 sd->flags &= ~(SDF_FLUSHING|SDF_DIRTY);
1020 struct sd_softc *sd = device_private(self);
1022 strncpy(lp->d_typename, sd->name, 16);
1023 lp->d_rpm = sd->params.rot_rate;
1024 if (sd->sc_periph->periph_flags & PERIPH_REMOVABLE)
1031 struct sd_softc *sd = device_private(self);
1032 struct dk_softc *dksc = &sd->sc_dksc;
1039 if ((sd->flags & SDF_DIRTY) != 0) {
1040 if (sd_flush(sd, XS_CTL_NOSLEEP|XS_CTL_POLL)) {
1043 sd->flags &= ~SDF_FLUSHING;
1045 sd->flags &= ~(SDF_FLUSHING|SDF_DIRTY);
1065 struct sd_softc *sd = device_private(periph->periph_dev);
1066 struct dk_softc *dksc = &sd->sc_dksc;
1155 struct sd_softc *sd;
1160 sd = device_lookup_private(&sd_cd, unit);
1161 if (sd == NULL)
1163 dksc = &sd->sc_dksc;
1181 struct sd_softc *sd;
1187 if ((sd = device_lookup_private(&sd_cd, unit)) == NULL)
1189 dksc = &sd->sc_dksc;
1194 periph = sd->sc_periph;
1206 struct sd_softc *sd = device_private(dev);
1207 struct dk_softc *dksc = &sd->sc_dksc;
1215 periph = sd->sc_periph;
1261 printf("sd%d: dump addr 0x%x, blk %d\n", unit, va, blkno);
1269 sd_mode_sense(struct sd_softc *sd, u_int8_t byte2, void *sense, size_t size,
1273 if ((sd->sc_periph->periph_quirks & PQUIRK_ONLYBIG) &&
1274 !(sd->sc_periph->periph_quirks & PQUIRK_NOBIGMODESENSE)) {
1276 return scsipi_mode_sense_big(sd->sc_periph, byte2, page, sense,
1281 return scsipi_mode_sense(sd->sc_periph, byte2, page, sense,
1288 sd_mode_select(struct sd_softc *sd, u_int8_t byte2, void *sense, size_t size,
1296 return scsipi_mode_select_big(sd->sc_periph, byte2, sense,
1303 return scsipi_mode_select(sd->sc_periph, byte2, sense,
1406 sd_get_simplifiedparms(struct sd_softc *sd, struct disk_parms *dp, int flags)
1430 if ((blocks = sd_read_capacity(sd->sc_periph, &blksize, flags)) == 0)
1433 error = scsipi_mode_sense(sd->sc_periph, SMS_DBD, 6,
1443 if (!sd_validate_blksize(sd->sc_periph, dp->blksize))
1469 sd_get_capacity(struct sd_softc *sd, struct disk_parms *dp, int flags)
1478 dp->disksize = blocks = sd_read_capacity(sd->sc_periph, &blksize,
1492 error = scsipi_command(sd->sc_periph,
1531 error = sd_mode_sense(sd, 0, &scsipi_sense,
1554 if (!sd_validate_blksize(sd->sc_periph, blksize))
1563 sd_get_parms_page4(struct sd_softc *sd, struct disk_parms *dp, int flags)
1574 error = sd_mode_sense(sd, byte2, &scsipi_sense,
1617 SC_DEBUG(sd->sc_periph, SCSIPI_DB3,
1648 sd_get_parms_page5(struct sd_softc *sd, struct disk_parms *dp, int flags)
1659 error = sd_mode_sense(sd, 0, &scsipi_sense,
1702 SC_DEBUG(sd->sc_periph, SCSIPI_DB3,
1726 sd_get_parms(struct sd_softc *sd, struct disk_parms *dp, int flags)
1728 struct dk_softc *dksc = &sd->sc_dksc;
1735 if (sd->type == T_SIMPLE_DIRECT) {
1736 error = sd_get_simplifiedparms(sd, dp, flags);
1742 error = sd_get_capacity(sd, dp, flags);
1746 if (sd->type == T_OPTICAL)
1749 if (sd->sc_periph->periph_flags & PERIPH_REMOVABLE) {
1750 if (!sd_get_parms_page5(sd, dp, flags) ||
1751 !sd_get_parms_page4(sd, dp, flags))
1754 if (!sd_get_parms_page4(sd, dp, flags) ||
1755 !sd_get_parms_page5(sd, dp, flags))
1762 if (!sd->sc_periph->periph_channel->chan_adapter->adapt_getgeom ||
1763 !(*sd->sc_periph->periph_channel->chan_adapter->adapt_getgeom)
1764 (sd->sc_periph, dp, dp->disksize)) {
1777 sd_set_geometry(sd);
1783 sd_flush(struct sd_softc *sd, int flags)
1785 struct scsipi_periph *periph = sd->sc_periph;
1806 sd->flags |= SDF_FLUSHING;
1815 sd_getcache(struct sd_softc *sd, int *bitsp)
1817 struct scsipi_periph *periph = sd->sc_periph;
1829 error = sd_mode_sense(sd, SMS_DBD, &scsipi_sense,
1858 error = sd_mode_sense(sd, SMS_DBD, &scsipi_sense,
1879 sd_setcache(struct sd_softc *sd, int bits)
1881 struct scsipi_periph *periph = sd->sc_periph;
1892 error = sd_mode_sense(sd, SMS_DBD, &scsipi_sense,
1922 return (sd_mode_select(sd, byte2|SMS_PF, &scsipi_sense,
1928 sd_set_geometry(struct sd_softc *sd)
1930 struct dk_softc *dksc = &sd->sc_dksc;
1935 dg->dg_secperunit = sd->params.disksize;
1936 dg->dg_secsize = sd->params.blksize;
1937 dg->dg_nsectors = sd->params.sectors;
1938 dg->dg_ntracks = sd->params.heads;
1939 dg->dg_ncylinders = sd->params.cyls;
1941 disk_set_info(dksc->sc_dev, &dksc->sc_dkdev, sd->typename);