// SPDX-License-Identifier: GPL-2.0 /* -*-linux-c-*- * vendor-specific code for SCSI CD-ROM's goes here. * * This is needed becauce most of the new features (multisession and * the like) are too new to be included into the SCSI-II standard (to * be exact: there is'nt anything in my draft copy). * * Aug 1997: Ha! Got a SCSI-3 cdrom spec across my fingers. SCSI-3 does * multisession using the READ TOC command (like SONY). * * Rearranged stuff here: SCSI-3 is included allways, support * for NEC/TOSHIBA/HP commands is optional. * * Gerd Knorr <[email protected]> * * -------------------------------------------------------------------------- * * support for XA/multisession-CD's * * - NEC: Detection and support of multisession CD's. * * - TOSHIBA: Detection and support of multisession CD's. * Some XA-Sector tweaking, required for older drives. * * - SONY: Detection and support of multisession CD's. * added by Thomas Quinot <[email protected]> * * - PIONEER, HITACHI, PLEXTOR, MATSHITA, TEAC, PHILIPS: known to * work with SONY (SCSI3 now) code. * * - HP: Much like SONY, but a little different... (Thomas) * HP-Writers only ??? Maybe other CD-Writers work with this too ? * HP 6020 writers now supported. */ #include <linux/cdrom.h> #include <linux/errno.h> #include <linux/string.h> #include <linux/bcd.h> #include <linux/blkdev.h> #include <linux/slab.h> #include <scsi/scsi.h> #include <scsi/scsi_cmnd.h> #include <scsi/scsi_device.h> #include <scsi/scsi_host.h> #include <scsi/scsi_ioctl.h> #include "sr.h" #if 0 #define DEBUG #endif /* here are some constants to sort the vendors into groups */ #define VENDOR_SCSI3 … #define VENDOR_NEC … #define VENDOR_TOSHIBA … #define VENDOR_WRITER … #define VENDOR_CYGNAL_85ED … #define VENDOR_TIMEOUT … void sr_vendor_init(Scsi_CD *cd) { … } /* small handy function for switching block length using MODE SELECT, * used by sr_read_sector() */ int sr_set_blocklength(Scsi_CD *cd, int blocklength) { … } /* This function gets called after a media change. Checks if the CD is multisession, asks for offset etc. */ int sr_cd_check(struct cdrom_device_info *cdi) { … }