📄 aiclib.c
字号:
"Asynchronous information protection error detected") },/* DTLPWRSOMCAE */{SST(0x47, 0x05, SS_RDEF|SSQ_FALLBACK, "Protocol server CRC error") },/* DTLPWRSOMCAE */{SST(0x48, 0x00, SS_RDEF|SSQ_FALLBACK, "Initiator detected error message received") },/* DTLPWRSOMCAE */{SST(0x49, 0x00, SS_RDEF, "Invalid message error") },/* DTLPWRSOMCAE */{SST(0x4A, 0x00, SS_RDEF, "Command phase error") },/* DTLPWRSOMCAE */{SST(0x4B, 0x00, SS_RDEF, "Data phase error") },/* DTLPWRSOMCAE */{SST(0x4C, 0x00, SS_RDEF, "Logical unit failed self-configuration") },/* DTLPWRSOMCAE */{SST(0x4D, 0x00, SS_RDEF, "Tagged overlapped commands: ASCQ = Queue tag ID") },/* DTLPWRSOMCAE */{SST(0x4D, 0xFF, SS_RDEF|SSQ_RANGE, NULL)}, /* Range 0x00->0xFF *//* DTLPWRSOMCAE */{SST(0x4E, 0x00, SS_RDEF, "Overlapped commands attempted") },/* T */{SST(0x50, 0x00, SS_RDEF, "Write append error") },/* T */{SST(0x50, 0x01, SS_RDEF, "Write append position error") },/* T */{SST(0x50, 0x02, SS_RDEF, "Position error related to timing") },/* T O */{SST(0x51, 0x00, SS_RDEF, "Erase failure") },/* T */{SST(0x52, 0x00, SS_RDEF, "Cartridge fault") },/* DTL WRSOM */{SST(0x53, 0x00, SS_RDEF, "Media load or eject failed") },/* T */{SST(0x53, 0x01, SS_RDEF, "Unload tape failure") },/* DT WR OM */{SST(0x53, 0x02, SS_RDEF, "Medium removal prevented") },/* P */{SST(0x54, 0x00, SS_RDEF, "Scsi to host system interface failure") },/* P */{SST(0x55, 0x00, SS_RDEF, "System resource failure") },/* D O */{SST(0x55, 0x01, SS_FATAL|ENOSPC, "System buffer full") },/* R */{SST(0x57, 0x00, SS_RDEF, "Unable to recover table-of-contents") },/* O */{SST(0x58, 0x00, SS_RDEF, "Generation does not exist") },/* O */{SST(0x59, 0x00, SS_RDEF, "Updated block read") },/* DTLPWRSOM */{SST(0x5A, 0x00, SS_RDEF, "Operator request or state change input") },/* DT WR OM */{SST(0x5A, 0x01, SS_RDEF, "Operator medium removal request") },/* DT W O */{SST(0x5A, 0x02, SS_RDEF, "Operator selected write protect") },/* DT W O */{SST(0x5A, 0x03, SS_RDEF, "Operator selected write permit") },/* DTLPWRSOM */{SST(0x5B, 0x00, SS_RDEF, "Log exception") },/* DTLPWRSOM */{SST(0x5B, 0x01, SS_RDEF, "Threshold condition met") },/* DTLPWRSOM */{SST(0x5B, 0x02, SS_RDEF, "Log counter at maximum") },/* DTLPWRSOM */{SST(0x5B, 0x03, SS_RDEF, "Log list codes exhausted") },/* D O */{SST(0x5C, 0x00, SS_RDEF, "RPL status change") },/* D O */{SST(0x5C, 0x01, SS_NOP|SSQ_PRINT_SENSE, "Spindles synchronized") },/* D O */{SST(0x5C, 0x02, SS_RDEF, "Spindles not synchronized") },/* DTLPWRSOMCAE */{SST(0x5D, 0x00, SS_RDEF, "Failure prediction threshold exceeded") },/* DTLPWRSOMCAE */{SST(0x5D, 0xFF, SS_RDEF, "Failure prediction threshold exceeded (false)") },/* DTLPWRSO CA */{SST(0x5E, 0x00, SS_RDEF, "Low power condition on") },/* DTLPWRSO CA */{SST(0x5E, 0x01, SS_RDEF, "Idle condition activated by timer") },/* DTLPWRSO CA */{SST(0x5E, 0x02, SS_RDEF, "Standby condition activated by timer") },/* DTLPWRSO CA */{SST(0x5E, 0x03, SS_RDEF, "Idle condition activated by command") },/* DTLPWRSO CA */{SST(0x5E, 0x04, SS_RDEF, "Standby condition activated by command") },/* S */{SST(0x60, 0x00, SS_RDEF, "Lamp failure") },/* S */{SST(0x61, 0x00, SS_RDEF, "Video acquisition error") },/* S */{SST(0x61, 0x01, SS_RDEF, "Unable to acquire video") },/* S */{SST(0x61, 0x02, SS_RDEF, "Out of focus") },/* S */{SST(0x62, 0x00, SS_RDEF, "Scan head positioning error") },/* R */{SST(0x63, 0x00, SS_RDEF, "End of user area encountered on this track") },/* R */{SST(0x63, 0x01, SS_FATAL|ENOSPC, "Packet does not fit in available space") },/* R */{SST(0x64, 0x00, SS_RDEF, "Illegal mode for this track") },/* R */{SST(0x64, 0x01, SS_RDEF, "Invalid packet size") },/* DTLPWRSOMCAE */{SST(0x65, 0x00, SS_RDEF, "Voltage fault") },/* S */{SST(0x66, 0x00, SS_RDEF, "Automatic document feeder cover up") },/* S */{SST(0x66, 0x01, SS_RDEF, "Automatic document feeder lift up") },/* S */{SST(0x66, 0x02, SS_RDEF, "Document jam in automatic document feeder") },/* S */{SST(0x66, 0x03, SS_RDEF, "Document miss feed automatic in document feeder") },/* A */{SST(0x67, 0x00, SS_RDEF, "Configuration failure") },/* A */{SST(0x67, 0x01, SS_RDEF, "Configuration of incapable logical units failed") },/* A */{SST(0x67, 0x02, SS_RDEF, "Add logical unit failed") },/* A */{SST(0x67, 0x03, SS_RDEF, "Modification of logical unit failed") },/* A */{SST(0x67, 0x04, SS_RDEF, "Exchange of logical unit failed") },/* A */{SST(0x67, 0x05, SS_RDEF, "Remove of logical unit failed") },/* A */{SST(0x67, 0x06, SS_RDEF, "Attachment of logical unit failed") },/* A */{SST(0x67, 0x07, SS_RDEF, "Creation of logical unit failed") },/* A */{SST(0x68, 0x00, SS_RDEF, "Logical unit not configured") },/* A */{SST(0x69, 0x00, SS_RDEF, "Data loss on logical unit") },/* A */{SST(0x69, 0x01, SS_RDEF, "Multiple logical unit failures") },/* A */{SST(0x69, 0x02, SS_RDEF, "Parity/data mismatch") },/* A */{SST(0x6A, 0x00, SS_RDEF, "Informational, refer to log") },/* A */{SST(0x6B, 0x00, SS_RDEF, "State change has occurred") },/* A */{SST(0x6B, 0x01, SS_RDEF, "Redundancy level got better") },/* A */{SST(0x6B, 0x02, SS_RDEF, "Redundancy level got worse") },/* A */{SST(0x6C, 0x00, SS_RDEF, "Rebuild failure occurred") },/* A */{SST(0x6D, 0x00, SS_RDEF, "Recalculate failure occurred") },/* A */{SST(0x6E, 0x00, SS_RDEF, "Command to logical unit failed") },/* T */{SST(0x70, 0x00, SS_RDEF, "Decompression exception short: ASCQ = Algorithm ID") },/* T */{SST(0x70, 0xFF, SS_RDEF|SSQ_RANGE, NULL) }, /* Range 0x00 -> 0xFF *//* T */{SST(0x71, 0x00, SS_RDEF, "Decompression exception long: ASCQ = Algorithm ID") },/* T */{SST(0x71, 0xFF, SS_RDEF|SSQ_RANGE, NULL) }, /* Range 0x00 -> 0xFF */ /* R */{SST(0x72, 0x00, SS_RDEF, "Session fixation error") },/* R */{SST(0x72, 0x01, SS_RDEF, "Session fixation error writing lead-in") },/* R */{SST(0x72, 0x02, SS_RDEF, "Session fixation error writing lead-out") },/* R */{SST(0x72, 0x03, SS_RDEF, "Session fixation error - incomplete track in session") },/* R */{SST(0x72, 0x04, SS_RDEF, "Empty or partially written reserved track") },/* R */{SST(0x73, 0x00, SS_RDEF, "CD control error") },/* R */{SST(0x73, 0x01, SS_RDEF, "Power calibration area almost full") },/* R */{SST(0x73, 0x02, SS_FATAL|ENOSPC, "Power calibration area is full") },/* R */{SST(0x73, 0x03, SS_RDEF, "Power calibration area error") },/* R */{SST(0x73, 0x04, SS_RDEF, "Program memory area update failure") },/* R */{SST(0x73, 0x05, SS_RDEF, "program memory area is full") }};static const int asc_table_size = sizeof(asc_table)/sizeof(asc_table[0]);struct asc_key{ int asc; int ascq;};static intascentrycomp(const void *key, const void *member){ int asc; int ascq; const struct asc_table_entry *table_entry; asc = ((const struct asc_key *)key)->asc; ascq = ((const struct asc_key *)key)->ascq; table_entry = (const struct asc_table_entry *)member; if (asc >= table_entry->asc) { if (asc > table_entry->asc) return (1); if (ascq <= table_entry->ascq) { /* Check for ranges */ if (ascq == table_entry->ascq || ((table_entry->action & SSQ_RANGE) != 0 && ascq >= (table_entry - 1)->ascq)) return (0); return (-1); } return (1); } return (-1);}static intsenseentrycomp(const void *key, const void *member){ int sense_key; const struct sense_key_table_entry *table_entry; sense_key = *((const int *)key); table_entry = (const struct sense_key_table_entry *)member; if (sense_key >= table_entry->sense_key) { if (sense_key == table_entry->sense_key) return (0); return (1); } return (-1);}static voidfetchtableentries(int sense_key, int asc, int ascq, struct scsi_inquiry_data *inq_data, const struct sense_key_table_entry **sense_entry, const struct asc_table_entry **asc_entry){ void *match; const struct asc_table_entry *asc_tables[2]; const struct sense_key_table_entry *sense_tables[2]; struct asc_key asc_ascq; size_t asc_tables_size[2]; size_t sense_tables_size[2]; int num_asc_tables; int num_sense_tables; int i; /* Default to failure */ *sense_entry = NULL; *asc_entry = NULL; match = NULL; if (inq_data != NULL) match = cam_quirkmatch((void *)inq_data, (void *)sense_quirk_table, sense_quirk_table_size, sizeof(*sense_quirk_table), aic_inquiry_match); if (match != NULL) { struct scsi_sense_quirk_entry *quirk; quirk = (struct scsi_sense_quirk_entry *)match; asc_tables[0] = quirk->asc_info; asc_tables_size[0] = quirk->num_ascs; asc_tables[1] = asc_table; asc_tables_size[1] = asc_table_size; num_asc_tables = 2; sense_tables[0] = quirk->sense_key_info; sense_tables_size[0] = quirk->num_sense_keys; sense_tables[1] = sense_key_table; sense_tables_size[1] = sense_key_table_size; num_sense_tables = 2; } else { asc_tables[0] = asc_table; asc_tables_size[0] = asc_table_size; num_asc_tables = 1; sense_tables[0] = sense_key_table; sense_tables_size[0] = sense_key_table_size; num_sense_tables = 1; } asc_ascq.asc = asc; asc_ascq.ascq = ascq; for (i = 0; i < num_asc_tables; i++) { void *found_entry; found_entry = scsibsearch(&asc_ascq, asc_tables[i], asc_tables_size[i], sizeof(**asc_tables), ascentrycomp); if (found_entry) { *asc_entry = (struct asc_table_entry *)found_entry; break; } } for (i = 0; i < num_sense_tables; i++) { void *found_entry; found_entry = scsibsearch(&sense_key, sense_tables[i], sense_tables_size[i], sizeof(**sense_tables), senseentrycomp); if (found_entry) { *sense_entry = (struct sense_key_table_entry *)found_entry; break; } }}static void *scsibsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)){ const void *entry; u_int l; u_int u; u_int m; l = -1; u = nmemb; while (l + 1 != u) { m = (l + u) / 2; entry = base + m * size; if (compar(key, entry) > 0) l = m; else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -