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.com Signed-off-by: Douglas Gilbert <dgilbert@interlog.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
7109f3701a
commit
0790797aca
@ -2594,6 +2594,18 @@ static int resp_ie_l_pg(unsigned char *arr)
|
||||
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
|
||||
|
||||
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++] = 0xd;
|
||||
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++] = 0x0; /* Informational exceptions */
|
||||
arr[n++] = 0x2f;
|
||||
arr[n++] = 0xff; /* all 0x2f subpages */
|
||||
arr[3] = n - 4;
|
||||
break;
|
||||
case 0xd: /* Temperature subpages */
|
||||
n = 4;
|
||||
arr[n++] = 0xd;
|
||||
arr[n++] = 0x0; /* Temperature */
|
||||
arr[n++] = 0xd;
|
||||
arr[n++] = 0x1; /* Environment reporting */
|
||||
arr[n++] = 0xd;
|
||||
arr[n++] = 0xff; /* these subpages */
|
||||
arr[3] = n - 4;
|
||||
break;
|
||||
case 0x2f: /* Informational exceptions subpages */
|
||||
n = 4;
|
||||
arr[n++] = 0x2f;
|
||||
arr[n++] = 0x0; /* Informational exceptions */
|
||||
arr[n++] = 0x2f;
|
||||
arr[n++] = 0xff; /* these subpages */
|
||||
arr[3] = n - 4;
|
||||
break;
|
||||
default:
|
||||
mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
|
||||
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 {
|
||||
mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
|
||||
return check_condition_result;
|
||||
|
Loading…
Reference in New Issue
Block a user