summaryrefslogtreecommitdiffstats
path: root/sys/dev/mfi/mfi.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/mfi/mfi.c')
-rw-r--r--sys/dev/mfi/mfi.c331
1 files changed, 48 insertions, 283 deletions
diff --git a/sys/dev/mfi/mfi.c b/sys/dev/mfi/mfi.c
index cf97674..7b5b762 100644
--- a/sys/dev/mfi/mfi.c
+++ b/sys/dev/mfi/mfi.c
@@ -1021,294 +1021,59 @@ out:
return;
}
-static void
-mfi_decode_evt(struct mfi_softc *sc, struct mfi_evt_detail *detail)
+/*
+ * The timestamp is the number of seconds since 00:00 Jan 1, 2000. If
+ * the bits in 24-31 are all set, then it is the number of seconds since
+ * boot.
+ */
+static const char *
+format_timestamp(uint32_t timestamp)
{
- switch (detail->arg_type) {
- case MR_EVT_ARGS_NONE:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->description
- );
- break;
- case MR_EVT_ARGS_CDB_SENSE:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) CDB %*D"
- "Sense %*D\n: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.cdb_sense.pd.device_id,
- detail->args.cdb_sense.pd.enclosure_index,
- detail->args.cdb_sense.pd.slot_number,
- detail->args.cdb_sense.cdb_len,
- detail->args.cdb_sense.cdb,
- ":",
- detail->args.cdb_sense.sense_len,
- detail->args.cdb_sense.sense,
- ":",
- detail->description
- );
- break;
- case MR_EVT_ARGS_LD:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
- "event: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ld.ld_index,
- detail->args.ld.target_id,
- detail->description
- );
- break;
- case MR_EVT_ARGS_LD_COUNT:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
- "count %lld: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ld_count.ld.ld_index,
- detail->args.ld_count.ld.target_id,
- (long long)detail->args.ld_count.count,
- detail->description
- );
- break;
- case MR_EVT_ARGS_LD_LBA:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
- "lba %lld: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ld_lba.ld.ld_index,
- detail->args.ld_lba.ld.target_id,
- (long long)detail->args.ld_lba.lba,
- detail->description
- );
- break;
- case MR_EVT_ARGS_LD_OWNER:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
- "owner changed: prior %d, new %d: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ld_owner.ld.ld_index,
- detail->args.ld_owner.ld.target_id,
- detail->args.ld_owner.pre_owner,
- detail->args.ld_owner.new_owner,
- detail->description
- );
- break;
- case MR_EVT_ARGS_LD_LBA_PD_LBA:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
- "lba %lld, physical drive PD %02d(e%d/s%d) lba %lld: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ld_lba_pd_lba.ld.ld_index,
- detail->args.ld_lba_pd_lba.ld.target_id,
- (long long)detail->args.ld_lba_pd_lba.ld_lba,
- detail->args.ld_lba_pd_lba.pd.device_id,
- detail->args.ld_lba_pd_lba.pd.enclosure_index,
- detail->args.ld_lba_pd_lba.pd.slot_number,
- (long long)detail->args.ld_lba_pd_lba.pd_lba,
- detail->description
- );
- break;
- case MR_EVT_ARGS_LD_PROG:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
- "progress %d%% in %ds: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ld_prog.ld.ld_index,
- detail->args.ld_prog.ld.target_id,
- detail->args.ld_prog.prog.progress/655,
- detail->args.ld_prog.prog.elapsed_seconds,
- detail->description
- );
- break;
- case MR_EVT_ARGS_LD_STATE:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
- "state prior %d new %d: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ld_state.ld.ld_index,
- detail->args.ld_state.ld.target_id,
- detail->args.ld_state.prev_state,
- detail->args.ld_state.new_state,
- detail->description
- );
- break;
- case MR_EVT_ARGS_LD_STRIP:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - VD %02d/%d "
- "strip %lld: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ld_strip.ld.ld_index,
- detail->args.ld_strip.ld.target_id,
- (long long)detail->args.ld_strip.strip,
- detail->description
- );
- break;
- case MR_EVT_ARGS_PD:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
- "event: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.pd.device_id,
- detail->args.pd.enclosure_index,
- detail->args.pd.slot_number,
- detail->description
- );
- break;
- case MR_EVT_ARGS_PD_ERR:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
- "err %d: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.pd_err.pd.device_id,
- detail->args.pd_err.pd.enclosure_index,
- detail->args.pd_err.pd.slot_number,
- detail->args.pd_err.err,
- detail->description
- );
- break;
- case MR_EVT_ARGS_PD_LBA:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
- "lba %lld: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.pd_lba.pd.device_id,
- detail->args.pd_lba.pd.enclosure_index,
- detail->args.pd_lba.pd.slot_number,
- (long long)detail->args.pd_lba.lba,
- detail->description
- );
- break;
- case MR_EVT_ARGS_PD_LBA_LD:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
- "lba %lld VD %02d/%d: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.pd_lba_ld.pd.device_id,
- detail->args.pd_lba_ld.pd.enclosure_index,
- detail->args.pd_lba_ld.pd.slot_number,
- (long long)detail->args.pd_lba.lba,
- detail->args.pd_lba_ld.ld.ld_index,
- detail->args.pd_lba_ld.ld.target_id,
- detail->description
- );
- break;
- case MR_EVT_ARGS_PD_PROG:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
- "progress %d%% seconds %ds: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.pd_prog.pd.device_id,
- detail->args.pd_prog.pd.enclosure_index,
- detail->args.pd_prog.pd.slot_number,
- detail->args.pd_prog.prog.progress/655,
- detail->args.pd_prog.prog.elapsed_seconds,
- detail->description
- );
- break;
- case MR_EVT_ARGS_PD_STATE:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PD %02d(e%d/s%d) "
- "state prior %d new %d: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.pd_prog.pd.device_id,
- detail->args.pd_prog.pd.enclosure_index,
- detail->args.pd_prog.pd.slot_number,
- detail->args.pd_state.prev_state,
- detail->args.pd_state.new_state,
- detail->description
- );
- break;
- case MR_EVT_ARGS_PCI:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - PCI 0x04%x 0x04%x "
- "0x04%x 0x04%x: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.pci.venderId,
- detail->args.pci.deviceId,
- detail->args.pci.subVenderId,
- detail->args.pci.subDeviceId,
- detail->description
- );
- break;
- case MR_EVT_ARGS_RATE:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - Rebuild rate %d: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.rate,
- detail->description
- );
- break;
- case MR_EVT_ARGS_TIME:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - Adapter ticks %d "
- "elapsed %ds: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.time.rtc,
- detail->args.time.elapsedSeconds,
- detail->description
- );
- break;
- case MR_EVT_ARGS_ECC:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - Adapter ECC %x,%x: %s: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->args.ecc.ecar,
- detail->args.ecc.elog,
- detail->args.ecc.str,
- detail->description
- );
- break;
+ static char buffer[32];
+
+ if ((timestamp & 0xff000000) == 0xff000000)
+ snprintf(buffer, sizeof(buffer), "boot + %us", timestamp &
+ 0x00ffffff);
+ else
+ snprintf(buffer, sizeof(buffer), "%us", timestamp);
+ return (buffer);
+}
+
+static const char *
+format_class(int8_t class)
+{
+ static char buffer[6];
+
+ switch (class) {
+ case MFI_EVT_CLASS_DEBUG:
+ return ("debug");
+ case MFI_EVT_CLASS_PROGRESS:
+ return ("progress");
+ case MFI_EVT_CLASS_INFO:
+ return ("info");
+ case MFI_EVT_CLASS_WARNING:
+ return ("WARN");
+ case MFI_EVT_CLASS_CRITICAL:
+ return ("CRIT");
+ case MFI_EVT_CLASS_FATAL:
+ return ("FATAL");
+ case MFI_EVT_CLASS_DEAD:
+ return ("DEAD");
default:
- device_printf(sc->mfi_dev, "%d (%us/0x%04x/%d) - Type %d: %s\n",
- detail->seq,
- detail->time,
- detail->class.members.locale,
- detail->class.members.class,
- detail->arg_type, detail->description
- );
+ snprintf(buffer, sizeof(buffer), "%d", class);
+ return (buffer);
}
}
+static void
+mfi_decode_evt(struct mfi_softc *sc, struct mfi_evt_detail *detail)
+{
+
+ device_printf(sc->mfi_dev, "%d (%s/0x%04x/%s) - %s\n", detail->seq,
+ format_timestamp(detail->time), detail->class.members.locale,
+ format_class(detail->class.members.class), detail->description);
+}
+
static int
mfi_aen_register(struct mfi_softc *sc, int seq, int locale)
{
OpenPOWER on IntegriCloud