master
  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 _LINUX_NVME_IOCTL_H
  8#define _LINUX_NVME_IOCTL_H
  9
 10#include <linux/types.h>
 11
 12struct 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
 27struct 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
 48struct 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 */
 74struct 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 /* _LINUX_NVME_IOCTL_H */