|
@@ -0,0 +1,106 @@
|
|
|
+/*
|
|
|
+ * linux/arch/alpha/kernel/err_marvel.c
|
|
|
+ *
|
|
|
+ * Copyright (C) 2001 Jeff Wiedemeier (Compaq Computer Corporation)
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+#include <linux/init.h>
|
|
|
+#include <linux/pci.h>
|
|
|
+#include <linux/sched.h>
|
|
|
+
|
|
|
+#include <asm/io.h>
|
|
|
+#include <asm/console.h>
|
|
|
+#include <asm/core_marvel.h>
|
|
|
+#include <asm/hwrpb.h>
|
|
|
+#include <asm/smp.h>
|
|
|
+#include <asm/err_common.h>
|
|
|
+#include <asm/err_ev7.h>
|
|
|
+
|
|
|
+#include "err_impl.h"
|
|
|
+#include "proto.h"
|
|
|
+
|
|
|
+static void
|
|
|
+marvel_print_680_frame(struct ev7_lf_subpackets *lf_subpackets)
|
|
|
+{
|
|
|
+#ifdef CONFIG_VERBOSE_MCHECK
|
|
|
+ struct ev7_pal_environmental_subpacket *env;
|
|
|
+ struct { int type; char *name; } ev_packets[] = {
|
|
|
+ { EL_TYPE__PAL__ENV__AMBIENT_TEMPERATURE,
|
|
|
+ "Ambient Temperature" },
|
|
|
+ { EL_TYPE__PAL__ENV__AIRMOVER_FAN,
|
|
|
+ "AirMover / Fan" },
|
|
|
+ { EL_TYPE__PAL__ENV__VOLTAGE,
|
|
|
+ "Voltage" },
|
|
|
+ { EL_TYPE__PAL__ENV__INTRUSION,
|
|
|
+ "Intrusion" },
|
|
|
+ { EL_TYPE__PAL__ENV__POWER_SUPPLY,
|
|
|
+ "Power Supply" },
|
|
|
+ { EL_TYPE__PAL__ENV__LAN,
|
|
|
+ "LAN" },
|
|
|
+ { EL_TYPE__PAL__ENV__HOT_PLUG,
|
|
|
+ "Hot Plug" },
|
|
|
+ { 0, NULL }
|
|
|
+ };
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; ev_packets[i].type != 0; i++) {
|
|
|
+ env = lf_subpackets->env[ev7_lf_env_index(ev_packets[i].type)];
|
|
|
+ if (!env)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ printk("%s**%s event (cabinet %d, drawer %d)\n",
|
|
|
+ err_print_prefix,
|
|
|
+ ev_packets[i].name,
|
|
|
+ env->cabinet,
|
|
|
+ env->drawer);
|
|
|
+ printk("%s Module Type: 0x%x - Unit ID 0x%x - "
|
|
|
+ "Condition 0x%x\n",
|
|
|
+ err_print_prefix,
|
|
|
+ env->module_type,
|
|
|
+ env->unit_id,
|
|
|
+ env->condition);
|
|
|
+ }
|
|
|
+#endif /* CONFIG_VERBOSE_MCHECK */
|
|
|
+}
|
|
|
+
|
|
|
+static int
|
|
|
+marvel_process_680_frame(struct ev7_lf_subpackets *lf_subpackets, int print)
|
|
|
+{
|
|
|
+ int status = MCHK_DISPOSITION_UNKNOWN_ERROR;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = ev7_lf_env_index(EL_TYPE__PAL__ENV__AMBIENT_TEMPERATURE);
|
|
|
+ i <= ev7_lf_env_index(EL_TYPE__PAL__ENV__HOT_PLUG);
|
|
|
+ i++) {
|
|
|
+ if (lf_subpackets->env[i])
|
|
|
+ status = MCHK_DISPOSITION_REPORT;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (print)
|
|
|
+ marvel_print_680_frame(lf_subpackets);
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
+#ifdef CONFIG_VERBOSE_MCHECK
|
|
|
+
|
|
|
+static void
|
|
|
+marvel_print_err_cyc(u64 err_cyc)
|
|
|
+{
|
|
|
+ static char *packet_desc[] = {
|
|
|
+ "No Error",
|
|
|
+ "UNKNOWN",
|
|
|
+ "1 cycle (1 or 2 flit packet)",
|
|
|
+ "2 cycles (3 flit packet)",
|
|
|
+ "9 cycles (18 flit packet)",
|
|
|
+ "10 cycles (19 flit packet)",
|
|
|
+ "UNKNOWN",
|
|
|
+ "UNKNOWN",
|
|
|
+ "UNKNOWN"
|
|
|
+ };
|
|
|
+
|
|
|
+#define IO7__ERR_CYC__ODD_FLT (1UL << 0)
|
|
|
+#define IO7__ERR_CYC__EVN_FLT (1UL << 1)
|
|
|
+#define IO7__ERR_CYC__PACKET__S (6)
|
|
|
+#define IO7__ERR_CYC__PACKET__M (0x7)
|