109 lines
		
	
	
	
		
			2.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			109 lines
		
	
	
	
		
			2.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Definitions for a GoldStar R420 CD-ROM interface
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *   Copyright (C) 1995  Oliver Raupach <raupach@nwfs1.rz.fh-hannover.de>
							 | 
						||
| 
								 | 
							
								 *                       Eberhard Moenkeberg <emoenke@gwdg.de>
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Published under the GPL.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* The Interface Card default address is 0x340. This will work for most
							 | 
						||
| 
								 | 
							
								   applications. Address selection is accomplished by jumpers PN801-1 to
							 | 
						||
| 
								 | 
							
								   PN801-4 on the GoldStar Interface Card.
							 | 
						||
| 
								 | 
							
								   Appropriate settings are: 0x300, 0x310, 0x320, 0x330, 0x340, 0x350, 0x360
							 | 
						||
| 
								 | 
							
								   0x370, 0x380, 0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, 0x3F0             */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* insert here the I/O port address and extent */
							 | 
						||
| 
								 | 
							
								#define GSCD_BASE_ADDR	        0x340
							 | 
						||
| 
								 | 
							
								#define GSCD_IO_EXTENT          4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/************** nothing to set up below here *********************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* port access macro */
							 | 
						||
| 
								 | 
							
								#define GSCDPORT(x)		(gscd_port + (x))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * commands
							 | 
						||
| 
								 | 
							
								 * the lower nibble holds the command length
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#define CMD_STATUS     0x01
							 | 
						||
| 
								 | 
							
								#define CMD_READSUBQ   0x02 /* 1: ?, 2: UPC, 5: ? */
							 | 
						||
| 
								 | 
							
								#define CMD_SEEK       0x05 /* read_mode M-S-F */
							 | 
						||
| 
								 | 
							
								#define CMD_READ       0x07 /* read_mode M-S-F nsec_h nsec_l */
							 | 
						||
| 
								 | 
							
								#define CMD_RESET      0x11
							 | 
						||
| 
								 | 
							
								#define CMD_SETMODE    0x15
							 | 
						||
| 
								 | 
							
								#define CMD_PLAY       0x17 /* M-S-F M-S-F */
							 | 
						||
| 
								 | 
							
								#define CMD_LOCK_CTL   0x22 /* 0: unlock, 1: lock */
							 | 
						||
| 
								 | 
							
								#define CMD_IDENT      0x31
							 | 
						||
| 
								 | 
							
								#define CMD_SETSPEED   0x32 /* 0: auto */ /* ??? */
							 | 
						||
| 
								 | 
							
								#define CMD_GETMODE    0x41
							 | 
						||
| 
								 | 
							
								#define CMD_PAUSE      0x51
							 | 
						||
| 
								 | 
							
								#define CMD_READTOC    0x61
							 | 
						||
| 
								 | 
							
								#define CMD_DISKINFO   0x71
							 | 
						||
| 
								 | 
							
								#define CMD_TRAY_CTL   0x81
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * disk_state:
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#define ST_PLAYING	0x80
							 | 
						||
| 
								 | 
							
								#define ST_UNLOCKED	0x40
							 | 
						||
| 
								 | 
							
								#define ST_NO_DISK	0x20
							 | 
						||
| 
								 | 
							
								#define ST_DOOR_OPEN	0x10
							 | 
						||
| 
								 | 
							
								#define ST_x08  0x08
							 | 
						||
| 
								 | 
							
								#define ST_x04	0x04
							 | 
						||
| 
								 | 
							
								#define ST_INVALID	0x02
							 | 
						||
| 
								 | 
							
								#define ST_x01	0x01
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * cmd_type:
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#define TYPE_INFO	0x01
							 | 
						||
| 
								 | 
							
								#define TYPE_DATA	0x02
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * read_mode:
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#define MOD_POLLED	0x80
							 | 
						||
| 
								 | 
							
								#define MOD_x08	0x08
							 | 
						||
| 
								 | 
							
								#define MOD_RAW	0x04
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define READ_DATA(port, buf, nr) insb(port, buf, nr)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define SET_TIMER(func, jifs) \
							 | 
						||
| 
								 | 
							
									((mod_timer(&gscd_timer, jiffies + jifs)), \
							 | 
						||
| 
								 | 
							
									(gscd_timer.function = func))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define CLEAR_TIMER		del_timer_sync(&gscd_timer)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define MAX_TRACKS		104
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct msf {
							 | 
						||
| 
								 | 
							
									unsigned char	min;
							 | 
						||
| 
								 | 
							
									unsigned char	sec;
							 | 
						||
| 
								 | 
							
									unsigned char	frame;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct gscd_Play_msf {
							 | 
						||
| 
								 | 
							
									struct msf	start;
							 | 
						||
| 
								 | 
							
									struct msf	end;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct gscd_DiskInfo {
							 | 
						||
| 
								 | 
							
									unsigned char	first;
							 | 
						||
| 
								 | 
							
									unsigned char	last;
							 | 
						||
| 
								 | 
							
									struct msf	diskLength;
							 | 
						||
| 
								 | 
							
									struct msf	firstTrack;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct gscd_Toc {
							 | 
						||
| 
								 | 
							
									unsigned char	ctrl_addr;
							 | 
						||
| 
								 | 
							
									unsigned char	track;
							 | 
						||
| 
								 | 
							
									unsigned char	pointIndex;
							 | 
						||
| 
								 | 
							
									struct msf	trackTime;
							 | 
						||
| 
								 | 
							
									struct msf	diskTime;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 |