'\" t
.\" Title: nvme-get-log
-.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
-.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 01/13/2021
+.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 06/12/2021
.\" Manual: NVMe Manual
.\" Source: NVMe
.\" Language: English
.\"
-.TH "NVME\-GET\-LOG" "1" "01/13/2021" "NVMe" "NVMe Manual"
+.TH "NVME\-GET\-LOG" "1" "06/12/2021" "NVMe" "NVMe Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.sp
.nf
\fInvme get\-log\fR <device> [\-\-log\-id=<log\-id> | \-i <log\-id>]
- [\-\-log\-len=<log\-len> | \-l <log\-len>]
- [\-\-aen=<aen> | \-a <aen>]
- [\-\-namespace\-id=<nsid> | \-n <nsid>]
- [\-\-raw\-binary | \-b]
- [\-\-lpo=<offset> | \-o <offset>]
- [\-\-lsp=<field> | \-s <field>]
- [\-\-lsi=<field> | \-S <field>]
- [\-\-rae | \-r]
+ [\-\-log\-len=<log\-len> | \-l <log\-len>]
+ [\-\-aen=<aen> | \-a <aen>]
+ [\-\-namespace\-id=<nsid> | \-n <nsid>]
+ [\-\-raw\-binary | \-b]
+ [\-\-lpo=<offset> | \-o <offset>]
+ [\-\-lsp=<field> | \-s <field>]
+ [\-\-lsi=<field> | \-S <field>]
+ [\-\-rae | \-r]
+ [\-\-csi=<command_set_identifier> | \-y <command_set_identifier>]
+ [\-\-ot | \-O]
.fi
.SH "DESCRIPTION"
.sp
.RS 4
Retain an Asynchronous Event\&.
.RE
+.PP
+\-y <command_set_identifier>, \-\-csi=<command_set_identifier>
+.RS 4
+This field specifies the identifier of command set\&. if not issued, NVM Command Set will be selected\&.
+.RE
+.PP
+\-O, \-\-ot
+.RS 4
+Offset Type
+.RE
.SH "EXAMPLES"
.sp
.RS 4
<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 9.0.0rc2" />\r
+<meta name="generator" content="AsciiDoc 8.6.10" />\r
<title>nvme-get-log(1)</title>\r
<style type="text/css">\r
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\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="sectionbody">\r
<div class="verseblock">\r
<pre class="content"><em>nvme get-log</em> <device> [--log-id=<log-id> | -i <log-id>]\r
- [--log-len=<log-len> | -l <log-len>]\r
- [--aen=<aen> | -a <aen>]\r
- [--namespace-id=<nsid> | -n <nsid>]\r
- [--raw-binary | -b]\r
- [--lpo=<offset> | -o <offset>]\r
- [--lsp=<field> | -s <field>]\r
- [--lsi=<field> | -S <field>]\r
- [--rae | -r]</pre>\r
+ [--log-len=<log-len> | -l <log-len>]\r
+ [--aen=<aen> | -a <aen>]\r
+ [--namespace-id=<nsid> | -n <nsid>]\r
+ [--raw-binary | -b]\r
+ [--lpo=<offset> | -o <offset>]\r
+ [--lsp=<field> | -s <field>]\r
+ [--lsi=<field> | -S <field>]\r
+ [--rae | -r]\r
+ [--csi=<command_set_identifier> | -y <command_set_identifier>]\r
+ [--ot | -O]</pre>\r
<div class="attribution">\r
</div></div>\r
</div>\r
Retain an Asynchronous Event.\r
</p>\r
</dd>\r
+<dt class="hdlist1">\r
+-y <command_set_identifier>\r
+</dt>\r
+<dt class="hdlist1">\r
+--csi=<command_set_identifier>\r
+</dt>\r
+<dd>\r
+<p>\r
+ This field specifies the identifier of command set.\r
+ if not issued, NVM Command Set will be selected.\r
+</p>\r
+</dd>\r
+<dt class="hdlist1">\r
+-O\r
+</dt>\r
+<dt class="hdlist1">\r
+--ot\r
+</dt>\r
+<dd>\r
+<p>\r
+ Offset Type\r
+</p>\r
+</dd>\r
</dl></div>\r
</div>\r
</div>\r
<div id="footer">\r
<div id="footer-text">\r
Last updated\r
- 2021-01-13 23:17:32 JST\r
+ 2021-06-12 14:47:50 IST\r
</div>\r
</div>\r
</body>\r
--------
[verse]
'nvme get-log' <device> [--log-id=<log-id> | -i <log-id>]
- [--log-len=<log-len> | -l <log-len>]
- [--aen=<aen> | -a <aen>]
- [--namespace-id=<nsid> | -n <nsid>]
- [--raw-binary | -b]
- [--lpo=<offset> | -o <offset>]
- [--lsp=<field> | -s <field>]
- [--lsi=<field> | -S <field>]
- [--rae | -r]
+ [--log-len=<log-len> | -l <log-len>]
+ [--aen=<aen> | -a <aen>]
+ [--namespace-id=<nsid> | -n <nsid>]
+ [--raw-binary | -b]
+ [--lpo=<offset> | -o <offset>]
+ [--lsp=<field> | -s <field>]
+ [--lsi=<field> | -S <field>]
+ [--rae | -r]
+ [--csi=<command_set_identifier> | -y <command_set_identifier>]
+ [--ot | -O]
DESCRIPTION
-----------
--rae::
Retain an Asynchronous Event.
+-y <command_set_identifier>::
+--csi=<command_set_identifier>::
+ This field specifies the identifier of command set.
+ if not issued, NVM Command Set will be selected.
+
+-O::
+--ot::
+ Offset Type
+
EXAMPLES
--------
* Get 512 bytes from log page 2
}
int nvme_get_log14(int fd, __u32 nsid, __u8 log_id, __u8 lsp, __u64 lpo,
- __u16 lsi, bool rae, __u8 uuid_ix, __u32 data_len, void *data)
+ __u16 lsi, bool rae, __u8 uuid_ix, __u8 csi, bool ot,
+ __u32 data_len, void *data)
{
__u32 numd = (data_len >> 2) - 1;
__u16 numdu = numd >> 16, numdl = numd & 0xffff;
__u32 cdw10 = log_id | (numdl << 16) | (rae ? 1 << 15 : 0) | lsp << 8;
+ __u32 cdw14 = uuid_ix | (ot ? 1 << 23 : 0) | csi << 24;
struct nvme_admin_cmd cmd = {
.opcode = nvme_admin_get_log_page,
.cdw11 = numdu | (lsi << 16),
.cdw12 = lpo & 0xffffffff,
.cdw13 = lpo >> 32,
- .cdw14 = uuid_ix,
+ .cdw14 = cdw14,
};
return nvme_submit_admin_passthru(fd, &cmd);
void *data)
{
return nvme_get_log14(fd, nsid, log_id, lsp, lpo, lsi, rae, 0,
- data_len, data);
+ 0, false, data_len, data);
}
int nvme_get_log(int fd, __u32 nsid, __u8 log_id, bool rae,
int nvme_get_log(int fd, __u32 nsid, __u8 log_id, bool rae,
__u8 lsp, __u32 data_len, void *data);
int nvme_get_log14(int fd, __u32 nsid, __u8 log_id, __u8 lsp, __u64 lpo,
- __u16 group_id, bool rae, __u8 uuid_ix,
+ __u16 group_id, bool rae, __u8 uuid_ix, __u8 csi, bool ot,
__u32 data_len, void *data);
int nvme_get_log13(int fd, __u32 nsid, __u8 log_id, __u8 lsp,
__u64 lpo, __u16 lsi, bool rae, __u32 data_len,
const char *rae = "retain an asynchronous event";
const char *raw = "output in raw format";
const char *uuid_index = "UUID index";
+ const char *csi = "command set identifier";
+ const char *offset_type = "offset type";
int err = -1, fd;
unsigned char *log;
__u64 lpo;
__u8 lsp;
__u8 uuid_index;
+ __u8 csi;
+ int ot;
int rae;
int raw_binary;
};
.lsi = 0,
.rae = 0,
.uuid_index = 0,
+ .csi = 0,
+ .ot = 0,
};
OPT_ARGS(opts) = {
OPT_SHRT("lsi", 'S', &cfg.lsi, lsi),
OPT_FLAG("rae", 'r', &cfg.rae, rae),
OPT_BYTE("uuid-index", 'U', &cfg.uuid_index, uuid_index),
+ OPT_BYTE("csi", 'y', &cfg.csi, csi),
+ OPT_FLAG("ot", 'O', &cfg.ot, offset_type),
OPT_FLAG("raw-binary", 'b', &cfg.raw_binary, raw),
OPT_END()
};
goto close_fd;
}
- if (cfg.lsp > 16) {
+ if (cfg.lsp > 128) {
fprintf(stderr, "invalid lsp param: %u\n", cfg.lsp);
errno = EINVAL;
err = -1;
err = nvme_get_log14(fd, cfg.namespace_id, cfg.log_id,
cfg.lsp, cfg.lpo, cfg.lsi, cfg.rae,
- cfg.uuid_index, cfg.log_len, log);
+ cfg.uuid_index, cfg.csi, cfg.ot, cfg.log_len, log);
if (!err) {
if (!cfg.raw_binary) {
printf("Device:%s log-id:%d namespace-id:%#x\n",
memset(data, 0, sizeof (__u8) * WDC_C2_LOG_BUF_LEN);
/* get the log page length */
- ret = nvme_get_log14(fd, 0xFFFFFFFF, lid, NVME_NO_LOG_LSP, 0, 0, false, uuid_ix, WDC_C2_LOG_BUF_LEN, data);
+ ret = nvme_get_log14(fd, 0xFFFFFFFF, lid, NVME_NO_LOG_LSP, 0, 0, false, uuid_ix, 0, false, WDC_C2_LOG_BUF_LEN, data);
if (ret) {
fprintf(stderr, "ERROR : WDC : Unable to get 0x%x Log Page length, ret = 0x%x\n", lid, ret);
goto end;
}
/* get the log page data */
- ret = nvme_get_log14(fd, 0xFFFFFFFF, lid, NVME_NO_LOG_LSP, 0, 0, false, uuid_ix, le32_to_cpu(hdr_ptr->length), data);
+ ret = nvme_get_log14(fd, 0xFFFFFFFF, lid, NVME_NO_LOG_LSP, 0, 0, false, uuid_ix, 0, false, le32_to_cpu(hdr_ptr->length), data);
if (ret) {
fprintf(stderr, "ERROR : WDC : Unable to read 0x%x Log Page data, ret = 0x%x\n", lid, ret);
goto end;
/* not found with uuid = 1 try with uuid = 0 */
uuid_ix = 0;
/* get the log page data */
- ret = nvme_get_log14(fd, 0xFFFFFFFF, lid, NVME_NO_LOG_LSP, 0, 0, false, uuid_ix, le32_to_cpu(hdr_ptr->length), data);
+ ret = nvme_get_log14(fd, 0xFFFFFFFF, lid, NVME_NO_LOG_LSP, 0, 0, false, uuid_ix, 0, false, le32_to_cpu(hdr_ptr->length), data);
hdr_ptr = (struct wdc_c2_log_page_header *)data;
sph = (struct wdc_c2_log_subpage_header *)(data + length);
found = wdc_get_dev_mng_log_entry(hdr_ptr->length, log_id, hdr_ptr, &sph);
/* Get the 0xC0 log data */
ret = nvme_get_log14(fd, 0xFFFFFFFF, WDC_NVME_GET_EOL_STATUS_LOG_OPCODE,
- NVME_NO_LOG_LSP, 0, 0, false, uuid_index, WDC_NVME_SMART_CLOUD_ATTR_LEN, data);
+ NVME_NO_LOG_LSP, 0, 0, false, uuid_index, 0, false, WDC_NVME_SMART_CLOUD_ATTR_LEN, data);
if (strcmp(format, "json"))
fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
/* Get the 0xC0 log data */
ret = nvme_get_log14(fd, 0xFFFFFFFF, WDC_NVME_GET_EOL_STATUS_LOG_OPCODE,
- NVME_NO_LOG_LSP, 0, 0, false, uuid_index, WDC_NVME_EOL_STATUS_LOG_LEN, data);
+ NVME_NO_LOG_LSP, 0, 0, false, uuid_index, 0, false, WDC_NVME_EOL_STATUS_LOG_LEN, data);
if (strcmp(format, "json"))
fprintf(stderr, "NVMe Status:%s(%x)\n", nvme_status_to_string(ret), ret);
/* Get the 0xC0 log data */
ret = nvme_get_log14(fd, 0xFFFFFFFF, WDC_NVME_GET_SMART_CLOUD_ATTR_LOG_OPCODE,
- NVME_NO_LOG_LSP, 0, 0, false, uuid_index, WDC_NVME_SMART_CLOUD_ATTR_LEN, data);
+ NVME_NO_LOG_LSP, 0, 0, false, uuid_index, 0, false, WDC_NVME_SMART_CLOUD_ATTR_LEN, data);
if (ret == 0) {
/* Verify GUID matches */