scsi: scsi_debug: fix group_number mask
Various cdb masks incorrectly assumed the GROUP NUMBER field was 5 bits long. It is actually 6 bits long. Correct. Also fix mask failure (in same byte) to allow DLD0 in READ(16) and WRITE(16). Signed-off-by: Douglas Gilbert <dgilbert@interlog.com> Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
9a05101954
commit
b7e24581f3
@ -425,23 +425,23 @@ static const struct opcode_info_t mselect_iarr[1] = {
|
||||
|
||||
static const struct opcode_info_t read_iarr[3] = {
|
||||
{0, 0x28, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL,/* READ(10) */
|
||||
{10, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
|
||||
{10, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
|
||||
0, 0, 0, 0} },
|
||||
{0, 0x8, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL, /* READ(6) */
|
||||
{6, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||
{0, 0xa8, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL,/* READ(12) */
|
||||
{12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f,
|
||||
{12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
|
||||
0xc7, 0, 0, 0, 0} },
|
||||
};
|
||||
|
||||
static const struct opcode_info_t write_iarr[3] = {
|
||||
{0, 0x2a, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL, /* 10 */
|
||||
{10, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
|
||||
{10, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
|
||||
0, 0, 0, 0} },
|
||||
{0, 0xa, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL, /* 6 */
|
||||
{6, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||
{0, 0xaa, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL, /* 12 */
|
||||
{12, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f,
|
||||
{12, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
|
||||
0xc7, 0, 0, 0, 0} },
|
||||
};
|
||||
|
||||
@ -453,7 +453,7 @@ static const struct opcode_info_t sa_in_iarr[1] = {
|
||||
|
||||
static const struct opcode_info_t vl_iarr[1] = { /* VARIABLE LENGTH */
|
||||
{0, 0x7f, 0xb, F_SA_HIGH | F_D_OUT | FF_DIRECT_IO, resp_write_dt0,
|
||||
NULL, {32, 0xc7, 0, 0, 0, 0, 0x1f, 0x18, 0x0, 0xb, 0xfa,
|
||||
NULL, {32, 0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0xb, 0xfa,
|
||||
0, 0xff, 0xff, 0xff, 0xff} }, /* WRITE(32) */
|
||||
};
|
||||
|
||||
@ -469,7 +469,7 @@ static const struct opcode_info_t maint_in_iarr[2] = {
|
||||
static const struct opcode_info_t write_same_iarr[1] = {
|
||||
{0, 0x93, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, resp_write_same_16, NULL,
|
||||
{16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x1f, 0xc7} },
|
||||
0xff, 0xff, 0xff, 0x3f, 0xc7} },
|
||||
};
|
||||
|
||||
static const struct opcode_info_t reserve_iarr[1] = {
|
||||
@ -512,11 +512,11 @@ static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEMENT + 1] = {
|
||||
0, 0} },
|
||||
{3, 0x88, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, read_iarr,
|
||||
{16, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x9f, 0xc7} }, /* READ(16) */
|
||||
0xff, 0xff, 0xff, 0xff, 0xc7} }, /* READ(16) */
|
||||
/* 10 */
|
||||
{3, 0x8a, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, write_iarr,
|
||||
{16, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x9f, 0xc7} }, /* WRITE(16) */
|
||||
0xff, 0xff, 0xff, 0xff, 0xc7} }, /* WRITE(16) */
|
||||
{0, 0x1b, 0, 0, resp_start_stop, NULL, /* START STOP UNIT */
|
||||
{6, 0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||
{1, 0x9e, 0x10, F_SA_LOW | F_D_IN, resp_readcap16, sa_in_iarr,
|
||||
@ -533,7 +533,7 @@ static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEMENT + 1] = {
|
||||
{10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7,
|
||||
0, 0, 0, 0, 0, 0} },
|
||||
{1, 0x7f, 0x9, F_SA_HIGH | F_D_IN | FF_DIRECT_IO, resp_read_dt0,
|
||||
vl_iarr, {32, 0xc7, 0, 0, 0, 0, 0x1f, 0x18, 0x0, 0x9, 0xfe, 0,
|
||||
vl_iarr, {32, 0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x9, 0xfe, 0,
|
||||
0xff, 0xff, 0xff, 0xff} },/* VARIABLE LENGTH, READ(32) */
|
||||
{1, 0x56, 0, F_D_OUT, NULL, reserve_iarr, /* RESERVE(10) */
|
||||
{10, 0xff, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
|
||||
@ -551,22 +551,22 @@ static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEMENT + 1] = {
|
||||
{0, 0x1d, F_D_OUT, 0, NULL, NULL, /* SEND DIAGNOSTIC */
|
||||
{6, 0xf7, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||
{0, 0x42, 0, F_D_OUT | FF_DIRECT_IO, resp_unmap, NULL, /* UNMAP */
|
||||
{10, 0x1, 0, 0, 0, 0, 0x1f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
|
||||
{10, 0x1, 0, 0, 0, 0, 0x3f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
|
||||
{0, 0x53, 0, F_D_IN | F_D_OUT | FF_DIRECT_IO, resp_xdwriteread_10,
|
||||
NULL, {10, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7,
|
||||
NULL, {10, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7,
|
||||
0, 0, 0, 0, 0, 0} },
|
||||
{0, 0x3b, 0, F_D_OUT_MAYBE, resp_write_buffer, NULL,
|
||||
{10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0,
|
||||
0, 0, 0, 0} }, /* WRITE_BUFFER */
|
||||
{1, 0x41, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, resp_write_same_10,
|
||||
write_same_iarr, {10, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff,
|
||||
write_same_iarr, {10, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff,
|
||||
0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
|
||||
{0, 0x35, 0, F_DELAY_OVERR | FF_DIRECT_IO, NULL, NULL, /* SYNC_CACHE */
|
||||
{10, 0x7, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
|
||||
{10, 0x7, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
|
||||
0, 0, 0, 0} },
|
||||
{0, 0x89, 0, F_D_OUT | FF_DIRECT_IO, resp_comp_write, NULL,
|
||||
{16, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
|
||||
0, 0xff, 0x1f, 0xc7} }, /* COMPARE AND WRITE */
|
||||
0, 0xff, 0x3f, 0xc7} }, /* COMPARE AND WRITE */
|
||||
|
||||
/* 30 */
|
||||
{0xff, 0, 0, 0, NULL, NULL, /* terminating element */
|
||||
|
Loading…
Reference in New Issue
Block a user