Module Name: src Committed By: palle Date: Mon Jun 10 19:54:24 UTC 2024
Modified Files: src/sys/arch/sparc64/dev: vdsk.c Log Message: sun4v: add incomplete implementation of the CD-specific READ_DISCINFO and READ_TRACKINFO - probably needs some more work though... To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/sparc64/dev/vdsk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sparc64/dev/vdsk.c diff -u src/sys/arch/sparc64/dev/vdsk.c:1.12 src/sys/arch/sparc64/dev/vdsk.c:1.13 --- src/sys/arch/sparc64/dev/vdsk.c:1.12 Sun Jun 9 19:13:54 2024 +++ src/sys/arch/sparc64/dev/vdsk.c Mon Jun 10 19:54:24 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: vdsk.c,v 1.12 2024/06/09 19:13:54 palle Exp $ */ +/* $NetBSD: vdsk.c,v 1.13 2024/06/10 19:54:24 palle Exp $ */ /* $OpenBSD: vdsk.c,v 1.46 2015/01/25 21:42:13 kettenis Exp $ */ /* * Copyright (c) 2009, 2011 Mark Kettenis @@ -219,6 +219,8 @@ void vdsk_scsi_inquiry(struct vdsk_softc void vdsk_scsi_capacity(struct vdsk_softc *sc, struct scsipi_xfer *); void vdsk_scsi_capacity16(struct vdsk_softc *sc, struct scsipi_xfer *); void vdsk_scsi_report_luns(struct vdsk_softc *sc, struct scsipi_xfer *); +void vdsk_scsi_read_discinfo(struct vdsk_softc *sc, struct scsipi_xfer *); +void vdsk_scsi_read_trackinfo(struct vdsk_softc *sc, struct scsipi_xfer *); void vdsk_scsi_done(struct scsipi_xfer *, int); int @@ -1049,6 +1051,14 @@ vdsk_scsi_cmd(struct vdsk_softc *sc, str vdsk_scsi_report_luns(sc, xs); return; + case READ_DISCINFO: + vdsk_scsi_read_discinfo(sc, xs); + return; + + case READ_TRACKINFO: + vdsk_scsi_read_trackinfo(sc, xs); + return; + case SCSI_TEST_UNIT_READY: case START_STOP: case SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL: @@ -1340,6 +1350,32 @@ vdsk_scsi_report_luns(struct vdsk_softc } void +vdsk_scsi_read_discinfo(struct vdsk_softc *sc, struct scsipi_xfer *xs) +{ + DPRINTF(("%s()\n", __FUNCTION__)); + + struct scsipi_read_discinfo_data read_discinfo_data; + bzero(&read_discinfo_data, sizeof(read_discinfo_data)); + + bcopy(&read_discinfo_data, xs->data, MIN(sizeof(read_discinfo_data), xs->datalen)); + + vdsk_scsi_done(xs, XS_NOERROR); +} + +void +vdsk_scsi_read_trackinfo(struct vdsk_softc *sc, struct scsipi_xfer *xs) +{ + DPRINTF(("%s()\n", __FUNCTION__)); + + struct scsipi_read_trackinfo_data read_trackinfo_data; + bzero(&read_trackinfo_data, sizeof(read_trackinfo_data)); + + bcopy(&read_trackinfo_data, xs->data, MIN(sizeof(read_trackinfo_data), xs->datalen)); + + vdsk_scsi_done(xs, XS_NOERROR); +} + +void vdsk_scsi_done(struct scsipi_xfer *xs, int error) { xs->error = error;