Commit 0790797a authored by Douglas Gilbert's avatar Douglas Gilbert Committed by Martin K. Petersen

scsi: scsi_debug: Add environmental reporting log subpage

Log subpages are starting to appear in real devices (e.g. SSDs) so add
support for one. Adopt approach where all "wild" sub-pages are themselves
listed as long as there is at least one non-wild page or subpage for a
given page number.

Link: https://lore.kernel.org/r/20220109012853.301953-10-dgilbert@interlog.comSigned-off-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 7109f370
...@@ -2594,6 +2594,18 @@ static int resp_ie_l_pg(unsigned char *arr) ...@@ -2594,6 +2594,18 @@ static int resp_ie_l_pg(unsigned char *arr)
return sizeof(ie_l_pg); return sizeof(ie_l_pg);
} }
static int resp_env_rep_l_spg(unsigned char *arr)
{
unsigned char env_rep_l_spg[] = {0x0, 0x0, 0x23, 0x8,
0x0, 40, 72, 0xff, 45, 18, 0, 0,
0x1, 0x0, 0x23, 0x8,
0x0, 55, 72, 35, 55, 45, 0, 0,
};
memcpy(arr, env_rep_l_spg, sizeof(env_rep_l_spg));
return sizeof(env_rep_l_spg);
}
#define SDEBUG_MAX_LSENSE_SZ 512 #define SDEBUG_MAX_LSENSE_SZ 512
static int resp_log_sense(struct scsi_cmnd *scp, static int resp_log_sense(struct scsi_cmnd *scp,
...@@ -2646,26 +2658,47 @@ static int resp_log_sense(struct scsi_cmnd *scp, ...@@ -2646,26 +2658,47 @@ static int resp_log_sense(struct scsi_cmnd *scp,
arr[n++] = 0xff; /* this page */ arr[n++] = 0xff; /* this page */
arr[n++] = 0xd; arr[n++] = 0xd;
arr[n++] = 0x0; /* Temperature */ arr[n++] = 0x0; /* Temperature */
arr[n++] = 0xd;
arr[n++] = 0x1; /* Environment reporting */
arr[n++] = 0xd;
arr[n++] = 0xff; /* all 0xd subpages */
arr[n++] = 0x2f; arr[n++] = 0x2f;
arr[n++] = 0x0; /* Informational exceptions */ arr[n++] = 0x0; /* Informational exceptions */
arr[n++] = 0x2f;
arr[n++] = 0xff; /* all 0x2f subpages */
arr[3] = n - 4; arr[3] = n - 4;
break; break;
case 0xd: /* Temperature subpages */ case 0xd: /* Temperature subpages */
n = 4; n = 4;
arr[n++] = 0xd; arr[n++] = 0xd;
arr[n++] = 0x0; /* Temperature */ arr[n++] = 0x0; /* Temperature */
arr[n++] = 0xd;
arr[n++] = 0x1; /* Environment reporting */
arr[n++] = 0xd;
arr[n++] = 0xff; /* these subpages */
arr[3] = n - 4; arr[3] = n - 4;
break; break;
case 0x2f: /* Informational exceptions subpages */ case 0x2f: /* Informational exceptions subpages */
n = 4; n = 4;
arr[n++] = 0x2f; arr[n++] = 0x2f;
arr[n++] = 0x0; /* Informational exceptions */ arr[n++] = 0x0; /* Informational exceptions */
arr[n++] = 0x2f;
arr[n++] = 0xff; /* these subpages */
arr[3] = n - 4; arr[3] = n - 4;
break; break;
default: default:
mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5); mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
return check_condition_result; return check_condition_result;
} }
} else if (subpcode > 0) {
arr[0] |= 0x40;
arr[1] = subpcode;
if (pcode == 0xd && subpcode == 1)
arr[3] = resp_env_rep_l_spg(arr + 4);
else {
mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
return check_condition_result;
}
} else { } else {
mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1); mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
return check_condition_result; return check_condition_result;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment