Home | History | Annotate | Download | only in boot

Lines Matching refs:sd

1 /*	$NetBSD: sd.c,v 1.6 2024/07/02 05:34:08 rin Exp $	*/
89 sd_read_capacity(struct sd_softc *sd, int *blksize)
110 if (scsi_command(sd, (void *)&cmd.cmd, sizeof(cmd.cmd),
131 if (scsi_command(sd, (void *)&cmd.cmd16, sizeof(cmd.cmd16),
143 sd_get_simplifiedparms(struct sd_softc *sd)
157 struct disk_parms *dp = &sd->sc_params;
168 if ((blocks = sd_read_capacity(sd, &blksize)) == 0)
171 error = scsi_mode_sense(sd, SMS_DBD, 6,
206 sd_get_capacity(struct sd_softc *sd)
208 struct disk_parms *dp = &sd->sc_params;
212 dp->disksize = blocks = sd_read_capacity(sd, &blksize);
225 error = scsi_command(sd,
256 error = scsi_mode_sense(sd, 0, 0, &scsipi_sense.header,
276 sd_get_parms_page4(struct sd_softc *sd, struct disk_parms *dp)
286 error = scsi_mode_sense(sd, byte2, 4, &scsipi_sense.header,
346 sd_get_parms_page5(struct sd_softc *sd, struct disk_parms *dp)
356 error = scsi_mode_sense(sd, 0, 5, &scsipi_sense.header,
410 sd_get_parms(struct sd_softc *sd)
412 struct disk_parms *dp = &sd->sc_params;
419 if (sd->sc_type == T_SIMPLE_DIRECT) {
420 error = sd_get_simplifiedparms(sd);
426 error = sd_get_capacity(sd);
430 if (sd->sc_type == T_OPTICAL)
433 if (sd->sc_flags & FLAGS_REMOVABLE) {
434 if (!sd_get_parms_page5(sd, dp) ||
435 !sd_get_parms_page4(sd, dp))
438 if (!sd_get_parms_page4(sd, dp) ||
439 !sd_get_parms_page5(sd, dp))
464 sdgetdefaultlabel(struct sd_softc *sd, struct disklabel *lp)
469 lp->d_secsize = sd->sc_params.blksize;
470 lp->d_ntracks = sd->sc_params.heads;
471 lp->d_nsectors = sd->sc_params.sectors;
472 lp->d_ncylinders = sd->sc_params.cyls;
478 lp->d_secperunit = sd->sc_params.disksize;
479 lp->d_rpm = sd->sc_params.rot_rate;
481 lp->d_flags = (sd->sc_flags & FLAGS_REMOVABLE) ? D_REMOVABLE : 0;
497 sdgetdisklabel(struct sd_softc *sd)
501 struct disklabel *lp = &sd->sc_label;
507 sdgetdefaultlabel(sd, lp);
518 if (sdstrategy(sd, F_READ, MBR_BBSECTOR, DEV_BSIZE, buf, &rsize))
536 if (sdstrategy(sd, F_READ, sector + LABELSECTOR, DEV_BSIZE,
540 msg = getdisklabel((const char *)buf + LABELOFFSET, &sd->sc_label);
542 printf("sd(%d,%d,%d,...): getdisklabel: %s\n",
543 sd->sc_bus, sd->sc_target, sd->sc_lun, msg);
546 if ((sd->sc_part >= lp->d_npartitions) ||
547 (lp->d_partitions[sd->sc_part].p_fstype == FS_UNUSED)) {
554 sd->sc_label.d_secsize,
555 sd->sc_label.d_nsectors,
556 sd->sc_label.d_ncylinders,
557 sd->sc_label.d_ntracks,
558 sd->sc_label.d_secpercyl));
569 struct sd_softc *sd;
583 DPRINTF(("sdopen: sd(%d,%d,%d)\n", target, lun, part));
585 sd = alloc(sizeof(struct sd_softc));
586 if (sd == NULL)
589 memset(sd, 0, sizeof(struct sd_softc));
591 sd->sc_part = part;
592 sd->sc_lun = lun;
593 sd->sc_target = target;
594 sd->sc_bus = bus;
597 error = scsi_inquire(sd, SCSIPI_INQUIRY_LENGTH_SCSI2, &buf);
602 sd->sc_type = inqbuf->device & SID_TYPE;
609 // sd->sc_cap |= PERIPH_CAP_TQING;
611 sd->sc_cap |= PERIPH_CAP_SYNC;
622 sd->sc_cap &= ~PERIPH_CAP_SYNC;
627 sd->sc_flags =
632 if ((error = scsi_command(sd, (void *)&cmd, sizeof(cmd), NULL, 0)) != 0)
635 if (sd->sc_flags & FLAGS_REMOVABLE) {
638 if (!(sd->sc_flags & FLAGS_MEDIA_LOADED))
639 sd->sc_flags |= FLAGS_MEDIA_LOADED;
641 if ((error = sd_get_parms(sd)) != 0)
644 strncpy(sd->sc_label.d_typename, inqbuf->product, 16);
645 if ((error = sdgetdisklabel(sd)) != 0)
648 f->f_devdata = sd;
668 struct sd_softc *sd;
686 sd = f;
687 lp = &sd->sc_label;
688 pp = &lp->d_partitions[sd->sc_part];
690 if (!(sd->sc_flags & FLAGS_MEDIA_LOADED))
729 error = scsi_command(sd, cmdp, cmdlen, buf, lp->d_secsize);