From: julian@tfs.com (Julian Elischer)
Subject: New scsi system beta3 (part 6 of       10)
Organization: TRW Financial Systems
Date: Sat, 3 Oct 1992 04:01:53 GMT

# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	sys/cdio.h
#	scsi/scsi_cd.h
#
echo x - sys/cdio.h
sed 's/^X//' >sys/cdio.h << 'END-of-sys/cdio.h'
X
X
X/* Shared between kernel & process */
X
Xstruct cd_toc_entry {
X	u_char	:8;
X	u_char	control:4;
X	u_char	addr_type:4;
X	u_char  track;
X	u_char	:8;
X	u_char	addr[4];
X};
X
Xstruct cd_sub_channel_header {
X	u_char	:8;   
X	u_char	audio_status; 
X#define CD_AS_AUDIO_INVALID        0x00
X#define CD_AS_PLAY_IN_PROGRESS     0x11
X#define CD_AS_PLAY_PAUSED          0x12
X#define CD_AS_PLAY_COMPLETED       0x13
X#define CD_AS_PLAY_ERROR           0x14
X#define CD_AS_NO_STATUS            0x15
X	u_char	data_len[2];
X};
X
Xstruct cd_sub_channel_position_data {
X	u_char	data_format;
X	u_char	control:4;
X	u_char	addr_type:4;
X	u_char	track_number;
X	u_char	index_number;
X	u_char	absaddr[4];
X	u_char	reladdr[4];
X};
X
Xstruct cd_sub_channel_media_catalog {
X        u_char  data_format;
X        u_char  :8;
X        u_char  :8;
X        u_char  :8;
X        u_char  :7;
X        u_char  mc_valid:1;
X        u_char  mc_number[15]; 
X};
X
Xstruct cd_sub_channel_track_info {
X        u_char  data_format;
X        u_char  :8;
X        u_char  track_number;
X        u_char  :8;
X        u_char  :7;
X        u_char  ti_valid:1;   
X        u_char  ti_number[15]; 
X};
X
Xstruct cd_sub_channel_info {
X	struct cd_sub_channel_header header;
X	union {
X		struct cd_sub_channel_position_data position;
X		struct cd_sub_channel_media_catalog media_catalog;
X		struct cd_sub_channel_track_info track_info;	
X	} what;
X};
X
X/***************************************************************\
X* Ioctls for the CD drive					*
X\***************************************************************/
Xstruct ioc_play_track
X{
X	u_char	start_track;
X	u_char	start_index;
X	u_char	end_track;
X	u_char	end_index;
X};
X
X#define	CDIOCPLAYTRACKS	_IOW('c',1,struct ioc_play_track)
Xstruct ioc_play_blocks
X{
X	int	blk;
X	int	len;
X};
X#define	CDIOCPLAYBLOCKS	_IOW('c',2,struct ioc_play_blocks)
X
Xstruct ioc_read_subchannel {
X	u_char address_format;
X#define CD_LBA_FORMAT	1
X#define CD_MSF_FORMAT	2
X	u_char data_format;
X#define CD_SUBQ_DATA		0
X#define CD_CURRENT_POSITION	1
X#define CD_MEDIA_CATALOG	2
X#define CD_TRACK_INFO		3
X	u_char track;
X	int	data_len;
X	struct  cd_sub_channel_info *data;
X};
X#define CDIOCREADSUBCHANNEL _IOWR('c', 3 , struct ioc_read_subchannel )
X
X
Xstruct ioc_toc_header {
X	u_short len;
X	u_char  starting_track;
X	u_char  ending_track;
X};
X
X#define CDIOREADTOCHEADER _IOR('c',4,struct ioc_toc_header)
X
Xstruct ioc_read_toc_entry {
X	u_char	address_format;
X	u_char	starting_track;
X	u_short	data_len;
X	struct  cd_toc_entry *data;
X};
X#define CDIOREADTOCENTRYS _IOWR('c',5,struct ioc_read_toc_entry)
X
Xstruct	ioc_patch
X{
X	u_char	patch[4];	/* one for each channel */
X};
X#define	CDIOCSETPATCH	_IOW('c',9,struct ioc_patch)
Xstruct	ioc_vol
X{
X	u_char	vol[4];	/* one for each channel */
X};
X#define	CDIOCGETVOL	_IOR('c',10,struct ioc_vol)
X#define	CDIOCSETVOL	_IOW('c',11,struct ioc_vol)
X#define	CDIOCSETMONO	_IO('c',12)
X#define	CDIOCSETSTERIO	_IO('c',13)
X#define	CDIOCSETMUTE	_IO('c',14)
X#define	CDIOCSETLEFT	_IO('c',15)
X#define	CDIOCSETRIGHT	_IO('c',16)
X#define	CDIOCSETDEBUG	_IO('c',17)
X#define	CDIOCCLRDEBUG	_IO('c',18)
X#define	CDIOCPAUSE	_IO('c',19)
X#define	CDIOCRESUME	_IO('c',20)
X#define	CDIOCRESET	_IO('c',21)
X#define	CDIOCSTART	_IO('c',22)
X#define	CDIOCSTOP	_IO('c',23)
X#define	CDIOCEJECT	_IO('c',24)
X
X
X
END-of-sys/cdio.h
echo x - scsi/scsi_cd.h
sed 's/^X//' >scsi/scsi_cd.h << 'END-of-scsi/scsi_cd.h'
X/*
X * Written by Julian Elischer (julian@tfs.com)
X * for TRW Financial Systems.
X *
X * TRW Financial Systems, in accordance with their agreement with Carnegie
X * Mellon University, makes this software available to CMU to distribute
X * or use in any manner that they see fit as long as this message is kept with 
X * the software. For this reason TFS also grants any other persons or
X * organisations permission to use or modify this software.
X *
X * TFS supplies this software to be publicly redistributed
X * on the understanding that TFS is not responsible for the correct
X * functioning of this software in any circumstances.
X *
X */
X
X
X
X/*
X * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
X */
X
X/*
X * SCSI command format
X */
X
Xstruct scsi_read_capacity_cd
X{
X	u_char	op_code;
X	u_char	:5;
X	u_char	lun:3;
X	u_char	addr_3;	/* Most Significant */
X	u_char	addr_2;
X	u_char	addr_1;
X	u_char	addr_0;	/* Least Significant */
X	u_char	unused[3];
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;	
X};
X
Xstruct scsi_pause
X{
X	u_char	op_code;
X	u_char	:5;
X	u_char	lun:3;
X	u_char	unused[6];
X	u_char	resume:1;
X	u_char	:7;
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X#define	PA_PAUSE	1
X#define PA_RESUME	0
X
Xstruct scsi_play_msf
X{
X	u_char	op_code;
X	u_char	:5;
X	u_char	lun:3;
X	u_char	unused;
X	u_char	start_m;
X	u_char	start_s;
X	u_char	start_f;
X	u_char	end_m;
X	u_char	end_s;
X	u_char	end_f;
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X
Xstruct scsi_play_track
X{
X	u_char	op_code;
X	u_char	:5;
X	u_char	lun:3;
X	u_char	unused[2];
X	u_char	start_track;
X	u_char	start_index;
X	u_char	unused1;
X	u_char	end_track;
X	u_char	end_index;
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X
Xstruct scsi_play
X{
X	u_char	op_code;
X	u_char	reladdr:1;
X	u_char	:4;
X	u_char	lun:3;
X	u_char	blk_addr[4];
X	u_char	unused;
X	u_char	xfer_len[2];
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X
Xstruct scsi_play_big	
X{
X	u_char	op_code;
X	u_char	reladdr:1;
X	u_char	:4;
X	u_char	lun:3;
X	u_char	blk_addr[4];
X	u_char	xfer_len[4];
X	u_char	unused;
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X
Xstruct scsi_play_rel_big
X{
X	u_char	op_code;
X	u_char	reladdr:1;
X	u_char	:4;
X	u_char	lun:3;
X	u_char	blk_addr[4];
X	u_char	xfer_len[4];
X	u_char	track;
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X
Xstruct scsi_read_header
X{
X	u_char	op_code;
X	u_char	:1;
X	u_char	msf:1;
X	u_char	:3;
X	u_char	lun:3;
X	u_char	blk_addr[4];
X	u_char	unused;
X	u_char	data_len[2];
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X
Xstruct scsi_read_subchannel
X{
X	u_char	op_code;
X	u_char	:1;
X	u_char	msf:1;
X	u_char	:3;
X	u_char	lun:3;
X	u_char	:6;
X	u_char	subQ:1;
X	u_char	:1;
X	u_char	subchan_format;
X	u_char	unused[2];
X	u_char	track;
X	u_char	data_len[2];
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X
Xstruct scsi_read_toc
X{
X	u_char	op_code;
X	u_char	:1;
X	u_char	msf:1;
X	u_char	:3;
X	u_char	lun:3;
X	u_char	unused[4];
X	u_char	from_track;
X	u_char	data_len[2];
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;
X};
X;
X
Xstruct scsi_read_cd_capacity
X{
X	u_char	op_code;
X	u_char	:5;
X	u_char	lun:3;
X	u_char	addr_3;	/* Most Significant */
X	u_char	addr_2;
X	u_char	addr_1;
X	u_char	addr_0;	/* Least Significant */
X	u_char	unused[3];
X	u_char	link:1;
X	u_char	flag:1;
X	u_char	:6;	
X};
X
X/*
X * Opcodes
X */
X
X#define READ_CD_CAPACITY	0x25	/* slightly different from disk */
X#define READ_SUBCHANNEL		0x42	/* cdrom read Subchannel */
X#define READ_TOC		0x43	/* cdrom read TOC */
X#define READ_HEADER		0x44	/* cdrom read header */
X#define PLAY			0x45	/* cdrom play  'play audio' mode */
X#define PLAY_MSF		0x47	/* cdrom play Min,Sec,Frames mode */
X#define PLAY_TRACK		0x48	/* cdrom play track/index mode */
X#define PLAY_TRACK_REL		0x49	/* cdrom play track/index mode */
X#define PAUSE			0x4b	/* cdrom pause in 'play audio' mode */
X#define PLAY_BIG		0xa5	/* cdrom pause in 'play audio' mode */
X#define PLAY_TRACK_REL_BIG	0xa9	/* cdrom play track/index mode */
X
X
Xstruct	cd_inquiry_data	/* in case there is some special info */
X{
X	u_char	device_type:5;
X	u_char	device_qualifier:3;
X	u_char	dev_qual2:7;
X	u_char	removable:1;
X	u_char	ansii_version:3;
X	u_char	:5;
X	u_char	response_format;
X	u_char	additional_length;
X	u_char	unused[2];
X	u_char	:3;
X	u_char	can_link:1;
X	u_char	can_sync:1;
X	u_char	:3;
X	char	vendor[8];
X	char	product[16];
X	char	revision[4];
X	u_char	extra[8];
X};
X
Xstruct scsi_read_cd_cap_data
X{
X	u_char	addr_3;	/* Most significant */
X	u_char	addr_2;
X	u_char	addr_1;
X	u_char	addr_0;	/* Least significant */
X	u_char	length_3;	/* Most significant */
X	u_char	length_2;
X	u_char	length_1;
X	u_char	length_0;	/* Least significant */
X};
X
Xunion	cd_pages
X{
X#define	AUDIO_PAGE	0x0e
X	struct	audio_page
X	{
X		u_char	page_code:6;
X		u_char	:1;
X		u_char	ps:1;
X		u_char	param_len;
X		u_char	:1;
X		u_char	sotc:1;
X		u_char	immed:1;
X		u_char	:5;
X		u_char	unused[2];
X		u_char	format_lba:4;
X		u_char	:3;
X		u_char	apr_valid:1;
X		u_char	lb_per_sec[2];
X		struct	port_control
X		{
X			u_char	channels:4;
X#define	CHANNEL_0 1
X#define	CHANNEL_1 2
X#define	CHANNEL_2 4
X#define	CHANNEL_3 8
X#define	LEFT_CHANNEL	CHANNEL_0
X#define	RIGHT_CHANNEL	CHANNEL_1
X			u_char	:4;
X			u_char	volume;
X		} port[4];
X#define	LEFT_PORT	0
X#define	RIGHT_PORT	1
X	}audio;
X};
X
Xstruct cd_mode_data
X{
X	struct scsi_mode_header header;
X	struct blk_desc blk_desc;
X	union cd_pages page;
X};
X
END-of-scsi/scsi_cd.h
exit