libmultipath: nvme: update to nvme-cli v1.9
[multipath-tools/.git] / libmultipath / nvme / nvme-ioctl.h
1 #ifndef _NVME_LIB_H
2 #define _NVME_LIB_H
3
4 #include <linux/types.h>
5 #include <stdbool.h>
6 #include "linux/nvme_ioctl.h"
7 #include "nvme.h"
8
9 #define NVME_IOCTL_TIMEOUT 120000 /* in milliseconds */
10
11 int nvme_get_nsid(int fd);
12
13 /* Generic passthrough */
14 int nvme_submit_passthru(int fd, unsigned long ioctl_cmd,
15                          struct nvme_passthru_cmd *cmd);
16
17 int nvme_passthru(int fd, unsigned long ioctl_cmd, __u8 opcode, __u8 flags,
18                   __u16 rsvd, __u32 nsid, __u32 cdw2, __u32 cdw3,
19                   __u32 cdw10, __u32 cdw11, __u32 cdw12,
20                   __u32 cdw13, __u32 cdw14, __u32 cdw15,
21                   __u32 data_len, void *data, __u32 metadata_len,
22                   void *metadata, __u32 timeout_ms, __u32 *result);
23
24 /* NVME_SUBMIT_IO */
25 int nvme_io(int fd, __u8 opcode, __u64 slba, __u16 nblocks, __u16 control,
26               __u32 dsmgmt, __u32 reftag, __u16 apptag,
27               __u16 appmask, void *data, void *metadata);
28
29 int nvme_read(int fd, __u64 slba, __u16 nblocks, __u16 control,
30               __u32 dsmgmt, __u32 reftag, __u16 apptag,
31               __u16 appmask, void *data, void *metadata);
32
33 int nvme_write(int fd, __u64 slba, __u16 nblocks, __u16 control,
34                __u32 dsmgmt, __u32 reftag, __u16 apptag,
35                __u16 appmask, void *data, void *metadata);
36
37 int nvme_compare(int fd, __u64 slba, __u16 nblocks, __u16 control,
38                  __u32 dsmgmt, __u32 reftag, __u16 apptag,
39                  __u16 appmask, void *data, void *metadata);
40
41 int nvme_verify(int fd, __u32 nsid, __u64 slba, __u16 nblocks,
42                 __u16 control, __u32 reftag, __u16 apptag, __u16 appmask);
43
44 /* NVME_IO_CMD */
45 int nvme_passthru_io(int fd, __u8 opcode, __u8 flags, __u16 rsvd,
46                      __u32 nsid, __u32 cdw2, __u32 cdw3,
47                      __u32 cdw10, __u32 cdw11, __u32 cdw12,
48                      __u32 cdw13, __u32 cdw14, __u32 cdw15,
49                      __u32 data_len, void *data, __u32 metadata_len,
50                      void *metadata, __u32 timeout);
51
52 int nvme_write_zeros(int fd, __u32 nsid, __u64 slba, __u16 nlb,
53                      __u16 control, __u32 reftag, __u16 apptag, __u16 appmask);
54
55 int nvme_write_uncorrectable(int fd, __u32 nsid, __u64 slba, __u16 nlb);
56
57 int nvme_flush(int fd, __u32 nsid);
58
59 int nvme_dsm(int fd, __u32 nsid, __u32 cdw11, struct nvme_dsm_range *dsm,
60              __u16 nr_ranges);
61 struct nvme_dsm_range *nvme_setup_dsm_range(__u32 *ctx_attrs,
62                                             __u32 *llbas, __u64 *slbas,
63                                             __u16 nr_ranges);
64
65 int nvme_resv_acquire(int fd, __u32 nsid, __u8 rtype, __u8 racqa,
66                       bool iekey, __u64 crkey, __u64 nrkey);
67 int nvme_resv_register(int fd, __u32 nsid, __u8 rrega, __u8 cptpl,
68                        bool iekey, __u64 crkey, __u64 nrkey);
69 int nvme_resv_release(int fd, __u32 nsid, __u8 rtype, __u8 rrela,
70                       bool iekey, __u64 crkey);
71 int nvme_resv_report(int fd, __u32 nsid, __u32 numd, __u32 cdw11, void *data);
72
73 int nvme_identify13(int fd, __u32 nsid, __u32 cdw10, __u32 cdw11, void *data);
74 int nvme_identify(int fd, __u32 nsid, __u32 cdw10, void *data);
75 int nvme_identify_ctrl(int fd, void *data);
76 int nvme_identify_ns(int fd, __u32 nsid, bool present, void *data);
77 int nvme_identify_ns_list(int fd, __u32 nsid, bool all, void *data);
78 int nvme_identify_ctrl_list(int fd, __u32 nsid, __u16 cntid, void *data);
79 int nvme_identify_ns_descs(int fd, __u32 nsid, void *data);
80 int nvme_identify_nvmset(int fd, __u16 nvmset_id, void *data);
81 int nvme_identify_uuid(int fd, void *data);
82 int nvme_identify_secondary_ctrl_list(int fd, __u32 nsid, __u16 cntid, void *data);
83 int nvme_identify_ns_granularity(int fd, void *data);
84 int nvme_get_log(int fd, __u32 nsid, __u8 log_id, bool rae,
85                  __u32 data_len, void *data);
86 int nvme_get_log14(int fd, __u32 nsid, __u8 log_id, __u8 lsp, __u64 lpo,
87                    __u16 group_id, bool rae, __u8 uuid_ix,
88                    __u32 data_len, void *data);
89
90 static inline int nvme_get_log13(int fd, __u32 nsid, __u8 log_id, __u8 lsp,
91                                  __u64 lpo, __u16 lsi, bool rae, __u32 data_len,
92                                  void *data)
93 {
94         return nvme_get_log14(fd, nsid, log_id, lsp, lpo, lsi, rae, 0,
95                               data_len, data);
96 }
97
98 int nvme_get_telemetry_log(int fd, void *lp, int generate_report,
99                            int ctrl_gen, size_t log_page_size, __u64 offset);
100 int nvme_fw_log(int fd, struct nvme_firmware_log_page *fw_log);
101 int nvme_changed_ns_list_log(int fd,
102                 struct nvme_changed_ns_list_log *changed_ns_list_log);
103 int nvme_error_log(int fd, int entries, struct nvme_error_log_page *err_log);
104 int nvme_smart_log(int fd, __u32 nsid, struct nvme_smart_log *smart_log);
105 int nvme_ana_log(int fd, void *ana_log, size_t ana_log_len, int rgo);
106 int nvme_effects_log(int fd, struct nvme_effects_log_page *effects_log);
107 int nvme_discovery_log(int fd, struct nvmf_disc_rsp_page_hdr *log, __u32 size);
108 int nvme_sanitize_log(int fd, struct nvme_sanitize_log_page *sanitize_log);
109 int nvme_endurance_log(int fd, __u16 group_id,
110                        struct nvme_endurance_group_log *endurance_log);
111
112 int nvme_feature(int fd, __u8 opcode, __u32 nsid, __u32 cdw10,
113                  __u32 cdw11, __u32 cdw12, __u32 data_len, void *data,
114                  __u32 *result);
115 int nvme_set_feature(int fd, __u32 nsid, __u8 fid, __u32 value, __u32 cdw12,
116                      bool save, __u32 data_len, void *data, __u32 *result);
117 int nvme_get_feature(int fd, __u32 nsid, __u8 fid, __u8 sel,
118                      __u32 cdw11, __u32 data_len, void *data, __u32 *result);
119
120 int nvme_format(int fd, __u32 nsid, __u8 lbaf, __u8 ses, __u8 pi,
121                 __u8 pil, __u8 ms, __u32 timeout);
122
123 int nvme_ns_create(int fd, __u64 nsze, __u64 ncap, __u8 flbas,
124                    __u8 dps, __u8 nmic, __u32 timeout, __u32 *result);
125 int nvme_ns_delete(int fd, __u32 nsid, __u32 timeout);
126
127 int nvme_ns_attachment(int fd, __u32 nsid, __u16 num_ctrls,
128                        __u16 *ctrlist, bool attach);
129 int nvme_ns_attach_ctrls(int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist);
130 int nvme_ns_detach_ctrls(int fd, __u32 nsid, __u16 num_ctrls, __u16 *ctrlist);
131
132 int nvme_fw_download(int fd, __u32 offset, __u32 data_len, void *data);
133 int nvme_fw_commit(int fd, __u8 slot, __u8 action, __u8 bpid);
134
135 int nvme_sec_send(int fd, __u32 nsid, __u8 nssf, __u16 spsp,
136                   __u8 secp, __u32 tl, __u32 data_len, void *data, __u32 *result);
137 int nvme_sec_recv(int fd, __u32 nsid, __u8 nssf, __u16 spsp,
138                   __u8 secp, __u32 al, __u32 data_len, void *data, __u32 *result);
139
140 int nvme_subsystem_reset(int fd);
141 int nvme_reset_controller(int fd);
142 int nvme_ns_rescan(int fd);
143
144 int nvme_get_lba_status(int fd, __u64 slba, __u32 mndw, __u8 atype, __u16 rl,
145                 void *data);
146 int nvme_dir_send(int fd, __u32 nsid, __u16 dspec, __u8 dtype, __u8 doper,
147                   __u32 data_len, __u32 dw12, void *data, __u32 *result);
148 int nvme_dir_recv(int fd, __u32 nsid, __u16 dspec, __u8 dtype, __u8 doper,
149                   __u32 data_len, __u32 dw12, void *data, __u32 *result);
150 int nvme_get_properties(int fd, void **pbar);
151 int nvme_set_property(int fd, int offset, uint64_t value);
152 int nvme_get_property(int fd, int offset, uint64_t *value);
153 int nvme_sanitize(int fd, __u8 sanact, __u8 ause, __u8 owpass, __u8 oipbp,
154                   __u8 no_dealloc, __u32 ovrpat);
155 int nvme_self_test_start(int fd, __u32 nsid, __u32 cdw10);
156 int nvme_self_test_log(int fd, struct nvme_self_test_log *self_test_log);
157 int nvme_virtual_mgmt(int fd, __u32 cdw10, __u32 cdw11, __u32 *result);
158 #endif                          /* _NVME_LIB_H */