⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srdef.h

📁 操作系统SunOS 4.1.3版本的源码
💻 H
字号:
static  char sccsid[] = "@(#)srdef.h 1.1 92/07/30 Copyright Sun Micro";/**********************************************************************        This include file is lift from 	blob:/usr/src/sundist/cdrom/src/sys/scsi/targets	srdef.h 1.11 89/11/14 version.        Please keep updating this file as needed.***********************************************************************//* * * Defines for SCSI direct access devices modified for CDROM, based on sddef.h * */#include <sys/ioctl.h>/* * define for 512 bytes/sector (default to 2048 bytes/sector) * #define	FIVETWELVE *//* * set drive to read 2048 bytes per sector */#undef FIVETWELVE/* * fixed firmware for volume control */#define	FIXEDFIRMWARE/* * SCSI target controller type- disks */#define	CTYPE_UNKNOWN		0#define	CTYPE_MD21		1#define	CTYPE_ACB4000		2#define	CTYPE_CCS		3#ifndef SD_FORMAT#define	DK_NOERROR		0#define	DK_CORRECTED		1#define	DK_RECOVERED		2#define	DK_FATAL		3#endif SD_FORMAT/* * Define various buffer and I/O block sizes * notice the sector size for CDROM is 2048 bytes. */#ifdef FIVETWELVE#define	SECSIZE			512		/* Bytes/sector */#define	SECDIV			9		/* log2 (SECSIZE) */#else#define	SECSIZE			2048		/* Bytes/sector */#define	SECDIV			11		/* log2 (SECSIZE) */#endif FIVETWELVE#define	MAXBUFSIZE		(63 * 1024)	/* 63 KB max size of buffer *//* * flags for medium removal (SCMD_DOORLOCK SCSI command) */#define	SR_REMOVAL_PREVENT	1#define	SR_REMOVAL_ALLOW	0/* * * Additional SCSI commands for CD-ROM. * *//* * *	Group 1 Commands * *//* * *	Group 2 Commands * */#define	SCMD_READ_TOC		0x43		/* optional SCSI command */#define	SCMD_PLAYAUDIO_MSF	0x47		/* optional SCSI command */#define	SCMD_PLAYAUDIO_TI	0x48		/* optional SCSI command */#define	SCMD_PAUSE_RESUME	0x4B		/* optional SCSI command */#define	SCMD_READ_SUBCHANNEL	0x42		/* optional SCSI command */#define	SCMD_PLAYAUDIO10	0x45		/* optional SCSI command */#define	SCMD_PLAYTRACK_REL10	0x49		/* optional SCSI command */#define	SCMD_READ_HEADER	0x44		/* optional SCSI command *//* * *	Group 5 Commands * */#define	SCMD_PLAYAUDIO12	0xA5		/* optional SCSI command */#define	SCMD_PLAYTRACK_REL12	0xA9		/* optional SCSI command *//* * *	Group 6 Commands * */#define	SCMD_CD_PLAYBACK_CONTROL 0xC9		/* SONY unique SCSI command */#define	SCMD_CD_PLAYBACK_STATUS 0xC4		/* SONY unique SCSI command *//* * * Direct Access Device Capacity Structure * */struct scsi_capacity {	u_long	capacity;	u_long	lbasize;};/* * * Direct Access device mode sense/mode select paramters * */#define	ERR_RECOVERY_PARMS	0x01#define	DISCO_RECO_PARMS	0x02#define	FORMAT_PARMS		0x03#define	GEOMETRY_PARMS		0x04#define	CERTIFICATION_PARMS	0x06#define	CACHE_PARMS		0x38/* * Mode select header */struct ccs_modesel_head {	u_char	reserved1;	u_char	medium;			/* medium type */	u_char 	reserved2;	u_char	block_desc_length;	/* block descriptor length */	u_char	density;		/* density code */	u_char	number_blocks_hi;	u_char	number_blocks_med;	u_char	number_blocks_lo;	u_char	reserved3;	u_char	block_length_hi;	u_short	block_length;};/* * Page 1 - Error Recovery Parameters */struct ccs_err_recovery {	u_char	reserved	: 2;	u_char	page_code	: 6;	/* define page function */	u_char	page_length;		/* length of current page */	u_char	awre		: 1;	/* auto write realloc enabled */	u_char	arre		: 1;	/* auto read realloc enabled */	u_char	tb		: 1;	/* transfer block */	u_char 	rc		: 1;	/* read continuous */	u_char	eec		: 1;	/* enable early correction */	u_char	per		: 1;	/* post error */	u_char	dte		: 1;	/* disable transfer on error */	u_char	dcr		: 1;	/* disable correction */	u_char	retry_count;	u_char	correction_span;	u_char	head_offset_count;	u_char	strobe_offset_count;	u_char	recovery_time_limit;};/* * Page 2 - Disconnect / Reconnect Control Parameters */struct ccs_disco_reco {	u_char	reserved	: 2;	u_char	page_code	: 6;	/* define page function */	u_char	page_length;		/* length of current page */	u_char	buffer_full_ratio;	/* write, how full before reconnect? */	u_char	buffer_empty_ratio;	/* read, how full before reconnect? */	u_short	bus_inactivity_limit;	/* how much bus time for busy */	u_short	disconnect_time_limit;	/* min to remain disconnected */	u_short	connect_time_limit;	/* min to remain connected */	u_short	reserved_1;};/* * Page 4 - Rigid Disk Drive Geometry Parameters */struct ccs_geometry {	u_char	reserved	: 2;	u_char	page_code	: 6;	/* define page function */	u_char	page_length;		/* length of current page */	u_char	cyl_ub;			/* number of cylinders */	u_char	cyl_mb;	u_char	cyl_lb;	u_char	heads;			/* number of heads */	u_char	precomp_cyl_ub;		/* cylinder to start precomp */	u_char	precomp_cyl_mb;	u_char	precomp_cyl_lb;	u_char	current_cyl_ub;		/* cyl to start reduced current */	u_char	current_cyl_mb;	u_char	current_cyl_lb;	u_short	step_rate;		/* drive step rate */	u_char	landing_cyl_ub;		/* landing zone cylinder */	u_char	landing_cyl_mb;	u_char	landing_cyl_lb;	u_char	reserved_1;	u_char	reserved_2;	u_char	reserved_3;};/* * Page 38 - Cache Parameters */struct ccs_cache {	u_char	reserved	: 2;	u_char	page_code	: 6;	/* define page function */	u_char	page_length;		/* length of current page */	u_char	mode;			/* Cache control and size */	u_char	threshold;		/* Prefetch threshold */	u_char	max_prefetch;		/* Max. prefetch */	u_char	max_multiplier;		/* Max. prefetch multiplier */	u_char	min_prefetch;		/* Min. prefetch */	u_char	min_multiplier;		/* Min. prefetch multiplier */	u_char	rsvd2[8];};struct ccs_mode_select_parms {	long	edl_len;	long	reserved;	long	bsize;	unsigned fmt_code :8;	unsigned ncyl	  :16;	unsigned nhead    :8;	u_short	rwc_cyl;	u_short	wprc_cyl;	u_char	ls_pos;	u_char	sporc;};struct acb4000_mode_select_parms {	long	edl_len;	long	reserved;	long	bsize;	unsigned fmt_code :8;	unsigned ncyl	:16;	unsigned nhead	:8;	u_short	rwc_cyl;	u_short	wprc_cyl;	u_char	ls_pos;	u_char	sporc;};/* * * Private info for scsi disks. Pointed to by the un_private pointer * of one of the SCSI_DEVICE structures. * */struct scsi_disk {	struct scsi_device *un_sd;	/* back pointer to SCSI_DEVICE */	struct scsi_pkt *un_rqs;	/* ptr to request sense command pkt */	struct sr_drivetype	*un_dp;	/* drive type table */	long	un_capacity;		/* capacity of drive */	long	un_lbasize;		/* logical block size */	struct	buf *un_rbufp;		/* for use in raw io */	struct	buf *un_sbufp;		/* for use in special io */	struct	dk_map un_map[NDKMAP];	/* logical partitions */	struct	dk_geom un_g;		/* disk geometry */	struct	diskhd	un_utab;	/* for queuing */	u_int	un_err_resid;		/* resid from last error */	u_int	un_err_blkno;		/* disk block where error occurred */	dev_t	un_dev;			/* unix device */	u_char	un_last_cmd;		/* last cmd (DKIOCGDIAG only) */	u_char	un_soptions;		/* 'special' command options */	u_char	un_err_severe;		/* error severity */	u_char	un_status;		/* sense key from last error */	u_char	un_err_code;		/* vendor unique error code  */	u_char	un_retry_ct;		/* retry count */	u_char	un_gvalid;		/* geometry is valid */	u_char	un_state;		/* current state */	u_char	un_last_state;		/* last state */	u_char	un_open0;		/* open flag #0 */	u_char	un_open1;		/* open flag #1 */	u_char	un_exclopen;		/* exclusive open flag */	char	un_dkn;			/* dk number for iostats */};/* * CDROM driver states * note the drive is locked when opened and unlocked when closed */#define	SR_STATE_NIL		0#define	SR_STATE_CLOSED		1#define	SR_STATE_OPENING	2#define	SR_STATE_OPEN		3#define	SR_STATE_SENSING	4#define	SR_STATE_RWAIT		5#define	SR_STATE_DETACHING	6#define	SR_STATE_EJECTED	7#define	SR_STATE_MODE2		8/* * Error levels */#define	SRERR_ALL		0#define	SRERR_UNKNOWN		1#define	SRERR_INFORMATIONAL	2#define	SRERR_RECOVERED		3#define	SRERR_RETRYABLE		4#define	SRERR_FATAL		5/* * srintr codes */#define	COMMAND_DONE		0#define	COMMAND_DONE_ERROR	1#define	QUE_COMMAND		2#define	QUE_SENSE		3#define	JUST_RETURN		4/* * Drive Types (and characteristics) */#define	IDMAX	8+4struct sr_drivetype {	char	*name;		/* for debug purposes */	char	options;	/* drive options */	char	ctype;		/* controller type */	char	idlen;		/* id length */	char	id[IDMAX];	/* Vendor id + part of product id */};#define	SR_LINKABLE	0x1	/* drive supports linked commands.. */#define	SR_DOLINK	0x2	/* has better performance with linked cmds */#define	SR_NODISC	0x4	/* don't do disconnect/reconnect *//* * CDROM io controls type definitions */struct cdrom_msf {	unsigned char	cdmsf_min0;	/* starting minute */	unsigned char	cdmsf_sec0;	/* starting second */	unsigned char	cdmsf_frame0;	/* starting frame  */	unsigned char	cdmsf_min1;	/* ending minute   */	unsigned char	cdmsf_sec1;	/* ending second   */	unsigned char	cdmsf_frame1;	/* ending frame	   */};struct cdrom_ti {	unsigned char	cdti_trk0;	/* starting track */	unsigned char	cdti_ind0;	/* starting index */	unsigned char	cdti_trk1;	/* ending track */	unsigned char	cdti_ind1;	/* ending index */};struct cdrom_tochdr {	unsigned char	cdth_trk0;	/* starting track */	unsigned char	cdth_trk1;	/* ending track */};struct cdrom_tocentry {	unsigned char	cdte_track;	unsigned char	cdte_adr	:4;	unsigned char	cdte_ctrl	:4;	unsigned char	cdte_format;	union {		struct {			unsigned char	minute;			unsigned char	second;			unsigned char	frame;		} msf;		int	lba;	} cdte_addr;	unsigned char	cdte_datamode;};/* * CDROM address format definition, for use with struct cdrom_tocentry */#define	CDROM_LBA	0x01#define	CDROM_MSF	0x02/* * Bitmask for CD-ROM data track in the cdte_ctrl field * A track is either data or audio. */#define	CDROM_DATA_TRACK	0x04/* * For CDROMREADTOCENTRY, set the cdte_track to CDROM_LEADOUT to get * the information for the leadout track. */#define	CDROM_LEADOUT	0xAAstruct cdrom_subchnl {	unsigned char	cdsc_format;	unsigned char	cdsc_audiostatus;	unsigned char	cdsc_adr:	4;	unsigned char	cdsc_ctrl:	4;	unsigned char	cdsc_trk;	unsigned char	cdsc_ind;	union {		struct {			unsigned char	minute;			unsigned char	second;			unsigned char	frame;		} msf;		int	lba;	} cdsc_absaddr;	union {		struct {			unsigned char	minute;			unsigned char	second;			unsigned char	frame;		} msf;		int	lba;	} cdsc_reladdr;};/* * Definition for audio status returned from Read Sub-channel */#define	CDROM_AUDIO_INVALID	0x00	/* audio status not supported */#define	CDROM_AUDIO_PLAY	0x11	/* audio play operation in progress */#define	CDROM_AUDIO_PAUSED	0x12	/* audio play operation paused */#define	CDROM_AUDIO_COMPLETED	0x13	/* audio play successfully completed */#define	CDROM_AUDIO_ERROR	0x14	/* audio play stopped due to error */#define	CDROM_AUDIO_NO_STATUS	0x15	/* no current audio status to return *//* definition of audio volume control structure */struct cdrom_volctrl {	unsigned char	channel0;	unsigned char	channel1;	unsigned char	channel2;	unsigned char	channel3;};struct cdrom_read {	int	cdread_lba;	caddr_t	cdread_bufaddr;	int	cdread_buflen;};#ifdef FIVETWELVE#define	CDROM_MODE1_SIZE	512#else#define	CDROM_MODE1_SIZE	2048#endif FIVETWELVE#define	CDROM_MODE2_SIZE	2336/* * driver flag (used by the routine srioctl_cmd()) */#define	SR_USCSI_CDB_KERNEL	0x01	/* addresses used in the cdb field */					/* of struct uscsi_scmd are kernel */					/* addresses */#define	SR_USCSI_BUF_KERNEL	0x02	/* addresses used in the bufaddr   */					/* field of struct uscsi_scmd are  */					/* kernel address */#define	SR_MODE2	0x04	/* switch the drive to reading mode 2 data *//* * CDROM io control commands */#define	CDROMPAUSE	_IO(c, 10)	/* Pause Audio Operation */#define	CDROMRESUME	_IO(c, 11)	/* Resume paused Audio Operation */#define	CDROMPLAYMSF	_IOW(c, 12, struct cdrom_msf)	/* Play Audio MSF */#define	CDROMPLAYTRKIND	_IOW(c, 13, struct cdrom_ti)	/*							 * Play Audio`							 * Track/index							 */#define	CDROMREADTOCHDR	\		_IOR(c, 103, struct cdrom_tochdr)	/* Read TOC header */#define	CDROMREADTOCENTRY	\	_IOWR(c, 104, struct cdrom_tocentry)		/* Read a TOC entry */#define	CDROMSTOP	_IO(c, 105)	/* Stop the cdrom drive */#define	CDROMSTART	_IO(c, 106)	/* Start the cdrom drive */#define	CDROMEJECT	_IO(c, 107)	/* Ejects the cdrom caddy */#define	CDROMVOLCTRL	\	_IOW(c, 14, struct cdrom_volctrl)	/* control output volume */#define	CDROMSUBCHNL	\	_IOWR(c, 108, struct cdrom_subchnl)	/* read the subchannel data */#define	CDROMREADMODE2	\	_IOW(c, 110, struct cdrom_read)		/* read CDROM mode 2 data */#define	CDROMREADMODE1	\	_IOW(c, 111, struct cdrom_read)		/* read CDROM mode 1 data *//* * macros for accessing fields in the cdb block */#define	cdb_cmd(cdb)	(unsigned char)(cdb[0])#define	cdb_tag(cdb)	(cdb[1] & 0x1F)#define	cdb0_blkno(cdb)	((((u_char)cdb[1] & 0x1F) << 16) + \			((u_char)cdb[2] << 8) + (u_char)cdb[3])

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -