Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

remove the documentation for the legacy CDROM drivers

This patch removes the documentation for the removed legacy CDROM drivers.

Signed-off-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>

authored by

Adrian Bunk and committed by
Jens Axboe
a3e4da54 8f41958b

-2763
-22
Documentation/cdrom/00-INDEX
··· 2 2 - this file (info on CD-ROMs and Linux) 3 3 Makefile 4 4 - only used to generate TeX output from the documentation. 5 - aztcd 6 - - info on Aztech/Orchid/Okano/Wearnes/Conrad/CyCDROM driver. 7 5 cdrom-standard.tex 8 6 - LaTeX document on standardizing the CD-ROM programming interface. 9 - cdu31a 10 - - info on the Sony CDU31A/CDU33A CD-ROM driver. 11 - cm206 12 - - info on the Philips/LMS cm206/cm260 CD-ROM driver. 13 - gscd 14 - - info on the Goldstar R420 CD-ROM driver. 15 7 ide-cd 16 8 - info on setting up and using ATAPI (aka IDE) CD-ROMs. 17 - isp16 18 - - info on the CD-ROM interface on ISP16, MAD16 or Mozart sound card. 19 - mcd 20 - - info on limitations of standard Mitsumi CD-ROM driver. 21 - mcdx 22 - - info on improved Mitsumi CD-ROM driver. 23 - optcd 24 - - info on the Optics Storage 8000 AT CD-ROM driver 25 9 packet-writing.txt 26 10 - Info on the CDRW packet writing module 27 - sbpcd 28 - - info on the SoundBlaster/Panasonic CD-ROM interface driver. 29 - sjcd 30 - - info on the SANYO CDR-H94A CD-ROM interface driver. 31 - sonycd535 32 - - info on the Sony CDU-535 (and 531) CD-ROM driver. 33 11
-822
Documentation/cdrom/aztcd
··· 1 - $Id: README.aztcd,v 2.60 1997/11/29 09:51:25 root Exp root $ 2 - Readme-File Documentation/cdrom/aztcd 3 - for 4 - AZTECH CD-ROM CDA268-01A, ORCHID CD-3110, 5 - OKANO/WEARNES CDD110, CONRAD TXC, CyCDROM CR520, CR540 6 - CD-ROM Drives 7 - Version 2.6 and newer 8 - (for other drives see 6.-8.) 9 - 10 - NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE 11 - A PROPRIETARY INTERFACE (implemented on a sound card or on an 12 - ISA-AT-bus card). 13 - IT WILL DEFINITELY NOT WORK WITH CD-ROM DRIVES WITH *IDE*-INTERFACE, 14 - such as the Aztech CDA269-031SE !!! (The only known exceptions are 15 - 'faked' IDE drives like the CyCDROM CR520ie which work with aztcd 16 - under certain conditions, see 7.). IF YOU'RE USING A CD-ROM DRIVE 17 - WITH IDE-INTERFACE, SOMETIMES ALSO CALLED ATAPI-COMPATIBLE, PLEASE 18 - USE THE ide-cd.c DRIVER, WRITTEN BY MARK LORD AND SCOTT SNYDER ! 19 - THE STANDARD-KERNEL 1.2.x NOW ALSO SUPPORTS IDE-CDROM-DRIVES, SEE THE 20 - HARDDISK (!) SECTION OF make config, WHEN COMPILING A NEW KERNEL!!! 21 - ---------------------------------------------------------------------------- 22 - 23 - Contents of this file: 24 - 1. NOTE 25 - 2. INSTALLATION 26 - 3. CONFIGURING YOUR KERNEL 27 - 4. RECOMPILING YOUR KERNEL 28 - 4.1 AZTCD AS A RUN-TIME LOADABLE MODULE 29 - 4.2 CDROM CONNECTED TO A SOUNDCARD 30 - 5. KNOWN PROBLEMS, FUTURE DEVELOPMENTS 31 - 5.1 MULTISESSION SUPPORT 32 - 5.2 STATUS RECOGNITION 33 - 5.3 DOSEMU's CDROM SUPPORT 34 - 6. BUG REPORTS 35 - 7. OTHER DRIVES 36 - 8. IF YOU DON'T SUCCEED ... DEBUGGING 37 - 9. TECHNICAL HISTORY OF THE DRIVER 38 - 10. ACKNOWLEDGMENTS 39 - 11. PROGRAMMING ADD ONS: CDPLAY.C 40 - APPENDIX: Source code of cdplay.c 41 - ---------------------------------------------------------------------------- 42 - 43 - 1. NOTE 44 - This software has been successfully in alpha and beta test and is part of 45 - the standard kernel since kernel 1.1.8x since December 1994. It works with 46 - AZTECH CDA268-01A, ORCHID CDS-3110, ORCHID/WEARNES CDD110 and CONRAD TXC 47 - (Nr.99 31 23 -series 04) and has proven to be stable with kernel 48 - versions 1.0.9 and newer. But with any software there still may be bugs in it. 49 - So if you encounter problems, you are invited to help us improve this software. 50 - Please send me a detailed bug report (see chapter BUG REPORTS). You are also 51 - invited in helping us to increase the number of drives, which are supported. 52 - 53 - Please read the README-files carefully and always keep a backup copy of your 54 - old kernel, in order to reboot if something goes wrong! 55 - 56 - 2. INSTALLATION 57 - The driver consists of a header file 'aztcd.h', which normally should reside 58 - in /usr/src/linux/drivers/cdrom and the source code 'aztcd.c', which normally 59 - resides in the same place. It uses /dev/aztcd (/dev/aztcd0 in some distri- 60 - butions), which must be a valid block device with major number 29 and reside 61 - in directory /dev. To mount a CD-ROM, your kernel needs to have the ISO9660- 62 - filesystem support included. 63 - 64 - PLEASE NOTE: aztcd.c has been developed in parallel to the linux kernel, 65 - which had and is having many major and minor changes which are not backward 66 - compatible. Quite definitely aztcd.c version 1.80 and newer will NOT work 67 - in kernels older than 1.3.33. So please always use the most recent version 68 - of aztcd.c with the appropriate linux-kernel. 69 - 70 - 3. CONFIGURING YOUR KERNEL 71 - If your kernel is already configured for using the AZTECH driver you will 72 - see the following message while Linux boots: 73 - Aztech CD-ROM Init: DriverVersion=<version number> BaseAddress=<baseaddress> 74 - Aztech CD-ROM Init: FirmwareVersion=<firmware version id of your I/O-card>>> 75 - Aztech CD-ROM Init: <drive type> detected 76 - Aztech CD-ROM Init: End 77 - If the message looks different and you are sure to have a supported drive, 78 - it may have a different base address. The Aztech driver does look for the 79 - CD-ROM drive at the base address specified in aztcd.h at compile time. This 80 - address can be overwritten by boot parameter aztcd=....You should reboot and 81 - start Linux with boot parameter aztcd=<base address>, e.g. aztcd=0x320. If 82 - you do not know the base address, start your PC with DOS and look at the boot 83 - message of your CD-ROM's DOS driver. If that still does not help, use boot 84 - parameter aztcd=<base address>,0x79 , this tells aztcd to try a little harder. 85 - aztcd may be configured to use autoprobing the base address by recompiling 86 - it (see chapter 4.). 87 - 88 - If the message looks correct, as user 'root' you should be able to mount the 89 - drive by 90 - mount -t iso9660 -r /dev/aztcd0 /mnt 91 - and use it as any other filesystem. (If this does not work, check if 92 - /dev/aztcd0 and /mnt do exist and create them, if necessary by doing 93 - mknod /dev/aztcd0 b 29 0 94 - mkdir /mnt 95 - 96 - If you still get a different message while Linux boots or when you get the 97 - message, that the ISO9660-filesystem is not supported by your kernel, when 98 - you try to mount the CD-ROM drive, you have to recompile your kernel. 99 - 100 - If you do *not* have an Aztech/Orchid/Okano/Wearnes/TXC drive and want to 101 - bypass drive detection during Linux boot up, start with boot parameter aztcd=0. 102 - 103 - Most distributions nowadays do contain a boot disk image containing aztcd. 104 - Please note, that this driver will not work with IDE/ATAPI drives! With these 105 - you must use ide-cd.c instead. 106 - 107 - 4. RECOMPILING YOUR KERNEL 108 - If your kernel is not yet configured for the AZTECH driver and the ISO9660- 109 - filesystem, you have to recompile your kernel: 110 - 111 - - Edit aztcd.h to set the I/O-address to your I/O-Base address (AZT_BASE_ADDR), 112 - the driver does not use interrupts or DMA, so if you are using an AZTECH 113 - CD268, an ORCHID CD-3110 or ORCHID/WEARNES CDD110 that's the only item you 114 - have to set up. If you have a soundcard, read chapter 4.2. 115 - Users of other drives should read chapter OTHER DRIVES of this file. 116 - You also can configure that address by kernel boot parameter aztcd=... 117 - - aztcd may be configured to use autoprobing the base address by setting 118 - AZT_BASE_ADDR to '-1'. In that case aztcd probes the addresses listed 119 - under AZT_BASE_AUTO. But please remember, that autoprobing always may 120 - incorrectly influence other hardware components too! 121 - - There are some other points, which may be configured, e.g. auto-eject the 122 - CD when unmounting a drive, tray locking etc., see aztcd.h for details. 123 - - If you're using a linux kernel version prior to 2.1.0, in aztcd.h 124 - uncomment the line '#define AZT_KERNEL_PRIOR_2_1' 125 - - Build a new kernel, configure it for 'Aztech/Orchid/Okano/Wearnes support' 126 - (if you want aztcd to be part of the kernel). Do not configure it for 127 - 'Aztech... support', if you want to use aztcd as a run time loadable module. 128 - But in any case you must have the ISO9660-filesystem included in your 129 - kernel. 130 - - Activate the new kernel, normally this is done by running LILO (don't for- 131 - get to configure it before and to keep a copy of your old kernel in case 132 - something goes wrong!). 133 - - Reboot 134 - - If you've included aztcd in your kernel, you now should see during boot 135 - some messages like 136 - Aztech CD-ROM Init: DriverVersion=<version number> BaseAddress=<baseaddress> 137 - Aztech CD-ROM Init: FirmwareVersion=<firmware version id of your I/O-card> 138 - Aztech CD-ROM Init: <drive type> detected 139 - Aztech CD-ROM Init: End 140 - - If you have not included aztcd in your kernel, but want to load aztcd as a 141 - run time loadable module see 4.1. 142 - - If the message looks correct, as user 'root' you should be able to mount 143 - the drive by 144 - mount -t iso9660 -r /dev/aztcd0 /mnt 145 - and use it as any other filesystem. (If this does not work, check if 146 - /dev/aztcd0 and /mnt do exist and create them, if necessary by doing 147 - mknod /dev/aztcd0 b 29 0 148 - mkdir /mnt 149 - - If this still does not help, see chapters OTHER DRIVES and DEBUGGING. 150 - 151 - 4.1 AZTCD AS A RUN-TIME LOADABLE MODULE 152 - If you do not need aztcd permanently, you can also load and remove the driver 153 - during runtime via insmod and rmmod. To build aztcd as a loadable module you 154 - must configure your kernel for AZTECH module support (answer 'm' when con- 155 - figuring the kernel). Anyhow, you may run into problems, if the version of 156 - your boot kernel is not the same than the source kernel version, from which 157 - you create the modules. So rebuild your kernel, if necessary. 158 - 159 - Now edit the base address of your AZTECH interface card in 160 - /usr/src/linux/drivers/cdrom/aztcd.h to the appropriate value. 161 - aztcd may be configured to use autoprobing the base address by setting 162 - AZT_BASE_ADDR to '-1'. In that case aztcd probes the addresses listed 163 - under AZT_BASE_AUTO. But please remember, that autoprobing always may 164 - incorrectly influence other hardware components too! 165 - There are also some special features which may be configured, e.g. 166 - auto-eject a CD when unmounting the drive etc; see aztcd.h for details. 167 - Then change to /usr/src/linux and do a 168 - make modules 169 - make modules_install 170 - After that you can run-time load the driver via 171 - insmod /lib/modules/X.X.X/misc/aztcd.o 172 - and remove it via rmmod aztcd. 173 - If you did not set the correct base address in aztcd.h, you can also supply the 174 - base address when loading the driver via 175 - insmod /lib/modules/X.X.X/misc/aztcd.o aztcd=<base address> 176 - Again specifying aztcd=-1 will cause autoprobing. 177 - If you do not have the iso9660-filesystem in your boot kernel, you also have 178 - to load it before you can mount the CDROM: 179 - insmod /lib/modules/X.X.X/fs/isofs.o 180 - The mount procedure works as described in 4. above. 181 - (In all commands 'X.X.X' is the current linux kernel version number) 182 - 183 - 4.2 CDROM CONNECTED TO A SOUNDCARD 184 - Most soundcards do have a bus interface to the CDROM-drive. In many cases 185 - this soundcard needs to be configured, before the CDROM can be used. This 186 - configuration procedure consists of writing some kind of initialization 187 - data to the soundcard registers. The AZTECH-CDROM driver in the moment does 188 - only support one type of soundcard (SoundWave32). Users of other soundcards 189 - should try to boot DOS first and let their DOS drivers initialize the 190 - soundcard and CDROM, then warm boot (or use loadlin) their PC to start 191 - Linux. 192 - Support for the CDROM-interface of SoundWave32-soundcards is directly 193 - implemented in the AZTECH driver. Please edit linux/drivers/cdrom/aztdc.h, 194 - uncomment line '#define AZT_SW32' and set the appropriate value for 195 - AZT_BASE_ADDR and AZT_SW32_BASE_ADDR. This support was tested with an Orchid 196 - CDS-3110 connected to a SoundWave32. 197 - If you want your soundcard to be supported, find out, how it needs to be 198 - configured and mail me (see 6.) the appropriate information. 199 - 200 - 5. KNOWN PROBLEMS, FUTURE DEVELOPMENTS 201 - 5.1 MULTISESSION SUPPORT 202 - Multisession support for CD's still is a myth. I implemented and tested a basic 203 - support for multisession and XA CDs, but I still have not enough CDs and appli- 204 - cations to test it rigorously. So if you'd like to help me, please contact me 205 - (Email address see below). As of version 1.4 and newer you can enable the 206 - multisession support in aztcd.h by setting AZT_MULTISESSION to 1. Doing so 207 - will cause the ISO9660-filesystem to deal with multisession CDs, ie. redirect 208 - requests to the Table of Contents (TOC) information from the last session, 209 - which contains the info of all previous sessions etc.. If you do set 210 - AZT_MULTISESSION to 0, you can use multisession CDs anyway. In that case the 211 - drive's firmware will do automatic redirection. For the ISO9660-filesystem any 212 - multisession CD will then look like a 'normal' single session CD. But never- 213 - theless the data of all sessions are viewable and accessible. So with practical- 214 - ly all real world applications you won't notice the difference. But as future 215 - applications may make use of advanced multisession features, I've started to 216 - implement the interface for the ISO9660 multisession interface via ioctl 217 - CDROMMULTISESSION. 218 - 219 - 5.2 STATUS RECOGNITION 220 - The drive status recognition does not work correctly in all cases. Changing 221 - a disk or having the door open, when a drive is already mounted, is detected 222 - by the Aztech driver itself, but nevertheless causes multiple read attempts 223 - by the different layers of the ISO9660-filesystem driver, which finally timeout, 224 - so you have to wait quite a little... But isn't it bad style to change a disk 225 - in a mounted drive, anyhow ?! 226 - 227 - The driver uses busy wait in most cases for the drive handshake (macros 228 - STEN_LOW and DTEN_LOW). I tested with a 486/DX2 at 66MHz and a Pentium at 229 - 60MHz and 90MHz. Whenever you use a much faster machine you are likely to get 230 - timeout messages. In that case edit aztcd.h and increase the timeout value 231 - AZT_TIMEOUT. 232 - 233 - For some 'slow' drive commands I implemented waiting with a timer waitqueue 234 - (macro STEN_LOW_WAIT). If you get this timeout message, you may also edit 235 - aztcd.h and increase the timeout value AZT_STATUS_DELAY. The waitqueue has 236 - shown to be a little critical. If you get kernel panic messages, edit aztcd.c 237 - and substitute STEN_LOW_WAIT by STEN_LOW. Busy waiting with STEN_LOW is more 238 - stable, but also causes CPU overhead. 239 - 240 - 5.3 DOSEMU's CD-ROM SUPPORT 241 - With release 1.20 aztcd was modified to allow access to CD-ROMS when running 242 - under dosemu-0.60.0 aztcd-versions before 1.20 are most likely to crash 243 - Linux, when a CD-ROM is accessed under dosemu. This problem has partly been 244 - fixed, but still when accessing a directory for the first time the system 245 - might hang for some 30sec. So be patient, when using dosemu's CD-ROM support 246 - in combination with aztcd :-) ! 247 - This problem has now (July 1995) been fixed by a modification to dosemu's 248 - CD-ROM driver. The new version came with dosemu-0.60.2, see dosemu's 249 - README.CDROM. 250 - 251 - 6. BUG REPORTS 252 - Please send detailed bug reports and bug fixes via EMail to 253 - 254 - Werner.Zimmermann@fht-esslingen.de 255 - 256 - Please include a description of your CD-ROM drive type and interface card, 257 - the exact firmware message during Linux bootup, the version number of the 258 - AZTECH-CDROM-driver and the Linux kernel version. Also a description of your 259 - system's other hardware could be of interest, especially microprocessor type, 260 - clock frequency, other interface cards such as soundcards, ethernet adapter, 261 - game cards etc.. 262 - 263 - I will try to collect the reports and make the necessary modifications from 264 - time to time. I may also come back to you directly with some bug fixes and 265 - ask you to do further testing and debugging. 266 - 267 - Editors of CD-ROMs are invited to send a 'cooperation' copy of their 268 - CD-ROMs to the volunteers, who provided the CD-ROM support for Linux. My 269 - snail mail address for such 'stuff' is 270 - Prof. Dr. W. Zimmermann 271 - Fachhochschule fuer Technik Esslingen 272 - Fachbereich IT 273 - Flandernstrasse 101 274 - D-73732 Esslingen 275 - Germany 276 - 277 - 278 - 7. OTHER DRIVES 279 - The following drives ORCHID CDS3110, OKANO CDD110, WEARNES CDD110 and Conrad 280 - TXC Nr. 993123-series 04 nearly look the same as AZTECH CDA268-01A, especially 281 - they seem to use the same command codes. So it was quite simple to make the 282 - AZTECH driver work with these drives. 283 - 284 - Unfortunately I do not have any of these drives available, so I couldn't test 285 - it myself. In some installations, it seems necessary to initialize the drive 286 - with the DOS driver before (especially if combined with a sound card) and then 287 - do a warm boot (CTRL-ALT-RESET) or start Linux from DOS, e.g. with 'loadlin'. 288 - 289 - If you do not succeed, read chapter DEBUGGING. Thanks in advance! 290 - 291 - Sorry for the inconvenience, but it is difficult to develop for hardware, 292 - which you don't have available for testing. So if you like, please help us. 293 - 294 - If you do have a CyCDROM CR520ie thanks to Hilmar Berger's help your chances 295 - are good, that it will work with aztcd. The CR520ie is sold as an IDE-drive 296 - and really is connected to the IDE interface (primary at 0x1F0 or secondary 297 - at 0x170, configured as slave, not as master). Nevertheless it is not ATAPI 298 - compatible but still uses Aztech's command codes. 299 - 300 - 301 - 8. DEBUGGING : IF YOU DON'T SUCCEED, TRY THE FOLLOWING 302 - -reread the complete README file 303 - -make sure, that your drive is hardware configured for 304 - transfer mode: polled 305 - IRQ: not used 306 - DMA: not used 307 - Base Address: something like 300, 320 ... 308 - You can check this, when you start the DOS driver, which came with your 309 - drive. By appropriately configuring the drive and the DOS driver you can 310 - check, whether your drive does operate in this mode correctly under DOS. If 311 - it does not operate under DOS, it won't under Linux. 312 - If your drive's base address is something like 0x170 or 0x1F0 (and it is 313 - not a CyCDROM CR520ie or CR 940ie) you most likely are having an IDE/ATAPI- 314 - compatible drive, which is not supported by aztcd.c, use ide-cd.c instead. 315 - Make sure the Base Address is configured correctly in aztcd.h, also make 316 - sure, that /dev/aztcd0 exists with the correct major number (compare it with 317 - the entry in file /usr/include/linux/major.h for the Aztech drive). 318 - -insert a CD-ROM and close the tray 319 - -cold boot your PC (i.e. via the power on switch or the reset button) 320 - -if you start Linux via DOS, e.g. using loadlin, make sure, that the DOS 321 - driver for the CD-ROM drive is not loaded (comment out the calling lines 322 - in DOS' config.sys!) 323 - -look for the aztcd: init message during Linux init and note them exactly 324 - -log in as root and do a mount -t iso9660 /dev/aztcd0 /mnt 325 - -if you don't succeed in the first time, try several times. Try also to open 326 - and close the tray, then mount again. Please note carefully all commands 327 - you typed in and the aztcd-messages, which you get. 328 - -if you get an 'Aztech CD-ROM init: aborted' message, read the remarks about 329 - the version string below. 330 - 331 - If this does not help, do the same with the following differences 332 - -start DOS before; make now sure, that the DOS driver for the CD-ROM is 333 - loaded under DOS (i.e. uncomment it again in config.sys) 334 - -warm boot your PC (i.e. via CTRL-ALT-DEL) 335 - if you have it, you can also start via loadlin (try both). 336 - ... 337 - Again note all commands and the aztcd-messages. 338 - 339 - If you see STEN_LOW or STEN_LOW_WAIT error messages, increase the timeout 340 - values. 341 - 342 - If this still does not help, 343 - -look in aztcd.c for the lines #if 0 344 - #define AZT_TEST1 345 - ... 346 - #endif 347 - and substitute '#if 0' by '#if 1'. 348 - -recompile your kernel and repeat the above two procedures. You will now get 349 - a bundle of debugging messages from the driver. Again note your commands 350 - and the appropriate messages. If you have syslogd running, these messages 351 - may also be found in syslogd's kernel log file. Nevertheless in some 352 - installations syslogd does not yet run, when init() is called, thus look for 353 - the aztcd-messages during init, before the login-prompt appears. 354 - Then look in aztcd.c, to find out, what happened. The normal calling sequence 355 - is: aztcd_init() during Linux bootup procedure init() 356 - after doing a 'mount -t iso9660 /dev/aztcd0 /mnt' the normal calling sequence is 357 - aztcd_open() -> Status 2c after cold reboot with CDROM or audio CD inserted 358 - -> Status 8 after warm reboot with CDROM inserted 359 - -> Status 2e after cold reboot with no disk, closed tray 360 - -> Status 6e after cold reboot, mount with door open 361 - aztUpdateToc() 362 - aztGetDiskInfo() 363 - aztGetQChannelInfo() repeated several times 364 - aztGetToc() 365 - aztGetQChannelInfo() repeated several times 366 - a list of track information 367 - do_aztcd_request() } 368 - azt_transfer() } repeated several times 369 - azt_poll } 370 - Check, if there is a difference in the calling sequence or the status flags! 371 - 372 - There are a lot of other messages, eg. the ACMD-command code (defined in 373 - aztcd.h), status info from the getAztStatus-command and the state sequence of 374 - the finite state machine in azt_poll(). The most important are the status 375 - messages, look how they are defined and try to understand, if they make 376 - sense in the context where they appear. With a CD-ROM inserted the status 377 - should always be 8, except in aztcd_open(). Try to open the tray, insert an 378 - audio disk, insert no disk or reinsert the CD-ROM and check, if the status 379 - bits change accordingly. The status bits are the most likely point, where 380 - the drive manufacturers may implement changes. 381 - 382 - If you still don't succeed, a good point to start is to look in aztcd.c in 383 - function aztcd_init, where the drive should be detected during init. Do the 384 - following: 385 - -reboot the system with boot parameter 'aztcd=<your base address>,0x79'. With 386 - parameter 0x79 most of the drive version detection is bypassed. After that 387 - you should see the complete version string including leading and trailing 388 - blanks during init. 389 - Now adapt the statement 390 - if ((result[1]=='A')&&(result[2]=='Z' ...) 391 - in aztcd_init() to exactly match the first 3 or 4 letters you have seen. 392 - -Another point is the 'smart' card detection feature in aztcd_init(). Normally 393 - the CD-ROM drive is ready, when aztcd_init is trying to read the version 394 - string and a time consuming ACMD_SOFT_RESET command can be avoided. This is 395 - detected by looking, if AFL_OP_OK can be read correctly. If the CD-ROM drive 396 - hangs in some unknown state, e.g. because of an error before a warm start or 397 - because you first operated under DOS, even the version string may be correct, 398 - but the following commands will not. Then change the code in such a way, 399 - that the ACMD_SOFT_RESET is issued in any case, by substituting the 400 - if-statement 'if ( ...=AFL_OP_OK)' by 'if (1)'. 401 - 402 - If you succeed, please mail me the exact version string of your drive and 403 - the code modifications, you have made together with a short explanation. 404 - If you don't succeed, you may mail me the output of the debugging messages. 405 - But remember, they are only useful, if they are exact and complete and you 406 - describe in detail your hardware setup and what you did (cold/warm reboot, 407 - with/without DOS, DOS-driver started/not started, which Linux-commands etc.) 408 - 409 - 410 - 9. TECHNICAL HISTORY OF THE DRIVER 411 - The AZTECH-Driver is a rework of the Mitsumi-Driver. Four major items had to 412 - be reworked: 413 - 414 - a) The Mitsumi drive does issue complete status information acknowledging 415 - each command, the Aztech drive does only signal that the command was 416 - processed. So whenever the complete status information is needed, an extra 417 - ACMD_GET_STATUS command is issued. The handshake procedure for the drive 418 - can be found in the functions aztSendCmd(), sendAztCmd() and getAztStatus(). 419 - 420 - b) The Aztech Drive does not have a ACMD_GET_DISK_INFO command, so the 421 - necessary info about the number of tracks (firstTrack, lastTrack), disk 422 - length etc. has to be read from the TOC in the lead in track (see function 423 - aztGetDiskInfo()). 424 - 425 - c) Whenever data is read from the drive, the Mitsumi drive is started with a 426 - command to read an indefinite (0xffffff) number of sectors. When the appropriate 427 - number of sectors is read, the drive is stopped by a ACDM_STOP command. This 428 - does not work with the Aztech drive. I did not find a way to stop it. The 429 - stop and pause commands do only work in AUDIO mode but not in DATA mode. 430 - Therefore I had to modify the 'finite state machine' in function azt_poll to 431 - only read a certain number of sectors and then start a new read on demand. As I 432 - have not completely understood, how the buffer/caching scheme of the Mitsumi 433 - driver was implemented, I am not sure, if I have covered all cases correctly, 434 - whenever you get timeout messages, the bug is most likely to be in that 435 - function azt_poll() around switch(cmd) .... case ACD_S_DATA. 436 - 437 - d) I did not get information about changing drive mode. So I doubt, that the 438 - code around function azt_poll() case AZT_S_MODE does work. In my test I have 439 - not been able to switch to reading in raw mode. For reading raw mode, Aztech 440 - uses a different command than for cooked mode, which I only have implemen- 441 - ted in the ioctl-section but not in the section which is used by the ISO9660. 442 - 443 - The driver was developed on an AST PC with Intel 486/DX2, 8MB RAM, 340MB IDE 444 - hard disk and on an AST PC with Intel Pentium 60MHz, 16MB RAM, 520MB IDE 445 - running Linux kernel version 1.0.9 from the LST 1.8 Distribution. The kernel 446 - was compiled with gcc.2.5.8. My CD-ROM drive is an Aztech CDA268-01A. My 447 - drive says, that it has Firmware Version AZT26801A1.3. It came with an ISA-bus 448 - interface card and works with polled I/O without DMA and without interrupts. 449 - The code for all other drives was 'remote' tested and debugged by a number of 450 - volunteers on the Internet. 451 - 452 - Points, where I feel that possible problems might be and all points where I 453 - did not completely understand the drive's behaviour or trust my own code are 454 - marked with /*???*/ in the source code. There are also some parts in the 455 - Mitsumi driver, where I did not completely understand their code. 456 - 457 - 458 - 10. ACKNOWLEDGMENTS 459 - Without the help of P.Bush, Aztech, who delivered technical information 460 - about the Aztech Drive and without the help of E.Moenkeberg, GWDG, who did a 461 - great job in analyzing the command structure of various CD-ROM drives, this 462 - work would not have been possible. E.Moenkeberg was also a great help in 463 - making the software 'kernel ready' and in answering many of the CDROM-related 464 - questions in the newsgroups. He really is *the* Linux CD-ROM guru. Thanks 465 - also to all the guys on the Internet, who collected valuable technical 466 - information about CDROMs. 467 - 468 - Joe Nardone (joe@access.digex.net) was a patient tester even for my first 469 - trial, which was more than slow, and made suggestions for code improvement. 470 - Especially the 'finite state machine' azt_poll() was rewritten by Joe to get 471 - clean C code and avoid the ugly 'gotos', which I copied from mcd.c. 472 - 473 - Robby Schirmer (schirmer@fmi.uni-passau.de) tested the audio stuff (ioctls) 474 - and suggested a lot of patches for them. 475 - 476 - Joseph Piskor and Peter Nugent were the first users with the ORCHID CD3110 477 - and also were very patient with the problems which occurred. 478 - 479 - Reinhard Max delivered the information for the CDROM-interface of the 480 - SoundWave32 soundcards. 481 - 482 - Jochen Kunz and Olaf Kaluza delivered the information for supporting Conrad's 483 - TXC drive. 484 - 485 - Hilmar Berger delivered the patches for supporting CyCDROM CR520ie. 486 - 487 - Anybody, who is interested in these items should have a look at 'ftp.gwdg.de', 488 - directory 'pub/linux/cdrom' and at 'ftp.cdrom.com', directory 'pub/cdrom'. 489 - 490 - 11. PROGRAMMING ADD ONs: cdplay.c 491 - You can use the ioctl-functions included in aztcd.c in your own programs. As 492 - an example on how to do this, you will find a tiny CD Player for audio CDs 493 - named 'cdplay.c'. It allows you to play audio CDs. You can play a specified 494 - track, pause and resume or skip tracks forward and backwards. If you quit the 495 - program without stopping the drive, playing is continued. You can also 496 - (mis)use cdplay to read and hexdump data disks. You can find the code in the 497 - APPENDIX of this file, which you should cut out with an editor and store in a 498 - separate file 'cdplay.c'. To compile it and make it executable, do 499 - gcc -s -Wall -O2 -L/usr/lib cdplay.c -o /usr/local/bin/cdplay # compiles it 500 - chmod +755 /usr/local/bin/cdplay # makes it executable 501 - ln -s /dev/aztcd0 /dev/cdrom # creates a link 502 - (for /usr/lib substitute the top level directory, where your include files 503 - reside, and for /usr/local/bin the directory, where you want the executable 504 - binary to reside ) 505 - 506 - You have to set the correct permissions for cdplay *and* for /dev/mcd0 or 507 - /dev/aztcd0 in order to use it. Remember, that you should not have /dev/cdrom 508 - mounted, when you're playing audio CDs. 509 - 510 - This program is just a hack for testing the ioctl-functions in aztcd.c. I will 511 - not maintain it, so if you run into problems, discard it or have a look into 512 - the source code 'cdplay.c'. The program does only contain a minimum of user 513 - protection and input error detection. If you use the commands in the wrong 514 - order or if you try to read a CD at wrong addresses, you may get error messages 515 - or even hang your machine. If you get STEN_LOW, STEN_LOW_WAIT or segment violation 516 - error messages when using cdplay, after that, the system might not be stable 517 - any more, so you'd better reboot. As the ioctl-functions run in kernel mode, 518 - most normal Linux-multitasking protection features do not work. By using 519 - uninitialized 'wild' pointers etc., it is easy to write to other users' data 520 - and program areas, destroy kernel tables etc.. So if you experiment with ioctls 521 - as always when you are doing systems programming and kernel hacking, you 522 - should have a backup copy of your system in a safe place (and you also 523 - should try restoring from a backup copy first)! 524 - 525 - A reworked and improved version called 'cdtester.c', which has yet more 526 - features for testing CDROM-drives can be found in 527 - Documentation/cdrom/sbpcd, written by E.Moenkeberg. 528 - 529 - Werner Zimmermann 530 - Fachhochschule fuer Technik Esslingen 531 - (EMail: Werner.Zimmermann@fht-esslingen.de) 532 - October, 1997 533 - 534 - --------------------------------------------------------------------------- 535 - APPENDIX: Source code of cdplay.c 536 - 537 - /* Tiny Audio CD Player 538 - 539 - Copyright 1994, 1995, 1996 Werner Zimmermann (Werner.Zimmermann@fht-esslingen.de) 540 - 541 - This program originally was written to test the audio functions of the 542 - AZTECH.CDROM-driver, but it should work with every CD-ROM drive. Before 543 - using it, you should set a symlink from /dev/cdrom to your real CDROM 544 - device. 545 - 546 - The GNU General Public License applies to this program. 547 - 548 - History: V0.1 W.Zimmermann: First release. Nov. 8, 1994 549 - V0.2 W.Zimmermann: Enhanced functionality. Nov. 9, 1994 550 - V0.3 W.Zimmermann: Additional functions. Nov. 28, 1994 551 - V0.4 W.Zimmermann: fixed some bugs. Dec. 17, 1994 552 - V0.5 W.Zimmermann: clean 'scanf' commands without compiler warnings 553 - Jan. 6, 1995 554 - V0.6 W.Zimmermann: volume control (still experimental). Jan. 24, 1995 555 - V0.7 W.Zimmermann: read raw modified. July 26, 95 556 - */ 557 - 558 - #include <stdio.h> 559 - #include <ctype.h> 560 - #include <sys/ioctl.h> 561 - #include <sys/types.h> 562 - #include <fcntl.h> 563 - #include <unistd.h> 564 - #include <linux/cdrom.h> 565 - #include <linux/../../drivers/cdrom/aztcd.h> 566 - 567 - void help(void) 568 - { printf("Available Commands: STOP s EJECT/CLOSE e QUIT q\n"); 569 - printf(" PLAY TRACK t PAUSE p RESUME r\n"); 570 - printf(" NEXT TRACK n REPEAT LAST l HELP h\n"); 571 - printf(" SUB CHANNEL c TRACK INFO i PLAY AT a\n"); 572 - printf(" READ d READ RAW w VOLUME v\n"); 573 - } 574 - 575 - int main(void) 576 - { int handle; 577 - unsigned char command=' ', ini=0, first=1, last=1; 578 - unsigned int cmd, i,j,k, arg1,arg2,arg3; 579 - struct cdrom_ti ti; 580 - struct cdrom_tochdr tocHdr; 581 - struct cdrom_subchnl subchnl; 582 - struct cdrom_tocentry entry; 583 - struct cdrom_msf msf; 584 - union { struct cdrom_msf msf; 585 - unsigned char buf[CD_FRAMESIZE_RAW]; 586 - } azt; 587 - struct cdrom_volctrl volctrl; 588 - 589 - printf("\nMini-Audio CD-Player V0.72 (C) 1994,1995,1996 W.Zimmermann\n"); 590 - handle=open("/dev/cdrom",O_RDWR); 591 - ioctl(handle,CDROMRESUME); 592 - 593 - if (handle<=0) 594 - { printf("Drive Error: already playing, no audio disk, door open\n"); 595 - printf(" or no permission (you must be ROOT in order to use this program)\n"); 596 - } 597 - else 598 - { help(); 599 - while (1) 600 - { printf("Type command (h = help): "); 601 - scanf("%s",&command); 602 - switch (command) 603 - { case 'e': cmd=CDROMEJECT; 604 - ioctl(handle,cmd); 605 - break; 606 - case 'p': if (!ini) 607 - { printf("Command not allowed - play track first\n"); 608 - } 609 - else 610 - { cmd=CDROMPAUSE; 611 - if (ioctl(handle,cmd)) printf("Drive Error\n"); 612 - } 613 - break; 614 - case 'r': if (!ini) 615 - { printf("Command not allowed - play track first\n"); 616 - } 617 - else 618 - { cmd=CDROMRESUME; 619 - if (ioctl(handle,cmd)) printf("Drive Error\n"); 620 - } 621 - break; 622 - case 's': cmd=CDROMPAUSE; 623 - if (ioctl(handle,cmd)) printf("Drive error or already stopped\n"); 624 - cmd=CDROMSTOP; 625 - if (ioctl(handle,cmd)) printf("Drive error\n"); 626 - break; 627 - case 't': cmd=CDROMREADTOCHDR; 628 - if (ioctl(handle,cmd,&tocHdr)) printf("Drive Error\n"); 629 - first=tocHdr.cdth_trk0; 630 - last= tocHdr.cdth_trk1; 631 - if ((first==0)||(first>last)) 632 - { printf ("--could not read TOC\n"); 633 - } 634 - else 635 - { printf("--first track: %d --last track: %d --enter track number: ",first,last); 636 - cmd=CDROMPLAYTRKIND; 637 - scanf("%i",&arg1); 638 - ti.cdti_trk0=arg1; 639 - if (ti.cdti_trk0<first) ti.cdti_trk0=first; 640 - if (ti.cdti_trk0>last) ti.cdti_trk0=last; 641 - ti.cdti_ind0=0; 642 - ti.cdti_trk1=last; 643 - ti.cdti_ind1=0; 644 - if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); 645 - ini=1; 646 - } 647 - break; 648 - case 'n': if (!ini++) 649 - { if (ioctl(handle,CDROMREADTOCHDR,&tocHdr)) printf("Drive Error\n"); 650 - first=tocHdr.cdth_trk0; 651 - last= tocHdr.cdth_trk1; 652 - ti.cdti_trk0=first-1; 653 - } 654 - if ((first==0)||(first>last)) 655 - { printf ("--could not read TOC\n"); 656 - } 657 - else 658 - { cmd=CDROMPLAYTRKIND; 659 - if (++ti.cdti_trk0 > last) ti.cdti_trk0=last; 660 - ti.cdti_ind0=0; 661 - ti.cdti_trk1=last; 662 - ti.cdti_ind1=0; 663 - if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); 664 - ini=1; 665 - } 666 - break; 667 - case 'l': if (!ini++) 668 - { if (ioctl(handle,CDROMREADTOCHDR,&tocHdr)) printf("Drive Error\n"); 669 - first=tocHdr.cdth_trk0; 670 - last= tocHdr.cdth_trk1; 671 - ti.cdti_trk0=first+1; 672 - } 673 - if ((first==0)||(first>last)) 674 - { printf ("--could not read TOC\n"); 675 - } 676 - else 677 - { cmd=CDROMPLAYTRKIND; 678 - if (--ti.cdti_trk0 < first) ti.cdti_trk0=first; 679 - ti.cdti_ind0=0; 680 - ti.cdti_trk1=last; 681 - ti.cdti_ind1=0; 682 - if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); 683 - ini=1; 684 - } 685 - break; 686 - case 'c': subchnl.cdsc_format=CDROM_MSF; 687 - if (ioctl(handle,CDROMSUBCHNL,&subchnl)) 688 - printf("Drive Error\n"); 689 - else 690 - { printf("AudioStatus:%s Track:%d Mode:%d MSF=%d:%d:%d\n", \ 691 - subchnl.cdsc_audiostatus==CDROM_AUDIO_PLAY ? "PLAYING":"NOT PLAYING",\ 692 - subchnl.cdsc_trk,subchnl.cdsc_adr, \ 693 - subchnl.cdsc_absaddr.msf.minute, subchnl.cdsc_absaddr.msf.second, \ 694 - subchnl.cdsc_absaddr.msf.frame); 695 - } 696 - break; 697 - case 'i': if (!ini) 698 - { printf("Command not allowed - play track first\n"); 699 - } 700 - else 701 - { cmd=CDROMREADTOCENTRY; 702 - printf("Track No.: "); 703 - scanf("%d",&arg1); 704 - entry.cdte_track=arg1; 705 - if (entry.cdte_track<first) entry.cdte_track=first; 706 - if (entry.cdte_track>last) entry.cdte_track=last; 707 - entry.cdte_format=CDROM_MSF; 708 - if (ioctl(handle,cmd,&entry)) 709 - { printf("Drive error or invalid track no.\n"); 710 - } 711 - else 712 - { printf("Mode %d Track, starts at %d:%d:%d\n", \ 713 - entry.cdte_adr,entry.cdte_addr.msf.minute, \ 714 - entry.cdte_addr.msf.second,entry.cdte_addr.msf.frame); 715 - } 716 - } 717 - break; 718 - case 'a': cmd=CDROMPLAYMSF; 719 - printf("Address (min:sec:frame) "); 720 - scanf("%d:%d:%d",&arg1,&arg2,&arg3); 721 - msf.cdmsf_min0 =arg1; 722 - msf.cdmsf_sec0 =arg2; 723 - msf.cdmsf_frame0=arg3; 724 - if (msf.cdmsf_sec0 > 59) msf.cdmsf_sec0 =59; 725 - if (msf.cdmsf_frame0> 74) msf.cdmsf_frame0=74; 726 - msf.cdmsf_min1=60; 727 - msf.cdmsf_sec1=00; 728 - msf.cdmsf_frame1=00; 729 - if (ioctl(handle,cmd,&msf)) 730 - { printf("Drive error or invalid address\n"); 731 - } 732 - break; 733 - #ifdef AZT_PRIVATE_IOCTLS /*not supported by every CDROM driver*/ 734 - case 'd': cmd=CDROMREADCOOKED; 735 - printf("Address (min:sec:frame) "); 736 - scanf("%d:%d:%d",&arg1,&arg2,&arg3); 737 - azt.msf.cdmsf_min0 =arg1; 738 - azt.msf.cdmsf_sec0 =arg2; 739 - azt.msf.cdmsf_frame0=arg3; 740 - if (azt.msf.cdmsf_sec0 > 59) azt.msf.cdmsf_sec0 =59; 741 - if (azt.msf.cdmsf_frame0> 74) azt.msf.cdmsf_frame0=74; 742 - if (ioctl(handle,cmd,&azt.msf)) 743 - { printf("Drive error, invalid address or unsupported command\n"); 744 - } 745 - k=0; 746 - getchar(); 747 - for (i=0;i<128;i++) 748 - { printf("%4d:",i*16); 749 - for (j=0;j<16;j++) 750 - { printf("%2x ",azt.buf[i*16+j]); 751 - } 752 - for (j=0;j<16;j++) 753 - { if (isalnum(azt.buf[i*16+j])) 754 - printf("%c",azt.buf[i*16+j]); 755 - else 756 - printf("."); 757 - } 758 - printf("\n"); 759 - k++; 760 - if (k>=20) 761 - { printf("press ENTER to continue\n"); 762 - getchar(); 763 - k=0; 764 - } 765 - } 766 - break; 767 - case 'w': cmd=CDROMREADRAW; 768 - printf("Address (min:sec:frame) "); 769 - scanf("%d:%d:%d",&arg1,&arg2,&arg3); 770 - azt.msf.cdmsf_min0 =arg1; 771 - azt.msf.cdmsf_sec0 =arg2; 772 - azt.msf.cdmsf_frame0=arg3; 773 - if (azt.msf.cdmsf_sec0 > 59) azt.msf.cdmsf_sec0 =59; 774 - if (azt.msf.cdmsf_frame0> 74) azt.msf.cdmsf_frame0=74; 775 - if (ioctl(handle,cmd,&azt)) 776 - { printf("Drive error, invalid address or unsupported command\n"); 777 - } 778 - k=0; 779 - for (i=0;i<147;i++) 780 - { printf("%4d:",i*16); 781 - for (j=0;j<16;j++) 782 - { printf("%2x ",azt.buf[i*16+j]); 783 - } 784 - for (j=0;j<16;j++) 785 - { if (isalnum(azt.buf[i*16+j])) 786 - printf("%c",azt.buf[i*16+j]); 787 - else 788 - printf("."); 789 - } 790 - printf("\n"); 791 - k++; 792 - if (k>=20) 793 - { getchar(); 794 - k=0; 795 - } 796 - } 797 - break; 798 - #endif 799 - case 'v': cmd=CDROMVOLCTRL; 800 - printf("--Channel 0 Left (0-255): "); 801 - scanf("%d",&arg1); 802 - printf("--Channel 1 Right (0-255): "); 803 - scanf("%d",&arg2); 804 - volctrl.channel0=arg1; 805 - volctrl.channel1=arg2; 806 - volctrl.channel2=0; 807 - volctrl.channel3=0; 808 - if (ioctl(handle,cmd,&volctrl)) 809 - { printf("Drive error or unsupported command\n"); 810 - } 811 - break; 812 - case 'q': if (close(handle)) printf("Drive Error: CLOSE\n"); 813 - exit(0); 814 - case 'h': help(); 815 - break; 816 - default: printf("unknown command\n"); 817 - break; 818 - } 819 - } 820 - } 821 - return 0; 822 - }
-196
Documentation/cdrom/cdu31a
··· 1 - 2 - CDU31A/CDU33A Driver Info 3 - ------------------------- 4 - 5 - Information on the Sony CDU31A/CDU33A CDROM driver for the Linux 6 - kernel. 7 - 8 - Corey Minyard (minyard@metronet.com) 9 - 10 - Colossians 3:17 11 - 12 - Crude Table of Contents 13 - ----------------------- 14 - 15 - Setting Up the Hardware 16 - Configuring the Kernel 17 - Configuring as a Module 18 - Driver Special Features 19 - 20 - 21 - This device driver handles Sony CDU31A/CDU33A CDROM drives and 22 - provides a complete block-level interface as well as an ioctl() 23 - interface as specified in include/linux/cdrom.h). With this 24 - interface, CDROMs can be accessed, standard audio CDs can be played 25 - back normally, and CD audio information can be read off the drive. 26 - 27 - Note that this will only work for CDU31A/CDU33A drives. Some vendors 28 - market their drives as CDU31A compatible. They lie. Their drives are 29 - really CDU31A hardware interface compatible (they can plug into the 30 - same card). They are not software compatible. 31 - 32 - Setting Up the Hardware 33 - ----------------------- 34 - 35 - The CDU31A driver is unable to safely tell if an interface card is 36 - present that it can use because the interface card does not announce 37 - its presence in any way besides placing 4 I/O locations in memory. It 38 - used to just probe memory and attempt commands, but Linus wisely asked 39 - me to remove that because it could really screw up other hardware in 40 - the system. 41 - 42 - Because of this, you must tell the kernel where the drive interface 43 - is, what interrupts are used, and possibly if you are on a PAS-16 44 - soundcard. 45 - 46 - If you have the Sony CDU31A/CDU33A drive interface card, the following 47 - diagram will help you set it up. If you have another card, you are on 48 - your own. You need to make sure that the I/O address and interrupt is 49 - not used by another card in the system. You will need to know the I/O 50 - address and interrupt you have set. Note that use of interrupts is 51 - highly recommended, if possible, it really cuts down on CPU used. 52 - Unfortunately, most soundcards do not support interrupts for their 53 - CDROM interfaces. By default, the Sony interface card comes with 54 - interrupts disabled. 55 - 56 - +----------+-----------------+----------------------+ 57 - | JP1 | 34 Pin Conn | | 58 - | JP2 +-----------------+ | 59 - | JP3 | 60 - | JP4 | 61 - | +--+ 62 - | | +-+ 63 - | | | | External 64 - | | | | Connector 65 - | | | | 66 - | | +-+ 67 - | +--+ 68 - | | 69 - | +--------+ 70 - | | 71 - +------------------------------------------+ 72 - 73 - JP1 sets the Base Address, using the following settings: 74 - 75 - Address Pin 1 Pin 2 76 - ------- ----- ----- 77 - 0x320 Short Short 78 - 0x330 Short Open 79 - 0x340 Open Short 80 - 0x360 Open Open 81 - 82 - JP2 and JP3 configure the DMA channel; they must be set the same. 83 - 84 - DMA Pin 1 Pin 2 Pin 3 85 - --- ----- ----- ----- 86 - 1 On Off On 87 - 2 Off On Off 88 - 3 Off Off On 89 - 90 - JP4 Configures the IRQ: 91 - 92 - IRQ Pin 1 Pin 2 Pin 3 Pin 4 93 - --- ----- ----- ----- ----- 94 - 3 Off Off On Off 95 - 4 Off Off* Off On 96 - 5 On Off Off Off 97 - 6 Off On Off Off 98 - 99 - The documentation states to set this for interrupt 100 - 4, but I think that is a mistake. 101 - 102 - Note that if you have another interface card, you will need to look at 103 - the documentation to find the I/O base address. This is specified to 104 - the SLCD.SYS driver for DOS with the /B: parameter, so you can look at 105 - you DOS driver setup to find the address, if necessary. 106 - 107 - Configuring the Kernel 108 - ---------------------- 109 - 110 - You must tell the kernel where the drive is at boot time. This can be 111 - done at the Linux boot prompt, by using LILO, or by using Bootlin. 112 - Note that this is no substitute for HOWTOs and LILO documentation, if 113 - you are confused please read those for info on bootline configuration 114 - and LILO. 115 - 116 - At the linux boot prompt, press the ALT key and add the following line 117 - after the boot name (you can let the kernel boot, it will tell you the 118 - default boot name while booting): 119 - 120 - cdu31a=<base address>,<interrupt>[,PAS] 121 - 122 - The base address needs to have "0x" in front of it, since it is in 123 - hex. For instance, to configure a drive at address 320 on interrupt 5, 124 - use the following: 125 - 126 - cdu31a=0x320,5 127 - 128 - I use the following boot line: 129 - 130 - cdu31a=0x1f88,0,PAS 131 - 132 - because I have a PAS-16 which does not support interrupt for the 133 - CDU31A interface. 134 - 135 - Adding this as an append line at the beginning of the /etc/lilo.conf 136 - file will set it for lilo configurations. I have the following as the 137 - first line in my lilo.conf file: 138 - 139 - append="cdu31a=0x1f88,0" 140 - 141 - I'm not sure how to set up Bootlin (I have never used it), if someone 142 - would like to fill in this section please do. 143 - 144 - 145 - Configuring as a Module 146 - ----------------------- 147 - 148 - The driver supports loading as a module. However, you must specify 149 - the boot address and interrupt on the boot line to insmod. You can't 150 - use modprobe to load it, since modprobe doesn't support setting 151 - variables. 152 - 153 - Anyway, I use the following line to load my driver as a module 154 - 155 - /sbin/insmod /lib/modules/`uname -r`/misc/cdu31a.o cdu31a_port=0x1f88 156 - 157 - You can set the following variables in the driver: 158 - 159 - cdu31a_port=<I/O address> - sets the base I/O. If hex, put 0x in 160 - front of it. This must be specified. 161 - 162 - cdu31a_irq=<interrupt> - Sets the interrupt number. Leaving this 163 - off will turn interrupts off. 164 - 165 - 166 - Driver Special Features 167 - ----------------------- 168 - 169 - This section describes features beyond the normal audio and CD-ROM 170 - functions of the drive. 171 - 172 - 2048 byte buffer mode 173 - 174 - If a disk is mounted with -o block=2048, data is copied straight from 175 - the drive data port to the buffer. Otherwise, the readahead buffer 176 - must be involved to hold the other 1K of data when a 1K block 177 - operation is done. Note that with 2048 byte blocks you cannot execute 178 - files from the CD. 179 - 180 - XA compatibility 181 - 182 - The driver should support XA disks for both the CDU31A and CDU33A. It 183 - does this transparently, the using program doesn't need to set it. 184 - 185 - Multi-Session 186 - 187 - A multi-session disk looks just like a normal disk to the user. Just 188 - mount one normally, and all the data should be there. A special 189 - thanks to Koen for help with this! 190 - 191 - Raw sector I/O 192 - 193 - Using the CDROMREADAUDIO it is possible to read raw audio and data 194 - tracks. Both operations return 2352 bytes per sector. On the data 195 - tracks, the first 12 bytes is not returned by the drive and the value 196 - of that data is indeterminate.
-185
Documentation/cdrom/cm206
··· 1 - This is the readme file for the driver for the Philips/LMS cdrom drive 2 - cm206 in combination with the cm260 host adapter card. 3 - 4 - (c) 1995 David A. van Leeuwen 5 - 6 - Changes since version 0.99 7 - -------------------------- 8 - - Interfacing to the kernel is routed though an extra interface layer, 9 - cdrom.c. This allows runtime-configurable `behavior' of the cdrom-drive, 10 - independent of the driver. 11 - 12 - Features since version 0.33 13 - --------------------------- 14 - - Full audio support, that is, both workman, workbone and cdp work 15 - now reasonably. Reading TOC still takes some time. xmcd has been 16 - reported to run successfully. 17 - - Made auto-probe code a little better, I hope 18 - 19 - Features since version 0.28 20 - --------------------------- 21 - - Full speed transfer rate (300 kB/s). 22 - - Minimum kernel memory usage for buffering (less than 3 kB). 23 - - Multisession support. 24 - - Tray locking. 25 - - Statistics of driver accessible to the user. 26 - - Module support. 27 - - Auto-probing of adapter card's base port and irq line, 28 - also configurable at boot time or module load time. 29 - 30 - 31 - Decide how you are going to use the driver. There are two 32 - options: 33 - 34 - (a) installing the driver as a resident part of the kernel 35 - (b) compiling the driver as a loadable module 36 - 37 - Further, you must decide if you are going to specify the base port 38 - address and the interrupt request line of the adapter card cm260 as 39 - boot options for (a), module parameters for (b), use automatic 40 - probing of these values, or hard-wire your adaptor card's settings 41 - into the source code. If you don't care, you can choose 42 - autoprobing, which is the default. In that case you can move on to 43 - the next step. 44 - 45 - Compiling the kernel 46 - -------------------- 47 - 1) move to /usr/src/linux and do a 48 - 49 - make config 50 - 51 - If you have chosen option (a), answer yes to CONFIG_CM206 and 52 - CONFIG_ISO9660_FS. 53 - 54 - If you have chosen option (b), answer yes to CONFIG_MODVERSIONS 55 - and no (!) to CONFIG_CM206 and CONFIG_ISO9660_FS. 56 - 57 - 2) then do a 58 - 59 - make clean; make zImage; make modules 60 - 61 - 3) do the usual things to install a new image (backup the old one, run 62 - `rdev -R zImage 1', copy the new image in place, run lilo). Might 63 - be `make zlilo'. 64 - 65 - Using the driver as a module 66 - ---------------------------- 67 - If you will only occasionally use the cd-rom driver, you can choose 68 - option (b), install as a loadable module. You may have to re-compile 69 - the module when you upgrade the kernel to a new version. 70 - 71 - Since version 0.96, much of the functionality has been transferred to 72 - a generic cdrom interface in the file cdrom.c. The module cm206.o 73 - depends on cdrom.o. If the latter is not compiled into the kernel, 74 - you must explicitly load it before cm206.o: 75 - 76 - insmod /usr/src/linux/modules/cdrom.o 77 - 78 - To install the module, you use the command, as root 79 - 80 - insmod /usr/src/linux/modules/cm206.o 81 - 82 - You can specify the base address on the command line as well as the irq 83 - line to be used, e.g. 84 - 85 - insmod /usr/src/linux/modules/cm206.o cm206=0x300,11 86 - 87 - The order of base port and irq line doesn't matter; if you specify only 88 - one, the other will have the value of the compiled-in default. You 89 - may also have to install the file-system module `iso9660.o', if you 90 - didn't compile that into the kernel. 91 - 92 - 93 - Using the driver as part of the kernel 94 - -------------------------------------- 95 - If you have chosen option (a), you can specify the base-port 96 - address and irq on the lilo boot command line, e.g.: 97 - 98 - LILO: linux cm206=0x340,11 99 - 100 - This assumes that your linux kernel image keyword is `linux'. 101 - If you specify either IRQ (3--11) or base port (0x300--0x370), 102 - auto probing is turned off for both settings, thus setting the 103 - other value to the compiled-in default. 104 - 105 - Note that you can also put these parameters in the lilo configuration file: 106 - 107 - # linux config 108 - image = /vmlinuz 109 - root = /dev/hda1 110 - label = Linux 111 - append = "cm206=0x340,11" 112 - read-only 113 - 114 - 115 - If module parameters and LILO config options don't work 116 - ------------------------------------------------------- 117 - If autoprobing does not work, you can hard-wire the default values 118 - of the base port address (CM206_BASE) and interrupt request line 119 - (CM206_IRQ) into the file /usr/src/linux/drivers/cdrom/cm206.h. Change 120 - the defines of CM206_IRQ and CM206_BASE. 121 - 122 - 123 - Mounting the cdrom 124 - ------------------ 125 - 1) Make sure that the right device is installed in /dev. 126 - 127 - mknod /dev/cm206cd b 32 0 128 - 129 - 2) Make sure there is a mount point, e.g., /cdrom 130 - 131 - mkdir /cdrom 132 - 133 - 3) mount using a command like this (run as root): 134 - 135 - mount -rt iso9660 /dev/cm206cd /cdrom 136 - 137 - 4) For user-mounts, add a line in /etc/fstab 138 - 139 - /dev/cm206cd /cdrom iso9660 ro,noauto,user 140 - 141 - This will allow users to give the commands 142 - 143 - mount /cdrom 144 - umount /cdrom 145 - 146 - If things don't work 147 - -------------------- 148 - 149 - - Try to do a `dmesg' to find out if the driver said anything about 150 - what is going wrong during the initialization. 151 - 152 - - Try to do a `dd if=/dev/cm206cd | od -tc | less' to read from the 153 - CD. 154 - 155 - - Look in the /proc directory to see if `cm206' shows up under one of 156 - `interrupts', `ioports', `devices' or `modules' (if applicable). 157 - 158 - 159 - DISCLAIMER 160 - ---------- 161 - I cannot guarantee that this driver works, or that the hardware will 162 - not be harmed, although I consider it most unlikely. 163 - 164 - I hope that you'll find this driver in some way useful. 165 - 166 - David van Leeuwen 167 - david@tm.tno.nl 168 - 169 - Note for Linux CDROM vendors 170 - ----------------------------- 171 - You are encouraged to include this driver on your Linux CDROM. If 172 - you do, you might consider sending me a free copy of that cd-rom. 173 - You can contact me through my e-mail address, david@tm.tno.nl. 174 - If this driver is compiled into a kernel to boot off a cdrom, 175 - you should actually send me a free copy of that cd-rom. 176 - 177 - Copyright 178 - --------- 179 - The copyright of the cm206 driver for Linux is 180 - 181 - (c) 1995 David A. van Leeuwen 182 - 183 - The driver is released under the conditions of the GNU general public 184 - license, which can be found in the file COPYING in the root of this 185 - source tree.
-60
Documentation/cdrom/gscd
··· 1 - Goldstar R420 CD-Rom device driver README 2 - 3 - For all kind of other information about the GoldStar R420 CDROM 4 - and this Linux device driver see the WWW page: 5 - 6 - http://linux.rz.fh-hannover.de/~raupach 7 - 8 - 9 - If you are the editor of a Linux CD, you should 10 - enable gscd.c within your boot floppy kernel. Please, 11 - send me one of your CDs for free. 12 - 13 - 14 - This current driver version 0.4a only supports reading data from the disk. 15 - Currently we have no audio and no multisession or XA support. 16 - The polling interface is used, no DMA. 17 - 18 - 19 - Sometimes the GoldStar R420 is sold in a 'Reveal Multimedia Kit'. This kit's 20 - drive interface is compatible, too. 21 - 22 - 23 - Installation 24 - ------------ 25 - 26 - Change to '/usr/src/linux/drivers/cdrom' and edit the file 'gscd.h'. Insert 27 - the i/o address of your interface card. 28 - 29 - The default base address is 0x340. This will work for most applications. 30 - Address selection is accomplished by jumpers PN801-1 to PN801-4 on the 31 - GoldStar Interface Card. 32 - Appropriate settings are: 0x300, 0x310, 0x320, 0x330, 0x340, 0x350, 0x360 33 - 0x370, 0x380, 0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, 0x3F0 34 - 35 - Then go back to '/usr/src/linux/' and 'make config' to build the new 36 - configuration for your kernel. If you want to use the GoldStar driver 37 - like a module, don't select 'GoldStar CDROM support'. By the way, you 38 - have to include the iso9660 filesystem. 39 - 40 - Now start compiling the kernel with 'make zImage'. 41 - If you want to use the driver as a module, you have to do 'make modules' 42 - and 'make modules_install', additionally. 43 - Install your new kernel as usual - maybe you do it with 'make zlilo'. 44 - 45 - Before you can use the driver, you have to 46 - mknod /dev/gscd0 b 16 0 47 - to create the appropriate device file (you only need to do this once). 48 - 49 - If you use modules, you can try to insert the driver. 50 - Say: 'insmod /usr/src/linux/modules/gscd.o' 51 - or: 'insmod /usr/src/linux/modules/gscd.o gscd=<address>' 52 - The driver should report its results. 53 - 54 - That's it! Mount a disk, i.e. 'mount -rt iso9660 /dev/gscd0 /cdrom' 55 - 56 - Feel free to report errors and suggestions to the following address. 57 - Be sure, I'm very happy to receive your comments! 58 - 59 - Oliver Raupach Hannover, Juni 1995 60 - (raupach@nwfs1.rz.fh-hannover.de)
-100
Documentation/cdrom/isp16
··· 1 - -- Documentation/cdrom/isp16 2 - 3 - Docs by Eric van der Maarel <H.T.M.v.d.Maarel@marin.nl> 4 - 5 - This is the README for version 0.6 of the cdrom interface on an 6 - ISP16, MAD16 or Mozart sound card. 7 - 8 - The detection and configuration of this interface used to be included 9 - in both the sjcd and optcd cdrom driver. Drives supported by these 10 - drivers came packed with Media Magic's multi media kit, which also 11 - included the ISP16 card. The idea (thanks Leo Spiekman) 12 - to move it from these drivers into a separate module and moreover, not to 13 - rely on the MAD16 sound driver, are as follows: 14 - -duplication of code in the kernel is a waste of resources and should 15 - be avoided; 16 - -however, kernels and notably those included with Linux distributions 17 - (cf Slackware 3.0 included version 0.5 of the isp16 configuration 18 - code included in the drivers) don't always come with sound support 19 - included. Especially when they already include a bunch of cdrom drivers. 20 - Hence, the cdrom interface should be configurable _independently_ of 21 - sound support. 22 - 23 - The ISP16, MAD16 and Mozart sound cards have an OPTi 82C928 or an 24 - OPTi 82C929 chip. The interface on these cards should work with 25 - any cdrom attached to the card, which is 'electrically' compatible 26 - with Sanyo/Panasonic, Sony or Mitsumi non-ide drives. However, the 27 - command sets for any proprietary drives may differ 28 - (and hence may not be supported in the kernel) from these four types. 29 - For a fact I know the interface works and the way of configuration 30 - as described in this documentation works in combination with the 31 - sjcd (in Sanyo/Panasonic compatibility mode) cdrom drivers 32 - (probably with the optcd (in Sony compatibility mode) as well). 33 - If you have such an OPTi based sound card and you want to use the 34 - cdrom interface with a cdrom drive supported by any of the other cdrom 35 - drivers, it will probably work. Please let me know any experience you 36 - might have). 37 - I understand that cards based on the OPTi 82C929 chips may be configured 38 - (hardware jumpers that is) as an IDE interface. Initialisation of such a 39 - card in this mode is not supported (yet?). 40 - 41 - The suggestion to configure the ISP16 etc. sound card by booting DOS and 42 - do a warm reboot to boot Linux somehow doesn't work, at least not 43 - on my machine (IPC P90), with the OPTi 82C928 based card. 44 - 45 - Booting the kernel through the boot manager LILO allows the use 46 - of some command line options on the 'LILO boot:' prompt. At boot time 47 - press Alt or Shift while the LILO prompt is written on the screen and enter 48 - any kernel options. Alternatively these options may be used in 49 - the appropriate section in /etc/lilo.conf. Adding 'append="<cmd_line_options>"' 50 - will do the trick as well. 51 - The syntax of 'cmd_line_options' is 52 - 53 - isp16=[<port>[,<irq>[,<dma>]]][[,]<drive_type>] 54 - 55 - If there is no ISP16 or compatibles detected, there's probably no harm done. 56 - These options indicate the values that your cdrom drive has been (or will be) 57 - configured to use. 58 - Valid values for the base i/o address are: 59 - port=0x340,0x320,0x330,0x360 60 - for the interrupt request number 61 - irq=0,3,5,7,9,10,11 62 - for the direct memory access line 63 - dma=0,3,5,6,7 64 - and for the type of drive 65 - drive_type=noisp16,Sanyo,Panasonic,Sony,Mitsumi. 66 - Note that these options are case sensitive. 67 - The values 0 for irq and dma indicate that they are not used, and 68 - the drive will be used in 'polling' mode. The values 5 and 7 for irq 69 - should be avoided in order to avoid any conflicts with optional 70 - sound card configuration. 71 - The syntax of the command line does not allow the specification of 72 - irq when there's nothing specified for the base address and no 73 - specification of dma when there is no specification of irq. 74 - The value 'noisp16' for drive_type, which may be used as the first 75 - non-integer option value (e.g. 'isp16=noisp16'), makes sure that probing 76 - for and subsequent configuration of an ISP16-compatible card is skipped 77 - all together. This can be useful to overcome possible conflicts which 78 - may arise while the kernel is probing your hardware. 79 - The default values are 80 - port=0x340 81 - irq=0 82 - dma=0 83 - drive_type=Sanyo 84 - reflecting my own configuration. The defaults can be changed in 85 - the file linux/drivers/cdrom/ips16.h. 86 - 87 - The cdrom interface can be configured at run time by loading the 88 - initialisation driver as a module. In that case, the interface 89 - parameters can be set by giving appropriate values on the command 90 - line. Configuring the driver can then be done by the following 91 - command (assuming you have iso16.o installed in a proper place): 92 - 93 - insmod isp16.o isp16_cdrom_base=<port> isp16_cdrom_irq=<irq> \ 94 - isp16_cdrom_dma=<dma> isp16_cdrom_type=<drive_type> 95 - 96 - where port, irq, dma and drive_type can have any of the values mentioned 97 - above. 98 - 99 - 100 - Have fun!
-29
Documentation/cdrom/mcdx
··· 1 - If you are using the driver as a module, you can specify your ports and IRQs 2 - like 3 - 4 - # insmod mcdx.o mcdx=0x300,11,0x304,5 5 - 6 - and so on ("address,IRQ" pairs). 7 - This will override the configuration in mcdx.h. 8 - 9 - This driver: 10 - 11 - o handles XA and (hopefully) multi session CDs as well as 12 - ordinary CDs; 13 - o supports up to 5 drives (of course, you'll need free 14 - IRQs, i/o ports and slots); 15 - o plays audio 16 - 17 - This version doesn't support yet: 18 - 19 - o shared IRQs (but it seems to be possible - I've successfully 20 - connected two drives to the same irq. So it's `only' a 21 - problem of the driver.) 22 - 23 - This driver never will: 24 - 25 - o Read digital audio (i.e. copy directly), due to missing 26 - hardware features. 27 - 28 - 29 - heiko@lotte.sax.de
-57
Documentation/cdrom/optcd
··· 1 - This is the README file for the Optics Storage 8000 AT CDROM device driver. 2 - 3 - This is the driver for the so-called 'DOLPHIN' drive, with the 34-pin 4 - Sony-compatible interface. For the IDE-compatible Optics Storage 8001 5 - drive, you will want the ATAPI CDROM driver. The driver also seems to 6 - work with the Lasermate CR328A. If you have a drive that works with 7 - this driver, and that doesn't report itself as DOLPHIN, please drop me 8 - a mail. 9 - 10 - The support for multisession CDs is in ALPHA stage. If you use it, 11 - please mail me your experiences. Multisession support can be disabled 12 - at compile time. 13 - 14 - You can find some older versions of the driver at 15 - dutette.et.tudelft.nl:/pub/linux/ 16 - and at Eberhard's mirror 17 - ftp.gwdg.de:/pub/linux/cdrom/drivers/optics/ 18 - 19 - Before you can use the driver, you have to create the device file once: 20 - # mknod /dev/optcd0 b 17 0 21 - 22 - To specify the base address if the driver is "compiled-in" to your kernel, 23 - you can use the kernel command line item (LILO option) 24 - optcd=0x340 25 - with the right address. 26 - 27 - If you have compiled optcd as a module, you can load it with 28 - # insmod /usr/src/linux/modules/optcd.o 29 - or 30 - # insmod /usr/src/linux/modules/optcd.o optcd=0x340 31 - with the matching address value of your interface card. 32 - 33 - The driver employs a number of buffers to do read-ahead and block size 34 - conversion. The number of buffers is configurable in optcd.h, and has 35 - influence on the driver performance. For my machine (a P75), 6 buffers 36 - seems optimal, as can be seen from this table: 37 - 38 - #bufs kb/s %cpu 39 - 1 97 0.1 40 - 2 191 0.3 41 - 3 188 0.2 42 - 4 246 0.3 43 - 5 189 19 44 - 6 280 0.4 45 - 7 281 7.0 46 - 8 246 2.8 47 - 16 281 3.4 48 - 49 - If you get a throughput significantly below 300 kb/s, try tweaking 50 - N_BUFS, and don't forget to mail me your results! 51 - 52 - I'd appreciate success/failure reports. If you find a bug, try 53 - recompiling the driver with some strategically chosen debug options 54 - (these can be found in optcd.h) and include the messages generated in 55 - your bug report. Good luck. 56 - 57 - Leo Spiekman (spiekman@dutette.et.tudelft.nl)
-1061
Documentation/cdrom/sbpcd
··· 1 - This README belongs to release 4.2 or newer of the SoundBlaster Pro 2 - (Matsushita, Kotobuki, Panasonic, CreativeLabs, Longshine and Teac) 3 - CD-ROM driver for Linux. 4 - 5 - sbpcd really, really is NOT for ANY IDE/ATAPI drive! 6 - Not even if you have an "original" SoundBlaster card with an IDE interface! 7 - So, you'd better have a look into README.ide if your port address is 0x1F0, 8 - 0x170, 0x1E8, 0x168 or similar. 9 - I get tons of mails from IDE/ATAPI drive users - I really can't continue 10 - any more to answer them all. So, if your drive/interface information sheets 11 - mention "IDE" (primary, secondary, tertiary, quaternary) and the DOS driver 12 - invoking line within your CONFIG.SYS is using an address below 0x230: 13 - DON'T ROB MY LAST NERVE - jumper your interface to address 0x170 and IRQ 15 14 - (that is the "secondary IDE" configuration), set your drive to "master" and 15 - use ide-cd as your driver. If you do not have a second IDE hard disk, use the 16 - LILO commands 17 - hdb=noprobe hdc=cdrom 18 - and get lucky. 19 - To make it fully clear to you: if you mail me about IDE/ATAPI drive problems, 20 - my answer is above, and I simply will discard your mail, hoping to stop the 21 - flood and to find time to lead my 12-year old son towards happy computing. 22 - 23 - The driver is able to drive the whole family of "traditional" AT-style (that 24 - is NOT the new "Enhanced IDE" or "ATAPI" drive standard) Matsushita, 25 - Kotobuki, Panasonic drives, sometimes labelled as "CreativeLabs". The 26 - well-known drives are CR-521, CR-522, CR-523, CR-562, CR-563. 27 - CR-574 is an IDE/ATAPI drive. 28 - 29 - The Longshine LCS-7260 is a double-speed drive which uses the "old" 30 - Matsushita command set. It is supported - with help by Serge Robyns. 31 - Vertos ("Elitegroup Computer Systems", ECS) has a similar drive - support 32 - has started; get in contact if you have such a "Vertos 100" or "ECS-AT" 33 - drive. 34 - 35 - There exists an "IBM External ISA CD-ROM Drive" which in fact is a CR-563 36 - with a special controller board. This drive is supported (the interface is 37 - of the "LaserMate" type), and it is possibly the best buy today (cheaper than 38 - an internal drive, and you can use it as an internal, too - e.g. plug it into 39 - a soundcard). 40 - 41 - CreativeLabs has a new drive "CD200" and a similar drive "CD200F". The latter 42 - is made by Funai and sometimes named "E2550UA", newer models may be named 43 - "MK4015". The CD200F drives should fully work. 44 - CD200 drives without "F" are still giving problems: drive detection and 45 - playing audio should work, data access will result in errors. I need qualified 46 - feedback about the bugs within the data functions or a drive (I never saw a 47 - CD200). 48 - 49 - The quad-speed Teac CD-55A drive is supported, but still does not reach "full 50 - speed". The data rate already reaches 500 kB/sec if you set SBP_BUFFER_FRAMES 51 - to 64 (it is not recommended to do that for normal "file access" usage, but it 52 - can speed up things a lot if you use something like "dd" to read from the 53 - drive; I use it for verifying self-written CDs this way). 54 - The drive itself is able to deliver 600 kB/sec, so this needs 55 - work; with the normal setup, the performance currently is not even as good as 56 - double-speed. 57 - 58 - This driver is NOT for Mitsumi or Sony or Aztech or Philips or XXX drives, 59 - and again: this driver is in no way usable for any IDE/ATAPI drive. If you 60 - think your drive should work and it doesn't: send me the DOS driver for your 61 - beast (gzipped + uuencoded) and your CONFIG.SYS if you want to ask me for help, 62 - and include an original log message excerpt, and try to give all information 63 - a complete idiot needs to understand your hassle already with your first 64 - mail. And if you want to say "as I have mailed you before", be sure that I 65 - don't remember your "case" by such remarks; at the moment, I have some 66 - hundreds of open correspondences about Linux CDROM questions (hope to reduce if 67 - the IDE/ATAPI user questions disappear). 68 - 69 - 70 - This driver will work with the soundcard interfaces (SB Pro, SB 16, Galaxy, 71 - SoundFX, Mozart, MAD16 ...) and with the "no-sound" cards (Panasonic CI-101P, 72 - LaserMate, WDH-7001C, Longshine LCS-6853, Teac ...). 73 - 74 - It works with the "configurable" interface "Sequoia S-1000", too, which is 75 - used on the Spea Media FX and Ensonic Soundscape sound cards. You have to 76 - specify the type "SBPRO 2" and the true CDROM port address with it, not the 77 - "configuration port" address. 78 - 79 - If you have a sound card which needs a "configuration driver" instead of 80 - jumpers for interface types and addresses (like Mozart cards) - those 81 - drivers get invoked before the DOS CDROM driver in your CONFIG.SYS, typical 82 - names are "cdsetup.sys" and "mztinit.sys" - let the sound driver do the 83 - CDROM port configuration (the leading comments in linux/drivers/sound/mad16.c 84 - are just for you!). Hannu Savolainen's mad16.c code is able to set up my 85 - Mozart card - I simply had to add 86 - #define MAD16_CONF 0x06 87 - #define MAD16_CDSEL 0x03 88 - to configure the CDROM interface for type "Panasonic" (LaserMate) and address 89 - 0x340. 90 - 91 - The interface type has to get configured in linux/drivers/cdrom/sbpcd.h, 92 - because the register layout is different between the "SoundBlaster" and the 93 - "LaserMate" type. 94 - 95 - I got a report that the Teac interface card "I/F E117098" is of type 96 - "SoundBlaster" (i.e. you have to set SBPRO to 1) even with the addresses 97 - 0x300 and above. This is unusual, and it can't get covered by the auto 98 - probing scheme. 99 - The Teac 16-bit interface cards (like P/N E950228-00A, default address 0x2C0) 100 - need the SBPRO 3 setup. 101 - 102 - If auto-probing found the drive, the address is correct. The reported type 103 - may be wrong. A "mount" will give success only if the interface type is set 104 - right. Playing audio should work with a wrong set interface type, too. 105 - 106 - With some Teac and some CD200 drives I have seen interface cards which seem 107 - to lack the "drive select" lines; always drive 0 gets addressed. To avoid 108 - "mirror drives" (four drives detected where you only have one) with such 109 - interface cards, set MAX_DRIVES to 1 and jumper your drive to ID 0 (if 110 - possible). 111 - 112 - 113 - Up to 4 drives per interface card, and up to 4 interface cards are supported. 114 - All supported drive families can be mixed, but the CR-521 drives are 115 - hard-wired to drive ID 0. The drives have to use different drive IDs, and each 116 - drive has to get a unique minor number (0...3), corresponding indirectly to 117 - its drive ID. 118 - The drive IDs may be selected freely from 0 to 3 - they do not have to be in 119 - consecutive order. 120 - 121 - As Don Carroll, don@ds9.us.dell.com or FIDO 1:382/14, told me, it is possible 122 - to change old drives to any ID, too. He writes in this sense: 123 - "In order to be able to use more than one single speed drive 124 - (they do not have the ID jumpers) you must add a DIP switch 125 - and two resistors. The pads are already on the board next to 126 - the power connector. You will see the silkscreen for the 127 - switch if you remove the top cover. 128 - 1 2 3 4 129 - ID 0 = x F F x O = "on" 130 - ID 1 = x O F x F = "off" 131 - ID 2 = x F O x x = "don't care" 132 - ID 3 = x O O x 133 - Next to the switch are the positions for R76 (7k) and R78 134 - (12k). I had to play around with the resistor values - ID 3 135 - did not work with other values. If the values are not good, 136 - ID 3 behaves like ID 0." 137 - 138 - To use more than 4 drives, you simply need a second controller card at a 139 - different address and a second cable. 140 - 141 - The driver supports reading of data from the CD and playing of audio tracks. 142 - The audio part should run with WorkMan, xcdplayer, with the "non-X11" products 143 - CDplayer and WorkBone - tell me if it is not compatible with other software. 144 - The only accepted measure for correctness with the audio functions is the 145 - "cdtester" utility (appended) - most audio player programmers seem to be 146 - better musicians than programmers. ;-) 147 - 148 - With the CR-56x and the CD200 drives, the reading of audio frames is possible. 149 - This is implemented by an IOCTL function which reads READ_AUDIO frames of 150 - 2352 bytes at once (configurable with the "READ_AUDIO" define, default is 0). 151 - Reading the same frame a second time gives different data; the frame data 152 - start at a different position, but all read bytes are valid, and we always 153 - read 98 consecutive chunks (of 24 Bytes) as a frame. Reading more than 1 frame 154 - at once possibly misses some chunks at each frame boundary. This lack has to 155 - get corrected by external, "higher level" software which reads the same frame 156 - again and tries to find and eliminate overlapping chunks (24-byte-pieces). 157 - 158 - The transfer rate with reading audio (1-frame-pieces) currently is very slow. 159 - This can be better reading bigger chunks, but the "missing" chunks possibly 160 - occur at the beginning of each single frame. 161 - The software interface possibly may change a bit the day the SCSI driver 162 - supports it too. 163 - 164 - With all but the CR-52x drives, MultiSession is supported. 165 - Photo CDs work (the "old" drives like CR-521 can access only the first 166 - session of a photoCD). 167 - At ftp.gwdg.de:/pub/linux/hpcdtoppm/ you will find Hadmut Danisch's package to 168 - convert photo CD image files and Gerd Knorr's viewing utility. 169 - 170 - The transfer rate will reach 150 kB/sec with CR-52x drives, 300 kB/sec with 171 - CR-56x drives, and currently not more than 500 kB/sec (usually less than 172 - 250 kB/sec) with the Teac quad speed drives. 173 - XA (PhotoCD) disks with "old" drives give only 50 kB/sec. 174 - 175 - This release consists of 176 - - this README file 177 - - the driver file linux/drivers/cdrom/sbpcd.c 178 - - the stub files linux/drivers/cdrom/sbpcd[234].c 179 - - the header file linux/drivers/cdrom/sbpcd.h. 180 - 181 - 182 - To install: 183 - ----------- 184 - 185 - 1. Setup your hardware parameters. Though the driver does "auto-probing" at a 186 - lot of (not all possible!) addresses, this step is recommended for 187 - everyday use. You should let sbpcd auto-probe once and use the reported 188 - address if a drive got found. The reported type may be incorrect; it is 189 - correct if you can mount a data CD. There is no choice for you with the 190 - type; only one is right, the others are deadly wrong. 191 - 192 - a. Go into /usr/src/linux/drivers/cdrom/sbpcd.h and configure it for your 193 - hardware (near the beginning): 194 - a1. Set it up for the appropriate type of interface board. 195 - "Original" CreativeLabs sound cards need "SBPRO 1". 196 - Most "compatible" sound cards (almost all "non-CreativeLabs" cards) 197 - need "SBPRO 0". 198 - The "no-sound" board from OmniCd needs the "SBPRO 1" setup. 199 - The Teac 8-bit "no-sound" boards need the "SBPRO 1" setup. 200 - The Teac 16-bit "no-sound" boards need the "SBPRO 3" setup. 201 - All other "no-sound" boards need the "SBPRO 0" setup. 202 - The Spea Media FX and Ensoniq SoundScape cards need "SBPRO 2". 203 - sbpcd.c holds some examples in its auto-probe list. 204 - If you configure "SBPRO" wrong, the playing of audio CDs will work, 205 - but you will not be able to mount a data CD. 206 - a2. Tell the address of your CDROM_PORT (not of the sound port). 207 - a3. If 4 drives get found, but you have only one, set MAX_DRIVES to 1. 208 - a4. Set DISTRIBUTION to 0. 209 - b. Additionally for 2.a1 and 2.a2, the setup may be done during 210 - boot time (via the "kernel command line" or "LILO option"): 211 - sbpcd=0x320,LaserMate 212 - or 213 - sbpcd=0x230,SoundBlaster 214 - or 215 - sbpcd=0x338,SoundScape 216 - or 217 - sbpcd=0x2C0,Teac16bit 218 - This is especially useful if you install a fresh distribution. 219 - If the second parameter is a number, it gets taken as the type 220 - setting; 0 is "LaserMate", 1 is "SoundBlaster", 2 is "SoundScape", 221 - 3 is "Teac16bit". 222 - So, for example 223 - sbpcd=0x230,1 224 - is equivalent to 225 - sbpcd=0x230,SoundBlaster 226 - 227 - 2. "cd /usr/src/linux" and do a "make config" and select "y" for Matsushita 228 - CD-ROM support and for ISO9660 FileSystem support. If you do not have a 229 - second, third, or fourth controller installed, do not say "y" to the 230 - secondary Matsushita CD-ROM questions. 231 - 232 - 3. Then make the kernel image ("make zlilo" or similar). 233 - 234 - 4. Make the device file(s). This step usually already has been done by the 235 - MAKEDEV script. 236 - The driver uses MAJOR 25, so, if necessary, do 237 - mknod /dev/sbpcd b 25 0 (if you have only one drive) 238 - and/or 239 - mknod /dev/sbpcd0 b 25 0 240 - mknod /dev/sbpcd1 b 25 1 241 - mknod /dev/sbpcd2 b 25 2 242 - mknod /dev/sbpcd3 b 25 3 243 - to make the node(s). 244 - 245 - The "first found" drive gets MINOR 0 (regardless of its jumpered ID), the 246 - "next found" (at the same cable) gets MINOR 1, ... 247 - 248 - For a second interface board, you have to make nodes like 249 - mknod /dev/sbpcd4 b 26 0 250 - mknod /dev/sbpcd5 b 26 1 251 - and so on. Use the MAJORs 26, 27, 28. 252 - 253 - If you further make a link like 254 - ln -s sbpcd /dev/cdrom 255 - you can use the name /dev/cdrom, too. 256 - 257 - 5. Reboot with the new kernel. 258 - 259 - You should now be able to do 260 - mkdir /CD 261 - and 262 - mount -rt iso9660 /dev/sbpcd /CD 263 - or 264 - mount -rt iso9660 -o block=2048 /dev/sbpcd /CD 265 - and see the contents of your CD in the /CD directory. 266 - To use audio CDs, a mounting is not recommended (and it would fail if the 267 - first track is not a data track). 268 - 269 - 270 - Using sbpcd as a "loadable module": 271 - ----------------------------------- 272 - 273 - If you do NOT select "Matsushita/Panasonic CDROM driver support" during the 274 - "make config" of your kernel, you can build the "loadable module" sbpcd.o. 275 - 276 - If sbpcd gets used as a module, the support of more than one interface 277 - card (i.e. drives 4...15) is disabled. 278 - 279 - You can specify interface address and type with the "insmod" command like: 280 - # insmod /usr/src/linux/modules/sbpcd.o sbpcd=0x340,0 281 - or 282 - # insmod /usr/src/linux/modules/sbpcd.o sbpcd=0x230,1 283 - or 284 - # insmod /usr/src/linux/modules/sbpcd.o sbpcd=0x338,2 285 - where the last number represents the SBPRO setting (no strings allowed here). 286 - 287 - 288 - Things of interest: 289 - ------------------- 290 - 291 - The driver is configured to try the LaserMate type of interface at I/O port 292 - 0x0340 first. If this is not appropriate, sbpcd.h should get changed 293 - (you will find the right place - just at the beginning). 294 - 295 - No DMA and no IRQ is used. 296 - 297 - To reduce or increase the amount of kernel messages, edit sbpcd.c and play 298 - with the "DBG_xxx" switches (initialization of the variable "sbpcd_debug"). 299 - Don't forget to reflect on what you do; enabling all DBG_xxx switches at once 300 - may crash your system, and each message line is accompanied by a delay. 301 - 302 - The driver uses the "variable BLOCK_SIZE" feature. To use it, you have to 303 - specify "block=2048" as a mount option. Doing this will disable the direct 304 - execution of a binary from the CD; you have to copy it to a device with the 305 - standard BLOCK_SIZE (1024) first. So, do not use this if your system is 306 - directly "running from the CDROM" (like some of Yggdrasil's installation 307 - variants). There are CDs on the market (like the German "unifix" Linux 308 - distribution) which MUST get handled with a block_size of 1024. Generally, 309 - one can say all the CDs which hold files of the name YMTRANS.TBL are defective; 310 - do not use block=2048 with those. 311 - 312 - Within sbpcd.h, you will find some "#define"s (e.g. EJECT and JUKEBOX). With 313 - these, you can configure the driver for some special things. 314 - You can use the appended program "cdtester" to set the auto-eject feature 315 - during runtime. Jeff Tranter's "eject" utility can do this, too (and more) 316 - for you. 317 - 318 - There is an ioctl CDROMMULTISESSION to obtain with a user program if 319 - the CD is an XA disk and - if it is - where the last session starts. The 320 - "cdtester" program illustrates how to call it. 321 - 322 - 323 - Auto-probing at boot time: 324 - -------------------------- 325 - 326 - The driver does auto-probing at many well-known interface card addresses, 327 - but not all: 328 - Some probings can cause a hang if an NE2000 ethernet card gets touched, because 329 - SBPCD's auto-probing happens before the initialization of the net drivers. 330 - Those "hazardous" addresses are excluded from auto-probing; the "kernel 331 - command line" feature has to be used during installation if you have your 332 - drive at those addresses. The "module" version is allowed to probe at those 333 - addresses, too. 334 - 335 - The auto-probing looks first at the configured address resp. the address 336 - submitted by the kernel command line. With this, it is possible to use this 337 - driver within installation boot floppies, and for any non-standard address, 338 - too. 339 - 340 - Auto-probing will make an assumption about the interface type ("SBPRO" or not), 341 - based upon the address. That assumption may be wrong (initialization will be 342 - o.k., but you will get I/O errors during mount). In that case, use the "kernel 343 - command line" feature and specify address & type at boot time to find out the 344 - right setup. 345 - 346 - For everyday use, address and type should get configured within sbpcd.h. That 347 - will stop the auto-probing due to success with the first try. 348 - 349 - The kernel command "sbpcd=0" suppresses each auto-probing and causes 350 - the driver not to find any drive; it is meant for people who love sbpcd 351 - so much that they do not want to miss it, even if they miss the drives. ;-) 352 - 353 - If you configure "#define CDROM_PORT 0" in sbpcd.h, the auto-probing is 354 - initially disabled and needs an explicit kernel command to get activated. 355 - Once activated, it does not stop before success or end-of-list. This may be 356 - useful within "universal" CDROM installation boot floppies (but using the 357 - loadable module would be better because it allows an "extended" auto-probing 358 - without fearing NE2000 cards). 359 - 360 - To shorten the auto-probing list to a single entry, set DISTRIBUTION 0 within 361 - sbpcd.h. 362 - 363 - 364 - Setting up address and interface type: 365 - -------------------------------------- 366 - 367 - If your I/O port address is not 0x340, you have to look for the #defines near 368 - the beginning of sbpcd.h and configure them: set SBPRO to 0 or 1 or 2, and 369 - change CDROM_PORT to the address of your CDROM I/O port. 370 - 371 - Almost all of the "SoundBlaster compatible" cards behave like the no-sound 372 - interfaces, i.e. need SBPRO 0! 373 - 374 - With "original" SB Pro cards, an initial setting of CD_volume through the 375 - sound card's MIXER register gets done. 376 - If you are using a "compatible" sound card of types "LaserMate" or "SPEA", 377 - you can set SOUND_BASE (in sbpcd.h) to get it done with your card, too... 378 - 379 - 380 - Using audio CDs: 381 - ---------------- 382 - 383 - Workman, WorkBone, xcdplayer, cdplayer and the nice little tool "cdplay" (see 384 - README.aztcd from the Aztech driver package) should work. 385 - 386 - The program CDplayer likes to talk to "/dev/mcd" only, xcdplayer wants 387 - "/dev/rsr0", workman loves "/dev/sr0" or "/dev/cdrom" - so, make the 388 - appropriate links to use them without the need to supply parameters. 389 - 390 - 391 - Copying audio tracks: 392 - --------------------- 393 - 394 - The following program will copy track 1 (or a piece of it) from an audio CD 395 - into the file "track01": 396 - 397 - /*=================== begin program ========================================*/ 398 - /* 399 - * read an audio track from a CD 400 - * 401 - * (c) 1994 Eberhard Moenkeberg <emoenke@gwdg.de> 402 - * may be used & enhanced freely 403 - * 404 - * Due to non-existent sync bytes at the beginning of each audio frame (or due 405 - * to a firmware bug within all known drives?), it is currently a kind of 406 - * fortune if two consecutive frames fit together. 407 - * Usually, they overlap, or a little piece is missing. This happens in units 408 - * of 24-byte chunks. It has to get fixed by higher-level software (reading 409 - * until an overlap occurs, and then eliminate the overlapping chunks). 410 - * ftp.gwdg.de:/pub/linux/misc/cdda2wav-sbpcd.*.tar.gz holds an example of 411 - * such an algorithm. 412 - * This example program further is missing to obtain the SubChannel data 413 - * which belong to each frame. 414 - * 415 - * This is only an example of the low-level access routine. The read data are 416 - * pure 16-bit CDDA values; they have to get converted to make sound out of 417 - * them. 418 - * It is no fun to listen to it without prior overlap/underlap correction! 419 - */ 420 - #include <stdio.h> 421 - #include <sys/ioctl.h> 422 - #include <sys/types.h> 423 - #include <linux/cdrom.h> 424 - 425 - static struct cdrom_tochdr hdr; 426 - static struct cdrom_tocentry entry[101]; 427 - static struct cdrom_read_audio arg; 428 - static u_char buffer[CD_FRAMESIZE_RAW]; 429 - static int datafile, drive; 430 - static int i, j, limit, track, err; 431 - static char filename[32]; 432 - 433 - int main(int argc, char *argv[]) 434 - { 435 - /* 436 - * open /dev/cdrom 437 - */ 438 - drive=open("/dev/cdrom", 0); 439 - if (drive<0) 440 - { 441 - fprintf(stderr, "can't open drive.\n"); 442 - exit (-1); 443 - } 444 - /* 445 - * get TocHeader 446 - */ 447 - fprintf(stdout, "getting TocHeader...\n"); 448 - err=ioctl(drive, CDROMREADTOCHDR, &hdr); 449 - if (err!=0) 450 - { 451 - fprintf(stderr, "can't get TocHeader (error %d).\n", err); 452 - exit (-1); 453 - } 454 - else 455 - fprintf(stdout, "TocHeader: %d %d\n", hdr.cdth_trk0, hdr.cdth_trk1); 456 - /* 457 - * get and display all TocEntries 458 - */ 459 - fprintf(stdout, "getting TocEntries...\n"); 460 - for (i=1;i<=hdr.cdth_trk1+1;i++) 461 - { 462 - if (i!=hdr.cdth_trk1+1) entry[i].cdte_track = i; 463 - else entry[i].cdte_track = CDROM_LEADOUT; 464 - entry[i].cdte_format = CDROM_LBA; 465 - err=ioctl(drive, CDROMREADTOCENTRY, &entry[i]); 466 - if (err!=0) 467 - { 468 - fprintf(stderr, "can't get TocEntry #%d (error %d).\n", i, err); 469 - exit (-1); 470 - } 471 - else 472 - { 473 - fprintf(stdout, "TocEntry #%d: %1X %1X %06X %02X\n", 474 - entry[i].cdte_track, 475 - entry[i].cdte_adr, 476 - entry[i].cdte_ctrl, 477 - entry[i].cdte_addr.lba, 478 - entry[i].cdte_datamode); 479 - } 480 - } 481 - fprintf(stdout, "got all TocEntries.\n"); 482 - /* 483 - * ask for track number (not implemented here) 484 - */ 485 - track=1; 486 - #if 0 /* just read a little piece (4 seconds) */ 487 - entry[track+1].cdte_addr.lba=entry[track].cdte_addr.lba+300; 488 - #endif 489 - /* 490 - * read track into file 491 - */ 492 - sprintf(filename, "track%02d\0", track); 493 - datafile=creat(filename, 0755); 494 - if (datafile<0) 495 - { 496 - fprintf(stderr, "can't open datafile %s.\n", filename); 497 - exit (-1); 498 - } 499 - arg.addr.lba=entry[track].cdte_addr.lba; 500 - arg.addr_format=CDROM_LBA; /* CDROM_MSF would be possible here, too. */ 501 - arg.nframes=1; 502 - arg.buf=&buffer[0]; 503 - limit=entry[track+1].cdte_addr.lba; 504 - for (;arg.addr.lba<limit;arg.addr.lba++) 505 - { 506 - err=ioctl(drive, CDROMREADAUDIO, &arg); 507 - if (err!=0) 508 - { 509 - fprintf(stderr, "can't read abs. frame #%d (error %d).\n", 510 - arg.addr.lba, err); 511 - } 512 - j=write(datafile, &buffer[0], CD_FRAMESIZE_RAW); 513 - if (j!=CD_FRAMESIZE_RAW) 514 - { 515 - fprintf(stderr,"I/O error (datafile) at rel. frame %d\n", 516 - arg.addr.lba-entry[track].cdte_addr.lba); 517 - } 518 - arg.addr.lba++; 519 - } 520 - return 0; 521 - } 522 - /*===================== end program ========================================*/ 523 - 524 - At ftp.gwdg.de:/pub/linux/misc/cdda2wav-sbpcd.*.tar.gz is an adapted version of 525 - Heiko Eissfeldt's digital-audio to .WAV converter (the original is there, too). 526 - This is preliminary, as Heiko himself will care about it. 527 - 528 - 529 - Known problems: 530 - --------------- 531 - 532 - Currently, the detection of disk change or removal is actively disabled. 533 - 534 - Most attempts to read the UPC/EAN code result in a stream of zeroes. All my 535 - drives are mostly telling there is no UPC/EAN code on disk or there is, but it 536 - is an all-zero number. I guess now almost no CD holds such a number. 537 - 538 - Bug reports, comments, wishes, donations (technical information is a donation, 539 - too :-) etc. to emoenke@gwdg.de. 540 - 541 - SnailMail address, preferable for CD editors if they want to submit a free 542 - "cooperation" copy: 543 - Eberhard Moenkeberg 544 - Reinholdstr. 14 545 - D-37083 Goettingen 546 - Germany 547 - --- 548 - 549 - 550 - Appendix -- the "cdtester" utility: 551 - 552 - /* 553 - * cdtester.c -- test the audio functions of a CD driver 554 - * 555 - * (c) 1995 Eberhard Moenkeberg <emoenke@gwdg.de> 556 - * published under the GPL 557 - * 558 - * made under heavy use of the "Tiny Audio CD Player" 559 - * from Werner Zimmermann <zimmerma@rz.fht-esslingen.de> 560 - * (see linux/drivers/block/README.aztcd) 561 - */ 562 - #undef AZT_PRIVATE_IOCTLS /* not supported by every CDROM driver */ 563 - #define SBP_PRIVATE_IOCTLS /* not supported by every CDROM driver */ 564 - 565 - #include <stdio.h> 566 - #include <stdio.h> 567 - #include <malloc.h> 568 - #include <sys/ioctl.h> 569 - #include <sys/types.h> 570 - #include <linux/cdrom.h> 571 - 572 - #ifdef AZT_PRIVATE_IOCTLS 573 - #include <linux/../../drivers/cdrom/aztcd.h> 574 - #endif /* AZT_PRIVATE_IOCTLS */ 575 - #ifdef SBP_PRIVATE_IOCTLS 576 - #include <linux/../../drivers/cdrom/sbpcd.h> 577 - #include <linux/fs.h> 578 - #endif /* SBP_PRIVATE_IOCTLS */ 579 - 580 - struct cdrom_tochdr hdr; 581 - struct cdrom_tochdr tocHdr; 582 - struct cdrom_tocentry TocEntry[101]; 583 - struct cdrom_tocentry entry; 584 - struct cdrom_multisession ms_info; 585 - struct cdrom_read_audio read_audio; 586 - struct cdrom_ti ti; 587 - struct cdrom_subchnl subchnl; 588 - struct cdrom_msf msf; 589 - struct cdrom_volctrl volctrl; 590 - #ifdef AZT_PRIVATE_IOCTLS 591 - union 592 - { 593 - struct cdrom_msf msf; 594 - unsigned char buf[CD_FRAMESIZE_RAW]; 595 - } azt; 596 - #endif /* AZT_PRIVATE_IOCTLS */ 597 - int i, i1, i2, i3, j, k; 598 - unsigned char sequence=0; 599 - unsigned char command[80]; 600 - unsigned char first=1, last=1; 601 - char *default_device="/dev/cdrom"; 602 - char dev[20]; 603 - char filename[20]; 604 - int drive; 605 - int datafile; 606 - int rc; 607 - 608 - void help(void) 609 - { 610 - printf("Available Commands:\n"); 611 - printf("STOP s EJECT e QUIT q\n"); 612 - printf("PLAY TRACK t PAUSE p RESUME r\n"); 613 - printf("NEXT TRACK n REPEAT LAST l HELP h\n"); 614 - printf("SUBCHANNEL_Q c TRACK INFO i PLAY AT a\n"); 615 - printf("READ d READ RAW w READ AUDIO A\n"); 616 - printf("MS-INFO M TOC T START S\n"); 617 - printf("SET EJECTSW X DEVICE D DEBUG Y\n"); 618 - printf("AUDIO_BUFSIZ Z RESET R SET VOLUME v\n"); 619 - printf("GET VOLUME V\n"); 620 - } 621 - 622 - /* 623 - * convert MSF number (3 bytes only) to Logical_Block_Address 624 - */ 625 - int msf2lba(u_char *msf) 626 - { 627 - int i; 628 - 629 - i=(msf[0] * CD_SECS + msf[1]) * CD_FRAMES + msf[2] - CD_BLOCK_OFFSET; 630 - if (i<0) return (0); 631 - return (i); 632 - } 633 - /* 634 - * convert logical_block_address to m-s-f_number (3 bytes only) 635 - */ 636 - void lba2msf(int lba, unsigned char *msf) 637 - { 638 - lba += CD_BLOCK_OFFSET; 639 - msf[0] = lba / (CD_SECS*CD_FRAMES); 640 - lba %= CD_SECS*CD_FRAMES; 641 - msf[1] = lba / CD_FRAMES; 642 - msf[2] = lba % CD_FRAMES; 643 - } 644 - 645 - int init_drive(char *dev) 646 - { 647 - unsigned char msf_ent[3]; 648 - 649 - /* 650 - * open the device 651 - */ 652 - drive=open(dev,0); 653 - if (drive<0) return (-1); 654 - /* 655 - * get TocHeader 656 - */ 657 - printf("getting TocHeader...\n"); 658 - rc=ioctl(drive,CDROMREADTOCHDR,&hdr); 659 - if (rc!=0) 660 - { 661 - printf("can't get TocHeader (error %d).\n",rc); 662 - return (-2); 663 - } 664 - else 665 - first=hdr.cdth_trk0; 666 - last=hdr.cdth_trk1; 667 - printf("TocHeader: %d %d\n",hdr.cdth_trk0,hdr.cdth_trk1); 668 - /* 669 - * get and display all TocEntries 670 - */ 671 - printf("getting TocEntries...\n"); 672 - for (i=1;i<=hdr.cdth_trk1+1;i++) 673 - { 674 - if (i!=hdr.cdth_trk1+1) TocEntry[i].cdte_track = i; 675 - else TocEntry[i].cdte_track = CDROM_LEADOUT; 676 - TocEntry[i].cdte_format = CDROM_LBA; 677 - rc=ioctl(drive,CDROMREADTOCENTRY,&TocEntry[i]); 678 - if (rc!=0) 679 - { 680 - printf("can't get TocEntry #%d (error %d).\n",i,rc); 681 - } 682 - else 683 - { 684 - lba2msf(TocEntry[i].cdte_addr.lba,&msf_ent[0]); 685 - if (TocEntry[i].cdte_track==CDROM_LEADOUT) 686 - { 687 - printf("TocEntry #%02X: %1X %1X %02d:%02d:%02d (lba: 0x%06X) %02X\n", 688 - TocEntry[i].cdte_track, 689 - TocEntry[i].cdte_adr, 690 - TocEntry[i].cdte_ctrl, 691 - msf_ent[0], 692 - msf_ent[1], 693 - msf_ent[2], 694 - TocEntry[i].cdte_addr.lba, 695 - TocEntry[i].cdte_datamode); 696 - } 697 - else 698 - { 699 - printf("TocEntry #%02d: %1X %1X %02d:%02d:%02d (lba: 0x%06X) %02X\n", 700 - TocEntry[i].cdte_track, 701 - TocEntry[i].cdte_adr, 702 - TocEntry[i].cdte_ctrl, 703 - msf_ent[0], 704 - msf_ent[1], 705 - msf_ent[2], 706 - TocEntry[i].cdte_addr.lba, 707 - TocEntry[i].cdte_datamode); 708 - } 709 - } 710 - } 711 - return (hdr.cdth_trk1); /* number of tracks */ 712 - } 713 - 714 - void display(int size,unsigned char *buffer) 715 - { 716 - k=0; 717 - getchar(); 718 - for (i=0;i<(size+1)/16;i++) 719 - { 720 - printf("%4d:",i*16); 721 - for (j=0;j<16;j++) 722 - { 723 - printf(" %02X",buffer[i*16+j]); 724 - } 725 - printf(" "); 726 - for (j=0;j<16;j++) 727 - { 728 - if (isalnum(buffer[i*16+j])) 729 - printf("%c",buffer[i*16+j]); 730 - else 731 - printf("."); 732 - } 733 - printf("\n"); 734 - k++; 735 - if (k>=20) 736 - { 737 - printf("press ENTER to continue\n"); 738 - getchar(); 739 - k=0; 740 - } 741 - } 742 - } 743 - 744 - int main(int argc, char *argv[]) 745 - { 746 - printf("\nTesting tool for a CDROM driver's audio functions V0.1\n"); 747 - printf("(C) 1995 Eberhard Moenkeberg <emoenke@gwdg.de>\n"); 748 - printf("initializing...\n"); 749 - 750 - rc=init_drive(default_device); 751 - if (rc<0) printf("could not open %s (rc=%d).\n",default_device,rc); 752 - help(); 753 - while (1) 754 - { 755 - printf("Give a one-letter command (h = help): "); 756 - scanf("%s",command); 757 - command[1]=0; 758 - switch (command[0]) 759 - { 760 - case 'D': 761 - printf("device name (f.e. /dev/sbpcd3): ? "); 762 - scanf("%s",&dev); 763 - close(drive); 764 - rc=init_drive(dev); 765 - if (rc<0) printf("could not open %s (rc %d).\n",dev,rc); 766 - break; 767 - case 'e': 768 - rc=ioctl(drive,CDROMEJECT); 769 - if (rc<0) printf("CDROMEJECT: rc=%d.\n",rc); 770 - break; 771 - case 'p': 772 - rc=ioctl(drive,CDROMPAUSE); 773 - if (rc<0) printf("CDROMPAUSE: rc=%d.\n",rc); 774 - break; 775 - case 'r': 776 - rc=ioctl(drive,CDROMRESUME); 777 - if (rc<0) printf("CDROMRESUME: rc=%d.\n",rc); 778 - break; 779 - case 's': 780 - rc=ioctl(drive,CDROMSTOP); 781 - if (rc<0) printf("CDROMSTOP: rc=%d.\n",rc); 782 - break; 783 - case 'S': 784 - rc=ioctl(drive,CDROMSTART); 785 - if (rc<0) printf("CDROMSTART: rc=%d.\n",rc); 786 - break; 787 - case 't': 788 - rc=ioctl(drive,CDROMREADTOCHDR,&tocHdr); 789 - if (rc<0) 790 - { 791 - printf("CDROMREADTOCHDR: rc=%d.\n",rc); 792 - break; 793 - } 794 - first=tocHdr.cdth_trk0; 795 - last= tocHdr.cdth_trk1; 796 - if ((first==0)||(first>last)) 797 - { 798 - printf ("--got invalid TOC data.\n"); 799 - } 800 - else 801 - { 802 - printf("--enter track number(first=%d, last=%d): ",first,last); 803 - scanf("%d",&i1); 804 - ti.cdti_trk0=i1; 805 - if (ti.cdti_trk0<first) ti.cdti_trk0=first; 806 - if (ti.cdti_trk0>last) ti.cdti_trk0=last; 807 - ti.cdti_ind0=0; 808 - ti.cdti_trk1=last; 809 - ti.cdti_ind1=0; 810 - rc=ioctl(drive,CDROMSTOP); 811 - rc=ioctl(drive,CDROMPLAYTRKIND,&ti); 812 - if (rc<0) printf("CDROMPLAYTRKIND: rc=%d.\n",rc); 813 - } 814 - break; 815 - case 'n': 816 - rc=ioctl(drive,CDROMSTOP); 817 - if (++ti.cdti_trk0>last) ti.cdti_trk0=last; 818 - ti.cdti_ind0=0; 819 - ti.cdti_trk1=last; 820 - ti.cdti_ind1=0; 821 - rc=ioctl(drive,CDROMPLAYTRKIND,&ti); 822 - if (rc<0) printf("CDROMPLAYTRKIND: rc=%d.\n",rc); 823 - break; 824 - case 'l': 825 - rc=ioctl(drive,CDROMSTOP); 826 - if (--ti.cdti_trk0<first) ti.cdti_trk0=first; 827 - ti.cdti_ind0=0; 828 - ti.cdti_trk1=last; 829 - ti.cdti_ind1=0; 830 - rc=ioctl(drive,CDROMPLAYTRKIND,&ti); 831 - if (rc<0) printf("CDROMPLAYTRKIND: rc=%d.\n",rc); 832 - break; 833 - case 'c': 834 - subchnl.cdsc_format=CDROM_MSF; 835 - rc=ioctl(drive,CDROMSUBCHNL,&subchnl); 836 - if (rc<0) printf("CDROMSUBCHNL: rc=%d.\n",rc); 837 - else 838 - { 839 - printf("AudioStatus:%s Track:%d Mode:%d MSF=%02d:%02d:%02d\n", 840 - subchnl.cdsc_audiostatus==CDROM_AUDIO_PLAY ? "PLAYING":"NOT PLAYING", 841 - subchnl.cdsc_trk,subchnl.cdsc_adr, 842 - subchnl.cdsc_absaddr.msf.minute, 843 - subchnl.cdsc_absaddr.msf.second, 844 - subchnl.cdsc_absaddr.msf.frame); 845 - } 846 - break; 847 - case 'i': 848 - printf("Track No.: "); 849 - scanf("%d",&i1); 850 - entry.cdte_track=i1; 851 - if (entry.cdte_track<first) entry.cdte_track=first; 852 - if (entry.cdte_track>last) entry.cdte_track=last; 853 - entry.cdte_format=CDROM_MSF; 854 - rc=ioctl(drive,CDROMREADTOCENTRY,&entry); 855 - if (rc<0) printf("CDROMREADTOCENTRY: rc=%d.\n",rc); 856 - else 857 - { 858 - printf("Mode %d Track, starts at %02d:%02d:%02d\n", 859 - entry.cdte_adr, 860 - entry.cdte_addr.msf.minute, 861 - entry.cdte_addr.msf.second, 862 - entry.cdte_addr.msf.frame); 863 - } 864 - break; 865 - case 'a': 866 - printf("Address (min:sec:frm) "); 867 - scanf("%d:%d:%d",&i1,&i2,&i3); 868 - msf.cdmsf_min0=i1; 869 - msf.cdmsf_sec0=i2; 870 - msf.cdmsf_frame0=i3; 871 - if (msf.cdmsf_sec0>59) msf.cdmsf_sec0=59; 872 - if (msf.cdmsf_frame0>74) msf.cdmsf_frame0=74; 873 - lba2msf(TocEntry[last+1].cdte_addr.lba-1,&msf.cdmsf_min1); 874 - rc=ioctl(drive,CDROMSTOP); 875 - rc=ioctl(drive,CDROMPLAYMSF,&msf); 876 - if (rc<0) printf("CDROMPLAYMSF: rc=%d.\n",rc); 877 - break; 878 - case 'V': 879 - rc=ioctl(drive,CDROMVOLREAD,&volctrl); 880 - if (rc<0) printf("CDROMVOLCTRL: rc=%d.\n",rc); 881 - printf("Volume: channel 0 (left) %d, channel 1 (right) %d\n",volctrl.channel0,volctrl.channel1); 882 - break; 883 - case 'R': 884 - rc=ioctl(drive,CDROMRESET); 885 - if (rc<0) printf("CDROMRESET: rc=%d.\n",rc); 886 - break; 887 - #ifdef AZT_PRIVATE_IOCTLS /*not supported by every CDROM driver*/ 888 - case 'd': 889 - printf("Address (min:sec:frm) "); 890 - scanf("%d:%d:%d",&i1,&i2,&i3); 891 - azt.msf.cdmsf_min0=i1; 892 - azt.msf.cdmsf_sec0=i2; 893 - azt.msf.cdmsf_frame0=i3; 894 - if (azt.msf.cdmsf_sec0>59) azt.msf.cdmsf_sec0=59; 895 - if (azt.msf.cdmsf_frame0>74) azt.msf.cdmsf_frame0=74; 896 - rc=ioctl(drive,CDROMREADMODE1,&azt.msf); 897 - if (rc<0) printf("CDROMREADMODE1: rc=%d.\n",rc); 898 - else display(CD_FRAMESIZE,azt.buf); 899 - break; 900 - case 'w': 901 - printf("Address (min:sec:frame) "); 902 - scanf("%d:%d:%d",&i1,&i2,&i3); 903 - azt.msf.cdmsf_min0=i1; 904 - azt.msf.cdmsf_sec0=i2; 905 - azt.msf.cdmsf_frame0=i3; 906 - if (azt.msf.cdmsf_sec0>59) azt.msf.cdmsf_sec0=59; 907 - if (azt.msf.cdmsf_frame0>74) azt.msf.cdmsf_frame0=74; 908 - rc=ioctl(drive,CDROMREADMODE2,&azt.msf); 909 - if (rc<0) printf("CDROMREADMODE2: rc=%d.\n",rc); 910 - else display(CD_FRAMESIZE_RAW,azt.buf); /* currently only 2336 */ 911 - break; 912 - #endif 913 - case 'v': 914 - printf("--Channel 0 (Left) (0-255): "); 915 - scanf("%d",&i1); 916 - volctrl.channel0=i1; 917 - printf("--Channel 1 (Right) (0-255): "); 918 - scanf("%d",&i1); 919 - volctrl.channel1=i1; 920 - volctrl.channel2=0; 921 - volctrl.channel3=0; 922 - rc=ioctl(drive,CDROMVOLCTRL,&volctrl); 923 - if (rc<0) printf("CDROMVOLCTRL: rc=%d.\n",rc); 924 - break; 925 - case 'q': 926 - close(drive); 927 - exit(0); 928 - case 'h': 929 - help(); 930 - break; 931 - case 'T': /* display TOC entry - without involving the driver */ 932 - scanf("%d",&i); 933 - if ((i<hdr.cdth_trk0)||(i>hdr.cdth_trk1)) 934 - printf("invalid track number.\n"); 935 - else 936 - printf("TocEntry %02d: adr=%01X ctrl=%01X msf=%02d:%02d:%02d mode=%02X\n", 937 - TocEntry[i].cdte_track, 938 - TocEntry[i].cdte_adr, 939 - TocEntry[i].cdte_ctrl, 940 - TocEntry[i].cdte_addr.msf.minute, 941 - TocEntry[i].cdte_addr.msf.second, 942 - TocEntry[i].cdte_addr.msf.frame, 943 - TocEntry[i].cdte_datamode); 944 - break; 945 - case 'A': /* read audio data into file */ 946 - printf("Address (min:sec:frm) ? "); 947 - scanf("%d:%d:%d",&i1,&i2,&i3); 948 - read_audio.addr.msf.minute=i1; 949 - read_audio.addr.msf.second=i2; 950 - read_audio.addr.msf.frame=i3; 951 - read_audio.addr_format=CDROM_MSF; 952 - printf("# of frames ? "); 953 - scanf("%d",&i1); 954 - read_audio.nframes=i1; 955 - k=read_audio.nframes*CD_FRAMESIZE_RAW; 956 - read_audio.buf=malloc(k); 957 - if (read_audio.buf==NULL) 958 - { 959 - printf("can't malloc %d bytes.\n",k); 960 - break; 961 - } 962 - sprintf(filename,"audio_%02d%02d%02d_%02d.%02d\0", 963 - read_audio.addr.msf.minute, 964 - read_audio.addr.msf.second, 965 - read_audio.addr.msf.frame, 966 - read_audio.nframes, 967 - ++sequence); 968 - datafile=creat(filename, 0755); 969 - if (datafile<0) 970 - { 971 - printf("can't open datafile %s.\n",filename); 972 - break; 973 - } 974 - rc=ioctl(drive,CDROMREADAUDIO,&read_audio); 975 - if (rc!=0) 976 - { 977 - printf("CDROMREADAUDIO: rc=%d.\n",rc); 978 - } 979 - else 980 - { 981 - rc=write(datafile,&read_audio.buf,k); 982 - if (rc!=k) printf("datafile I/O error (%d).\n",rc); 983 - } 984 - close(datafile); 985 - break; 986 - case 'X': /* set EJECT_SW (0: disable, 1: enable auto-ejecting) */ 987 - scanf("%d",&i); 988 - rc=ioctl(drive,CDROMEJECT_SW,i); 989 - if (rc!=0) 990 - printf("CDROMEJECT_SW: rc=%d.\n",rc); 991 - else 992 - printf("EJECT_SW set to %d\n",i); 993 - break; 994 - case 'M': /* get the multisession redirection info */ 995 - ms_info.addr_format=CDROM_LBA; 996 - rc=ioctl(drive,CDROMMULTISESSION,&ms_info); 997 - if (rc!=0) 998 - { 999 - printf("CDROMMULTISESSION(lba): rc=%d.\n",rc); 1000 - } 1001 - else 1002 - { 1003 - if (ms_info.xa_flag) printf("MultiSession offset (lba): %d (0x%06X)\n",ms_info.addr.lba,ms_info.addr.lba); 1004 - else 1005 - { 1006 - printf("this CD is not an XA disk.\n"); 1007 - break; 1008 - } 1009 - } 1010 - ms_info.addr_format=CDROM_MSF; 1011 - rc=ioctl(drive,CDROMMULTISESSION,&ms_info); 1012 - if (rc!=0) 1013 - { 1014 - printf("CDROMMULTISESSION(msf): rc=%d.\n",rc); 1015 - } 1016 - else 1017 - { 1018 - if (ms_info.xa_flag) 1019 - printf("MultiSession offset (msf): %02d:%02d:%02d (0x%02X%02X%02X)\n", 1020 - ms_info.addr.msf.minute, 1021 - ms_info.addr.msf.second, 1022 - ms_info.addr.msf.frame, 1023 - ms_info.addr.msf.minute, 1024 - ms_info.addr.msf.second, 1025 - ms_info.addr.msf.frame); 1026 - else printf("this CD is not an XA disk.\n"); 1027 - } 1028 - break; 1029 - #ifdef SBP_PRIVATE_IOCTLS 1030 - case 'Y': /* set the driver's message level */ 1031 - #if 0 /* not implemented yet */ 1032 - printf("enter switch name (f.e. DBG_CMD): "); 1033 - scanf("%s",&dbg_switch); 1034 - j=get_dbg_num(dbg_switch); 1035 - #else 1036 - printf("enter DDIOCSDBG switch number: "); 1037 - scanf("%d",&j); 1038 - #endif 1039 - printf("enter 0 for \"off\", 1 for \"on\": "); 1040 - scanf("%d",&i); 1041 - if (i==0) j|=0x80; 1042 - printf("calling \"ioctl(drive,DDIOCSDBG,%d)\"\n",j); 1043 - rc=ioctl(drive,DDIOCSDBG,j); 1044 - printf("DDIOCSDBG: rc=%d.\n",rc); 1045 - break; 1046 - case 'Z': /* set the audio buffer size */ 1047 - printf("# frames wanted: ? "); 1048 - scanf("%d",&j); 1049 - rc=ioctl(drive,CDROMAUDIOBUFSIZ,j); 1050 - printf("%d frames granted.\n",rc); 1051 - break; 1052 - #endif /* SBP_PRIVATE_IOCTLS */ 1053 - default: 1054 - printf("unknown command: \"%s\".\n",command); 1055 - break; 1056 - } 1057 - } 1058 - return 0; 1059 - } 1060 - /*==========================================================================*/ 1061 -
-60
Documentation/cdrom/sjcd
··· 1 - -- Documentation/cdrom/sjcd 2 - 80% of the work takes 20% of the time, 3 - 20% of the work takes 80% of the time... 4 - (Murphy's law) 5 - 6 - Once started, training can not be stopped... 7 - (Star Wars) 8 - 9 - This is the README for the sjcd cdrom driver, version 1.6. 10 - 11 - This file is meant as a tips & tricks edge for the usage of the SANYO CDR-H94A 12 - cdrom drive. It will grow as the questions arise. ;-) 13 - For info on configuring the ISP16 sound card look at Documentation/cdrom/isp16. 14 - 15 - The driver should work with any of the Panasonic, Sony or Mitsumi style 16 - CDROM interfaces. 17 - The cdrom interface on Media Magic's soft configurable sound card ISP16, 18 - which used to be included in the driver, is now supported in a separate module. 19 - This initialisation module will probably also work with other interfaces 20 - based on an OPTi 82C928 or 82C929 chip (like MAD16 and Mozart): see the 21 - documentation Documentation/cdrom/isp16. 22 - 23 - The device major for sjcd is 18, and minor is 0. Create a block special 24 - file in your /dev directory (e.g., /dev/sjcd) with these numbers. 25 - (For those who don't know, being root and doing the following should do 26 - the trick: 27 - mknod -m 644 /dev/sjcd b 18 0 28 - and mount the cdrom by /dev/sjcd). 29 - 30 - The default configuration parameters are: 31 - base address 0x340 32 - no irq 33 - no dma 34 - (Actually the CDR-H94A doesn't know how to use irq and dma.) 35 - As of version 1.2, setting base address at boot time is supported 36 - through the use of command line options: type at the "boot:" prompt: 37 - linux sjcd=<base_address> 38 - (where you would use the kernel labeled "linux" in lilo's configuration 39 - file /etc/lilo.conf). You could also use 'append="sjcd=<configuration_info>"' 40 - in the appropriate section of /etc/lilo.conf 41 - If you're building a kernel yourself you can set your default base 42 - i/o address with SJCD_BASE_ADDR in /usr/src/linux/drivers/cdrom/sjcd.h. 43 - 44 - The sjcd driver supports being loaded as a module. The following 45 - command will set the base i/o address on the fly (assuming you 46 - have installed the module in an appropriate place). 47 - insmod sjcd.o sjcd_base=<base_address> 48 - 49 - 50 - Have fun! 51 - 52 - If something is wrong, please email to vadim@rbrf.ru 53 - or vadim@ipsun.ras.ru 54 - or model@cecmow.enet.dec.com 55 - or H.T.M.v.d.Maarel@marin.nl 56 - 57 - It happens sometimes that Vadim is not reachable by mail. For these 58 - instances, Eric van der Maarel will help too. 59 - 60 - Vadim V. Model, Eric van der Maarel, Eberhard Moenkeberg
-122
Documentation/cdrom/sonycd535
··· 1 - README FOR LINUX SONY CDU-535/531 DRIVER 2 - ======================================== 3 - 4 - This is the Sony CDU-535 (and 531) driver version 0.7 for Linux. 5 - I do not think I have the documentation to add features like DMA support 6 - so if anyone else wants to pursue it or help me with it, please do. 7 - (I need to see what was done for the CDU-31A driver -- perhaps I can 8 - steal some of that code.) 9 - 10 - This is a Linux device driver for the Sony CDU-535 CDROM drive. This is 11 - one of the older Sony drives with its own interface card (Sony bus). 12 - The DOS driver for this drive is named SONY_CDU.SYS - when you boot DOS 13 - your drive should be identified as a SONY CDU-535. The driver works 14 - with a CDU-531 also. One user reported that the driver worked on drives 15 - OEM'ed by Procomm, drive and interface board were labelled Procomm. 16 - 17 - The Linux driver is based on Corey Minyard's sonycd 0.3 driver for 18 - the CDU-31A. Ron Jeppesen just changed the commands that were sent 19 - to the drive to correspond to the CDU-535 commands and registers. 20 - There were enough changes to let bugs creep in but it seems to be stable. 21 - Ron was able to tar an entire CDROM (should read all blocks) and built 22 - ghostview and xfig off Walnut Creek's X11R5/GNU CDROM. xcdplayer and 23 - workman work with the driver. Others have used the driver without 24 - problems except those dealing with wait loops (fixed in third release). 25 - Like Minyard's original driver this one uses a polled interface (this 26 - is also the default setup for the DOS driver). It has not been tried 27 - with interrupts or DMA enabled on the board. 28 - 29 - REQUIREMENTS 30 - ============ 31 - 32 - - Sony CDU-535 drive, preferably without interrupts and DMA 33 - enabled on the card. 34 - 35 - - Drive must be set up as unit 1. Only the first unit will be 36 - recognized 37 - 38 - - You must enter your interface address into 39 - /usr/src/linux/drivers/cdrom/sonycd535.h and build the 40 - appropriate kernel or use the "kernel command line" parameter 41 - sonycd535=0x320 42 - with the correct interface address. 43 - 44 - NOTES: 45 - ====== 46 - 47 - 1) The drive MUST be turned on when booting or it will not be recognized! 48 - (but see comments on modularized version below) 49 - 50 - 2) when the cdrom device is opened the eject button is disabled to keep the 51 - user from ejecting a mounted disk and replacing it with another. 52 - Unfortunately xcdplayer and workman also open the cdrom device so you 53 - have to use the eject button in the software. Keep this in mind if your 54 - cdrom player refuses to give up its disk -- exit workman or xcdplayer, or 55 - umount the drive if it has been mounted. 56 - 57 - THANKS 58 - ====== 59 - 60 - Many thanks to Ron Jeppesen (ronj.an@site007.saic.com) for getting 61 - this project off the ground. He wrote the initial release 62 - and the first two patches to this driver (0.1, 0.2, and 0.3). 63 - Thanks also to Eberhard Moenkeberg (emoenke@gwdg.de) for prodding 64 - me to place this code into the mainstream Linux source tree 65 - (as of Linux version 1.1.91), as well as some patches to make 66 - it a better device citizen. Further thanks to Joel Katz 67 - <joelkatz@webchat.org> for his MODULE patches (see details below), 68 - Porfiri Claudio <C.Porfiri@nisms.tei.ericsson.se> for patches 69 - to make the driver work with the older CDU-510/515 series, and 70 - Heiko Eissfeldt <heiko@colossus.escape.de> for pointing out that 71 - the verify_area() checks were ignoring the results of said checks 72 - (note: verify_area() has since been replaced by access_ok()). 73 - 74 - (Acknowledgments from Ron Jeppesen in the 0.3 release:) 75 - Thanks to Corey Minyard who wrote the original CDU-31A driver on which 76 - this driver is based. Thanks to Ken Pizzini and Bob Blair who provided 77 - patches and feedback on the first release of this driver. 78 - 79 - Ken Pizzini 80 - ken@halcyon.com 81 - 82 - ------------------------------------------------------------------------------ 83 - (The following is from Joel Katz <joelkatz@webchat.org>.) 84 - 85 - To build a version of sony535.o that can be installed as a module, 86 - use the following command: 87 - 88 - gcc -c -D__KERNEL__ -DMODULE -O2 sonycd535.c -o sonycd535.o 89 - 90 - To install the module, simply type: 91 - 92 - insmod sony535.o 93 - or 94 - insmod sony535.o sonycd535=<address> 95 - 96 - And to remove it: 97 - 98 - rmmod sony535 99 - 100 - The code checks to see if MODULE is defined and behaves as it used 101 - to if MODULE is not defined. That means your patched file should behave 102 - exactly as it used to if compiled into the kernel. 103 - 104 - I have an external drive, and I usually leave it powered off. I used 105 - to have to reboot if I needed to use the CDROM drive. Now I don't. 106 - 107 - Even if you have an internal drive, why waste the 96K of memory 108 - (unswappable) that the driver uses if you use your CD-ROM drive infrequently? 109 - 110 - This driver will not install (whether compiled in or loaded as a 111 - module) if the CDROM drive is not available during its initialization. This 112 - means that you can have the driver compiled into the kernel and still load 113 - the module later (assuming the driver doesn't install itself during 114 - power-on). This only wastes 12K when you boot with the CDROM drive off. 115 - 116 - This is what I usually do; I leave the driver compiled into the 117 - kernel, but load it as a module if I powered the system up with the drive 118 - off and then later decided to use the CDROM drive. 119 - 120 - Since the driver only uses a single page to point to the chunks, 121 - attempting to set the buffer cache to more than 2 Megabytes would be very 122 - bad; don't do that.
-37
Documentation/kernel-parameters.txt
··· 34 34 APIC APIC support is enabled. 35 35 APM Advanced Power Management support is enabled. 36 36 AX25 Appropriate AX.25 support is enabled. 37 - CD Appropriate CD support is enabled. 38 37 DRM Direct Rendering Management support is enabled. 39 38 EDD BIOS Enhanced Disk Drive Services (EDD) is enabled 40 39 EFI EFI Partitioning (GPT) is enabled ··· 325 326 326 327 autotest [IA64] 327 328 328 - aztcd= [HW,CD] Aztech CD268 CDROM driver 329 - Format: <io>,0x79 (?) 330 - 331 329 baycom_epp= [HW,AX25] 332 330 Format: <io>,<mode> 333 331 ··· 366 370 to fix known problems, but for some CPUs it is not 367 371 possible to determine what the correct size should be. 368 372 This option provides an override for these situations. 369 - 370 - cdu31a= [HW,CD] 371 - Format: <io>,<irq>[,PAS] 372 - See header of drivers/cdrom/cdu31a.c. 373 373 374 374 chandev= [HW,NET] Generic channel device initialisation 375 375 ··· 419 427 420 428 hpet= [IA-32,HPET] option to disable HPET and use PIT. 421 429 Format: disable 422 - 423 - cm206= [HW,CD] 424 - Format: { auto | [<io>,][<irq>] } 425 430 426 431 com20020= [HW,NET] ARCnet - COM20020 chipset 427 432 Format: ··· 649 660 gpt [EFI] Forces disk with valid GPT signature but 650 661 invalid Protective MBR to be treated as GPT. 651 662 652 - gscd= [HW,CD] 653 - Format: <io> 654 - 655 663 gvp11= [HW,SCSI] 656 664 657 665 hashdist= [KNL,NUMA] Large hashes allocated during boot ··· 812 826 tasks in the system -- can cause problems and 813 827 suboptimal load balancer performance. 814 828 815 - isp16= [HW,CD] 816 - Format: <io>,<irq>,<dma>,<setup> 817 - 818 829 iucv= [HW,NET] 819 830 820 831 js= [HW,JOY] Analog joystick ··· 949 966 mca-pentium [BUGS=IA-32] 950 967 951 968 mcatest= [IA-64] 952 - 953 - mcd= [HW,CD] 954 - Format: <port>,<irq>,<mitsumi_bug_93_wait> 955 - 956 - mcdx= [HW,CD] 957 969 958 970 mce [IA-32] Machine Check Exception 959 971 ··· 1177 1199 1178 1200 oprofile.timer= [HW] 1179 1201 Use timer interrupt instead of performance counters 1180 - 1181 - optcd= [HW,CD] 1182 - Format: <io> 1183 1202 1184 1203 osst= [HW,SCSI] SCSI Tape Driver 1185 1204 Format: <buffer_size>,<write_threshold> ··· 1480 1505 1481 1506 sbni= [NET] Granch SBNI12 leased line adapter 1482 1507 1483 - sbpcd= [HW,CD] Soundblaster CD adapter 1484 - Format: <io>,<type> 1485 - See a comment before function sbpcd_setup() in 1486 - drivers/cdrom/sbpcd.c. 1487 - 1488 1508 sc1200wdt= [HW,WDT] SC1200 WDT (watchdog) driver 1489 1509 Format: <io>[,<timeout>[,<isapnp>]] 1490 1510 ··· 1531 1561 1532 1562 simeth= [IA-64] 1533 1563 simscsi= 1534 - 1535 - sjcd= [HW,CD] 1536 - Format: <io>,<irq>,<dma> 1537 - See header of drivers/cdrom/sjcd.c. 1538 1564 1539 1565 slram= [HW,MTD] 1540 1566 ··· 1703 1737 snd-wavefront= [HW,ALSA] 1704 1738 1705 1739 snd-ymfpci= [HW,ALSA] 1706 - 1707 - sonycd535= [HW,CD] 1708 - Format: <io>[,<irq>] 1709 1740 1710 1741 sonypi.*= [HW] Sony Programmable I/O Control Device driver 1711 1742 See Documentation/sonypi.txt
-12
MAINTAINERS
··· 2622 2622 W: http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/ninja/ 2623 2623 S: Maintained 2624 2624 2625 - NON-IDE/NON-SCSI CDROM DRIVERS [GENERAL] (come on, crew - mark your responsibility) 2626 - P: Eberhard Moenkeberg 2627 - M: emoenke@gwdg.de 2628 - L: linux-kernel@vger.kernel.org 2629 - S: Maintained 2630 - 2631 2625 NTFS FILESYSTEM 2632 2626 P: Anton Altaparmakov 2633 2627 M: aia21@cantab.net ··· 3112 3118 P: Michael Hunold 3113 3119 M: michael@mihu.de 3114 3120 W: http://www.mihu.de/linux/saa7146 3115 - S: Maintained 3116 - 3117 - SBPCD CDROM DRIVER 3118 - P: Eberhard Moenkeberg 3119 - M: emoenke@gwdg.de 3120 - L: linux-kernel@vger.kernel.org 3121 3121 S: Maintained 3122 3122 3123 3123 SC1200 WDT DRIVER