xref: /freebsd/sys/dev/nvmf/nvmf.h (revision 8aac90f18aef7c9eea906c3ff9a001ca7b94f375)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2022-2024 Chelsio Communications, Inc.
5  * Written by: John Baldwin <jhb@FreeBSD.org>
6  */
7 
8 #ifndef __NVMF_H__
9 #define	__NVMF_H__
10 
11 #include <sys/ioccom.h>
12 #ifndef _KERNEL
13 #include <stdbool.h>
14 #endif
15 
16 /*
17  * Default settings in Fabrics controllers.  These match values used by the
18  * Linux target.
19  */
20 #define	NVMF_MAX_IO_ENTRIES	(1024)
21 #define	NVMF_CC_EN_TIMEOUT	(15)	/* In 500ms units */
22 
23 /* Allows for a 16k data buffer + SQE */
24 #define	NVMF_IOCCSZ		(sizeof(struct nvme_command) + 16 * 1024)
25 #define	NVMF_IORCSZ		(sizeof(struct nvme_completion))
26 
27 #define	NVMF_NN			(1024)
28 
29 struct nvmf_handoff_qpair_params {
30 	bool	admin;
31 	bool	sq_flow_control;
32 	u_int	qsize;
33 	uint16_t sqhd;
34 	uint16_t sqtail;	/* host only */
35 	union {
36 		struct {
37 			int	fd;
38 			uint8_t	rxpda;
39 			uint8_t txpda;
40 			bool	header_digests;
41 			bool	data_digests;
42 			uint32_t maxr2t;
43 			uint32_t maxh2cdata;
44 			uint32_t max_icd;
45 		} tcp;
46 	};
47 };
48 
49 struct nvmf_handoff_host {
50 	u_int	trtype;
51 	u_int	num_io_queues;
52 	u_int	kato;
53 	struct nvmf_handoff_qpair_params admin;
54 	struct nvmf_handoff_qpair_params *io;
55 	const struct nvme_controller_data *cdata;
56 };
57 
58 struct nvmf_reconnect_params {
59 	uint16_t cntlid;
60 	char	subnqn[256];
61 };
62 
63 struct nvmf_handoff_controller_qpair {
64 	u_int	trtype;
65 	struct nvmf_handoff_qpair_params params;
66 	const struct nvmf_fabric_connect_cmd *cmd;
67 	const struct nvmf_fabric_connect_data *data;
68 };
69 
70 /* Operations on /dev/nvmf */
71 #define	NVMF_HANDOFF_HOST	_IOW('n', 200, struct nvmf_handoff_host)
72 #define	NVMF_DISCONNECT_HOST	_IOW('n', 201, const char *)
73 #define	NVMF_DISCONNECT_ALL	_IO('n', 202)
74 
75 /* Operations on /dev/nvmeX */
76 #define	NVMF_RECONNECT_PARAMS	_IOR('n', 203, struct nvmf_reconnect_params)
77 #define	NVMF_RECONNECT_HOST	_IOW('n', 204, struct nvmf_handoff_host)
78 
79 #endif /* !__NVMF_H__ */
80