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