xref: /csrg-svn/sys/news3400/iodev/sdreg.h (revision 63307)
153901Smckusick /*
2*63307Sbostic  * Copyright (c) 1992, 1993
3*63307Sbostic  *	The Regents of the University of California.  All rights reserved.
453901Smckusick  *
553901Smckusick  * This code is derived from software contributed to Berkeley by
653901Smckusick  * Sony Corp. and Kazumasa Utashiro of Software Research Associates, Inc.
753901Smckusick  *
853901Smckusick  * %sccs.include.redist.c%
953901Smckusick  *
1053901Smckusick  * from: $Hdr: sdreg.h,v 4.300 91/06/09 06:38:28 root Rel41 $ SONY
1153901Smckusick  *
12*63307Sbostic  *	@(#)sdreg.h	8.1 (Berkeley) 06/11/93
1353901Smckusick  */
1453901Smckusick 
1553901Smckusick /*
1653901Smckusick  * Copyright (c) 1989- by SONY Corporation.
1753901Smckusick  */
1853901Smckusick /*
1953901Smckusick  *	sdreg.h
2053901Smckusick  */
2153901Smckusick 
2253901Smckusick #ifndef __SDREG__
2353901Smckusick #define __SDREG__ 1
2453901Smckusick 
2553901Smckusick #define	MAXSLAVE	8
2653901Smckusick #define	PNUM		8
2753901Smckusick #define	RSEN_CNT	32
2853901Smckusick 
2953901Smckusick /******************************************************/
3053901Smckusick /*
3153901Smckusick  *	software control structure / controller
3253901Smckusick  */
3353901Smckusick struct sdc_softc {
3453901Smckusick /*00*/	int	sdc_wticks;
3553901Smckusick /*04*/	int	sdc_state;
3653901Smckusick #define SDCS_NORMAL	0x0
3753901Smckusick #define SDCS_RSENSE	0x1
3853901Smckusick #define SDCS_ECC	0x2
3953901Smckusick #define SDCS_RASREAD	0x4
4053901Smckusick #define SDCS_RASBLK	0x8
4153901Smckusick #define SDCS_RASWRITE	0x10
4253901Smckusick #define SDCS_RETRY	0x20
4353901Smckusick #define SDCS_PREVRMB	0x40
4453901Smckusick #define SDCS_LOSTDATA	0x1000
4553901Smckusick #define SDCS_ECC_HOLD	0x100000
4653901Smckusick #define SDCS_ECCOFF	0x200000
4753901Smckusick #define SDCS_REZERO	0x400000
4853901Smckusick #define	SDCS_OPEN_WAIT	0x20000000
4953901Smckusick #define SDCS_SCUNLOCK	0x40000000
5053901Smckusick #define SDCS_IOCTL	0x80000000
5153901Smckusick /*08*/	int	sdc_nhrderr;
5253901Smckusick /*0c*/	int	sdc_retrycnt;
5353901Smckusick /*10*/	int	sdc_softas;
5453901Smckusick /*14*/	int	sdc_timeo;
5553901Smckusick /*18*/	int	sdc_countcc;
5653901Smckusick /*1c*/	int	sdc_firmware;
5753901Smckusick #define	SDCFW_DEFMODE	0x1
5853901Smckusick #define	SDCFW_CACHE	0x2
5953901Smckusick #define	SDCFW_AWRE	0x4
6053901Smckusick #define	SDCFW_ARRE	0x8
6153901Smckusick #define	SDCFW_OLDWREN3	0x10
6253901Smckusick #define	SDCFW_WANTED	0x20
6353901Smckusick #define	SDCFW_BUSY	0x40
6453901Smckusick #define	SDCFW_RMB	0x80
6553901Smckusick #define	SDCFW_CDBUGS	0x100
6653901Smckusick #define	SDCFW_CONTR	0x200
6753901Smckusick #define	SDCFW_DEVMASK	0xf0000000
6853901Smckusick #define	SDCFW_HD	0x10000000
6953901Smckusick #define	SDCFW_MO	0x20000000
7053901Smckusick #define	SDCFW_CD	0x40000000
7153901Smckusick /*20*/
7253901Smckusick };
7353901Smckusick 
7453901Smckusick /*
7553901Smckusick  *	software control structure / drive
7653901Smckusick  */
7753901Smckusick struct sdd_softc {
7853901Smckusick /*00*/	int	sdd_sectsize;
7953901Smckusick /*04*/	int	sdd_nsect;
8053901Smckusick /*08*/	int	sdd_badsect;
8153901Smckusick /*0c*/	int	sdd_flags;
8253901Smckusick #define	SDDF_DSKCHGD	0x0
8353901Smckusick #define	SDDF_SAMEDSK	0x1
8453901Smckusick #define	SDDF_WPROTECT	0x2
8553901Smckusick #define	SDDF_XUSE	0x4
8653901Smckusick #define	SDDF_NONFMT	0x8
8753901Smckusick #define	SDDF_FMTDONE	0x10
8853901Smckusick #define	SDDF_REQ_EJECT	0x20
8953901Smckusick #define	SDDF_ERASEOFF	0x40
9053901Smckusick #define SDDF_VBADSECT	0x80
9153901Smckusick #define SDDF_SKIPCHECK	0x100
9253901Smckusick #define	SDDF_SYNCTR	0x200
9353901Smckusick #define	SDDF_INHRMV	0x400
9453901Smckusick #define	SDDF_GETTMP	0x800
9553901Smckusick #define	SDDF_AUDIO_START	0x80000000
9653901Smckusick /*10*/	int	sdd_start;		/* for removable disk */
9753901Smckusick /*14*/	int	sdd_stoptime;		/* for removable disk */
9853901Smckusick 	daddr_t	sdd_lastblk;
9953901Smckusick };
10053901Smckusick 
10153901Smckusick struct sdst {
10253901Smckusick /*00*/	short	nsect;			/* # sectors / track */
10353901Smckusick /*02*/	short	ntrak;			/* # tracks / cylinder */
10453901Smckusick /*04*/	short	nspc;			/* # sectors / cylinder */
10553901Smckusick /*06*/	short	ncyl;			/* # cylinders */
10653901Smckusick /*08*/	short	rps;			/* # revolutions / second */
10753901Smckusick /*0a*/	short	xxxx;			/* reserved */
10853901Smckusick /*0c*/	struct	size *sizes;		/* partition table */
10953901Smckusick /*10*/
11053901Smckusick };
11153901Smckusick 
11253901Smckusick struct size {
11353901Smckusick /*00*/	daddr_t	sd_nblocks;
11453901Smckusick /*04*/	daddr_t	sd_blkoff;
11553901Smckusick /*08*/
11653901Smckusick };
11753901Smckusick 
11853901Smckusick /*
11953901Smckusick  * Device configuration table.
12053901Smckusick  */
12153901Smckusick struct sddevinfo {
12253901Smckusick /*00*/	int		id_len;		/* identify length */
12353901Smckusick /*04*/	char		*id_name;	/* vendor & product ID */
12453901Smckusick /*08*/	char		*revs;		/* revision */
12553901Smckusick /*0c*/	int		capacity;	/* drive capacity */
12653901Smckusick /*10*/	char		*call_name;	/* device nickname */
12753901Smckusick /*14*/	int		type;		/* device type code */
12853901Smckusick #define		UNKNOWN_DISK	0
12953901Smckusick /**/
13053901Smckusick #define		WREN3_101	110
13153901Smckusick #define		WREN3_182	111
13253901Smckusick #define		WREN3_101_HH	112
13353901Smckusick #define		WREN4_286	120
13453901Smckusick #define		WREN5_170_HH	130
13553901Smckusick #define		WREN6_415_HH	141
13653901Smckusick #define		ST1480N		171
13753901Smckusick /**/
13853901Smckusick #define		DK515C_78	210
13953901Smckusick #define		DK516C_16	211
14053901Smckusick #define		DK312C_25	220
14153901Smckusick #define		DK312C_20	221
14253901Smckusick /**/
14353901Smckusick #define		SRD_2040Z	310
14453901Smckusick #define		SMO_S501	330	/* format mode 2 */
14553901Smckusick #define		SMO_S501_ISO	331	/* format mode 3 (spare band 1024) */
14653901Smckusick #define		SMO_S501_ISO2	332	/* format mode 3 (spare band 2048) */
14753901Smckusick /**/
14853901Smckusick #define		XT_8760S	810
14953901Smckusick /**/
15053901Smckusick /*18*/	int		firm_flags;	/* firmware spec */
15153901Smckusick # define	FIRM_CACHE_ON	0x01
15253901Smckusick # define	FIRM_CACHE_OFF	0x02
15353901Smckusick # define	FIRM_SYNCTR	0x04
15453901Smckusick # define	FIRM_AWRE	0x08
15553901Smckusick # define	FIRM_ARRE	0x10
15653901Smckusick /*1c*/	int		tr_period;	/* synchronous transfer period */
15753901Smckusick /*20*/	int		tr_offset;	/* synchronous transfer offset */
15853901Smckusick /*24*/	struct sc_ureq	**setup_cmds;	/* device setup commands */
15953901Smckusick /*28*/	struct sdst	*sdstp;		/* device specifications */
16053901Smckusick #define calc_disk_sizes	NULL
16153901Smckusick /*2c*/	char		*ERP_page;	/* normal Error Recovery Parameters */
16253901Smckusick /*30*/	char		*max_ERP_page;	/* max Error Recovery Parameters */
16353901Smckusick /*34*/	char		**other_pages;	/* Other Parameters */
16453901Smckusick /*38*/	int		fmt_opts;	/* Format options */
16553901Smckusick # define	FMT_DLFMT	0x07	/* Defect list format */
16653901Smckusick # define	FMT_DLF_BLK	0x00		/* block format */
16753901Smckusick # define	FMT_DLF_IDX	0x04		/* bytes from index format */
16853901Smckusick # define	FMT_DLF_PHYS	0x05		/* physical sector format */
16953901Smckusick # define	FMT_DCRT	0x20	/* Disable Certification */
17053901Smckusick /*3c*/
17153901Smckusick };
17253901Smckusick 
17353901Smckusick #ifdef news1800
17453901Smckusick # define	SYNC_TR_OFS	4
17553901Smckusick #else
17653901Smckusick # define	SYNC_TR_OFS	0
17753901Smckusick #endif
17853901Smckusick 
17953901Smckusick /*********************************************************/
18053901Smckusick 
18153901Smckusick /*
18253901Smckusick  *	MODE SELECT/SENSE bit assign
18353901Smckusick  */
18453901Smckusick #define	SDM_PG_NULL	0x00	/* product unique not used */
18553901Smckusick #define	SDM_PG_ERR	0x01	/* error recovery parameters */
18653901Smckusick #define	SDM_PG_CNCT	0x02	/* disconnect/reconnect control parameters */
18753901Smckusick #define	SDM_PG_FMT1	0x03	/* direct access device format parameters */
18853901Smckusick #define	SDM_PG_GEOM	0x04	/* rigid disk drive geometry parameters */
18953901Smckusick 
19053901Smckusick #define	SDM_PG_CACHE1	0x08	/* cache control parameters */
19153901Smckusick 
19253901Smckusick #define	SDM_PG_CACHE2	0x38	/* cache control parameters */
19353901Smckusick 
19453901Smckusick #define	SDM_PG_FMT2	0x20	/* format parameters */
19553901Smckusick 
19653901Smckusick #define	SDM_PG_MODIFY	0x20	/* modification parameters */
19753901Smckusick 
19853901Smckusick #define	SDM_PAGE	0x00	/* page cache mode */
19953901Smckusick #define	SDM_RING	0x10	/* ring cache mode */
20053901Smckusick #define	SDM_RCD		0x01	/* Read Cache Disable */
20153901Smckusick 
20253901Smckusick #define	SDM_STOD	0x08	/* SCSI Time Out Delay*/
20353901Smckusick #define	SDM_ESDT	0x04	/* enable SCSI data timeout */
20453901Smckusick 
20553901Smckusick #define	SDM_PF		0x10	/* page format */
20653901Smckusick 
20753901Smckusick #define	SDM_PC_CUR	0x00	/* page control field (current value) */
20853901Smckusick #define	SDM_PC_CHG	0x40	/* page control field (changeable value) */
20953901Smckusick #define	SDM_PC_DEF	0x80	/* page control field (default value) */
21053901Smckusick #define	SDM_PC_SAVE	0xc0	/* page control field (saved value) */
21153901Smckusick 
21253901Smckusick #define	SDM_PCODE_ER	SDM_PG_ERR
21353901Smckusick #define	SDM_PCODE_CON	SDM_PG_CNCT
21453901Smckusick #define	SDM_PCODE_FMT	SDM_PG_FMT2
21553901Smckusick #define	SDM_PCODE_ALL	0x3f
21653901Smckusick 
21753901Smckusick #define	SDM_DCR		0x01	/* Disable Correction */
21853901Smckusick #define	SDM_DTE		0x02	/* Disable Transfer on Error */
21953901Smckusick #define	SDM_PER		0x04	/* Post Error */
22053901Smckusick #define	SDM_EEC		0x08	/* Enable Early Correction */
22153901Smckusick #define	SDM_RC		0x10	/* Read Continuous */
22253901Smckusick #define	SDM_TB		0x20	/* Transfer Block */
22353901Smckusick #define	SDM_ARRE	0x40	/* automatic read reallocate enable */
22453901Smckusick #define	SDM_AWRE	0x80	/* automatic write reallocate enable */
22553901Smckusick 
22653901Smckusick /*
22753901Smckusick  *	READ DEFECT LIST bit assign
22853901Smckusick  */
22953901Smckusick #define	SDDL_PLIST	0x10	/* primary defect list */
23053901Smckusick #define	SDDL_GLIST	0x08	/* grown defect list  */
23153901Smckusick #define	SDDL_PHYSFMT	0x05	/* physical sector format */
23253901Smckusick 
23353901Smckusick /*
23453901Smckusick  *	FORMAT UNIT bit assign
23553901Smckusick  */
23653901Smckusick #define	SDF_FMTDAT	0x10	/* format data */
23753901Smckusick #define	SDF_CMPLST	0x08	/* complete list */
23853901Smckusick 
23953901Smckusick #define	SDF_BLKFMT	0x10	/* block format */
24053901Smckusick #define	SDF_PHYSFMT	0x15	/* physical sector format */
24153901Smckusick #define	SDF_MKCDA	0x02	/* make controll data area */
24253901Smckusick #define	SDF_MKPLST	0x01	/* make P list */
24353901Smckusick 
24453901Smckusick /*
24553901Smckusick  *	PREVENT/ALLOW MEDIUM REMOVAL bit assign
24653901Smckusick  */
24753901Smckusick #define	SDRMV_PREV	0x01	/* prevent medium removal */
24853901Smckusick #define	SDRMV_ALLOW	0x00	/* allow medium removal */
24953901Smckusick 
25053901Smckusick /*
25153901Smckusick  *	START/STOP UNIT bit assign
25253901Smckusick  */
25353901Smckusick #define	SDSS_STOP	0x00	/* stop unit */
25453901Smckusick #define	SDSS_START	0x01	/* start unit */
25553901Smckusick #define	SDSS_EJECT	0x02	/* eject */
25653901Smckusick 
25753901Smckusick /*********************************************************/
25853901Smckusick /*
25953901Smckusick  *	IOCTL DEFINES
26053901Smckusick  */
26153901Smckusick #define	SDIOC_PRVRMV	_IO('D', 0)		/* prevent medium removal */
26253901Smckusick #define	SDIOC_ALWRMV	_IO('D', 1)		/* allow medium removal */
26353901Smckusick #define	SDIOC_FORMAT	_IOWR('D', 2, struct fmt_data)	/* format unit */
26453901Smckusick struct fmt_data {
26553901Smckusick /*00*/	int	noglist;			/* ignore G-list flag */
26653901Smckusick /*04*/	u_char	*dlh;				/* defect list header */
26753901Smckusick /*08*/
26853901Smckusick };
26953901Smckusick 
27053901Smckusick #define	SDIOC_GSTOPT	_IOR('D', 3, int)		/* get stop time */
27153901Smckusick #define	SDIOC_SSTOPT	_IOW('D', 4, int)		/* set stop time */
27253901Smckusick 
27353901Smckusick #define	SDIOC_SEJECT	_IO('D', 5)		/* set medium eject request */
27453901Smckusick 
27553901Smckusick #define	SDIOC_SXUSE	_IO('D', 6)		/* set exclusive use */
27653901Smckusick #define	SDIOC_RXUSE	_IO('D', 7)		/* reset exclusive use */
27753901Smckusick #define	SDIOC_ERSOFF	_IO('D', 8)		/* no erase before write */
27853901Smckusick #define	SDIOC_ERSON	_IO('D', 9)		/* erase before write */
27953901Smckusick 
28053901Smckusick #define	SDIOC_INQUIRY	_IOR('D', 10, struct sc_inq)
28153901Smckusick #define	SDIOC_RCAP	_IOR('D', 11, int)
28253901Smckusick 
28353901Smckusick #define	SDIOC_ECODE	_IOW('D', 14, int)	/* extend ecode on/off */
28453901Smckusick 
28553901Smckusick #define	SDIOC_GFLAGS	_IOR('D', 15, int)	/* get ii->ii_flags */
28653901Smckusick #define	SDIOC_SFLAGS	_IOW('D', 16, int)	/* set ii->ii_flags */
28753901Smckusick 
28853901Smckusick /*
28953901Smckusick  * ii->ii_flags bits assign
29053901Smckusick  */
29153901Smckusick #define SD_F_ENW	0x01			/* enable write open */
29253901Smckusick #define SD_F_ECODE	0x02			/* enable extend code */
29353901Smckusick #define	SD_F_WRTVRFY	0x04			/* execute write & verify */
29453901Smckusick #define	SD_F_IGNLABEL	0x08			/* ignore disklabel/diskinfo */
29553901Smckusick #define	SD_F_EOLBA	0x10			/* error if outside LBA */
29653901Smckusick 
29753901Smckusick #define	SDIOC_RASBLK	_IOW('D', 17, int)	/* reassign block */
29853901Smckusick #define	SDIOC_GNICKNAME	_IOW('D', 18, char *)	/* get device nickname */
29953901Smckusick #define	SDIOC_GTYPINDEX	_IOR('D', 19, int)	/* get ii->ii_type */
30053901Smckusick 
30153901Smckusick #define	SDIOC_SSYNCPARAM	_IOW('D', 20, struct sync_param)
30253901Smckusick 						/* set sync tr param */
30353901Smckusick #define	SDIOC_GSYNCPARAM	_IOR('D', 21, struct sync_param)
30453901Smckusick 						/* get sync tr param */
30553901Smckusick struct sync_param {
30653901Smckusick 	int	tr_period;
30753901Smckusick 	int	tr_offset;
30853901Smckusick };
30953901Smckusick 
31053901Smckusick #define	SDIOC_FORMAT2	_IOWR('D', 22, struct sc_ureq)	/* format unit */
31153901Smckusick 
31253901Smckusick #endif /* !__SDREG__ */
313