|  | /* | 
|  | * 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; | 
|  | }; | 
|  |  |