xref: /OK3568_Linux_fs/kernel/include/uapi/linux/bsg.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun #ifndef _UAPIBSG_H
3*4882a593Smuzhiyun #define _UAPIBSG_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <linux/types.h>
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #define BSG_PROTOCOL_SCSI		0
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #define BSG_SUB_PROTOCOL_SCSI_CMD	0
10*4882a593Smuzhiyun #define BSG_SUB_PROTOCOL_SCSI_TMF	1
11*4882a593Smuzhiyun #define BSG_SUB_PROTOCOL_SCSI_TRANSPORT	2
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /*
14*4882a593Smuzhiyun  * For flag constants below:
15*4882a593Smuzhiyun  * sg.h sg_io_hdr also has bits defined for it's flags member. These
16*4882a593Smuzhiyun  * two flag values (0x10 and 0x20) have the same meaning in sg.h . For
17*4882a593Smuzhiyun  * bsg the BSG_FLAG_Q_AT_HEAD flag is ignored since it is the deafult.
18*4882a593Smuzhiyun  */
19*4882a593Smuzhiyun #define BSG_FLAG_Q_AT_TAIL 0x10 /* default is Q_AT_HEAD */
20*4882a593Smuzhiyun #define BSG_FLAG_Q_AT_HEAD 0x20
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun struct sg_io_v4 {
23*4882a593Smuzhiyun 	__s32 guard;		/* [i] 'Q' to differentiate from v3 */
24*4882a593Smuzhiyun 	__u32 protocol;		/* [i] 0 -> SCSI , .... */
25*4882a593Smuzhiyun 	__u32 subprotocol;	/* [i] 0 -> SCSI command, 1 -> SCSI task
26*4882a593Smuzhiyun 				   management function, .... */
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 	__u32 request_len;	/* [i] in bytes */
29*4882a593Smuzhiyun 	__u64 request;		/* [i], [*i] {SCSI: cdb} */
30*4882a593Smuzhiyun 	__u64 request_tag;	/* [i] {SCSI: task tag (only if flagged)} */
31*4882a593Smuzhiyun 	__u32 request_attr;	/* [i] {SCSI: task attribute} */
32*4882a593Smuzhiyun 	__u32 request_priority;	/* [i] {SCSI: task priority} */
33*4882a593Smuzhiyun 	__u32 request_extra;	/* [i] {spare, for padding} */
34*4882a593Smuzhiyun 	__u32 max_response_len;	/* [i] in bytes */
35*4882a593Smuzhiyun 	__u64 response;		/* [i], [*o] {SCSI: (auto)sense data} */
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun         /* "dout_": data out (to device); "din_": data in (from device) */
38*4882a593Smuzhiyun 	__u32 dout_iovec_count;	/* [i] 0 -> "flat" dout transfer else
39*4882a593Smuzhiyun 				   dout_xfer points to array of iovec */
40*4882a593Smuzhiyun 	__u32 dout_xfer_len;	/* [i] bytes to be transferred to device */
41*4882a593Smuzhiyun 	__u32 din_iovec_count;	/* [i] 0 -> "flat" din transfer */
42*4882a593Smuzhiyun 	__u32 din_xfer_len;	/* [i] bytes to be transferred from device */
43*4882a593Smuzhiyun 	__u64 dout_xferp;	/* [i], [*i] */
44*4882a593Smuzhiyun 	__u64 din_xferp;	/* [i], [*o] */
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	__u32 timeout;		/* [i] units: millisecond */
47*4882a593Smuzhiyun 	__u32 flags;		/* [i] bit mask */
48*4882a593Smuzhiyun 	__u64 usr_ptr;		/* [i->o] unused internally */
49*4882a593Smuzhiyun 	__u32 spare_in;		/* [i] */
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 	__u32 driver_status;	/* [o] 0 -> ok */
52*4882a593Smuzhiyun 	__u32 transport_status;	/* [o] 0 -> ok */
53*4882a593Smuzhiyun 	__u32 device_status;	/* [o] {SCSI: command completion status} */
54*4882a593Smuzhiyun 	__u32 retry_delay;	/* [o] {SCSI: status auxiliary information} */
55*4882a593Smuzhiyun 	__u32 info;		/* [o] additional information */
56*4882a593Smuzhiyun 	__u32 duration;		/* [o] time to complete, in milliseconds */
57*4882a593Smuzhiyun 	__u32 response_len;	/* [o] bytes of response actually written */
58*4882a593Smuzhiyun 	__s32 din_resid;	/* [o] din_xfer_len - actual_din_xfer_len */
59*4882a593Smuzhiyun 	__s32 dout_resid;	/* [o] dout_xfer_len - actual_dout_xfer_len */
60*4882a593Smuzhiyun 	__u64 generated_tag;	/* [o] {SCSI: transport generated task tag} */
61*4882a593Smuzhiyun 	__u32 spare_out;	/* [o] */
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun 	__u32 padding;
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun #endif /* _UAPIBSG_H */
68