mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
				synced 2025-11-04 16:52:06 +10:00 
			
		
		
		
	Remove legacy CDROM drivers
They are all broken beyond repair. Given that nobody has complained about them (most haven't worked in 2.6 AT ALL), remove them from the tree. A new mitsumi driver that actually works is in progress, it'll get added when completed. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
		
							parent
							
								
									e654bc4393
								
							
						
					
					
						commit
						f3f541f9de
					
				@ -24,8 +24,6 @@ source "drivers/scsi/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/ata/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/cdrom/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/md/Kconfig"
 | 
			
		||||
 | 
			
		||||
source "drivers/message/fusion/Kconfig"
 | 
			
		||||
 | 
			
		||||
@ -1,213 +0,0 @@
 | 
			
		||||
#
 | 
			
		||||
# CDROM driver configuration
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
menu "Old CD-ROM drivers (not SCSI, not IDE)"
 | 
			
		||||
	depends on ISA && BLOCK
 | 
			
		||||
 | 
			
		||||
config CD_NO_IDESCSI
 | 
			
		||||
	bool "Support non-SCSI/IDE/ATAPI CDROM drives"
 | 
			
		||||
	---help---
 | 
			
		||||
	  If you have a CD-ROM drive that is neither SCSI nor IDE/ATAPI, say Y
 | 
			
		||||
	  here, otherwise N. Read the CD-ROM-HOWTO, available from
 | 
			
		||||
	  <http://www.tldp.org/docs.html#howto>.
 | 
			
		||||
 | 
			
		||||
	  Note that the answer to this question doesn't directly affect the
 | 
			
		||||
	  kernel: saying N will just cause the configurator to skip all
 | 
			
		||||
	  the questions about these CD-ROM drives. If you are unsure what you
 | 
			
		||||
	  have, say Y and find out whether you have one of the following
 | 
			
		||||
	  drives.
 | 
			
		||||
 | 
			
		||||
	  For each of these drivers, a <file:Documentation/cdrom/{driver_name}>
 | 
			
		||||
	  exists. Especially in cases where you do not know exactly which kind
 | 
			
		||||
	  of drive you have you should read there. Most of these drivers use a
 | 
			
		||||
	  file drivers/cdrom/{driver_name}.h where you can define your
 | 
			
		||||
	  interface parameters and switch some internal goodies.
 | 
			
		||||
 | 
			
		||||
	  To compile these CD-ROM drivers as a module, choose M instead of Y.
 | 
			
		||||
 | 
			
		||||
	  If you want to use any of these CD-ROM drivers, you also have to
 | 
			
		||||
	  answer Y or M to "ISO 9660 CD-ROM file system support" below (this
 | 
			
		||||
	  answer will get "defaulted" for you if you enable any of the Linux
 | 
			
		||||
	  CD-ROM drivers).
 | 
			
		||||
 | 
			
		||||
config AZTCD
 | 
			
		||||
	tristate "Aztech/Orchid/Okano/Wearnes/TXC/CyDROM  CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI
 | 
			
		||||
	---help---
 | 
			
		||||
	  This is your driver if you have an Aztech CDA268-01A, Orchid
 | 
			
		||||
	  CD-3110, Okano or Wearnes CDD110, Conrad TXC, or CyCD-ROM CR520 or
 | 
			
		||||
	  CR540 CD-ROM drive.  This driver -- just like all these CD-ROM
 | 
			
		||||
	  drivers -- is NOT for CD-ROM drives with IDE/ATAPI interfaces, such
 | 
			
		||||
	  as Aztech CDA269-031SE. Please read the file
 | 
			
		||||
	  <file:Documentation/cdrom/aztcd>.
 | 
			
		||||
 | 
			
		||||
	  If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
 | 
			
		||||
	  file system support" below, because that's the file system used on
 | 
			
		||||
	  CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called aztcd.
 | 
			
		||||
 | 
			
		||||
config GSCD
 | 
			
		||||
	tristate "Goldstar R420 CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI
 | 
			
		||||
	---help---
 | 
			
		||||
	  If this is your CD-ROM drive, say Y here.  As described in the file
 | 
			
		||||
	  <file:Documentation/cdrom/gscd>, you might have to change a setting
 | 
			
		||||
	  in the file <file:drivers/cdrom/gscd.h> before compiling the
 | 
			
		||||
	  kernel.  Please read the file <file:Documentation/cdrom/gscd>.
 | 
			
		||||
 | 
			
		||||
	  If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
 | 
			
		||||
	  file system support" below, because that's the file system used on
 | 
			
		||||
	  CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called gscd.
 | 
			
		||||
 | 
			
		||||
config SBPCD
 | 
			
		||||
	tristate "Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI && BROKEN_ON_SMP
 | 
			
		||||
	---help---
 | 
			
		||||
	  This driver supports most of the drives which use the Panasonic or
 | 
			
		||||
	  Sound Blaster interface.  Please read the file
 | 
			
		||||
	  <file:Documentation/cdrom/sbpcd>.
 | 
			
		||||
 | 
			
		||||
	  The Matsushita CR-521, CR-522, CR-523, CR-562, CR-563 drives
 | 
			
		||||
	  (sometimes labeled "Creative"), the Creative Labs CD200, the
 | 
			
		||||
	  Longshine LCS-7260, the "IBM External ISA CD-ROM" (in fact a CR-56x
 | 
			
		||||
	  model), the TEAC CD-55A fall under this category.  Some other
 | 
			
		||||
	  "electrically compatible" drives (Vertos, Genoa, some Funai models)
 | 
			
		||||
	  are currently not supported; for the Sanyo H94A drive currently a
 | 
			
		||||
	  separate driver (asked later) is responsible.  Most drives have a
 | 
			
		||||
	  uniquely shaped faceplate, with a caddyless motorized drawer, but
 | 
			
		||||
	  without external brand markings.  The older CR-52x drives have a
 | 
			
		||||
	  caddy and manual loading/eject, but still no external markings.  The
 | 
			
		||||
	  driver is able to do an extended auto-probing for interface
 | 
			
		||||
	  addresses and drive types; this can help to find facts in cases you
 | 
			
		||||
	  are not sure, but can consume some time during the boot process if
 | 
			
		||||
	  none of the supported drives gets found.  Once your drive got found,
 | 
			
		||||
	  you should enter the reported parameters into
 | 
			
		||||
	  <file:drivers/cdrom/sbpcd.h> and set "DISTRIBUTION 0" there.
 | 
			
		||||
 | 
			
		||||
	  This driver can support up to four CD-ROM controller cards, and each
 | 
			
		||||
	  card can support up to four CD-ROM drives; if you say Y here, you
 | 
			
		||||
	  will be asked how many controller cards you have.  If compiled as a
 | 
			
		||||
	  module, only one controller card (but with up to four drives) is
 | 
			
		||||
	  usable.
 | 
			
		||||
 | 
			
		||||
	  If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
 | 
			
		||||
	  file system support" below, because that's the file system used on
 | 
			
		||||
	  CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called sbpcd.
 | 
			
		||||
 | 
			
		||||
config MCDX
 | 
			
		||||
	tristate "Mitsumi CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI
 | 
			
		||||
	---help---
 | 
			
		||||
	  Use this driver if you want to be able to use your Mitsumi LU-005,
 | 
			
		||||
	  FX-001 or FX-001D CD-ROM drive.
 | 
			
		||||
 | 
			
		||||
	  Please read the file <file:Documentation/cdrom/mcdx>.
 | 
			
		||||
 | 
			
		||||
	  If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
 | 
			
		||||
	  file system support" below, because that's the file system used on
 | 
			
		||||
	  CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called mcdx.
 | 
			
		||||
 | 
			
		||||
config OPTCD
 | 
			
		||||
	tristate "Optics Storage DOLPHIN 8000AT CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI
 | 
			
		||||
	---help---
 | 
			
		||||
	  This is the driver for the 'DOLPHIN' drive with a 34-pin Sony
 | 
			
		||||
	  compatible interface. It also works with the Lasermate CR328A. If
 | 
			
		||||
	  you have one of those, say Y. This driver does not work for the
 | 
			
		||||
	  Optics Storage 8001 drive; use the IDE-ATAPI CD-ROM driver for that
 | 
			
		||||
	  one. Please read the file <file:Documentation/cdrom/optcd>.
 | 
			
		||||
 | 
			
		||||
	  If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
 | 
			
		||||
	  file system support" below, because that's the file system used on
 | 
			
		||||
	  CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called optcd.
 | 
			
		||||
 | 
			
		||||
config CM206
 | 
			
		||||
	tristate "Philips/LMS CM206 CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI && BROKEN_ON_SMP
 | 
			
		||||
	---help---
 | 
			
		||||
	  If you have a Philips/LMS CD-ROM drive cm206 in combination with a
 | 
			
		||||
	  cm260 host adapter card, say Y here. Please also read the file
 | 
			
		||||
	  <file:Documentation/cdrom/cm206>.
 | 
			
		||||
 | 
			
		||||
	  If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
 | 
			
		||||
	  file system support" below, because that's the file system used on
 | 
			
		||||
	  CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called cm206.
 | 
			
		||||
 | 
			
		||||
config SJCD
 | 
			
		||||
	tristate "Sanyo CDR-H94A CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI
 | 
			
		||||
	help
 | 
			
		||||
	  If this is your CD-ROM drive, say Y here and read the file
 | 
			
		||||
	  <file:Documentation/cdrom/sjcd>. You should then also say Y or M to
 | 
			
		||||
	  "ISO 9660 CD-ROM file system support" below, because that's the
 | 
			
		||||
	  file system used on CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called sjcd.
 | 
			
		||||
 | 
			
		||||
config ISP16_CDI
 | 
			
		||||
	tristate "ISP16/MAD16/Mozart soft configurable cdrom interface support"
 | 
			
		||||
	depends on CD_NO_IDESCSI
 | 
			
		||||
	---help---
 | 
			
		||||
	  These are sound cards with built-in cdrom interfaces using the OPTi
 | 
			
		||||
	  82C928 or 82C929 chips. Say Y here to have them detected and
 | 
			
		||||
	  possibly configured at boot time. In addition, You'll have to say Y
 | 
			
		||||
	  to a driver for the particular cdrom drive you have attached to the
 | 
			
		||||
	  card. Read <file:Documentation/cdrom/isp16> for details.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called isp16.
 | 
			
		||||
 | 
			
		||||
config CDU31A
 | 
			
		||||
	tristate "Sony CDU31A/CDU33A CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI && BROKEN_ON_SMP
 | 
			
		||||
	---help---
 | 
			
		||||
	  These CD-ROM drives have a spring-pop-out caddyless drawer, and a
 | 
			
		||||
	  rectangular green LED centered beneath it.  NOTE: these CD-ROM
 | 
			
		||||
	  drives will not be auto detected by the kernel at boot time; you
 | 
			
		||||
	  have to provide the interface address as an option to the kernel at
 | 
			
		||||
	  boot time as described in <file:Documentation/cdrom/cdu31a> or fill
 | 
			
		||||
	  in your parameters into <file:drivers/cdrom/cdu31a.c>.  Try "man
 | 
			
		||||
	  bootparam" or see the documentation of your boot loader (lilo or
 | 
			
		||||
	  loadlin) about how to pass options to the kernel.
 | 
			
		||||
 | 
			
		||||
	  If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
 | 
			
		||||
	  file system support" below, because that's the file system used on
 | 
			
		||||
	  CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called cdu31a.
 | 
			
		||||
 | 
			
		||||
config CDU535
 | 
			
		||||
	tristate "Sony CDU535 CDROM support"
 | 
			
		||||
	depends on CD_NO_IDESCSI
 | 
			
		||||
	---help---
 | 
			
		||||
	  This is the driver for the older Sony CDU-535 and CDU-531 CD-ROM
 | 
			
		||||
	  drives. Please read the file <file:Documentation/cdrom/sonycd535>.
 | 
			
		||||
 | 
			
		||||
	  If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
 | 
			
		||||
	  file system support" below, because that's the file system used on
 | 
			
		||||
	  CD-ROMs.
 | 
			
		||||
 | 
			
		||||
	  To compile this driver as a module, choose M here: the
 | 
			
		||||
	  module will be called sonycd535.
 | 
			
		||||
 | 
			
		||||
endmenu
 | 
			
		||||
@ -10,14 +10,4 @@ obj-$(CONFIG_BLK_DEV_SR)	+=              cdrom.o
 | 
			
		||||
obj-$(CONFIG_PARIDE_PCD)	+=		cdrom.o
 | 
			
		||||
obj-$(CONFIG_CDROM_PKTCDVD)	+=		cdrom.o
 | 
			
		||||
 | 
			
		||||
obj-$(CONFIG_AZTCD)		+= aztcd.o
 | 
			
		||||
obj-$(CONFIG_CDU31A)		+= cdu31a.o     cdrom.o
 | 
			
		||||
obj-$(CONFIG_CM206)		+= cm206.o      cdrom.o
 | 
			
		||||
obj-$(CONFIG_GSCD)		+= gscd.o
 | 
			
		||||
obj-$(CONFIG_ISP16_CDI)		+= isp16.o
 | 
			
		||||
obj-$(CONFIG_MCDX)		+= mcdx.o       cdrom.o
 | 
			
		||||
obj-$(CONFIG_OPTCD)		+= optcd.o
 | 
			
		||||
obj-$(CONFIG_SBPCD)		+= sbpcd.o      cdrom.o
 | 
			
		||||
obj-$(CONFIG_SJCD)		+= sjcd.o
 | 
			
		||||
obj-$(CONFIG_CDU535)		+= sonycd535.o
 | 
			
		||||
obj-$(CONFIG_VIOCD)		+= viocd.o      cdrom.o
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,162 +0,0 @@
 | 
			
		||||
/* $Id: aztcd.h,v 2.60 1997/11/29 09:51:22 root Exp root $
 | 
			
		||||
 *
 | 
			
		||||
 * Definitions for a AztechCD268 CD-ROM interface
 | 
			
		||||
 *	Copyright (C) 1994-98  Werner Zimmermann
 | 
			
		||||
 *
 | 
			
		||||
 *	based on Mitsumi CDROM driver by Martin Harriss
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with this program; if not, write to the Free Software
 | 
			
		||||
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 *
 | 
			
		||||
 *  History:	W.Zimmermann adaption to Aztech CD268-01A Version 1.3
 | 
			
		||||
 *		October 1994 Email: Werner.Zimmermann@fht-esslingen.de
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* *** change this to set the I/O port address of your CD-ROM drive,
 | 
			
		||||
       set to '-1', if you want autoprobing */
 | 
			
		||||
#define AZT_BASE_ADDR		-1
 | 
			
		||||
 | 
			
		||||
/* list of autoprobing addresses (not more than 15), last value must be 0x000
 | 
			
		||||
   Note: Autoprobing is only enabled, if AZT_BASE_ADDR is set to '-1' ! */
 | 
			
		||||
#define AZT_BASE_AUTO 		{ 0x320, 0x300, 0x310, 0x330, 0x000 }
 | 
			
		||||
 | 
			
		||||
/* Uncomment this, if your CDROM is connected to a Soundwave32-soundcard
 | 
			
		||||
   and configure AZT_BASE_ADDR and AZT_SW32_BASE_ADDR */
 | 
			
		||||
/*#define AZT_SW32 1
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifdef AZT_SW32 
 | 
			
		||||
#define AZT_SW32_BASE_ADDR      0x220  /*I/O port base address of your soundcard*/
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Set this to 1, if you want your tray to be locked, set to 0 to prevent tray 
 | 
			
		||||
   from locking */
 | 
			
		||||
#define AZT_ALLOW_TRAY_LOCK	1
 | 
			
		||||
 | 
			
		||||
/*Set this to 1 to allow auto-eject when unmounting a disk, set to 0, if you 
 | 
			
		||||
  don't want the auto-eject feature*/
 | 
			
		||||
#define AZT_AUTO_EJECT          0
 | 
			
		||||
 | 
			
		||||
/*Set this to 1, if you want to use incompatible ioctls for reading in raw and
 | 
			
		||||
  cooked mode */
 | 
			
		||||
#define AZT_PRIVATE_IOCTLS      1
 | 
			
		||||
 | 
			
		||||
/*Set this to 1, if you want multisession support by the ISO fs. Even if you set 
 | 
			
		||||
  this value to '0' you can use multisession CDs. In that case the drive's firm-
 | 
			
		||||
  ware will do the appropriate redirection automatically. The CD will then look
 | 
			
		||||
  like a single session CD (but nevertheless all data may be read). Please read 
 | 
			
		||||
  chapter '5.1 Multisession support' in README.aztcd for details. Normally it's 
 | 
			
		||||
  uncritical to leave this setting untouched */
 | 
			
		||||
#define AZT_MULTISESSION        1
 | 
			
		||||
 | 
			
		||||
/*Uncomment this, if you are using a linux kernel version prior to 2.1.0 */
 | 
			
		||||
/*#define AZT_KERNEL_PRIOR_2_1 */
 | 
			
		||||
 | 
			
		||||
/*---------------------------------------------------------------------------*/
 | 
			
		||||
/*-----nothing to be configured for normal applications below this line------*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Increase this if you get lots of timeouts; if you get kernel panic, replace
 | 
			
		||||
   STEN_LOW_WAIT by STEN_LOW in the source code */
 | 
			
		||||
#define AZT_STATUS_DELAY	400       /*for timer wait, STEN_LOW_WAIT*/
 | 
			
		||||
#define AZT_TIMEOUT		8000000   /*for busy wait STEN_LOW, DTEN_LOW*/
 | 
			
		||||
#define AZT_FAST_TIMEOUT	10000     /*for reading the version string*/
 | 
			
		||||
 | 
			
		||||
/* number of times to retry a command before giving up */
 | 
			
		||||
#define AZT_RETRY_ATTEMPTS	3
 | 
			
		||||
 | 
			
		||||
/* port access macros */
 | 
			
		||||
#define CMD_PORT		azt_port
 | 
			
		||||
#define DATA_PORT		azt_port
 | 
			
		||||
#define STATUS_PORT		azt_port+1
 | 
			
		||||
#define MODE_PORT		azt_port+2
 | 
			
		||||
#ifdef  AZT_SW32                
 | 
			
		||||
 #define AZT_SW32_INIT          (unsigned int) (0xFF00 & (AZT_BASE_ADDR*16))
 | 
			
		||||
 #define AZT_SW32_CONFIG_REG    AZT_SW32_BASE_ADDR+0x16  /*Soundwave32 Config. Register*/
 | 
			
		||||
 #define AZT_SW32_ID_REG        AZT_SW32_BASE_ADDR+0x04  /*Soundwave32 ID Version Register*/
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* status bits */
 | 
			
		||||
#define AST_CMD_CHECK		0x80		/* 1 = command error */
 | 
			
		||||
#define AST_DOOR_OPEN		0x40		/* 1 = door is open */
 | 
			
		||||
#define AST_NOT_READY		0x20		/* 1 = no disk in the drive */
 | 
			
		||||
#define AST_DSK_CHG		0x02		/* 1 = disk removed or changed */
 | 
			
		||||
#define AST_MODE                0x01            /* 0=MODE1, 1=MODE2 */
 | 
			
		||||
#define AST_MODE_BITS		0x1C		/* Mode Bits */
 | 
			
		||||
#define AST_INITIAL		0x0C		/* initial, only valid ... */
 | 
			
		||||
#define AST_BUSY		0x04		/* now playing, only valid
 | 
			
		||||
						   in combination with mode
 | 
			
		||||
						   bits */
 | 
			
		||||
/* flag bits */
 | 
			
		||||
#define AFL_DATA		0x02		/* data available if low */
 | 
			
		||||
#define AFL_STATUS		0x04		/* status available if low */
 | 
			
		||||
#define AFL_OP_OK		0x01		/* OP_OK command correct*/
 | 
			
		||||
#define AFL_PA_OK		0x02		/* PA_OK parameter correct*/
 | 
			
		||||
#define AFL_OP_ERR		0x05		/* error in command*/
 | 
			
		||||
#define AFL_PA_ERR		0x06		/* error in parameters*/
 | 
			
		||||
#define POLLED			0x04		/* polled mode */
 | 
			
		||||
 | 
			
		||||
/* commands */
 | 
			
		||||
#define ACMD_SOFT_RESET		0x10		/* reset drive */
 | 
			
		||||
