Home | History | Annotate | Line # | Download | only in sys
      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