mirror of
https://github.com/LIV2/a4091-software.git
synced 2025-12-05 22:12:44 +00:00
There were three issues with the way timers were previously implemented: - The port used for communication was defined in cmdhandler, so it was not available outside of that task. This would lead to hangs when used outside of cmdhandler context - The code converted microseconds to ticks for delays using UNIT_VBLANK. While UNIT_VBLANK has a 20ms granularity, the actual delay still needs to be specified in seconds and microseconds. - short delays were using an idle loop instead of timer.device. Switch to use timer.device in that case, too, but use UNIT_MICROHZ instead. Signed-off-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
2024 lines
92 KiB
C
2024 lines
92 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/param.h>
|
|
#include <libraries/expansionbase.h>
|
|
#include <devices/trackdisk.h>
|
|
#include <clib/expansion_protos.h>
|
|
#include <clib/exec_protos.h>
|
|
#include <clib/alib_protos.h>
|
|
#include <inline/expansion.h>
|
|
#include <exec/io.h>
|
|
#include <proto/dos.h>
|
|
#include <exec/memory.h>
|
|
#include <exec/interrupts.h>
|
|
#include <exec/execbase.h>
|
|
#include <exec/errors.h>
|
|
#include <exec/lists.h>
|
|
#include <dos/dostags.h>
|
|
#include <devices/scsidisk.h>
|
|
#include <proto/exec.h>
|
|
|
|
#include "cmdhandler.h"
|
|
#include "nsd.h"
|
|
#include "scsi_disk.h"
|
|
#include "scsipi_disk.h"
|
|
#include "scsipi_all.h"
|
|
#include "callout.h"
|
|
|
|
#define ARRAY_SIZE(x) ((sizeof (x) / sizeof ((x)[0])))
|
|
|
|
#define PAGE_SIZE NBPG
|
|
typedef struct device *device_t;
|
|
|
|
#include "device.h"
|
|
|
|
#include "scsi_all.h"
|
|
#include "scsipiconf.h"
|
|
#include "sd.h"
|
|
#include "sys_queue.h"
|
|
#include "siopreg.h"
|
|
#include "siopvar.h"
|
|
#include "attach.h"
|
|
#include "ndkcompat.h"
|
|
|
|
#define ADDR8(x) (volatile uint8_t *)(x)
|
|
#define ADDR32(x) (volatile uint32_t *)(x)
|
|
|
|
#define BIT(x) (1 << (x))
|
|
|
|
extern BOOL __check_abort_enabled; // 0 = Disable gcc clib2 ^C break handling
|
|
|
|
a4091_save_t *asave;
|
|
static int global_opened = 0;
|
|
struct IOExtTD *global_tio;
|
|
struct MsgPort *global_mp;
|
|
|
|
#define DEVICE_NAME "a4091.device"
|
|
|
|
static void
|
|
close_exit(void)
|
|
{
|
|
if (global_opened) {
|
|
global_opened = 0;
|
|
printf("^C abort\n");
|
|
CloseDevice((struct IORequest *) global_tio);
|
|
DeleteExtIO((struct IORequest *) global_tio);
|
|
DeletePort(global_mp);
|
|
}
|
|
exit(1);
|
|
}
|
|
|
|
static BOOL
|
|
is_user_abort(void)
|
|
{
|
|
if (SetSignal(0, 0) & SIGBREAKF_CTRL_C)
|
|
return (1);
|
|
return (0);
|
|
}
|
|
|
|
static void
|
|
usage(void)
|
|
{
|
|
printf("This tool is used to show " DEVICE_NAME " driver internal state.\n"
|
|
"It does not work on any other driver.\n"
|
|
"Usage: a4091d [<unit>]\n"
|
|
" a4091d -c -- show 68040 special registers\n"
|
|
" a4091d -p <periph address>\n"
|
|
" a4091d -x <xs address>\n");
|
|
}
|
|
|
|
typedef const char * const bitdesc_t;
|
|
|
|
static bitdesc_t bits_periph_flags[] = {
|
|
"REMOVABLE", "MEDIA_LOADED", "WAITING", "OPEN",
|
|
"WAITDRAIN", "GROW_OPENINGS", "MODE_VALID", "RECOVERING",
|
|
"RECOVERING_ACTIVE", "KEEP_LABEL", "SENSE", "UNTAG",
|
|
};
|
|
|
|
static bitdesc_t bits_periph_cap[] = {
|
|
"ANEC", "TERMIOP", "RELADR", "WIDE32",
|
|
"WIDE16", "Bit5", "Bit6", "SYNC",
|
|
"LINKCMDS", "TQING", "SFTRESET", "CMD16",
|
|
"DT", "QAS", "IUS", "Bit15",
|
|
};
|
|
|
|
static bitdesc_t bits_xs_control[] = {
|
|
"NOSLEEP", "POLL", "DISCOVERY", "ASYNC",
|
|
"USERCMD", "SILENT", "IGNORE_NOT_READY", "IGNORE_MEDIA_CHANGE",
|
|
"IGNORE_ILLEGAL_REQUEST", "SILENT_NODEV", "RESET", "DATA_UIO",
|
|
"DATA_IN", "DATA_OUT", "TARGET", "ESCAPE",
|
|
"URGENT", "SIMPLE_TAG", "ORDERED_TAG", "HEAD_TAG",
|
|
"THAW_PERIPH", "FREEZE_PERIPH", "Bit22", "REQSENSE",
|
|
};
|
|
|
|
static bitdesc_t bits_chan_flags[] = {
|
|
"CHAN_OPENINGS", "CHAN_CANGROW", "CHAN_NOSETTLE", "CHAN_TACTIVE",
|
|
"CHAN_RESET_PEND",
|
|
};
|
|
|
|
static bitdesc_t bits_chan_tflags[] = {
|
|
"CHANT_SHUTDOWN", "CHANT_CALLBACK", "CHANT_KICK", "CHANT_GROWRES",
|
|
};
|
|
|
|
static void
|
|
print_bits(bitdesc_t *bits, uint nbits, uint value)
|
|
{
|
|
uint bit;
|
|
for (bit = 0; value != 0; value >>= 1, bit++) {
|
|
if (value & 1) {
|
|
if ((bit >= nbits) || (bits[bit] == NULL))
|
|
printf(" bit%d", bit);
|
|
else
|
|
printf(" %s", bits[bit]);
|
|
}
|
|
}
|
|
}
|
|
|
|
#define SUPERVISOR_STATE_ENTER() { \
|
|
APTR old_stack = SuperState()
|
|
#define SUPERVISOR_STATE_EXIT() UserState(old_stack); \
|
|
}
|
|
static void
|
|
show_cpu_regs(void)
|
|
{
|
|
uint32_t value;
|
|
uint cur = 0;
|
|
static const char *const regnames[] = {
|
|
"ITT0", "ITT1", "DTT0", "DTT1",
|
|
"TC", "URP", "SRP", "VBR",
|
|
"SFC", "DFC"
|
|
};
|
|
uint32_t values[ARRAY_SIZE(regnames)];
|
|
|
|
SUPERVISOR_STATE_ENTER();
|
|
asm("movec.l ITT0,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l ITT1,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l DTT0,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l DTT1,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l TC,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l URP,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l SRP,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l VBR,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l SFC,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
asm("movec.l DFC,%0" : "=r" (value));
|
|
values[cur++] = value;
|
|
SUPERVISOR_STATE_EXIT();
|
|
|
|
for (cur = 0; cur < ARRAY_SIZE(regnames); cur++)
|
|
printf("%4s=%08x\n", regnames[cur], values[cur]);
|
|
}
|
|
|
|
static const char *
|
|
iocmd_name(uint cmd)
|
|
{
|
|
static const char *const cmds[] = {
|
|
"CMD_INVALID", // 0
|
|
"CMD_RESET", // 1
|
|
"CMD_READ", // 2
|
|
"CMD_WRITE", // 3
|
|
"CMD_UPDATE", // 4
|
|
"CMD_CLEAR", // 5
|
|
"CMD_STOP", // 6
|
|
"CMD_START", // 7
|
|
"CMD_FLUSH", // 8
|
|
"TD_MOTOR", // 9 aka CMD_NONSTD
|
|
"TD_SEEK", // 10
|
|
"TD_FORMAT", // 11
|
|
"TD_REMOVE", // 12
|
|
"TD_CHANGENUM", // 13
|
|
"TD_CHANGESTATE", // 14
|
|
"TD_PROTSTATUS", // 15
|
|
"TD_RAWREAD", // 16
|
|
"TD_RAWRITE", // 17
|
|
"TD_GETDRIVETYPE", // 18
|
|
"TD_GETNUMTRACKS", // 19
|
|
"TD_ADDCHANGEINT", // 20
|
|
"TD_REMCHANGEINT", // 21
|
|
"TD_GETGEOMETRY", // 22
|
|
"TD_EJECT", // 23
|
|
"TD_READ64", // 24 aka TD_LASTCOMM
|
|
"TD_WRITE64", // 25
|
|
"TD_SEEK64", // 26
|
|
"TD_FORMAT64", // 27
|
|
"HD_SCSICMD", // 28
|
|
"MD_SETPARAMS", // 29
|
|
"30", // 30
|
|
"31", // 31
|
|
"CD_INFO", // 32
|
|
"CD_CONFIG", // 33
|
|
"CD_TOCMSF", // 34
|
|
"CD_TOCLSN", // 35
|
|
"CD_READXL", // 36
|
|
"CD_PLAYTRACK", // 37
|
|
"CD_PLAYMSF", // 38
|
|
"CD_PLAYLSN", // 39
|
|
"CD_PAUSE", // 40
|
|
"CD_SEARCH", // 41
|
|
"CD_QCODEMSF", // 42
|
|
"CD_QCODELSN", // 43
|
|
"CD_ATTENUATE", // 44
|
|
"CD_ADDFRAMEINT", // 45
|
|
"CD_REMFRAMEINT", // 45
|
|
};
|
|
if (cmd < ARRAY_SIZE(cmds))
|
|
return (cmds[cmd]);
|
|
switch (cmd) {
|
|
case ETD_READ: return ("ETD_READ"); // 0x8002
|
|
case ETD_WRITE: return ("ETD_WRITE"); // 0x8003
|
|
case ETD_UPDATE: return ("ETD_UPDATE"); // 0x8004
|
|
case ETD_CLEAR: return ("ETD_CLEAR"); // 0x8005
|
|
case ETD_MOTOR: return ("ETD_MOTOR"); // 0x8009
|
|
case ETD_SEEK: return ("ETD_SEEK"); // 0x800a
|
|
case ETD_FORMAT: return ("ETD_FORMAT"); // 0x800b
|
|
case ETD_RAWREAD: return ("ETD_RAWREAD"); // 0x8010
|
|
case ETD_RAWWRITE: return ("ETD_RAWWRITE"); // 0x8011
|
|
case CMD_TERM: return ("CMD_TERM"); // 0x2ef0
|
|
case CMD_ATTACH: return ("CMD_ATTACH"); // 0x2ff1
|
|
case CMD_DETACH: return ("CMD_DETACH"); // 0x2ef2
|
|
case NSCMD_DEVICEQUERY: return ("NSCMD_DEVICEQUERY"); // 0x4000
|
|
case NSCMD_TD_READ64: return ("NSCMD_TD_READ64"); // 0xc000
|
|
case NSCMD_TD_WRITE64: return ("NSCMD_TD_WRITE64"); // 0xc001
|
|
case NSCMD_TD_SEEK64: return ("NSCMD_TD_SEEK64"); // 0xc002
|
|
case NSCMD_TD_FORMAT64: return ("NSCMD_TD_FORMAT64"); // 0xc003
|
|
case NSCMD_ETD_READ64: return ("NSCMD_ETD_READ64"); // 0xe000
|
|
case NSCMD_ETD_WRITE64: return ("NSCMD_ETD_WRITE64"); // 0xe001
|
|
case NSCMD_ETD_SEEK64: return ("NSCMD_ETD_SEEK64"); // 0xe002
|
|
case NSCMD_ETD_FORMAT64:return ("NSCMD_ETD_FORMAT64"); // 0xe003
|
|
default: return ("UNKNOWN");
|
|
}
|
|
}
|
|
|
|
struct ioerr {
|
|
uint ie_code;
|
|
const char *ie_name;
|
|
} ioerrs[] = {
|
|
{ -1, "IOERR_OPENFAIL" },
|
|
{ -2, "IOERR_ABORTED" },
|
|
{ -3, "IOERR_NOCMD" },
|
|
{ -4, "IOERR_BADLENGTH" },
|
|
{ -5, "IOERR_BADADDRESS" },
|
|
{ -6, "IOERR_UNITBUSY" },
|
|
{ -7, "IOERR_SELFTEST" },
|
|
{ 2, "EACCES" },
|
|
{ 5, "EIO" },
|
|
{ 12, "ENOMEM" },
|
|
{ 16, "EBUSY" },
|
|
{ 19, "ENODEV" },
|
|
{ 20, "TDERR_NotSpecified" },
|
|
{ 21, "TDERR_NoSecHdr" },
|
|
{ 22, "TDERR_BadSecPreamble" }, // also EINVAL
|
|
{ 23, "TDERR_BadSecID" },
|
|
{ 24, "TDERR_BadHdrSum" },
|
|
{ 25, "TDERR_BadSecSum" },
|
|
{ 26, "TDERR_TooFewSecs" },
|
|
{ 27, "TDERR_BadSecHdr" },
|
|
{ 28, "TDERR_WriteProt" }, // also ENOSPC
|
|
{ 29, "TDERR_DiskChanged" },
|
|
{ 30, "TDERR_SeekError" }, // also EROFS
|
|
{ 31, "TDERR_NoMem" },
|
|
{ 32, "TDERR_BadUnitNum" },
|
|
{ 33, "TDERR_BadDriveType" },
|
|
{ 34, "TDERR_DriveInUse" },
|
|
{ 35, "TDERR_PostReset" }, // also EAGAIN
|
|
{ 36, "CDERR_BadDataType" }, // data on disk is wrong type
|
|
{ 37, "CDERR_InvalidState" }, // invalid cmd under current conditions
|
|
{ 40, "HFERR_SelfUnit" },
|
|
{ 41, "HFERR_DMA" },
|
|
{ 42, "HFERR_Phase" },
|
|
{ 43, "HFERR_Parity" },
|
|
{ 44, "HFERR_SelTimeout" },
|
|
{ 45, "HFERR_BadStatus" },
|
|
{ 46, "ERROR_INQUIRY_FAILED" },
|
|
{ 47, "ERROR_TIMEOUT" },
|
|
{ 48, "ERROR_BUS_RESET" },
|
|
{ 49, "ERROR_TRY_AGAIN" },
|
|
{ 56, "HFERR_NoBoard" },
|
|
{ 51, "ERROR_BAD_BOARD" },
|
|
{ 52, "ERROR_SENSE_CODE" },
|
|
{ 53, "ERROR_NOT_READY" },
|
|
};
|
|
|
|
static void
|
|
decode_io_error(uint code)
|
|
{
|
|
int pos;
|
|
printf(" code=%u", code);
|
|
for (pos = 0; pos < ARRAY_SIZE(ioerrs); pos++)
|
|
if (code == ioerrs[pos].ie_code) {
|
|
printf(" %s", ioerrs[pos].ie_name);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#define SCSI_VERIFY_10 0x2f
|
|
#define SCSI_VERIFY_12 0xaf
|
|
#define SCSI_VERIFY_16 0x8f
|
|
#define SCSI_UNMAP 0x42
|
|
#define SCSI_WRITE_AND_VERIFY_10 0x2e
|
|
#define SCSI_WRITE_AND_VERIFY_12 0xae
|
|
#define SCSI_WRITE_AND_VERIFY_16 0x8e
|
|
|
|
static void
|
|
decode_scsi_command(const char *indent, uint8_t *cmd, uint cmdlen)
|
|
{
|
|
printf("%s ", indent);
|
|
if (cmdlen > 32)
|
|
cmdlen = 32;
|
|
switch (*cmd) {
|
|
case SCSI_TEST_UNIT_READY: printf(" TEST_UNIT_READY"); // 0x00
|
|
break;
|
|
case SCSI_REZERO_UNIT: printf(" REZERO"); // 0x01
|
|
break;
|
|
case SCSI_REQUEST_SENSE: printf(" REQUEST_SENSE"); // 0x03
|
|
break;
|
|
case SCSI_FORMAT_UNIT: printf(" FORMAT"); // 0x04
|
|
break;
|
|
case SCSI_REASSIGN_BLOCKS: printf(" REASSIGN"); // 0x07
|
|
break;
|
|
case SCSI_READ_6_COMMAND: printf(" READ_10"); // 0x08
|
|
goto read_write_6;
|
|
case SCSI_WRITE_6_COMMAND: printf(" WRITE_6"); // 0x0a
|
|
read_write_6:
|
|
printf("(%02x%02x%02x len=%02x)",
|
|
cmd[1], cmd[2], cmd[3], cmd[4]);
|
|
break;
|
|
case READ_10: printf(" READ_10"); // 0x28
|
|
goto read_write_10;
|
|
case SCSI_VERIFY_10: printf(" VERIFY_10"); // 0x2f
|
|
goto read_write_10;
|
|
case SCSI_WRITE_AND_VERIFY_10: printf(" WRITE_AND_VERIFY_10"); // 0x2e
|
|
goto read_write_10;
|
|
case WRITE_10: printf(" WRITE_10"); // 0x2a
|
|
read_write_10:
|
|
printf("(%02x%02x%02x%02x len=%02x%02x)",
|
|
cmd[2], cmd[3], cmd[4], cmd[5], cmd[7], cmd[8]);
|
|
break;
|
|
case READ_12: printf(" READ_12"); // 0xa8
|
|
goto read_write_12;
|
|
case SCSI_VERIFY_12: printf(" VERIFY_12"); // 0xaf
|
|
goto read_write_12;
|
|
case SCSI_WRITE_AND_VERIFY_12: printf(" WRITE_AND_VERIFY_12"); // 0xae
|
|
goto read_write_12;
|
|
case WRITE_12: printf(" WRITE_12"); // 0xaa
|
|
read_write_12:
|
|
printf("(%02x%02x%02x%02x len=%02x%02x%02x%02x)",
|
|
cmd[2], cmd[3], cmd[4], cmd[5],
|
|
cmd[6], cmd[7], cmd[8], cmd[9]);
|
|
break;
|
|
case READ_16: printf(" READ_16"); // 0x88
|
|
goto read_write_16;
|
|
case SCSI_VERIFY_16: printf(" VERIFY_16"); // 0x8f
|
|
goto read_write_16;
|
|
case SCSI_WRITE_AND_VERIFY_16: printf(" WRITE_AND_VERIFY_16"); // 0x8e
|
|
goto read_write_16;
|
|
case WRITE_16: printf(" WRITE_16"); // 0x8a
|
|
read_write_16:
|
|
printf("(%02x%02x%02x%02x%02x%02x%02x%02x "
|
|
"len=%02x%02x%02x%02x)",
|
|
cmd[2], cmd[3], cmd[4], cmd[5],
|
|
cmd[6], cmd[7], cmd[8], cmd[9],
|
|
cmd[10], cmd[11], cmd[12], cmd[13]);
|
|
break;
|
|
case SCSI_SEEK_6_COMMAND: printf(" SEEK_6"); // 0x0b
|
|
printf("(%02x%02x%02x)", cmd[1] & 0x1f, cmd[2], cmd[3]);
|
|
break;
|
|
case SCSI_SEEK_10_COMMAND: printf(" SEEK_10"); // 0x2b
|
|
printf("(%02x%02x%02x%02x lun=%x)", cmd[2], cmd[3], cmd[4], cmd[5], cmd[1]);
|
|
break;
|
|
case INQUIRY: printf(" INQUIRY"); // 0x12
|
|
break;
|
|
case SCSI_MODE_SELECT_6: printf(" MODE_SELECT_6"); // 0x15
|
|
break;
|
|
case SCSI_MODE_SELECT_10: printf(" MODE_SELECT_10"); // 0x55
|
|
break;
|
|
case SCSI_RESERVE_6: printf(" SCSI_RESERVE_6"); // 0x16
|
|
break;
|
|
case SCSI_RELEASE_6: printf(" SCSI_RELEASE_6"); // 0x17
|
|
break;
|
|
case SCSI_RESERVE_10: printf(" SCSI_RESERVE_10"); // 0x56
|
|
break;
|
|
case SCSI_RELEASE_10: printf(" SCSI_RELEASE_10"); // 0x57
|
|
break;
|
|
case SCSI_MODE_SENSE_6: printf(" MODE_SENSE_6"); // 0x1a
|
|
goto mode_sense_6_10;
|
|
case SCSI_MODE_SENSE_10: printf(" MODE_SENSE_10"); // 0x5a
|
|
mode_sense_6_10:
|
|
printf("(%02x)", cmd[2]); // page code
|
|
break;
|
|
#define SSS_START 0x01
|
|
#define SSS_LOEJ 0x02
|
|
case START_STOP: printf(" START_STOP"); // 0x1b
|
|
printf(" %s", (cmd[4] & SSS_LOEJ) ?
|
|
((cmd[4] & SSS_START) ? "Load" : "Eject") :
|
|
((cmd[4] & SSS_START) ? "Start" : "Stop"));
|
|
break;
|
|
case SCSI_SEND_DIAGNOSTIC: printf(" SEND_DIAGNOSTIC"); // 0x1d
|
|
break;
|
|
case READ_FORMAT_CAPACITIES: printf(" READ_FORMAT_CAPACITIES"); // 0x23
|
|
break;
|
|
case READ_CAPACITY_10: printf(" READ_CAPACITY_10"); // 0x25
|
|
break;
|
|
case SERVICE_ACTION_IN: // 0x9e
|
|
if (cmd[1] == SRC16_READ_CAPACITY) // 0x10
|
|
printf(" READ_CAPACITY_16");
|
|
else
|
|
printf(" SERVICE_ACTION_IN %02x", cmd[1]);
|
|
break;
|
|
case SCSI_SYNCHRONIZE_CACHE_10: printf(" SYNC_CACHE10"); // 0x36
|
|
goto read_write_10; // addr=2..5 len=7..8
|
|
case SCSI_SYNCHRONIZE_CACHE_16: printf(" SYNC_CACHE16"); // 0x36
|
|
goto read_write_16; // addr=2..9 len=10..13
|
|
case SCSI_READ_DEFECT_DATA: printf(" READ_DEFECT"); // 0x37
|
|
break;
|
|
case SCSI_UNMAP: printf(" UNMAP"); // 0x42
|
|
break;
|
|
default:
|
|
printf(" Unknown cmd ");
|
|
break;
|
|
}
|
|
while (cmdlen-- > 0) {
|
|
printf(" %02x", *(cmd++));
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
static void
|
|
decode_io_command(int indent_count, struct IOStdReq *ior)
|
|
{
|
|
char indent[32];
|
|
sprintf(indent, "%*s", indent_count, "");
|
|
|
|
switch (ior->io_Command) {
|
|
case HD_SCSICMD: {
|
|
struct SCSICmd *sc = ior->io_Data;
|
|
if (sc == NULL)
|
|
return;
|
|
printf("%sscsi_Data=%p\n", indent, sc->scsi_Data);
|
|
printf("%sscsi_Length=%08"PRIx32"\n", indent, sc->scsi_Length);
|
|
printf("%sscsi_Actual=%08"PRIx32"\n", indent, sc->scsi_Actual);
|
|
printf("%sscsi_Command=%p\n", indent, sc->scsi_Command);
|
|
if (sc->scsi_CmdLength > 0) {
|
|
decode_scsi_command(indent, (uint8_t *)sc->scsi_Command,
|
|
sc->scsi_CmdLength);
|
|
}
|
|
printf("%sscsi_CmdLength=%04x\n", indent, sc->scsi_CmdLength);
|
|
printf("%sscsi_CmdActual=%04x\n", indent, sc->scsi_CmdActual);
|
|
printf("%sscsi_Flags=%02x\n", indent, sc->scsi_Flags);
|
|
printf("%sscsi_Status=%02x\n", indent, sc->scsi_Status);
|
|
printf("%sscsi_SenseData=%p\n", indent, sc->scsi_SenseData);
|
|
printf("%sscsi_SenseLength=%02x\n",
|
|
indent, sc->scsi_SenseLength);
|
|
printf("%sscsi_SenseActual=%02x\n",
|
|
indent, sc->scsi_SenseActual);
|
|
}
|
|
}
|
|
}
|
|
|
|
static const char *
|
|
decode_xs_error(int error)
|
|
{
|
|
static const char *const errs[] = {
|
|
"XS_NOERROR", // 0 No error
|
|
"XS_SENSE", // 1 Check the returned sense for the error
|
|
"XS_SHORTSENSE", // 2 Check the ATAPI sense for the error
|
|
"XS_DRIVER_STUFFUP", // 3 Driver failed to perform operation
|
|
"XS_RESOURCE_SHORTAGE", // 4 adapter resource shortage
|
|
"XS_SELTIMEOUT", // 5 The device timed out.. turned off?
|
|
"XS_TIMEOUT", // 6 The Timeout reported was caught by SW
|
|
"XS_BUSY", // 7 The device busy, try again later?
|
|
"XS_RESET", // 8 bus was reset; possible retry command
|
|
"XS_REQUEUE", // 9 requeue this command
|
|
};
|
|
if (error < ARRAY_SIZE(errs))
|
|
return (errs[error]);
|
|
return ("UNKNOWN");
|
|
}
|
|
|
|
static const char *
|
|
decode_scsi_sense_key(int key)
|
|
{
|
|
static const char *const keys[] = {
|
|
"NO SENSE", // 0x0 SKEY_NO_SENSE
|
|
"RECOVERED ERROR", // 0x1 SKEY_RECOVERED_ERROR
|
|
"NOT READY", // 0x2 SKEY_NOT_READY
|
|
"MEDIUM ERROR", // 0x3 SKEY_MEDIUM_ERROR
|
|
"HARDWARE ERROR", // 0x4 SKEY_HARDWARE_ERROR
|
|
"ILLEGAL REQUEST", // 0x5 SKEY_ILLEGAL_REQUEST
|
|
"UNIT ATTENTION", // 0x6 SKEY_UNIT_ATTENTION
|
|
"DATA PROTECT", // 0x7 SKEY_DATA_PROTECT
|
|
"BLANK CHECK", // 0x8 SKEY_BLANK_CHECK
|
|
"VENDOR SPECIFIC", // 0x9 SKEY_VENDOR_SPECIFIC
|
|
"COPY ABORTED", // 0xa SKEY_COPY_ABORTED
|
|
"ABORTED COMMAND", // 0xb SKEY_ABORTED_COMMAND
|
|
"EQUAL", // 0xc SKEY_EQUAL Obsolete
|
|
"VOLUME OVERFLOW", // 0xd SKEY_VOLUME_OVERFLOW
|
|
"MISCOMPARE", // 0xe SKEY_MISCOMPARE
|
|
"COMPLETED", // 0xf
|
|
};
|
|
if (key < ARRAY_SIZE(keys))
|
|
return (keys[key]);
|
|
return ("UNKNOWN");
|
|
}
|
|
|
|
#define SCSI_COND_MET 0x04
|
|
#define SCSI_INTERM_CNDMET 0x14
|
|
#define SCSI_TASK_ABORTED 0x40
|
|
|
|
static const char *
|
|
decode_xs_status(int status)
|
|
{
|
|
switch (status) {
|
|
case SCSI_OK: return ("OK"); // 0x00
|
|
case SCSI_CHECK: return ("CHECK"); // 0x02
|
|
case SCSI_COND_MET: return ("COND_MET"); // 0x04
|
|
case SCSI_BUSY: return ("BUSY"); // 0x08
|
|
case SCSI_INTERM: return ("INTERMEDIATE"); // 0x10
|
|
case SCSI_INTERM_CNDMET: return ("INTERM_COND_MET"); // 0x14
|
|
case SCSI_RESV_CONFLICT: return ("RESV_CONFLICT"); // 0x18
|
|
case SCSI_TERMINATED: return ("TERMINATED"); // 0x22
|
|
case SCSI_QUEUE_FULL: return ("QUEUE_FULL"); // 0x28
|
|
case SCSI_ACA_ACTIVE: return ("ACA_ACTIVE"); // 0x30
|
|
case SCSI_TASK_ABORTED: return ("TASK_ABORTED"); // 0x40
|
|
default: return ("UNKNOWN");
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Additional status codes (sense.asc)
|
|
* -----------------------------------
|
|
* D - Direct Access Block Device (SBC-4) device column key
|
|
* .Z - Host Managed Zoned Block Device (ZBC) --------------------
|
|
* . T - Sequential Access Device (SSC-5) blank = reserved
|
|
* . P - Processor Device (SPC-2) not blank = allowed
|
|
* . .R - C/DVD Device (MMC-6)
|
|
* . . O - Optical Memory Block Device (SBC)
|
|
* . . M - Media Changer Device (SMC-3)
|
|
* . . .A - Storage Array Device (SCC-2)
|
|
* . . . E - SCSI Enclosure Services device (SES-3)
|
|
* . . . B - Simplified Direct-Access (Reduced Block) device (RBC)
|
|
* . . . .K - Optical Card Reader/Writer device (OCRW)
|
|
* . . . . V - Automation/Device Interface device (ADC-4)
|
|
* . . . . F - Object-based Storage Device (OSD-2)
|
|
* ASC/ASCQ DZTPROMAEBKVF Description
|
|
* -------- ------------- ----------------------------------------------------
|
|
* 00h/00h DZTPROMAEBKVF NO ADDITIONAL SENSE INFORMATION
|
|
* 00h/01h T FILEMARK DETECTED
|
|
* 00h/02h T END-OF-PARTITION/MEDIUM DETECTED
|
|
* 00h/03h T SETMARK DETECTED
|
|
* 00h/04h T BEGINNING-OF-PARTITION/MEDIUM DETECTED
|
|
* 00h/05h T END-OF-DATA DETECTED
|
|
* 00h/06h DZTPROMAEBKVF I/O PROCESS TERMINATED
|
|
* 00h/07h T PROGRAMMABLE EARLY WARNING DETECTED
|
|
* 00h/11h R AUDIO PLAY OPERATION IN PROGRESS
|
|
* 00h/12h R AUDIO PLAY OPERATION PAUSED
|
|
* 00h/13h R AUDIO PLAY OPERATION SUCCESSFULLY COMPLETED
|
|
* 00h/14h R AUDIO PLAY OPERATION STOPPED DUE TO ERROR
|
|
* 00h/15h R NO CURRENT AUDIO STATUS TO RETURN
|
|
* 00h/16h DZTPROMAEBKVF OPERATION IN PROGRESS
|
|
* 00h/17h DZT ROMAEBKVF CLEANING REQUESTED
|
|
* 00h/18h T ERASE OPERATION IN PROGRESS
|
|
* 00h/19h T LOCATE OPERATION IN PROGRESS
|
|
* 00h/1Ah T REWIND OPERATION IN PROGRESS
|
|
* 00h/1Bh T SET CAPACITY OPERATION IN PROGRESS
|
|
* 00h/1Ch T VERIFY OPERATION IN PROGRESS
|
|
* 00h/1Dh DZT B ATA PASS THROUGH INFORMATION AVAILABLE
|
|
* 00h/1Eh DZT R MAEBKV CONFLICTING SA CREATION REQUEST
|
|
* 00h/1Fh DZT B LOGICAL UNIT TRANSITIONING TO ANOTHER POWER CONDITION
|
|
* 00h/20h DZTP B EXTENDED COPY INFORMATION AVAILABLE
|
|
* 00h/21h DZ ATOMIC COMMAND ABORTED DUE TO ACA
|
|
* 00h/22h DZ DEFERRED MICROCODE IS PENDING
|
|
* 01h/00h DZ O BK NO INDEX/SECTOR SIGNAL
|
|
* 02h/00h DZ RO BK NO SEEK COMPLETE
|
|
* 03h/00h DZT O BK PERIPHERAL DEVICE WRITE FAULT
|
|
* 03h/01h T NO WRITE CURRENT
|
|
* 03h/02h T EXCESSIVE WRITE ERRORS
|
|
* 04h/00h DZTPROMAEBKVF LOGICAL UNIT NOT READY, CAUSE NOT REPORTABLE
|
|
* 04h/01h DZTPROMAEBKVF LOGICAL UNIT IS IN PROCESS OF BECOMING READY
|
|
* 04h/02h DZTPROMAEBKVF LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED
|
|
* 04h/03h DZTPROMAEBKVF LOGICAL UNIT NOT READY, MANUAL INTERVENTION REQUIRED
|
|
* 04h/04h DZT RO B LOGICAL UNIT NOT READY, FORMAT IN PROGRESS
|
|
* 04h/05h DZT O A BK F LOGICAL UNIT NOT READY, REBUILD IN PROGRESS
|
|
* 04h/06h DZT O A BK LOGICAL UNIT NOT READY, RECALCULATION IN PROGRESS
|
|
* 04h/07h DZTPROMAEBKVF LOGICAL UNIT NOT READY, OPERATION IN PROGRESS
|
|
* 04h/08h R LOGICAL UNIT NOT READY, LONG WRITE IN PROGRESS
|
|
* 04h/09h DZTPROMAEBKVF LOGICAL UNIT NOT READY, SELF-TEST IN PROGRESS
|
|
* 04h/0Ah DZTPROMAEBKVF LOGICAL UNIT NOT ACCESSIBLE, ASYMMETRIC ACCESS STATE TRANSITION
|
|
* 04h/0Bh DZTPROMAEBKVF LOGICAL UNIT NOT ACCESSIBLE, TARGET PORT IN STANDBY STATE
|
|
* 04h/0Ch DZTPROMAEBKVF LOGICAL UNIT NOT ACCESSIBLE, TARGET PORT IN UNAVAILABLE STATE
|
|
* 04h/0Dh F LOGICAL UNIT NOT READY, STRUCTURE CHECK REQUIRED
|
|
* 04h/0Eh DZT R MAEBKVF LOGICAL UNIT NOT READY, SECURITY SESSION IN PROGRESS
|
|
* 04h/10h DZT ROM B LOGICAL UNIT NOT READY, AUXILIARY MEMORY NOT ACCESSIBLE
|
|
* 04h/11h DZT RO AEB VF LOGICAL UNIT NOT READY, NOTIFY (ENABLE SPINUP) REQUIRED
|
|
* 04h/12h M V LOGICAL UNIT NOT READY, OFFLINE
|
|
* 04h/13h DZT R MAEBKV LOGICAL UNIT NOT READY, SA CREATION IN PROGRESS
|
|
* 04h/14h DZ B LOGICAL UNIT NOT READY, SPACE ALLOCATION IN PROGRESS
|
|
* 04h/15h M LOGICAL UNIT NOT READY, ROBOTICS DISABLED
|
|
* 04h/16h M LOGICAL UNIT NOT READY, CONFIGURATION REQUIRED
|
|
* 04h/17h M LOGICAL UNIT NOT READY, CALIBRATION REQUIRED
|
|
* 04h/18h M LOGICAL UNIT NOT READY, A DOOR IS OPEN
|
|
* 04h/19h M LOGICAL UNIT NOT READY, OPERATING IN SEQUENTIAL MODE
|
|
* 04h/1Ah DZ B LOGICAL UNIT NOT READY, START STOP UNIT COMMAND IN PROGRESS
|
|
* 04h/1Bh DZ B LOGICAL UNIT NOT READY, SANITIZE IN PROGRESS
|
|
* 04h/1Ch DZT MAEB LOGICAL UNIT NOT READY, ADDITIONAL POWER USE NOT YET GRANTED
|
|
* 04h/1Dh DZ LOGICAL UNIT NOT READY, CONFIGURATION IN PROGRESS
|
|
* 04h/1Eh DZ LOGICAL UNIT NOT READY, MICROCODE ACTIVATION REQUIRED
|
|
* 04h/1Fh DZTPROMAEBKVF LOGICAL UNIT NOT READY, MICROCODE DOWNLOAD REQUIRED
|
|
* 04h/20h DZTPROMAEBKVF LOGICAL UNIT NOT READY, LOGICAL UNIT RESET REQUIRED
|
|
* 04h/21h DZTPROMAEBKVF LOGICAL UNIT NOT READY, HARD RESET REQUIRED
|
|
* 04h/22h DZTPROMAEBKVF LOGICAL UNIT NOT READY, POWER CYCLE REQUIRED
|
|
* 04h/23h DZ LOGICAL UNIT NOT READY, AFFILIATION REQUIRED
|
|
* 04h/24h DZ DEPOPULATION IN PROGRESS
|
|
* 04h/25h DZ DEPOPULATION RESTORATION IN PROGRESS
|
|
* 05h/00h DZT ROMAEBKVF LOGICAL UNIT DOES NOT RESPOND TO SELECTION
|
|
* 06h/00h DZ ROM BK NO REFERENCE POSITION FOUND
|
|
* 07h/00h DZT ROM BK MULTIPLE PERIPHERAL DEVICES SELECTED
|
|
* 08h/00h DZT ROMAEBKVF LOGICAL UNIT COMMUNICATION FAILURE
|
|
* 08h/01h DZT ROMAEBKVF LOGICAL UNIT COMMUNICATION TIME-OUT
|
|
* 08h/02h DZT ROMAEBKVF LOGICAL UNIT COMMUNICATION PARITY ERROR
|
|
* 08h/03h DZT ROM BK LOGICAL UNIT COMMUNICATION CRC ERROR (ULTRA-DMA/32)
|
|
* 08h/04h DZTPRO K UNREACHABLE COPY TARGET
|
|
* 09h/00h DZT RO B TRACK FOLLOWING ERROR
|
|
* 09h/01h RO K TRACKING SERVO FAILURE
|
|
* 09h/02h RO K FOCUS SERVO FAILURE
|
|
* 09h/03h RO SPINDLE SERVO FAILURE
|
|
* 09h/04h DZT RO B HEAD SELECT FAULT
|
|
* 09h/05h DZT RO B VIBRATION INDUCED TRACKING ERROR
|
|
* 0Ah/00h DZTPROMAEBKVF ERROR LOG OVERFLOW
|
|
* 0Bh/00h DZTPROMAEBKVF WARNING
|
|
* 0Bh/01h DZTPROMAEBKVF WARNING - SPECIFIED TEMPERATURE EXCEEDED
|
|
* 0Bh/02h DZTPROMAEBKVF WARNING - ENCLOSURE DEGRADED
|
|
* 0Bh/03h DZTPROMAEBKVF WARNING - BACKGROUND SELF-TEST FAILED
|
|
* 0Bh/04h DZTPRO AEBKVF WARNING - BACKGROUND PRE-SCAN DETECTED MEDIUM ERROR
|
|
* 0Bh/05h DZTPRO AEBKVF WARNING - BACKGROUND MEDIUM SCAN DETECTED MEDIUM ERROR
|
|
* 0Bh/06h DZTPROMAEBKVF WARNING - NON-VOLATILE CACHE NOW VOLATILE
|
|
* 0Bh/07h DZTPROMAEBKVF WARNING - DEGRADED POWER TO NON-VOLATILE CACHE
|
|
* 0Bh/08h DZTPROMAEBKVF WARNING - POWER LOSS EXPECTED
|
|
* 0Bh/09h DZ WARNING - DEVICE STATISTICS NOTIFICATION ACTIVE
|
|
* 0Bh/0Ah DZTPROMAEBKV WARNING - HIGH CRITICAL TEMPERATURE LIMIT EXCEEDED
|
|
* 0Bh/0Bh DZTPROMAEBKV WARNING - LOW CRITICAL TEMPERATURE LIMIT EXCEEDED
|
|
* 0Bh/0Ch DZTPROMAEBKV WARNING - HIGH OPERATING TEMPERATURE LIMIT EXCEEDED
|
|
* 0Bh/0Dh DZTPROMAEBKV WARNING - LOW OPERATING TEMPERATURE LIMIT EXCEEDED
|
|
* 0Bh/0Eh DZTPROMAEBKV WARNING - HIGH CRITICAL HUMIDITY LIMIT EXCEEDED
|
|
* 0Bh/0Fh DZTPROMAEBKV WARNING - LOW CRITICAL HUMIDITY LIMIT EXCEEDED
|
|
* 0Bh/10h DZTPROMAEBKV WARNING - HIGH OPERATING HUMIDITY LIMIT EXCEEDED
|
|
* 0Bh/11h DZTPROMAEBKV WARNING - LOW OPERATING HUMIDITY LIMIT EXCEEDED
|
|
* 0Bh/12h DZTPROMAEBKVF WARNING - MICROCODE SECURITY AT RISK
|
|
* 0Bh/13h DZTPROMAEBKVF WARNING - MICROCODE DIGITAL SIGNATURE VALIDATION FAILURE
|
|
* 0Bh/14h DZ WARNING - PHYSICAL ELEMENT STATUS CHANGE
|
|
* 0Ch/00h DZT R WRITE ERROR
|
|
* 0Ch/01h DZ K WRITE ERROR - RECOVERED WITH AUTO REALLOCATION
|
|
* 0Ch/02h DZ O BK WRITE ERROR - AUTO REALLOCATION FAILED
|
|
* 0Ch/03h DZ O BK WRITE ERROR - RECOMMEND REASSIGNMENT
|
|
* 0Ch/04h DZT O B COMPRESSION CHECK MISCOMPARE ERROR
|
|
* 0Ch/05h DZT O B DATA EXPANSION OCCURRED DURING COMPRESSION
|
|
* 0Ch/06h DZT O B BLOCK NOT COMPRESSIBLE
|
|
* 0Ch/07h DZ R WRITE ERROR - RECOVERY NEEDED
|
|
* 0Ch/08h R WRITE ERROR - RECOVERY FAILED
|
|
* 0Ch/09h R WRITE ERROR - LOSS OF STREAMING
|
|
* 0Ch/0Ah R WRITE ERROR - PADDING BLOCKS ADDED
|
|
* 0Ch/0Bh DZT ROM B AUXILIARY MEMORY WRITE ERROR
|
|
* 0Ch/0Ch DZTPRO AEBKVF WRITE ERROR - UNEXPECTED UNSOLICITED DATA
|
|
* 0Ch/0Dh DZTPRO AEBKVF WRITE ERROR - NOT ENOUGH UNSOLICITED DATA
|
|
* 0Ch/0Eh DZT O BK MULTIPLE WRITE ERRORS
|
|
* 0Ch/0Fh R DEFECTS IN ERROR WINDOW
|
|
* 0Ch/10h DZ INCOMPLETE MULTIPLE ATOMIC WRITE OPERATIONS
|
|
* 0Ch/11h DZ WRITE ERROR - RECOVERY SCAN NEEDED
|
|
* 0Ch/12h DZ WRITE ERROR - INSUFFICIENT ZONE RESOURCES
|
|
* 0Dh/00h DZTPRO A K ERROR DETECTED BY THIRD PARTY TEMPORARY INITIATOR
|
|
* 0Dh/01h DZTPRO A K THIRD PARTY DEVICE FAILURE
|
|
* 0Dh/02h DZTPRO A K COPY TARGET DEVICE NOT REACHABLE
|
|
* 0Dh/03h DZTPRO A K INCORRECT COPY TARGET DEVICE TYPE
|
|
* 0Dh/04h DZTPRO A K COPY TARGET DEVICE DATA UNDERRUN
|
|
* 0Dh/05h DZTPRO A K COPY TARGET DEVICE DATA OVERRUN
|
|
* 0Eh/00h DZTPROMAEBK F INVALID INFORMATION UNIT
|
|
* 0Eh/01h DZTPROMAEBK F INFORMATION UNIT TOO SHORT
|
|
* 0Eh/02h DZTPROMAEBK F INFORMATION UNIT TOO LONG
|
|
* 0Eh/03h DZTPR MAEBK F INVALID FIELD IN COMMAND INFORMATION UNIT
|
|
* 0Fh/00h
|
|
* 10h/00h DZ O BK ID CRC OR ECC ERROR
|
|
* 10h/01h DZT O LOGICAL BLOCK GUARD CHECK FAILED
|
|
* 10h/02h DZT O LOGICAL BLOCK APPLICATION TAG CHECK FAILED
|
|
* 10h/03h DZT O LOGICAL BLOCK REFERENCE TAG CHECK FAILED
|
|
* 10h/04h T LOGICAL BLOCK PROTECTION ERROR ON RECOVER BUFFERED DATA
|
|
* 10h/05h T LOGICAL BLOCK PROTECTION METHOD ERROR
|
|
* 11h/00h DZT RO BK UNRECOVERED READ ERROR
|
|
* 11h/01h DZT RO BK READ RETRIES EXHAUSTED
|
|
* 11h/02h DZT RO BK ERROR TOO LONG TO CORRECT
|
|
* 11h/03h DZT O BK MULTIPLE READ ERRORS
|
|
* 11h/04h DZ O BK UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED
|
|
* 11h/05h RO B L-EC UNCORRECTABLE ERROR
|
|
* 11h/06h RO B CIRC UNRECOVERED ERROR
|
|
* 11h/07h O B DATA RE-SYNCHRONIZATION ERROR
|
|
* 11h/08h T INCOMPLETE BLOCK READ
|
|
* 11h/09h T NO GAP FOUND
|
|
* 11h/0Ah DZT O BK MISCORRECTED ERROR
|
|
* 11h/0Bh DZ O BK UNRECOVERED READ ERROR - RECOMMEND REASSIGNMENT
|
|
* 11h/0Ch DZ O BK UNRECOVERED READ ERROR - RECOMMEND REWRITE THE DATA
|
|
* 11h/0Dh DZT RO B DE-COMPRESSION CRC ERROR
|
|
* 11h/0Eh DZT RO B CANNOT DECOMPRESS USING DECLARED ALGORITHM
|
|
* 11h/0Fh R ERROR READING UPC/EAN NUMBER
|
|
* 11h/10h R ERROR READING ISRC NUMBER
|
|
* 11h/11h R READ ERROR - LOSS OF STREAMING
|
|
* 11h/12h DZT ROM B AUXILIARY MEMORY READ ERROR
|
|
* 11h/13h DZTPRO AEBKVF READ ERROR - FAILED RETRANSMISSION REQUEST
|
|
* 11h/14h DZ READ ERROR - LBA MARKED BAD BY APPLICATION CLIENT
|
|
* 11h/15h DZ WRITE AFTER SANITIZE REQUIRED
|
|
* 12h/00h DZ O BK ADDRESS MARK NOT FOUND FOR ID FIELD
|
|
* 13h/00h DZ O BK ADDRESS MARK NOT FOUND FOR DATA FIELD
|
|
* 14h/00h DZT RO BK RECORDED ENTITY NOT FOUND
|
|
* 14h/01h DZT RO BK RECORD NOT FOUND
|
|
* 14h/02h T FILEMARK OR SETMARK NOT FOUND
|
|
* 14h/03h T END-OF-DATA NOT FOUND
|
|
* 14h/04h T BLOCK SEQUENCE ERROR
|
|
* 14h/05h DZT O BK RECORD NOT FOUND - RECOMMEND REASSIGNMENT
|
|
* 14h/06h DZT O BK RECORD NOT FOUND - DATA AUTO-REALLOCATED
|
|
* 14h/07h T LOCATE OPERATION FAILURE
|
|
* 15h/00h DZT ROM BK RANDOM POSITIONING ERROR
|
|
* 15h/01h DZT ROM BK MECHANICAL POSITIONING ERROR
|
|
* 15h/02h DZT RO BK POSITIONING ERROR DETECTED BY READ OF MEDIUM
|
|
* 16h/00h DZ O BK DATA SYNCHRONIZATION MARK ERROR
|
|
* 16h/01h DZ O BK DATA SYNC ERROR - DATA REWRITTEN
|
|
* 16h/02h DZ O BK DATA SYNC ERROR - RECOMMEND REWRITE
|
|
* 16h/03h DZ O BK DATA SYNC ERROR - DATA AUTO-REALLOCATED
|
|
* 16h/04h DZ O BK DATA SYNC ERROR - RECOMMEND REASSIGNMENT
|
|
* 17h/00h DZT RO BK RECOVERED DATA WITH NO ERROR CORRECTION APPLIED
|
|
* 17h/01h DZT RO BK RECOVERED DATA WITH RETRIES
|
|
* 17h/02h DZT RO BK RECOVERED DATA WITH POSITIVE HEAD OFFSET
|
|
* 17h/03h DZT RO BK RECOVERED DATA WITH NEGATIVE HEAD OFFSET
|
|
* 17h/04h RO B RECOVERED DATA WITH RETRIES AND/OR CIRC APPLIED
|
|
* 17h/05h DZ RO BK RECOVERED DATA USING PREVIOUS SECTOR ID
|
|
* 17h/06h DZ O BK RECOVERED DATA WITHOUT ECC - DATA AUTO-REALLOCATED
|
|
* 17h/07h DZ RO BK RECOVERED DATA WITHOUT ECC - RECOMMEND REASSIGNMENT
|
|
* 17h/08h DZ RO BK RECOVERED DATA WITHOUT ECC - RECOMMEND REWRITE
|
|
* 17h/09h DZ RO BK RECOVERED DATA WITHOUT ECC - DATA REWRITTEN
|
|
* 18h/00h DZT RO BK RECOVERED DATA WITH ERROR CORRECTION APPLIED
|
|
* 18h/01h DZ RO BK RECOVERED DATA WITH ERROR CORR. & RETRIES APPLIED
|
|
* 18h/02h DZ RO BK RECOVERED DATA - DATA AUTO-REALLOCATED
|
|
* 18h/03h R RECOVERED DATA WITH CIRC
|
|
* 18h/04h R RECOVERED DATA WITH L-EC
|
|
* 18h/05h DZ RO BK RECOVERED DATA - RECOMMEND REASSIGNMENT
|
|
* 18h/06h DZ RO BK RECOVERED DATA - RECOMMEND REWRITE
|
|
* 18h/07h DZ O BK RECOVERED DATA WITH ECC - DATA REWRITTEN
|
|
* 18h/08h R RECOVERED DATA WITH LINKING
|
|
* 19h/00h DZ O K DEFECT LIST ERROR
|
|
* 19h/01h DZ O K DEFECT LIST NOT AVAILABLE
|
|
* 19h/02h DZ O K DEFECT LIST ERROR IN PRIMARY LIST
|
|
* 19h/03h DZ O K DEFECT LIST ERROR IN GROWN LIST
|
|
* 1Ah/00h DZTPROMAEBKVF PARAMETER LIST LENGTH ERROR
|
|
* 1Bh/00h DZTPROMAEBKVF SYNCHRONOUS DATA TRANSFER ERROR
|
|
* 1Ch/00h DZ O BK DEFECT LIST NOT FOUND
|
|
* 1Ch/01h DZ O BK PRIMARY DEFECT LIST NOT FOUND
|
|
* 1Ch/02h DZ O BK GROWN DEFECT LIST NOT FOUND
|
|
* 1Dh/00h DZT RO BK MISCOMPARE DURING VERIFY OPERATION
|
|
* 1Dh/01h DZ B MISCOMPARE VERIFY OF UNMAPPED LBA
|
|
* 1Eh/00h DZ O BK RECOVERED ID WITH ECC CORRECTION
|
|
* 1Fh/00h DZ O K PARTIAL DEFECT LIST TRANSFER
|
|
* 20h/00h DZTPROMAEBKVF INVALID COMMAND OPERATION CODE
|
|
* 20h/01h DZTPROMAEBK ACCESS DENIED - INITIATOR PENDING-ENROLLED
|
|
* 20h/02h DZTPROMAEBK ACCESS DENIED - NO ACCESS RIGHTS
|
|
* 20h/03h DZTPROMAEBK ACCESS DENIED - INVALID MGMT ID KEY
|
|
* 20h/04h T ILLEGAL COMMAND WHILE IN WRITE CAPABLE STATE
|
|
* 20h/05h T Obsolete
|
|
* 20h/06h T ILLEGAL COMMAND WHILE IN EXPLICIT ADDRESS MODE
|
|
* 20h/07h T ILLEGAL COMMAND WHILE IN IMPLICIT ADDRESS MODE
|
|
* 20h/08h DZTPROMAEBK ACCESS DENIED - ENROLLMENT CONFLICT
|
|
* 20h/09h DZTPROMAEBK ACCESS DENIED - INVALID LU IDENTIFIER
|
|
* 20h/0Ah DZTPROMAEBK ACCESS DENIED - INVALID PROXY TOKEN
|
|
* 20h/0Bh DZTPROMAEBK ACCESS DENIED - ACL LUN CONFLICT
|
|
* 20h/0Ch T ILLEGAL COMMAND WHEN NOT IN APPEND-ONLY MODE
|
|
* 20h/0Dh D NOT AN ADMINISTRATIVE LOGICAL UNIT
|
|
* 20h/0Eh D NOT A SUBSIDIARY LOGICAL UNIT
|
|
* 20h/0Fh D NOT A CONGLOMERATE LOGICAL UNIT
|
|
* 21h/00h DZT RO BK LOGICAL BLOCK ADDRESS OUT OF RANGE
|
|
* 21h/01h DZT ROM BK INVALID ELEMENT ADDRESS
|
|
* 21h/02h R INVALID ADDRESS FOR WRITE
|
|
* 21h/03h R INVALID WRITE CROSSING LAYER JUMP
|
|
* 21h/04h DZ UNALIGNED WRITE COMMAND
|
|
* 21h/05h DZ WRITE BOUNDARY VIOLATION
|
|
* 21h/06h DZ ATTEMPT TO READ INVALID DATA
|
|
* 21h/07h DZ READ BOUNDARY VIOLATION
|
|
* 21h/08h DZ MISALIGNED WRITE COMMAND
|
|
* 21h/09h DZ ATTEMPT TO ACCESS GAP ZONE
|
|
* 22h/00h DZ ILLEGAL FUNCTION (USE 20 00, 24 00, OR 26 00)
|
|
* 23h/00h DZTP B INVALID TOKEN OPERATION, CAUSE NOT REPORTABLE
|
|
* 23h/01h DZTP B INVALID TOKEN OPERATION, UNSUPPORTED TOKEN TYPE
|
|
* 23h/02h DZTP B INVALID TOKEN OPERATION, REMOTE TOKEN USAGE NOT SUPPORTED
|
|
* 23h/03h DZTP B INVALID TOKEN OPERATION, REMOTE ROD TOKEN CREATION NOT SUPPORTED
|
|
* 23h/04h DZTP B INVALID TOKEN OPERATION, TOKEN UNKNOWN
|
|
* 23h/05h DZTP B INVALID TOKEN OPERATION, TOKEN CORRUPT
|
|
* 23h/06h DZTP B INVALID TOKEN OPERATION, TOKEN REVOKED
|
|
* 23h/07h DZTP B INVALID TOKEN OPERATION, TOKEN EXPIRED
|
|
* 23h/08h DZTP B INVALID TOKEN OPERATION, TOKEN CANCELLED
|
|
* 23h/09h DZTP B INVALID TOKEN OPERATION, TOKEN DELETED
|
|
* 23h/0Ah DZTP B INVALID TOKEN OPERATION, INVALID TOKEN LENGTH
|
|
* 24h/00h DZTPROMAEBKVF INVALID FIELD IN CDB
|
|
* 24h/01h DZTPRO AEBKVF CDB DECRYPTION ERROR
|
|
* 24h/02h T Obsolete
|
|
* 24h/03h T Obsolete
|
|
* 24h/04h F SECURITY AUDIT VALUE FROZEN
|
|
* 24h/05h F SECURITY WORKING KEY FROZEN
|
|
* 24h/06h F NONCE NOT UNIQUE
|
|
* 24h/07h F NONCE TIMESTAMP OUT OF RANGE
|
|
* 24h/08h DZT R MAEBKV INVALID XCDB
|
|
* 24h/09h DZ INVALID FAST FORMAT
|
|
* 25h/00h DZTPROMAEBKVF LOGICAL UNIT NOT SUPPORTED
|
|
* 26h/00h DZTPROMAEBKVF INVALID FIELD IN PARAMETER LIST
|
|
* 26h/01h DZTPROMAEBKVF PARAMETER NOT SUPPORTED
|
|
* 26h/02h DZTPROMAEBKVF PARAMETER VALUE INVALID
|
|
* 26h/03h DZTPROMAE K THRESHOLD PARAMETERS NOT SUPPORTED
|
|
* 26h/04h DZTPROMAEBKVF INVALID RELEASE OF PERSISTENT RESERVATION
|
|
* 26h/05h DZTPRO A BK DATA DECRYPTION ERROR
|
|
* 26h/06h DZTPRO K TOO MANY TARGET DESCRIPTORS
|
|
* 26h/07h DZTPRO K UNSUPPORTED TARGET DESCRIPTOR TYPE CODE
|
|
* 26h/08h DZTPRO K TOO MANY SEGMENT DESCRIPTORS
|
|
* 26h/09h DZTPRO K UNSUPPORTED SEGMENT DESCRIPTOR TYPE CODE
|
|
* 26h/0Ah DZTPRO K UNEXPECTED INEXACT SEGMENT
|
|
* 26h/0Bh DZTPRO K INLINE DATA LENGTH EXCEEDED
|
|
* 26h/0Ch DZTPRO K INVALID OPERATION FOR COPY SOURCE OR DESTINATION
|
|
* 26h/0Dh DZTPRO K COPY SEGMENT GRANULARITY VIOLATION
|
|
* 26h/0Eh DZTPROMAEBK INVALID PARAMETER WHILE PORT IS ENABLED
|
|
* 26h/0Fh F INVALID DATA-OUT BUFFER INTEGRITY CHECK VALUE
|
|
* 26h/10h T DATA DECRYPTION KEY FAIL LIMIT REACHED
|
|
* 26h/11h T INCOMPLETE KEY-ASSOCIATED DATA SET
|
|
* 26h/12h T VENDOR SPECIFIC KEY REFERENCE NOT FOUND
|
|
* 26h/13h D APPLICATION TAG MODE PAGE IS INVALID
|
|
* 26h/14h T TAPE STREAM MIRRORING PREVENTED
|
|
* 26h/15h T COPY SOURCE OR COPY DESTINATION NOT AUTHORIZED
|
|
* 26h/16h DZ FAST COPY NOT POSSIBLE
|
|
* 27h/00h DZT RO BK WRITE PROTECTED
|
|
* 27h/01h DZT RO BK HARDWARE WRITE PROTECTED
|
|
* 27h/02h DZT RO BK LOGICAL UNIT SOFTWARE WRITE PROTECTED
|
|
* 27h/03h T R ASSOCIATED WRITE PROTECT
|
|
* 27h/04h T R PERSISTENT WRITE PROTECT
|
|
* 27h/05h T R PERMANENT WRITE PROTECT
|
|
* 27h/06h R F CONDITIONAL WRITE PROTECT
|
|
* 27h/07h DZ B SPACE ALLOCATION FAILED WRITE PROTECT
|
|
* 27h/08h DZ ZONE IS READ ONLY
|
|
* 28h/00h DZTPROMAEBKVF NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED
|
|
* 28h/01h DZT ROM B IMPORT OR EXPORT ELEMENT ACCESSED
|
|
* 28h/02h R FORMAT-LAYER MAY HAVE CHANGED
|
|
* 28h/03h M IMPORT/EXPORT ELEMENT ACCESSED, MEDIUM CHANGED
|
|
* 29h/00h DZTPROMAEBKVF POWER ON, RESET, OR BUS DEVICE RESET OCCURRED
|
|
* 29h/01h DZTPROMAEBKVF POWER ON OCCURRED
|
|
* 29h/02h DZTPROMAEBKVF SCSI BUS RESET OCCURRED
|
|
* 29h/03h DZTPROMAEBKVF BUS DEVICE RESET FUNCTION OCCURRED
|
|
* 29h/04h DZTPROMAEBKVF DEVICE INTERNAL RESET
|
|
* 29h/05h DZTPROMAEBKVF TRANSCEIVER MODE CHANGED TO SINGLE-ENDED
|
|
* 29h/06h DZTPROMAEBKVF TRANSCEIVER MODE CHANGED TO LVD
|
|
* 29h/07h DZTPROMAEBKVF I_T NEXUS LOSS OCCURRED
|
|
* 2Ah/00h DZT ROMAEBKVF PARAMETERS CHANGED
|
|
* 2Ah/01h DZT ROMAEBKVF MODE PARAMETERS CHANGED
|
|
* 2Ah/02h DZT ROMAE K LOG PARAMETERS CHANGED
|
|
* 2Ah/03h DZTPROMAE K RESERVATIONS PREEMPTED
|
|
* 2Ah/04h DZTPROMAE RESERVATIONS RELEASED
|
|
* 2Ah/05h DZTPROMAE REGISTRATIONS PREEMPTED
|
|
* 2Ah/06h DZTPROMAEBKVF ASYMMETRIC ACCESS STATE CHANGED
|
|
* 2Ah/07h DZTPROMAEBKVF IMPLICIT ASYMMETRIC ACCESS STATE TRANSITION FAILED
|
|
* 2Ah/08h DZT ROMAEBKVF PRIORITY CHANGED
|
|
* 2Ah/09h DZ CAPACITY DATA HAS CHANGED
|
|
* 2Ah/0Ah DZT ERROR HISTORY I_T NEXUS CLEARED
|
|
* 2Ah/0Bh DZT ERROR HISTORY SNAPSHOT RELEASED
|
|
* 2Ah/0Ch F ERROR RECOVERY ATTRIBUTES HAVE CHANGED
|
|
* 2Ah/0Dh T DATA ENCRYPTION CAPABILITIES CHANGED
|
|
* 2Ah/10h DZT M E V TIMESTAMP CHANGED
|
|
* 2Ah/11h T DATA ENCRYPTION PARAMETERS CHANGED BY ANOTHER I_T NEXUS
|
|
* 2Ah/12h T DATA ENCRYPTION PARAMETERS CHANGED BY VENDOR SPECIFIC EVENT
|
|
* 2Ah/13h T DATA ENCRYPTION KEY INSTANCE COUNTER HAS CHANGED
|
|
* 2Ah/14h DZT R MAEBKV SA CREATION CAPABILITIES DATA HAS CHANGED
|
|
* 2Ah/15h T M V MEDIUM REMOVAL PREVENTION PREEMPTED
|
|
* 2Ah/16h DZ ZONE RESET WRITE POINTER RECOMMENDED
|
|
* 2Bh/00h DZTPRO K COPY CANNOT EXECUTE SINCE HOST CANNOT DISCONNECT
|
|
* 2Ch/00h DZTPROMAEBKVF COMMAND SEQUENCE ERROR
|
|
* 2Ch/01h TOO MANY WINDOWS SPECIFIED
|
|
* 2Ch/02h INVALID COMBINATION OF WINDOWS SPECIFIED
|
|
* 2Ch/03h R CURRENT PROGRAM AREA IS NOT EMPTY
|
|
* 2Ch/04h R CURRENT PROGRAM AREA IS EMPTY
|
|
* 2Ch/05h B ILLEGAL POWER CONDITION REQUEST
|
|
* 2Ch/06h R PERSISTENT PREVENT CONFLICT
|
|
* 2Ch/07h DZTPROMAEBKVF PREVIOUS BUSY STATUS
|
|
* 2Ch/08h DZTPROMAEBKVF PREVIOUS TASK SET FULL STATUS
|
|
* 2Ch/09h DZTPROM EBKVF PREVIOUS RESERVATION CONFLICT STATUS
|
|
* 2Ch/0Ah F PARTITION OR COLLECTION CONTAINS USER OBJECTS
|
|
* 2Ch/0Bh T NOT RESERVED
|
|
* 2Ch/0Ch DZ ORWRITE GENERATION DOES NOT MATCH
|
|
* 2Ch/0Dh DZ RESET WRITE POINTER NOT ALLOWED
|
|
* 2Ch/0Eh DZ ZONE IS OFFLINE
|
|
* 2Ch/0Fh DZ STREAM NOT OPEN
|
|
* 2Ch/10h DZ UNWRITTEN DATA IN ZONE
|
|
* 2Ch/11h D DESCRIPTOR FORMAT SENSE DATA REQUIRED
|
|
* 2Ch/12h DZ ZONE IS INACTIVE
|
|
* 2Ch/13h DZTPROMAEBKVF WELL KNOWN LOGICAL UNIT ACCESS REQUIRED
|
|
* 2Dh/00h T OVERWRITE ERROR ON UPDATE IN PLACE
|
|
* 2Eh/00h DZ ROM B INSUFFICIENT TIME FOR OPERATION
|
|
* 2Eh/01h DZ OM B COMMAND TIMEOUT BEFORE PROCESSING
|
|
* 2Eh/02h DZ OM B COMMAND TIMEOUT DURING PROCESSING
|
|
* 2Eh/03h DZ OM B COMMAND TIMEOUT DURING PROCESSING DUE TO ERROR RECOVERY
|
|
* 2Fh/00h DZTPROMAEBKVF COMMANDS CLEARED BY ANOTHER INITIATOR
|
|
* 2Fh/01h DZ COMMANDS CLEARED BY POWER LOSS NOTIFICATION
|
|
* 2Fh/02h DZTPROMAEBKVF COMMANDS CLEARED BY DEVICE SERVER
|
|
* 2Fh/03h DZTPROMAEBKVF SOME COMMANDS CLEARED BY QUEUING LAYER EVENT
|
|
* 30h/00h DZT ROM BK INCOMPATIBLE MEDIUM INSTALLED
|
|
* 30h/01h DZT RO BK CANNOT READ MEDIUM - UNKNOWN FORMAT
|
|
* 30h/02h DZT RO BK CANNOT READ MEDIUM - INCOMPATIBLE FORMAT
|
|
* 30h/03h DZT R M K CLEANING CARTRIDGE INSTALLED
|
|
* 30h/04h DZT RO BK CANNOT WRITE MEDIUM - UNKNOWN FORMAT
|
|
* 30h/05h DZT RO BK CANNOT WRITE MEDIUM - INCOMPATIBLE FORMAT
|
|
* 30h/06h DZT RO B CANNOT FORMAT MEDIUM - INCOMPATIBLE MEDIUM
|
|
* 30h/07h DZT ROMAEBKVF CLEANING FAILURE
|
|
* 30h/08h R CANNOT WRITE - APPLICATION CODE MISMATCH
|
|
* 30h/09h R CURRENT SESSION NOT FIXATED FOR APPEND
|
|
* 30h/0Ah DZT RO AEBK CLEANING REQUEST REJECTED
|
|
* 30h/0Ch T WORM MEDIUM - OVERWRITE ATTEMPTED
|
|
* 30h/0Dh T WORM MEDIUM - INTEGRITY CHECK
|
|
* 30h/10h R MEDIUM NOT FORMATTED
|
|
* 30h/11h M INCOMPATIBLE VOLUME TYPE
|
|
* 30h/12h M INCOMPATIBLE VOLUME QUALIFIER
|
|
* 30h/13h M CLEANING VOLUME EXPIRED
|
|
* 31h/00h DZT RO BK MEDIUM FORMAT CORRUPTED
|
|
* 31h/01h DZ RO B FORMAT COMMAND FAILED
|
|
* 31h/02h R ZONED FORMATTING FAILED DUE TO SPARE LINKING
|
|
* 31h/03h DZ B SANITIZE COMMAND FAILED
|
|
* 31h/04h DZ DEPOPULATION FAILED
|
|
* 31h/05h DZ DEPOPULATION RESTORATION FAILED
|
|
* 32h/00h DZ O BK NO DEFECT SPARE LOCATION AVAILABLE
|
|
* 32h/01h DZ O BK DEFECT LIST UPDATE FAILURE
|
|
* 33h/00h T TAPE LENGTH ERROR
|
|
* 34h/00h DZTPROMAEBKVF ENCLOSURE FAILURE
|
|
* 35h/00h DZTPROMAEBKVF ENCLOSURE SERVICES FAILURE
|
|
* 35h/01h DZTPROMAEBKVF UNSUPPORTED ENCLOSURE FUNCTION
|
|
* 35h/02h DZTPROMAEBKVF ENCLOSURE SERVICES UNAVAILABLE
|
|
* 35h/03h DZTPROMAEBKVF ENCLOSURE SERVICES TRANSFER FAILURE
|
|
* 35h/04h DZTPROMAEBKVF ENCLOSURE SERVICES TRANSFER REFUSED
|
|
* 35h/05h DZT ROMAEBKVF ENCLOSURE SERVICES CHECKSUM ERROR
|
|
* 36h/00h RIBBON, INK, OR TONER FAILURE
|
|
* 37h/00h DZT ROMAEBKVF ROUNDED PARAMETER
|
|
* 38h/00h B EVENT STATUS NOTIFICATION
|
|
* 38h/02h B ESN - POWER MANAGEMENT CLASS EVENT
|
|
* 38h/04h B ESN - MEDIA CLASS EVENT
|
|
* 38h/06h B ESN - DEVICE BUSY CLASS EVENT
|
|
* 38h/07h DZ THIN PROVISIONING SOFT THRESHOLD REACHED
|
|
* 38h/08h DZ DEPOPULATION INTERRUPTED
|
|
* 39h/00h DZT ROMAE K SAVING PARAMETERS NOT SUPPORTED
|
|
* 3Ah/00h DZT ROM BK MEDIUM NOT PRESENT
|
|
* 3Ah/01h DZT ROM BK MEDIUM NOT PRESENT - TRAY CLOSED
|
|
* 3Ah/02h DZT ROM BK MEDIUM NOT PRESENT - TRAY OPEN
|
|
* 3Ah/03h DZT ROM B MEDIUM NOT PRESENT - LOADABLE
|
|
* 3Ah/04h DZT RO B MEDIUM NOT PRESENT - MEDIUM AUXILIARY MEMORY ACCESSIBLE
|
|
* 3Bh/00h T SEQUENTIAL POSITIONING ERROR
|
|
* 3Bh/01h T TAPE POSITION ERROR AT BEGINNING-OF-MEDIUM
|
|
* 3Bh/02h T TAPE POSITION ERROR AT END-OF-MEDIUM
|
|
* 3Bh/03h TAPE OR ELECTRONIC VERTICAL FORMS UNIT NOT READY
|
|
* 3Bh/04h SLEW FAILURE
|
|
* 3Bh/05h PAPER JAM
|
|
* 3Bh/06h FAILED TO SENSE TOP-OF-FORM
|
|
* 3Bh/07h FAILED TO SENSE BOTTOM-OF-FORM
|
|
* 3Bh/08h T REPOSITION ERROR
|
|
* 3Bh/09h READ PAST END OF MEDIUM
|
|
* 3Bh/0Ah READ PAST BEGINNING OF MEDIUM
|
|
* 3Bh/0Bh POSITION PAST END OF MEDIUM
|
|
* 3Bh/0Ch T POSITION PAST BEGINNING OF MEDIUM
|
|
* 3Bh/0Dh DZT ROM BK MEDIUM DESTINATION ELEMENT FULL
|
|
* 3Bh/0Eh DZT ROM BK MEDIUM SOURCE ELEMENT EMPTY
|
|
* 3Bh/0Fh R END OF MEDIUM REACHED
|
|
* 3Bh/11h DZT ROM BK MEDIUM MAGAZINE NOT ACCESSIBLE
|
|
* 3Bh/12h DZT ROM BK MEDIUM MAGAZINE REMOVED
|
|
* 3Bh/13h DZT ROM BK MEDIUM MAGAZINE INSERTED
|
|
* 3Bh/14h DZT ROM BK MEDIUM MAGAZINE LOCKED
|
|
* 3Bh/15h DZT ROM BK MEDIUM MAGAZINE UNLOCKED
|
|
* 3Bh/16h R MECHANICAL POSITIONING OR CHANGER ERROR
|
|
* 3Bh/17h F READ PAST END OF USER OBJECT
|
|
* 3Bh/18h M ELEMENT DISABLED
|
|
* 3Bh/19h M ELEMENT ENABLED
|
|
* 3Bh/1Ah M DATA TRANSFER DEVICE REMOVED
|
|
* 3Bh/1Bh M DATA TRANSFER DEVICE INSERTED
|
|
* 3Bh/1Ch T TOO MANY LOGICAL OBJECTS ON PARTITION TO SUPPORT OPERATION
|
|
* 3Bh/20h M ELEMENT STATIC INFORMATION CHANGED
|
|
* 3Ch/00h
|
|
* 3Dh/00h DZTPROMAE K INVALID BITS IN IDENTIFY MESSAGE
|
|
* 3Eh/00h DZTPROMAEBKVF LOGICAL UNIT HAS NOT SELF-CONFIGURED YET
|
|
* 3Eh/01h DZTPROMAEBKVF LOGICAL UNIT FAILURE
|
|
* 3Eh/02h DZTPROMAEBKVF TIMEOUT ON LOGICAL UNIT
|
|
* 3Eh/03h DZTPROMAEBKVF LOGICAL UNIT FAILED SELF-TEST
|
|
* 3Eh/04h DZTPROMAEBKVF LOGICAL UNIT UNABLE TO UPDATE SELF-TEST LOG
|
|
* 3Fh/00h DZTPROMAEBKVF TARGET OPERATING CONDITIONS HAVE CHANGED
|
|
* 3Fh/01h DZTPROMAEBKVF MICROCODE HAS BEEN CHANGED
|
|
* 3Fh/02h DZTPROM BK CHANGED OPERATING DEFINITION
|
|
* 3Fh/03h DZTPROMAEBKVF INQUIRY DATA HAS CHANGED
|
|
* 3Fh/04h DZT ROMAEBK COMPONENT DEVICE ATTACHED
|
|
* 3Fh/05h DZT ROMAEBK DEVICE IDENTIFIER CHANGED
|
|
* 3Fh/06h DZT ROMAEB REDUNDANCY GROUP CREATED OR MODIFIED
|
|
* 3Fh/07h DZT ROMAEB REDUNDANCY GROUP DELETED
|
|
* 3Fh/08h DZT ROMAEB SPARE CREATED OR MODIFIED
|
|
* 3Fh/09h DZT ROMAEB SPARE DELETED
|
|
* 3Fh/0Ah DZT ROMAEBK VOLUME SET CREATED OR MODIFIED
|
|
* 3Fh/0Bh DZT ROMAEBK VOLUME SET DELETED
|
|
* 3Fh/0Ch DZT ROMAEBK VOLUME SET DEASSIGNED
|
|
* 3Fh/0Dh DZT ROMAEBK VOLUME SET REASSIGNED
|
|
* 3Fh/0Eh DZTPROMAE REPORTED LUNS DATA HAS CHANGED
|
|
* 3Fh/0Fh DZTPROMAEBKVF ECHO BUFFER OVERWRITTEN
|
|
* 3Fh/10h DZT ROM B MEDIUM LOADABLE
|
|
* 3Fh/11h DZT ROM B MEDIUM AUXILIARY MEMORY ACCESSIBLE
|
|
* 3Fh/12h DZTPR MAEBK F iSCSI IP ADDRESS ADDED
|
|
* 3Fh/13h DZTPR MAEBK F iSCSI IP ADDRESS REMOVED
|
|
* 3Fh/14h DZTPR MAEBK F iSCSI IP ADDRESS CHANGED
|
|
* 3Fh/15h DZTPR MAEBK INSPECT REFERRALS SENSE DESCRIPTORS
|
|
* 3Fh/16h DZTPROMAEBKVF MICROCODE HAS BEEN CHANGED WITHOUT RESET
|
|
* 3Fh/17h DZ ZONE TRANSITION TO FULL
|
|
* 3Fh/18h D BIND COMPLETED
|
|
* 3Fh/19h D BIND REDIRECTED
|
|
* 3Fh/1Ah D SUBSIDIARY BINDING CHANGED
|
|
* 40h/00h DZ RAM FAILURE (SHOULD USE 40 NN)
|
|
* 40h/NNh DZTPROMAEBKVF DIAGNOSTIC FAILURE ON COMPONENT NN (80h-FFh)
|
|
* 41h/00h DZ DATA PATH FAILURE (SHOULD USE 40 NN)
|
|
* 42h/00h DZ POWER-ON OR SELF-TEST FAILURE (SHOULD USE 40 NN)
|
|
* 43h/00h DZTPROMAEBKVF MESSAGE ERROR
|
|
* 44h/00h DZTPROMAEBKVF INTERNAL TARGET FAILURE
|
|
* 44h/01h DZTP MAEBKVF PERSISTENT RESERVATION INFORMATION LOST
|
|
* 44h/71h DZT B ATA DEVICE FAILED SET FEATURES
|
|
* 45h/00h DZTPROMAEBKVF SELECT OR RESELECT FAILURE
|
|
* 46h/00h DZTPROM BK UNSUCCESSFUL SOFT RESET
|
|
* 47h/00h DZTPROMAEBKVF SCSI PARITY ERROR
|
|
* 47h/01h DZTPROMAEBKVF DATA PHASE CRC ERROR DETECTED
|
|
* 47h/02h DZTPROMAEBKVF SCSI PARITY ERROR DETECTED DURING ST DATA PHASE
|
|
* 47h/03h DZTPROMAEBKVF INFORMATION UNIT iuCRC ERROR DETECTED
|
|
* 47h/04h DZTPROMAEBKVF ASYNCHRONOUS INFORMATION PROTECTION ERROR DETECTED
|
|
* 47h/05h DZTPROMAEBKVF PROTOCOL SERVICE CRC ERROR
|
|
* 47h/06h DZT MAEBKVF PHY TEST FUNCTION IN PROGRESS
|
|
* 47h/7Fh DZTPROMAEBK SOME COMMANDS CLEARED BY ISCSI PROTOCOL EVENT
|
|
* 48h/00h DZTPROMAEBKVF INITIATOR DETECTED ERROR MESSAGE RECEIVED
|
|
* 49h/00h DZTPROMAEBKVF INVALID MESSAGE ERROR
|
|
* 4Ah/00h DZTPROMAEBKVF COMMAND PHASE ERROR
|
|
* 4Bh/00h DZTPROMAEBKVF DATA PHASE ERROR
|
|
* 4Bh/01h DZTPROMAEBK INVALID TARGET PORT TRANSFER TAG RECEIVED
|
|
* 4Bh/02h DZTPROMAEBK TOO MUCH WRITE DATA
|
|
* 4Bh/03h DZTPROMAEBK ACK/NAK TIMEOUT
|
|
* 4Bh/04h DZTPROMAEBK NAK RECEIVED
|
|
* 4Bh/05h DZTPROMAEBK DATA OFFSET ERROR
|
|
* 4Bh/06h DZTPROMAEBK INITIATOR RESPONSE TIMEOUT
|
|
* 4Bh/07h DZTPROMAEBK F CONNECTION LOST
|
|
* 4Bh/08h DZTPROMAEBK F DATA-IN BUFFER OVERFLOW - DATA BUFFER SIZE
|
|
* 4Bh/09h DZTPROMAEBK F DATA-IN BUFFER OVERFLOW - DATA BUFFER DESCRIPTOR AREA
|
|
* 4Bh/0Ah DZTPROMAEBK F DATA-IN BUFFER ERROR
|
|
* 4Bh/0Bh DZTPROMAEBK F DATA-OUT BUFFER OVERFLOW - DATA BUFFER SIZE
|
|
* 4Bh/0Ch DZTPROMAEBK F DATA-OUT BUFFER OVERFLOW - DATA BUFFER DESCRIPTOR AREA
|
|
* 4Bh/0Dh DZTPROMAEBK F DATA-OUT BUFFER ERROR
|
|
* 4Bh/0Eh DZTPROMAEBK F PCIE FABRIC ERROR
|
|
* 4Bh/0Fh DZTPROMAEBK F PCIE COMPLETION TIMEOUT
|
|
* 4Bh/10h DZTPROMAEBK F PCIE COMPLETER ABORT
|
|
* 4Bh/11h DZTPROMAEBK F PCIE POISONED TLP RECEIVED
|
|
* 4Bh/12h DZTPROMAEBK F PCIE ECRC CHECK FAILED
|
|
* 4Bh/13h DZTPROMAEBK F PCIE UNSUPPORTED REQUEST
|
|
* 4Bh/14h DZTPROMAEBK F PCIE ACS VIOLATION
|
|
* 4Bh/15h DZTPROMAEBK F PCIE TLP PREFIX BLOCKED
|
|
* 4Ch/00h DZTPROMAEBKVF LOGICAL UNIT FAILED SELF-CONFIGURATION
|
|
* 4Dh/NNh DZTPROMAEBKVF TAGGED OVERLAPPED COMMANDS (NN = TASK TAG)
|
|
* 4Eh/00h DZTPROMAEBKVF OVERLAPPED COMMANDS ATTEMPTED
|
|
* 4Fh/00h
|
|
* 50h/00h T WRITE APPEND ERROR
|
|
* 50h/01h T WRITE APPEND POSITION ERROR
|
|
* 50h/02h T POSITION ERROR RELATED TO TIMING
|
|
* 51h/00h DZT RO ERASE FAILURE
|
|
* 51h/01h DZ R ERASE FAILURE - INCOMPLETE ERASE OPERATION DETECTED
|
|
* 52h/00h T CARTRIDGE FAULT
|
|
* 53h/00h DZT ROM BK MEDIA LOAD OR EJECT FAILED
|
|
* 53h/01h T UNLOAD TAPE FAILURE
|
|
* 53h/02h DZT ROM BK MEDIUM REMOVAL PREVENTED
|
|
* 53h/03h M MEDIUM REMOVAL PREVENTED BY DATA TRANSFER ELEMENT
|
|
* 53h/04h T MEDIUM THREAD OR UNTHREAD FAILURE
|
|
* 53h/05h M VOLUME IDENTIFIER INVALID
|
|
* 53h/06h M VOLUME IDENTIFIER MISSING
|
|
* 53h/07h M DUPLICATE VOLUME IDENTIFIER
|
|
* 53h/08h M ELEMENT STATUS UNKNOWN
|
|
* 53h/09h M DATA TRANSFER DEVICE ERROR - LOAD FAILED
|
|
* 53h/0Ah M DATA TRANSFER DEVICE ERROR - UNLOAD FAILED
|
|
* 53h/0Bh M DATA TRANSFER DEVICE ERROR - UNLOAD MISSING
|
|
* 53h/0Ch M DATA TRANSFER DEVICE ERROR - EJECT FAILED
|
|
* 53h/0Dh M DATA TRANSFER DEVICE ERROR - LIBRARY COMMUNICATION FAILED
|
|
* 54h/00h P SCSI TO HOST SYSTEM INTERFACE FAILURE
|
|
* 55h/00h P SYSTEM RESOURCE FAILURE
|
|
* 55h/01h DZ O BK SYSTEM BUFFER FULL
|
|
* 55h/02h DZTPROMAE K INSUFFICIENT RESERVATION RESOURCES
|
|
* 55h/03h DZTPROMAE K INSUFFICIENT RESOURCES
|
|
* 55h/04h DZTPROMAE K INSUFFICIENT REGISTRATION RESOURCES
|
|
* 55h/05h DZTPROMAEBK INSUFFICIENT ACCESS CONTROL RESOURCES
|
|
* 55h/06h DZT ROM B AUXILIARY MEMORY OUT OF SPACE
|
|
* 55h/07h F QUOTA ERROR
|
|
* 55h/08h T MAXIMUM NUMBER OF SUPPLEMENTAL DECRYPTION KEYS EXCEEDED
|
|
* 55h/09h M MEDIUM AUXILIARY MEMORY NOT ACCESSIBLE
|
|
* 55h/0Ah DZ M DATA CURRENTLY UNAVAILABLE
|
|
* 55h/0Bh DZTPROMAEBKVF INSUFFICIENT POWER FOR OPERATION
|
|
* 55h/0Ch DZTP B INSUFFICIENT RESOURCES TO CREATE ROD
|
|
* 55h/0Dh DZTP B INSUFFICIENT RESOURCES TO CREATE ROD TOKEN
|
|
* 55h/0Eh DZ INSUFFICIENT ZONE RESOURCES
|
|
* 55h/0Fh DZ INSUFFICIENT ZONE RESOURCES TO COMPLETE WRITE
|
|
* 55h/10h DZ MAXIMUM NUMBER OF STREAMS OPEN
|
|
* 55h/11h D INSUFFICIENT RESOURCES TO BIND
|
|
* 56h/00h
|
|
* 57h/00h R UNABLE TO RECOVER TABLE-OF-CONTENTS
|
|
* 58h/00h O GENERATION DOES NOT EXIST
|
|
* 59h/00h O UPDATED BLOCK READ
|
|
* 5Ah/00h DZTPRO BK OPERATOR REQUEST OR STATE CHANGE INPUT
|
|
* 5Ah/01h DZT ROM BK OPERATOR MEDIUM REMOVAL REQUEST
|
|
* 5Ah/02h DZT RO A BK OPERATOR SELECTED WRITE PROTECT
|
|
* 5Ah/03h DZT RO A BK OPERATOR SELECTED WRITE PERMIT
|
|
* 5Bh/00h DZTPROM K LOG EXCEPTION
|
|
* 5Bh/01h DZTPROM K THRESHOLD CONDITION MET
|
|
* 5Bh/02h DZTPROM K LOG COUNTER AT MAXIMUM
|
|
* 5Bh/03h DZTPROM K LOG LIST CODES EXHAUSTED
|
|
* 5Ch/00h DZ O RPL STATUS CHANGE
|
|
* 5Ch/01h DZ O SPINDLES SYNCHRONIZED
|
|
* 5Ch/02h DZ O SPINDLES NOT SYNCHRONIZED
|
|
* 5Dh/00h DZTPROMAEBKVF FAILURE PREDICTION THRESHOLD EXCEEDED
|
|
* 5Dh/01h R B MEDIA FAILURE PREDICTION THRESHOLD EXCEEDED
|
|
* 5Dh/02h R LOGICAL UNIT FAILURE PREDICTION THRESHOLD EXCEEDED
|
|
* 5Dh/03h R SPARE AREA EXHAUSTION PREDICTION THRESHOLD EXCEEDED
|
|
* 5Dh/10h DZ B HARDWARE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE
|
|
* 5Dh/11h DZ B HARDWARE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH
|
|
* 5Dh/12h DZ B HARDWARE IMPENDING FAILURE DATA ERROR RATE TOO HIGH
|
|
* 5Dh/13h DZ B HARDWARE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH
|
|
* 5Dh/14h DZ B HARDWARE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS
|
|
* 5Dh/15h DZ B HARDWARE IMPENDING FAILURE ACCESS TIMES TOO HIGH
|
|
* 5Dh/16h DZ B HARDWARE IMPENDING FAILURE START UNIT TIMES TOO HIGH
|
|
* 5Dh/17h DZ B HARDWARE IMPENDING FAILURE CHANNEL PARAMETRICS
|
|
* 5Dh/18h DZ B HARDWARE IMPENDING FAILURE CONTROLLER DETECTED
|
|
* 5Dh/19h DZ B HARDWARE IMPENDING FAILURE THROUGHPUT PERFORMANCE
|
|
* 5Dh/1Ah DZ B HARDWARE IMPENDING FAILURE SEEK TIME PERFORMANCE
|
|
* 5Dh/1Bh DZ B HARDWARE IMPENDING FAILURE SPIN-UP RETRY COUNT
|
|
* 5Dh/1Ch DZ B HARDWARE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT
|
|
* 5Dh/1Dh DZ B HARDWARE IMPENDING FAILURE POWER LOSS PROTECTION CIRCUIT
|
|
* 5Dh/20h DZ B CONTROLLER IMPENDING FAILURE GENERAL HARD DRIVE FAILURE
|
|
* 5Dh/21h DZ B CONTROLLER IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH
|
|
* 5Dh/22h DZ B CONTROLLER IMPENDING FAILURE DATA ERROR RATE TOO HIGH
|
|
* 5Dh/23h DZ B CONTROLLER IMPENDING FAILURE SEEK ERROR RATE TOO HIGH
|
|
* 5Dh/24h DZ B CONTROLLER IMPENDING FAILURE TOO MANY BLOCK REASSIGNS
|
|
* 5Dh/25h DZ B CONTROLLER IMPENDING FAILURE ACCESS TIMES TOO HIGH
|
|
* 5Dh/26h DZ B CONTROLLER IMPENDING FAILURE START UNIT TIMES TOO HIGH
|
|
* 5Dh/27h DZ B CONTROLLER IMPENDING FAILURE CHANNEL PARAMETRICS
|
|
* 5Dh/28h DZ B CONTROLLER IMPENDING FAILURE CONTROLLER DETECTED
|
|
* 5Dh/29h DZ B CONTROLLER IMPENDING FAILURE THROUGHPUT PERFORMANCE
|
|
* 5Dh/2Ah DZ B CONTROLLER IMPENDING FAILURE SEEK TIME PERFORMANCE
|
|
* 5Dh/2Bh DZ B CONTROLLER IMPENDING FAILURE SPIN-UP RETRY COUNT
|
|
* 5Dh/2Ch DZ B CONTROLLER IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT
|
|
* 5Dh/30h DZ B DATA CHANNEL IMPENDING FAILURE GENERAL HARD DRIVE FAILURE
|
|
* 5Dh/31h DZ B DATA CHANNEL IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH
|
|
* 5Dh/32h DZ B DATA CHANNEL IMPENDING FAILURE DATA ERROR RATE TOO HIGH
|
|
* 5Dh/33h DZ B DATA CHANNEL IMPENDING FAILURE SEEK ERROR RATE TOO HIGH
|
|
* 5Dh/34h DZ B DATA CHANNEL IMPENDING FAILURE TOO MANY BLOCK REASSIGNS
|
|
* 5Dh/35h DZ B DATA CHANNEL IMPENDING FAILURE ACCESS TIMES TOO HIGH
|
|
* 5Dh/36h DZ B DATA CHANNEL IMPENDING FAILURE START UNIT TIMES TOO HIGH
|
|
* 5Dh/37h DZ B DATA CHANNEL IMPENDING FAILURE CHANNEL PARAMETRICS
|
|
* 5Dh/38h DZ B DATA CHANNEL IMPENDING FAILURE CONTROLLER DETECTED
|
|
* 5Dh/39h DZ B DATA CHANNEL IMPENDING FAILURE THROUGHPUT PERFORMANCE
|
|
* 5Dh/3Ah DZ B DATA CHANNEL IMPENDING FAILURE SEEK TIME PERFORMANCE
|
|
* 5Dh/3Bh DZ B DATA CHANNEL IMPENDING FAILURE SPIN-UP RETRY COUNT
|
|
* 5Dh/3Ch DZ B DATA CHANNEL IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT
|
|
* 5Dh/40h DZ B SERVO IMPENDING FAILURE GENERAL HARD DRIVE FAILURE
|
|
* 5Dh/41h DZ B SERVO IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH
|
|
* 5Dh/42h DZ B SERVO IMPENDING FAILURE DATA ERROR RATE TOO HIGH
|
|
* 5Dh/43h DZ B SERVO IMPENDING FAILURE SEEK ERROR RATE TOO HIGH
|
|
* 5Dh/44h DZ B SERVO IMPENDING FAILURE TOO MANY BLOCK REASSIGNS
|
|
* 5Dh/45h DZ B SERVO IMPENDING FAILURE ACCESS TIMES TOO HIGH
|
|
* 5Dh/46h DZ B SERVO IMPENDING FAILURE START UNIT TIMES TOO HIGH
|
|
* 5Dh/47h DZ B SERVO IMPENDING FAILURE CHANNEL PARAMETRICS
|
|
* 5Dh/48h DZ B SERVO IMPENDING FAILURE CONTROLLER DETECTED
|
|
* 5Dh/49h DZ B SERVO IMPENDING FAILURE THROUGHPUT PERFORMANCE
|
|
* 5Dh/4Ah DZ B SERVO IMPENDING FAILURE SEEK TIME PERFORMANCE
|
|
* 5Dh/4Bh DZ B SERVO IMPENDING FAILURE SPIN-UP RETRY COUNT
|
|
* 5Dh/4Ch DZ B SERVO IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT
|
|
* 5Dh/50h DZ B SPINDLE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE
|
|
* 5Dh/51h DZ B SPINDLE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH
|
|
* 5Dh/52h DZ B SPINDLE IMPENDING FAILURE DATA ERROR RATE TOO HIGH
|
|
* 5Dh/53h DZ B SPINDLE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH
|
|
* 5Dh/54h DZ B SPINDLE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS
|
|
* 5Dh/55h DZ B SPINDLE IMPENDING FAILURE ACCESS TIMES TOO HIGH
|
|
* 5Dh/56h DZ B SPINDLE IMPENDING FAILURE START UNIT TIMES TOO HIGH
|
|
* 5Dh/57h DZ B SPINDLE IMPENDING FAILURE CHANNEL PARAMETRICS
|
|
* 5Dh/58h DZ B SPINDLE IMPENDING FAILURE CONTROLLER DETECTED
|
|
* 5Dh/59h DZ B SPINDLE IMPENDING FAILURE THROUGHPUT PERFORMANCE
|
|
* 5Dh/5Ah DZ B SPINDLE IMPENDING FAILURE SEEK TIME PERFORMANCE
|
|
* 5Dh/5Bh DZ B SPINDLE IMPENDING FAILURE SPIN-UP RETRY COUNT
|
|
* 5Dh/5Ch DZ B SPINDLE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT
|
|
* 5Dh/60h DZ B FIRMWARE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE
|
|
* 5Dh/61h DZ B FIRMWARE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH
|
|
* 5Dh/62h DZ B FIRMWARE IMPENDING FAILURE DATA ERROR RATE TOO HIGH
|
|
* 5Dh/63h DZ B FIRMWARE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH
|
|
* 5Dh/64h DZ B FIRMWARE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS
|
|
* 5Dh/65h DZ B FIRMWARE IMPENDING FAILURE ACCESS TIMES TOO HIGH
|
|
* 5Dh/66h DZ B FIRMWARE IMPENDING FAILURE START UNIT TIMES TOO HIGH
|
|
* 5Dh/67h DZ B FIRMWARE IMPENDING FAILURE CHANNEL PARAMETRICS
|
|
* 5Dh/68h DZ B FIRMWARE IMPENDING FAILURE CONTROLLER DETECTED
|
|
* 5Dh/69h DZ B FIRMWARE IMPENDING FAILURE THROUGHPUT PERFORMANCE
|
|
* 5Dh/6Ah DZ B FIRMWARE IMPENDING FAILURE SEEK TIME PERFORMANCE
|
|
* 5Dh/6Bh DZ B FIRMWARE IMPENDING FAILURE SPIN-UP RETRY COUNT
|
|
* 5Dh/6Ch DZ B FIRMWARE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT
|
|
* 5Dh/73h DZ B MEDIA IMPENDING FAILURE ENDURANCE LIMIT MET
|
|
* 5Dh/FFh DZTPROMAEBKVF FAILURE PREDICTION THRESHOLD EXCEEDED (FALSE)
|
|
* 5Eh/00h DZTPRO A K LOW POWER CONDITION ON
|
|
* 5Eh/01h DZTPRO A K IDLE CONDITION ACTIVATED BY TIMER
|
|
* 5Eh/02h DZTPRO A K STANDBY CONDITION ACTIVATED BY TIMER
|
|
* 5Eh/03h DZTPRO A K IDLE CONDITION ACTIVATED BY COMMAND
|
|
* 5Eh/04h DZTPRO A K STANDBY CONDITION ACTIVATED BY COMMAND
|
|
* 5Eh/05h DZTPRO A K IDLE_B CONDITION ACTIVATED BY TIMER
|
|
* 5Eh/06h DZTPRO A K IDLE_B CONDITION ACTIVATED BY COMMAND
|
|
* 5Eh/07h DZTPRO A K IDLE_C CONDITION ACTIVATED BY TIMER
|
|
* 5Eh/08h DZTPRO A K IDLE_C CONDITION ACTIVATED BY COMMAND
|
|
* 5Eh/09h DZTPRO A K STANDBY_Y CONDITION ACTIVATED BY TIMER
|
|
* 5Eh/0Ah DZTPRO A K STANDBY_Y CONDITION ACTIVATED BY COMMAND
|
|
* 5Eh/41h B POWER STATE CHANGE TO ACTIVE
|
|
* 5Eh/42h B POWER STATE CHANGE TO IDLE
|
|
* 5Eh/43h B POWER STATE CHANGE TO STANDBY
|
|
* 5Eh/45h B POWER STATE CHANGE TO SLEEP
|
|
* 5Eh/47h BK POWER STATE CHANGE TO DEVICE CONTROL
|
|
* 5Fh/00h
|
|
* 60h/00h LAMP FAILURE
|
|
* 61h/00h VIDEO ACQUISITION ERROR
|
|
* 61h/01h UNABLE TO ACQUIRE VIDEO
|
|
* 61h/02h OUT OF FOCUS
|
|
* 62h/00h SCAN HEAD POSITIONING ERROR
|
|
* 63h/00h R END OF USER AREA ENCOUNTERED ON THIS TRACK
|
|
* 63h/01h R PACKET DOES NOT FIT IN AVAILABLE SPACE
|
|
* 64h/00h R ILLEGAL MODE FOR THIS TRACK
|
|
* 64h/01h R INVALID PACKET SIZE
|
|
* 65h/00h DZTPROMAEBKVF VOLTAGE FAULT
|
|
* 66h/00h AUTOMATIC DOCUMENT FEEDER COVER UP
|
|
* 66h/01h AUTOMATIC DOCUMENT FEEDER LIFT UP
|
|
* 66h/02h DOCUMENT JAM IN AUTOMATIC DOCUMENT FEEDER
|
|
* 66h/03h DOCUMENT MISS FEED AUTOMATIC IN DOCUMENT FEEDER
|
|
* 67h/00h A CONFIGURATION FAILURE
|
|
* 67h/01h A CONFIGURATION OF INCAPABLE LOGICAL UNITS FAILED
|
|
* 67h/02h A ADD LOGICAL UNIT FAILED
|
|
* 67h/03h A MODIFICATION OF LOGICAL UNIT FAILED
|
|
* 67h/04h A EXCHANGE OF LOGICAL UNIT FAILED
|
|
* 67h/05h A REMOVE OF LOGICAL UNIT FAILED
|
|
* 67h/06h A ATTACHMENT OF LOGICAL UNIT FAILED
|
|
* 67h/07h A CREATION OF LOGICAL UNIT FAILED
|
|
* 67h/08h A ASSIGN FAILURE OCCURRED
|
|
* 67h/09h A MULTIPLY ASSIGNED LOGICAL UNIT
|
|
* 67h/0Ah DZTPROMAEBKVF SET TARGET PORT GROUPS COMMAND FAILED
|
|
* 67h/0Bh DZT B ATA DEVICE FEATURE NOT ENABLED
|
|
* 67h/0Ch D COMMAND REJECTED
|
|
* 67h/0Dh D EXPLICIT BIND NOT ALLOWED
|
|
* 68h/00h A LOGICAL UNIT NOT CONFIGURED
|
|
* 68h/01h DZ SUBSIDIARY LOGICAL UNIT NOT CONFIGURED
|
|
* 69h/00h A DATA LOSS ON LOGICAL UNIT
|
|
* 69h/01h A MULTIPLE LOGICAL UNIT FAILURES
|
|
* 69h/02h A PARITY/DATA MISMATCH
|
|
* 6Ah/00h A INFORMATIONAL, REFER TO LOG
|
|
* 6Bh/00h A STATE CHANGE HAS OCCURRED
|
|
* 6Bh/01h A REDUNDANCY LEVEL GOT BETTER
|
|
* 6Bh/02h A REDUNDANCY LEVEL GOT WORSE
|
|
* 6Ch/00h A REBUILD FAILURE OCCURRED
|
|
* 6Dh/00h A RECALCULATE FAILURE OCCURRED
|
|
* 6Eh/00h A COMMAND TO LOGICAL UNIT FAILED
|
|
* 6Fh/00h R COPY PROTECTION KEY EXCHANGE FAILURE - AUTHENTICATION FAILURE
|
|
* 6Fh/01h R COPY PROTECTION KEY EXCHANGE FAILURE - KEY NOT PRESENT
|
|
* 6Fh/02h R COPY PROTECTION KEY EXCHANGE FAILURE - KEY NOT ESTABLISHED
|
|
* 6Fh/03h R READ OF SCRAMBLED SECTOR WITHOUT AUTHENTICATION
|
|
* 6Fh/04h R MEDIA REGION CODE IS MISMATCHED TO LOGICAL UNIT REGION
|
|
* 6Fh/05h R DRIVE REGION MUST BE PERMANENT/REGION RESET COUNT ERROR
|
|
* 6Fh/06h R INSUFFICIENT BLOCK COUNT FOR BINDING NONCE RECORDING
|
|
* 6Fh/07h R CONFLICT IN BINDING NONCE RECORDING
|
|
* 6Fh/08h R INSUFFICIENT PERMISSION
|
|
* 6Fh/09h R INVALID DRIVE-HOST PAIRING SERVER
|
|
* 6Fh/0Ah R DRIVE-HOST PAIRING SUSPENDED
|
|
* 70h/NNh T DECOMPRESSION EXCEPTION SHORT ALGORITHM ID OF NN
|
|
* 71h/00h T DECOMPRESSION EXCEPTION LONG ALGORITHM ID
|
|
* 72h/00h R SESSION FIXATION ERROR
|
|
* 72h/01h R SESSION FIXATION ERROR WRITING LEAD-IN
|
|
* 72h/02h R SESSION FIXATION ERROR WRITING LEAD-OUT
|
|
* 72h/03h R SESSION FIXATION ERROR - INCOMPLETE TRACK IN SESSION
|
|
* 72h/04h R EMPTY OR PARTIALLY WRITTEN RESERVED TRACK
|
|
* 72h/05h R NO MORE TRACK RESERVATIONS ALLOWED
|
|
* 72h/06h R RMZ EXTENSION IS NOT ALLOWED
|
|
* 72h/07h R NO MORE TEST ZONE EXTENSIONS ARE ALLOWED
|
|
* 73h/00h R CD CONTROL ERROR
|
|
* 73h/01h R POWER CALIBRATION AREA ALMOST FULL
|
|
* 73h/02h R POWER CALIBRATION AREA IS FULL
|
|
* 73h/03h R POWER CALIBRATION AREA ERROR
|
|
* 73h/04h R PROGRAM MEMORY AREA UPDATE FAILURE
|
|
* 73h/05h R PROGRAM MEMORY AREA IS FULL
|
|
* 73h/06h R RMA/PMA IS ALMOST FULL
|
|
* 73h/10h R CURRENT POWER CALIBRATION AREA ALMOST FULL
|
|
* 73h/11h R CURRENT POWER CALIBRATION AREA IS FULL
|
|
* 73h/17h R RDZ IS FULL
|
|
* 74h/00h T SECURITY ERROR
|
|
* 74h/01h T UNABLE TO DECRYPT DATA
|
|
* 74h/02h T UNENCRYPTED DATA ENCOUNTERED WHILE DECRYPTING
|
|
* 74h/03h T INCORRECT DATA ENCRYPTION KEY
|
|
* 74h/04h T CRYPTOGRAPHIC INTEGRITY VALIDATION FAILED
|
|
* 74h/05h T ERROR DECRYPTING DATA
|
|
* 74h/06h T UNKNOWN SIGNATURE VERIFICATION KEY
|
|
* 74h/07h T ENCRYPTION PARAMETERS NOT USEABLE
|
|
* 74h/08h DZT R M E VF DIGITAL SIGNATURE VALIDATION FAILURE
|
|
* 74h/09h T ENCRYPTION MODE MISMATCH ON READ
|
|
* 74h/0Ah T ENCRYPTED BLOCK NOT RAW READ ENABLED
|
|
* 74h/0Bh T INCORRECT ENCRYPTION PARAMETERS
|
|
* 74h/0Ch DZT R MAEBKV UNABLE TO DECRYPT PARAMETER LIST
|
|
* 74h/0Dh T ENCRYPTION ALGORITHM DISABLED
|
|
* 74h/10h DZT R MAEBKV SA CREATION PARAMETER VALUE INVALID
|
|
* 74h/11h DZT R MAEBKV SA CREATION PARAMETER VALUE REJECTED
|
|
* 74h/12h DZT R MAEBKV INVALID SA USAGE
|
|
* 74h/21h T DATA ENCRYPTION CONFIGURATION PREVENTED
|
|
* 74h/30h DZT R MAEBKV SA CREATION PARAMETER NOT SUPPORTED
|
|
* 74h/40h DZT R MAEBKV AUTHENTICATION FAILED
|
|
* 74h/61h V EXTERNAL DATA ENCRYPTION KEY MANAGER ACCESS ERROR
|
|
* 74h/62h V EXTERNAL DATA ENCRYPTION KEY MANAGER ERROR
|
|
* 74h/63h V EXTERNAL DATA ENCRYPTION KEY NOT FOUND
|
|
* 74h/64h V EXTERNAL DATA ENCRYPTION REQUEST NOT AUTHORIZED
|
|
* 74h/6Eh T EXTERNAL DATA ENCRYPTION CONTROL TIMEOUT
|
|
* 74h/6Fh T EXTERNAL DATA ENCRYPTION CONTROL ERROR
|
|
* 74h/71h DZT R M E V LOGICAL UNIT ACCESS NOT AUTHORIZED
|
|
* 74h/79h DZ SECURITY CONFLICT IN TRANSLATED DEVICE
|
|
*/
|
|
|
|
static void
|
|
decode_scsi_sense(const char *indent, struct scsi_sense_data *ssd)
|
|
{
|
|
uint key = SSD_SENSE_KEY(ssd->flags);
|
|
printf("%s response=%02x valid=%d\n", indent, ssd->response_code,
|
|
ssd->response_code & SSD_RCODE_VALID ? 1 : 0);
|
|
|
|
if (ssd->response_code & SSD_RCODE_VALID) {
|
|
int count;
|
|
int len;
|
|
printf("%s seg=%x key=%02x %s\n",
|
|
indent, ssd->segment, key, decode_scsi_sense_key(key));
|
|
printf("%s ili=%02x eom=%02x fmark=%02x\n", indent,
|
|
ssd->flags & SSD_ILI ? 1 : 0,
|
|
ssd->flags & SSD_EOM ? 1 : 0,
|
|
ssd->flags & SSD_FILEMARK ? 1 : 0);
|
|
printf("%s info %02x %02x %02x %02x extra_len=0x%x\n", indent,
|
|
ssd->info[0], ssd->info[1], ssd->info[2], ssd->info[3],
|
|
ssd->extra_len);
|
|
len = SSD_ADD_BYTES_LIM(ssd);
|
|
if (len > 0) {
|
|
printf("%s extra ", indent);
|
|
for (count = 0; count < len; count++)
|
|
printf(" 0x%x", ssd->csi[count]);
|
|
printf("\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
static void
|
|
print_xs(struct scsipi_xfer *xs, int indent_count)
|
|
{
|
|
char indent[32];
|
|
sprintf(indent, "%*s", indent_count, "");
|
|
if (xs->xs_callout.func == NULL) {
|
|
printf("%sxs_callout NONE\n", indent);
|
|
} else {
|
|
printf("%sxs_callout ticks=%d\n", indent, xs->xs_callout.ticks);
|
|
printf("%s func=%p(%p)\n",
|
|
indent, xs->xs_callout.func, xs->xs_callout.arg);
|
|
}
|
|
printf("%sxs_done_cb=%p(%p)\n",
|
|
indent, xs->xs_done_callback, xs->xs_callback_arg);
|
|
printf("%samiga_ior=%p\n", indent, xs->amiga_ior);
|
|
struct IOStdReq *ior = xs->amiga_ior;
|
|
if (ior != NULL) {
|
|
printf("%s io_Device=%p\n", indent, ior->io_Device);
|
|
printf("%s io_Unit=%p\n", indent, ior->io_Unit);
|
|
printf("%s io_Command=%04x %s\n", indent,
|
|
ior->io_Command, iocmd_name(ior->io_Command));
|
|
decode_io_command(indent_count + 4, ior);
|
|
printf("%s io_Flags=%02x\n", indent, ior->io_Flags);
|
|
printf("%s io_Error=%02x\n", indent, ior->io_Error);
|
|
printf("%s io_Actual=%08x\n", indent, (uint) ior->io_Actual);
|
|
printf("%s io_Offset=%08x\n", indent, (uint) ior->io_Offset);
|
|
printf("%s io_Length=%08x\n", indent, (uint) ior->io_Length);
|
|
printf("%s io_Data=%p\n", indent, ior->io_Data);
|
|
}
|
|
printf("%sxs_control=%08x ", indent, xs->xs_control);
|
|
print_bits(bits_xs_control, ARRAY_SIZE(bits_xs_control),
|
|
xs->xs_control);
|
|
printf("\n");
|
|
printf("%sxs_status=%d %s\n", indent, xs->xs_status,
|
|
(xs->xs_status & XS_STS_DONE) ? "STS_DONE" : "");
|
|
printf("%sxs_periph=%p", indent, xs->xs_periph);
|
|
if (xs->xs_periph != NULL) {
|
|
printf(" %d.%d",
|
|
xs->xs_periph->periph_target, xs->xs_periph->periph_lun);
|
|
}
|
|
printf("\n");
|
|
printf("%sxs_retries=%d\n", indent, xs->xs_retries);
|
|
printf("%sxs_requeuecnt=%d\n", indent, xs->xs_requeuecnt);
|
|
printf("%stimeout=%d\n", indent, xs->timeout);
|
|
printf("%scmd=%p cmdlen=%d\n", indent, xs->cmd, xs->cmdlen);
|
|
struct scsipi_generic *cmd = xs->cmd;
|
|
if ((cmd != NULL) && (xs->cmdlen != 0)) {
|
|
decode_scsi_command(indent, (uint8_t *)cmd, xs->cmdlen);
|
|
}
|
|
printf("%sdata=%p datalen=%d\n", indent, xs->data, xs->datalen);
|
|
printf("%sresid=%d\n", indent, xs->resid);
|
|
printf("%serror=%d %s\n",
|
|
indent, (int) xs->error, decode_xs_error(xs->error));
|
|
printf("%sbp=%p\n", indent, xs->bp);
|
|
printf("%sscsi_sense=%p\n", indent, &xs->sense);
|
|
decode_scsi_sense(indent, &xs->sense.scsi_sense);
|
|
printf("%sstatus=%d %s\n",
|
|
indent, (int) xs->status, decode_xs_status(xs->status));
|
|
printf("%sxs_tag_type=%u xs_tag_id=%u\n",
|
|
indent, xs->xs_tag_type, xs->xs_tag_id);
|
|
printf("%scmdstore=%p\n", indent, &xs->cmdstore);
|
|
}
|
|
|
|
static void
|
|
decode_acb(struct siop_acb *acb)
|
|
{
|
|
if (acb == NULL) {
|
|
printf(" NULL acb\n");
|
|
return;
|
|
}
|
|
if (acb->xs == NULL) {
|
|
printf(" NULL xs");
|
|
} else {
|
|
if (acb->xs->xs_periph == NULL) {
|
|
printf(" %p <NO PERIPH>", acb->xs);
|
|
} else {
|
|
struct scsipi_xfer *xs = acb->xs;
|
|
printf(" %p %d.%d", xs,
|
|
xs->xs_periph->periph_target, xs->xs_periph->periph_lun);
|
|
if (xs->xs_callout.func != NULL)
|
|
printf(" [%d ticks]", xs->xs_callout.ticks);
|
|
}
|
|
}
|
|
printf(" flags=%x len=%02d", acb->flags, acb->clen);
|
|
decode_scsi_command("", (uint8_t *) &acb->cmd, acb->clen);
|
|
}
|
|
|
|
static void
|
|
show_sc_list(int indent_count, struct siop_acb *acb)
|
|
{
|
|
char indent[32];
|
|
int newline = -1;
|
|
sprintf(indent, "%*s", indent_count, "");
|
|
|
|
if (acb == NULL) {
|
|
printf("NONE\n");
|
|
return;
|
|
}
|
|
while (acb != NULL) {
|
|
if (newline > 0)
|
|
printf("%s", indent);
|
|
if (acb->xs != NULL) {
|
|
if (newline == 0)
|
|
printf("\n%s", indent);
|
|
printf("%p", acb);
|
|
decode_acb(acb);
|
|
newline = 1;
|
|
} else {
|
|
printf("%p ", acb);
|
|
newline = 0;
|
|
}
|
|
acb = acb->chain.tqe_next;
|
|
}
|
|
if (newline == 0)
|
|
printf("\n");
|
|
}
|
|
|
|
static const char * const scsi_periph_type_name[] = {
|
|
"T_DIRECT - direct access device", // 0x00
|
|
"T_SEQUENTIAL - sequential access device", // 0x01
|
|
"T_PRINTER - printer device", // 0x02
|
|
"T_PROCESSOR - processor device", // 0x03
|
|
"T_WORM - write once, read many device", // 0x04
|
|
"T_CDROM - cd-rom device", // 0x05
|
|
"T_SCANNER - scanner device", // 0x06
|
|
"T_OPTICAL - optical memory device", // 0x07
|
|
"T_CHANGER - medium changer device", // 0x08
|
|
"T_COMM - communication device", // 0x09
|
|
"T_IT8_1 - Defined by ASC IT8", // 0x0a
|
|
"T_IT8_2 - Graphic arts pre-press device", // 0x0b
|
|
"T_STORARRAY - storage array device", // 0x0c
|
|
"T_ENCLOSURE - enclosure services device", // 0x0d
|
|
"T_SIMPLE_DIRECT - Simplified direct-access device", // 0x0e
|
|
"T_OPTIC_CARD_RW - Optical card reader/writer device", // 0x0f
|
|
"", // 0x10
|
|
"T_OBJECT_STORED - Object-based Storage Device", // 0x11
|
|
"T_AUTOMATION_DRIVE - Automation drive interface", // 0x12
|
|
"", // 0x13
|
|
"", // 0x13
|
|
"", // 0x14
|
|
"", // 0x15
|
|
"", // 0x16
|
|
"", // 0x17
|
|
"", // 0x18
|
|
"", // 0x19
|
|
"", // 0x1a
|
|
"", // 0x1b
|
|
"", // 0x1c
|
|
"", // 0x1d
|
|
"T_WELL_KNOWN_LUN - Well known logical unit", // 0x1e
|
|
"T_NODEVICE - Unknown or no device type", // 0x1f
|
|
};
|
|
|
|
static const char * const interrupt_type_name[] = {
|
|
"NT_UNKNOWN", // 0
|
|
"NT_TASK", // 1
|
|
"NT_INTERRUPT", // 2
|
|
"NT_DEVICE", // 3
|
|
"NT_MSGPORT", // 4
|
|
"NT_MESSAGE", // 5
|
|
"NT_FREEMSG", // 6
|
|
"NT_REPLYMSG", // 7
|
|
"NT_RESOURCE", // 8
|
|
"NT_LIBRARY", // 9
|
|
"NT_MEMORY", // 10
|
|
"NT_SOFTINT", // 11
|
|
"NT_FONT", // 12
|
|
"NT_PROCESS", // 13
|
|
"NT_SEMAPHORE", // 14
|
|
"NT_SIGNALSEM", // 15
|
|
"NT_BOOTNODE", // 16
|
|
"NT_KICKMEM", // 17
|
|
"NT_GRAPHICS", // 18
|
|
"NT_DEATHMESSAGE", // 19
|
|
};
|
|
|
|
static void
|
|
show_interrupt(int indent, struct Interrupt *interrupt)
|
|
{
|
|
printf("%*sis_Node.ln_Type=%x %s\n",
|
|
indent, "", interrupt->is_Node.ln_Type,
|
|
interrupt->is_Node.ln_Type < ARRAY_SIZE(interrupt_type_name) ?
|
|
interrupt_type_name[interrupt->is_Node.ln_Type] : "");
|
|
printf("%*sis_Node.ln_Pri=%d\n", indent, "", interrupt->is_Node.ln_Pri);
|
|
printf("%*sis_Node.ln_Name=%p '%s'\n", indent, "",
|
|
interrupt->is_Node.ln_Name, interrupt->is_Node.ln_Name);
|
|
printf("%*sis_Code %p(%p)\n",
|
|
indent, "", interrupt->is_Code, interrupt->is_Data);
|
|
}
|
|
|
|
static void
|
|
show_sc_tinfo(int indent_count, struct siop_tinfo *st)
|
|
{
|
|
printf("scmds=%d dconns=%d touts=%d perrs=%d\n",
|
|
st->cmds, st->dconns, st->touts, st->perrs);
|
|
printf("%*slubusy=%u flags=%u period=%u offset=%u\n", indent_count, "",
|
|
st->lubusy, st->flags, st->period, st->offset);
|
|
}
|
|
|
|
static void
|
|
show_periph(struct scsipi_periph *periph)
|
|
{
|
|
int count = 0;
|
|
printf("Periph=%p\n", periph);
|
|
printf(" drv_state=%p\n", periph->drv_state);
|
|
printf(" periph_channel=%p\n", periph->periph_channel);
|
|
printf(" periph_changeintlist=");
|
|
struct IOStdReq *io;
|
|
for (io = (struct IOStdReq *)periph->periph_changeintlist.mlh_Head;
|
|
io->io_Message.mn_Node.ln_Succ != NULL;
|
|
io = (struct IOStdReq *)io->io_Message.mn_Node.ln_Succ) {
|
|
if (count++ == 0)
|
|
printf("\n");
|
|
printf(" ioRequest=%p\n", io);
|
|
printf(" io_Message=%p\n", &io->io_Message);
|
|
printf(" io_Device=%p\n", io->io_Device);
|
|
printf(" io_Unit=%p\n", io->io_Unit);
|
|
printf(" io_Command=%04x %s\n",
|
|
io->io_Command, iocmd_name(io->io_Command));
|
|
decode_io_command(8, (struct IOStdReq *) io);
|
|
printf(" io_Flags=%02x\n", io->io_Flags);
|
|
printf(" io_Error=%02x\n", io->io_Error);
|
|
printf(" io_Data=%p\n", io->io_Data);
|
|
if (io->io_Data != NULL) {
|
|
show_interrupt(8, io->io_Data);
|
|
}
|
|
}
|
|
if (count == 0)
|
|
printf("NONE\n");
|
|
printf(" periph_changeint=%p\n", periph->periph_changeint);
|
|
if (periph->periph_changeint != NULL)
|
|
show_interrupt(4, periph->periph_changeint);
|
|
printf(" periph_openings=%d\n", periph->periph_openings);
|
|
printf(" periph_sent=%d\n", periph->periph_sent);
|
|
printf(" periph_mode=%x\n", periph->periph_mode);
|
|
printf(" periph_period=%d\n", periph->periph_period);
|
|
printf(" periph_offset=%d\n", periph->periph_offset);
|
|
|
|
printf(" periph_type=%u %s\n", periph->periph_type,
|
|
periph->periph_type < ARRAY_SIZE(scsi_periph_type_name) ?
|
|
scsi_periph_type_name[periph->periph_type] : "");
|
|
printf(" periph_cap=0x%x ", periph->periph_cap);
|
|
print_bits(bits_periph_cap, ARRAY_SIZE(bits_periph_cap),
|
|
periph->periph_cap);
|
|
printf("\n");
|
|
printf(" periph_quirks=%x\n", periph->periph_quirks);
|
|
printf(" periph_flags=%x ", periph->periph_flags);
|
|
print_bits(bits_periph_flags, ARRAY_SIZE(bits_periph_flags),
|
|
periph->periph_flags);
|
|
printf("\n");
|
|
printf(" periph_dbflags=%x\n", periph->periph_dbflags);
|
|
printf(" periph_target=%d\n", periph->periph_target);
|
|
printf(" periph_lun=%d\n", periph->periph_lun);
|
|
printf(" periph_blkshift=%d (%u bytes)\n", periph->periph_blkshift,
|
|
1U << periph->periph_blkshift);
|
|
printf(" periph_changenum=%d\n", periph->periph_changenum);
|
|
printf(" periph_tur_active=%d\n", periph->periph_tur_active);
|
|
printf(" periph_version=%d\n", periph->periph_version);
|
|
// printf(" periph_freetags[]=\n", periph->periph_freetags[i]);
|
|
// printf(" periph_xferq=%p%s\n", xq, (xs == NULL) ? " EMPTY" : "");
|
|
|
|
#if 0
|
|
struct scsipi_channel *chan = periph->periph_channel;
|
|
struct scsipi_xfer_queue *xq;
|
|
|
|
/*
|
|
* periph_xferq is not being tracked in AmigaOS driver,
|
|
* so it is simulated here using the channel xferq.
|
|
*/
|
|
Forbid();
|
|
xq = &chan->chan_queue;
|
|
xs = TAILQ_FIRST(xq);
|
|
while ((xs != NULL) && (xs->xs_periph != periph)) {
|
|
/* Channel queue might have other XS than just this periph */
|
|
xs = TAILQ_NEXT(xs, channel_q);
|
|
}
|
|
printf(" periph_xferq=%p%s\n", xq, (xs == NULL) ? " EMPTY" : "");
|
|
while (xs != NULL) {
|
|
printf(" xs=%p\n", xs);
|
|
print_xs(xs, 6);
|
|
xs = TAILQ_NEXT(xs, channel_q);
|
|
while ((xs != NULL) && (xs->xs_periph != periph)) {
|
|
/* Channel queue might have other XS than just this periph */
|
|
xs = TAILQ_NEXT(xs, channel_q);
|
|
}
|
|
}
|
|
Permit();
|
|
#endif
|
|
|
|
if (periph->periph_callout.func == NULL) {
|
|
printf(" periph_callout NONE\n");
|
|
} else {
|
|
printf(" periph_callout ticks=%d\n", periph->periph_callout.ticks);
|
|
printf(" func=%p(%p)\n",
|
|
periph->periph_callout.func, periph->periph_callout.arg);
|
|
}
|
|
printf(" periph_xscheck=%p\n", periph->periph_xscheck);
|
|
Forbid();
|
|
if (periph->periph_xscheck != NULL)
|
|
print_xs(periph->periph_xscheck, 6);
|
|
Permit();
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
int unitno = -1;
|
|
int arg;
|
|
int pos = 0;
|
|
int rc = 0;
|
|
int open_and_wait = 0;
|
|
struct IOExtTD *tio;
|
|
struct MsgPort *mp;
|
|
struct IOStdReq *ior;
|
|
struct scsipi_xfer *xs;
|
|
struct scsipi_periph *periph;
|
|
char *devname = DEVICE_NAME;
|
|
|
|
for (arg = 1; arg < argc; arg++) {
|
|
char *ptr = argv[arg];
|
|
if (*ptr == '-') {
|
|
while (*(++ptr) != '\0') {
|
|
switch (*ptr) {
|
|
case 'c':
|
|
show_cpu_regs();
|
|
exit(0);
|
|
case 'p': {
|
|
if (++arg > argc) {
|
|
printf("-%c requires an argument\n", *ptr);
|
|
exit(1);
|
|
}
|
|
if ((sscanf(argv[arg], "%x%n",
|
|
(uint *) &periph, &pos) != 1) ||
|
|
(argv[arg][pos] != '\0')) {
|
|
printf("Invalid periph address '%s'\n", argv[arg]);
|
|
}
|
|
show_periph(periph);
|
|
exit(0);
|
|
}
|
|
case 'x':
|
|
if (++arg > argc) {
|
|
printf("-%c requires an argument\n", *ptr);
|
|
exit(1);
|
|
}
|
|
if ((sscanf(argv[arg], "%x%n",
|
|
(uint *) &xs, &pos) != 1) ||
|
|
(argv[arg][pos] != '\0')) {
|
|
printf("Invalid xs address '%s'\n", argv[arg]);
|
|
}
|
|
print_xs(xs, 1);
|
|
exit(0);
|
|
case 'w':
|
|
open_and_wait++;
|
|
break;
|
|
default:
|
|
printf("Invalid argument -%s\n", ptr);
|
|
usage();
|
|
exit(1);
|
|
}
|
|
}
|
|
} else {
|
|
if ((sscanf(ptr, "%d%n", &unitno, &pos) != 1) ||
|
|
(ptr[pos] != '\0')) {
|
|
printf("Invalid unit '%s'\n", ptr);
|
|
usage();
|
|
exit(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (unitno == -1) {
|
|
usage();
|
|
exit(1);
|
|
}
|
|
|
|
__check_abort_enabled = 0; // Disable gcc clib2 ^C break handling
|
|
|
|
mp = CreatePort(NULL, 0);
|
|
if (mp == NULL) {
|
|
printf("Failed to create message port\n");
|
|
exit(1);
|
|
}
|
|
|
|
tio = (struct IOExtTD *) CreateExtIO(mp, sizeof (struct IOExtTD));
|
|
if (tio == NULL) {
|
|
printf("Failed to create tio struct\n");
|
|
rc = 1;
|
|
goto extio_fail;
|
|
}
|
|
|
|
if (OpenDevice(devname, unitno, (struct IORequest *) tio, TDF_DEBUG_OPEN)) {
|
|
printf("Unit %d is not currently open; attemping a normal open.\n",
|
|
unitno);
|
|
if (OpenDevice(devname, unitno, (struct IORequest *) tio, 0)) {
|
|
printf("Open %s failed\n", devname);
|
|
rc = 1;
|
|
goto open_fail;
|
|
}
|
|
}
|
|
global_opened = 1;
|
|
global_mp = mp;
|
|
global_tio = tio;
|
|
|
|
if (open_and_wait) {
|
|
int i;
|
|
printf("Device open; press enter to proceed.\n");
|
|
scanf("%d", &i);
|
|
}
|
|
|
|
ior = &tio->iotd_Req;
|
|
struct MsgPort *rp = ior->io_Message.mn_ReplyPort;
|
|
struct Library *dp = &ior->io_Device->dd_Library;
|
|
printf("IORequest\n");
|
|
printf(" io_Message=%p\n", &ior->io_Message);
|
|
printf(" mn_Node=%p\n", &ior->io_Message.mn_Node);
|
|
printf(" mn_ReplyPort=%p\n", ior->io_Message.mn_ReplyPort);
|
|
printf(" mp_Node=%p\n", &rp->mp_Node);
|
|
printf(" mp_Flags=%02x\n", rp->mp_Flags);
|
|
printf(" mp_SigBit=%02x\n", rp->mp_SigBit);
|
|
printf(" mp_SigTask=%p\n", rp->mp_SigTask);
|
|
printf(" mp_MsgList=%p\n", &rp->mp_MsgList);
|
|
printf(" mn_Length=%04x\n", ior->io_Message.mn_Length);
|
|
printf(" io_Device=%p\n", ior->io_Device);
|
|
printf(" lib_Node=%p\n", &dp->lib_Node);
|
|
printf(" lib_Flags=%02x\n", dp->lib_Flags);
|
|
printf(" lib_pad=%02x\n", dp->lib_pad);
|
|
printf(" lib_NegSize=%04x\n", dp->lib_NegSize);
|
|
printf(" lib_PosSize=%04x\n", dp->lib_PosSize);
|
|
printf(" lib_Version=%04x\n", dp->lib_Version);
|
|
printf(" lib_Revision=%04x\n", dp->lib_Revision);
|
|
printf(" lib_IdString=%p \"%.40s\"\n",
|
|
dp->lib_IdString, (char *)dp->lib_IdString);
|
|
printf(" lib_Sum=%08x\n", (unsigned int) dp->lib_Sum);
|
|
printf(" lib_OpenCnt=%04x\n", dp->lib_OpenCnt);
|
|
if (is_user_abort())
|
|
close_exit();
|
|
|
|
struct Unit *u = ior->io_Unit;
|
|
printf(" io_Unit=%p\n", u);
|
|
struct MsgPort *ump = &u->unit_MsgPort;
|
|
printf(" unit_MsgPort=%p\n", &u->unit_MsgPort);
|
|
printf(" mp_Node=%p\n", &ump->mp_Node);
|
|
printf(" mp_Flags=%02x\n", ump->mp_Flags);
|
|
printf(" mp_SigBit=%02x\n", ump->mp_SigBit);
|
|
printf(" mp_SigTask=%p\n", ump->mp_SigTask);
|
|
printf(" mp_MsgList=%p\n", &ump->mp_MsgList);
|
|
printf(" unit_flags=%02x\n", u->unit_flags);
|
|
printf(" unit_pad=%02x\n", u->unit_pad);
|
|
printf(" unit_OpenCnt=%04x\n", u->unit_OpenCnt);
|
|
|
|
printf(" io_Command=%04x %s\n",
|
|
ior->io_Command, iocmd_name(ior->io_Command));
|
|
printf(" io_Flags=%02x\n", ior->io_Flags);
|
|
printf(" io_Error=%02x", ior->io_Error);
|
|
if (ior->io_Error != 0)
|
|
decode_io_error(ior->io_Error);
|
|
printf("\n");
|
|
printf(" iotd_Count=%08x\n", ior->io_Error);
|
|
printf(" iotd_SecLabel=%08x\n", ior->io_Error);
|
|
|
|
if (is_user_abort())
|
|
close_exit();
|
|
|
|
periph = (void *) u;
|
|
struct scsipi_channel *chan = periph->periph_channel;
|
|
show_periph(periph);
|
|
|
|
if (is_user_abort())
|
|
close_exit();
|
|
|
|
printf("Chan %p\n", chan);
|
|
Forbid();
|
|
xs = chan->chan_xs_free;
|
|
printf(" chan_xs_free=");
|
|
if (xs == NULL)
|
|
printf("NONE");
|
|
|
|
while (xs != NULL) {
|
|
printf("%p", xs);
|
|
xs = *(struct scsipi_xfer **) xs; /* ->next link on free list */
|
|
if (xs != NULL)
|
|
printf(" ");
|
|
}
|
|
printf("\n");
|
|
xs = chan->chan_xs_free;
|
|
if (xs != NULL) {
|
|
printf(" xs=%p\n", xs);
|
|
print_xs(xs, 6);
|
|
}
|
|
Permit();
|
|
|
|
if (is_user_abort())
|
|
close_exit();
|
|
|
|
printf(" chan_active=%d\n", chan->chan_active);
|
|
struct scsipi_adapter *adapt = chan->chan_adapter;
|
|
printf(" chan_adapter=%p\n", adapt);
|
|
printf(" adapt_dev=%p\n", adapt->adapt_dev);
|
|
printf(" adapt_nchannels=%d\n", adapt->adapt_nchannels);
|
|
printf(" adapt_refcnt=%d\n", adapt->adapt_refcnt);
|
|
printf(" adapt_openings=%d\n", adapt->adapt_openings);
|
|
// printf(" adapt_max_periph=%d\n", adapt->adapt_max_periph);
|
|
printf(" adapt_flags=%d\n", adapt->adapt_flags);
|
|
printf(" adapt_runnings=%d\n", adapt->adapt_running);
|
|
printf(" adapt_asave=%p\n", adapt->adapt_asave);
|
|
printf(" chan_periphtab[]=%p\n", chan->chan_periphtab);
|
|
for (int i = 0; i < SCSIPI_CHAN_PERIPH_BUCKETS; i++) {
|
|
LIST_FOREACH(periph, &chan->chan_periphtab[i], periph_hash) {
|
|
printf(" periph=%p %d.%d\n", periph,
|
|
periph->periph_target, periph->periph_lun);
|
|
}
|
|
}
|
|
|
|
printf(" chan_flags=%02x", chan->chan_flags);
|
|
print_bits(bits_chan_flags, ARRAY_SIZE(bits_chan_flags), chan->chan_flags);
|
|
printf("\n");
|
|
// printf(" chan_openings=%d\n", chan->chan_openings);
|
|
printf(" chan_nluns=%d\n", chan->chan_nluns);
|
|
printf(" chan_id=%d (SCSI host ID)\n", chan->chan_id);
|
|
printf(" chan_tflags=%d", chan->chan_tflags);
|
|
print_bits(bits_chan_tflags, ARRAY_SIZE(bits_chan_tflags),
|
|
chan->chan_tflags);
|
|
printf("\n");
|
|
|
|
if (is_user_abort())
|
|
close_exit();
|
|
|
|
Forbid();
|
|
struct scsipi_xfer_queue *xq = &chan->chan_queue;
|
|
xs = TAILQ_FIRST(xq);
|
|
printf(" chan_queue=%p%s\n", xq, (xs == NULL) ? " EMPTY" : "");
|
|
while (xs != NULL) {
|
|
printf(" xs=%p", xs);
|
|
if (xs->xs_periph != NULL) {
|
|
struct scsipi_periph *tperiph = xs->xs_periph;
|
|
printf(" periph %d.%d",
|
|
tperiph->periph_target, tperiph->periph_lun);
|
|
if (tperiph == periph)
|
|
printf(" (THIS)");
|
|
}
|
|
printf("\n");
|
|
print_xs(xs, 6);
|
|
xs = TAILQ_NEXT(xs, channel_q);
|
|
}
|
|
Permit();
|
|
|
|
if (is_user_abort())
|
|
close_exit();
|
|
|
|
Forbid();
|
|
xq = &chan->chan_complete;
|
|
xs = TAILQ_FIRST(xq);
|
|
printf(" chan_complete=%p%s\n", xq, (xs == NULL) ? " EMPTY" : "");
|
|
while (xs != NULL) {
|
|
printf(" xs=%p\n", xs);
|
|
print_xs(xs, 6);
|
|
xs = TAILQ_NEXT(xs, channel_q);
|
|
}
|
|
Permit();
|
|
a4091_save_t *asave = adapt->adapt_asave;
|
|
if (asave != NULL) {
|
|
printf("Driver globals %p\n", asave);
|
|
printf(" as_SysBase=%p\n", asave->as_SysBase);
|
|
printf(" as_timer_running=%x\n", asave->as_timer_running);
|
|
printf(" as_irq_signal=%x\n", asave->as_irq_signal);
|
|
printf(" as_irq_count=%x\n", asave->as_irq_count);
|
|
printf(" as_int_mask=%08x\n", asave->as_int_mask);
|
|
printf(" as_timer_mask=%08x\n", asave->as_timer_mask);
|
|
printf(" as_svc_task=%p\n", asave->as_svc_task);
|
|
printf(" as_isr=%p\n", asave->as_isr);
|
|
show_interrupt(4, asave->as_isr);
|
|
printf(" as_exiting=%x\n", asave->as_exiting);
|
|
printf(" as_device_private=%p\n", asave->as_device_private);
|
|
struct siop_softc *sc = asave->as_device_private;
|
|
// printf(" sc_siop_si=%p\n", sc->sc_siop_si);
|
|
printf(" sc_istat=%u sc_dstate=%u sc_sstat0=%u sc_sstat1=%u\n",
|
|
sc->sc_istat, sc->sc_dstat, sc->sc_sstat0, sc->sc_sstat1);
|
|
printf(" sc_intcode=%04lx\n", sc->sc_intcode);
|
|
printf(" sc_adapter=%p\n", &sc->sc_adapter);
|
|
printf(" sc_channel=%p\n", &sc->sc_channel);
|
|
printf(" sc_scriptspa=%lx\n", sc->sc_scriptspa);
|
|
printf(" sc_siopp=%p\n", sc->sc_siopp);
|
|
printf(" sc_active=%lu\n", sc->sc_active);
|
|
|
|
Forbid();
|
|
printf(" free_list=");
|
|
show_sc_list(6, sc->free_list.tqh_first);
|
|
printf(" ready_list="); // Queue of xs to be issued
|
|
show_sc_list(6, sc->ready_list.tqh_first);
|
|
printf(" nexus_list="); // List of xs already issued on channel
|
|
show_sc_list(6, sc->nexus_list.tqh_first);
|
|
Permit();
|
|
|
|
if (is_user_abort())
|
|
close_exit();
|
|
|
|
Forbid();
|
|
printf(" sc_nexus=%p", sc->sc_nexus); // Current active xs
|
|
decode_acb(sc->sc_nexus);
|
|
if ((sc->sc_active != 0) &&
|
|
(sc->sc_nexus != NULL) && (sc->sc_nexus->xs != NULL)) {
|
|
/* Do full decode of ACB */
|
|
print_xs(sc->sc_nexus->xs, 6);
|
|
}
|
|
Permit();
|
|
printf(" sc_acb[0]=%p\n", sc->sc_acb);
|
|
for (pos = 0; pos < ARRAY_SIZE(sc->sc_tinfo); pos++) {
|
|
printf(" sc_tinfo[%d] ", pos);
|
|
show_sc_tinfo(16, &sc->sc_tinfo[pos]);
|
|
}
|
|
printf(" sc_clock_freq=%d MHz\n", sc->sc_clock_freq);
|
|
printf(" sc_dcntl=%02x sc_ctest7=%02x sc_tcp[]=%04x %04x "
|
|
"%04x %04x\n",
|
|
sc->sc_dcntl, sc->sc_ctest7, sc->sc_tcp[0],
|
|
sc->sc_tcp[1], sc->sc_tcp[2], sc->sc_tcp[3]);
|
|
printf(" sc_flags=%02x sc_dien=%02x sc_minsync=%02x "
|
|
"sc_sien=%02x\n",
|
|
sc->sc_flags, sc->sc_dien, sc->sc_minsync, sc->sc_sien);
|
|
printf(" sc_nosync=%x sc_nodisconnect=%x\n",
|
|
sc->sc_nosync, sc->sc_nodisconnect);
|
|
for (pos = 0; pos < ARRAY_SIZE(sc->sc_sync); pos++) {
|
|
printf(" sc_sync[%d] state=%u sxfer=%u sbcl=%u\n",
|
|
pos, sc->sc_sync[pos].state, sc->sc_sync[pos].sxfer,
|
|
sc->sc_sync[pos].sbcl);
|
|
}
|
|
|
|
if (is_user_abort())
|
|
close_exit();
|
|
|
|
printf(" as_timerport=%p\n", asave->as_timerport);
|
|
printf(" as_timerio=%p\n",
|
|
asave->as_timerio);
|
|
callout_t *callout_head = *(asave->as_callout_head);
|
|
callout_t *cur;
|
|
printf(" as_callout_head=%p\n", callout_head);
|
|
for (cur = callout_head; cur != NULL; cur = cur->co_next) {
|
|
printf(" %p ticks=%d func=%p(%p)\n",
|
|
cur, cur->ticks, cur->func, cur->arg);
|
|
}
|
|
}
|
|
|
|
CloseDevice((struct IORequest *) tio);
|
|
|
|
open_fail:
|
|
DeleteExtIO((struct IORequest *) tio);
|
|
|
|
extio_fail:
|
|
DeletePort(mp);
|
|
global_opened = 0;
|
|
exit(rc);
|
|
}
|