0001
0002
0003
0004
0005
0006
0007 #ifndef _UAPI_LINUX_NVME_IOCTL_H
0008 #define _UAPI_LINUX_NVME_IOCTL_H
0009
0010 #include <linux/types.h>
0011
0012 struct nvme_user_io {
0013 __u8 opcode;
0014 __u8 flags;
0015 __u16 control;
0016 __u16 nblocks;
0017 __u16 rsvd;
0018 __u64 metadata;
0019 __u64 addr;
0020 __u64 slba;
0021 __u32 dsmgmt;
0022 __u32 reftag;
0023 __u16 apptag;
0024 __u16 appmask;
0025 };
0026
0027 struct nvme_passthru_cmd {
0028 __u8 opcode;
0029 __u8 flags;
0030 __u16 rsvd1;
0031 __u32 nsid;
0032 __u32 cdw2;
0033 __u32 cdw3;
0034 __u64 metadata;
0035 __u64 addr;
0036 __u32 metadata_len;
0037 __u32 data_len;
0038 __u32 cdw10;
0039 __u32 cdw11;
0040 __u32 cdw12;
0041 __u32 cdw13;
0042 __u32 cdw14;
0043 __u32 cdw15;
0044 __u32 timeout_ms;
0045 __u32 result;
0046 };
0047
0048 struct nvme_passthru_cmd64 {
0049 __u8 opcode;
0050 __u8 flags;
0051 __u16 rsvd1;
0052 __u32 nsid;
0053 __u32 cdw2;
0054 __u32 cdw3;
0055 __u64 metadata;
0056 __u64 addr;
0057 __u32 metadata_len;
0058 union {
0059 __u32 data_len;
0060 __u32 vec_cnt;
0061 };
0062 __u32 cdw10;
0063 __u32 cdw11;
0064 __u32 cdw12;
0065 __u32 cdw13;
0066 __u32 cdw14;
0067 __u32 cdw15;
0068 __u32 timeout_ms;
0069 __u32 rsvd2;
0070 __u64 result;
0071 };
0072
0073
0074 struct nvme_uring_cmd {
0075 __u8 opcode;
0076 __u8 flags;
0077 __u16 rsvd1;
0078 __u32 nsid;
0079 __u32 cdw2;
0080 __u32 cdw3;
0081 __u64 metadata;
0082 __u64 addr;
0083 __u32 metadata_len;
0084 __u32 data_len;
0085 __u32 cdw10;
0086 __u32 cdw11;
0087 __u32 cdw12;
0088 __u32 cdw13;
0089 __u32 cdw14;
0090 __u32 cdw15;
0091 __u32 timeout_ms;
0092 __u32 rsvd2;
0093 };
0094
0095 #define nvme_admin_cmd nvme_passthru_cmd
0096
0097 #define NVME_IOCTL_ID _IO('N', 0x40)
0098 #define NVME_IOCTL_ADMIN_CMD _IOWR('N', 0x41, struct nvme_admin_cmd)
0099 #define NVME_IOCTL_SUBMIT_IO _IOW('N', 0x42, struct nvme_user_io)
0100 #define NVME_IOCTL_IO_CMD _IOWR('N', 0x43, struct nvme_passthru_cmd)
0101 #define NVME_IOCTL_RESET _IO('N', 0x44)
0102 #define NVME_IOCTL_SUBSYS_RESET _IO('N', 0x45)
0103 #define NVME_IOCTL_RESCAN _IO('N', 0x46)
0104 #define NVME_IOCTL_ADMIN64_CMD _IOWR('N', 0x47, struct nvme_passthru_cmd64)
0105 #define NVME_IOCTL_IO64_CMD _IOWR('N', 0x48, struct nvme_passthru_cmd64)
0106 #define NVME_IOCTL_IO64_CMD_VEC _IOWR('N', 0x49, struct nvme_passthru_cmd64)
0107
0108
0109 #define NVME_URING_CMD_IO _IOWR('N', 0x80, struct nvme_uring_cmd)
0110 #define NVME_URING_CMD_IO_VEC _IOWR('N', 0x81, struct nvme_uring_cmd)
0111 #define NVME_URING_CMD_ADMIN _IOWR('N', 0x82, struct nvme_uring_cmd)
0112 #define NVME_URING_CMD_ADMIN_VEC _IOWR('N', 0x83, struct nvme_uring_cmd)
0113
0114 #endif