aboutsummaryrefslogtreecommitdiff
path: root/src/sg_modes.c
diff options
context:
space:
mode:
authorDouglas Gilbert <dgilbert@interlog.com>2020-01-25 12:58:12 +0000
committerDouglas Gilbert <dgilbert@interlog.com>2020-01-25 12:58:12 +0000
commite541eac9a0aa7a5e9eaa9d1c9e3c58d7605963b0 (patch)
tree6fe48e57ba62239b1f043fcee45bab93688da043 /src/sg_modes.c
parent68c8a6cc83711259bd90e6296c63ee384d477b18 (diff)
downloadsg3_utils-e541eac9a0aa7a5e9eaa9d1c9e3c58d7605963b0.tar.gz
sbc4r18+spc6r01 partial catch-up; sg_format: add FORMAT WITH PRESET support
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@839 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src/sg_modes.c')
-rw-r--r--src/sg_modes.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/sg_modes.c b/src/sg_modes.c
index dc8c4691..06d96334 100644
--- a/src/sg_modes.c
+++ b/src/sg_modes.c
@@ -32,7 +32,7 @@
#include "sg_unaligned.h"
#include "sg_pr2serr.h"
-static const char * version_str = "1.69 20200111";
+static const char * version_str = "1.71 20200121";
#define DEF_ALLOC_LEN (1024 * 4)
#define DEF_6_ALLOC_LEN 252
@@ -253,6 +253,15 @@ static struct page_code_desc pc_desc_t_adc[] = {
{0x0, 0x0, NULL, NULL},
};
+static struct page_code_desc pc_desc_zbc[] = {
+ {0x1, 0x0, "rw", "Read-Write error recovery"},
+ {0x7, 0x0, "ve", "Verify error recovery"},
+ {0x8, 0x0, "ca", "Caching"},
+ {0xa, 0x2, "atag", "Application tag"},
+ {0x1c, 0x1, "bc", "Background control"},
+ {0x0, 0x0, NULL, NULL},
+};
+
struct pc_desc_group pcd_gr_arr[] = {
{pc_desc_common, "common"},
{pc_desc_disk, "disk"},
@@ -263,6 +272,7 @@ struct pc_desc_group pcd_gr_arr[] = {
{pc_desc_ses, "enclosure"},
{pc_desc_rbc, "reduced block"},
{pc_desc_adc, "adc"},
+ {pc_desc_zbc, "zbc"},
{pc_desc_t_fcp, "transport: FCP"},
{pc_desc_t_spi4, "transport: SPI"},
{pc_desc_t_sas, "transport: SAS"},
@@ -821,6 +831,9 @@ get_mpage_tbl_size(int scsi_ptype, int * sizep)
case PDT_ADC: /* automation device/interface */
*sizep = count_desc_elems(pc_desc_adc);
return &pc_desc_adc[0];
+ case PDT_ZBC:
+ *sizep = count_desc_elems(pc_desc_zbc);
+ return &pc_desc_zbc[0];
}
*sizep = 0;
return NULL;
@@ -1421,7 +1434,7 @@ main(int argc, char * argv[])
hex2stdout(rsp_buff, headerlen, 1);
goto fini;
}
- if (0 == inq_pdt)
+ if ((PDT_DISK == inq_pdt) || (PDT_ZBC == inq_pdt))
printf(" Mode data length=%d, medium type=0x%.2x, WP=%d,"
" DpoFua=%d, longlba=%d\n", md_len, medium_type,
!!(specific & 0x80), !!(specific & 0x10), (int)longlba);
@@ -1448,7 +1461,7 @@ main(int argc, char * argv[])
len = 16;
density_code_off = 8;
}
- else if (0 == inq_pdt) {
+ else if ((PDT_DISK == inq_pdt) || (PDT_ZBC == inq_pdt)) {
printf("> Direct access device block descriptors:\n");
density_code_off = 4;
}