xref: /freebsd/sys/cam/scsi/scsi_targetio.h (revision 535af610)
1 /*-
2  * Ioctl definitions for the SCSI Target Driver
3  *
4  * SPDX-License-Identifier: BSD-2-Clause
5  *
6  * Copyright (c) 2002 Nate Lawson.
7  * Copyright (c) 1998 Justin T. Gibbs.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions, and the following disclaimer,
15  *    without modification, immediately at the beginning of the file.
16  * 2. The name of the author may not be used to endorse or promote products
17  *    derived from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  * $FreeBSD$
32  */
33 
34 #ifndef _CAM_SCSI_SCSI_TARGETIO_H_
35 #define _CAM_SCSI_SCSI_TARGETIO_H_
36 #ifndef _KERNEL
37 #include <sys/types.h>
38 #endif
39 #include <sys/ioccom.h>
40 
41 #include <cam/cam.h>
42 #include <cam/cam_ccb.h>
43 
44 /*
45  * CCBs (ATIO, CTIO, INOT, REL_SIMQ) are sent to the kernel driver
46  * by writing one or more pointers.  The user receives notification
47  * of CCB completion through poll/select/kqueue and then calls
48  * read(2) which outputs pointers to the completed CCBs.
49  */
50 
51 /*
52  * Enable and disable a target mode instance.  For enabling, the path_id,
53  * target_id, and lun_id fields must be set.  The grp6/7_len fields
54  * specify the length of vendor-specific CDBs the target expects and
55  * should normally be set to 0.  On successful completion
56  * of enable, the specified target instance will answer selection.
57  * Disable causes the target instance to abort any outstanding commands
58  * and stop accepting new ones.  The aborted CCBs will be returned to
59  * the user via read(2) or discarded if the user closes the device.
60  * The user can then re-enable the device for a new path.
61  */
62 struct ioc_enable_lun {
63 	path_id_t	path_id;
64 	target_id_t	target_id;
65 	lun_id_t	lun_id;
66 	int		grp6_len;
67 	int		grp7_len;
68 };
69 #define TARGIOCENABLE	_IOW('C', 5, struct ioc_enable_lun)
70 #define TARGIOCDISABLE	 _IO('C', 6)
71 
72 /*
73  * Set/clear debugging for this target mode instance
74  */
75 #define	TARGIOCDEBUG	_IOW('C', 7, int)
76 
77 TAILQ_HEAD(ccb_queue, ccb_hdr);
78 
79 #endif /* _CAM_SCSI_SCSI_TARGETIO_H_ */
80