1# 64 byte NVMe Identify controller command (an Admin command) that is 2# suitable for: 3# sg_raw --cmdfile=<this_file_name> --request=4096 <nvme_device> 4# 5# The address field (at byte offset 24, 8 bytes and little endian) gives 6# special meaning to the highest address pointers: 7# ffffffff fffffffe use address of data-in buffer 8# ffffffff fffffffd use address of data-out buffer 9# 10# The data length field (at byte offset 36, 4 bytes and little endian) 11# gives special meaning to the highest block counts: 12# fffffffe use byte length of data-in buffer 13# fffffffd use byte length of data-out buffer 14# 15# Since The Identify command reads data "in" from the device, then the 16# data-in buffer is appropriate. 17 1806 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1900 00 00 00 00 00 00 00 fe ff ff ff ff ff ff ff 2000 00 00 00 fe ff ff ff 01 00 00 00 00 00 00 00 2100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 23# A typical invocation in Linux and FreeBSD would look like this: 24# sg_raw --cmdfile=nvme_identify_ctl.hex -r 4k /dev/nvme0 25# 26# NVMe likes "4k" (4096 bytes) buffer size, preferably aligned to 27# a 4096 byte (or "page") boundary. 28