#define ACMD_PLAY_READ		0x20		/* read data track in cooked mode */
 | 
			
		||||
#define ACMD_PLAY_READ_RAW      0x21		/* reading in raw mode*/
 | 
			
		||||
#define ACMD_SEEK               0x30            /* seek msf address*/
 | 
			
		||||
#define ACMD_SEEK_TO_LEADIN     0x31		/* seek to leadin track*/
 | 
			
		||||
#define ACMD_GET_ERROR		0x40		/* get error code */
 | 
			
		||||
#define ACMD_GET_STATUS		0x41		/* get status */
 | 
			
		||||
#define ACMD_GET_Q_CHANNEL      0x50		/* read info from q channel */
 | 
			
		||||
#define ACMD_EJECT		0x60		/* eject/open tray */
 | 
			
		||||
#define ACMD_CLOSE              0x61            /* close tray */
 | 
			
		||||
#define ACMD_LOCK		0x71		/* lock tray closed */
 | 
			
		||||
#define ACMD_UNLOCK		0x72		/* unlock tray */
 | 
			
		||||
#define ACMD_PAUSE		0x80		/* pause */
 | 
			
		||||
#define ACMD_STOP		0x81		/* stop play */
 | 
			
		||||
#define ACMD_PLAY_AUDIO		0x90		/* play audio track */
 | 
			
		||||
#define ACMD_SET_VOLUME		0x93		/* set audio level */
 | 
			
		||||
#define ACMD_GET_VERSION	0xA0		/* get firmware version */
 | 
			
		||||
#define ACMD_SET_DISK_TYPE	0xA1		/* set disk data mode */
 | 
			
		||||
 | 
			
		||||
#define MAX_TRACKS		104
 | 
			
		||||
 | 
			
		||||
struct msf {
 | 
			
		||||
	unsigned char	min;
 | 
			
		||||
	unsigned char	sec;
 | 
			
