aboutsummaryrefslogtreecommitdiff
path: root/inhex
diff options
context:
space:
mode:
Diffstat (limited to 'inhex')
-rw-r--r--inhex/README94
-rw-r--r--inhex/descriptor_sense.hex30
-rw-r--r--inhex/fixed_sense.hex5
-rw-r--r--inhex/forwarded_sense.hex16
-rw-r--r--inhex/get_elem_status.hex51
-rw-r--r--inhex/get_lba_status.hex14
-rw-r--r--inhex/inq_standard.hex23
-rw-r--r--inhex/logs_last_n.hex41
-rw-r--r--inhex/nvme_dev_self_test.hex20
-rw-r--r--inhex/nvme_identify_ctl.hex27
-rw-r--r--inhex/nvme_read_ctl.hex39
-rw-r--r--inhex/nvme_read_oob_ctl.hex47
-rw-r--r--inhex/nvme_write_ctl.hex38
-rw-r--r--inhex/opcodes.hex27
-rw-r--r--inhex/ref_sense.hex7
-rw-r--r--inhex/rep_density.hex18
-rw-r--r--inhex/rep_density_media.hex13
-rw-r--r--inhex/rep_density_media_typem.hex13
-rw-r--r--inhex/rep_density_typem.hex31
-rw-r--r--inhex/rep_realms.hex35
-rw-r--r--inhex/rep_zdomains.hex29
-rw-r--r--inhex/rep_zones.hex39
-rw-r--r--inhex/ses_areca_all.hex195
-rw-r--r--inhex/vpd_bdce.hex18
-rw-r--r--inhex/vpd_consistuents.hex47
-rw-r--r--inhex/vpd_cpr.hex18
-rw-r--r--inhex/vpd_dev_id.hex9
-rw-r--r--inhex/vpd_di_all.hex51
-rw-r--r--inhex/vpd_fp.hex31
-rw-r--r--inhex/vpd_lbpro.hex7
-rw-r--r--inhex/vpd_lbpv.hex9
-rw-r--r--inhex/vpd_ref.hex9
-rw-r--r--inhex/vpd_sbl.hex10
-rw-r--r--inhex/vpd_sdeb.hex99
-rw-r--r--inhex/vpd_sfs.hex7
-rw-r--r--inhex/vpd_tpc.hex43
-rw-r--r--inhex/vpd_zbdc.hex29
-rw-r--r--inhex/vpd_zbdc.rawbin0 -> 64 bytes
-rw-r--r--inhex/z_act_query.hex28
39 files changed, 1267 insertions, 0 deletions
diff --git a/inhex/README b/inhex/README
new file mode 100644
index 00000000..77557a05
--- /dev/null
+++ b/inhex/README
@@ -0,0 +1,94 @@
+ Hex data for various sg3_utils utilities
+ ========================================
+
+The files in this folder contain hexadecimal data (in ASCII) and associated
+comments (prefixed with the hash mark symbol: '#' ). Files containing
+hexadecimal data have the extension ".hex". There is at least one file
+containing binary data and it has the extension ".raw".
+
+The utility that each hex file is associated with can be determined in most
+case by prepending "sg_" to these filenames. Then go to the 'src' folder (a
+sibling folder to this one) and look for a match or partial match on
+the name.
+
+For example:
+ vpd_dev_id.hex
+after prepending 'sg_' becomes:
+ sg_vpd_dev_id.hex
+which is a partial match on the sg_vpd utility.
+The remaining 'dev_id.hex' is meant to suggest the 'device identifier'
+VPD page which is a mandatory VPD page for SCSI devices..
+
+Assuming sg3_utils is installed, it can be tested like this:
+ sg_vpd --inhex=<folder_holding_sg3_utils>/inhex/vpd_dev_id.hex
+
+And should output this:
+
+Device Identification VPD page:
+ Addressed logical unit:
+ designator type: NAA, code set: Binary
+ 0x5000c5003011cb2b
+ Target port:
+ designator type: NAA, code set: Binary
+ transport: Serial Attached SCSI Protocol (SPL-4)
+ 0x5000c5003011cb29
+ designator type: Relative target port, code set: Binary
+ transport: Serial Attached SCSI Protocol (SPL-4)
+ Relative target port: 0x1
+ Target device that contains addressed lu:
+ designator type: NAA, code set: Binary
+ transport: Serial Attached SCSI Protocol (SPL-4)
+ 0x5000c5003011cb28
+ designator type: SCSI name string, code set: UTF-8
+ SCSI name string:
+ naa.5000C5003011CB28
+
+Not all the hex files follow the "prepend sg_" pattern. Those hex files
+starting with 'nvme_' are examples of invoking NVMe commands with the
+sg_raw utility.
+
+Binary <--> Hexadecimal
+-----------------------
+The vpd_zbdc.raw file is binary and was created by:
+ sg_decode_sense --inhex=vpd_zbdc.hex --nodecode --write=vpd_zbdc.raw
+as an example of converting a file in ASCII hexadecimal byte oriented
+format to binary.
+
+Turning binary output into hexadecimal can be done several ways. For
+viewing in byte oriented ASCII hex these Unix commands can be used:
+ od -t x1 vpd_zbdc.raw
+ hexdump -C vpd_zbdc.raw
+
+Each line starting with a "input offset" which is a running count of
+bytes, starting at zero. The hexdump examples shows an ASCII rendering
+of those 16 bytes to the right of each line. The sg_decode_sense utility
+may also be used:
+ sg_decode_sense --binary=vpd_zbdc.raw -H
+ sg_decode_sense --binary=vpd_zbdc.raw -HH
+
+The second form of sg_decode_sense appends an ASCII rendering of the 16
+bytes to the right of each line.
+
+When ASCII hexadecimal is being used as input to a utility in this
+package, the "input offset" at the start of each line (and the optional
+ASCII rendering to the right of each line) must not be given.
+That can be done with hexdump:
+ hexdump -An -C -v vpd_zbdc.raw
+ ^^^
+That is a syntax error, there is no 'A' option <<<<<<<< check
+
+And the sg_decode_sense utility can do it with (with the --nodecode option):
+ sg_decode_sense -N --binary=vpd_zbdc.raw -HHH
+That will print suitable lines of hexadecimal (16 bytes per line) to the
+console (stdout) To go the other way (i.e. hexadecimal to binary):
+ sg_decode_sense -N --inhex=vpd_zbdc.hex --write=vpd_zbdc.bin
+
+
+Conclusion
+----------
+Users are encouraged to send the author any ASCII hex files for utilities
+that support --inhex and don't have hex data already. Special cases are
+also welcome. They help the author test this code.
+
+Douglas Gilbert
+18th July 2022
diff --git a/inhex/descriptor_sense.hex b/inhex/descriptor_sense.hex
new file mode 100644
index 00000000..c0fcba97
--- /dev/null
+++ b/inhex/descriptor_sense.hex
@@ -0,0 +1,30 @@
+# Test descriptor format sense data. Values are in hex.
+# Invocation: 'sg_decode_sense -f descriptor_sense.hex' [dpg 20220626]
+
+
+# unrec_err, excessive_writes, sdat_ovfl, additional_len=?
+72 01 03 02 80 00 00 4c
+
+# Information: 0x11223344556677bb
+00 0a 80 00 11 22 33 44 55 66 77 bb
+
+# command specific: 0x3344556677bbccff
+01 0a 00 00 33 44 55 66 77 bb cc ff
+
+# sense key specific: SKSV=1, actual_count=257 (hex: 0x101)
+02 06 00 00 80 01 01 00
+
+# field replaceable code=0x45
+03 02 00 45
+
+# another progress report indicator
+0a 06 02 01 02 00 32 01
+
+# incorrect length indicator (ILI)
+05 02 00 20
+
+# user data segment referral
+0b 1a 01 00
+00 00 00 01 01 02 03 04 05 06 07 08
+01 02 03 04 55 06 07 08
+02 00 12 34
diff --git a/inhex/fixed_sense.hex b/inhex/fixed_sense.hex
new file mode 100644
index 00000000..1c6464b4
--- /dev/null
+++ b/inhex/fixed_sense.hex
@@ -0,0 +1,5 @@
+# Test fixed format sense data. Values are in hex.
+# Invocation: 'sg_decode_sense -f fixed_sense.hex' [dpg 20220622]
+
+f0 00 03 00 00 12 34 0a 00 00 00 00 11 00 77 80
+01 98
diff --git a/inhex/forwarded_sense.hex b/inhex/forwarded_sense.hex
new file mode 100644
index 00000000..968eb2b9
--- /dev/null
+++ b/inhex/forwarded_sense.hex
@@ -0,0 +1,16 @@
+# Test forwarded sense data. Values are in hex.
+# Invocation: 'sg_decode_sense -f forwarded_sense.hex' [dpg 20210330]
+
+# descriptor header
+72 6 18 7 0 0 0 1c
+
+# Forwarded sense [len=12]
+c a 1 2
+72 6 18 7 0 0 0 0
+
+# Information [len=12]
+0 a 80 0 11 22 33 44 55 66 77 88
+
+# FRU [len=4]
+3 2 0
+ 99
diff --git a/inhex/get_elem_status.hex b/inhex/get_elem_status.hex
new file mode 100644
index 00000000..5e72149e
--- /dev/null
+++ b/inhex/get_elem_status.hex
@@ -0,0 +1,51 @@
+#
+# The is a real response to the SCSI GET PHYSICAL ELEMENT STATUS command.
+# The storage elements are associated with heads on this hard disk and
+# one of them (element_id: 10) is "out of spec". The same output was
+# obtained with --report-type=1 (report only storage elements) as this
+# invocation (where --report-type defaults to 0: report all physical
+# elements):
+# sg_get_elem_status -HHH <dev>
+#
+# The hard disk had 9 platters and thus had 18 heads as both side of each
+# platter are used.
+
+00 00 00 12 00 00 00 12 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 01 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 02 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 03 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 04 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 05 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 06 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 07 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 08 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 09 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 0a 00 00 00 00 00 00 01 65
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 0b 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 0c 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 0d 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 0e 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 0f 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 10 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 11 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 12 00 00 00 00 00 00 01 01
+ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00
+
diff --git a/inhex/get_lba_status.hex b/inhex/get_lba_status.hex
new file mode 100644
index 00000000..97934fa6
--- /dev/null
+++ b/inhex/get_lba_status.hex
@@ -0,0 +1,14 @@
+
+
+0 0 0 24
+0 0 0 6
+
+0 0 0 0 0 0 0 0
+11 22 33 0
+
+0 0 0 0
+
+0 0 0 0 11 22 33 0
+0 0 0 44
+
+1 1 0 0
diff --git a/inhex/inq_standard.hex b/inhex/inq_standard.hex
new file mode 100644
index 00000000..73c80f37
--- /dev/null
+++ b/inhex/inq_standard.hex
@@ -0,0 +1,23 @@
+# This file contains the ASCII hex of a SCSI INQUIRY command
+# 'standard' response. In this case non-standard responses refers
+# to responses contain VPD page that are also fetched with the
+# SCSI INQUIRY command.
+
+# The response in this file can be decoded with:
+# sg_inq --inhex=inq_standard.hex
+# or
+# sg_vpd --inhex=inq_standard.hex --page=sinq
+#
+# The sg_inq utility defaults to the 'standard' INQUIRY while the
+# sg_vpd utility defaults to the "Supported VPD pages" VPD page.
+# Hence sg_vpd needs the extra option '--page=sinq' which says the
+# VPD page is the standard inquiry. Strictly speaking the standard
+# INQUIRY is not a VPD page but probably would be if SCSI was not
+# 40 years old and highly values backward compatibility.
+
+00 00 07 02 5b 00 10 0a 4c 69 6e 75 78 20 20 20
+73 63 73 69 5f 64 65 62 75 67 20 20 20 20 20 20
+30 31 39 31 32 30 32 31 30 35 32 30 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 c0 05 c0 06 00
+21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
diff --git a/inhex/logs_last_n.hex b/inhex/logs_last_n.hex
new file mode 100644
index 00000000..b6384d17
--- /dev/null
+++ b/inhex/logs_last_n.hex
@@ -0,0 +1,41 @@
+# This file contains the ASCII hex of a SCSI LOG SENSE command responses
+# for the various "Last n" log (sub)pages concaternated together.
+
+# The response in this file can be decoded with:
+# sg_logs --inhex=logs_last_n.hex
+# or
+# sg_logs --inhex=logs_last_n.hex --brief
+# or
+# sg_logs --inhex=logs_last_n.hex --exclude
+
+# Last n mode page data changed log subpage
+4b 02 00 28
+00 00 03 0c 00 00 00 04 00 00 00 02 00 00 00 01
+00 01 03 04 0a 00 00 00
+00 02 03 04 5a 01 00 00
+00 03 03 04 5c 02 00 00
+
+# Last n INQUIRY data changed log subpage
+4b 01 00 28
+00 00 03 0c 00 00 00 01 00 00 00 03 00 00 00 02
+00 01 03 04 00 00 00 00
+00 02 03 04 01 80 00 00
+00 03 03 04 01 83 00 00
+
+# Last n deferred errors or asynchronous events log subpage
+0b 00 00 5a
+00 00 03 40
+73,0,0,0,0,0,0 38
+b,36,1,0
+0,0,0,2,11,11,11,11,22,22,22,22,55,55,55,55,66,66,66,66 1,0,0,7, 2,0,0,8
+0,0,0,1,77,77,77,77,77,77,77,77,88,88,88,88,88,88,88,88, 3,0,0,5
+00 01 03 12
+f1 00 03 00 00 12 34 0a 00 00 00 00 11 00 00 00 00 00
+
+# Last n error events log page
+07 00 00 31
+00 00 01 0c
+6d 65 64 69 75 6d 20 65 72 72 6f 72
+00 01 01 1d
+55 41 3a 20 63 61 70 61 63 69 74 79 20 64 61 74
+61 20 68 61 73 20 63 68 61 6e 67 65 64
diff --git a/inhex/nvme_dev_self_test.hex b/inhex/nvme_dev_self_test.hex
new file mode 100644
index 00000000..1ef87c62
--- /dev/null
+++ b/inhex/nvme_dev_self_test.hex
@@ -0,0 +1,20 @@
+# 64 byte NVMe Device Self Test command (an Admin command) that is suitable
+# for:
+# sg_raw --cmdfile=<this_file_name> <nvme_device>
+#
+# There is no data-in or data-out associated with this command. This command
+# is optional so check the Identify controller command response to see if
+# it is supported.
+#
+# The following invocation will self test the controller and all its
+# namespaces (since nsid=0xffffffff) and does a "short" self test on each
+# one (since CDW10 is 0x1).
+
+14 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# A typical invocation in Linux and FreeBSD would look like this:
+# sg_raw --cmdfile=nvme_dev_self_test.hex /dev/nvme0
+#
diff --git a/inhex/nvme_identify_ctl.hex b/inhex/nvme_identify_ctl.hex
new file mode 100644
index 00000000..f22141e2
--- /dev/null
+++ b/inhex/nvme_identify_ctl.hex
@@ -0,0 +1,27 @@
+# 64 byte NVMe Identify controller command (an Admin command) that is
+# suitable for:
+# sg_raw --cmdfile=<this_file_name> --request=4096 <nvme_device>
+#
+# The address field (at byte offset 24, 8 bytes and little endian) gives
+# special meaning to the highest address pointers:
+# ffffffff fffffffe use address of data-in buffer
+# ffffffff fffffffd use address of data-out buffer
+#
+# The data length field (at byte offset 36, 4 bytes and little endian)
+# gives special meaning to the highest block counts:
+# fffffffe use byte length of data-in buffer
+# fffffffd use byte length of data-out buffer
+#
+# Since The Identify command reads data "in" from the device, then the
+# data-in buffer is appropriate.
+
+06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 fe ff ff ff ff ff ff ff
+00 00 00 00 fe ff ff ff 01 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# A typical invocation in Linux and FreeBSD would look like this:
+# sg_raw --cmdfile=nvme_identify_ctl.hex -r 4k /dev/nvme0
+#
+# NVMe likes "4k" (4096 bytes) buffer size, preferably aligned to
+# a 4096 byte (or "page") boundary.
diff --git a/inhex/nvme_read_ctl.hex b/inhex/nvme_read_ctl.hex
new file mode 100644
index 00000000..7996a1ae
--- /dev/null
+++ b/inhex/nvme_read_ctl.hex
@@ -0,0 +1,39 @@
+# 64 byte NVMe, Read command (a NVM command) that is suitable for:
+# sg_raw --cmdfile=<this_file_name> --nvm --request=2048 <nvme_device>
+#
+# The address field (at byte offset 24, 8 bytes and little endian) gives
+# special meaning to the highest address pointers:
+# ffffffff fffffffe use address of data-in buffer
+# ffffffff fffffffd use address of data-out buffer
+#
+# The data length field (at byte offset 36, 4 bytes and little endian)
+# gives special meaning to the highest block counts:
+# fffffffe use byte length of data-in buffer
+# fffffffd use byte length of data-out buffer
+#
+# 512 byte logical block size is assumed. Read 4 blocks hence 2048 bytes.
+# The first LBA read is 0x12345 and the namespace is 1. If successful
+# the four blocks will be read into the data-in buffer. Submission queue
+# 0 is used (the same queue that Admin commands use). The NVM opcode for
+# the Read command is 0x2 and appears in the first command byte.
+
+02 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 fe ff ff ff ff ff ff ff
+00 00 00 00 fe ff ff ff 45 23 01 00 00 00 00 00
+03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# Notice NVMe uses its quirky "0's based" number of blocks so
+# 03 appears at byte offset 48 to mean "read 4 blocks".
+#
+# A typical invocation in Linux and FreeBSD would look like this:
+# sg_raw --cmdfile=nvme_read_ctl.hex --nvm -r 2048
+# --outfile=t.bin /dev/nvme0n1
+# In FreeBSD the device name would be /dev/nvme0ns1
+#
+# Notice the '--nvm' option which is needed to distinguish a NVM
+# command from an Admin command as Admin commands are the default
+# in this utility.
+#
+# This utility (and most others in the package) aligns data-in and
+# data-out buffers to the beginning of pages which are 4096 bytes
+# long at a minimum. This is the way NVMe likes things as well.
diff --git a/inhex/nvme_read_oob_ctl.hex b/inhex/nvme_read_oob_ctl.hex
new file mode 100644
index 00000000..81d7a305
--- /dev/null
+++ b/inhex/nvme_read_oob_ctl.hex
@@ -0,0 +1,47 @@
+# 64 byte NVMe, Read command (a NVM command) which what should be an
+# Out-of-Bounds LBA (around 377 TB with 512 byte sectors. This file is
+# suitable for:
+# sg_raw --cmdfile=<this_file_name> --nvm --request=2048 <nvme_device>
+#
+# The address field (at byte offset 24, 8 bytes and little endian) gives
+# special meaning to the highest address pointers:
+# ffffffff fffffffe use address of data-in buffer
+# ffffffff fffffffd use address of data-out buffer
+#
+# The data length field (at byte offset 36, 4 bytes and little endian)
+# gives special meaning to the highest block counts:
+# fffffffe use byte length of data-in buffer
+# fffffffd use byte length of data-out buffer
+#
+# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+# This NVMe (NVM) Read command purposely has a very large starting LBA
+# in order to get a "Attempted write to read only range" error. This is
+# to test error reporting.
+# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#
+# 512 byte logical block size is assumed. Read 4 blocks hence 2048 bytes.
+# The first LBA read is 0xabcd012345 and the namespace is 1. If successful
+# the four blocks will be read into the data-in buffer. Submission queue
+# 0 is used (the same queue that Admin commands use). The NVM opcode for
+# the Read command is 0x2 and appears in the first command byte.
+
+02 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 fe ff ff ff ff ff ff ff
+00 00 00 00 fe ff ff ff 45 23 01 cd ab 00 00 00
+03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# Notice NVMe uses its quirky "0's based" number of blocks so
+# 03 appears at byte offset 48 to mean "read 4 blocks".
+#
+# A typical invocation in Linux and FreeBSD would look like this:
+# sg_raw --cmdfile=nvme_read_oob_ctl.hex --nvm -r 2048
+# --outfile=t.bin /dev/nvme0n1
+# In FreeBSD the device name would be /dev/nvme0ns1
+#
+# Notice the '--nvm' option which is needed to distinguish a NVM
+# command from an Admin command as Admin commands are the default
+# in this utility.
+#
+# This utility (and most others in the package) aligns data-in and
+# data-out buffers to the beginning of pages which are 4096 bytes
+# long at a minimum. This is the way NVMe likes things as well.
diff --git a/inhex/nvme_write_ctl.hex b/inhex/nvme_write_ctl.hex
new file mode 100644
index 00000000..9e6c1123
--- /dev/null
+++ b/inhex/nvme_write_ctl.hex
@@ -0,0 +1,38 @@
+# 64 byte NVMe, Write command (a NVM command) that is suitable for:
+# sg_raw --cmdfile=<this_file_name> --nvm --request=2048 <nvme_device>
+#
+# The address field (at byte offset 24, 8 bytes and little endian) gives
+# special meaning to the highest address pointers:
+# ffffffff fffffffe use address of data-in buffer
+# ffffffff fffffffd use address of data-out buffer
+#
+# The data length field (at byte offset 36, 4 bytes and little endian)
+# gives special meaning to the highest block counts:
+# fffffffe use byte length of data-in buffer
+# fffffffd use byte length of data-out buffer
+#
+# 512 byte logical block size is assumed. Write 4 blocks hence 2048 bytes.
+# The first LBA written is 0x12345 and the namespace is 1. If successful the
+# four blocks will be written out of the data-out buffer. Submission queue
+# is used (the same queue that Admin commands use). The NVM opcode for the
+# Write command is 0x1 and appears in the first command byte.
+
+01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 fd ff ff ff ff ff ff ff
+00 00 00 00 fd ff ff ff 45 23 01 00 00 00 00 00
+03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# Notice NVMe uses its quirky "0's based" number of blocks so
+# 03 appears at byte offset 48 to mean "write 4 blocks".
+#
+# A typical invocation in Linux and FreeBSD would look like this:
+# sg_raw --cmdfile=nvme_write_ctl.hex --nvm -s 2048
+# --infile=t.bin /dev/nvme0
+#
+# Notice the '--nvm' option which is needed to distinguish a NVM
+# command from an Admin command as Admin commands are the default
+# in this utility.
+#
+# This utility (and most others in the package) aligns data-in and
+# data-out buffers to the beginning of pages which are 4096 bytes
+# long at a minimum. This is the way NVMe likes things as well.
diff --git a/inhex/opcodes.hex b/inhex/opcodes.hex
new file mode 100644
index 00000000..8833ab0b
--- /dev/null
+++ b/inhex/opcodes.hex
@@ -0,0 +1,27 @@
+00 00 01 a0 12 00 00 00 00 00 00 06 a0 00 00 00
+00 00 00 0c 03 00 00 00 00 00 00 06 00 00 00 00
+00 00 00 06 5a 00 00 00 00 00 00 0a 1a 00 00 00
+00 00 00 06 55 00 00 00 00 00 00 0a 15 00 00 00
+00 00 00 06 4d 00 00 00 00 00 00 0a 25 00 00 00
+00 00 00 0a 88 00 00 00 00 00 00 10 28 00 00 00
+00 00 00 0a 08 00 00 00 00 00 00 06 a8 00 00 00
+00 00 00 0c 8a 00 00 00 00 00 00 10 2a 00 00 00
+00 00 00 0a 0a 00 00 00 00 00 00 06 aa 00 00 00
+00 00 00 0c 1b 00 00 00 00 00 00 06 9e 00 00 10
+00 01 00 10 9e 00 00 12 00 01 00 10 9f 00 00 12
+00 01 00 10 a3 00 00 0a 00 01 00 0c a3 00 00 0c
+00 01 00 0c a3 00 00 0d 00 01 00 0c 8f 00 00 00
+00 00 00 10 2f 00 00 00 00 00 00 0a 7f 00 00 09
+00 01 00 20 7f 00 00 0b 00 01 00 20 7f 00 00 11
+00 01 00 20 56 00 00 00 00 00 00 0a 16 00 00 00
+00 00 00 06 57 00 00 00 00 00 00 0a 17 00 00 00
+00 00 00 06 1e 00 00 00 00 00 00 06 01 00 00 00
+00 00 00 06 1d 00 00 02 00 00 00 06 42 00 00 00
+00 00 00 0a 3b 00 00 00 00 00 00 0a 41 00 00 00
+00 00 00 0a 93 00 00 00 00 00 00 10 35 00 00 00
+00 00 00 0a 91 00 00 00 00 00 00 10 89 00 00 00
+00 00 00 10 34 00 00 00 00 00 00 0a 90 00 00 00
+00 00 00 10 94 00 00 03 00 01 00 10 94 00 00 01
+00 01 00 10 94 00 00 02 00 01 00 10 94 00 00 04
+00 01 00 10 95 00 00 00 00 01 00 10 95 00 00 06
+00 01 00 10
diff --git a/inhex/ref_sense.hex b/inhex/ref_sense.hex
new file mode 100644
index 00000000..e6a6a374
--- /dev/null
+++ b/inhex/ref_sense.hex
@@ -0,0 +1,7 @@
+# Test User data segment referral sense data. Values are in hex.
+# Invocation: 'sg_decode_sense -f ref_sense.hex' [dpg 20210330]
+
+72,0,0,0,0,0,0 38
+b,36,1,0
+0,0,0,2,11,11,11,11,22,22,22,22,55,55,55,55,66,66,66,66 1,0,0,7, 2,0,0,8
+0,0,0,1,77,77,77,77,77,77,77,77,88,88,88,88,88,88,88,88, 3,0,0,5
diff --git a/inhex/rep_density.hex b/inhex/rep_density.hex
new file mode 100644
index 00000000..0aba1b50
--- /dev/null
+++ b/inhex/rep_density.hex
@@ -0,0 +1,18 @@
+#
+# This file contains the response to SCSI REPORT DENSITY SUPPORTED command
+# using the sg_rep_density utility. This file was generated with:
+# sg_rep_density -HHH /dev/sg4 > rep_density.hex
+# where /dev/sg4 was a LTO-4 tape drive. To decode that file containing
+# hexadecimal in ASCII use:
+# sg_rep_density --inhex=rep_density.hex
+
+00 9e 00 00 44 44 00 00 00 00 25 a6 00 7f 02 c0
+00 06 1a 80 4c 54 4f 2d 43 56 45 20 55 2d 33 31
+36 20 20 20 55 6c 74 72 69 75 6d 20 33 2f 31 36
+54 20 20 20 20 20 20 20 46 46 80 00 00 00 31 b5
+00 7f 03 80 00 0c 35 00 4c 54 4f 2d 43 56 45 20
+55 2d 34 31 36 20 20 20 55 6c 74 72 69 75 6d 20
+34 2f 31 36 54 20 20 20 20 20 20 20 58 58 a0 00
+00 00 3b 26 00 7f 05 00 00 16 e3 60 4c 54 4f 2d
+43 56 45 20 55 2d 35 31 36 20 20 20 55 6c 74 72
+69 75 6d 20 35 2f 31 36 54 20 20 20 20 20 20 20
diff --git a/inhex/rep_density_media.hex b/inhex/rep_density_media.hex
new file mode 100644
index 00000000..22312fdf
--- /dev/null
+++ b/inhex/rep_density_media.hex
@@ -0,0 +1,13 @@
+#
+# This file contains the response to SCSI REPORT DENSITY SUPPORTED command
+# using the sg_rep_density utility. This file was generated with:
+# sg_rep_density --media -HHH /dev/sg4 > rep_density_media.hex
+# where /dev/sg4 was a LTO-4 tape drive. To decode that file containing
+# hexadecimal in ASCII use:
+# sg_rep_density --inhex=rep_density_media.hex
+# The --media option is not needed in the decode invocation.
+
+00 36 00 00 58 58 a0 00 00 00 3b 26 00 7f 05 00
+00 17 85 3e 4c 54 4f 2d 43 56 45 20 55 2d 35 31
+36 20 20 20 55 6c 74 72 69 75 6d 20 35 2f 31 36
+54 20 20 20 20 20 20 20
diff --git a/inhex/rep_density_media_typem.hex b/inhex/rep_density_media_typem.hex
new file mode 100644
index 00000000..57918fe8
--- /dev/null
+++ b/inhex/rep_density_media_typem.hex
@@ -0,0 +1,13 @@
+#
+# This file contains the response to SCSI REPORT DENSITY SUPPORTED command
+# using the sg_rep_density utility. This file was generated with:
+# sg_rep_density -M -t -HHH /dev/sg4 > rep_density_media_typem.hex
+# where /dev/sg4 was a LTO-4 tape drive. To decode that file containing
+# hexadecimal in ASCII use:
+# sg_rep_density --typem -i rep_density_media_typem.hex
+# The --typem option is required in the decode invocation.
+
+00 3a 00 00 00 00 00 34 01 58 00 00 00 00 00 00
+00 00 00 7f 03 4e 00 00 48 50 20 20 20 20 20 20
+4c 54 4f 35 44 61 74 61 55 6c 74 72 69 75 6d 20
+35 20 44 61 74 61 20 54 61 70 65 20
diff --git a/inhex/rep_density_typem.hex b/inhex/rep_density_typem.hex
new file mode 100644
index 00000000..315d6907
--- /dev/null
+++ b/inhex/rep_density_typem.hex
@@ -0,0 +1,31 @@
+#
+# This file contains the response to SCSI REPORT DENSITY SUPPORTED command
+# using the sg_rep_density utility. This file was generated with:
+# sg_rep_density --typem -HHH /dev/sg4 > rep_density_typem.hex
+# where /dev/sg4 was a LTO-4 tape drive. To decode that file containing
+# hexadecimal in ASCII use:
+# sg_rep_density --typem -i rep_density_typem.hex
+# The --typem option is required in the decode invocation.
+
+01 52 00 00 00 00 00 34 01 44 00 00 00 00 00 00
+00 00 00 7f 02 a8 00 00 48 50 20 20 20 20 20 20
+4c 54 4f 33 44 61 74 61 55 6c 74 72 69 75 6d 20
+33 20 44 61 74 61 20 54 61 70 65 20 00 00 00 34
+01 46 00 00 00 00 00 00 00 00 00 7f 03 34 00 00
+48 50 20 20 20 20 20 20 4c 54 4f 34 44 61 74 61
+55 6c 74 72 69 75 6d 20 34 20 44 61 74 61 20 54
+61 70 65 20 00 00 00 34 01 58 00 00 00 00 00 00
+00 00 00 7f 03 4e 00 00 48 50 20 20 20 20 20 20
+4c 54 4f 35 44 61 74 61 55 6c 74 72 69 75 6d 20
+35 20 44 61 74 61 20 54 61 70 65 20 01 00 00 34
+01 44 00 00 00 00 00 00 00 00 00 7f 02 a8 00 00
+48 50 20 20 20 20 20 20 4c 54 4f 33 57 4f 52 4d
+55 6c 74 72 69 75 6d 20 33 20 57 4f 52 4d 20 54
+61 70 65 20 01 00 00 34 01 46 00 00 00 00 00 00
+00 00 00 7f 03 34 00 00 48 50 20 20 20 20 20 20
+4c 54 4f 34 57 4f 52 4d 55 6c 74 72 69 75 6d 20
+34 20 57 4f 52 4d 20 54 61 70 65 20 01 00 00 34
+01 58 00 00 00 00 00 00 00 00 00 7f 03 4e 00 00
+48 50 20 20 20 20 20 20 4c 54 4f 35 57 4f 52 4d
+55 6c 74 72 69 75 6d 20 35 20 57 4f 52 4d 20 54
+61 70 65 20
diff --git a/inhex/rep_realms.hex b/inhex/rep_realms.hex
new file mode 100644
index 00000000..08df66b9
--- /dev/null
+++ b/inhex/rep_realms.hex
@@ -0,0 +1,35 @@
+# This is the output (in hex) of the SCSI REPORT REALMS command.
+# This page is constructed from the command description in zbc2r10
+# with three realms, and two zone domains
+
+# A typical example:
+# sg_rep_zones --realm --inhex=rep_realms.hex
+
+
+# parameter data header (64 bytes)
+00 00 00 90 00 00 00 03 00 00 00 30 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# first zone domain descriptor
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+# first realm descriptor, zone domain 0 start,last
+00 00 00 00 00 00 00 00 00 00 00 00 00 03 ff ff
+# first realm descriptor, zone domain 1 start,last
+00 00 00 00 00 04 00 00 00 00 00 00 00 07 ff ff
+
+# second zone domain descriptor
+00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00
+# second realm descriptor, zone domain 0 start,last
+00 00 00 00 00 08 00 00 00 00 00 00 00 0b ff ff
+# second realm descriptor, zone domain 1 start,last
+00 00 00 00 00 0c 00 00 00 00 00 00 00 0f ff ff
+
+# third realm descriptor
+00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00
+# second realm descriptor, zone domain 0 start,last
+00 00 00 00 00 10 00 00 00 00 00 00 00 13 ff ff
+# second realm descriptor, zone domain 1 start,last
+00 00 00 00 00 14 00 00 00 00 00 00 00 17 ff ff
+
diff --git a/inhex/rep_zdomains.hex b/inhex/rep_zdomains.hex
new file mode 100644
index 00000000..346f2c0b
--- /dev/null
+++ b/inhex/rep_zdomains.hex
@@ -0,0 +1,29 @@
+# This is the output (in hex) of the SCSI REPORT ZONE DOMAINS command.
+# This page is constructed from the command description in zbc2r10
+# with two zone domains.
+
+# A typical example:
+# sg_rep_zones --domain --inhex=rep_zdomains.hex
+
+# parameter data header (64 bytes)
+00 00 00 c0 00 00 00 c0 02 02 00 30 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# first zone domain
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00
+00 00 00 00 00 13 ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# second zone domain
+01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 03 00 00 00 00 00 04 00 00
+00 00 00 00 00 17 ff ff 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
diff --git a/inhex/rep_zones.hex b/inhex/rep_zones.hex
new file mode 100644
index 00000000..702c93c5
--- /dev/null
+++ b/inhex/rep_zones.hex
@@ -0,0 +1,39 @@
+# This is the output (in hex) of the SCSI REPORT ZONES command
+# from a simulated ZBC device from the scsi_debug driver in Linux.
+# The parameters to the scsi_debug driver given to modprobe were:
+# dev_size_mb=512 zbc=managed zone_size_mb=128 zone_nr_conv=1
+#
+# The hex bytes in this file were generated by:
+# sg_rep_zones /dev/sg1 -HHH > /tmp/rep_zones.hex
+# where /dev/sg1 was a scsi_debug device.
+
+# An example invocation:
+# sg_rep_zones --inhex=rep_zones.hex
+
+
+# parameter data header (64 bytes)
+00 00 01 00 00 00 00 00 00 00 00 00 00 0f ff ff
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# first zone descriptor, zone type: conventional
+01 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00
+00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+# second zone descriptor, zone type: sequential write required
+02 10 00 00 00 00 00 00 00 00 00 00 00 04 00 00
+00 00 00 00 00 04 00 00 00 00 00 00 00 04 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+# third zone descriptor, zone type: sequential write required
+02 10 00 00 00 00 00 00 00 00 00 00 00 04 00 00
+00 00 00 00 00 08 00 00 00 00 00 00 00 08 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+# fourth and last zone descriptor, zone type: sequential write required
+02 10 00 00 00 00 00 00 00 00 00 00 00 04 00 00
+00 00 00 00 00 0c 00 00 00 00 00 00 00 0c 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
diff --git a/inhex/ses_areca_all.hex b/inhex/ses_areca_all.hex
new file mode 100644
index 00000000..b744321c
--- /dev/null
+++ b/inhex/ses_areca_all.hex
@@ -0,0 +1,195 @@
+#
+# This file was generated by something like:
+# sg_ses --page=all -HHHH /dev/sg5 > ses_areca_all.hex
+# where /dev/sg5 was an Areca 8028 SAS-3 expander
+
+# An example invocation to decode the hex data below:
+# sg_ses --all --status --inhex=ses_areca_all.hex
+#
+# vvvvvvvvvv generated part of file below vvvvvvvvvvvvvv
+
+# Supported Diagnostic Pages dpage:
+00 00 00 0b 00 01 02 04 05 07 0a 0d 0e 0f 3f
+
+# Configuration (SES) dpage:
+01 00 01 28 00 00 00 00 11 00 09 2c d5 b4 01 50
+3f c0 ec 16 41 72 65 63 61 20 20 20 41 52 43 2d
+38 30 32 38 30 31 2e 33 33 2e 36 33 30 31 33 33
+11 22 33 44 55 00 00 00 17 18 00 18 0e 01 00 1c
+18 01 00 0c 03 05 00 1a 04 02 00 17 12 02 00 1a
+19 03 00 16 02 02 00 17 06 01 00 18 41 72 72 61
+79 44 65 76 69 63 65 73 49 6e 53 75 62 45 6e 63
+6c 73 72 30 45 6e 63 6c 6f 73 75 72 65 45 6c 65
+6d 65 6e 74 49 6e 53 75 62 45 6e 63 6c 73 72 30
+53 41 53 20 45 78 70 61 6e 64 65 72 43 6f 6f 6c
+69 6e 67 45 6c 65 6d 65 6e 74 49 6e 53 75 62 45
+6e 63 6c 73 72 30 54 65 6d 70 53 65 6e 73 6f 72
+73 49 6e 53 75 62 45 6e 63 6c 73 72 30 56 6f 6c
+74 61 67 65 53 65 6e 73 6f 72 73 49 6e 53 75 62
+45 6e 63 6c 73 72 30 43 6f 6e 6e 65 63 74 6f 72
+73 49 6e 53 75 62 45 6e 63 6c 73 72 30 50 6f 77
+65 72 53 75 70 70 6c 79 49 6e 53 75 62 45 6e 63
+6c 73 72 30 41 75 64 69 62 6c 65 41 6c 61 72 6d
+49 6e 53 75 62 45 6e 63 6c 73 72 30
+
+# Enclosure Status (SES) dpage:
+02 02 00 cc 00 00 00 00 00 00 00 00 05 00 00 00
+05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00
+05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00
+05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00
+05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00
+05 00 00 00 01 00 00 00 05 00 00 00 05 00 00 00
+05 00 00 00 05 00 00 00 05 00 00 00 00 00 00 00
+01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+05 00 00 10 05 00 00 10 05 00 00 10 05 00 00 10
+01 02 ee 07 00 00 00 00 01 00 45 00 01 00 56 00
+00 00 00 00 01 00 00 5e 01 00 00 b4 00 00 00 00
+01 05 00 00 01 05 00 00 01 05 00 00 00 00 00 00
+05 00 00 20 05 00 00 20 00 00 00 00 01 00 00 00
+
+# String In (SES) dpage:
+04 00 00 2e 57 65 20 68 61 76 65 20 69 6d 70 6c
+65 6d 65 6e 74 65 64 20 53 74 72 69 6e 67 20 49
+6e 20 44 69 61 67 6e 6f 73 74 69 63 20 50 61 67
+65 00
+
+# Threshold In (SES) dpage:
+05 00 00 c4 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 63 50 19 14 73 6e 19 14
+00 00 00 00 82 7f 70 6d 7a 77 69 66 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00
+
+# Element Descriptor (SES) dpage:
+07 00 03 0e 00 00 00 00 00 00 00 18 41 72 72 61
+79 44 65 76 69 63 65 73 49 6e 53 75 62 45 6e 63
+6c 73 72 30 00 00 00 08 53 4c 4f 54 20 30 31 00
+00 00 00 08 53 4c 4f 54 20 30 32 00 00 00 00 08
+53 4c 4f 54 20 30 33 00 00 00 00 08 53 4c 4f 54
+20 30 34 00 00 00 00 08 53 4c 4f 54 20 30 35 00
+00 00 00 08 53 4c 4f 54 20 30 36 00 00 00 00 08
+53 4c 4f 54 20 30 37 00 00 00 00 08 53 4c 4f 54
+20 30 38 00 00 00 00 08 53 4c 4f 54 20 30 39 00
+00 00 00 08 53 4c 4f 54 20 31 30 00 00 00 00 08
+53 4c 4f 54 20 31 31 00 00 00 00 08 53 4c 4f 54
+20 31 32 00 00 00 00 08 53 4c 4f 54 20 31 33 00
+00 00 00 08 53 4c 4f 54 20 31 34 00 00 00 00 08
+53 4c 4f 54 20 31 35 00 00 00 00 08 53 4c 4f 54
+20 31 36 00 00 00 00 08 53 4c 4f 54 20 31 37 00
+00 00 00 08 53 4c 4f 54 20 31 38 00 00 00 00 08
+53 4c 4f 54 20 31 39 00 00 00 00 08 53 4c 4f 54
+20 32 30 00 00 00 00 08 53 4c 4f 54 20 32 31 00
+00 00 00 08 53 4c 4f 54 20 32 32 00 00 00 00 08
+53 4c 4f 54 20 32 33 00 00 00 00 08 53 4c 4f 54
+20 32 34 00 00 00 00 1c 45 6e 63 6c 6f 73 75 72
+65 45 6c 65 6d 65 6e 74 49 6e 53 75 62 45 6e 63
+6c 73 72 30 00 00 00 12 45 6e 63 6c 6f 73 75 72
+65 45 6c 65 6d 65 6e 74 30 31 00 00 00 0c 53 41
+53 20 45 78 70 61 6e 64 65 72 00 00 00 09 45 78
+70 61 6e 64 65 72 30 00 00 00 1a 43 6f 6f 6c 69
+6e 67 45 6c 65 6d 65 6e 74 49 6e 53 75 62 45 6e
+63 6c 73 72 30 00 00 00 07 46 61 6e 20 30 31 00
+00 00 00 07 46 61 6e 20 30 32 00 00 00 00 07 46
+61 6e 20 30 33 00 00 00 00 07 46 61 6e 20 30 34
+00 00 00 00 07 43 50 55 46 61 6e 00 00 00 00 17
+54 65 6d 70 53 65 6e 73 6f 72 73 49 6e 53 75 62
+45 6e 63 6c 73 72 30 00 00 00 0c 45 4e 43 2e 20
+54 65 6d 70 20 20 00 00 00 00 0c 43 68 69 70 20
+54 65 6d 70 20 20 00 00 00 00 1a 56 6f 6c 74 61
+67 65 53 65 6e 73 6f 72 73 49 6e 53 75 62 45 6e
+63 6c 73 72 30 00 00 00 07 30 2e 39 35 56 20 00
+00 00 00 07 31 2e 38 56 20 20 00 00 00 00 16 43
+6f 6e 6e 65 63 74 6f 72 73 49 6e 53 75 62 45 6e
+63 6c 73 72 30 00 00 00 0c 43 6f 6e 6e 65 63 74
+6f 72 30 30 00 00 00 00 0c 43 6f 6e 6e 65 63 74
+6f 72 30 31 00 00 00 00 0c 43 6f 6e 6e 65 63 74
+6f 72 30 32 00 00 00 00 17 50 6f 77 65 72 53 75
+70 70 6c 79 49 6e 53 75 62 45 6e 63 6c 73 72 30
+00 00 00 0e 50 6f 77 65 72 53 75 70 70 6c 79 30
+31 00 00 00 00 0e 50 6f 77 65 72 53 75 70 70 6c
+79 30 32 00 00 00 00 18 41 75 64 69 62 6c 65 41
+6c 61 72 6d 49 6e 53 75 62 45 6e 63 6c 73 72 30
+00 00 00 0e 41 75 64 69 62 6c 65 2d 41 6c 61 72
+6d 00
+
+# Additional Element Status (SES-2) dpage:
+0a 00 03 bc 00 00 00 00 16 22 00 00 01 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 16 22 00 01
+01 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+16 22 00 02 01 00 00 02 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 16 22 00 03 01 00 00 03 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 16 22 00 04 01 00 00 04
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 16 22 00 05
+01 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+16 22 00 06 01 00 00 06 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 16 22 00 07 01 00 00 07 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 16 22 00 08 01 00 00 08
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 16 22 00 09
+01 00 00 09 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+16 22 00 0a 01 00 00 0a 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 16 22 00 0b 01 00 00 0b 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 16 22 00 0c 01 00 00 0c
+20 00 00 02 50 01 b4 d5 16 ec c0 3f 50 01 51 7e
+85 c3 ef ff 14 00 00 00 00 00 00 00 16 22 00 0d
+01 00 00 0d 20 00 00 02 50 01 b4 d5 16 ec c0 3f
+50 01 51 7e 85 c3 ef ff 15 00 00 00 00 00 00 00
+16 22 00 0e 01 00 00 0e 20 00 00 02 50 01 b4 d5
+16 ec c0 3f 50 01 51 7e 85 c3 ef ff 16 00 00 00
+00 00 00 00 16 22 00 0f 01 00 00 0f 20 00 00 02
+50 01 b4 d5 16 ec c0 3f 50 01 51 7e 85 c3 ef ff
+17 00 00 00 00 00 00 00 16 22 00 10 01 00 00 10
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 16 22 00 11
+01 00 00 11 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+16 22 00 12 01 00 00 12 10 00 00 08 50 01 b4 d5
+16 ec c0 3f 50 00 c5 00 30 11 cb 29 00 00 00 00
+00 00 00 00 16 22 00 13 01 00 00 13 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 16 22 00 14 01 00 00 14
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 16 22 00 15
+01 00 00 15 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+16 22 00 16 01 00 00 16 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 16 22 00 17 01 00 00 17 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 16 56 00 00 24 40 00 00
+50 01 b4 d5 16 ec c0 3f ff 0d ff 0c ff 0e ff 0f
+ff 09 ff 08 ff 0a ff 0b ff 05 ff 04 ff 06 ff 07
+ff 01 ff 00 ff 02 ff 03 02 ff 02 ff 02 ff 02 ff
+01 ff 01 ff 01 ff 01 ff 00 ff 00 ff 00 ff 00 ff
+ff 11 ff 10 ff 12 ff 13 ff 15 ff 14 ff 16 ff 17
+
+# Supported SES Diagnostic Pages (SES-2) dpage:
+0d 00 00 0c 01 02 04 05 07 0a 0d 0e 0f 00 00 00
+
+# Download Microcode (SES-2) dpage:
+0e 00 00 14 00 00 00 00 00 00 00 00 00 10 00 00
+00 00 00 00 00 00 00 00
+
+# Subenclosure Nickname (SES-2) dpage:
+0f 00 00 2c 00 00 00 00 00 00 00 00 00 00 00 00
+45 76 61 6c 20 42 6f 61 72 64 20 4e 69 63 6b 6e
+61 6d 65 20 53 69 6d 75 6c 61 74 6f 72 20 20 20
diff --git a/inhex/vpd_bdce.hex b/inhex/vpd_bdce.hex
new file mode 100644
index 00000000..d20c5304
--- /dev/null
+++ b/inhex/vpd_bdce.hex
@@ -0,0 +1,18 @@
+#
+# This is a manufactured response to an INQUIRY for the
+# Block device characteristics extension VPD page (0xb5 ["bdce"]).
+# It may have been generated by a call like this:
+# sg_vpd -p bdce /dev/sg3 -HHHH
+
+# Block device characteristics extension VPD page
+00 b5 00 7c
+00 03 05 0e 00 00 00 06 00 00 00 03
+
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
diff --git a/inhex/vpd_consistuents.hex b/inhex/vpd_consistuents.hex
new file mode 100644
index 00000000..4a67b74d
--- /dev/null
+++ b/inhex/vpd_consistuents.hex
@@ -0,0 +1,47 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_consistuents.hex
+
+
+# Device constituent VPD page header
+00 8b 00 c2
+
+# First constituent descriptor, fixed part
+00 03 00 00
+41 42 43 44 20 20 00 00
+41 42 43 44 45 46 47 48 41 42 43 44 44 44 44 44
+30 31 32 33
+00 00
+00 2a
+
+# inner constituent specific descriptor (for VPD page)
+01 00 00 10
+# ... the VPD page
+00 b3 00 0c 00 00 00 00
+00 20 00 00
+00 00 00 04
+
+# another inner constituent specific descriptor (for VPD page)
+01 00 00 12
+# ... the VPD page
+00 92 00 0e 00 00 00 00
+00 01 01 01 01 02 02 01
+09 09
+
+
+# Second constituent descriptor, fixed part
+00 03 00 00
+53 45 41 47 41 54 45 20
+53 54 32 30 30 46 4d 30 30 37 33 20 20 20 20 20
+30 30 30 37
+00 00
+00 50
+
+# inner constituent specific descriptor ("di" VPD page)
+01 00 00 4c
+# ... the VPD page
+00 83 00 48 01 03 00 08 50 00 c5 00 30 11 cb 2b
+61 93 00 08 50 00 c5 00 30 11 cb 29 61 94 00 04
+00 00 00 01 61 a3 00 08 50 00 c5 00 30 11 cb 28
+03 28 00 18 6e 61 61 2e 35 30 30 30 43 35 30 30
+33 30 31 31 43 42 32 38 00 00 00 00
diff --git a/inhex/vpd_cpr.hex b/inhex/vpd_cpr.hex
new file mode 100644
index 00000000..130c5c14
--- /dev/null
+++ b/inhex/vpd_cpr.hex
@@ -0,0 +1,18 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_cpr.hex
+
+# Dummy data for Concurrent positioning ranges VPD page
+00 b9 00 7c 00 00 00 00
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+# after 64 byte header there is the first LBA range descriptor (32 bytes)
+01 02 00 00 00 00 00 00
+00 00 00 00 00 00 00 00
+00 00 00 00 10 00 00 00
+ 00 00 00 00 00 00 00 00
+# second LBA range descriptor (32 bytes)
+02 02 00 00 00 00 00 00
+00 00 00 00 10 00 00 00
+00 00 00 00 10 00 00 00
+ 00 00 00 00 00 00 00 00
diff --git a/inhex/vpd_dev_id.hex b/inhex/vpd_dev_id.hex
new file mode 100644
index 00000000..e9cb9907
--- /dev/null
+++ b/inhex/vpd_dev_id.hex
@@ -0,0 +1,9 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_dev_id.hex
+
+00 83 00 48 01 03 00 08 50 00 c5 00 30 11 cb 2b
+61 93 00 08 50 00 c5 00 30 11 cb 29 61 94 00 04
+00 00 00 01 61 a3 00 08 50 00 c5 00 30 11 cb 28
+03 28 00 18 6e 61 61 2e 35 30 30 30 43 35 30 30
+33 30 31 31 43 42 32 38 00 00 00 00
diff --git a/inhex/vpd_di_all.hex b/inhex/vpd_di_all.hex
new file mode 100644
index 00000000..b0c93765
--- /dev/null
+++ b/inhex/vpd_di_all.hex
@@ -0,0 +1,51 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_di_all.hex
+
+00 83 01 04
+
+# Vendor specific designator
+01 00 00 16 11 22 33 44 55 66 77 88 99 aa bb cc
+dd ee ff ed cb a9 87 65 43 21
+
+# T10 vendor ID
+02 01 00 14
+41 42 43 20 20 20 20 20
+58 59 5a 31 32 33 34 35 36 37 38 39
+
+# EUI-64
+01 02 00 08 11 22 33 44 55 66 77 88
+01 02 00 0c 11 22 33 44 55 66 77 88 00 00 01 23
+01 02 00 10 01 23 45 67 89 ab cd ef 11 22 33 44 55 66 77 88
+
+# NAA
+01 03 00 08 51 22 33 44 55 66 77 88
+01 03 00 10 61 22 33 44 55 66 77 88 aa bb cc dd ee ff ee dd
+
+# Relative target port
+01 14 00 04 00 00 00 02
+
+# Target port group
+01 15 00 04 00 00 00 03
+
+# Logical unit group
+01 06 00 04 00 00 00 04
+
+# MD5 logical unitp
+01 07 00 10 ff ee dd cc bb aa 99 88 77 66 55 44 33 22 11 00
+
+# SCSI name string: iqn.5886.com.acme.diskarrays-sn-a8675309
+02 28 00 28
+69 71 6e 2e 35 38 38 36 2e 63 6f 6d 2e 61 63 6d
+65 2e 64 69 73 6b 61 72 72 61 79 73 2d 73 6e 2d
+61 38 36 37 35 33 30 39
+
+# Protocol specific
+# USB
+91 99 00 04 04 00 02 00
+# PCIe
+a1 99 00 08 01 23 00 00 00 00 00 00
+
+# UUID
+01 0a 00 12 10 00 11 22 33 44 55 66 77 88 99 aa
+bb cc dd ee fe dc
diff --git a/inhex/vpd_fp.hex b/inhex/vpd_fp.hex
new file mode 100644
index 00000000..967080f5
--- /dev/null
+++ b/inhex/vpd_fp.hex
@@ -0,0 +1,31 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_fp.hex
+
+# Dummy data for Format presets VPD page
+00 b8 00 80
+
+# after 4 byte header here is the first Format preset descriptor (64 bytes)
+00 00 01 00
+01 0 0 00
+01 00 00 00
+0 0 0 0
+00 00 00 00 00 ff ff ff # last LBA
+0 0 0 0 0 0 0 0 0 0 0 0 0 0
+00 00 # FMPTINFO, Protection field usage and protection interval exp
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0
+
+# second Format preset descriptor (64 bytes)
+00 00 01 01
+02 0 0 00
+01 00 00 00
+0 0 0 0
+00 00 00 00 01 ff ff ff # last LBA
+0 0 0 0 0 0 0 0 0 0 0 0 0 0
+00 00 # FMPTINFO, Protection field usage and protection interval exp
+# host-aware zones schema type specific information
+5 ff
+0 0 0 0 0 0 0 0 0 0
+20 00 00 00
+0 0 0 0
diff --git a/inhex/vpd_lbpro.hex b/inhex/vpd_lbpro.hex
new file mode 100644
index 00000000..188666c0
--- /dev/null
+++ b/inhex/vpd_lbpro.hex
@@ -0,0 +1,7 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_lbpro.hex
+
+01 b5 00 10 00 00 00 00
+03 01 20 e0
+07 02 10 80 00 00 00 00
diff --git a/inhex/vpd_lbpv.hex b/inhex/vpd_lbpv.hex
new file mode 100644
index 00000000..a89af17b
--- /dev/null
+++ b/inhex/vpd_lbpv.hex
@@ -0,0 +1,9 @@
+#
+# This is a manufactured response to an INQUIRY for the
+# Logical Block Provisioning VPD page (0xb2 ["lbpv"]). It may
+# have been generated by a call like this:
+# sg_vpd -p lbpv /dev/sg3 -HHHH
+
+# Logical block provisioning VPD page
+00 b2 00 10 00 01 00 00
+01 03 00 08 51 22 33 44 55 66 77 88
diff --git a/inhex/vpd_ref.hex b/inhex/vpd_ref.hex
new file mode 100644
index 00000000..618f911f
--- /dev/null
+++ b/inhex/vpd_ref.hex
@@ -0,0 +1,9 @@
+#
+# This is a manufactured response to an INQUIRY for the
+# Referrals VPD page (0xb3 ["ref"]). It may have been
+# generated by a call like this:
+# sg_vpd -p ref /dev/sg3 -HHHH
+
+# Referrals VPD page
+00 b3 00 0c 00 00 00 00
+11 22 33 44 00 00 10 00
diff --git a/inhex/vpd_sbl.hex b/inhex/vpd_sbl.hex
new file mode 100644
index 00000000..da9e9b1e
--- /dev/null
+++ b/inhex/vpd_sbl.hex
@@ -0,0 +1,10 @@
+#
+# This is a manufactured response to an INQUIRY for the
+# Supported block lengths and protection types VPD page (0xb4 ["sbl"]).
+# It may have been generated by a call like this:
+# sg_vpd -p sbl /dev/sg3 -HHHH
+
+# Supported block lengths and protection types VPD page
+00 b4 00 10
+00 00 02 00 47 07 00 00
+00 00 10 00 47 07 00 00
diff --git a/inhex/vpd_sdeb.hex b/inhex/vpd_sdeb.hex
new file mode 100644
index 00000000..2f50c896
--- /dev/null
+++ b/inhex/vpd_sdeb.hex
@@ -0,0 +1,99 @@
+#
+# The VPD responses in this file where generated from a dummy device
+# (ramdisk) associated with the Linux scsi_debug driver as follows:
+# sg_vpd -a /dev/sg3 -HHHH
+
+# Supported VPD pages VPD page
+00 00 00 0c 00 80 83 84 85 86 87 88 89 b0 b1 b2
+
+# Unit serial number VPD page
+00 80 00 04 32 30 30 30
+
+# Device identification VPD page
+00 83 00 70 02 01 00 1c 4c 69 6e 75 78 20 20 20
+73 63 73 69 5f 64 65 62 75 67 20 20 20 20 20 20
+32 30 30 30 01 03 00 08 33 33 33 30 00 00 07 d0
+61 94 00 04 00 00 00 01 61 93 00 08 32 22 22 20
+00 00 07 ce 61 95 00 04 00 00 01 00 61 a3 00 08
+32 22 22 20 00 00 07 cd 63 a8 00 18 6e 61 61 2e
+33 32 32 32 32 32 32 30 30 30 30 30 30 37 43 44
+00 00 00 00
+
+# Software interface identification VPD page
+00 84 00 12 22 22 22 00 bb 00 22 22 22 00 bb 01
+22 22 22 00 bb 02
+
+# Management network addresses VPD page
+00 85 00 44 01 00 00 20 68 74 74 70 73 3a 2f 2f
+77 77 77 2e 6b 65 72 6e 65 6c 2e 6f 72 67 2f 63
+6f 6e 66 69 67 00 00 00 04 00 00 1c 68 74 74 70
+3a 2f 2f 77 77 77 2e 6b 65 72 6e 65 6c 2e 6f 72
+67 2f 6c 6f 67 00 00 00
+
+# extended INQUIRY data VPD page
+00 86 00 3c 00 07 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# Mode page policy VPD page
+00 87 00 08 02 00 80 00 18 00 82 00
+
+# SCSI Ports VPD page
+00 88 00 30 00 00 00 01 00 00 00 00 00 00 00 0c
+61 93 00 08 32 22 22 20 00 00 07 ce 00 00 00 02
+00 00 00 00 00 00 00 0c 61 93 00 08 32 22 22 20
+00 00 07 cf
+
+# ATA information VPD page
+00 89 02 38 00 00 00 00 6c 69 6e 75 78 20 20 20
+53 41 54 20 73 63 73 69 5f 64 65 62 75 67 20 20
+31 32 33 34 34 00 00 00 01 00 00 00 00 00 00 00
+01 00 00 00 00 00 00 00 ec 00 00 00 5a 0c ff 3f
+37 c8 10 00 00 00 00 00 3f 00 00 00 00 00 00 00
+58 58 58 58 58 58 58 58 20 20 20 20 20 20 20 20
+20 20 20 20 00 00 00 40 04 00 2e 33 38 31 20 20
+20 20 54 53 38 33 30 30 33 31 53 41 20 20 20 20
+20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
+20 20 20 20 20 20 20 20 20 20 10 80 00 00 00 2f
+00 00 00 02 00 02 07 00 ff ff 01 00 3f 00 c1 ff
+3e 00 10 01 b0 f8 50 09 00 00 07 00 03 00 78 00
+78 00 f0 00 78 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 02 00 00 00 00 00 00 00 7e 00 1b 00
+6b 34 01 7d 03 40 69 34 01 3c 03 40 7f 40 00 00
+00 00 fe fe 00 00 00 00 00 fe 00 00 00 00 00 00
+00 00 00 00 b0 f8 50 09 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 01 00 b0 f8
+50 09 b0 f8 50 09 20 20 02 00 b6 42 00 80 8a 00
+06 3c 0a 3c ff ff c6 07 00 01 00 08 f0 0f 00 10
+02 00 30 00 00 00 00 00 00 00 06 fe 00 00 02 00
+50 00 8a 00 4f 95 00 00 21 00 0b 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 a5 51
+
+# Block limits VPD page
+00 b0 00 3c 00 00 00 01 00 00 40 00 00 00 04 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01
+00 00 00 00 00 00 00 00 00 00 ff ff 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# Block device characteristics VPD page
+00 b1 00 3c 00 01 00 05 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# Logical block provisioning VPD page
+00 b2 00 04 00 00 00 00
diff --git a/inhex/vpd_sfs.hex b/inhex/vpd_sfs.hex
new file mode 100644
index 00000000..f4c2ab07
--- /dev/null
+++ b/inhex/vpd_sfs.hex
@@ -0,0 +1,7 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_sfs.hex
+
+00 92 00 0e 00 00 00 00
+00 01 01 01 01 02 02 01
+09 09
diff --git a/inhex/vpd_tpc.hex b/inhex/vpd_tpc.hex
new file mode 100644
index 00000000..e3e9f387
--- /dev/null
+++ b/inhex/vpd_tpc.hex
@@ -0,0 +1,43 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_tpc.hex
+
+00 8f 00 8c
+
+00 00 00 20
+00 00 00 00 00 00 01 23 00 00 00 3c
+00 00 00 1e 00 00 00 99 88 77 66 55 00 00 00 44
+55 66 77 88
+
+00 01 00 10
+0d
+00 00
+03 00
+12 00
+83 02 10 11
+84 01 07
+00 00 # pad
+
+00 04 00 1c
+00 00 00 00 00 1c 00 40 00 01 22 33
+00 99 88 77 00 00 00 00 00 00 00 00 00 00 00 00
+
+00 08 00 04
+02
+02 e9
+00 # pad
+
+00 0c 00 0c
+00 08
+00 00
+00 01
+c0 00
+ff ff
+00 00 # pad
+
+00 0d 00 14
+12
+# UUID
+10 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee
+fe dc
+00 # pad
diff --git a/inhex/vpd_zbdc.hex b/inhex/vpd_zbdc.hex
new file mode 100644
index 00000000..d8d1ad3b
--- /dev/null
+++ b/inhex/vpd_zbdc.hex
@@ -0,0 +1,29 @@
+#
+# An example invocation:
+# sg_vpd --inhex=vpd_zbdc.hex
+
+# Zoned block device characteristics VPD page [0xb6]
+# Host managed zoned block device model; pdt=0x14
+14 b6 00 3c
+# ZBD extension=0; AAORb=0; URSWRZ=0
+00 00 00 00
+
+# Optimal # of open sequential write preferred
+00 00 00 00
+
+# Optimal # of open non-sequentailly written sequential write preferred
+00 00 00 00
+
+# maximum # of open sequential write required
+00 00 00 08
+
+# Zone alignment mode=1 (constant zone lengths)
+00 00 00 01
+
+# Zone starting LBA granularity
+00 00 00 02 00 00 00 00
+
+
+# pad to total length of 64 bytes
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
diff --git a/inhex/vpd_zbdc.raw b/inhex/vpd_zbdc.raw
new file mode 100644
index 00000000..249dbd50
--- /dev/null
+++ b/inhex/vpd_zbdc.raw
Binary files differ
diff --git a/inhex/z_act_query.hex b/inhex/z_act_query.hex
new file mode 100644
index 00000000..16d094e0
--- /dev/null
+++ b/inhex/z_act_query.hex
@@ -0,0 +1,28 @@
+# This is the output (in hex) of a simulated SCSI ZONE QUERY command.
+#
+# The hex bytes in this file may be generated by:
+# sg_z_act_query /dev/sg1 -HHH > /tmp/z_act_query.hex
+# where /dev/sg1 was a SCSI device implementing ZBC-2.
+
+# An example invocation:
+# sg_z_act_query --inhex=z_act_query.hex
+
+
+# parameter data header (64 bytes)
+00 00 00 80 00 00 00 80 80 00 03 00 00 00 00 00
+00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+# first zone activation descriptor, zone type: conventional
+01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 04
+00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00
+# second zone activation descriptor, zone type: sequential write required
+02 10 02 00 00 00 00 00 00 00 00 00 00 00 00 05
+00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00
+# third zone descriptor, zone type: sequential write required
+02 10 03 00 00 00 00 00 00 00 00 00 00 00 00 06
+00 00 00 60 00 00 00 00 00 00 00 00 00 00 00 00
+# fourth and last zone activation descriptor, zone type: sequential write required
+02 10 04 00 00 00 00 00 00 00 00 00 00 00 00 07
+00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00