Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  * Definitions for the NVM Express ioctl interface
0004  * Copyright (c) 2011-2014, Intel Corporation.
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; /* for non-vectored io */
0060         __u32   vec_cnt; /* for vectored io */
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 /* same as struct nvme_passthru_cmd64, minus the 8b result field */
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 /* io_uring async commands: */
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 /* _UAPI_LINUX_NVME_IOCTL_H */