		||||
	unsigned char	frame;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct azt_Play_msf {
 | 
			
		||||
	struct msf	start;
 | 
			
		||||
	struct msf	end;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct azt_DiskInfo {
 | 
			
		||||
	unsigned char	first;
 | 
			
		||||
        unsigned char   next;
 | 
			
		||||
	unsigned char	last;
 | 
			
		||||
	struct msf	diskLength;
 | 
			
		||||
	struct msf	firstTrack;
 | 
			
		||||
        unsigned char   multi;
 | 
			
		||||
        struct msf      nextSession;
 | 
			
		||||
        struct msf      lastSession;
 | 
			
		||||
        unsigned char   xa;
 | 
			
		||||
        unsigned char   audio;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct azt_Toc {
 | 
			
		||||
	unsigned char	ctrl_addr;
 | 
			
		||||
	unsigned char	track;
 | 
			
		||||
	unsigned char	pointIndex;
 | 
			
		||||
	struct msf	trackTime;
 | 
			
		||||
	struct msf	diskTime;
 | 
			
		||||
};
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,411 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Definitions for a Sony interface CDROM drive.
 | 
			
		||||
 *
 | 
			
		||||
 * Corey Minyard (minyard@wf-rch.cirr.com)
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (C) 1993  Corey Minyard
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with this program; if not, write to the Free Software
 | 
			
		||||
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * General defines.
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_XA_DISK_TYPE 0x20
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Offsets (from the base address) and bits for the various write registers
 | 
			
		||||
 * of the drive.
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_CMD_REG_OFFSET     0
 | 
			
		||||
#define SONY_PARAM_REG_OFFSET   1
 | 
			
		||||
#define SONY_WRITE_REG_OFFSET   2
 | 
			
		||||
#define SONY_CONTROL_REG_OFFSET 3
 | 
			
		||||
#       define SONY_ATTN_CLR_BIT        0x01
 | 
			
		||||
#       define SONY_RES_RDY_CLR_BIT     0x02
 | 
			
		||||
#       define SONY_DATA_RDY_CLR_BIT    0x04
 | 
			
		||||
#       define SONY_ATTN_INT_EN_BIT     0x08
 | 
			
		||||
#       define SONY_RES_RDY_INT_EN_BIT  0x10
 | 
			
		||||
#       define SONY_DATA_RDY_INT_EN_BIT 0x20
 | 
			
		||||
#       define SONY_PARAM_CLR_BIT       0x40
 | 
			
		||||
#       define SONY_DRIVE_RESET_BIT     0x80
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Offsets (from the base address) and bits for the various read registers
 | 
			
		||||
 * of the drive.
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_STATUS_REG_OFFSET  0
 | 
			
		||||
#       define SONY_ATTN_BIT            0x01
 | 
			
		||||
#       define SONY_RES_RDY_BIT         0x02
 | 
			
		||||
#       define SONY_DATA_RDY_BIT        0x04
 | 
			
		||||
#       define SONY_ATTN_INT_ST_BIT     0x08
 | 
			
		||||
#       define SONY_RES_RDY_INT_ST_BIT  0x10
 | 
			
		||||
#       define SONY_DATA_RDY_INT_ST_BIT 0x20
 | 
			
		||||
#       define SONY_DATA_REQUEST_BIT    0x40
 | 
			
		||||
#       define SONY_BUSY_BIT            0x80
 | 
			
		||||
#define SONY_RESULT_REG_OFFSET  1
 | 
			
		||||
#define SONY_READ_REG_OFFSET    2
 | 
			
		||||
#define SONY_FIFOST_REG_OFFSET  3
 | 
			
		||||
#       define SONY_PARAM_WRITE_RDY_BIT 0x01
 | 
			
		||||
#       define SONY_PARAM_REG_EMPTY_BIT 0x02
 | 
			
		||||
#       define SONY_RES_REG_NOT_EMP_BIT 0x04
 | 
			
		||||
#       define SONY_RES_REG_FULL_BIT    0x08
 | 
			
		||||
 | 
			
		||||
#define LOG_START_OFFSET        150     /* Offset of first logical sector */
 | 
			
		||||
 | 
			
		||||
#define SONY_DETECT_TIMEOUT	(8*HZ/10) /* Maximum amount of time
 | 
			
		||||
                                           that drive detection code
 | 
			
		||||
                                           will wait for response
 | 
			
		||||
                                           from drive (in 1/100th's
 | 
			
		||||
                                           of seconds). */
 | 
			
		||||
 
 | 
			
		||||
#define SONY_JIFFIES_TIMEOUT    (10*HZ)	/* Maximum number of times the
 | 
			
		||||
                                           drive will wait/try for an
 | 
			
		||||
                                           operation */
 | 
			
		||||
#define SONY_RESET_TIMEOUT      HZ	/* Maximum number of times the
 | 
			
		||||
                                           drive will wait/try a reset
 | 
			
		||||
                                           operation */
 | 
			
		||||
#define SONY_READY_RETRIES      20000   /* How many times to retry a
 | 
			
		||||
                                           spin waiting for a register
 | 
			
		||||
                                           to come ready */
 | 
			
		||||
 | 
			
		||||
#define MAX_CDU31A_RETRIES      3       /* How many times to retry an
 | 
			
		||||
                                           operation */
 | 
			
		||||
 | 
			
		||||
/* Commands to request or set drive control parameters and disc information */
 | 
			
		||||
#define SONY_REQ_DRIVE_CONFIG_CMD       0x00    /* Returns s_sony_drive_config */
 | 
			
		||||
#define SONY_REQ_DRIVE_MODE_CMD         0x01
 | 
			
		||||
#define SONY_REQ_DRIVE_PARAM_CMD        0x02
 | 
			
		||||
#define SONY_REQ_MECH_STATUS_CMD        0x03
 | 
			
		||||
#define SONY_REQ_AUDIO_STATUS_CMD       0x04
 | 
			
		||||
#define SONY_SET_DRIVE_PARAM_CMD        0x10
 | 
			
		||||
#define SONY_REQ_TOC_DATA_CMD           0x20    /* Returns s_sony_toc */
 | 
			
		||||
#define SONY_REQ_SUBCODE_ADDRESS_CMD    0x21    /* Returns s_sony_subcode */
 | 
			
		||||
#define SONY_REQ_UPC_EAN_CMD            0x22
 | 
			
		||||
#define SONY_REQ_ISRC_CMD               0x23
 | 
			
		||||
#define SONY_REQ_TOC_DATA_SPEC_CMD      0x24    /* Returns s_sony_session_toc */
 | 
			
		||||
 | 
			
		||||
/* Commands to request information from the drive */
 | 
			
		||||
#define SONY_READ_TOC_CMD               0x30    /* let the drive firmware grab the TOC */
 | 
			
		||||
#define SONY_SEEK_CMD                   0x31
 | 
			
		||||
#define SONY_READ_CMD                   0x32
 | 
			
		||||
#define SONY_READ_BLKERR_STAT_CMD       0x34
 | 
			
		||||
#define SONY_ABORT_CMD                  0x35
 | 
			
		||||
#define SONY_READ_TOC_SPEC_CMD          0x36
 | 
			
		||||
 | 
			
		||||
/* Commands to control audio */
 | 
			
		||||
#define SONY_AUDIO_PLAYBACK_CMD         0x40
 | 
			
		||||
#define SONY_AUDIO_STOP_CMD             0x41
 | 
			
		||||
#define SONY_AUDIO_SCAN_CMD             0x42
 | 
			
		||||
 | 
			
		||||
/* Miscellaneous control commands */
 | 
			
		||||
#define SONY_EJECT_CMD                  0x50
 | 
			
		||||
#define SONY_SPIN_UP_CMD                0x51
 | 
			
		||||
#define SONY_SPIN_DOWN_CMD              0x52
 | 
			
		||||
 | 
			
		||||
/* Diagnostic commands */
 | 
			
		||||
#define SONY_WRITE_BUFFER_CMD           0x60
 | 
			
		||||
#define SONY_READ_BUFFER_CMD            0x61
 | 
			
		||||
#define SONY_DIAGNOSTICS_CMD            0x62
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following are command parameters for the set drive parameter command
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_SD_DECODE_PARAM            0x00
 | 
			
		||||
#define SONY_SD_INTERFACE_PARAM         0x01
 | 
			
		||||
#define SONY_SD_BUFFERING_PARAM         0x02
 | 
			
		||||
#define SONY_SD_AUDIO_PARAM             0x03
 | 
			
		||||
#define SONY_SD_AUDIO_VOLUME            0x04
 | 
			
		||||
#define SONY_SD_MECH_CONTROL            0x05
 | 
			
		||||
#define SONY_SD_AUTO_SPIN_DOWN_TIME     0x06
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following are parameter bits for the mechanical control command
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_AUTO_SPIN_UP_BIT           0x01
 | 
			
		||||
#define SONY_AUTO_EJECT_BIT             0x02
 | 
			
		||||
#define SONY_DOUBLE_SPEED_BIT           0x04
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following extract information from the drive configuration about
 | 
			
		||||
 * the drive itself.
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_HWC_GET_LOAD_MECH(c)       (c.hw_config[0] & 0x03)
 | 
			
		||||
#define SONY_HWC_EJECT(c)               (c.hw_config[0] & 0x04)
 | 
			
		||||
#define SONY_HWC_LED_SUPPORT(c)         (c.hw_config[0] & 0x08)
 | 
			
		||||
#define SONY_HWC_DOUBLE_SPEED(c)        (c.hw_config[0] & 0x10)
 | 
			
		||||
#define SONY_HWC_GET_BUF_MEM_SIZE(c)    ((c.hw_config[0] & 0xc0) >> 6)
 | 
			
		||||
#define SONY_HWC_AUDIO_PLAYBACK(c)      (c.hw_config[1] & 0x01)
 | 
			
		||||
#define SONY_HWC_ELECTRIC_VOLUME(c)     (c.hw_config[1] & 0x02)
 | 
			
		||||
#define SONY_HWC_ELECTRIC_VOLUME_CTL(c) (c.hw_config[1] & 0x04)
 | 
			
		||||
 | 
			
		||||
#define SONY_HWC_CADDY_LOAD_MECH        0x00
 | 
			
		||||
#define SONY_HWC_TRAY_LOAD_MECH         0x01
 | 
			
		||||
#define SONY_HWC_POPUP_LOAD_MECH        0x02
 | 
			
		||||
#define SONY_HWC_UNKWN_LOAD_MECH        0x03
 | 
			
		||||
 | 
			
		||||
#define SONY_HWC_8KB_BUFFER             0x00
 | 
			
		||||
#define SONY_HWC_32KB_BUFFER            0x01
 | 
			
		||||
#define SONY_HWC_64KB_BUFFER            0x02
 | 
			
		||||
#define SONY_HWC_UNKWN_BUFFER           0x03
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the complete status returned from the drive configuration request
 | 
			
		||||
 * command.
 | 
			
		||||
 */
 | 
			
		||||
struct s_sony_drive_config
 | 
			
		||||
{
 | 
			
		||||
   unsigned char exec_status[2];
 | 
			
		||||
   char vendor_id[8];
 | 
			
		||||
   char product_id[16];
 | 
			
		||||
   char product_rev_level[8];
 | 
			
		||||
   unsigned char hw_config[2];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* The following is returned from the request subcode address command */
 | 
			
		||||
struct s_sony_subcode
 | 
			
		||||
{
 | 
			
		||||
   unsigned char exec_status[2];
 | 
			
		||||
   unsigned char address        :4;
 | 
			
		||||
   unsigned char control        :4;
 | 
			
		||||
   unsigned char track_num;
 | 
			
		||||
   unsigned char index_num;
 | 
			
		||||
   unsigned char rel_msf[3];
 | 
			
		||||
   unsigned char reserved1;
 | 
			
		||||
   unsigned char abs_msf[3];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define MAX_TRACKS 100	/* The maximum tracks a disk may have. */
 | 
			
		||||
/*
 | 
			
		||||
 * The following is returned from the request TOC (Table Of Contents) command.
 | 
			
		||||
 * (last_track_num-first_track_num+1) values are valid in tracks.
 | 
			
		||||
 */
 | 
			
		||||
struct s_sony_toc
 | 
			
		||||
{
 | 
			
		||||
   unsigned char exec_status[2];
 | 
			
		||||
   unsigned char address0       :4;
 | 
			
		||||
   unsigned char control0       :4;
 | 
			
		||||
   unsigned char point0;
 | 
			
		||||
   unsigned char first_track_num;
 | 
			
		||||
   unsigned char disk_type;
 | 
			
		||||
   unsigned char dummy0;
 | 
			
		||||
   unsigned char address1       :4;
 | 
			
		||||
   unsigned char control1       :4;
 | 
			
		||||
   unsigned char point1;
 | 
			
		||||
   unsigned char last_track_num;
 | 
			
		||||
   unsigned char dummy1;
 | 
			
		||||
   unsigned char dummy2;
 | 
			
		||||
   unsigned char address2       :4;
 | 
			
		||||
   unsigned char control2       :4;
 | 
			
		||||
   unsigned char point2;
 | 
			
		||||
   unsigned char lead_out_start_msf[3];
 | 
			
		||||
   struct
 | 
			
		||||
   {
 | 
			
		||||
      unsigned char address     :4;
 | 
			
		||||
      unsigned char control     :4;
 | 
			
		||||
      unsigned char track;
 | 
			
		||||
      unsigned char track_start_msf[3];
 | 
			
		||||
   } tracks[MAX_TRACKS];
 | 
			
		||||
 | 
			
		||||
   unsigned int lead_out_start_lba;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct s_sony_session_toc
 | 
			
		||||
{
 | 
			
		||||
   unsigned char exec_status[2];
 | 
			
		||||
   unsigned char session_number;
 | 
			
		||||
   unsigned char address0       :4;
 | 
			
		||||
   unsigned char control0       :4;
 | 
			
		||||
   unsigned char point0;
 | 
			
		||||
   unsigned char first_track_num;
 | 
			
		||||
   unsigned char disk_type;
 | 
			
		||||
   unsigned char dummy0;
 | 
			
		||||
   unsigned char address1       :4;
 | 
			
		||||
   unsigned char control1       :4;
 | 
			
		||||
   unsigned char point1;
 | 
			
		||||
   unsigned char last_track_num;
 | 
			
		||||
   unsigned char dummy1;
 | 
			
		||||
   unsigned char dummy2;
 | 
			
		||||
   unsigned char address2       :4;
 | 
			
		||||
   unsigned char control2       :4;
 | 
			
		||||
   unsigned char point2;
 | 
			
		||||
   unsigned char lead_out_start_msf[3];
 | 
			
		||||
   unsigned char addressb0      :4;
 | 
			
		||||
   unsigned char controlb0      :4;
 | 
			
		||||
   unsigned char pointb0;
 | 
			
		||||
   unsigned char next_poss_prog_area_msf[3];
 | 
			
		||||
   unsigned char num_mode_5_pointers;
 | 
			
		||||
   unsigned char max_start_outer_leadout_msf[3];
 | 
			
		||||
   unsigned char addressb1      :4;
 | 
			
		||||
   unsigned char controlb1      :4;
 | 
			
		||||
   unsigned char pointb1;
 | 
			
		||||
   unsigned char dummyb0_1[4];
 | 
			
		||||
   unsigned char num_skip_interval_pointers;
 | 
			
		||||
   unsigned char num_skip_track_assignments;
 | 
			
		||||
   unsigned char dummyb0_2;
 | 
			
		||||
   unsigned char addressb2      :4;
 | 
			
		||||
   unsigned char controlb2      :4;
 | 
			
		||||
   unsigned char pointb2;
 | 
			
		||||
   unsigned char tracksb2[7];
 | 
			
		||||
   unsigned char addressb3      :4;
 | 
			
		||||
   unsigned char controlb3      :4;
 | 
			
		||||
   unsigned char pointb3;
 | 
			
		||||
   unsigned char tracksb3[7];
 | 
			
		||||
   unsigned char addressb4      :4;
 | 
			
		||||
   unsigned char controlb4      :4;
 | 
			
		||||
   unsigned char pointb4;
 | 
			
		||||
   unsigned char tracksb4[7];
 | 
			
		||||
   unsigned char addressc0      :4;
 | 
			
		||||
   unsigned char controlc0      :4;
 | 
			
		||||
   unsigned char pointc0;
 | 
			
		||||
   unsigned char dummyc0[7];
 | 
			
		||||
   struct
 | 
			
		||||
   {
 | 
			
		||||
      unsigned char address     :4;
 | 
			
		||||
      unsigned char control     :4;
 | 
			
		||||
      unsigned char track;
 | 
			
		||||
      unsigned char track_start_msf[3];
 | 
			
		||||
   } tracks[MAX_TRACKS];
 | 
			
		||||
 | 
			
		||||
   unsigned int start_track_lba;
 | 
			
		||||
   unsigned int lead_out_start_lba;
 | 
			
		||||
   unsigned int mint;
 | 
			
		||||
   unsigned int maxt;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct s_all_sessions_toc
 | 
			
		||||
{
 | 
			
		||||
   unsigned char sessions;
 | 
			
		||||
   unsigned int track_entries;
 | 
			
		||||
   unsigned char first_track_num;
 | 
			
		||||
   unsigned char last_track_num;
 | 
			
		||||
   unsigned char disk_type;
 | 
			
		||||
   unsigned char lead_out_start_msf[3];
 | 
			
		||||
   struct
 | 
			
		||||
   {
 | 
			
		||||
      unsigned char address     :4;
 | 
			
		||||
      unsigned char control     :4;
 | 
			
		||||
      unsigned char track;
 | 
			
		||||
      unsigned char track_start_msf[3];
 | 
			
		||||
   } tracks[MAX_TRACKS];
 | 
			
		||||
 | 
			
		||||
   unsigned int start_track_lba;
 | 
			
		||||
   unsigned int lead_out_start_lba;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following are errors returned from the drive.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Command error group */
 | 
			
		||||
#define SONY_ILL_CMD_ERR                0x10
 | 
			
		||||
#define SONY_ILL_PARAM_ERR              0x11
 | 
			
		||||
 | 
			
		||||
/* Mechanism group */
 | 
			
		||||
#define SONY_NOT_LOAD_ERR               0x20
 | 
			
		||||
#define SONY_NO_DISK_ERR                0x21
 | 
			
		||||
#define SONY_NOT_SPIN_ERR               0x22
 | 
			
		||||
#define SONY_SPIN_ERR                   0x23
 | 
			
		||||
#define SONY_SPINDLE_SERVO_ERR          0x25
 | 
			
		||||
#define SONY_FOCUS_SERVO_ERR            0x26
 | 
			
		||||
#define SONY_EJECT_MECH_ERR             0x29
 | 
			
		||||
#define SONY_AUDIO_PLAYING_ERR          0x2a
 | 
			
		||||
#define SONY_EMERGENCY_EJECT_ERR        0x2c
 | 
			
		||||
 | 
			
		||||
/* Seek error group */
 | 
			
		||||
#define SONY_FOCUS_ERR                  0x30
 | 
			
		||||
#define SONY_FRAME_SYNC_ERR             0x31
 | 
			
		||||
#define SONY_SUBCODE_ADDR_ERR           0x32
 | 
			
		||||
#define SONY_BLOCK_SYNC_ERR             0x33
 | 
			
		||||
#define SONY_HEADER_ADDR_ERR            0x34
 | 
			
		||||
 | 
			
		||||
/* Read error group */
 | 
			
		||||
#define SONY_ILL_TRACK_R_ERR            0x40
 | 
			
		||||
#define SONY_MODE_0_R_ERR               0x41
 | 
			
		||||
#define SONY_ILL_MODE_R_ERR             0x42
 | 
			
		||||
#define SONY_ILL_BLOCK_SIZE_R_ERR       0x43
 | 
			
		||||
#define SONY_MODE_R_ERR                 0x44
 | 
			
		||||
#define SONY_FORM_R_ERR                 0x45
 | 
			
		||||
#define SONY_LEAD_OUT_R_ERR             0x46
 | 
			
		||||
#define SONY_BUFFER_OVERRUN_R_ERR       0x47
 | 
			
		||||
 | 
			
		||||
/* Data error group */
 | 
			
		||||
#define SONY_UNREC_CIRC_ERR             0x53
 | 
			
		||||
#define SONY_UNREC_LECC_ERR             0x57
 | 
			
		||||
 | 
			
		||||
/* Subcode error group */
 | 
			
		||||
#define SONY_NO_TOC_ERR                 0x60
 | 
			
		||||
#define SONY_SUBCODE_DATA_NVAL_ERR      0x61
 | 
			
		||||
#define SONY_FOCUS_ON_TOC_READ_ERR      0x63
 | 
			
		||||
#define SONY_FRAME_SYNC_ON_TOC_READ_ERR 0x64
 | 
			
		||||
#define SONY_TOC_DATA_ERR               0x65
 | 
			
		||||
 | 
			
		||||
/* Hardware failure group */
 | 
			
		||||
#define SONY_HW_FAILURE_ERR             0x70
 | 
			
		||||
#define SONY_LEAD_IN_A_ERR              0x91
 | 
			
		||||
#define SONY_LEAD_OUT_A_ERR             0x92
 | 
			
		||||
#define SONY_DATA_TRACK_A_ERR           0x93
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following are returned from the Read With Block Error Status command.
 | 
			
		||||
 * They are not errors but information (Errors from the 0x5x group above may
 | 
			
		||||
 * also be returned
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_NO_CIRC_ERR_BLK_STAT       0x50
 | 
			
		||||
#define SONY_NO_LECC_ERR_BLK_STAT       0x54
 | 
			
		||||
#define SONY_RECOV_LECC_ERR_BLK_STAT    0x55
 | 
			
		||||
#define SONY_NO_ERR_DETECTION_STAT      0x59
 | 
			
		||||
 | 
			
		||||
/* 
 | 
			
		||||
 * The following is not an error returned by the drive, but by the code
 | 
			
		||||
 * that talks to the drive.  It is returned because of a timeout.
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_TIMEOUT_OP_ERR             0x01
 | 
			
		||||
#define SONY_SIGNAL_OP_ERR              0x02
 | 
			
		||||
#define SONY_BAD_DATA_ERR               0x03
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following are attention code for asynchronous events from the drive.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Standard attention group */
 | 
			
		||||
#define SONY_EMER_EJECT_ATTN            0x2c
 | 
			
		||||
#define SONY_HW_FAILURE_ATTN            0x70
 | 
			
		||||
#define SONY_MECH_LOADED_ATTN           0x80
 | 
			
		||||
#define SONY_EJECT_PUSHED_ATTN          0x81
 | 
			
		||||
 | 
			
		||||
/* Audio attention group */
 | 
			
		||||
#define SONY_AUDIO_PLAY_DONE_ATTN       0x90
 | 
			
		||||
#define SONY_LEAD_IN_ERR_ATTN           0x91
 | 
			
		||||
#define SONY_LEAD_OUT_ERR_ATTN          0x92
 | 
			
		||||
#define SONY_DATA_TRACK_ERR_ATTN        0x93
 | 
			
		||||
#define SONY_AUDIO_PLAYBACK_ERR_ATTN    0x94
 | 
			
		||||
 | 
			
		||||
/* Auto spin up group */
 | 
			
		||||
#define SONY_SPIN_UP_COMPLETE_ATTN      0x24
 | 
			
		||||
#define SONY_SPINDLE_SERVO_ERR_ATTN     0x25
 | 
			
		||||
#define SONY_FOCUS_SERVO_ERR_ATTN       0x26
 | 
			
		||||
#define SONY_TOC_READ_DONE_ATTN         0x62
 | 
			
		||||
#define SONY_FOCUS_ON_TOC_READ_ERR_ATTN 0x63
 | 
			
		||||
#define SONY_SYNC_ON_TOC_READ_ERR_ATTN  0x65
 | 
			
		||||
 | 
			
		||||
/* Auto eject group */
 | 
			
		||||
#define SONY_SPIN_DOWN_COMPLETE_ATTN    0x27
 | 
			
		||||
#define SONY_EJECT_COMPLETE_ATTN        0x28
 | 
			
		||||
#define SONY_EJECT_MECH_ERR_ATTN        0x29
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,171 +0,0 @@
 | 
			
		||||
/* cm206.h Header file for cm206.c.
 | 
			
		||||
   Copyright (c) 1995 David van Leeuwen 
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef LINUX_CM206_H
 | 
			
		||||
#define LINUX_CM206_H
 | 
			
		||||
 | 
			
		||||
#include <linux/ioctl.h>
 | 
			
		||||
 | 
			
		||||
/* First, the cm260 stuff */
 | 
			
		||||
/* The ports and irq used. Although CM206_BASE and CM206_IRQ are defined
 | 
			
		||||
   below, the values are not used unless autoprobing is turned off and 
 | 
			
		||||
   no LILO boot options or module command line options are given. Change
 | 
			
		||||
   these values to your own as last resort if autoprobing and options
 | 
			
		||||
   don't work. */
 | 
			
		||||
 | 
			
		||||
#define CM206_BASE 0x340
 | 
			
		||||
#define CM206_IRQ 11
 | 
			
		||||
 | 
			
		||||
#define r_data_status (cm206_base)
 | 
			
		||||
#define r_uart_receive (cm206_base+0x2)
 | 
			
		||||
#define r_fifo_output_buffer (cm206_base+0x4)
 | 
			
		||||
#define r_line_status (cm206_base+0x6)
 | 
			
		||||
#define r_data_control (cm206_base+0x8)
 | 
			
		||||
#define r_uart_transmit (cm206_base+0xa)
 | 
			
		||||
#define r_test_clock (cm206_base+0xc)
 | 
			
		||||
#define r_test_control (cm206_base+0xe)
 | 
			
		||||
 | 
			
		||||
/* the data_status flags */
 | 
			
		||||
#define ds_ram_size 0x4000
 | 
			
		||||
#define ds_toc_ready 0x2000
 | 
			
		||||
#define ds_fifo_empty 0x1000
 | 
			
		||||
#define ds_sync_error 0x800
 | 
			
		||||
#define ds_crc_error 0x400
 | 
			
		||||
#define ds_data_error 0x200
 | 
			
		||||
#define ds_fifo_overflow 0x100
 | 
			
		||||
#define ds_data_ready 0x80
 | 
			
		||||
 | 
			
		||||
/* the line_status flags */
 | 
			
		||||
#define ls_attention 0x10
 | 
			
		||||
#define ls_parity_error 0x8
 | 
			
		||||
#define ls_overrun 0x4
 | 
			
		||||
#define ls_receive_buffer_full 0x2
 | 
			
		||||
#define ls_transmitter_buffer_empty 0x1
 | 
			
		||||
 | 
			
		||||
/* the data control register flags */
 | 
			
		||||
#define dc_read_q_channel 0x4000
 | 
			
		||||
#define dc_mask_sync_error 0x2000
 | 
			
		||||
#define dc_toc_enable 0x1000
 | 
			
		||||
#define dc_no_stop_on_error 0x800
 | 
			
		||||
#define dc_break 0x400
 | 
			
		||||
#define dc_initialize 0x200
 | 
			
		||||
#define dc_mask_transmit_ready 0x100
 | 
			
		||||
#define dc_flag_enable 0x80
 | 
			
		||||
 | 
			
		||||
/* Define the default data control register flags here */
 | 
			
		||||
#define dc_normal (dc_mask_sync_error | dc_no_stop_on_error | \
 | 
			
		||||
		   dc_mask_transmit_ready)
 | 
			
		||||
 | 
			
		||||
/* now some constants related to the cm206 */
 | 
			
		||||
/* another drive status byte, echoed by the cm206 on most commands */
 | 
			
		||||
 | 
			
		||||
#define dsb_error_condition 0x1
 | 
			
		||||
#define dsb_play_in_progress 0x4
 | 
			
		||||
#define dsb_possible_media_change 0x8
 | 
			
		||||
#define dsb_disc_present 0x10
 | 
			
		||||
#define dsb_drive_not_ready 0x20
 | 
			
		||||
#define dsb_tray_locked 0x40
 | 
			
		||||
#define dsb_tray_not_closed 0x80
 | 
			
		||||
 | 
			
		||||
#define dsb_not_useful (dsb_drive_not_ready | dsb_tray_not_closed)
 | 
			
		||||
 | 
			
		||||
/* the cm206 command set */
 | 
			
		||||
 | 
			
		||||
#define c_close_tray 0
 | 
			
		||||
#define c_lock_tray 0x01
 | 
			
		||||
#define c_unlock_tray 0x04
 | 
			
		||||
#define c_open_tray 0x05
 | 
			
		||||
#define c_seek 0x10
 | 
			
		||||
#define c_read_data 0x20
 | 
			
		||||
#define c_force_1x 0x21
 | 
			
		||||
#define c_force_2x 0x22
 | 
			
		||||
#define c_auto_mode 0x23
 | 
			
		||||
#define c_play 0x30
 | 
			
		||||
#define c_set_audio_mode 0x31
 | 
			
		||||
#define c_read_current_q 0x41
 | 
			
		||||
#define c_stream_q 0x42
 | 
			
		||||
#define c_drive_status 0x50
 | 
			
		||||
#define c_disc_status 0x51
 | 
			
		||||
#define c_audio_status 0x52
 | 
			
		||||
#define c_drive_configuration 0x53
 | 
			
		||||
#define c_read_upc 0x60
 | 
			
		||||
#define c_stop 0x70
 | 
			
		||||
#define c_calc_checksum 0xe5
 | 
			
		||||
 | 
			
		||||
#define c_gimme 0xf8
 | 
			
		||||
 | 
			
		||||
/* finally, the (error) condition that the drive can be in      *
 | 
			
		||||
 * OK, this is not always an error, but let's prefix it with e_ */
 | 
			
		||||
 | 
			
		||||
#define e_none 0
 | 
			
		||||
#define e_illegal_command 0x01
 | 
			
		||||
#define e_sync 0x02
 | 
			
		||||
#define e_seek 0x03
 | 
			
		||||
#define e_parity 0x04
 | 
			
		||||
#define e_focus 0x05
 | 
			
		||||
#define e_header_sync 0x06
 | 
			
		||||
#define e_code_incompatibility 0x07
 | 
			
		||||
#define e_reset_done 0x08
 | 
			
		||||
#define e_bad_parameter 0x09
 | 
			
		||||
#define e_radial 0x0a
 | 
			
		||||
#define e_sub_code 0x0b
 | 
			
		||||
#define e_no_data_track 0x0c
 | 
			
		||||
#define e_scan 0x0d
 | 
			
		||||
#define e_tray_open 0x0f
 | 
			
		||||
#define e_no_disc 0x10
 | 
			
		||||
#define e_tray stalled 0x11
 | 
			
		||||
 | 
			
		||||
/* drive configuration masks */
 | 
			
		||||
 | 
			
		||||
#define dcf_revision_code 0x7
 | 
			
		||||
#define dcf_transfer_rate 0x60
 | 
			
		||||
#define dcf_motorized_tray 0x80
 | 
			
		||||
 | 
			
		||||
/* disc status byte */
 | 
			
		||||
 | 
			
		||||
#define cds_multi_session 0x2
 | 
			
		||||
#define cds_all_audio 0x8
 | 
			
		||||
#define cds_xa_mode 0xf0
 | 
			
		||||
 | 
			
		||||
/* finally some ioctls for the driver */
 | 
			
		||||
 | 
			
		||||
#define CM206CTL_GET_STAT _IO( 0x20, 0 )
 | 
			
		||||
#define CM206CTL_GET_LAST_STAT _IO( 0x20, 1 )
 | 
			
		||||
 | 
			
		||||
#ifdef STATISTICS
 | 
			
		||||
 | 
			
		||||
/* This is an ugly way to guarantee that the names of the statistics
 | 
			
		||||
 * are the same in the code and in the diagnostics program.  */
 | 
			
		||||
 | 
			
		||||
#ifdef __KERNEL__
 | 
			
		||||
#define x(a) st_ ## a
 | 
			
		||||
#define y enum
 | 
			
		||||
#else
 | 
			
		||||
#define x(a) #a
 | 
			
		||||
#define y char * stats_name[] = 
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
y {x(interrupt), x(data_ready), x(fifo_overflow), x(data_error),
 | 
			
		||||
     x(crc_error), x(sync_error), x(lost_intr), x(echo),
 | 
			
		||||
     x(write_timeout), x(receive_timeout), x(read_timeout),
 | 
			
		||||
     x(dsb_timeout), x(stop_0xff), x(back_read_timeout),
 | 
			
		||||
     x(sector_transferred), x(read_restarted), x(read_background),
 | 
			
		||||
     x(bh), x(open), x(ioctl_multisession), x(attention)
 | 
			
		||||
#ifdef __KERNEL__
 | 
			
		||||
     , x(last_entry)
 | 
			
		||||
#endif
 | 
			
		||||
 };
 | 
			
		||||
 | 
			
		||||
#ifdef __KERNEL__
 | 
			
		||||
#define NR_STATS st_last_entry
 | 
			
		||||
#else
 | 
			
		||||
#define NR_STATS (sizeof(stats_name)/sizeof(char*))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#undef y
 | 
			
		||||
#undef x
 | 
			
		||||
 | 
			
		||||
#endif /* STATISTICS */
 | 
			
		||||
 | 
			
		||||
#endif /* LINUX_CM206_H */
 | 
			
		||||
							
								
								
									
										1029
									
								
								drivers/cdrom/gscd.c
									
									
									
									
									
								
							
							
						
						
									
										1029
									
								
								drivers/cdrom/gscd.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,108 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Definitions for a GoldStar R420 CD-ROM interface
 | 
			
		||||
 *
 | 
			
		||||
 *   Copyright (C) 1995  Oliver Raupach <raupach@nwfs1.rz.fh-hannover.de>
 | 
			
		||||
 *                       Eberhard Moenkeberg <emoenke@gwdg.de>
 | 
			
		||||
 *
 | 
			
		||||
 *  Published under the GPL.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* The Interface Card default address is 0x340. This will work for most
 | 
			
		||||
   applications. Address selection is accomplished by jumpers PN801-1 to
 | 
			
		||||
   PN801-4 on the GoldStar Interface Card.
 | 
			
		||||
   Appropriate settings are: 0x300, 0x310, 0x320, 0x330, 0x340, 0x350, 0x360
 | 
			
		||||
   0x370, 0x380, 0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, 0x3F0             */
 | 
			
		||||
 | 
			
		||||
/* insert here the I/O port address and extent */
 | 
			
		||||
#define GSCD_BASE_ADDR	        0x340
 | 
			
		||||
#define GSCD_IO_EXTENT          4
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/************** nothing to set up below here *********************/
 | 
			
		||||
 | 
			
		||||
/* port access macro */
 | 
			
		||||
#define GSCDPORT(x)		(gscd_port + (x))
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * commands
 | 
			
		||||
 * the lower nibble holds the command length
 | 
			
		||||
 */
 | 
			
		||||
#define CMD_STATUS     0x01
 | 
			
		||||
#define CMD_READSUBQ   0x02 /* 1: ?, 2: UPC, 5: ? */
 | 
			
		||||
#define CMD_SEEK       0x05 /* read_mode M-S-F */
 | 
			
		||||
#define CMD_READ       0x07 /* read_mode M-S-F nsec_h nsec_l */
 | 
			
		||||
#define CMD_RESET      0x11
 | 
			
		||||
#define CMD_SETMODE    0x15
 | 
			
		||||
#define CMD_PLAY       0x17 /* M-S-F M-S-F */
 | 
			
		||||
#define CMD_LOCK_CTL   0x22 /* 0: unlock, 1: lock */
 | 
			
		||||
#define CMD_IDENT      0x31
 | 
			
		||||
#define CMD_SETSPEED   0x32 /* 0: auto */ /* ??? */
 | 
			
		||||
#define CMD_GETMODE    0x41
 | 
			
		||||
#define CMD_PAUSE      0x51
 | 
			
		||||
#define CMD_READTOC    0x61
 | 
			
		||||
#define CMD_DISKINFO   0x71
 | 
			
		||||
#define CMD_TRAY_CTL   0x81
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * disk_state:
 | 
			
		||||
 */
 | 
			
		||||
#define ST_PLAYING	0x80
 | 
			
		||||
#define ST_UNLOCKED	0x40
 | 
			
		||||
#define ST_NO_DISK	0x20
 | 
			
		||||
#define ST_DOOR_OPEN	0x10
 | 
			
		||||
#define ST_x08  0x08
 | 
			
		||||
#define ST_x04	0x04
 | 
			
		||||
#define ST_INVALID	0x02
 | 
			
		||||
#define ST_x01	0x01
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * cmd_type:
 | 
			
		||||
 */
 | 
			
		||||
#define TYPE_INFO	0x01
 | 
			
		||||
#define TYPE_DATA	0x02
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * read_mode:
 | 
			
		||||
 */
 | 
			
		||||
#define MOD_POLLED	0x80
 | 
			
		||||
#define MOD_x08	0x08
 | 
			
		||||
#define MOD_RAW	0x04
 | 
			
		||||
 | 
			
		||||
#define READ_DATA(port, buf, nr) insb(port, buf, nr)
 | 
			
		||||
 | 
			
		||||
#define SET_TIMER(func, jifs) \
 | 
			
		||||
	((mod_timer(&gscd_timer, jiffies + jifs)), \
 | 
			
		||||
	(gscd_timer.function = func))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_TIMER		del_timer_sync(&gscd_timer)
 | 
			
		||||
 | 
			
		||||
#define MAX_TRACKS		104
 | 
			
		||||
 | 
			
		||||
struct msf {
 | 
			
		||||
	unsigned char	min;
 | 
			
		||||
	unsigned char	sec;
 | 
			
		||||
	unsigned char	frame;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct gscd_Play_msf {
 | 
			
		||||
	struct msf	start;
 | 
			
		||||
	struct msf	end;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct gscd_DiskInfo {
 | 
			
		||||
	unsigned char	first;
 | 
			
		||||
	unsigned char	last;
 | 
			
		||||
	struct msf	diskLength;
 | 
			
		||||
	struct msf	firstTrack;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct gscd_Toc {
 | 
			
		||||
	unsigned char	ctrl_addr;
 | 
			
		||||
	unsigned char	track;
 | 
			
		||||
	unsigned char	pointIndex;
 | 
			
		||||
	struct msf	trackTime;
 | 
			
		||||
	struct msf	diskTime;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -1,374 +0,0 @@
 | 
			
		||||
/* -- ISP16 cdrom detection and configuration
 | 
			
		||||
 *
 | 
			
		||||
 *    Copyright (c) 1995,1996 Eric van der Maarel <H.T.M.v.d.Maarel@marin.nl>
 | 
			
		||||
 *
 | 
			
		||||
 *    Version 0.6
 | 
			
		||||
 *
 | 
			
		||||
 *    History:
 | 
			
		||||
 *    0.5 First release.
 | 
			
		||||
 *        Was included in the sjcd and optcd cdrom drivers.
 | 
			
		||||
 *    0.6 First "stand-alone" version.
 | 
			
		||||
 *        Removed sound configuration.
 | 
			
		||||
 *        Added "module" support.
 | 
			
		||||
 *
 | 
			
		||||
 *      9 November 1999 -- Make kernel-parameter implementation work with 2.3.x 
 | 
			
		||||
 *	                   Removed init_module & cleanup_module in favor of 
 | 
			
		||||
 *			   module_init & module_exit.
 | 
			
		||||
 *			   Torben Mathiasen <tmm@image.dk>
 | 
			
		||||
 *
 | 
			
		||||
 *     19 June 2004     -- check_region() converted to request_region()
 | 
			
		||||
 *                         and return statement cleanups.
 | 
			
		||||
 *                          - Jesper Juhl
 | 
			
		||||
 *
 | 
			
		||||
 *    Detect cdrom interface on ISP16 sound card.
 | 
			
		||||
 *    Configure cdrom interface.
 | 
			
		||||
 *
 | 
			
		||||
 *    Algorithm for the card with OPTi 82C928 taken
 | 
			
		||||
 *    from the CDSETUP.SYS driver for MSDOS,
 | 
			
		||||
 *    by OPTi Computers, version 2.03.
 | 
			
		||||
 *    Algorithm for the card with OPTi 82C929 as communicated
 | 
			
		||||
 *    to me by Vadim Model and Leo Spiekman.
 | 
			
		||||
 *
 | 
			
		||||
 *    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 *    it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 *    (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *    This program is distributed in the hope that it will be useful,
 | 
			
		||||
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *    GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *    You should have received a copy of the GNU General Public License
 | 
			
		||||
 *    along with this program; if not, write to the Free Software
 | 
			
		||||
 *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define ISP16_VERSION_MAJOR 0
 | 
			
		||||
#define ISP16_VERSION_MINOR 6
 | 
			
		||||
 | 
			
		||||
#include <linux/module.h>
 | 
			
		||||
 | 
			
		||||
#include <linux/fs.h>
 | 
			
		||||
#include <linux/kernel.h>
 | 
			
		||||
#include <linux/string.h>
 | 
			
		||||
#include <linux/ioport.h>
 | 
			
		||||
#include <linux/init.h>
 | 
			
		||||
#include <asm/io.h>
 | 
			
		||||
#include "isp16.h"
 | 
			
		||||
 | 
			
		||||
static short isp16_detect(void);
 | 
			
		||||
static short isp16_c928__detect(void);
 | 
			
		||||
static short isp16_c929__detect(void);
 | 
			
		||||
static short isp16_cdi_config(int base, u_char drive_type, int irq,
 | 
			
		||||
			      int dma);
 | 
			
		||||
static short isp16_type;	/* dependent on type of interface card */
 | 
			
		||||
static u_char isp16_ctrl;
 | 
			
		||||
static u_short isp16_enable_port;
 | 
			
		||||
 | 
			
		||||
static int isp16_cdrom_base = ISP16_CDROM_IO_BASE;
 | 
			
		||||
static int isp16_cdrom_irq = ISP16_CDROM_IRQ;
 | 
			
		||||
static int isp16_cdrom_dma = ISP16_CDROM_DMA;
 | 
			
		||||
static char *isp16_cdrom_type = ISP16_CDROM_TYPE;
 | 
			
		||||
 | 
			
		||||
module_param(isp16_cdrom_base, int, 0);
 | 
			
		||||
module_param(isp16_cdrom_irq, int, 0);
 | 
			
		||||
module_param(isp16_cdrom_dma, int, 0);
 | 
			
		||||
module_param(isp16_cdrom_type, charp, 0);
 | 
			
		||||
 | 
			
		||||
#define ISP16_IN(p) (outb(isp16_ctrl,ISP16_CTRL_PORT), inb(p))
 | 
			
		||||
#define ISP16_OUT(p,b) (outb(isp16_ctrl,ISP16_CTRL_PORT), outb(b,p))
 | 
			
		||||
 | 
			
		||||
#ifndef MODULE
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
__init isp16_setup(char *str)
 | 
			
		||||
{
 | 
			
		||||
	int ints[4];
 | 
			
		||||
 | 
			
		||||
	(void) get_options(str, ARRAY_SIZE(ints), ints);
 | 
			
		||||
	if (ints[0] > 0)
 | 
			
		||||
		isp16_cdrom_base = ints[1];
 | 
			
		||||
	if (ints[0] > 1)
 | 
			
		||||
		isp16_cdrom_irq = ints[2];
 | 
			
		||||
	if (ints[0] > 2)
 | 
			
		||||
		isp16_cdrom_dma = ints[3];
 | 
			
		||||
	if (str)
 | 
			
		||||
		isp16_cdrom_type = str;
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__setup("isp16=", isp16_setup);
 | 
			
		||||
 | 
			
		||||
#endif				/* MODULE */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *  ISP16 initialisation.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
static int __init isp16_init(void)
 | 
			
		||||
{
 | 
			
		||||
	u_char expected_drive;
 | 
			
		||||
 | 
			
		||||
	printk(KERN_INFO
 | 
			
		||||
	       "ISP16: configuration cdrom interface, version %d.%d.\n",
 | 
			
		||||
	       ISP16_VERSION_MAJOR, ISP16_VERSION_MINOR);
 | 
			
		||||
 | 
			
		||||
	if (!strcmp(isp16_cdrom_type, "noisp16")) {
 | 
			
		||||
		printk("ISP16: no cdrom interface configured.\n");
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!request_region(ISP16_IO_BASE, ISP16_IO_SIZE, "isp16")) {
 | 
			
		||||
		printk("ISP16: i/o ports already in use.\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((isp16_type = isp16_detect()) < 0) {
 | 
			
		||||
		printk("ISP16: no cdrom interface found.\n");
 | 
			
		||||
		goto cleanup_out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printk(KERN_INFO
 | 
			
		||||
	       "ISP16: cdrom interface (with OPTi 82C92%d chip) detected.\n",
 | 
			
		||||
	       (isp16_type == 2) ? 9 : 8);
 | 
			
		||||
 | 
			
		||||
	if (!strcmp(isp16_cdrom_type, "Sanyo"))
 | 
			
		||||
		expected_drive =
 | 
			
		||||
		    (isp16_type ? ISP16_SANYO1 : ISP16_SANYO0);
 | 
			
		||||
	else if (!strcmp(isp16_cdrom_type, "Sony"))
 | 
			
		||||
		expected_drive = ISP16_SONY;
 | 
			
		||||
	else if (!strcmp(isp16_cdrom_type, "Panasonic"))
 | 
			
		||||
		expected_drive =
 | 
			
		||||
		    (isp16_type ? ISP16_PANASONIC1 : ISP16_PANASONIC0);
 | 
			
		||||
	else if (!strcmp(isp16_cdrom_type, "Mitsumi"))
 | 
			
		||||
		expected_drive = ISP16_MITSUMI;
 | 
			
		||||
	else {
 | 
			
		||||
		printk("ISP16: %s not supported by cdrom interface.\n",
 | 
			
		||||
		       isp16_cdrom_type);
 | 
			
		||||
		goto cleanup_out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (isp16_cdi_config(isp16_cdrom_base, expected_drive,
 | 
			
		||||
			     isp16_cdrom_irq, isp16_cdrom_dma) < 0) {
 | 
			
		||||
		printk
 | 
			
		||||
		    ("ISP16: cdrom interface has not been properly configured.\n");
 | 
			
		||||
		goto cleanup_out;
 | 
			
		||||
	}
 | 
			
		||||
	printk(KERN_INFO
 | 
			
		||||
	       "ISP16: cdrom interface set up with io base 0x%03X, irq %d, dma %d,"
 | 
			
		||||
	       " type %s.\n", isp16_cdrom_base, isp16_cdrom_irq,
 | 
			
		||||
	       isp16_cdrom_dma, isp16_cdrom_type);
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
cleanup_out:
 | 
			
		||||
	release_region(ISP16_IO_BASE, ISP16_IO_SIZE);
 | 
			
		||||
out:
 | 
			
		||||
	return -EIO;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static short __init isp16_detect(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	if (isp16_c929__detect() >= 0)
 | 
			
		||||
		return 2;
 | 
			
		||||
	else
 | 
			
		||||
		return (isp16_c928__detect());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static short __init isp16_c928__detect(void)
 | 
			
		||||
{
 | 
			
		||||
	u_char ctrl;
 | 
			
		||||
	u_char enable_cdrom;
 | 
			
		||||
	u_char io;
 | 
			
		||||
	short i = -1;
 | 
			
		||||
 | 
			
		||||
	isp16_ctrl = ISP16_C928__CTRL;
 | 
			
		||||
	isp16_enable_port = ISP16_C928__ENABLE_PORT;
 | 
			
		||||
 | 
			
		||||
	/* read' and write' are a special read and write, respectively */
 | 
			
		||||
 | 
			
		||||
	/* read' ISP16_CTRL_PORT, clear last two bits and write' back the result */
 | 
			
		||||
	ctrl = ISP16_IN(ISP16_CTRL_PORT) & 0xFC;
 | 
			
		||||
	ISP16_OUT(ISP16_CTRL_PORT, ctrl);
 | 
			
		||||
 | 
			
		||||
	/* read' 3,4 and 5-bit from the cdrom enable port */
 | 
			
		||||
	enable_cdrom = ISP16_IN(ISP16_C928__ENABLE_PORT) & 0x38;
 | 
			
		||||
 | 
			
		||||
	if (!(enable_cdrom & 0x20)) {	/* 5-bit not set */
 | 
			
		||||
		/* read' last 2 bits of ISP16_IO_SET_PORT */
 | 
			
		||||
		io = ISP16_IN(ISP16_IO_SET_PORT) & 0x03;
 | 
			
		||||
		if (((io & 0x01) << 1) == (io & 0x02)) {	/* bits are the same */
 | 
			
		||||
			if (io == 0) {	/* ...the same and 0 */
 | 
			
		||||
				i = 0;
 | 
			
		||||
				enable_cdrom |= 0x20;
 | 
			
		||||
			} else {	/* ...the same and 1 *//* my card, first time 'round */
 | 
			
		||||
				i = 1;
 | 
			
		||||
				enable_cdrom |= 0x28;
 | 
			
		||||
			}
 | 
			
		||||
			ISP16_OUT(ISP16_C928__ENABLE_PORT, enable_cdrom);
 | 
			
		||||
		} else {	/* bits are not the same */
 | 
			
		||||
			ISP16_OUT(ISP16_CTRL_PORT, ctrl);
 | 
			
		||||
			return i;	/* -> not detected: possibly incorrect conclusion */
 | 
			
		||||
		}
 | 
			
		||||
	} else if (enable_cdrom == 0x20)
 | 
			
		||||
		i = 0;
 | 
			
		||||
	else if (enable_cdrom == 0x28)	/* my card, already initialised */
 | 
			
		||||
		i = 1;
 | 
			
		||||
 | 
			
		||||
	ISP16_OUT(ISP16_CTRL_PORT, ctrl);
 | 
			
		||||
 | 
			
		||||
	return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static short __init isp16_c929__detect(void)
 | 
			
		||||
{
 | 
			
		||||
	u_char ctrl;
 | 
			
		||||
	u_char tmp;
 | 
			
		||||
 | 
			
		||||
	isp16_ctrl = ISP16_C929__CTRL;
 | 
			
		||||
	isp16_enable_port = ISP16_C929__ENABLE_PORT;
 | 
			
		||||
 | 
			
		||||
	/* read' and write' are a special read and write, respectively */
 | 
			
		||||
 | 
			
		||||
	/* read' ISP16_CTRL_PORT and save */
 | 
			
		||||
	ctrl = ISP16_IN(ISP16_CTRL_PORT);
 | 
			
		||||
 | 
			
		||||
	/* write' zero to the ctrl port and get response */
 | 
			
		||||
	ISP16_OUT(ISP16_CTRL_PORT, 0);
 | 
			
		||||
	tmp = ISP16_IN(ISP16_CTRL_PORT);
 | 
			
		||||
 | 
			
		||||
	if (tmp != 2)		/* isp16 with 82C929 not detected */
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	/* restore ctrl port value */
 | 
			
		||||
	ISP16_OUT(ISP16_CTRL_PORT, ctrl);
 | 
			
		||||
 | 
			
		||||
	return 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static short __init
 | 
			
		||||
isp16_cdi_config(int base, u_char drive_type, int irq, int dma)
 | 
			
		||||
{
 | 
			
		||||
	u_char base_code;
 | 
			
		||||
	u_char irq_code;
 | 
			
		||||
	u_char dma_code;
 | 
			
		||||
	u_char i;
 | 
			
		||||
 | 
			
		||||
	if ((drive_type == ISP16_MITSUMI) && (dma != 0))
 | 
			
		||||
		printk("ISP16: Mitsumi cdrom drive has no dma support.\n");
 | 
			
		||||
 | 
			
		||||
	switch (base) {
 | 
			
		||||
	case 0x340:
 | 
			
		||||
		base_code = ISP16_BASE_340;
 | 
			
		||||
		break;
 | 
			
		||||
	case 0x330:
 | 
			
		||||
		base_code = ISP16_BASE_330;
 | 
			
		||||
		break;
 | 
			
		||||
	case 0x360:
 | 
			
		||||
		base_code = ISP16_BASE_360;
 | 
			
		||||
		break;
 | 
			
		||||
	case 0x320:
 | 
			
		||||
		base_code = ISP16_BASE_320;
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		printk
 | 
			
		||||
		    ("ISP16: base address 0x%03X not supported by cdrom interface.\n",
 | 
			
		||||
		     base);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	switch (irq) {
 | 
			
		||||
	case 0:
 | 
			
		||||
		irq_code = ISP16_IRQ_X;
 | 
			
		||||
		break;		/* disable irq */
 | 
			
		||||
	case 5:
 | 
			
		||||
		irq_code = ISP16_IRQ_5;
 | 
			
		||||
		printk("ISP16: irq 5 shouldn't be used by cdrom interface,"
 | 
			
		||||
		       " due to possible conflicts with the sound card.\n");
 | 
			
		||||
		break;
 | 
			
		||||
	case 7:
 | 
			
		||||
		irq_code = ISP16_IRQ_7;
 | 
			
		||||
		printk("ISP16: irq 7 shouldn't be used by cdrom interface,"
 | 
			
		||||
		       " due to possible conflicts with the sound card.\n");
 | 
			
		||||
		break;
 | 
			
		||||
	case 3:
 | 
			
		||||
		irq_code = ISP16_IRQ_3;
 | 
			
		||||
		break;
 | 
			
		||||
	case 9:
 | 
			
		||||
		irq_code = ISP16_IRQ_9;
 | 
			
		||||
		break;
 | 
			
		||||
	case 10:
 | 
			
		||||
		irq_code = ISP16_IRQ_10;
 | 
			
		||||
		break;
 | 
			
		||||
	case 11:
 | 
			
		||||
		irq_code = ISP16_IRQ_11;
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		printk("ISP16: irq %d not supported by cdrom interface.\n",
 | 
			
		||||
		       irq);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	switch (dma) {
 | 
			
		||||
	case 0:
 | 
			
		||||
		dma_code = ISP16_DMA_X;
 | 
			
		||||
		break;		/* disable dma */
 | 
			
		||||
	case 1:
 | 
			
		||||
		printk("ISP16: dma 1 cannot be used by cdrom interface,"
 | 
			
		||||
		       " due to conflict with the sound card.\n");
 | 
			
		||||
		return -1;
 | 
			
		||||
		break;
 | 
			
		||||
	case 3:
 | 
			
		||||
		dma_code = ISP16_DMA_3;
 | 
			
		||||
		break;
 | 
			
		||||
	case 5:
 | 
			
		||||
		dma_code = ISP16_DMA_5;
 | 
			
		||||
		break;
 | 
			
		||||
	case 6:
 | 
			
		||||
		dma_code = ISP16_DMA_6;
 | 
			
		||||
		break;
 | 
			
		||||
	case 7:
 | 
			
		||||
		dma_code = ISP16_DMA_7;
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		printk("ISP16: dma %d not supported by cdrom interface.\n",
 | 
			
		||||
		       dma);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (drive_type != ISP16_SONY && drive_type != ISP16_PANASONIC0 &&
 | 
			
		||||
	    drive_type != ISP16_PANASONIC1 && drive_type != ISP16_SANYO0 &&
 | 
			
		||||
	    drive_type != ISP16_SANYO1 && drive_type != ISP16_MITSUMI &&
 | 
			
		||||
	    drive_type != ISP16_DRIVE_X) {
 | 
			
		||||
		printk
 | 
			
		||||
		    ("ISP16: drive type (code 0x%02X) not supported by cdrom"
 | 
			
		||||
		     " interface.\n", drive_type);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* set type of interface */
 | 
			
		||||
	i = ISP16_IN(ISP16_DRIVE_SET_PORT) & ISP16_DRIVE_SET_MASK;	/* clear some bits */
 | 
			
		||||
	ISP16_OUT(ISP16_DRIVE_SET_PORT, i | drive_type);
 | 
			
		||||
 | 
			
		||||
	/* enable cdrom on interface with 82C929 chip */
 | 
			
		||||
	if (isp16_type > 1)
 | 
			
		||||
		ISP16_OUT(isp16_enable_port, ISP16_ENABLE_CDROM);
 | 
			
		||||
 | 
			
		||||
	/* set base address, irq and dma */
 | 
			
		||||
	i = ISP16_IN(ISP16_IO_SET_PORT) & ISP16_IO_SET_MASK;	/* keep some bits */
 | 
			
		||||
	ISP16_OUT(ISP16_IO_SET_PORT, i | base_code | irq_code | dma_code);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void __exit isp16_exit(void)
 | 
			
		||||
{
 | 
			
		||||
	release_region(ISP16_IO_BASE, ISP16_IO_SIZE);
 | 
			
		||||
	printk(KERN_INFO "ISP16: module released.\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module_init(isp16_init);
 | 
			
		||||
module_exit(isp16_exit);
 | 
			
		||||
 | 
			
		||||
MODULE_LICENSE("GPL");
 | 
			
		||||
@ -1,72 +0,0 @@
 | 
			
		||||
/* -- isp16.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Header for detection and initialisation of cdrom interface (only) on
 | 
			
		||||
 *  ISP16 (MAD16, Mozart) sound card.
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with this program; if not, write to the Free Software
 | 
			
		||||
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* These are the default values */
 | 
			
		||||
#define ISP16_CDROM_TYPE "Sanyo"
 | 
			
		||||
#define ISP16_CDROM_IO_BASE 0x340
 | 
			
		||||
#define ISP16_CDROM_IRQ 0
 | 
			
		||||
#define ISP16_CDROM_DMA 0
 | 
			
		||||
 | 
			
		||||
/* Some (Media)Magic */
 | 
			
		||||
/* define types of drive the interface on an ISP16 card may be looking at */
 | 
			
		||||
#define ISP16_DRIVE_X 0x00
 | 
			
		||||
#define ISP16_SONY  0x02
 | 
			
		||||
#define ISP16_PANASONIC0 0x02
 | 
			
		||||
#define ISP16_SANYO0 0x02
 | 
			
		||||
#define ISP16_MITSUMI  0x04
 | 
			
		||||
#define ISP16_PANASONIC1 0x06
 | 
			
		||||
#define ISP16_SANYO1 0x06
 | 
			
		||||
#define ISP16_DRIVE_NOT_USED 0x08  /* not used */
 | 
			
		||||
#define ISP16_DRIVE_SET_MASK 0xF1  /* don't change 0-bit or 4-7-bits*/
 | 
			
		||||
/* ...for port */
 | 
			
		||||
#define ISP16_DRIVE_SET_PORT 0xF8D
 | 
			
		||||
/* set io parameters */
 | 
			
		||||
#define ISP16_BASE_340  0x00
 | 
			
		||||
#define ISP16_BASE_330  0x40
 | 
			
		||||
#define ISP16_BASE_360  0x80
 | 
			
		||||
#define ISP16_BASE_320  0xC0
 | 
			
		||||
#define ISP16_IRQ_X  0x00
 | 
			
		||||
#define ISP16_IRQ_5  0x04  /* shouldn't be used to avoid sound card conflicts */
 | 
			
		||||
#define ISP16_IRQ_7  0x08  /* shouldn't be used to avoid sound card conflicts */
 | 
			
		||||
#define ISP16_IRQ_3  0x0C
 | 
			
		||||
#define ISP16_IRQ_9  0x10
 | 
			
		||||
#define ISP16_IRQ_10  0x14
 | 
			
		||||
#define ISP16_IRQ_11  0x18
 | 
			
		||||
#define ISP16_DMA_X  0x03
 | 
			
		||||
#define ISP16_DMA_3  0x00
 | 
			
		||||
#define ISP16_DMA_5  0x00
 | 
			
		||||
#define ISP16_DMA_6  0x01
 | 
			
		||||
#define ISP16_DMA_7  0x02
 | 
			
		||||
#define ISP16_IO_SET_MASK  0x20  /* don't change 5-bit */
 | 
			
		||||
/* ...for port */
 | 
			
		||||
#define ISP16_IO_SET_PORT  0xF8E
 | 
			
		||||
/* enable the card */
 | 
			
		||||
#define ISP16_C928__ENABLE_PORT  0xF90  /* ISP16 with OPTi 82C928 chip */
 | 
			
		||||
#define ISP16_C929__ENABLE_PORT  0xF91  /* ISP16 with OPTi 82C929 chip */
 | 
			
		||||
#define ISP16_ENABLE_CDROM  0x80  /* seven bit */
 | 
			
		||||
 | 
			
		||||
/* the magic stuff */
 | 
			
		||||
#define ISP16_CTRL_PORT  0xF8F
 | 
			
		||||
#define ISP16_C928__CTRL  0xE2  /* ISP16 with OPTi 82C928 chip */
 | 
			
		||||
#define ISP16_C929__CTRL  0xE3  /* ISP16 with OPTi 82C929 chip */
 | 
			
		||||
 | 
			
		||||
#define ISP16_IO_BASE 0xF8D
 | 
			
		||||
#define ISP16_IO_SIZE 5  /* ports used from 0xF8D up to 0xF91 */
 | 
			
		||||
							
								
								
									
										1943
									
								
								drivers/cdrom/mcdx.c
									
									
									
									
									
								
							
							
						
						
									
										1943
									
								
								drivers/cdrom/mcdx.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,185 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Definitions for the Mitsumi CDROM interface
 | 
			
		||||
 * Copyright (C) 1995 1996 Heiko Schlittermann <heiko@lotte.sax.de>
 | 
			
		||||
 * VERSION: @VERSION@
 | 
			
		||||
 * 
 | 
			
		||||
 * This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation; either version 2, or (at your option)
 | 
			
		||||
 * any later version.
 | 
			
		||||
 * 
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 * 
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; see the file COPYING.  If not, write to
 | 
			
		||||
 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 *
 | 
			
		||||
 * Thanks to
 | 
			
		||||
 *  The Linux Community at all and ...
 | 
			
		||||
 *  Martin Harris (he wrote the first Mitsumi Driver)
 | 
			
		||||
 *  Eberhard Moenkeberg (he gave me much support and the initial kick)
 | 
			
		||||
 *  Bernd Huebner, Ruediger Helsch (Unifix-Software Gmbh, they
 | 
			
		||||
 *      improved the original driver)
 | 
			
		||||
 *  Jon Tombs, Bjorn Ekwall (module support)
 | 
			
		||||
 *  Daniel v. Mosnenck (he sent me the Technical and Programming Reference)
 | 
			
		||||
 *  Gerd Knorr (he lent me his PhotoCD)
 | 
			
		||||
 *  Nils Faerber and Roger E. Wolff (extensively tested the LU portion)
 | 
			
		||||
 *  Andreas Kies (testing the mysterious hang up's)
 | 
			
		||||
 *  ... somebody forgotten?
 | 
			
		||||
 *  Marcin Dalecki
 | 
			
		||||
 *  
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	The following lines are for user configuration
 | 
			
		||||
 *	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 *
 | 
			
		||||
 *	{0|1} -- 1 if you want the driver detect your drive, may crash and
 | 
			
		||||
 *	needs a long time to seek.  The higher the address the longer the
 | 
			
		||||
 *	seek.
 | 
			
		||||
 *
 | 
			
		||||
 *  WARNING: AUTOPROBE doesn't work.
 | 
			
		||||
 */
 | 
			
		||||
#define MCDX_AUTOPROBE 0
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Drive specific settings according to the jumpers on the controller
 | 
			
		||||
 *	board(s).
 | 
			
		||||
 *	o	MCDX_NDRIVES  :  number of used entries of the following table
 | 
			
		||||
 *	o	MCDX_DRIVEMAP :  table of {i/o base, irq} per controller
 | 
			
		||||
 *
 | 
			
		||||
 *	NOTE: I didn't get a drive at irq 9(2) working.  Not even alone.
 | 
			
		||||
 */
 | 
			
		||||
#if MCDX_AUTOPROBE == 0
 | 
			
		||||
	#define MCDX_NDRIVES 1
 | 
			
		||||
	#define MCDX_DRIVEMAP {		\
 | 
			
		||||
			{0x300, 11},	\
 | 
			
		||||
			{0x304, 05},  	\
 | 
			
		||||
			{0x000, 00},  	\
 | 
			
		||||
			{0x000, 00},  	\
 | 
			
		||||
			{0x000, 00},  	\
 | 
			
		||||
	  	}
 | 
			
		||||
#else
 | 
			
		||||
	#error Autoprobing is not implemented yet.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef MCDX_QUIET
 | 
			
		||||
#define MCDX_QUIET   1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef MCDX_DEBUG
 | 
			
		||||
#define MCDX_DEBUG   0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* *** make the following line uncommented, if you're sure,
 | 
			
		||||
 * *** all configuration is done */
 | 
			
		||||
/* #define I_WAS_HERE */
 | 
			
		||||
 | 
			
		||||
/*	The name of the device */
 | 
			
		||||
#define MCDX "mcdx"	
 | 
			
		||||
 | 
			
		||||
/* Flags for DEBUGGING */
 | 
			
		||||
#define INIT 		0
 | 
			
		||||
#define MALLOC 		0
 | 
			
		||||
#define IOCTL 		0
 | 
			
		||||
#define PLAYTRK     0
 | 
			
		||||
#define SUBCHNL     0
 | 
			
		||||
#define TOCHDR      0
 | 
			
		||||
#define MS          0
 | 
			
		||||
#define PLAYMSF     0
 | 
			
		||||
#define READTOC     0
 | 
			
		||||
#define OPENCLOSE 	0
 | 
			
		||||
#define HW		    0
 | 
			
		||||
#define TALK		0
 | 
			
		||||
#define IRQ 		0
 | 
			
		||||
#define XFER 		0
 | 
			
		||||
#define REQUEST	 	0
 | 
			
		||||
#define SLEEP		0
 | 
			
		||||
 | 
			
		||||
/*	The following addresses are taken from the Mitsumi Reference 
 | 
			
		||||
 *  and describe the possible i/o range for the controller.
 | 
			
		||||
 */
 | 
			
		||||
#define MCDX_IO_BEGIN	((char*) 0x300)	/* first base of i/o addr */
 | 
			
		||||
#define MCDX_IO_END		((char*) 0x3fc)	/* last base of i/o addr */
 | 
			
		||||
 | 
			
		||||
/*	Per controller 4 bytes i/o are needed. */
 | 
			
		||||
#define MCDX_IO_SIZE		4
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Bits
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* The status byte, returned from every command, set if
 | 
			
		||||
 * the description is true */
 | 
			
		||||
#define MCDX_RBIT_OPEN       0x80	/* door is open */
 | 
			
		||||
#define MCDX_RBIT_DISKSET    0x40	/* disk set (recognised) */
 | 
			
		||||
#define MCDX_RBIT_CHANGED    0x20	/* disk was changed */
 | 
			
		||||
#define MCDX_RBIT_CHECK      0x10	/* disk rotates, servo is on */
 | 
			
		||||
#define MCDX_RBIT_AUDIOTR    0x08   /* current track is audio */
 | 
			
		||||
#define MCDX_RBIT_RDERR      0x04	/* read error, refer SENSE KEY */
 | 
			
		||||
#define MCDX_RBIT_AUDIOBS    0x02	/* currently playing audio */
 | 
			
		||||
#define MCDX_RBIT_CMDERR     0x01	/* command, param or format error */
 | 
			
		||||
 | 
			
		||||
/* The I/O Register holding the h/w status of the drive,
 | 
			
		||||
 * can be read at i/o base + 1 */
 | 
			
		||||
#define MCDX_RBIT_DOOR       0x10	/* door is open */
 | 
			
		||||
#define MCDX_RBIT_STEN       0x04	/* if 0, i/o base contains drive status */
 | 
			
		||||
#define MCDX_RBIT_DTEN       0x02	/* if 0, i/o base contains data */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	The commands.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define OPCODE	1		/* offset of opcode */
 | 
			
		||||
#define MCDX_CMD_REQUEST_TOC		1, 0x10
 | 
			
		||||
#define MCDX_CMD_REQUEST_STATUS		1, 0x40 
 | 
			
		||||
#define MCDX_CMD_RESET				1, 0x60
 | 
			
		||||
#define MCDX_CMD_REQUEST_DRIVE_MODE	1, 0xc2
 | 
			
		||||
#define MCDX_CMD_SET_INTERLEAVE		2, 0xc8, 0
 | 
			
		||||
#define MCDX_CMD_DATAMODE_SET		2, 0xa0, 0
 | 
			
		||||
	#define MCDX_DATAMODE1		0x01
 | 
			
		||||
	#define MCDX_DATAMODE2		0x02
 | 
			
		||||
#define MCDX_CMD_LOCK_DOOR		2, 0xfe, 0
 | 
			
		||||
 | 
			
		||||
#define READ_AHEAD			4	/* 8 Sectors (4K) */
 | 
			
		||||
 | 
			
		||||
/*	Useful macros */
 | 
			
		||||
#define e_door(x)		((x) & MCDX_RBIT_OPEN)
 | 
			
		||||
#define e_check(x)		(~(x) & MCDX_RBIT_CHECK)
 | 
			
		||||
#define e_notset(x)		(~(x) & MCDX_RBIT_DISKSET)
 | 
			
		||||
#define e_changed(x)	((x) & MCDX_RBIT_CHANGED)
 | 
			
		||||
#define e_audio(x)		((x) & MCDX_RBIT_AUDIOTR)
 | 
			
		||||
#define e_audiobusy(x)	((x) & MCDX_RBIT_AUDIOBS)
 | 
			
		||||
#define e_cmderr(x)		((x) & MCDX_RBIT_CMDERR)
 | 
			
		||||
#define e_readerr(x)	((x) & MCDX_RBIT_RDERR)
 | 
			
		||||
 | 
			
		||||
/**	no drive specific */
 | 
			
		||||
#define MCDX_CDBLK	2048	/* 2048 cooked data each blk */
 | 
			
		||||
 | 
			
		||||
#define MCDX_DATA_TIMEOUT	(HZ/10)	/* 0.1 second */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access to the msf array
 | 
			
		||||
 */
 | 
			
		||||
#define MSF_MIN		0			/* minute */
 | 
			
		||||
#define MSF_SEC		1			/* second */
 | 
			
		||||
#define MSF_FRM		2			/* frame  */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Errors
 | 
			
		||||
 */
 | 
			
		||||
#define MCDX_E		1			/* unspec error */
 | 
			
		||||
#define MCDX_ST_EOM 0x0100		/* end of media */
 | 
			
		||||
#define MCDX_ST_DRV 0x00ff		/* mask to query the drive status */
 | 
			
		||||
 | 
			
		||||
#ifndef I_WAS_HERE
 | 
			
		||||
#ifndef MODULE
 | 
			
		||||
#warning You have not edited mcdx.h
 | 
			
		||||
#warning Perhaps irq and i/o settings are wrong.
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ex:set ts=4 sw=4: */
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,52 +0,0 @@
 | 
			
		||||
/*	linux/include/linux/optcd.h - Optics Storage 8000 AT CDROM driver
 | 
			
		||||
	$Id: optcd.h,v 1.2 1996/01/15 18:43:44 root Exp root $
 | 
			
		||||
 | 
			
		||||
	Copyright (C) 1995 Leo Spiekman (spiekman@dutette.et.tudelft.nl)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	Configuration file for linux/drivers/cdrom/optcd.c
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef _LINUX_OPTCD_H
 | 
			
		||||
#define _LINUX_OPTCD_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* I/O base of drive. Drive uses base to base+2.
 | 
			
		||||
   This setting can be overridden with the kernel or insmod command
 | 
			
		||||
   line option 'optcd=<portbase>'. Use address of 0 to disable driver. */
 | 
			
		||||
#define OPTCD_PORTBASE	0x340
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* enable / disable parts of driver by define / undef */
 | 
			
		||||
#define	MULTISESSION		/* multisession support (ALPHA) */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Change 0 to 1 to debug various parts of the driver */
 | 
			
		||||
#define	DEBUG_DRIVE_IF	0	/* Low level drive interface */
 | 
			
		||||
#define	DEBUG_CONV	0	/* Address conversions */
 | 
			
		||||
#define	DEBUG_BUFFERS	0	/* Buffering and block size conversion */
 | 
			
		||||
#define	DEBUG_REQUEST	0	/* Request mechanism */
 | 
			
		||||
#define	DEBUG_STATE	0	/* State machine */
 | 
			
		||||
#define	DEBUG_TOC	0	/* Q-channel and Table of Contents */
 | 
			
		||||
#define	DEBUG_MULTIS	0	/* Multisession code */
 | 
			
		||||
#define	DEBUG_VFS	0	/* VFS interface */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Don't touch these unless you know what you're doing. */
 | 
			
		||||
 | 
			
		||||
/* Various timeout loop repetition counts. */
 | 
			
		||||
#define BUSY_TIMEOUT		10000000	/* for busy wait */
 | 
			
		||||
#define FAST_TIMEOUT		100000		/* ibid. for probing */
 | 
			
		||||
#define SLEEP_TIMEOUT		6000		/* for timer wait */
 | 
			
		||||
#define MULTI_SEEK_TIMEOUT	1000		/* for timer wait */
 | 
			
		||||
#define READ_TIMEOUT		6000		/* for poll wait */
 | 
			
		||||
#define STOP_TIMEOUT		2000		/* for poll wait */
 | 
			
		||||
#define RESET_WAIT		5000		/* busy wait at drive reset */
 | 
			
		||||
 | 
			
		||||
/* # of buffers for block size conversion. 6 is optimal for my setup (P75),
 | 
			
		||||
   giving 280 kb/s, with 0.4% CPU usage. Experiment to find your optimal
 | 
			
		||||
   setting */
 | 
			
		||||
#define N_BUFS		6
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _LINUX_OPTCD_H */
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,839 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * sbpcd.h   Specify interface address and interface type here.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Attention! This file contains user-serviceable parts!
 | 
			
		||||
 * I recommend to make use of it...
 | 
			
		||||
 * If you feel helpless, look into Documentation/cdrom/sbpcd
 | 
			
		||||
 * (good idea anyway, at least before mailing me).
 | 
			
		||||
 *
 | 
			
		||||
 * The definitions for the first controller can get overridden by
 | 
			
		||||
 * the kernel command line ("lilo boot option").
 | 
			
		||||
 * Examples:
 | 
			
		||||
 *                                 sbpcd=0x300,LaserMate
 | 
			
		||||
 *                             or
 | 
			
		||||
 *                                 sbpcd=0x230,SoundBlaster
 | 
			
		||||
 *                             or
 | 
			
		||||
 *                                 sbpcd=0x338,SoundScape
 | 
			
		||||
 *                             or
 | 
			
		||||
 *                                 sbpcd=0x2C0,Teac16bit
 | 
			
		||||
 *
 | 
			
		||||
 * If sbpcd gets used as a module, you can load it with
 | 
			
		||||
 *     insmod sbpcd.o sbpcd=0x300,0
 | 
			
		||||
 * or
 | 
			
		||||
 *     insmod sbpcd.o sbpcd=0x230,1
 | 
			
		||||
 * or
 | 
			
		||||
 *     insmod sbpcd.o sbpcd=0x338,2
 | 
			
		||||
 * or
 | 
			
		||||
 *     insmod sbpcd.o sbpcd=0x2C0,3
 | 
			
		||||
 * respective to override the configured address and type.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * define your CDROM port base address as CDROM_PORT
 | 
			
		||||
 * and specify the type of your interface card as SBPRO.
 | 
			
		||||
 *
 | 
			
		||||
 * address:
 | 
			
		||||
 * ========
 | 
			
		||||
 * SBPRO type addresses typically are 0x0230 (=0x220+0x10), 0x0250, ...
 | 
			
		||||
 * LASERMATE type (CI-101P, WDH-7001C) addresses typically are 0x0300, ...
 | 
			
		||||
 * SOUNDSCAPE addresses are from the LASERMATE type and range. You have to
 | 
			
		||||
 * specify the REAL address here, not the configuration port address. Look
 | 
			
		||||
 * at the CDROM driver's invoking line within your DOS CONFIG.SYS, or let
 | 
			
		||||
 * sbpcd auto-probe, if you are not firm with the address.
 | 
			
		||||
 * There are some soundcards on the market with 0x0630, 0x0650, ...; their
 | 
			
		||||
 * type is not obvious (both types are possible).
 | 
			
		||||
 *
 | 
			
		||||
 * example: if your SBPRO audio address is 0x220, specify 0x230 and SBPRO 1.
 | 
			
		||||
 *          if your soundcard has its CDROM port above 0x300, specify
 | 
			
		||||
 *          that address and try SBPRO 0 first.
 | 
			
		||||
 *          if your SoundScape configuration port is at 0x330, specify
 | 
			
		||||
 *          0x338 and SBPRO 2.
 | 
			
		||||
 *
 | 
			
		||||
 * interface type:
 | 
			
		||||
 * ===============
 | 
			
		||||
 * set SBPRO to 1 for "true" SoundBlaster card
 | 
			
		||||
 * set SBPRO to 0 for "compatible" soundcards and
 | 
			
		||||
 *                for "poor" (no sound) interface cards.
 | 
			
		||||
 * set SBPRO to 2 for Ensonic SoundScape or SPEA Media FX cards
 | 
			
		||||
 * set SBPRO to 3 for Teac 16bit interface cards
 | 
			
		||||
 *
 | 
			
		||||
 * Almost all "compatible" sound boards need to set SBPRO to 0.
 | 
			
		||||
 * If SBPRO is set wrong, the drives will get found - but any
 | 
			
		||||
 * data access will give errors (audio access will work).
 | 
			
		||||
 * The "OmniCD" no-sound interface card from CreativeLabs and most Teac
 | 
			
		||||
 * interface cards need SBPRO 1.
 | 
			
		||||
 *
 | 
			
		||||
 * sound base:
 | 
			
		||||
 * ===========
 | 
			
		||||
 * The SOUND_BASE definition tells if we should try to turn the CD sound
 | 
			
		||||
 * channels on. It will only be of use regarding soundcards with a SbPro
 | 
			
		||||
 * compatible mixer.
 | 
			
		||||
 *
 | 
			
		||||
 * Example: #define SOUND_BASE 0x220 enables the sound card's CD channels
 | 
			
		||||
 *          #define SOUND_BASE 0     leaves the soundcard untouched
 | 
			
		||||
 */
 | 
			
		||||
#define CDROM_PORT 0x340 /* <-----------<< port address                      */
 | 
			
		||||
#define SBPRO      0     /* <-----------<< interface type                    */
 | 
			
		||||
#define MAX_DRIVES 4     /* set to 1 if the card does not use "drive select" */
 | 
			
		||||
#define SOUND_BASE 0x220 /* <-----------<< sound address of this card or 0   */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * some more or less user dependent definitions - service them!
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Set this to 0 once you have configured your interface definitions right. */
 | 
			
		||||
#define DISTRIBUTION 1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Time to wait after giving a message.
 | 
			
		||||
 * This gets important if you enable non-standard DBG_xxx flags.
 | 
			
		||||
 * You will see what happens if you omit the pause or make it
 | 
			
		||||
 * too short. Be warned!
 | 
			
		||||
 */
 | 
			
		||||
#define KLOGD_PAUSE 1
 | 
			
		||||
 | 
			
		||||
/* tray control: eject tray if no disk is in */
 | 
			
		||||
#if DISTRIBUTION
 | 
			
		||||
#define JUKEBOX 0
 | 
			
		||||
#else
 | 
			
		||||
#define JUKEBOX 1
 | 
			
		||||
#endif /* DISTRIBUTION */
 | 
			
		||||
 | 
			
		||||
/* tray control: eject tray after last use */
 | 
			
		||||
#if DISTRIBUTION
 | 
			
		||||
#define EJECT 0
 | 
			
		||||
#else
 | 
			
		||||
#define EJECT 1
 | 
			
		||||
#endif /* DISTRIBUTION */
 | 
			
		||||
 | 
			
		||||
/* max. number of audio frames to read with one     */
 | 
			
		||||
/* request (allocates n* 2352 bytes kernel memory!) */
 | 
			
		||||
/* may be freely adjusted, f.e. 75 (= 1 sec.), at   */
 | 
			
		||||
/* runtime by use of the CDROMAUDIOBUFSIZ ioctl.    */
 | 
			
		||||
#define READ_AUDIO 0
 | 
			
		||||
 | 
			
		||||
/* Optimizations for the Teac CD-55A drive read performance.
 | 
			
		||||
 * SBP_TEAC_SPEED can be changed here, or one can set the 
 | 
			
		||||
 * variable "teac" when loading as a module.
 | 
			
		||||
 * Valid settings are:
 | 
			
		||||
 *   0 - very slow - the recommended "DISTRIBUTION 1" setup.
 | 
			
		||||
 *   1 - 2x performance with little overhead. No busy waiting.
 | 
			
		||||
 *   2 - 4x performance with 5ms overhead per read. Busy wait.
 | 
			
		||||
 *
 | 
			
		||||
 * Setting SBP_TEAC_SPEED or the variable 'teac' to anything
 | 
			
		||||
 * other than 0 may cause problems. If you run into them, first
 | 
			
		||||
 * change SBP_TEAC_SPEED back to 0 and see if your drive responds
 | 
			
		||||
 * normally. If yes, you are "allowed" to report your case - to help
 | 
			
		||||
 * me with the driver, not to solve your hassle. Don´t mail if you
 | 
			
		||||
 * simply are stuck into your own "tuning" experiments, you know?
 | 
			
		||||
 */
 | 
			
		||||
#define SBP_TEAC_SPEED 1
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*
 | 
			
		||||
 * nothing to change below here if you are not fully aware what you're doing
 | 
			
		||||
 */
 | 
			
		||||
#ifndef _LINUX_SBPCD_H
 | 
			
		||||
 | 
			
		||||
#define _LINUX_SBPCD_H
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*
 | 
			
		||||
 * driver's own read_ahead, data mode
 | 
			
		||||
 */
 | 
			
		||||
#define SBP_BUFFER_FRAMES 8 
 | 
			
		||||
 | 
			
		||||
#define LONG_TIMING 0 /* test against timeouts with "gold" CDs on CR-521 */
 | 
			
		||||
#undef  FUTURE
 | 
			
		||||
#undef SAFE_MIXED
 | 
			
		||||
 | 
			
		||||
#define TEST_UPC 0
 | 
			
		||||
#define SPEA_TEST 0
 | 
			
		||||
#define TEST_STI 0
 | 
			
		||||
#define OLD_BUSY 0
 | 
			
		||||
#undef PATH_CHECK
 | 
			
		||||
#ifndef SOUND_BASE
 | 
			
		||||
#define SOUND_BASE 0
 | 
			
		||||
#endif
 | 
			
		||||
#if DISTRIBUTION
 | 
			
		||||
#undef SBP_TEAC_SPEED
 | 
			
		||||
#define SBP_TEAC_SPEED 0
 | 
			
		||||
#endif
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*
 | 
			
		||||
 * DDI interface definitions
 | 
			
		||||
 * "invented" by Fred N. van Kempen..
 | 
			
		||||
 */
 | 
			
		||||
#define DDIOCSDBG	0x9000
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*
 | 
			
		||||
 * "private" IOCTL functions
 | 
			
		||||
 */
 | 
			
		||||
#define CDROMAUDIOBUFSIZ	0x5382 /* set the audio buffer size */
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*
 | 
			
		||||
 * Debug output levels
 | 
			
		||||
 */
 | 
			
		||||
#define DBG_INF	1	/* necessary information */
 | 
			
		||||
#define DBG_BSZ	2	/* BLOCK_SIZE trace */
 | 
			
		||||
#define DBG_REA	3	/* READ status trace */
 | 
			
		||||
#define DBG_CHK	4	/* MEDIA CHECK trace */
 | 
			
		||||
#define DBG_TIM	5	/* datarate timer test */
 | 
			
		||||
#define DBG_INI	6	/* initialization trace */
 | 
			
		||||
#define DBG_TOC	7	/* tell TocEntry values */
 | 
			
		||||
#define DBG_IOC	8	/* ioctl trace */
 | 
			
		||||
#define DBG_STA	9	/* ResponseStatus() trace */
 | 
			
		||||
#define DBG_ERR	10	/* cc_ReadError() trace */
 | 
			
		||||
#define DBG_CMD	11	/* cmd_out() trace */
 | 
			
		||||
#define DBG_WRN	12	/* give explanation before auto-probing */
 | 
			
		||||
#define DBG_MUL	13	/* multi session code test */
 | 
			
		||||
#define DBG_IDX	14	/* test code for drive_id !=0 */
 | 
			
		||||
#define DBG_IOX	15	/* some special information */
 | 
			
		||||
#define DBG_DID	16	/* drive ID test */
 | 
			
		||||
#define DBG_RES	17	/* drive reset info */
 | 
			
		||||
#define DBG_SPI	18	/* SpinUp test */
 | 
			
		||||
#define DBG_IOS	19	/* ioctl trace: subchannel functions */
 | 
			
		||||
#define DBG_IO2	20	/* ioctl trace: general */
 | 
			
		||||
#define DBG_UPC	21	/* show UPC information */
 | 
			
		||||
#define DBG_XA1	22	/* XA mode debugging */
 | 
			
		||||
#define DBG_LCK	23	/* door (un)lock info */
 | 
			
		||||
#define DBG_SQ1	24	/* dump SubQ frame */
 | 
			
		||||
#define DBG_AUD	25	/* READ AUDIO debugging */
 | 
			
		||||
#define DBG_SEQ	26	/* Sequoia interface configuration trace */
 | 
			
		||||
#define DBG_LCS	27	/* Longshine LCS-7260 debugging trace */
 | 
			
		||||
#define DBG_CD2	28	/* MKE/Funai CD200 debugging trace */
 | 
			
		||||
#define DBG_TEA	29	/* TEAC CD-55A debugging trace */
 | 
			
		||||
#define DBG_ECS	30	/* ECS-AT (Vertos 100) debugging trace */
 | 
			
		||||
#define DBG_000	31	/* unnecessary information */
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * bits of flags_cmd_out:
 | 
			
		||||
 */
 | 
			
		||||
#define f_respo3		0x100
 | 
			
		||||
#define f_putcmd		0x80
 | 
			
		||||
#define f_respo2		0x40
 | 
			
		||||
#define f_lopsta		0x20
 | 
			
		||||
#define f_getsta		0x10
 | 
			
		||||
#define f_ResponseStatus	0x08
 | 
			
		||||
#define f_obey_p_check		0x04
 | 
			
		||||
#define f_bit1			0x02
 | 
			
		||||
#define f_wait_if_busy		0x01
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * diskstate_flags:
 | 
			
		||||
 */
 | 
			
		||||
#define x80_bit			0x80
 | 
			
		||||
#define upc_bit			0x40
 | 
			
		||||
#define volume_bit		0x20
 | 
			
		||||
#define toc_bit			0x10
 | 
			
		||||
#define multisession_bit	0x08
 | 
			
		||||
#define cd_size_bit		0x04
 | 
			
		||||
#define subq_bit		0x02
 | 
			
		||||
#define frame_size_bit		0x01
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * disk states (bits of diskstate_flags):
 | 
			
		||||
 */
 | 
			
		||||
#define upc_valid		(current_drive->diskstate_flags&upc_bit)
 | 
			
		||||
#define volume_valid		(current_drive->diskstate_flags&volume_bit)
 | 
			
		||||
#define toc_valid		(current_drive->diskstate_flags&toc_bit)
 | 
			
		||||
#define cd_size_valid		(current_drive->diskstate_flags&cd_size_bit)
 | 
			
		||||
#define subq_valid		(current_drive->diskstate_flags&subq_bit)
 | 
			
		||||
#define frame_size_valid	(current_drive->diskstate_flags&frame_size_bit)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * the status_bits variable
 | 
			
		||||
 */
 | 
			
		||||
#define p_success	0x100
 | 
			
		||||
#define p_door_closed	0x80
 | 
			
		||||
#define p_caddy_in	0x40
 | 
			
		||||
#define p_spinning	0x20
 | 
			
		||||
#define p_check		0x10
 | 
			
		||||
#define p_busy_new	0x08
 | 
			
		||||
#define p_door_locked	0x04
 | 
			
		||||
#define p_disk_ok	0x01
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * LCS-7260 special status result bits:
 | 
			
		||||
 */
 | 
			
		||||
#define p_lcs_door_locked	0x02
 | 
			
		||||
#define p_lcs_door_closed	0x01 /* probably disk_in */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * CR-52x special status result bits:
 | 
			
		||||
 */
 | 
			
		||||
#define p_caddin_old	0x40
 | 
			
		||||
#define p_success_old	0x08
 | 
			
		||||
#define p_busy_old	0x04
 | 
			
		||||
#define p_bit_1		0x02	/* hopefully unused now */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * "generation specific" defs of the status result bits:
 | 
			
		||||
 */
 | 
			
		||||
#define p0_door_closed	0x80
 | 
			
		||||
#define p0_caddy_in	0x40
 | 
			
		||||
#define p0_spinning	0x20
 | 
			
		||||
#define p0_check	0x10
 | 
			
		||||
#define p0_success	0x08 /* unused */
 | 
			
		||||
#define p0_busy		0x04
 | 
			
		||||
#define p0_bit_1	0x02 /* unused */
 | 
			
		||||
#define p0_disk_ok	0x01
 | 
			
		||||
 | 
			
		||||
#define pL_disk_in	0x40
 | 
			
		||||
#define pL_spinning	0x20
 | 
			
		||||
#define pL_check	0x10
 | 
			
		||||
#define pL_success	0x08 /* unused ?? */
 | 
			
		||||
#define pL_busy		0x04
 | 
			
		||||
#define pL_door_locked	0x02
 | 
			
		||||
#define pL_door_closed	0x01
 | 
			
		||||
 | 
			
		||||
#define pV_door_closed	0x40
 | 
			
		||||
#define pV_spinning	0x20
 | 
			
		||||
#define pV_check	0x10
 | 
			
		||||
#define pV_success	0x08
 | 
			
		||||
#define pV_busy		0x04
 | 
			
		||||
#define pV_door_locked	0x02
 | 
			
		||||
#define pV_disk_ok	0x01
 | 
			
		||||
 | 
			
		||||
#define p1_door_closed	0x80
 | 
			
		||||
#define p1_disk_in	0x40
 | 
			
		||||
#define p1_spinning	0x20
 | 
			
		||||
#define p1_check	0x10
 | 
			
		||||
#define p1_busy		0x08
 | 
			
		||||
#define p1_door_locked	0x04
 | 
			
		||||
#define p1_bit_1	0x02 /* unused */
 | 
			
		||||
#define p1_disk_ok	0x01
 | 
			
		||||
 | 
			
		||||
#define p2_disk_ok	0x80
 | 
			
		||||
#define p2_door_locked	0x40
 | 
			
		||||
#define p2_spinning	0x20
 | 
			
		||||
#define p2_busy2	0x10
 | 
			
		||||
#define p2_busy1	0x08
 | 
			
		||||
#define p2_door_closed	0x04
 | 
			
		||||
#define p2_disk_in	0x02
 | 
			
		||||
#define p2_check	0x01
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * used drive states:
 | 
			
		||||
 */
 | 
			
		||||
#define st_door_closed	(current_drive->status_bits&p_door_closed)
 | 
			
		||||
#define st_caddy_in	(current_drive->status_bits&p_caddy_in)
 | 
			
		||||
#define st_spinning	(current_drive->status_bits&p_spinning)
 | 
			
		||||
#define st_check	(current_drive->status_bits&p_check)
 | 
			
		||||
#define st_busy		(current_drive->status_bits&p_busy_new)
 | 
			
		||||
#define st_door_locked	(current_drive->status_bits&p_door_locked)
 | 
			
		||||
#define st_diskok	(current_drive->status_bits&p_disk_ok)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * bits of the CDi_status register:
 | 
			
		||||
 */
 | 
			
		||||
#define s_not_result_ready	0x04 /* 0: "result ready" */
 | 
			
		||||
#define s_not_data_ready	0x02 /* 0: "data ready"   */
 | 
			
		||||
#define s_attention		0x01 /* 1: "attention required" */
 | 
			
		||||
/*
 | 
			
		||||
 * usable as:
 | 
			
		||||
 */
 | 
			
		||||
#define DRV_ATTN	((inb(CDi_status)&s_attention)!=0)
 | 
			
		||||
#define DATA_READY	((inb(CDi_status)&s_not_data_ready)==0)
 | 
			
		||||
#define RESULT_READY	((inb(CDi_status)&s_not_result_ready)==0)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * drive families and types (firmware versions):
 | 
			
		||||
 */
 | 
			
		||||
#define drv_fam0	0x0100		/* CR-52x family */
 | 
			
		||||
#define drv_199		(drv_fam0+0x01)	/* <200 */
 | 
			
		||||
#define drv_200		(drv_fam0+0x02)	/* <201 */
 | 
			
		||||
#define drv_201		(drv_fam0+0x03)	/* <210 */
 | 
			
		||||
#define drv_210		(drv_fam0+0x04)	/* <211 */
 | 
			
		||||
#define drv_211		(drv_fam0+0x05)	/* <300 */
 | 
			
		||||
#define drv_300		(drv_fam0+0x06)	/* >=300 */
 | 
			
		||||
 | 
			
		||||
#define drv_fam1	0x0200		/* CR-56x family */
 | 
			
		||||
#define drv_099		(drv_fam1+0x01)	/* <100 */
 | 
			
		||||
#define drv_100		(drv_fam1+0x02)	/* >=100, only 1.02 and 5.00 known */
 | 
			
		||||
 | 
			
		||||
#define drv_fam2	0x0400		/* CD200 family */
 | 
			
		||||
 | 
			
		||||
#define drv_famT	0x0800		/* TEAC CD-55A */
 | 
			
		||||
 | 
			
		||||
#define drv_famL	0x1000		/* Longshine family */
 | 
			
		||||
#define drv_260		(drv_famL+0x01)	/* LCS-7260 */
 | 
			
		||||
#define drv_e1		(drv_famL+0x01)	/* LCS-7260, firmware "A E1" */
 | 
			
		||||
#define drv_f4		(drv_famL+0x02)	/* LCS-7260, firmware "A4F4" */
 | 
			
		||||
 | 
			
		||||
#define drv_famV	0x2000		/* ECS-AT (vertos-100) family */
 | 
			
		||||
#define drv_at		(drv_famV+0x01)	/* ECS-AT, firmware "1.00" */
 | 
			
		||||
 | 
			
		||||
#define fam0_drive	(current_drive->drv_type&drv_fam0)
 | 
			
		||||
#define famL_drive	(current_drive->drv_type&drv_famL)
 | 
			
		||||
#define famV_drive	(current_drive->drv_type&drv_famV)
 | 
			
		||||
#define fam1_drive	(current_drive->drv_type&drv_fam1)
 | 
			
		||||
#define fam2_drive	(current_drive->drv_type&drv_fam2)
 | 
			
		||||
#define famT_drive	(current_drive->drv_type&drv_famT)
 | 
			
		||||
#define fam0L_drive	(current_drive->drv_type&(drv_fam0|drv_famL))
 | 
			
		||||
#define fam0V_drive	(current_drive->drv_type&(drv_fam0|drv_famV))
 | 
			
		||||
#define famLV_drive	(current_drive->drv_type&(drv_famL|drv_famV))
 | 
			
		||||
#define fam0LV_drive	(current_drive->drv_type&(drv_fam0|drv_famL|drv_famV))
 | 
			
		||||
#define fam1L_drive	(current_drive->drv_type&(drv_fam1|drv_famL))
 | 
			
		||||
#define fam1V_drive	(current_drive->drv_type&(drv_fam1|drv_famV))
 | 
			
		||||
#define fam1LV_drive	(current_drive->drv_type&(drv_fam1|drv_famL|drv_famV))
 | 
			
		||||
#define fam01_drive	(current_drive->drv_type&(drv_fam0|drv_fam1))
 | 
			
		||||
#define fam12_drive	(current_drive->drv_type&(drv_fam1|drv_fam2))
 | 
			
		||||
#define fam2T_drive	(current_drive->drv_type&(drv_fam2|drv_famT))
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * audio states:
 | 
			
		||||
 */
 | 
			
		||||
#define audio_completed	3 /* Forgot this one! --AJK */
 | 
			
		||||
#define audio_playing	2
 | 
			
		||||
#define audio_pausing	1
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * drv_pattern, drv_options:
 | 
			
		||||
 */
 | 
			
		||||
#define speed_auto	0x80
 | 
			
		||||
#define speed_300	0x40
 | 
			
		||||
#define speed_150	0x20
 | 
			
		||||
#define audio_mono	0x04
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * values of cmd_type (0 else):
 | 
			
		||||
 */
 | 
			
		||||
#define READ_M1	0x01	/* "data mode 1": 2048 bytes per frame */
 | 
			
		||||
#define READ_M2	0x02	/* "data mode 2": 12+2048+280 bytes per frame */
 | 
			
		||||
#define READ_SC	0x04	/* "subchannel info": 96 bytes per frame */
 | 
			
		||||
#define READ_AU	0x08	/* "audio frame": 2352 bytes per frame */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * sense_byte:
 | 
			
		||||
 *
 | 
			
		||||
 *          values: 00
 | 
			
		||||
 *                  01
 | 
			
		||||
 *                  81
 | 
			
		||||
 *                  82 "raw audio" mode
 | 
			
		||||
 *                  xx from infobuf[0] after 85 00 00 00 00 00 00
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* audio status (bin) */
 | 
			
		||||
#define aud_00 0x00 /* Audio status byte not supported or not valid */
 | 
			
		||||
#define audx11 0x0b /* Audio play operation in progress             */
 | 
			
		||||
#define audx12 0x0c /* Audio play operation paused                  */
 | 
			
		||||
#define audx13 0x0d /* Audio play operation successfully completed  */
 | 
			
		||||
#define audx14 0x0e /* Audio play operation stopped due to error    */
 | 
			
		||||
#define audx15 0x0f /* No current audio status to return            */
 | 
			
		||||
/* audio status (bcd) */
 | 
			
		||||
#define aud_11 0x11 /* Audio play operation in progress             */
 | 
			
		||||
#define aud_12 0x12 /* Audio play operation paused                  */
 | 
			
		||||
#define aud_13 0x13 /* Audio play operation successfully completed  */
 | 
			
		||||
#define aud_14 0x14 /* Audio play operation stopped due to error    */
 | 
			
		||||
#define aud_15 0x15 /* No current audio status to return            */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * highest allowed drive number (MINOR+1)
 | 
			
		||||
 */
 | 
			
		||||
#define NR_SBPCD	4
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * we try to never disable interrupts - seems to work
 | 
			
		||||
 */
 | 
			
		||||
#define SBPCD_DIS_IRQ	0
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * "write byte to port"
 | 
			
		||||
 */
 | 
			
		||||
#define OUT(x,y)	outb(y,x)
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
 | 
			
		||||
#define MIXER_addr SOUND_BASE+4 /* sound card's address register */
 | 
			
		||||
#define MIXER_data SOUND_BASE+5 /* sound card's data register */
 | 
			
		||||
#define MIXER_CD_Volume	0x28	/* internal SB Pro register address */
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
 | 
			
		||||
#define MAX_TRACKS	99
 | 
			
		||||
 | 
			
		||||
#define ERR_DISKCHANGE 615
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*
 | 
			
		||||
 * To make conversions easier (machine dependent!)
 | 
			
		||||
 */
 | 
			
		||||
typedef union _msf
 | 
			
		||||
{
 | 
			
		||||
	u_int n;
 | 
			
		||||
	u_char c[4];
 | 
			
		||||
} MSF;
 | 
			
		||||
 | 
			
		||||
typedef union _blk
 | 
			
		||||
{
 | 
			
		||||
	u_int n;
 | 
			
		||||
	u_char c[4];
 | 
			
		||||
} BLK;
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
 | 
			
		||||
/*============================================================================
 | 
			
		||||
==============================================================================
 | 
			
		||||
 | 
			
		||||
COMMAND SET of "old" drives like CR-521, CR-522
 | 
			
		||||
               (the CR-562 family is different):
 | 
			
		||||
 | 
			
		||||
No.	Command			       Code
 | 
			
		||||
--------------------------------------------
 | 
			
		||||
 | 
			
		||||
Drive Commands:
 | 
			
		||||
 1	Seek				01	
 | 
			
		||||
 2	Read Data			02
 | 
			
		||||
 3	Read XA-Data			03
 | 
			
		||||
 4	Read Header			04
 | 
			
		||||
 5	Spin Up				05
 | 
			
		||||
 6	Spin Down			06
 | 
			
		||||
 7	Diagnostic			07
 | 
			
		||||
 8	Read UPC			08
 | 
			
		||||
 9	Read ISRC			09
 | 
			
		||||
10	Play Audio			0A
 | 
			
		||||
11	Play Audio MSF			0B
 | 
			
		||||
12	Play Audio Track/Index		0C
 | 
			
		||||
 | 
			
		||||
Status Commands:
 | 
			
		||||
13	Read Status			81	
 | 
			
		||||
14	Read Error			82
 | 
			
		||||
15	Read Drive Version		83
 | 
			
		||||
16	Mode Select			84
 | 
			
		||||
17	Mode Sense			85
 | 
			
		||||
18	Set XA Parameter		86
 | 
			
		||||
19	Read XA Parameter		87
 | 
			
		||||
20	Read Capacity			88
 | 
			
		||||
21	Read SUB_Q			89
 | 
			
		||||
22	Read Disc Code			8A
 | 
			
		||||
23	Read Disc Information		8B
 | 
			
		||||
24	Read TOC			8C
 | 
			
		||||
25	Pause/Resume			8D
 | 
			
		||||
26	Read Packet			8E
 | 
			
		||||
27	Read Path Check			00
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
all numbers (lba, msf-bin, msf-bcd, counts) to transfer high byte first
 | 
			
		||||
 | 
			
		||||
mnemo     7-byte command        #bytes response (r0...rn)
 | 
			
		||||
________ ____________________  ____ 
 | 
			
		||||
 | 
			
		||||
Read Status:
 | 
			
		||||
status:  81.                    (1)  one-byte command, gives the main
 | 
			
		||||
                                                          status byte
 | 
			
		||||
Read Error:
 | 
			
		||||
check1:  82 00 00 00 00 00 00.  (6)  r1: audio status
 | 
			
		||||
 | 
			
		||||
Read Packet:
 | 
			
		||||
check2:  8e xx 00 00 00 00 00. (xx)  gets xx bytes response, relating
 | 
			
		||||
                                        to commands 01 04 05 07 08 09
 | 
			
		||||
 | 
			
		||||
Play Audio:
 | 
			
		||||
play:    0a ll-bb-aa nn-nn-nn.  (0)  play audio, ll-bb-aa: starting block (lba),
 | 
			
		||||
                                                 nn-nn-nn: #blocks
 | 
			
		||||
Play Audio MSF:
 | 
			
		||||
         0b mm-ss-ff mm-ss-ff   (0)  play audio from/to
 | 
			
		||||
 | 
			
		||||
Play Audio Track/Index:
 | 
			
		||||
         0c ...
 | 
			
		||||
 | 
			
		||||
Pause/Resume:
 | 
			
		||||
pause:   8d pr 00 00 00 00 00.  (0)  pause (pr=00) 
 | 
			
		||||
                                     resume (pr=80) audio playing
 | 
			
		||||
 | 
			
		||||
Mode Select:
 | 
			
		||||
         84 00 nn-nn ??.?? 00   (0)  nn-nn: 2048 or 2340
 | 
			
		||||
                                     possibly defines transfer size
 | 
			
		||||
 | 
			
		||||
set_vol: 84 83 00 00 sw le 00.  (0)  sw(itch): lrxxxxxx (off=1)
 | 
			
		||||
                                     le(vel): min=0, max=FF, else half
 | 
			
		||||
				     (firmware 2.11)
 | 
			
		||||
 | 
			
		||||
Mode Sense:
 | 
			
		||||
get_vol: 85 03 00 00 00 00 00.  (2)  tell current audio volume setting
 | 
			
		||||
 | 
			
		||||
Read Disc Information:
 | 
			
		||||
tocdesc: 8b 00 00 00 00 00 00.  (6)  read the toc descriptor ("msf-bin"-format)
 | 
			
		||||
 | 
			
		||||
Read TOC:
 | 
			
		||||
tocent:  8c fl nn 00 00 00 00.  (8)  read toc entry #nn
 | 
			
		||||
                                       (fl=0:"lba"-, =2:"msf-bin"-format)
 | 
			
		||||
 | 
			
		||||
Read Capacity:
 | 
			
		||||
capacit: 88 00 00 00 00 00 00.  (5)  "read CD-ROM capacity"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Read Path Check:
 | 
			
		||||
ping:    00 00 00 00 00 00 00.  (2)  r0=AA, r1=55
 | 
			
		||||
                                     ("ping" if the drive is connected)
 | 
			
		||||
 | 
			
		||||
Read Drive Version:
 | 
			
		||||
ident:   83 00 00 00 00 00 00. (12)  gives "MATSHITAn.nn" 
 | 
			
		||||
                                     (n.nn = 2.01, 2.11., 3.00, ...)
 | 
			
		||||
 | 
			
		||||
Seek:
 | 
			
		||||
seek:    01 00 ll-bb-aa 00 00.  (0)  
 | 
			
		||||
seek:    01 02 mm-ss-ff 00 00.  (0)  
 | 
			
		||||
 | 
			
		||||
Read Data:
 | 
			
		||||
read:    02 xx-xx-xx nn-nn fl.  (?)  read nn-nn blocks of 2048 bytes,
 | 
			
		||||
                                     starting at block xx-xx-xx  
 | 
			
		||||
                                     fl=0: "lba"-, =2:"msf-bcd"-coded xx-xx-xx
 | 
			
		||||
 | 
			
		||||
Read XA-Data:
 | 
			
		||||
read:    03 xx-xx-xx nn-nn fl.  (?)  read nn-nn blocks of 2340 bytes, 
 | 
			
		||||
                                     starting at block xx-xx-xx
 | 
			
		||||
                                     fl=0: "lba"-, =2:"msf-bcd"-coded xx-xx-xx
 | 
			
		||||
 | 
			
		||||
Read SUB_Q:
 | 
			
		||||
         89 fl 00 00 00 00 00. (13)  r0: audio status, r4-r7: lba/msf, 
 | 
			
		||||
                                       fl=0: "lba", fl=2: "msf"
 | 
			
		||||
 | 
			
		||||
Read Disc Code:
 | 
			
		||||
         8a 00 00 00 00 00 00. (14)  possibly extended "check condition"-info
 | 
			
		||||
 | 
			
		||||
Read Header:
 | 
			
		||||
         04 00 ll-bb-aa 00 00.  (0)   4 bytes response with "check2"
 | 
			
		||||
         04 02 mm-ss-ff 00 00.  (0)   4 bytes response with "check2"
 | 
			
		||||
 | 
			
		||||
Spin Up:
 | 
			
		||||
         05 00 ll-bb-aa 00 00.  (0)  possibly implies a "seek"
 | 
			
		||||
 | 
			
		||||
Spin Down:
 | 
			
		||||
         06 ...
 | 
			
		||||
 | 
			
		||||
Diagnostic:
 | 
			
		||||
         07 00 ll-bb-aa 00 00.  (2)   2 bytes response with "check2"
 | 
			
		||||
         07 02 mm-ss-ff 00 00.  (2)   2 bytes response with "check2"
 | 
			
		||||
 | 
			
		||||
Read UPC:
 | 
			
		||||
         08 00 ll-bb-aa 00 00. (16)  
 | 
			
		||||
         08 02 mm-ss-ff 00 00. (16)  
 | 
			
		||||
 | 
			
		||||
Read ISRC:
 | 
			
		||||
         09 00 ll-bb-aa 00 00. (15)  15 bytes response with "check2"
 | 
			
		||||
         09 02 mm-ss-ff 00 00. (15)  15 bytes response with "check2"
 | 
			
		||||
 | 
			
		||||
Set XA Parameter:
 | 
			
		||||
         86 ...
 | 
			
		||||
 | 
			
		||||
Read XA Parameter:
 | 
			
		||||
         87 ...
 | 
			
		||||
 | 
			
		||||
==============================================================================
 | 
			
		||||
============================================================================*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * commands
 | 
			
		||||
 *
 | 
			
		||||
 * CR-52x:      CMD0_
 | 
			
		||||
 * CR-56x:      CMD1_
 | 
			
		||||
 * CD200:       CMD2_
 | 
			
		||||
 * LCS-7260:    CMDL_
 | 
			
		||||
 * TEAC CD-55A: CMDT_
 | 
			
		||||
 * ECS-AT:      CMDV_
 | 
			
		||||
 */
 | 
			
		||||
#define CMD1_RESET	0x0a
 | 
			
		||||
#define CMD2_RESET	0x01
 | 
			
		||||
#define CMDT_RESET	0xc0
 | 
			
		||||
 | 
			
		||||
#define CMD1_LOCK_CTL	0x0c
 | 
			
		||||
#define CMD2_LOCK_CTL	0x1e
 | 
			
		||||
#define CMDT_LOCK_CTL	CMD2_LOCK_CTL
 | 
			
		||||
#define CMDL_LOCK_CTL	0x0e
 | 
			
		||||
#define CMDV_LOCK_CTL	CMDL_LOCK_CTL
 | 
			
		||||
 | 
			
		||||
#define CMD1_TRAY_CTL	0x07
 | 
			
		||||
#define CMD2_TRAY_CTL	0x1b
 | 
			
		||||
#define CMDT_TRAY_CTL	CMD2_TRAY_CTL
 | 
			
		||||
#define CMDL_TRAY_CTL	0x0d
 | 
			
		||||
#define CMDV_TRAY_CTL	CMDL_TRAY_CTL
 | 
			
		||||
 | 
			
		||||
#define CMD1_MULTISESS	0x8d
 | 
			
		||||
#define CMDL_MULTISESS	0x8c
 | 
			
		||||
#define CMDV_MULTISESS	CMDL_MULTISESS
 | 
			
		||||
 | 
			
		||||
#define CMD1_SUBCHANINF	0x11
 | 
			
		||||
#define CMD2_SUBCHANINF	0x??
 | 
			
		||||
 | 
			
		||||
#define CMD1_ABORT	0x08
 | 
			
		||||
#define CMD2_ABORT	0x08
 | 
			
		||||
#define CMDT_ABORT	0x08
 | 
			
		||||
 | 
			
		||||
#define CMD2_x02	0x02
 | 
			
		||||
 | 
			
		||||
#define CMD2_SETSPEED	0xda
 | 
			
		||||
 | 
			
		||||
#define CMD0_PATH_CHECK	0x00
 | 
			
		||||
#define CMD1_PATH_CHECK	0x???
 | 
			
		||||
#define CMD2_PATH_CHECK	0x???
 | 
			
		||||
#define CMDT_PATH_CHECK	0x???
 | 
			
		||||
#define CMDL_PATH_CHECK	CMD0_PATH_CHECK
 | 
			
		||||
#define CMDV_PATH_CHECK	CMD0_PATH_CHECK
 | 
			
		||||
 | 
			
		||||
#define CMD0_SEEK	0x01
 | 
			
		||||
#define CMD1_SEEK	CMD0_SEEK
 | 
			
		||||
#define CMD2_SEEK	0x2b
 | 
			
		||||
#define CMDT_SEEK	CMD2_SEEK
 | 
			
		||||
#define CMDL_SEEK	CMD0_SEEK
 | 
			
		||||
#define CMDV_SEEK	CMD0_SEEK
 | 
			
		||||
 | 
			
		||||
#define CMD0_READ	0x02
 | 
			
		||||
#define CMD1_READ	0x10
 | 
			
		||||
#define CMD2_READ	0x28
 | 
			
		||||
#define CMDT_READ	CMD2_READ
 | 
			
		||||
#define CMDL_READ	CMD0_READ
 | 
			
		||||
#define CMDV_READ	CMD0_READ
 | 
			
		||||
 | 
			
		||||
#define CMD0_READ_XA	0x03
 | 
			
		||||
#define CMD2_READ_XA	0xd4
 | 
			
		||||
#define CMD2_READ_XA2	0xd5
 | 
			
		||||
#define CMDL_READ_XA	CMD0_READ_XA /* really ?? */
 | 
			
		||||
#define CMDV_READ_XA	CMD0_READ_XA
 | 
			
		||||
 | 
			
		||||
#define CMD0_READ_HEAD	0x04
 | 
			
		||||
 | 
			
		||||
#define CMD0_SPINUP	0x05
 | 
			
		||||
#define CMD1_SPINUP	0x02
 | 
			
		||||
#define CMD2_SPINUP	CMD2_TRAY_CTL
 | 
			
		||||
#define CMDL_SPINUP	CMD0_SPINUP
 | 
			
		||||
#define CMDV_SPINUP	CMD0_SPINUP
 | 
			
		||||
 | 
			
		||||
#define CMD0_SPINDOWN	0x06 /* really??? */
 | 
			
		||||
#define CMD1_SPINDOWN	0x06
 | 
			
		||||
#define CMD2_SPINDOWN	CMD2_TRAY_CTL
 | 
			
		||||
#define CMDL_SPINDOWN	0x0d
 | 
			
		||||
#define CMDV_SPINDOWN	CMD0_SPINDOWN
 | 
			
		||||
 | 
			
		||||
#define CMD0_DIAG	0x07
 | 
			
		||||
 | 
			
		||||
#define CMD0_READ_UPC	0x08
 | 
			
		||||
#define CMD1_READ_UPC	0x88
 | 
			
		||||
#define CMD2_READ_UPC	0x???
 | 
			
		||||
#define CMDL_READ_UPC	CMD0_READ_UPC
 | 
			
		||||
#define CMDV_READ_UPC	0x8f
 | 
			
		||||
 | 
			
		||||
#define CMD0_READ_ISRC	0x09
 | 
			
		||||
 | 
			
		||||
#define CMD0_PLAY	0x0a
 | 
			
		||||
#define CMD1_PLAY	0x???
 | 
			
		||||
#define CMD2_PLAY	0x???
 | 
			
		||||
#define CMDL_PLAY	CMD0_PLAY
 | 
			
		||||
#define CMDV_PLAY	CMD0_PLAY
 | 
			
		||||
 | 
			
		||||
#define CMD0_PLAY_MSF	0x0b
 | 
			
		||||
#define CMD1_PLAY_MSF	0x0e
 | 
			
		||||
#define CMD2_PLAY_MSF	0x47
 | 
			
		||||
#define CMDT_PLAY_MSF	CMD2_PLAY_MSF
 | 
			
		||||
#define CMDL_PLAY_MSF	0x???
 | 
			
		||||
 | 
			
		||||
#define CMD0_PLAY_TI	0x0c
 | 
			
		||||
#define CMD1_PLAY_TI	0x0f
 | 
			
		||||
 | 
			
		||||
#define CMD0_STATUS	0x81
 | 
			
		||||
#define CMD1_STATUS	0x05
 | 
			
		||||
#define CMD2_STATUS	0x00
 | 
			
		||||
#define CMDT_STATUS	CMD2_STATUS
 | 
			
		||||
#define CMDL_STATUS	CMD0_STATUS
 | 
			
		||||
#define CMDV_STATUS	CMD0_STATUS
 | 
			
		||||
#define CMD2_SEEK_LEADIN 0x00
 | 
			
		||||
 | 
			
		||||
#define CMD0_READ_ERR	0x82
 | 
			
		||||
#define CMD1_READ_ERR	CMD0_READ_ERR
 | 
			
		||||
#define CMD2_READ_ERR	0x03
 | 
			
		||||
#define CMDT_READ_ERR	CMD2_READ_ERR /* get audio status */
 | 
			
		||||
#define CMDL_READ_ERR	CMD0_READ_ERR
 | 
			
		||||
#define CMDV_READ_ERR	CMD0_READ_ERR
 | 
			
		||||
 | 
			
		||||
#define CMD0_READ_VER	0x83
 | 
			
		||||
#define CMD1_READ_VER	CMD0_READ_VER
 | 
			
		||||
#define CMD2_READ_VER	0x12
 | 
			
		||||
#define CMDT_READ_VER	CMD2_READ_VER /* really ?? */
 | 
			
		||||
#define CMDL_READ_VER	CMD0_READ_VER
 | 
			
		||||
#define CMDV_READ_VER	CMD0_READ_VER
 | 
			
		||||
 | 
			
		||||
#define CMD0_SETMODE	0x84
 | 
			
		||||
#define CMD1_SETMODE	0x09
 | 
			
		||||
#define CMD2_SETMODE	0x55
 | 
			
		||||
#define CMDT_SETMODE	CMD2_SETMODE
 | 
			
		||||
#define CMDL_SETMODE	CMD0_SETMODE
 | 
			
		||||
 | 
			
		||||
#define CMD0_GETMODE	0x85
 | 
			
		||||
#define CMD1_GETMODE	0x84
 | 
			
		||||
#define CMD2_GETMODE	0x5a
 | 
			
		||||
#define CMDT_GETMODE	CMD2_GETMODE
 | 
			
		||||
#define CMDL_GETMODE	CMD0_GETMODE
 | 
			
		||||
 | 
			
		||||
#define CMD0_SET_XA	0x86
 | 
			
		||||
 | 
			
		||||
#define CMD0_GET_XA	0x87
 | 
			
		||||
 | 
			
		||||
#define CMD0_CAPACITY	0x88
 | 
			
		||||
#define CMD1_CAPACITY	0x85
 | 
			
		||||
#define CMD2_CAPACITY	0x25
 | 
			
		||||
#define CMDL_CAPACITY	CMD0_CAPACITY /* missing in some firmware versions */
 | 
			
		||||
 | 
			
		||||
#define CMD0_READSUBQ	0x89
 | 
			
		||||
#define CMD1_READSUBQ	0x87
 | 
			
		||||
#define CMD2_READSUBQ	0x42
 | 
			
		||||
#define CMDT_READSUBQ	CMD2_READSUBQ
 | 
			
		||||
#define CMDL_READSUBQ	CMD0_READSUBQ
 | 
			
		||||
#define CMDV_READSUBQ	CMD0_READSUBQ
 | 
			
		||||
 | 
			
		||||
#define CMD0_DISKCODE	0x8a
 | 
			
		||||
 | 
			
		||||
#define CMD0_DISKINFO	0x8b
 | 
			
		||||
#define CMD1_DISKINFO	CMD0_DISKINFO
 | 
			
		||||
#define CMD2_DISKINFO	0x43
 | 
			
		||||
#define CMDT_DISKINFO	CMD2_DISKINFO
 | 
			
		||||
#define CMDL_DISKINFO	CMD0_DISKINFO
 | 
			
		||||
#define CMDV_DISKINFO	CMD0_DISKINFO
 | 
			
		||||
 | 
			
		||||
#define CMD0_READTOC	0x8c
 | 
			
		||||
#define CMD1_READTOC	CMD0_READTOC
 | 
			
		||||
#define CMD2_READTOC	0x???
 | 
			
		||||
#define CMDL_READTOC	CMD0_READTOC
 | 
			
		||||
#define CMDV_READTOC	CMD0_READTOC
 | 
			
		||||
 | 
			
		||||
#define CMD0_PAU_RES	0x8d
 | 
			
		||||
#define CMD1_PAU_RES	0x0d
 | 
			
		||||
#define CMD2_PAU_RES	0x4b
 | 
			
		||||
#define CMDT_PAUSE	CMD2_PAU_RES
 | 
			
		||||
#define CMDL_PAU_RES	CMD0_PAU_RES
 | 
			
		||||
#define CMDV_PAUSE	CMD0_PAU_RES
 | 
			
		||||
 | 
			
		||||
#define CMD0_PACKET	0x8e
 | 
			
		||||
#define CMD1_PACKET	CMD0_PACKET
 | 
			
		||||
#define CMD2_PACKET	0x???
 | 
			
		||||
#define CMDL_PACKET	CMD0_PACKET
 | 
			
		||||
#define CMDV_PACKET	0x???
 | 
			
		||||
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
#endif /* _LINUX_SBPCD_H */
 | 
			
		||||
/*==========================================================================*/
 | 
			
		||||
/*
 | 
			
		||||
 * Overrides for Emacs so that we follow Linus's tabbing style.
 | 
			
		||||
 * Emacs will notice this stuff at the end of the file and automatically
 | 
			
		||||
 * adjust the settings for this buffer only.  This must remain at the end
 | 
			
		||||
 * of the file. 
 | 
			
		||||
 * ---------------------------------------------------------------------------
 | 
			
		||||
 * Local variables:
 | 
			
		||||
 * c-indent-level: 8
 | 
			
		||||
 * c-brace-imaginary-offset: 0
 | 
			
		||||
 * c-brace-offset: -8
 | 
			
		||||
 * c-argdecl-indent: 8
 | 
			
		||||
 * c-label-offset: -8
 | 
			
		||||
 * c-continued-statement-offset: 8
 | 
			
		||||
 * c-continued-brace-offset: 0
 | 
			
		||||
 * End:
 | 
			
		||||
 */
 | 
			
		||||
							
								
								
									
										1815
									
								
								drivers/cdrom/sjcd.c
									
									
									
									
									
								
							
							
						
						
									
										1815
									
								
								drivers/cdrom/sjcd.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,181 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Definitions for a Sanyo CD-ROM interface.
 | 
			
		||||
 *
 | 
			
		||||
 *   Copyright (C) 1995  Vadim V. Model
 | 
			
		||||
 *                                       model@cecmow.enet.dec.com
 | 
			
		||||
 *                                       vadim@rbrf.msk.su
 | 
			
		||||
 *                                       vadim@ipsun.ras.ru
 | 
			
		||||
 *                       Eric van der Maarel
 | 
			
		||||
 *                                       H.T.M.v.d.Maarel@marin.nl
 | 
			
		||||
 *
 | 
			
		||||
 *  This information is based on mcd.c from M. Harriss and sjcd102.lst from
 | 
			
		||||
 *  E. Moenkeberg.
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
 *  the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
 *  (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is distributed in the hope that it will be useful,
 | 
			
		||||
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 *  GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with this program; if not, write to the Free Software
 | 
			
		||||
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __SJCD_H__
 | 
			
		||||
#define __SJCD_H__
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Change this to set the I/O port address as default. More flexibility
 | 
			
		||||
 * come with setup implementation.
 | 
			
		||||
 */
 | 
			
		||||
#define SJCD_BASE_ADDR      0x340
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Change this to set the irq as default. Really SANYO do not use interrupts
 | 
			
		||||
 * at all.
 | 
			
		||||
 */
 | 
			
		||||
#define SJCD_INTR_NR        0
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Change this to set the dma as default value. really SANYO does not use
 | 
			
		||||
 * direct memory access at all.
 | 
			
		||||
 */
 | 
			
		||||
#define SJCD_DMA_NR         0
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Macros which allow us to find out the status of the drive.
 | 
			
		||||
 */
 | 
			
		||||
#define SJCD_STATUS_AVAILABLE( x ) (((x)&0x02)==0)
 | 
			
		||||
#define SJCD_DATA_AVAILABLE( x )   (((x)&0x01)==0)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Port access macro. Three ports are available: S-data port (command port),
 | 
			
		||||
 * status port (read only) and D-data port (read only).
 | 
			
		||||
 */
 | 
			
		||||
#define SJCDPORT( x )       ( sjcd_base + ( x ) )
 | 
			
		||||
#define SJCD_STATUS_PORT    SJCDPORT( 1 )
 | 
			
		||||
#define SJCD_S_DATA_PORT    SJCDPORT( 0 )
 | 
			
		||||
#define SJCD_COMMAND_PORT   SJCDPORT( 0 )
 | 
			
		||||
#define SJCD_D_DATA_PORT    SJCDPORT( 2 )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Drive info bits. Drive info available as first (mandatory) byte of
 | 
			
		||||
 * command completion status.
 | 
			
		||||
 */
 | 
			
		||||
#define SST_NOT_READY       0x10        /* no disk in the drive (???) */
 | 
			
		||||
#define SST_MEDIA_CHANGED   0x20        /* disk is changed */
 | 
			
		||||
#define SST_DOOR_OPENED     0x40        /* door is open */
 | 
			
		||||
 | 
			
		||||
/* commands */
 | 
			
		||||
 | 
			
		||||
#define SCMD_EJECT_TRAY     0xD0        /* eject tray if not locked */
 | 
			
		||||
#define SCMD_LOCK_TRAY      0xD2        /* lock tray when in */
 | 
			
		||||
#define SCMD_UNLOCK_TRAY    0xD4        /* unlock tray when in */
 | 
			
		||||
#define SCMD_CLOSE_TRAY     0xD6        /* load tray in */
 | 
			
		||||
 | 
			
		||||
#define SCMD_RESET          0xFA        /* soft reset */
 | 
			
		||||
#define SCMD_GET_STATUS     0x80
 | 
			
		||||
#define SCMD_GET_VERSION    0xCC
 | 
			
		||||
 | 
			
		||||
#define SCMD_DATA_READ      0xA0        /* are the same, depend on mode&args */
 | 
			
		||||
#define SCMD_SEEK           0xA0
 | 
			
		||||
#define SCMD_PLAY           0xA0
 | 
			
		||||
 | 
			
		||||
#define SCMD_GET_QINFO      0xA8
 | 
			
		||||
 | 
			
		||||
#define SCMD_SET_MODE       0xC4
 | 
			
		||||
#define SCMD_MODE_PLAY      0xE0
 | 
			
		||||
#define SCMD_MODE_COOKED    (0xF8 & ~0x20)
 | 
			
		||||
#define SCMD_MODE_RAW       0xF9
 | 
			
		||||
#define SCMD_MODE_x20_BIT   0x20        /* What is it for ? */
 | 
			
		||||
 | 
			
		||||
#define SCMD_SET_VOLUME     0xAE
 | 
			
		||||
#define SCMD_PAUSE          0xE0
 | 
			
		||||
#define SCMD_STOP           0xE0
 | 
			
		||||
 | 
			
		||||
#define SCMD_GET_DISK_INFO  0xAA
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Some standard arguments for SCMD_GET_DISK_INFO.
 | 
			
		||||
 */
 | 
			
		||||
#define SCMD_GET_1_TRACK    0xA0    /* get the first track information */
 | 
			
		||||
#define SCMD_GET_L_TRACK    0xA1    /* get the last track information */
 | 
			
		||||
#define SCMD_GET_D_SIZE     0xA2    /* get the whole disk information */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Borrowed from hd.c. Allows to optimize multiple port read commands.
 | 
			
		||||
 */
 | 
			
		||||
#define S_READ_DATA( port, buf, nr )      insb( port, buf, nr )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * We assume that there are no audio disks with TOC length more than this
 | 
			
		||||
 * number (I personally have never seen disks with more than 20 fragments).
 | 
			
		||||
 */
 | 
			
		||||
#define SJCD_MAX_TRACKS		100
 | 
			
		||||
 | 
			
		||||
struct msf {
 | 
			
		||||
  unsigned char   min;
 | 
			
		||||
  unsigned char   sec;
 | 
			
		||||
  unsigned char   frame;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct sjcd_hw_disk_info {
 | 
			
		||||
  unsigned char track_control;
 | 
			
		||||
  unsigned char track_no;
 | 
			
		||||
  unsigned char x, y, z;
 | 
			
		||||
  union {
 | 
			
		||||
    unsigned char track_no;
 | 
			
		||||
    struct msf track_msf;
 | 
			
		||||
  } un;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct sjcd_hw_qinfo {
 | 
			
		||||
  unsigned char track_control;
 | 
			
		||||
  unsigned char track_no;
 | 
			
		||||
  unsigned char x;
 | 
			
		||||
  struct msf rel;
 | 
			
		||||
  struct msf abs;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct sjcd_play_msf {
 | 
			
		||||
  struct msf  start;
 | 
			
		||||
  struct msf  end;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct sjcd_disk_info {
 | 
			
		||||
  unsigned char   first;
 | 
			
		||||
  unsigned char   last;
 | 
			
		||||
  struct msf      disk_length;
 | 
			
		||||
  struct msf      first_track;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct sjcd_toc {
 | 
			
		||||
  unsigned char   ctrl_addr;
 | 
			
		||||
  unsigned char   track;
 | 
			
		||||
  unsigned char   point_index;
 | 
			
		||||
  struct msf      track_time;
 | 
			
		||||
  struct msf      disk_time;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#if defined( SJCD_GATHER_STAT )
 | 
			
		||||
 | 
			
		||||
struct sjcd_stat {
 | 
			
		||||
  int ticks;
 | 
			
		||||
  int tticks[ 8 ];
 | 
			
		||||
  int idle_ticks;
 | 
			
		||||
  int start_ticks;
 | 
			
		||||
  int mode_ticks;
 | 
			
		||||
  int read_ticks;
 | 
			
		||||
  int data_ticks;
 | 
			
		||||
  int stop_ticks;
 | 
			
		||||
  int stopping_ticks;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,183 +0,0 @@
 | 
			
		||||
#ifndef SONYCD535_H
 | 
			
		||||
#define SONYCD535_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * define all the commands recognized by the CDU-531/5
 | 
			
		||||
 */
 | 
			
		||||
#define SONY535_REQUEST_DRIVE_STATUS_1		(0x80)
 | 
			
		||||
#define SONY535_REQUEST_SENSE			(0x82)
 | 
			
		||||
#define SONY535_REQUEST_DRIVE_STATUS_2		(0x84)
 | 
			
		||||
#define SONY535_REQUEST_ERROR_STATUS		(0x86)
 | 
			
		||||
#define SONY535_REQUEST_AUDIO_STATUS		(0x88)
 | 
			
		||||
#define SONY535_INQUIRY				(0x8a)
 | 
			
		||||
 | 
			
		||||
#define SONY535_SET_INACTIVITY_TIME		(0x90)
 | 
			
		||||
 | 
			
		||||
#define SONY535_SEEK_AND_READ_N_BLOCKS_1	(0xa0)
 | 
			
		||||
#define SONY535_SEEK_AND_READ_N_BLOCKS_2	(0xa4)
 | 
			
		||||
#define SONY535_PLAY_AUDIO			(0xa6)
 | 
			
		||||
 | 
			
		||||
#define SONY535_REQUEST_DISC_CAPACITY		(0xb0)
 | 
			
		||||
#define SONY535_REQUEST_TOC_DATA		(0xb2)
 | 
			
		||||
#define SONY535_REQUEST_SUB_Q_DATA		(0xb4)
 | 
			
		||||
#define SONY535_REQUEST_ISRC			(0xb6)
 | 
			
		||||
#define SONY535_REQUEST_UPC_EAN			(0xb8)
 | 
			
		||||
 | 
			
		||||
#define SONY535_SET_DRIVE_MODE			(0xc0)
 | 
			
		||||
#define SONY535_REQUEST_DRIVE_MODE		(0xc2)
 | 
			
		||||
#define SONY535_SET_RETRY_COUNT			(0xc4)
 | 
			
		||||
 | 
			
		||||
#define SONY535_DIAGNOSTIC_1			(0xc6)
 | 
			
		||||
#define SONY535_DIAGNOSTIC_4			(0xcc)
 | 
			
		||||
#define SONY535_DIAGNOSTIC_5			(0xce)
 | 
			
		||||
 | 
			
		||||
#define SONY535_EJECT_CADDY			(0xd0)
 | 
			
		||||
#define SONY535_DISABLE_EJECT_BUTTON		(0xd2)
 | 
			
		||||
#define SONY535_ENABLE_EJECT_BUTTON		(0xd4)
 | 
			
		||||
 | 
			
		||||
#define SONY535_HOLD				(0xe0)
 | 
			
		||||
#define SONY535_AUDIO_PAUSE_ON_OFF		(0xe2)
 | 
			
		||||
#define SONY535_SET_VOLUME			(0xe8)
 | 
			
		||||
 | 
			
		||||
#define SONY535_STOP				(0xf0)
 | 
			
		||||
#define SONY535_SPIN_UP				(0xf2)
 | 
			
		||||
#define SONY535_SPIN_DOWN			(0xf4)
 | 
			
		||||
 | 
			
		||||
#define SONY535_CLEAR_PARAMETERS		(0xf6)
 | 
			
		||||
#define SONY535_CLEAR_ENDING_ADDRESS		(0xf8)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * define some masks
 | 
			
		||||
 */
 | 
			
		||||
#define SONY535_DATA_NOT_READY_BIT		(0x1)
 | 
			
		||||
#define SONY535_RESULT_NOT_READY_BIT		(0x2)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *  drive status 1
 | 
			
		||||
 */
 | 
			
		||||
#define SONY535_STATUS1_COMMAND_ERROR		(0x1)
 | 
			
		||||
#define SONY535_STATUS1_DATA_ERROR		(0x2)
 | 
			
		||||
#define SONY535_STATUS1_SEEK_ERROR		(0x4)
 | 
			
		||||
#define SONY535_STATUS1_DISC_TYPE_ERROR		(0x8)
 | 
			
		||||
#define SONY535_STATUS1_NOT_SPINNING		(0x10)
 | 
			
		||||
#define SONY535_STATUS1_EJECT_BUTTON_PRESSED	(0x20)
 | 
			
		||||
#define SONY535_STATUS1_CADDY_NOT_INSERTED	(0x40)
 | 
			
		||||
#define SONY535_STATUS1_BYTE_TWO_FOLLOWS	(0x80)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * drive status 2
 | 
			
		||||
 */
 | 
			
		||||
#define SONY535_CDD_LOADING_ERROR		(0x7)
 | 
			
		||||
#define SONY535_CDD_NO_DISC			(0x8)
 | 
			
		||||
#define SONY535_CDD_UNLOADING_ERROR		(0x9)
 | 
			
		||||
#define SONY535_CDD_CADDY_NOT_INSERTED		(0xd)
 | 
			
		||||
#define SONY535_ATN_RESET_OCCURRED		(0x2)
 | 
			
		||||
#define SONY535_ATN_DISC_CHANGED		(0x4)
 | 
			
		||||
#define SONY535_ATN_RESET_AND_DISC_CHANGED	(0x6)
 | 
			
		||||
#define SONY535_ATN_EJECT_IN_PROGRESS		(0xe)
 | 
			
		||||
#define SONY535_ATN_BUSY			(0xf)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * define some parameters
 | 
			
		||||
 */
 | 
			
		||||
#define SONY535_AUDIO_DRIVE_MODE		(0)
 | 
			
		||||
#define SONY535_CDROM_DRIVE_MODE		(0xe0)
 | 
			
		||||
 | 
			
		||||
#define SONY535_PLAY_OP_PLAYBACK		(0)
 | 
			
		||||
#define SONY535_PLAY_OP_ENTER_HOLD		(1)
 | 
			
		||||
#define SONY535_PLAY_OP_SET_AUDIO_ENDING_ADDR	(2)
 | 
			
		||||
#define SONY535_PLAY_OP_SCAN_FORWARD		(3)
 | 
			
		||||
#define SONY535_PLAY_OP_SCAN_BACKWARD		(4)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *  convert from msf format to block number 
 | 
			
		||||
 */
 | 
			
		||||
#define SONY_BLOCK_NUMBER(m,s,f) (((m)*60L+(s))*75L+(f))
 | 
			
		||||
#define SONY_BLOCK_NUMBER_MSF(x) (((x)[0]*60L+(x)[1])*75L+(x)[2])
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *  error return values from the doSonyCmd() routines
 | 
			
		||||
 */
 | 
			
		||||
#define TIME_OUT			(-1)
 | 
			
		||||
#define NO_CDROM			(-2)
 | 
			
		||||
#define BAD_STATUS			(-3)
 | 
			
		||||
#define CD_BUSY				(-4)
 | 
			
		||||
#define NOT_DATA_CD			(-5)
 | 
			
		||||
#define NO_ROOM				(-6)
 | 
			
		||||
 | 
			
		||||
#define LOG_START_OFFSET        150     /* Offset of first logical sector */
 | 
			
		||||
 | 
			
		||||
#define SONY_JIFFIES_TIMEOUT	(5*HZ)	/* Maximum time
 | 
			
		||||
					   the drive will wait/try for an
 | 
			
		||||
					   operation */
 | 
			
		||||
#define SONY_READY_RETRIES      (50000)  /* How many times to retry a
 | 
			
		||||
                                                  spin waiting for a register
 | 
			
		||||
                                                  to come ready */
 | 
			
		||||
#define SONY535_FAST_POLLS	(10000)   /* how many times recheck 
 | 
			
		||||
                                                  status waiting for a data
 | 
			
		||||
                                                  to become ready */
 | 
			
		||||
 | 
			
		||||
typedef unsigned char Byte;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This is the complete status returned from the drive configuration request
 | 
			
		||||
 * command.
 | 
			
		||||
 */
 | 
			
		||||
struct s535_sony_drive_config
 | 
			
		||||
{
 | 
			
		||||
   char vendor_id[8];
 | 
			
		||||
   char product_id[16];
 | 
			
		||||
   char product_rev_level[4];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* The following is returned from the request sub-q data command */
 | 
			
		||||
struct s535_sony_subcode
 | 
			
		||||
{
 | 
			
		||||
   unsigned char address        :4;
 | 
			
		||||
   unsigned char control        :4;
 | 
			
		||||
   unsigned char track_num;
 | 
			
		||||
   unsigned char index_num;
 | 
			
		||||
   unsigned char rel_msf[3];
 | 
			
		||||
   unsigned char abs_msf[3];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct s535_sony_disc_capacity
 | 
			
		||||
{
 | 
			
		||||
   Byte mFirstTrack, sFirstTrack, fFirstTrack;
 | 
			
		||||
   Byte mLeadOut, sLeadOut, fLeadOut;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The following is returned from the request TOC (Table Of Contents) command.
 | 
			
		||||
 * (last_track_num-first_track_num+1) values are valid in tracks.
 | 
			
		||||
 */
 | 
			
		||||
struct s535_sony_toc
 | 
			
		||||
{
 | 
			
		||||
   unsigned char reserved0      :4;
 | 
			
		||||
   unsigned char control0       :4;
 | 
			
		||||
   unsigned char point0;
 | 
			
		||||
   unsigned char first_track_num;
 | 
			
		||||
   unsigned char reserved0a;
 | 
			
		||||
   unsigned char reserved0b;
 | 
			
		||||
   unsigned char reserved1      :4;
 | 
			
		||||
   unsigned char control1       :4;
 | 
			
		||||
   unsigned char point1;
 | 
			
		||||
   unsigned char last_track_num;
 | 
			
		||||
   unsigned char dummy1;
 | 
			
		||||
   unsigned char dummy2;
 | 
			
		||||
   unsigned char reserved2      :4;
 | 
			
		||||
   unsigned char control2       :4;
 | 
			
		||||
   unsigned char point2;
 | 
			
		||||
   unsigned char lead_out_start_msf[3];
 | 
			
		||||
   struct
 | 
			
		||||
   {
 | 
			
		||||
      unsigned char reserved    :4;
 | 
			
		||||
      unsigned char control     :4;
 | 
			
		||||
      unsigned char track;
 | 
			
		||||
      unsigned char track_start_msf[3];
 | 
			
		||||
   } tracks[100];
 | 
			
		||||
 | 
			
		||||
   unsigned int lead_out_start_lba;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif /* SONYCD535_H */
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user