xref: /netbsd/sys/sys/scsiio.h (revision b4b99fec)
1 /*     $NetBSD: scsiio.h,v 1.13 2020/05/18 09:52:30 rkujawa Exp $        */
2 
3 #ifndef _SYS_SCSIIO_H_
4 #define _SYS_SCSIIO_H_
5 
6 
7 #include <sys/types.h>
8 #include <sys/ioctl.h>
9 
10 #define	SENSEBUFLEN 48
11 
12 typedef struct	scsireq {
13 	u_long	flags;		/* info about the request status and type */
14 	u_long	timeout;
15 	u_char	cmd[16];
16 	u_char	cmdlen;
17 	void *	databuf;	/* address in user space of buffer */
18 	u_long	datalen;	/* size of user buffer (request) */
19 	u_long	datalen_used;	/* size of user buffer (used)*/
20 	u_char	sense[SENSEBUFLEN]; /* returned sense will be in here */
21 	u_char	senselen;	/* sensedata request size (MAX of SENSEBUFLEN)*/
22 	u_char	senselen_used;	/* return value only */
23 	u_char	status;		/* what the scsi status was from the adapter */
24 	u_char	retsts;		/* the return status for the command */
25 	int	error;		/* error bits */
26 } scsireq_t;
27 
28 /* bit definitions for flags */
29 #define SCCMD_READ		0x00000001
30 #define SCCMD_WRITE		0x00000002
31 #define SCCMD_IOV		0x00000004
32 #define SCCMD_ESCAPE		0x00000010
33 #define SCCMD_TARGET		0x00000020
34 
35 
36 /* definitions for the return status (retsts) */
37 #define SCCMD_OK	0x00
38 #define SCCMD_TIMEOUT	0x01
39 #define SCCMD_BUSY	0x02
40 #define SCCMD_SENSE	0x03
41 #define SCCMD_UNKNOWN	0x04
42 
43 #define SCIOCCOMMAND	_IOWR('Q', 1, scsireq_t)
44 
45 #define SC_DB_CMDS	0x00000001	/* show all scsi cmds and errors */
46 #define SC_DB_FLOW	0x00000002	/* show routines entered	*/
47 #define SC_DB_FLOW2	0x00000004	/* show path INSIDE routines	*/
48 #define SC_DB_DMA	0x00000008	/* show DMA segments etc	*/
49 #define SCIOCDEBUG	_IOW('Q', 2, int)	/* from 0 to 15 */
50 
51 struct	oscsi_addr {
52 	int	scbus;		/* -1 if wildcard */
53 	int	target;		/* -1 if wildcard */
54 	int	lun;		/* -1 if wildcard */
55 };
56 
57 struct	scsi_addr {
58 	int type;       /* bus type */
59 #define TYPE_SCSI 0
60 #define TYPE_ATAPI 1
61 	union {
62 		struct oscsi_addr scsi;
63 		struct _atapi {
64 			int atbus;  /* -1 if wildcard */
65 			int drive;  /* -1 if wildcard */
66 		} atapi;
67 	} addr;
68 };
69 
70 /*
71  * SCSI device ioctls
72  */
73 
74 #define SCIOCIDENTIFY	_IOR('Q', 4, struct scsi_addr) /* where are you? */
75 #define  OSCIOCIDENTIFY	_IOR('Q', 4, struct oscsi_addr)
76 #define SCIOCDECONFIG	_IO('Q', 5)	/* please disappear */
77 #define SCIOCRECONFIG	_IO('Q', 6)	/* please check again */
78 #define SCIOCRESET	_IO('Q', 7)	/* reset the device */
79 
80 /*
81  * SCSI bus ioctls
82  */
83 
84 /* Scan bus for new devices. */
85 struct scbusioscan_args {
86 	int	sa_target;	/* target to scan; -1 for wildcard */
87 	int	sa_lun;		/* lun to scan; -1 for wildcard */
88 };
89 #define	SCBUSIOSCAN	_IOW('U', 0, struct scbusioscan_args)
90 
91 #define	SCBUSIORESET	_IO('U', 1)	/* reset SCSI bus */
92 
93 struct scbusiodetach_args {
94 	int	sa_target;	/* target to scan; -1 for wildcard */
95 	int	sa_lun;		/* lun to scan; -1 for wildcard */
96 };
97 #define	SCBUSIODETACH	_IOW('U', 2, struct scbusiodetach_args)
98 
99 /* enable/disable device properties */
100 struct scbusaccel_args {
101 	int	sa_target;	/* target to set property on */
102 	int	sa_lun;		/* lun to set property on */
103 	int	sa_flags;	/* flags to set or clear */
104 };
105 #define	SC_ACCEL_SYNC	0x01	/* enable sync mode */
106 #define	SC_ACCEL_WIDE	0x02	/* enable wide transfers */
107 #define	SC_ACCEL_TAGS	0x04	/* enable tagged queuing */
108 #define	SCBUSACCEL	_IOW('U', 2, struct scbusaccel_args)
109 
110 #define	SCBUSIOLLSCAN	_IO('U', 3)	/* perform low-level scan */
111 
112 #endif /* _SYS_SCSIIO_H_ */
113