xref: /illumos-gate/usr/src/uts/common/sys/dktp/dadkio.h (revision 342440ec)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*342440ecSPrasad Singamsetty  * Common Development and Distribution License (the "License").
6*342440ecSPrasad Singamsetty  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
21*342440ecSPrasad Singamsetty 
227c478bd9Sstevel@tonic-gate /*
23*342440ecSPrasad Singamsetty  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
247c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate #ifndef _SYS_DKTP_DADKIO_H
287c478bd9Sstevel@tonic-gate #define	_SYS_DKTP_DADKIO_H
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
317c478bd9Sstevel@tonic-gate extern "C" {
327c478bd9Sstevel@tonic-gate #endif
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate /*	direct coupled disk driver ioctl command			*/
357c478bd9Sstevel@tonic-gate #define	DIOCTL_GETGEOM		1	/* get logical disk geometry	*/
367c478bd9Sstevel@tonic-gate #define	DIOCTL_GETPHYGEOM	2	/* get physical disk geometry	*/
377c478bd9Sstevel@tonic-gate #define	DIOCTL_GETMODEL		3	/* get model number		*/
387c478bd9Sstevel@tonic-gate #define	DIOCTL_GETSERIAL	4	/* get serial number		*/
397c478bd9Sstevel@tonic-gate #define	DIOCTL_RWCMD		5	/* read/write a disk		*/
40fa9e4066Sahrens #define	DIOCTL_GETWCE		6	/* get write cache enabled state */
41*342440ecSPrasad Singamsetty 
42*342440ecSPrasad Singamsetty #if !defined(BLKADDR_TYPE)
43*342440ecSPrasad Singamsetty #define	BLKADDR_TYPE
44*342440ecSPrasad Singamsetty #if defined(_EXTVTOC)
45*342440ecSPrasad Singamsetty typedef	unsigned long	blkaddr_t;
46*342440ecSPrasad Singamsetty typedef	unsigned int	blkaddr32_t;
47*342440ecSPrasad Singamsetty #else
48*342440ecSPrasad Singamsetty typedef	daddr_t		blkaddr_t;
49*342440ecSPrasad Singamsetty typedef	daddr32_t	blkaddr32_t;
50*342440ecSPrasad Singamsetty #endif
51*342440ecSPrasad Singamsetty #endif
52*342440ecSPrasad Singamsetty 
537c478bd9Sstevel@tonic-gate /*
547c478bd9Sstevel@tonic-gate  * arg structure for DIOCTL_GETMODEL and DIOCTL_GETSERIAL
557c478bd9Sstevel@tonic-gate  * On input to the ioctl, is_size contains the size of the buffer
567c478bd9Sstevel@tonic-gate  * pointed to by is_buf;
577c478bd9Sstevel@tonic-gate  * On return, is_size contains the number of characters needed to
587c478bd9Sstevel@tonic-gate  * represent the string.  This may be more than the input value, in
597c478bd9Sstevel@tonic-gate  * which case the caller can choose to
607c478bd9Sstevel@tonic-gate  *  1. Use the truncated string as is
617c478bd9Sstevel@tonic-gate  *  2. Allocate a buffer of is_size+1 bytes to hold the string
627c478bd9Sstevel@tonic-gate  */
637c478bd9Sstevel@tonic-gate #ifdef _SYSCALL32
647c478bd9Sstevel@tonic-gate typedef struct dadk_ioc_string32
657c478bd9Sstevel@tonic-gate {
667c478bd9Sstevel@tonic-gate 	caddr32_t	is_buf;		/* pointer to character array */
677c478bd9Sstevel@tonic-gate 	int		is_size;	/* string length */
687c478bd9Sstevel@tonic-gate } dadk_ioc_string32_t;
697c478bd9Sstevel@tonic-gate #endif /* _SYSCALL32 */
707c478bd9Sstevel@tonic-gate 
717c478bd9Sstevel@tonic-gate typedef struct dadk_ioc_string
727c478bd9Sstevel@tonic-gate {
737c478bd9Sstevel@tonic-gate 	caddr_t		is_buf;		/* pointer to character array */
747c478bd9Sstevel@tonic-gate 	int 		is_size;	/* string length */
757c478bd9Sstevel@tonic-gate } dadk_ioc_string_t;
767c478bd9Sstevel@tonic-gate 
777c478bd9Sstevel@tonic-gate /*	direct coupled disk driver command				*/
787c478bd9Sstevel@tonic-gate #define	DCMD_READ	1	/* Read Sectors/Blocks 			*/
797c478bd9Sstevel@tonic-gate #define	DCMD_WRITE	2	/* Write Sectors/Blocks 		*/
807c478bd9Sstevel@tonic-gate #define	DCMD_FMTTRK	3	/* Format Tracks 			*/
817c478bd9Sstevel@tonic-gate #define	DCMD_FMTDRV	4	/* Format entire drive 			*/
827c478bd9Sstevel@tonic-gate #define	DCMD_RECAL	5	/* Recalibrate 				*/
837c478bd9Sstevel@tonic-gate #define	DCMD_SEEK	6	/* Seek to Cylinder 			*/
847c478bd9Sstevel@tonic-gate #define	DCMD_RDVER	7	/* Read Verify sectors on disk 		*/
857c478bd9Sstevel@tonic-gate #define	DCMD_GETDEF	8	/* Read manufacturers defect list	*/
867c478bd9Sstevel@tonic-gate /* cd-rom commands */
877c478bd9Sstevel@tonic-gate #define	DCMD_LOCK	9	/* Lock door				*/
887c478bd9Sstevel@tonic-gate #define	DCMD_UNLOCK	10	/* Unlock door				*/
897c478bd9Sstevel@tonic-gate #define	DCMD_START_MOTOR 11	/* Start motor				*/
907c478bd9Sstevel@tonic-gate #define	DCMD_STOP_MOTOR 12	/* Stop motor				*/
917c478bd9Sstevel@tonic-gate #define	DCMD_EJECT	13	/* Eject medium				*/
927c478bd9Sstevel@tonic-gate #define	DCMD_UPDATE_GEOM 14	/* Update geometry			*/
937c478bd9Sstevel@tonic-gate #define	DCMD_GET_STATE	15	/* Get removable disk status		*/
947c478bd9Sstevel@tonic-gate #define	DCMD_PAUSE	16	/* cdrom pause				*/
957c478bd9Sstevel@tonic-gate #define	DCMD_RESUME	17	/* cdrom resume				*/
967c478bd9Sstevel@tonic-gate #define	DCMD_PLAYTRKIND	18	/* cdrom play by track and index	*/
977c478bd9Sstevel@tonic-gate #define	DCMD_PLAYMSF	19	/* cdrom play msf			*/
987c478bd9Sstevel@tonic-gate #define	DCMD_SUBCHNL	20	/* cdrom sub channel			*/
997c478bd9Sstevel@tonic-gate #define	DCMD_READMODE1	21	/* cdrom read mode 1			*/
1007c478bd9Sstevel@tonic-gate #define	DCMD_READTOCHDR	22	/* cdrom read table of contents header	*/
1017c478bd9Sstevel@tonic-gate #define	DCMD_READTOCENT	23	/* cdrom read table of contents entry	*/
1027c478bd9Sstevel@tonic-gate #define	DCMD_READOFFSET	24	/* cdrom read offset			*/
1037c478bd9Sstevel@tonic-gate #define	DCMD_READMODE2	25	/* cdrom mode 2				*/
1047c478bd9Sstevel@tonic-gate #define	DCMD_VOLCTRL	26	/* cdrom volume control			*/
105fa9e4066Sahrens /* additional disk commands */
106fa9e4066Sahrens #define	DCMD_FLUSH_CACHE 27	/* flush write cache to physical medium	*/
1077c478bd9Sstevel@tonic-gate 
1087c478bd9Sstevel@tonic-gate /*	driver error code						*/
1097c478bd9Sstevel@tonic-gate #define	DERR_SUCCESS	0	/* success				*/
1107c478bd9Sstevel@tonic-gate #define	DERR_AMNF	1	/* address mark not found		*/
1117c478bd9Sstevel@tonic-gate #define	DERR_TKONF	2	/* track 0 not found			*/
1127c478bd9Sstevel@tonic-gate #define	DERR_ABORT	3	/* aborted command			*/
1137c478bd9Sstevel@tonic-gate #define	DERR_DWF	4	/* write fault				*/
1147c478bd9Sstevel@tonic-gate #define	DERR_IDNF	5	/* ID not found				*/
1157c478bd9Sstevel@tonic-gate #define	DERR_BUSY	6	/* drive busy				*/
1167c478bd9Sstevel@tonic-gate #define	DERR_UNC	7	/* uncorrectable data error		*/
1177c478bd9Sstevel@tonic-gate #define	DERR_BBK	8	/* bad block detected			*/
1187c478bd9Sstevel@tonic-gate #define	DERR_INVCDB	9	/* invalid cdb				*/
1197c478bd9Sstevel@tonic-gate #define	DERR_HARD	10	/* hard device error - no retry 	*/
1207c478bd9Sstevel@tonic-gate /*
1217c478bd9Sstevel@tonic-gate  * atapi additional error codes
1227c478bd9Sstevel@tonic-gate  */
1237c478bd9Sstevel@tonic-gate #define	DERR_ILI	11	/* Illegal length indication		*/
1247c478bd9Sstevel@tonic-gate #define	DERR_EOM	12	/* End of media detected		*/
1257c478bd9Sstevel@tonic-gate #define	DERR_MCR	13	/* Media change requested		*/
1267c478bd9Sstevel@tonic-gate /*
1277c478bd9Sstevel@tonic-gate  * atapi (SCSI) sense key errors
1287c478bd9Sstevel@tonic-gate  */
1297c478bd9Sstevel@tonic-gate #define	DERR_RECOVER	14	/* Recovered from error			*/
1307c478bd9Sstevel@tonic-gate #define	DERR_NOTREADY	15	/* Device not ready			*/
1317c478bd9Sstevel@tonic-gate #define	DERR_MEDIUM	16	/* Medium error				*/
1327c478bd9Sstevel@tonic-gate #define	DERR_HW		17	/* Hardware error			*/
1337c478bd9Sstevel@tonic-gate #define	DERR_ILL	18	/* Illegal request			*/
1347c478bd9Sstevel@tonic-gate #define	DERR_UNIT_ATTN	19	/* Unit attention			*/
1357c478bd9Sstevel@tonic-gate #define	DERR_DATA_PROT	20	/* Data protection			*/
1367c478bd9Sstevel@tonic-gate #define	DERR_MISCOMP	21	/* Miscompare				*/
137161b8835Sdq #define	DERR_ICRC	22	/* Interface CRC error -- new driver	*/
138161b8835Sdq 				/* error code in ATA-4 and newer	*/
139161b8835Sdq #define	DERR_RESV	23	/* Reserved				*/
140161b8835Sdq 
1417c478bd9Sstevel@tonic-gate struct	dadkio_derr {
1427c478bd9Sstevel@tonic-gate 	int	d_action;
1437c478bd9Sstevel@tonic-gate 	int	d_severity;
1447c478bd9Sstevel@tonic-gate };
1457c478bd9Sstevel@tonic-gate 
1467c478bd9Sstevel@tonic-gate /*
1477c478bd9Sstevel@tonic-gate  *  dadkio_rwcmd cmd
1487c478bd9Sstevel@tonic-gate  */
1497c478bd9Sstevel@tonic-gate 
1507c478bd9Sstevel@tonic-gate #define	DADKIO_RWCMD_READ		1	/* read command */
1517c478bd9Sstevel@tonic-gate #define	DADKIO_RWCMD_WRITE		2	/* write command */
1527c478bd9Sstevel@tonic-gate 
1537c478bd9Sstevel@tonic-gate /*
1547c478bd9Sstevel@tonic-gate  * dadkio_rwcmd flags
1557c478bd9Sstevel@tonic-gate  */
1567c478bd9Sstevel@tonic-gate #define	DADKIO_FLAG_SILENT		0x01	/* driver should not */
1577c478bd9Sstevel@tonic-gate 						/* generate any warning */
1587c478bd9Sstevel@tonic-gate 						/* or error console msgs */
1597c478bd9Sstevel@tonic-gate #define	DADKIO_FLAG_RESERVED		0x02	/* reserved/not used */
1607c478bd9Sstevel@tonic-gate 
1617c478bd9Sstevel@tonic-gate 
1627c478bd9Sstevel@tonic-gate #define	DADKIO_ERROR_INFO_LEN	128
1637c478bd9Sstevel@tonic-gate 
1647c478bd9Sstevel@tonic-gate /*
1657c478bd9Sstevel@tonic-gate  * dadkio_status status value.
1667c478bd9Sstevel@tonic-gate  */
1677c478bd9Sstevel@tonic-gate struct dadkio_status {
1687c478bd9Sstevel@tonic-gate 	int		status;
1697c478bd9Sstevel@tonic-gate 	ulong_t		resid;
1707c478bd9Sstevel@tonic-gate 	int		failed_blk_is_valid;
171*342440ecSPrasad Singamsetty 	blkaddr_t	failed_blk;
1727c478bd9Sstevel@tonic-gate 	int		fru_code_is_valid;
1737c478bd9Sstevel@tonic-gate 	int		fru_code;
1747c478bd9Sstevel@tonic-gate 	char		add_error_info[DADKIO_ERROR_INFO_LEN];
1757c478bd9Sstevel@tonic-gate };
1767c478bd9Sstevel@tonic-gate 
1777c478bd9Sstevel@tonic-gate #ifdef _SYSCALL32
1787c478bd9Sstevel@tonic-gate struct dadkio_status32 {
1797c478bd9Sstevel@tonic-gate 	int		status;
1807c478bd9Sstevel@tonic-gate 	uint32_t	resid;
1817c478bd9Sstevel@tonic-gate 	int		failed_blk_is_valid;
182*342440ecSPrasad Singamsetty 	blkaddr32_t	failed_blk;
1837c478bd9Sstevel@tonic-gate 	int		fru_code_is_valid;
1847c478bd9Sstevel@tonic-gate 	int		fru_code;
1857c478bd9Sstevel@tonic-gate 	char		add_error_info[DADKIO_ERROR_INFO_LEN];
1867c478bd9Sstevel@tonic-gate };
1877c478bd9Sstevel@tonic-gate #endif /* _SYSCALL32 */
1887c478bd9Sstevel@tonic-gate 
1897c478bd9Sstevel@tonic-gate /*
1907c478bd9Sstevel@tonic-gate  * Used by read/write ioctl (DKIOCTL_RWCMD)
1917c478bd9Sstevel@tonic-gate  */
1927c478bd9Sstevel@tonic-gate struct dadkio_rwcmd {
1937c478bd9Sstevel@tonic-gate 	int			cmd;
1947c478bd9Sstevel@tonic-gate 	int			flags;
195*342440ecSPrasad Singamsetty 	blkaddr_t		blkaddr;
1967c478bd9Sstevel@tonic-gate 	uint_t			buflen;
1977c478bd9Sstevel@tonic-gate 	caddr_t			bufaddr;
1987c478bd9Sstevel@tonic-gate 	struct dadkio_status	status;
1997c478bd9Sstevel@tonic-gate };
2007c478bd9Sstevel@tonic-gate 
2017c478bd9Sstevel@tonic-gate #ifdef _SYSCALL32
2027c478bd9Sstevel@tonic-gate struct dadkio_rwcmd32 {
2037c478bd9Sstevel@tonic-gate 	int			cmd;
2047c478bd9Sstevel@tonic-gate 	int			flags;
205*342440ecSPrasad Singamsetty 	blkaddr32_t		blkaddr;
2067c478bd9Sstevel@tonic-gate 	uint_t			buflen;
2077c478bd9Sstevel@tonic-gate 	caddr32_t		bufaddr;
2087c478bd9Sstevel@tonic-gate 	struct dadkio_status32	status;
2097c478bd9Sstevel@tonic-gate };
2107c478bd9Sstevel@tonic-gate #endif /* _SYSCALL32 */
2117c478bd9Sstevel@tonic-gate 
2127c478bd9Sstevel@tonic-gate /*
2137c478bd9Sstevel@tonic-gate  * dadkio_status status values
2147c478bd9Sstevel@tonic-gate  */
2157c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_NO_ERROR		0	/* cmd was successful */
2167c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_NOT_READY		1	/* device not ready */
2177c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_MEDIUM_ERROR	2	/* error on medium */
2187c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_HARDWARE_ERROR	3	/* other hardware error */
2197c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_ILLEGAL_REQUEST	4	/* illegal request */
2207c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_ILLEGAL_ADDRESS	5	/* illegal block address */
2217c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_WRITE_PROTECTED	6	/* device write-protected */
2227c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_TIMED_OUT		7	/* no response from device */
2237c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_PARITY		8	/* parity error in data */
2247c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_BUS_ERROR		9	/* error on bus */
2257c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_SOFT_ERROR		10	/* data recovered via ECC */
2267c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_NO_RESOURCES	11	/* no resources for cmd */
2277c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_NOT_FORMATTED	12	/* device is not formatted */
2287c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_RESERVED		13	/* device is reserved */
2297c478bd9Sstevel@tonic-gate #define	DADKIO_STAT_NOT_SUPPORTED	14	/* feature not supported */
2307c478bd9Sstevel@tonic-gate 
2317c478bd9Sstevel@tonic-gate 
2327c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
2337c478bd9Sstevel@tonic-gate }
2347c478bd9Sstevel@tonic-gate #endif
2357c478bd9Sstevel@tonic-gate 
2367c478bd9Sstevel@tonic-gate #endif	/* _SYS_DKTP_DADKIO_H */
237