]> git.proxmox.com Git - mirror_smartmontools-debian.git/blame - nvmecmds.h
import smartmontools 7.0
[mirror_smartmontools-debian.git] / nvmecmds.h
CommitLineData
a86ec89e
GI
1/*
2 * nvmecmds.h
3 *
4 * Home page of code is: http://www.smartmontools.org
5 *
ff28b140 6 * Copyright (C) 2016-18 Christian Franke
a86ec89e
GI
7 *
8 * Original code from <linux/nvme.h>:
9 * Copyright (C) 2011-2014 Intel Corporation
10 *
ff28b140 11 * SPDX-License-Identifier: GPL-2.0-or-later
a86ec89e
GI
12 */
13
14#ifndef NVMECMDS_H
15#define NVMECMDS_H
16
ff28b140 17#define NVMECMDS_H_CVSID "$Id: nvmecmds.h 4842 2018-12-02 16:07:26Z chrfranke $"
a86ec89e 18
ff28b140 19#include <stdint.h>
a86ec89e 20
ff28b140 21// The code below was originally imported from <linux/nvme.h> include file from
a86ec89e
GI
22// Linux kernel sources. Types from <linux/types.h> were replaced.
23// Symbol names are unchanged but placed in a namespace to allow inclusion
24// of the original <linux/nvme.h>.
25namespace smartmontools {
26
27////////////////////////////////////////////////////////////////////////////
28// BEGIN: From <linux/nvme.h>
a86ec89e
GI
29
30struct nvme_error_log_page {
31 uint64_t error_count;
32 unsigned short sqid;
33 unsigned short cmdid;
34 unsigned short status_field;
35 unsigned short parm_error_location;
36 uint64_t lba;
37 unsigned int nsid;
38 unsigned char vs;
39 unsigned char resv[35];
40};
41
42struct nvme_id_power_state {
43 unsigned short max_power; // centiwatts
44 unsigned char rsvd2;
45 unsigned char flags;
46 unsigned int entry_lat; // microseconds
47 unsigned int exit_lat; // microseconds
48 unsigned char read_tput;
49 unsigned char read_lat;
50 unsigned char write_tput;
51 unsigned char write_lat;
52 unsigned short idle_power;
53 unsigned char idle_scale;
54 unsigned char rsvd19;
55 unsigned short active_power;
56 unsigned char active_work_scale;
57 unsigned char rsvd23[9];
58};
59
60struct nvme_id_ctrl {
61 unsigned short vid;
62 unsigned short ssvid;
63 char sn[20];
64 char mn[40];
65 char fr[8];
66 unsigned char rab;
67 unsigned char ieee[3];
68 unsigned char cmic;
69 unsigned char mdts;
70 unsigned short cntlid;
71 unsigned int ver;
72 unsigned int rtd3r;
73 unsigned int rtd3e;
74 unsigned int oaes;
f9e10201
JD
75 unsigned int ctratt;
76 unsigned char rsvd100[156];
a86ec89e
GI
77 unsigned short oacs;
78 unsigned char acl;
79 unsigned char aerl;
80 unsigned char frmw;
81 unsigned char lpa;
82 unsigned char elpe;
83 unsigned char npss;
84 unsigned char avscc;
85 unsigned char apsta;
86 unsigned short wctemp;
87 unsigned short cctemp;
88 unsigned short mtfa;
89 unsigned int hmpre;
90 unsigned int hmmin;
91 unsigned char tnvmcap[16];
92 unsigned char unvmcap[16];
93 unsigned int rpmbs;
f9e10201
JD
94 unsigned short edstt;
95 unsigned char dsto;
96 unsigned char fwug;
97 unsigned short kas;
98 unsigned short hctma;
99 unsigned short mntmt;
100 unsigned short mxtmt;
101 unsigned int sanicap;
102 unsigned char rsvd332[180];
a86ec89e
GI
103 unsigned char sqes;
104 unsigned char cqes;
f9e10201 105 unsigned short maxcmd;
a86ec89e
GI
106 unsigned int nn;
107 unsigned short oncs;
108 unsigned short fuses;
109 unsigned char fna;
110 unsigned char vwc;
111 unsigned short awun;
112 unsigned short awupf;
113 unsigned char nvscc;
114 unsigned char rsvd531;
115 unsigned short acwu;
116 unsigned char rsvd534[2];
117 unsigned int sgls;
f9e10201
JD
118 unsigned char rsvd540[228];
119 char subnqn[256];
120 unsigned char rsvd1024[768];
121 unsigned int ioccsz;
122 unsigned int iorcsz;
123 unsigned short icdoff;
124 unsigned char ctrattr;
125 unsigned char msdbd;
126 unsigned char rsvd1804[244];
a86ec89e
GI
127 struct nvme_id_power_state psd[32];
128 unsigned char vs[1024];
129};
130
131struct nvme_lbaf {
132 unsigned short ms;
133 unsigned char ds;
134 unsigned char rp;
135};
136
137struct nvme_id_ns {
138 uint64_t nsze;
139 uint64_t ncap;
140 uint64_t nuse;
141 unsigned char nsfeat;
142 unsigned char nlbaf;
143 unsigned char flbas;
144 unsigned char mc;
145 unsigned char dpc;
146 unsigned char dps;
147 unsigned char nmic;
148 unsigned char rescap;
149 unsigned char fpi;
150 unsigned char rsvd33;
151 unsigned short nawun;
152 unsigned short nawupf;
153 unsigned short nacwu;
154 unsigned short nabsn;
155 unsigned short nabo;
156 unsigned short nabspf;
157 unsigned char rsvd46[2];
158 unsigned char nvmcap[16];
159 unsigned char rsvd64[40];
160 unsigned char nguid[16];
161 unsigned char eui64[8];
162 struct nvme_lbaf lbaf[16];
163 unsigned char rsvd192[192];
164 unsigned char vs[3712];
165};
166
167struct nvme_smart_log {
168 unsigned char critical_warning;
169 unsigned char temperature[2];
170 unsigned char avail_spare;
171 unsigned char spare_thresh;
172 unsigned char percent_used;
173 unsigned char rsvd6[26];
174 unsigned char data_units_read[16];
175 unsigned char data_units_written[16];
176 unsigned char host_reads[16];
177 unsigned char host_writes[16];
178 unsigned char ctrl_busy_time[16];
179 unsigned char power_cycles[16];
180 unsigned char power_on_hours[16];
181 unsigned char unsafe_shutdowns[16];
182 unsigned char media_errors[16];
183 unsigned char num_err_log_entries[16];
184 unsigned int warning_temp_time;
185 unsigned int critical_comp_time;
186 unsigned short temp_sensor[8];
f9e10201
JD
187 unsigned int thm_temp1_trans_count;
188 unsigned int thm_temp2_trans_count;
189 unsigned int thm_temp1_total_time;
190 unsigned int thm_temp2_total_time;
191 unsigned char rsvd232[280];
a86ec89e
GI
192};
193
194enum nvme_admin_opcode {
195//nvme_admin_delete_sq = 0x00,
196//nvme_admin_create_sq = 0x01,
197 nvme_admin_get_log_page = 0x02,
198//nvme_admin_delete_cq = 0x04,
199//nvme_admin_create_cq = 0x05,
200 nvme_admin_identify = 0x06,
201//nvme_admin_abort_cmd = 0x08,
202//nvme_admin_set_features = 0x09,
203//nvme_admin_get_features = 0x0a,
204//nvme_admin_async_event = 0x0c,
205//nvme_admin_ns_mgmt = 0x0d,
206//nvme_admin_activate_fw = 0x10,
207//nvme_admin_download_fw = 0x11,
208//nvme_admin_ns_attach = 0x15,
209//nvme_admin_format_nvm = 0x80,
210//nvme_admin_security_send = 0x81,
211//nvme_admin_security_recv = 0x82,
212};
213
214// END: From <linux/nvme.h>
215////////////////////////////////////////////////////////////////////////////
216
217} // namespace smartmontools
218
219class nvme_device;
220
221// Print NVMe debug messages?
222extern unsigned char nvme_debugmode;
223
224// Read NVMe Identify Controller data structure.
225bool nvme_read_id_ctrl(nvme_device * device, smartmontools::nvme_id_ctrl & id_ctrl);
226
227// Read NVMe Identify Namespace data structure for namespace NSID.
228bool nvme_read_id_ns(nvme_device * device, unsigned nsid, smartmontools::nvme_id_ns & id_ns);
229
230// Read NVMe log page with identifier LID.
ff28b140
TL
231bool nvme_read_log_page(nvme_device * device, unsigned char lid, void * data,
232 unsigned size, bool broadcast_nsid);
a86ec89e
GI
233
234// Read NVMe Error Information Log.
235bool nvme_read_error_log(nvme_device * device, smartmontools::nvme_error_log_page * error_log,
236 unsigned num_entries);
237
238// Read NVMe SMART/Health Information log.
239bool nvme_read_smart_log(nvme_device * device, smartmontools::nvme_smart_log & smart_log);
240
241#endif // NVMECMDS_H