xref: /freebsd/sys/dev/nvme/nvme_linux.h (revision 1bce7cd885e7e5b376a60367629a0f76ff7f0167)
1*1bce7cd8SWarner Losh /*-
2*1bce7cd8SWarner Losh  * Copyright (c) 2024, Netflix Inc.
3*1bce7cd8SWarner Losh  * Written by Warner Losh
4*1bce7cd8SWarner Losh  *
5*1bce7cd8SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
6*1bce7cd8SWarner Losh  */
7*1bce7cd8SWarner Losh 
8*1bce7cd8SWarner Losh /*
9*1bce7cd8SWarner Losh  * Linux compatible NVME ioctls. So far we just support ID, ADMIN_CMD and
10*1bce7cd8SWarner Losh  * IO_CMD. The rest are not supported.
11*1bce7cd8SWarner Losh  */
12*1bce7cd8SWarner Losh 
13*1bce7cd8SWarner Losh 
14*1bce7cd8SWarner Losh #include <sys/ioccom.h>
15*1bce7cd8SWarner Losh #include <sys/_types.h>
16*1bce7cd8SWarner Losh 
17*1bce7cd8SWarner Losh struct nvme_passthru_cmd {
18*1bce7cd8SWarner Losh 	__uint8_t	opcode;
19*1bce7cd8SWarner Losh 	__uint8_t	flags;
20*1bce7cd8SWarner Losh 	__uint16_t	rsvd1;
21*1bce7cd8SWarner Losh 	__uint32_t	nsid;
22*1bce7cd8SWarner Losh 	__uint32_t	cdw2;
23*1bce7cd8SWarner Losh 	__uint32_t	cdw3;
24*1bce7cd8SWarner Losh 	__uint64_t	metadata;
25*1bce7cd8SWarner Losh 	__uint64_t	addr;
26*1bce7cd8SWarner Losh 	__uint32_t	metadata_len;
27*1bce7cd8SWarner Losh 	__uint32_t	data_len;
28*1bce7cd8SWarner Losh 	__uint32_t	cdw10;
29*1bce7cd8SWarner Losh 	__uint32_t	cdw11;
30*1bce7cd8SWarner Losh 	__uint32_t	cdw12;
31*1bce7cd8SWarner Losh 	__uint32_t	cdw13;
32*1bce7cd8SWarner Losh 	__uint32_t	cdw14;
33*1bce7cd8SWarner Losh 	__uint32_t	cdw15;
34*1bce7cd8SWarner Losh 	__uint32_t	timeout_ms;
35*1bce7cd8SWarner Losh 	__uint32_t	result;
36*1bce7cd8SWarner Losh };
37*1bce7cd8SWarner Losh 
38*1bce7cd8SWarner Losh #define nvme_admin_cmd nvme_passthru_cmd
39*1bce7cd8SWarner Losh 
40*1bce7cd8SWarner Losh /*
41*1bce7cd8SWarner Losh  * Linux nvme ioctls, commented out ones are not supported
42*1bce7cd8SWarner Losh  */
43*1bce7cd8SWarner Losh #define NVME_IOCTL_ID		_IO('N', 0x40)
44*1bce7cd8SWarner Losh #define NVME_IOCTL_ADMIN_CMD	_IOWR('N', 0x41, struct nvme_admin_cmd)
45*1bce7cd8SWarner Losh /* #define NVME_IOCTL_SUBMIT_IO	_IOW('N', 0x42, struct nvme_user_io) */
46*1bce7cd8SWarner Losh #define NVME_IOCTL_IO_CMD	_IOWR('N', 0x43, struct nvme_passthru_cmd)
47*1bce7cd8SWarner Losh #define NVME_IOCTL_RESET	_IO('N', 0x44)
48*1bce7cd8SWarner Losh /* #define NVME_IOCTL_SUBSYS_RESET	_IO('N', 0x45) */
49*1bce7cd8SWarner Losh /* #define NVME_IOCTL_RESCAN	_IO('N', 0x46) */
50*1bce7cd8SWarner Losh /* #define NVME_IOCTL_ADMIN64_CMD	_IOWR('N', 0x47, struct nvme_passthru_cmd64) */
51*1bce7cd8SWarner Losh /* #define NVME_IOCTL_IO64_CMD	_IOWR('N', 0x48, struct nvme_passthru_cmd64) */
52*1bce7cd8SWarner Losh /* #define NVME_IOCTL_IO64_CMD_VEC	_IOWR('N', 0x49, struct nvme_passthru_cmd64) */
53*1bce7cd8SWarner Losh 
54*1bce7cd8SWarner Losh /* io_uring async commands: */
55*1bce7cd8SWarner Losh /* #define NVME_URING_CMD_IO	_IOWR('N', 0x80, struct nvme_uring_cmd) */
56*1bce7cd8SWarner Losh /* #define NVME_URING_CMD_IO_VEC	_IOWR('N', 0x81, struct nvme_uring_cmd) */
57*1bce7cd8SWarner Losh /* #define NVME_URING_CMD_ADMIN	_IOWR('N', 0x82, struct nvme_uring_cmd) */
58*1bce7cd8SWarner Losh /* #define NVME_URING_CMD_ADMIN_VEC _IOWR('N', 0x83, struct nvme_uring_cmd) */
59