Blame Documentation/nvme-id-ctrl.1

Packit Service b7b338
'\" t
Packit Service b7b338
.\"     Title: nvme-id-ctrl
Packit Service b7b338
.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
Packit Service b7b338
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
Packit Service b7b338
.\"      Date: 04/24/2020
Packit Service b7b338
.\"    Manual: NVMe Manual
Packit Service b7b338
.\"    Source: NVMe
Packit Service b7b338
.\"  Language: English
Packit Service b7b338
.\"
Packit Service b7b338
.TH "NVME\-ID\-CTRL" "1" "04/24/2020" "NVMe" "NVMe Manual"
Packit Service b7b338
.\" -----------------------------------------------------------------
Packit Service b7b338
.\" * Define some portability stuff
Packit Service b7b338
.\" -----------------------------------------------------------------
Packit Service b7b338
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit Service b7b338
.\" http://bugs.debian.org/507673
Packit Service b7b338
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
Packit Service b7b338
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Packit Service b7b338
.ie \n(.g .ds Aq \(aq
Packit Service b7b338
.el       .ds Aq '
Packit Service b7b338
.\" -----------------------------------------------------------------
Packit Service b7b338
.\" * set default formatting
Packit Service b7b338
.\" -----------------------------------------------------------------
Packit Service b7b338
.\" disable hyphenation
Packit Service b7b338
.nh
Packit Service b7b338
.\" disable justification (adjust text to left margin only)
Packit Service b7b338
.ad l
Packit Service b7b338
.\" -----------------------------------------------------------------
Packit Service b7b338
.\" * MAIN CONTENT STARTS HERE *
Packit Service b7b338
.\" -----------------------------------------------------------------
Packit Service b7b338
.SH "NAME"
Packit Service b7b338
nvme-id-ctrl \- Send NVMe Identify Controller, return result and structure
Packit Service b7b338
.SH "SYNOPSIS"
Packit Service b7b338
.sp
Packit Service b7b338
.nf
Packit Service b7b338
\fInvme id\-ctrl\fR <device> [\-v | \-\-vendor\-specific] [\-b | \-\-raw\-binary]
Packit Service b7b338
                        [\-o <fmt> | \-\-output\-format=<fmt>]
Packit Service b7b338
.fi
Packit Service b7b338
.SH "DESCRIPTION"
Packit Service b7b338
.sp
Packit Service b7b338
For the NVMe device given, sends an identify controller command and provides the result and returned structure\&.
Packit Service b7b338
.sp
Packit Service b7b338
The <device> parameter is mandatory and may be either the NVMe character device (ex: /dev/nvme0), or a namespace block device (ex: /dev/nvme0n1)\&.
Packit Service b7b338
.sp
Packit Service b7b338
On success, the structure may be returned in one of several ways depending on the option flags; the structure may be parsed by the program or the raw buffer may be printed to stdout\&.
Packit Service b7b338
.SH "OPTIONS"
Packit Service b7b338
.PP
Packit Service b7b338
\-b, \-\-raw\-binary
Packit Service b7b338
.RS 4
Packit Service b7b338
Print the raw buffer to stdout\&. Structure is not parsed by program\&. This overrides the vendor specific and human readable options\&.
Packit Service b7b338
.RE
Packit Service b7b338
.PP
Packit Service b7b338
\-v, \-\-vendor\-specific
Packit Service b7b338
.RS 4
Packit Service b7b338
In addition to parsing known fields, this option will dump the vendor specific region of the structure in hex with ascii interpretation\&.
Packit Service b7b338
.RE
Packit Service b7b338
.PP
Packit Service b7b338
\-H, \-\-human\-readable
Packit Service b7b338
.RS 4
Packit Service b7b338
This option will parse and format many of the bit fields into human\-readable formats\&.
Packit Service b7b338
.RE
Packit Service b7b338
.PP
Packit Service b7b338
\-o <format>, \-\-output\-format=<format>
Packit Service b7b338
.RS 4
Packit Service b7b338
Set the reporting format to
Packit Service b7b338
\fInormal\fR,
Packit Service b7b338
\fIjson\fR, or
Packit Service b7b338
\fIbinary\fR\&. Only one output format can be used at a time\&.
Packit Service b7b338
.RE
Packit Service b7b338
.SH "EXAMPLES"
Packit Service b7b338
.sp
Packit Service b7b338
.RS 4
Packit Service b7b338
.ie n \{\
Packit Service b7b338
\h'-04'\(bu\h'+03'\c
Packit Service b7b338
.\}
Packit Service b7b338
.el \{\
Packit Service b7b338
.sp -1
Packit Service b7b338
.IP \(bu 2.3
Packit Service b7b338
.\}
Packit Service b7b338
Has the program interpret the returned buffer and display the known fields in a human readable format:
Packit Service b7b338
.sp
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RS 4
Packit Service b7b338
.\}
Packit Service b7b338
.nf
Packit Service b7b338
# nvme id\-ctrl /dev/nvme0
Packit Service b7b338
.fi
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RE
Packit Service b7b338
.\}
Packit Service b7b338
.RE
Packit Service b7b338
.sp
Packit Service b7b338
.RS 4
Packit Service b7b338
.ie n \{\
Packit Service b7b338
\h'-04'\(bu\h'+03'\c
Packit Service b7b338
.\}
Packit Service b7b338
.el \{\
Packit Service b7b338
.sp -1
Packit Service b7b338
.IP \(bu 2.3
Packit Service b7b338
.\}
Packit Service b7b338
In addition to showing the known fields, has the program to display the vendor unique field:
Packit Service b7b338
.sp
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RS 4
Packit Service b7b338
.\}
Packit Service b7b338
.nf
Packit Service b7b338
# nvme id\-ctrl /dev/nvme0 \-\-vendor\-specific
Packit Service b7b338
# nvme id\-ctrl /dev/nvme0 \-v
Packit Service b7b338
.fi
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RE
Packit Service b7b338
.\}
Packit Service b7b338
.sp
Packit Service b7b338
The above will dump the
Packit Service b7b338
\fIvs\fR
Packit Service b7b338
buffer in hex since it doesn\(cqt know how to interpret it\&.
Packit Service b7b338
.RE
Packit Service b7b338
.sp
Packit Service b7b338
.RS 4
Packit Service b7b338
.ie n \{\
Packit Service b7b338
\h'-04'\(bu\h'+03'\c
Packit Service b7b338
.\}
Packit Service b7b338
.el \{\
Packit Service b7b338
.sp -1
Packit Service b7b338
.IP \(bu 2.3
Packit Service b7b338
.\}
Packit Service b7b338
Have the program return the raw structure in binary:
Packit Service b7b338
.sp
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RS 4
Packit Service b7b338
.\}
Packit Service b7b338
.nf
Packit Service b7b338
# nvme id\-ctrl /dev/nvme0 \-\-raw\-binary > id_ctrl\&.raw
Packit Service b7b338
# nvme id\-ctrl /dev/nvme0 \-b > id_ctrl\&.raw
Packit Service b7b338
.fi
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RE
Packit Service b7b338
.\}
Packit Service b7b338
.sp
Packit Service b7b338
It is probably a bad idea to not redirect stdout when using this mode\&.
Packit Service b7b338
.RE
Packit Service b7b338
.sp
Packit Service b7b338
.RS 4
Packit Service b7b338
.ie n \{\
Packit Service b7b338
\h'-04'\(bu\h'+03'\c
Packit Service b7b338
.\}
Packit Service b7b338
.el \{\
Packit Service b7b338
.sp -1
Packit Service b7b338
.IP \(bu 2.3
Packit Service b7b338
.\}
Packit Service b7b338
Alternatively you may want to send the data to another program that can parse the raw buffer\&.
Packit Service b7b338
.sp
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RS 4
Packit Service b7b338
.\}
Packit Service b7b338
.nf
Packit Service b7b338
# nvme id\-ctrl /dev/nvme0 \-\-raw\-binary | nvme_parse_id_ctrl
Packit Service b7b338
.fi
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RE
Packit Service b7b338
.\}
Packit Service b7b338
.sp
Packit Service b7b338
The parse program in the above example can be a program that shows the structure in a way you like\&. The following program is such an example that will parse it and can accept the output through a pipe,
Packit Service b7b338
\*(Aq|\*(Aq, as shown in the above example, or you can
Packit Service b7b338
\*(Aqcat\*(Aq
Packit Service b7b338
a saved output buffer to it\&.
Packit Service b7b338
.RE
Packit Service b7b338
.sp
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RS 4
Packit Service b7b338
.\}
Packit Service b7b338
.nf
Packit Service b7b338
/* File: nvme_parse_id_ctrl\&.c */
Packit Service b7b338
Packit Service b7b338
#include <linux/nvme\&.h>
Packit Service b7b338
#include <stdio\&.h>
Packit Service b7b338
#include <unistd\&.h>
Packit Service b7b338
Packit Service b7b338
int main(int argc, char **argv)
Packit Service b7b338
{
Packit Service b7b338
        unsigned char buf[sizeof(struct nvme_id_ctrl)];
Packit Service b7b338
        struct nvme_id_ctrl *ctrl = (struct nvme_id_ctrl *)buf;
Packit Service b7b338
Packit Service b7b338
        if (read(STDIN_FILENO, buf, sizeof(buf)))
Packit Service b7b338
                return 1;
Packit Service b7b338
Packit Service b7b338
        printf("vid   : %#x\en", ctrl\->vid);
Packit Service b7b338
        printf("ssvid : %#x\en", ctrl\->ssvid);
Packit Service b7b338
        return 0;
Packit Service b7b338
}
Packit Service b7b338
.fi
Packit Service b7b338
.if n \{\
Packit Service b7b338
.RE
Packit Service b7b338
.\}
Packit Service b7b338
.SH "NVME"
Packit Service b7b338
.sp
Packit Service b7b338
Part of the nvme\-user suite