From a04aade7b06503ba019a29786c1c8ac45bff5190 Mon Sep 17 00:00:00 2001 From: Mark Harvey Date: Wed, 27 Apr 2011 06:43:03 +1000 Subject: [PATCH] Treat STK T10K A/B/C as unique types Signed-off-by: Mark Harvey --- usr/ssc.h | 6 +++-- usr/t10000_pm.c | 69 ++++++++++++++++++++++++++++++++++++++++++++----- usr/vtltape.c | 6 ++--- 3 files changed, 70 insertions(+), 11 deletions(-) diff --git a/usr/ssc.h b/usr/ssc.h index a087576e..cd9de290 100644 --- a/usr/ssc.h +++ b/usr/ssc.h @@ -13,7 +13,7 @@ #define ENCR_SET_DATA_ENCRYPTION 0x10 struct media_handling { - char media_type[8]; + char media_type[16]; char op[8]; unsigned char density; }; @@ -76,7 +76,9 @@ void init_ait2_ssc(struct lu_phy_attr *lu); void init_ait3_ssc(struct lu_phy_attr *lu); void init_ait4_ssc(struct lu_phy_attr *lu); void init_default_ssc(struct lu_phy_attr *lu); -void init_t10k_ssc(struct lu_phy_attr *lu); +void init_t10kA_ssc(struct lu_phy_attr *lu); +void init_t10kB_ssc(struct lu_phy_attr *lu); +void init_t10kC_ssc(struct lu_phy_attr *lu); void init_ult3580_td1(struct lu_phy_attr *lu); void init_ult3580_td2(struct lu_phy_attr *lu); void init_ult3580_td3(struct lu_phy_attr *lu); diff --git a/usr/t10000_pm.c b/usr/t10000_pm.c index d943392e..33b8fa62 100644 --- a/usr/t10000_pm.c +++ b/usr/t10000_pm.c @@ -78,9 +78,30 @@ static struct mode sm[] = { }; static struct media_handling t10kA_media_handling[] = { - { "T10KA", "RW", medium_density_code_10kA, }, - { "T10KB", "RW", medium_density_code_10kB, }, - { "T10KC", "RW", medium_density_code_10kC, }, + { "T10KA", "RW", Media_T10KA, }, + { "T10KA Cleaning", "RO", Media_T10KA_CLEAN, }, + { "T10KB", "RW", Media_T10KB, }, + { "T10KB Cleaning", "RO", Media_T10KB_CLEAN, }, + { "T10KC", "RW", Media_T10KC, }, + { "T10KC Cleaning", "RO", Media_T10KC_CLEAN, }, + }; + +static struct media_handling t10kB_media_handling[] = { + { "T10KA", "RW", Media_T10KA, }, + { "T10KA Cleaning", "RO", Media_T10KA_CLEAN, }, + { "T10KB", "RW", Media_T10KB, }, + { "T10KB Cleaning", "RO", Media_T10KB_CLEAN, }, + { "T10KC", "RW", Media_T10KC, }, + { "T10KC Cleaning", "RO", Media_T10KC_CLEAN, }, + }; + +static struct media_handling t10kC_media_handling[] = { + { "T10KA", "RW", Media_T10KA, }, + { "T10KA Cleaning", "RO", Media_T10KA_CLEAN, }, + { "T10KB", "RW", Media_T10KB, }, + { "T10KB Cleaning", "RO", Media_T10KB_CLEAN, }, + { "T10KC", "RW", Media_T10KC, }, + { "T10KC Cleaning", "RO", Media_T10KC_CLEAN, }, }; /* @@ -237,7 +258,9 @@ static int t10k_kad_validation(int encrypt_mode, int ukad, int akad) } -static char *pm_name_t10k = "T10000"; +static char *pm_name_t10kA = "T10000A"; +static char *pm_name_t10kB = "T10000B"; +static char *pm_name_t10kC = "T10000C"; static struct ssc_personality_template ssc_pm = { .valid_encryption_blk = valid_encryption_blk_t10k, @@ -355,11 +378,11 @@ uint8_t t10k_inquiry(struct scsi_cmd *cmd) return SAM_STAT_CHECK_CONDITION; } -void init_t10k_ssc(struct lu_phy_attr *lu) +void init_t10kA_ssc(struct lu_phy_attr *lu) { MHVTL_DBG(3, "*** Trace ***"); - ssc_pm.name = pm_name_t10k; + ssc_pm.name = pm_name_t10kA; ssc_pm.drive_native_density = medium_density_code_10kA; ssc_pm.media_capabilities = t10kA_media_handling; personality_module_register(&ssc_pm); @@ -371,3 +394,37 @@ void init_t10k_ssc(struct lu_phy_attr *lu) register_ops(lu, LOAD_DISPLAY, ssc_load_display); init_t10k_inquiry(lu); } + +void init_t10kB_ssc(struct lu_phy_attr *lu) +{ + MHVTL_DBG(3, "*** Trace ***"); + + ssc_pm.name = pm_name_t10kB; + ssc_pm.drive_native_density = medium_density_code_10kB; + ssc_pm.media_capabilities = t10kB_media_handling; + personality_module_register(&ssc_pm); + init_default_ssc_mode_pages(sm); + lu->mode_pages = sm; + register_ops(lu, SECURITY_PROTOCOL_IN, ssc_spin); + register_ops(lu, SECURITY_PROTOCOL_OUT, ssc_spout); + register_ops(lu, INQUIRY, t10k_inquiry); + register_ops(lu, LOAD_DISPLAY, ssc_load_display); + init_t10k_inquiry(lu); +} + +void init_t10kC_ssc(struct lu_phy_attr *lu) +{ + MHVTL_DBG(3, "*** Trace ***"); + + ssc_pm.name = pm_name_t10kC; + ssc_pm.drive_native_density = medium_density_code_10kC; + ssc_pm.media_capabilities = t10kC_media_handling; + personality_module_register(&ssc_pm); + init_default_ssc_mode_pages(sm); + lu->mode_pages = sm; + register_ops(lu, SECURITY_PROTOCOL_IN, ssc_spin); + register_ops(lu, SECURITY_PROTOCOL_OUT, ssc_spout); + register_ops(lu, INQUIRY, t10k_inquiry); + register_ops(lu, LOAD_DISPLAY, ssc_load_display); + init_t10k_inquiry(lu); +} diff --git a/usr/vtltape.c b/usr/vtltape.c index abf582c1..d952fff7 100644 --- a/usr/vtltape.c +++ b/usr/vtltape.c @@ -266,9 +266,9 @@ static struct tape_drives_table { { "03592J1A ", init_3592_j1a }, { "03592E05 ", init_3592_E05 }, { "03592E06 ", init_3592_E06 }, - { "T10000C ", init_t10k_ssc }, - { "T10000B ", init_t10k_ssc }, - { "T10000 ", init_t10k_ssc }, + { "T10000C ", init_t10kC_ssc }, + { "T10000B ", init_t10kB_ssc }, + { "T10000 ", init_t10kA_ssc }, { NULL, NULL}, };