1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
2 | /* |
3 | * Definitions for the NVM Express ioctl interface |
4 | * Copyright (c) 2011-2014, Intel Corporation. |
5 | */ |
6 | |
7 | #ifndef _UAPI_LINUX_NVME_IOCTL_H |
8 | #define _UAPI_LINUX_NVME_IOCTL_H |
9 | |
10 | #include <linux/types.h> |
11 | |
12 | struct nvme_user_io { |
13 | __u8 opcode; |
14 | __u8 flags; |
15 | __u16 control; |
16 | __u16 nblocks; |
17 | __u16 rsvd; |
18 | __u64 metadata; |
19 | __u64 addr; |
20 | __u64 slba; |
21 | __u32 dsmgmt; |
22 | __u32 reftag; |
23 | __u16 apptag; |
24 | __u16 appmask; |
25 | }; |
26 | |
27 | struct nvme_passthru_cmd { |
28 | __u8 opcode; |
29 | __u8 flags; |
30 | __u16 rsvd1; |
31 | __u32 nsid; |
32 | __u32 cdw2; |
33 | __u32 cdw3; |
34 | __u64 metadata; |
35 | __u64 addr; |
36 | __u32 metadata_len; |
37 | __u32 data_len; |
38 | __u32 cdw10; |
39 | __u32 cdw11; |
40 | __u32 cdw12; |
41 | __u32 cdw13; |
42 | __u32 cdw14; |
43 | __u32 cdw15; |
44 | __u32 timeout_ms; |
45 | __u32 result; |
46 | }; |
47 | |
48 | struct nvme_passthru_cmd64 { |
49 | __u8 opcode; |
50 | __u8 flags; |
51 | __u16 rsvd1; |
52 | __u32 nsid; |
53 | __u32 cdw2; |
54 | __u32 cdw3; |
55 | __u64 metadata; |
56 | __u64 addr; |
57 | __u32 metadata_len; |
58 | union { |
59 | __u32 data_len; /* for non-vectored io */ |
60 | __u32 vec_cnt; /* for vectored io */ |
61 | }; |
62 | __u32 cdw10; |
63 | __u32 cdw11; |
64 | __u32 cdw12; |
65 | __u32 cdw13; |
66 | __u32 cdw14; |
67 | __u32 cdw15; |
68 | __u32 timeout_ms; |
69 | __u32 rsvd2; |
70 | __u64 result; |
71 | }; |
72 | |
73 | /* same as struct nvme_passthru_cmd64, minus the 8b result field */ |
74 | struct nvme_uring_cmd { |
75 | __u8 opcode; |
76 | __u8 flags; |
77 | __u16 rsvd1; |
78 | __u32 nsid; |
79 | __u32 cdw2; |
80 | __u32 cdw3; |
81 | __u64 metadata; |
82 | __u64 addr; |
83 | __u32 metadata_len; |
84 | __u32 data_len; |
85 | __u32 cdw10; |
86 | __u32 cdw11; |
87 | __u32 cdw12; |
88 | __u32 cdw13; |
89 | __u32 cdw14; |
90 | __u32 cdw15; |
91 | __u32 timeout_ms; |
92 | __u32 rsvd2; |
93 | }; |
94 | |
95 | #define nvme_admin_cmd nvme_passthru_cmd |
96 | |
97 | #define NVME_IOCTL_ID _IO('N', 0x40) |
98 | #define NVME_IOCTL_ADMIN_CMD _IOWR('N', 0x41, struct nvme_admin_cmd) |
99 | #define NVME_IOCTL_SUBMIT_IO _IOW('N', 0x42, struct nvme_user_io) |
100 | #define NVME_IOCTL_IO_CMD _IOWR('N', 0x43, struct nvme_passthru_cmd) |
101 | #define NVME_IOCTL_RESET _IO('N', 0x44) |
102 | #define NVME_IOCTL_SUBSYS_RESET _IO('N', 0x45) |
103 | #define NVME_IOCTL_RESCAN _IO('N', 0x46) |
104 | #define NVME_IOCTL_ADMIN64_CMD _IOWR('N', 0x47, struct nvme_passthru_cmd64) |
105 | #define NVME_IOCTL_IO64_CMD _IOWR('N', 0x48, struct nvme_passthru_cmd64) |
106 | #define NVME_IOCTL_IO64_CMD_VEC _IOWR('N', 0x49, struct nvme_passthru_cmd64) |
107 | |
108 | /* io_uring async commands: */ |
109 | #define NVME_URING_CMD_IO _IOWR('N', 0x80, struct nvme_uring_cmd) |
110 | #define NVME_URING_CMD_IO_VEC _IOWR('N', 0x81, struct nvme_uring_cmd) |
111 | #define NVME_URING_CMD_ADMIN _IOWR('N', 0x82, struct nvme_uring_cmd) |
112 | #define NVME_URING_CMD_ADMIN_VEC _IOWR('N', 0x83, struct nvme_uring_cmd) |
113 | |
114 | #endif /* _UAPI_LINUX_NVME_IOCTL_H */ |
115 | |