'\" t
.\" Title: nvme-get-feature
-.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
-.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/20/2020
+.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 05/16/2021
.\" Manual: NVMe Manual
.\" Source: NVMe
.\" Language: English
.\"
-.TH "NVME\-GET\-FEATURE" "1" "10/20/2020" "NVMe" "NVMe Manual"
+.TH "NVME\-GET\-FEATURE" "1" "05/16/2021" "NVMe" "NVMe Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.nf
\fInvme get\-feature\fR <device> [\-\-namespace\-id=<nsid> | \-n <nsid>]
[\-\-feature\-id=<fid> | \-f <fid>] [\-\-cdw11=<cdw11>]
+ [\-\-uuid\-index=<uuid\-index> | \-U <uuid_index>]
[\-\-data\-len=<data\-len> | \-l <data\-len>]
[\-\-sel=<select> | \-s <select>]
[\-\-raw\-binary | \-b]
.sp 1
.RE
.PP
+\-U <uuid\-index>, \-\-uuid\-index=<uuid\-index>
+.RS 4
+UUID Index of the feature
+.RE
+.PP
\-l <data\-len>, \-\-data\-len=<data\-len>
.RS 4
The data length for the buffer returned for this feature\&. Most known features do not use this value\&. The exception is LBA Range Type
.if n \{\
.RE
.\}
+.sp
+Get feature with UUID index
.RE
.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+# nvme get\-feature /dev/nvme0 \-f 0xc0 \-l 512 \-U 0x1
+.fi
+.if n \{\
+.RE
+.\}
+.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
+<?xml version="1.0" encoding="UTF-8"?>\r
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
<head>\r
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 8.6.8" />\r
+<meta name="generator" content="AsciiDoc 8.6.10" />\r
<title>nvme-get-feature(1)</title>\r
<style type="text/css">\r
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
padding: 0;\r
margin: 0;\r
}\r
-\r
+pre {\r
+ white-space: pre-wrap;\r
+}\r
\r
#author {\r
color: #527bbd;\r
}\r
\r
div.imageblock div.content { padding-left: 0; }\r
-span.image img { border-style: none; }\r
+span.image img { border-style: none; vertical-align: text-bottom; }\r
a.image:visited { color: white; }\r
\r
dl {\r
p.table {\r
margin-top: 0;\r
}\r
-/* Because the table frame attribute is overridden by CSS in most browsers. */\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
div.tableblock > table[frame="void"] {\r
border-style: none;\r
}\r
<div class="verseblock">\r
<pre class="content"><em>nvme get-feature</em> <device> [--namespace-id=<nsid> | -n <nsid>]\r
[--feature-id=<fid> | -f <fid>] [--cdw11=<cdw11>]\r
+ [--uuid-index=<uuid-index> | -U <uuid_index>]\r
[--data-len=<data-len> | -l <data-len>]\r
[--sel=<select> | -s <select>]\r
[--raw-binary | -b]\r
</div>\r
</dd>\r
<dt class="hdlist1">\r
+-U <uuid-index>\r
+</dt>\r
+<dt class="hdlist1">\r
+--uuid-index=<uuid-index>\r
+</dt>\r
+<dd>\r
+<p>\r
+ UUID Index of the feature\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
-l <data-len>\r
</dt>\r
<dt class="hdlist1">\r
<div class="content">\r
<pre><code># nvme get-feature /dev/nvme0 -f 0xc0 -l 512</code></pre>\r
</div></div>\r
+<div class="paragraph"><p>Get feature with UUID index</p></div>\r
</li>\r
+</ul></div>\r
+<div class="listingblock">\r
+<div class="content">\r
+<pre><code># nvme get-feature /dev/nvme0 -f 0xc0 -l 512 -U 0x1</code></pre>\r
+</div></div>\r
+<div class="ulist"><ul>\r
<li>\r
<p>\r
The following retrieves the feature for the LBA Range Type, which\r
<div id="footnotes"><hr /></div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 2018-02-07 09:54:27 MST\r
+Last updated\r
+ 2021-05-16 00:13:16 IST\r
</div>\r
</div>\r
</body>\r
[verse]
'nvme get-feature' <device> [--namespace-id=<nsid> | -n <nsid>]
[--feature-id=<fid> | -f <fid>] [--cdw11=<cdw11>]
+ [--uuid-index=<uuid-index> | -U <uuid_index>]
[--data-len=<data-len> | -l <data-len>]
[--sel=<select> | -s <select>]
[--raw-binary | -b]
|4–7|Reserved
|==================
+-U <uuid-index>::
+--uuid-index=<uuid-index>::
+ UUID Index of the feature
+
-l <data-len>::
--data-len=<data-len>::
The data length for the buffer returned for this feature. Most
# nvme get-feature /dev/nvme0 -f 0xc0 -l 512
------------
+
+Get feature with UUID index
+------------
+# nvme get-feature /dev/nvme0 -f 0xc0 -l 512 -U 0x1
+------------
* The following retrieves the feature for the LBA Range Type, which
implicitly requires a buffer and will be saved to a file in its raw
'\" t
.\" Title: nvme-set-feature
-.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
-.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/20/2020
+.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 05/16/2021
.\" Manual: NVMe Manual
.\" Source: NVMe
.\" Language: English
.\"
-.TH "NVME\-SET\-FEATURE" "1" "10/20/2020" "NVMe" "NVMe Manual"
+.TH "NVME\-SET\-FEATURE" "1" "05/16/2021" "NVMe" "NVMe Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.nf
\fInvme set\-feature\fR <device> [\-\-namespace\-id=<nsid> | \-n <nsid>]
[\-\-feature\-id=<fid> | \-f <fid>] [\-\-value=<value> | \-v <value>]
+ [\-\-uuid\-index=<uuid\-index> | \-U <uuid_index>]
[\-\-data\-len=<data\-len> | \-l <data\-len>]
[\-\-data=<data\-file> | \-d <data\-file>]
[\-\-save| \-s]
.RS 4
Save the attribute so that it persists through all power states and resets\&.
.RE
+.PP
+\-U <uuid\-index>, \-\-uuid\-index=<uuid\-index>
+.RS 4
+UUID Index of the feature
+.RE
.SH "EXAMPLES"
.sp
.RS 4
.if n \{\
.RE
.\}
+.sp
+nvme set\-feature /dev/nvme0 \-f 0x81 \-l 8 \-U 0x1
.RE
.SH "NVME"
.sp
+<?xml version="1.0" encoding="UTF-8"?>\r
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"\r
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">\r
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
<head>\r
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 8.6.8" />\r
+<meta name="generator" content="AsciiDoc 8.6.10" />\r
<title>nvme-set-feature(1)</title>\r
<style type="text/css">\r
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
padding: 0;\r
margin: 0;\r
}\r
-\r
+pre {\r
+ white-space: pre-wrap;\r
+}\r
\r
#author {\r
color: #527bbd;\r
}\r
\r
div.imageblock div.content { padding-left: 0; }\r
-span.image img { border-style: none; }\r
+span.image img { border-style: none; vertical-align: text-bottom; }\r
a.image:visited { color: white; }\r
\r
dl {\r
p.table {\r
margin-top: 0;\r
}\r
-/* Because the table frame attribute is overridden by CSS in most browsers. */\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
div.tableblock > table[frame="void"] {\r
border-style: none;\r
}\r
<div class="verseblock">\r
<pre class="content"><em>nvme set-feature</em> <device> [--namespace-id=<nsid> | -n <nsid>]\r
[--feature-id=<fid> | -f <fid>] [--value=<value> | -v <value>]\r
+ [--uuid-index=<uuid-index> | -U <uuid_index>]\r
[--data-len=<data-len> | -l <data-len>]\r
[--data=<data-file> | -d <data-file>]\r
[--save| -s]</pre>\r
Save the attribute so that it persists through all power states and resets.\r
</p>\r
</dd>\r
+<dt class="hdlist1">\r
+-U <uuid-index>\r
+</dt>\r
+<dt class="hdlist1">\r
+--uuid-index=<uuid-index>\r
+</dt>\r
+<dd>\r
+<p>\r
+ UUID Index of the feature\r
+</p>\r
+</dd>\r
</dl></div>\r
</div>\r
</div>\r
<div class="content">\r
<pre><code># echo "abcdefgh" | nvme set-feature /dev/nvme0 -f 0x81 -l 8</code></pre>\r
</div></div>\r
+<div class="paragraph"><p>nvme set-feature /dev/nvme0 -f 0x81 -l 8 -U 0x1</p></div>\r
</li>\r
</ul></div>\r
</div>\r
<div id="footnotes"><hr /></div>\r
<div id="footer">\r
<div id="footer-text">\r
-Last updated 2017-02-27 10:11:58 EST\r
+Last updated\r
+ 2021-05-16 00:14:28 IST\r
</div>\r
</div>\r
</body>\r
[verse]
'nvme set-feature' <device> [--namespace-id=<nsid> | -n <nsid>]
[--feature-id=<fid> | -f <fid>] [--value=<value> | -v <value>]
+ [--uuid-index=<uuid-index> | -U <uuid_index>]
[--data-len=<data-len> | -l <data-len>]
[--data=<data-file> | -d <data-file>]
[--save| -s]
--save::
Save the attribute so that it persists through all power states and resets.
+-U <uuid-index>::
+--uuid-index=<uuid-index>::
+ UUID Index of the feature
+
EXAMPLES
--------
* Sets the Power State (PS) to 1 in feature id 2:
------------
# echo "abcdefgh" | nvme set-feature /dev/nvme0 -f 0x81 -l 8
------------
++
+nvme set-feature /dev/nvme0 -f 0x81 -l 8 -U 0x1
NVME
----
-s':alias to --sel'
--data-len=':buffer len for returned LBA Type Range or host identifier data'
-l':alias for --data-len'
+ --uuid-index=':uuid index'
+ -U':alias for --uuid-index'
--cdw11=':dword 11 value, used for interrupt vector configuration only'
--raw-binary':dump infos in binary format'
-b':alias to --raw-binary'
-d':alias to --data'
--value=':new value of feature (required)'
-v'alias to --value'
+ --uuid-index=':uuid index'
+ -U':alias for --uuid-index'
)
_arguments '*:: :->subcmds'
_describe -t commands "nvme set-feature options" _setf
;;
"get-feature")
opts+=" --namespace-id= -n --feature-id= -f --sel= -s \
- --data-len= -l --cdw11= --raw-binary -b \
+ --data-len= -l --cdw11= --uuid-index= -U --raw-binary -b \
--human-readable -H"
;;
"set-feature")
opts+=" --namespace-id= -n --feature-id= -f --value= -v \
- --data-len= -l -data= -d --value= --save -s"
+ --data-len= -l -data= -d --value= --save -s --uuid-index= -U"
;;
"format")
opts+=" --namespace-id= -n --timeout= -t --lbaf= -l \
}
int nvme_feature(int fd, __u8 opcode, __u32 nsid, __u32 cdw10, __u32 cdw11,
- __u32 cdw12, __u32 data_len, void *data, __u32 *result)
+ __u32 cdw12, __u32 cdw14, __u32 data_len, void *data, __u32 *result)
{
struct nvme_admin_cmd cmd = {
.opcode = opcode,
.cdw10 = cdw10,
.cdw11 = cdw11,
.cdw12 = cdw12,
+ .cdw14 = cdw14,
.addr = (__u64)(uintptr_t) data,
.data_len = data_len,
};
}
int nvme_set_feature(int fd, __u32 nsid, __u8 fid, __u32 value, __u32 cdw12,
- bool save, __u32 data_len, void *data, __u32 *result)
+ bool save, __u8 uuid_index, __u32 data_len, void *data, __u32 *result)
{
__u32 cdw10 = fid | (save ? 1 << 31 : 0);
+ __u32 cdw14 = uuid_index;
return nvme_feature(fd, nvme_admin_set_features, nsid, cdw10, value,
- cdw12, data_len, data, result);
+ cdw12, cdw14, data_len, data, result);
}
}
int nvme_get_feature(int fd, __u32 nsid, __u8 fid, __u8 sel, __u32 cdw11,
- __u32 data_len, void *data, __u32 *result)
+ __u8 uuid_index, __u32 data_len, void *data, __u32 *result)
{
__u32 cdw10 = fid | sel << 8;
+ __u32 cdw14 = uuid_index;
return nvme_feature(fd, nvme_admin_get_features, nsid, cdw10, cdw11,
- 0, data_len, data, result);
+ 0, cdw14, data_len, data, result);
}
int nvme_format(int fd, __u32 nsid, __u8 lbaf, __u8 ses, __u8 pi,
__u32 size);
int nvme_resv_notif_log(int fd, struct nvme_resv_notif_log *resv);
int nvme_feature(int fd, __u8 opcode, __u32 nsid, __u32 cdw10,
- __u32 cdw11, __u32 cdw12, __u32 data_len, void *data,
+ __u32 cdw11, __u32 cdw12, __u32 cdw14, __u32 data_len, void *data,
__u32 *result);
int nvme_set_feature(int fd, __u32 nsid, __u8 fid, __u32 value, __u32 cdw12,
- bool save, __u32 data_len, void *data, __u32 *result);
+ bool save, __u8 uuid_index, __u32 data_len, void *data, __u32 *result);
int nvme_get_feature(int fd, __u32 nsid, __u8 fid, __u8 sel,
- __u32 cdw11, __u32 data_len, void *data, __u32 *result);
+ __u32 cdw11, __u8 uuid_index, __u32 data_len, void *data, __u32 *result);
int nvme_format(int fd, __u32 nsid, __u8 lbaf, __u8 ses, __u8 pi,
__u8 pil, __u8 ms, __u32 timeout);
const char *data_len = "buffer len if data is returned through host memory buffer";
const char *cdw11 = "dword 11 for interrupt vector config";
const char *human_readable = "show feature in readable format";
+ const char *uuid_index = "specify uuid index";
int err, fd;
__u32 result;
void *buf = NULL;
__u8 feature_id;
__u8 sel;
__u32 cdw11;
+ __u8 uuid_index;
__u32 data_len;
int raw_binary;
int human_readable;
.feature_id = 0,
.sel = 0,
.cdw11 = 0,
+ .uuid_index = 0,
.data_len = 0,
};
OPT_UINT("data-len", 'l', &cfg.data_len, data_len),
OPT_FLAG("raw-binary", 'b', &cfg.raw_binary, raw),
OPT_UINT("cdw11", 'c', &cfg.cdw11, cdw11),
+ OPT_BYTE("uuid-index", 'U', &cfg.uuid_index, uuid_index),
OPT_FLAG("human-readable",'H', &cfg.human_readable, human_readable),
OPT_END()
};
goto close_fd;
}
+ if (cfg.uuid_index > 128) {
+ fprintf(stderr, "invalid uuid index param: %u\n", cfg.uuid_index);
+ errno = EINVAL;
+ err = -1;
+ goto close_fd;
+ }
+
cfg.data_len = nvme_feat_buf_len[cfg.feature_id];
/* check for Extended Host Identifier */
}
err = nvme_get_feature(fd, cfg.namespace_id, cfg.feature_id, cfg.sel, cfg.cdw11,
- cfg.data_len, buf, &result);
+ cfg.uuid_index, cfg.data_len, buf, &result);
if (!err) {
if (!cfg.raw_binary || !buf) {
printf("get-feature:%#02x (%s), %s value:%#08x\n", cfg.feature_id,
const char *value = "new value of feature (required)";
const char *cdw12 = "feature cdw12, if used";
const char *save = "specifies that the controller shall save the attribute";
+ const char *uuid_index = "specify uuid index";
int err;
__u32 result;
void *buf = NULL;
__u8 feature_id;
__u64 value;
__u32 cdw12;
+ __u8 uuid_index;
__u32 data_len;
int save;
};
.namespace_id = 0,
.feature_id = 0,
.value = 0,
+ .uuid_index = 0,
.data_len = 0,
.save = 0,
};
OPT_UINT("feature-id", 'f', &cfg.feature_id, feature_id),
OPT_LONG("value", 'v', &cfg.value, value),
OPT_UINT("cdw12", 'c', &cfg.cdw12, cdw12),
+ OPT_BYTE("uuid-index", 'U', &cfg.uuid_index, uuid_index),
OPT_UINT("data-len", 'l', &cfg.data_len, data_len),
OPT_FILE("data", 'd', &cfg.file, data),
OPT_FLAG("save", 's', &cfg.save, save),
goto close_fd;
}
+ if (cfg.uuid_index > 128) {
+ fprintf(stderr, "invalid uuid index param: %u\n", cfg.uuid_index);
+ errno = EINVAL;
+ err = -1;
+ goto close_fd;
+ }
+
cfg.data_len = nvme_feat_buf_len[cfg.feature_id];
if (cfg.data_len) {
}
err = nvme_set_feature(fd, cfg.namespace_id, cfg.feature_id, cfg.value,
- cfg.cdw12, cfg.save, cfg.data_len, buf, &result);
+ cfg.cdw12, cfg.save, cfg.uuid_index, cfg.data_len, buf, &result);
if (err < 0) {
perror("set-feature");
} else if (!err) {
__u32 thresholds[OPTANE_V1000_BUCKET_LEN] = {0};
__u32 result;
- err = nvme_get_feature(fd, 0, 0xf7, 0, cfg.write ? 0x1 : 0x0,
+ err = nvme_get_feature(fd, 0, 0xf7, 0, cfg.write ? 0x1 : 0x0, 0,
sizeof(thresholds), thresholds, &result);
if (err) {
fprintf(stderr, "Quering thresholds failed. NVMe Status:%s(%x)\n",
return fd;
switch (option) {
case None:
- err = nvme_get_feature(fd, nsid, fid, sel, cdw11, data_len, buf,
+ err = nvme_get_feature(fd, nsid, fid, sel, cdw11, 0, data_len, buf,
&result);
if (!err) {
printf(
break;
case True:
case False:
- err = nvme_set_feature(fd, nsid, fid, option, cdw12, save,
+ err = nvme_set_feature(fd, nsid, fid, option, cdw12, save, 0,
data_len, buf, &result);
if (err > 0) {
fprintf(stderr, "NVMe Status:%s(%x)\n",
}
err = nvme_set_feature(fd, nsid, fid, cfg.write ? 0x1 : 0x0,
- cdw12, save, OPTANE_V1000_BUCKET_LEN,
+ cdw12, save, 0, OPTANE_V1000_BUCKET_LEN,
thresholds, &result);
if (err > 0) {
fd = parse_and_open(argc, argv, desc, opts);
if (fd < 0) return fd;
- err = nvme_get_feature(fd, 0, feature_id, 0, 0, 0, NULL, &result);
+ err = nvme_get_feature(fd, 0, feature_id, 0, 0, 0, 0, NULL, &result);
if (err < 0) {
perror("get-feature");
}
fd = parse_and_open(argc, argv, desc, opts);
if (fd < 0) return fd;
- err = nvme_set_feature(fd, 0, cfg.feature_id, cfg.value, 0, cfg.save, 0, NULL, &result);
+ err = nvme_set_feature(fd, 0, cfg.feature_id, cfg.value, 0, cfg.save, 0, 0, NULL, &result);
if (err < 0) {
perror("set-feature");
}
}
cfg.value = (param1 << MB_FEAT_HIGH_LATENCY_VALUE_SHIFT) | param2;
- err = nvme_set_feature(fd, 0, cfg.feature_id, cfg.value, 0, 0, 0, NULL, &result);
+ err = nvme_set_feature(fd, 0, cfg.feature_id, cfg.value, 0, 0, 0, 0, NULL, &result);
if (err < 0) {
perror("set-feature");
}
- err = nvme_set_feature(fd, 0, cfg.feature_id, cfg.value, 0, cfg.save, 0, NULL, &result);
+ err = nvme_set_feature(fd, 0, cfg.feature_id, cfg.value, 0, cfg.save, 0, 0, NULL, &result);
if (err < 0) {
perror("set-feature");
}
return fd;
switch (option) {
case None:
- err = nvme_get_feature(fd, nsid, fid, sel, cdw11, data_len, buf,
+ err = nvme_get_feature(fd, nsid, fid, sel, cdw11, 0, data_len, buf,
&result);
if (!err) {
printf(
break;
case True:
case False:
- err = nvme_set_feature(fd, nsid, fid, option, cdw12, save,
+ err = nvme_set_feature(fd, nsid, fid, option, cdw12, save, 0,
data_len, buf, &result);
if (err > 0) {
fprintf(stderr, "NVMe Status:%s(%x)\n",
if (!strcmp(opt.option, "enable")) {
cdw11 = opt.value << 1 | 1;
- err = nvme_set_feature(fd, 1, fid, cdw11, 0, opt.save, 0, 0, &result);
+ err = nvme_set_feature(fd, 1, fid, cdw11, 0, opt.save, 0, 0, 0, &result);
if (err == 0) {
printf("successfully enabled SMBus on drive\n");
} else {
}
else if (!strcmp(opt.option, "status")) {
cdw10 = opt.value;
- err = nvme_get_feature(fd, 1, fid, cdw10, 0, 0, 0, &result);
+ err = nvme_get_feature(fd, 1, fid, cdw10, 0, 0, 0, 0, &result);
if (err == 0) {
printf("SMBus status on the drive: %s (returns %s temperature) \n",
(result & 1) ? "enabled" : "disabled",
}
else if (!strcmp(opt.option, "disable")) {
cdw11 = opt.value << 1 | 0;
- err = nvme_set_feature(fd, 1, fid, cdw11, 0, opt.save, 0, 0, &result);
+ err = nvme_set_feature(fd, 1, fid, cdw11, 0, opt.save, 0, 0, 0, &result);
if (err == 0) {
printf("Successfully disabled SMBus on drive\n");
} else {
/* For M51CX models, PCIe errors are cleared using 0xC3 feature */
if (model == M51CX) {
- err = nvme_set_feature(fd, 0, fid, (1 << 31), 0, 0, 0, 0, &result);
+ err = nvme_set_feature(fd, 0, fid, (1 << 31), 0, 0, 0, 0, 0, &result);
if (err == 0 && (err = (int)result) == 0)
printf("Device correctable errors cleared!\n");
else
bufp = NULL;
}
- err = nvme_get_feature(fd, 1, fmap[i].id, 0, 0x0, len, bufp, &attrVal);
+ err = nvme_get_feature(fd, 1, fmap[i].id, 0, 0x0, 0, len, bufp, &attrVal);
if (err == 0) {
sprintf(msg, "feature: 0x%X", fmap[i].id);
WriteData((__u8*)&attrVal, sizeof(attrVal), dir, fmap[i].file, msg);
}
//err = nvme_set_feature(fd, 1, fid, cdw11, 0, opt.save, 0, 0, &result);
- err = nvme_set_feature(fd, 1, fid, 0, 0, 0, 0, 0, &result);
+ err = nvme_set_feature(fd, 1, fid, 0, 0, 0, 0, 0, 0, &result);
if (err == 0) err = (int)result;
return err;
}
}
if (!strcmp(opt.option, "enable")) {
- err = nvme_set_feature(fd, 1, fid, 1, 0, (opt.select & 0x1), 0, 0, &result);
+ err = nvme_set_feature(fd, 1, fid, 1, 0, (opt.select & 0x1), 0, 0, 0, &result);
if (err == 0) {
printf("successfully set controller telemetry option\n");
} else {
printf("Failed to set controller telemetry option\n");
}
} else if (!strcmp(opt.option, "disable")) {
- err = nvme_set_feature(fd, 1, fid, 0, 0, (opt.select & 0x1), 0, 0, &result);
+ err = nvme_set_feature(fd, 1, fid, 0, 0, (opt.select & 0x1), 0, 0, 0, &result);
if (err == 0) {
printf("successfully disabled controller telemetry option\n");
} else {
}
} else if (!strcmp(opt.option, "status")) {
opt.select &= 0x3;
- err = nvme_get_feature(fd, 1, fid, opt.select, 0, 0, 0, &result);
+ err = nvme_get_feature(fd, 1, fid, opt.select, 0, 0, 0, 0, &result);
if (err == 0) {
printf("Controller telemetry option : %s\n",
(result) ? "enabled" : "disabled");
fd = parse_and_open(argc, argv, desc, opts);
- err = nvme_set_feature(fd, 0, 0xE1, 0xCB, 0, cfg.save, 0, buf, &result);
+ err = nvme_set_feature(fd, 0, 0xE1, 0xCB, 0, cfg.save, 0, 0, buf, &result);
if (err < 0) {
perror("set-feature");
memset(buf, 0, cfg.data_len);
}
- err = nvme_get_feature(fd, cfg.namespace_id, cfg.feature_id, cfg.sel, cfg.cdw11,
+ err = nvme_get_feature(fd, cfg.namespace_id, cfg.feature_id, cfg.sel, cfg.cdw11, 0,
cfg.data_len, buf, &result);
if (!err) {
printf("get-feature:0x%02x (%s), %s value: %#08x\n", cfg.feature_id,
}
err = nvme_set_feature(fd, cfg.namespace_id, cfg.feature_id, cfg.value,
- 0, cfg.save, cfg.data_len, buf, &result);
+ 0, cfg.save, 0, cfg.data_len, buf, &result);
if (err < 0) {
perror("set-feature");
goto free;
goto end;
err = nvme_set_feature(fd, namespace_id, feature_id, value, cdw12, save,
- 0, NULL, &result);
+ 0, 0, NULL, &result);
if (err)
fprintf(stderr, "%s: couldn't clear PCIe correctable errors \n",
__func__);
} else if (type == WDC_TELEMETRY_TYPE_CONTROLLER) {
/* Verify the Controller Initiated Option is enabled */
err = nvme_get_feature(fd, 0, WDC_VU_DISABLE_CNTLR_TELEMETRY_OPTION_FEATURE_ID, 0, 0,
- 4, buf, &result);
+ 0, 4, buf, &result);
if (err == 0) {
if (result == 0) {
/* enabled */
__u32 value = 1 << 31; /* Bit 31 - clear PCIe correctable count */
ret = nvme_set_feature(fd, 0, WDC_NVME_CLEAR_PCIE_CORR_FEATURE_ID, value,
- 0, 0, 0, NULL, &result);
+ 0, 0, 0, 0, NULL, &result);
fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
return ret;
__u32 value = 1 << 31; /* Bit 31 - Clear Firmware Update History Log */
ret = nvme_set_feature(fd, 0, WDC_NVME_CLEAR_FW_ACT_HIST_VU_FID, value,
- 0, 0, 0, NULL, &result);
+ 0, 0, 0, 0, NULL, &result);
fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
return ret;
if (cfg.disable) {
ret = nvme_set_feature(fd, 0, WDC_VU_DISABLE_CNTLR_TELEMETRY_OPTION_FEATURE_ID, 1,
- 0, 0, 0, buf, &result);
+ 0, 0, 0, 0, buf, &result);
wdc_clear_reason_id(fd);
}
else {
if (cfg.enable) {
ret = nvme_set_feature(fd, 0, WDC_VU_DISABLE_CNTLR_TELEMETRY_OPTION_FEATURE_ID, 0,
- 0, 0, 0, buf, &result);
+ 0, 0, 0, 0, buf, &result);
}
else if (cfg.status) {
ret = nvme_get_feature(fd, 0, WDC_VU_DISABLE_CNTLR_TELEMETRY_OPTION_FEATURE_ID, 0, 0,
- 4, buf, &result);
+ 0, 4, buf, &result);
if (ret == 0) {
if (result)
fprintf(stderr, "Controller Option Telemetry Log Page State: Disabled\n");
if (deFeatureIdList[listIdx].featureId == FID_LBA_RANGE_TYPE)
continue;
ret = nvme_get_feature(fd, WDC_DE_GLOBAL_NSID, deFeatureIdList[listIdx].featureId, FS_CURRENT, 0,
- sizeof(featureIdBuff), &featureIdBuff, &result);
+ 0, sizeof(featureIdBuff), &featureIdBuff, &result);
if (ret) {
fprintf(stderr, "ERROR : WDC : nvme_get_feature id 0x%x failed, ret = %d\n",
temperature = ((smart_log.temperature[1] << 8) | smart_log.temperature[0]) - 273;
/* retrieve HCTM Thermal Management Temperatures */
- nvme_get_feature(fd, 0, 0x10, 0, 0, 0, 0, &hctm_tmt);
+ nvme_get_feature(fd, 0, 0x10, 0, 0, 0, 0, 0, &hctm_tmt);
temp_tmt1 = ((hctm_tmt >> 16) & 0xffff) ? ((hctm_tmt >> 16) & 0xffff) - 273 : 0;
temp_tmt2 = (hctm_tmt & 0xffff) ? (hctm_tmt & 0xffff) - 273 : 0;