xref: /freebsd-src/sys/dev/nvmf/nvmf.h (revision 8bba2c0f8958443790b1f3abc0675719da987e87)
1d86edc18SJohn Baldwin /*-
2d86edc18SJohn Baldwin  * SPDX-License-Identifier: BSD-2-Clause
3d86edc18SJohn Baldwin  *
4d86edc18SJohn Baldwin  * Copyright (c) 2022-2024 Chelsio Communications, Inc.
5d86edc18SJohn Baldwin  * Written by: John Baldwin <jhb@FreeBSD.org>
6d86edc18SJohn Baldwin  */
7d86edc18SJohn Baldwin 
8d86edc18SJohn Baldwin #ifndef __NVMF_H__
9d86edc18SJohn Baldwin #define	__NVMF_H__
10d86edc18SJohn Baldwin 
11d86edc18SJohn Baldwin #include <sys/ioccom.h>
12d86edc18SJohn Baldwin #ifndef _KERNEL
13d86edc18SJohn Baldwin #include <stdbool.h>
14d86edc18SJohn Baldwin #endif
15d86edc18SJohn Baldwin 
16d86edc18SJohn Baldwin /*
17d86edc18SJohn Baldwin  * Default settings in Fabrics controllers.  These match values used by the
18d86edc18SJohn Baldwin  * Linux target.
19d86edc18SJohn Baldwin  */
20d86edc18SJohn Baldwin #define	NVMF_MAX_IO_ENTRIES	(1024)
21d86edc18SJohn Baldwin #define	NVMF_CC_EN_TIMEOUT	(15)	/* In 500ms units */
22d86edc18SJohn Baldwin 
23d86edc18SJohn Baldwin /* Allows for a 16k data buffer + SQE */
24d86edc18SJohn Baldwin #define	NVMF_IOCCSZ		(sizeof(struct nvme_command) + 16 * 1024)
25d86edc18SJohn Baldwin #define	NVMF_IORCSZ		(sizeof(struct nvme_completion))
26d86edc18SJohn Baldwin 
27d86edc18SJohn Baldwin #define	NVMF_NN			(1024)
28d86edc18SJohn Baldwin 
29365b89e8SJohn Baldwin /*
30365b89e8SJohn Baldwin  * (data, size) is the userspace buffer for a packed nvlist.
31365b89e8SJohn Baldwin  *
32365b89e8SJohn Baldwin  * For requests that copyout an nvlist, len is the amount of data
33365b89e8SJohn Baldwin  * copied out to *data.  If size is zero, no data is copied and len is
34365b89e8SJohn Baldwin  * set to the required buffer size.
35365b89e8SJohn Baldwin  */
36365b89e8SJohn Baldwin struct nvmf_ioc_nv {
37365b89e8SJohn Baldwin 	void	*data;
38365b89e8SJohn Baldwin 	size_t	len;
39365b89e8SJohn Baldwin 	size_t	size;
40d86edc18SJohn Baldwin };
41d86edc18SJohn Baldwin 
42365b89e8SJohn Baldwin /*
43365b89e8SJohn Baldwin  * The fields in a qpair handoff nvlist are:
44365b89e8SJohn Baldwin  *
45365b89e8SJohn Baldwin  * Transport independent:
46365b89e8SJohn Baldwin  *
47365b89e8SJohn Baldwin  * bool		admin
48365b89e8SJohn Baldwin  * bool		sq_flow_control
49365b89e8SJohn Baldwin  * number	qsize
50365b89e8SJohn Baldwin  * number	sqhd
51365b89e8SJohn Baldwin  * number	sqtail			host only
52365b89e8SJohn Baldwin  *
53365b89e8SJohn Baldwin  * TCP transport:
54365b89e8SJohn Baldwin  *
55365b89e8SJohn Baldwin  * number	fd
56365b89e8SJohn Baldwin  * number	rxpda
57365b89e8SJohn Baldwin  * number	txpda
58365b89e8SJohn Baldwin  * bool		header_digests
59365b89e8SJohn Baldwin  * bool		data_digests
60365b89e8SJohn Baldwin  * number	maxr2t
61365b89e8SJohn Baldwin  * number	maxh2cdata
62365b89e8SJohn Baldwin  * number	max_icd
63365b89e8SJohn Baldwin  */
64d86edc18SJohn Baldwin 
65365b89e8SJohn Baldwin /*
66365b89e8SJohn Baldwin  * The fields in the nvlist for NVMF_HANDOFF_HOST and
67365b89e8SJohn Baldwin  * NVMF_RECONNECT_HOST are:
68365b89e8SJohn Baldwin  *
69365b89e8SJohn Baldwin  * number			trtype
70365b89e8SJohn Baldwin  * number			kato	(optional)
71365b89e8SJohn Baldwin  * qpair handoff nvlist		admin
72365b89e8SJohn Baldwin  * qpair handoff nvlist array	io
73365b89e8SJohn Baldwin  * binary			cdata	struct nvme_controller_data
74*8bba2c0fSJohn Baldwin  * NVMF_RECONNECT_PARAMS nvlist	rparams
75365b89e8SJohn Baldwin  */
76d86edc18SJohn Baldwin 
77365b89e8SJohn Baldwin /*
78365b89e8SJohn Baldwin  * The fields in the nvlist for NVMF_RECONNECT_PARAMS are:
79365b89e8SJohn Baldwin  *
80*8bba2c0fSJohn Baldwin  * binary			dle	struct nvme_discovery_log_entry
81*8bba2c0fSJohn Baldwin  * string			hostnqn
82*8bba2c0fSJohn Baldwin  * number			num_io_queues
83*8bba2c0fSJohn Baldwin  * number			kato	(optional)
84*8bba2c0fSJohn Baldwin  * number			io_qsize
85*8bba2c0fSJohn Baldwin  * bool				sq_flow_control
86*8bba2c0fSJohn Baldwin  *
87*8bba2c0fSJohn Baldwin  * TCP transport:
88*8bba2c0fSJohn Baldwin  *
89*8bba2c0fSJohn Baldwin  * bool				header_digests
90*8bba2c0fSJohn Baldwin  * bool				data_digests
91365b89e8SJohn Baldwin  */
92365b89e8SJohn Baldwin 
93365b89e8SJohn Baldwin /*
94365b89e8SJohn Baldwin  * The fields in the nvlist for handing off a controller qpair are:
95365b89e8SJohn Baldwin  *
96365b89e8SJohn Baldwin  * number			trtype
97365b89e8SJohn Baldwin  * qpair handoff nvlist		params
98365b89e8SJohn Baldwin  * binary			cmd	struct nvmf_fabric_connect_cmd
99365b89e8SJohn Baldwin  * binary			data	struct nvmf_fabric_connect_data
100365b89e8SJohn Baldwin  */
101d86edc18SJohn Baldwin 
102d86edc18SJohn Baldwin /* Operations on /dev/nvmf */
103365b89e8SJohn Baldwin #define	NVMF_HANDOFF_HOST	_IOW('n', 200, struct nvmf_ioc_nv)
104d86edc18SJohn Baldwin #define	NVMF_DISCONNECT_HOST	_IOW('n', 201, const char *)
105d86edc18SJohn Baldwin #define	NVMF_DISCONNECT_ALL	_IO('n', 202)
106d86edc18SJohn Baldwin 
107d86edc18SJohn Baldwin /* Operations on /dev/nvmeX */
108365b89e8SJohn Baldwin #define	NVMF_RECONNECT_PARAMS	_IOWR('n', 203, struct nvmf_ioc_nv)
109365b89e8SJohn Baldwin #define	NVMF_RECONNECT_HOST	_IOW('n', 204, struct nvmf_ioc_nv)
110d86edc18SJohn Baldwin 
111d86edc18SJohn Baldwin #endif /* !__NVMF_H__ */
112