summaryrefslogtreecommitdiffstats
path: root/sys/dev/mly/mly_tables.h
diff options
context:
space:
mode:
authormsmith <msmith@FreeBSD.org>2000-08-23 03:22:41 +0000
committermsmith <msmith@FreeBSD.org>2000-08-23 03:22:41 +0000
commit19a7cf4f83591586186dbc002cbfc9f1076b9dec (patch)
tree2d6ff12b8e748962ab52a60dfcdec1c102173d1f /sys/dev/mly/mly_tables.h
parent13504cf93eec576a6d9bd497673694455a501c7e (diff)
downloadFreeBSD-src-19a7cf4f83591586186dbc002cbfc9f1076b9dec.zip
FreeBSD-src-19a7cf4f83591586186dbc002cbfc9f1076b9dec.tar.gz
This is the initial import of a new driver for the current family of
PCI:SCSI RAID controllers from Mylex.
Diffstat (limited to 'sys/dev/mly/mly_tables.h')
-rw-r--r--sys/dev/mly/mly_tables.h335
1 files changed, 335 insertions, 0 deletions
diff --git a/sys/dev/mly/mly_tables.h b/sys/dev/mly/mly_tables.h
new file mode 100644
index 0000000..5a83f17
--- /dev/null
+++ b/sys/dev/mly/mly_tables.h
@@ -0,0 +1,335 @@
+/*-
+ * Copyright (c) 2000 Michael Smith
+ * Copyright (c) 2000 BSDi
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+/*
+ * Lookup table for code-to-text translations.
+ */
+struct mly_code_lookup {
+ char *string;
+ u_int32_t code;
+};
+
+extern char *mly_describe_code(struct mly_code_lookup *table, u_int32_t code);
+
+#ifndef MLY_DEFINE_TABLES
+extern struct mly_code_lookup mly_table_bustype[];
+extern struct mly_code_lookup mly_table_controllertype[];
+extern struct mly_code_lookup mly_table_oemname[];
+extern struct mly_code_lookup mly_table_memorytype[];
+extern struct mly_code_lookup mly_table_cputype[];
+extern struct mly_code_lookup mly_table_event[];
+extern struct mly_code_lookup mly_table_device_state[];
+extern struct mly_code_lookup mly_table_device_type[];
+extern struct mly_code_lookup mly_table_stripe_size[];
+extern struct mly_code_lookup mly_table_cacheline_size[];
+
+#else /* MLY_DEFINE_TABLES */
+
+/********************************************************************************
+ * Look up a text description of a numeric code and return a pointer to same.
+ */
+char *
+mly_describe_code(struct mly_code_lookup *table, u_int32_t code)
+{
+ int i;
+
+ for (i = 0; table[i].string != NULL; i++)
+ if (table[i].code == code)
+ return(table[i].string);
+ return(table[i+1].string);
+}
+
+struct mly_code_lookup mly_table_bustype[] = {
+ {"SCSI", 0x00},
+ {"FC-AL", 0x01},
+ {"PCI", 0x03},
+ {NULL, 0},
+ {"unknown bus", 0}
+};
+
+struct mly_code_lookup mly_table_controllertype[] = {
+#if 0 /* not supported by this driver */
+ {"DAC960E", 0x01}, /* EISA */
+ {"DAC960M", 0x08}, /* MCA */
+ {"DAC960PD", 0x10}, /* PCI Dual */
+ {"DAC960PL", 0x11}, /* PCU low-cost */
+ {"DAC960PDU", 0x12}, /* PD Ultra */
+ {"DAC960PE", 0x13}, /* Peregrine low-cost */
+ {"DAC960PG", 0x14}, /* Peregrine high-performance */
+ {"DAC960PJ", 0x15}, /* Road Runner */
+ {"DAC960PTL0", 0x16}, /* Jaguar */
+ {"DAC960PR", 0x17}, /* Road Runner (again?) */
+ {"DAC960PRL", 0x18}, /* Tomcat */
+ {"DAC960PT", 0x19}, /* Road Runner (yet again?) */
+ {"DAC1164P", 0x1a}, /* Little Apple */
+ {"DAC960PTL1", 0x1b}, /* Jaguar+ */
+#endif
+ {"EXR2000P", 0x1c}, /* Big Apple */
+ {"EXR3000P", 0x1d}, /* Fibre Apple */
+ {"AcceleRAID 352", 0x1e}, /* Leopard */
+ {"AcceleRAID 170", 0x1f}, /* Lynx */
+ {"AcceleRAID 160", 0x20}, /* Bobcat */
+ {NULL, 0},
+ {"unknown adapter", 0}
+};
+
+struct mly_code_lookup mly_table_oemname[] = {
+ {"Mylex", MLY_OEM_MYLEX},
+ {"IBM", MLY_OEM_IBM},
+ {"Hewlett-Packard", MLY_OEM_HP},
+ {"DEC/Compaq", MLY_OEM_DEC},
+ {"Siemens", MLY_OEM_SIEMENS},
+ {"Intel", MLY_OEM_INTEL},
+ {NULL, 0},
+ {"unknown OEM", 0}
+};
+
+struct mly_code_lookup mly_table_memorytype[] = {
+ {"DRAM", 0x01},
+ {"EDRAM", 0x02},
+ {"EDO RAM", 0x03},
+ {"SDRAM", 0x04},
+ {NULL, 0},
+ {"unknown memory", 0}
+};
+
+struct mly_code_lookup mly_table_cputype[] = {
+ {"i960CA", 0x01},
+ {"i960RD", 0x02},
+ {"i960RN", 0x03},
+ {"i960RP", 0x04},
+ {"NorthBay(?)", 0x05},
+ {"StrongArm", 0x06},
+ {"i960RM", 0x07},
+ {NULL, 0},
+ {"unknown CPU", 0}
+};
+
+/*
+ * This table is directly derived from the corresponding table in the
+ * Linux driver, and uses a derivative encoding for simplicity's sake.
+ *
+ * The first character of the string determines the format of the message.
+ *
+ * p "physical device <channel>:<target> <text>" (physical device status)
+ * s "physical device <channel>:<target> <text>" (scsi message or error)
+ * " sense key <key> asc <asc> ascq <ascq>"
+ * " info <info> csi <csi>"
+ * l "logical drive <unit>: <text>" (logical device status)
+ * m "logical drive <unit>: <text>" (logical device message)
+ *
+ * Messages which are typically suppressed have the first character capitalised.
+ * These messages will only be printed if bootverbose is set.
+ *
+ * The second character in the string indicates an action to be taken as a
+ * result of the event.
+ *
+ * r rescan the device for possible state change
+ *
+ */
+struct mly_code_lookup mly_table_event[] = {
+ /* physical device events (0x0000 - 0x007f) */
+ {"pr online", 0x0001},
+ {"pr standby", 0x0002},
+ {"p automatic rebuild started", 0x0005},
+ {"p manual rebuild started", 0x0006},
+ {"pr rebuild completed", 0x0007},
+ {"pr rebuild cancelled", 0x0008},
+ {"pr rebuild failed for unknown reasons", 0x0009},
+ {"pr rebuild failed due to new physical device", 0x000a},
+ {"pr rebuild failed due to logical drive failure", 0x000b},
+ {"sr offline", 0x000c},
+ {"pr found", 0x000d},
+ {"pr gone", 0x000e},
+ {"p unconfigured", 0x000f},
+ {"p expand capacity started", 0x0010},
+ {"pr expand capacity completed", 0x0011},
+ {"pr expand capacity failed", 0x0012},
+ {"p parity error", 0x0016},
+ {"p soft error", 0x0017},
+ {"p miscellaneous error", 0x0018},
+ {"p reset", 0x0019},
+ {"p active spare found", 0x001a},
+ {"p warm spare found", 0x001b},
+ {"s sense data received", 0x001c},
+ {"p initialization started", 0x001d},
+ {"pr initialization completed", 0x001e},
+ {"pr initialization failed", 0x001f},
+ {"pr initialization cancelled", 0x0020},
+ {"P write recovery failed", 0x0021},
+ {"p scsi bus reset failed", 0x0022},
+ {"p double check condition", 0x0023},
+ {"p device cannot be accessed", 0x0024},
+ {"p gross error on scsi processor", 0x0025},
+ {"p bad tag from device", 0x0026},
+ {"p command timeout", 0x0027},
+ {"pr system reset", 0x0028},
+ {"p busy status or parity error", 0x0029},
+ {"pr host set device to failed state", 0x002a},
+ {"pr selection timeout", 0x002b},
+ {"p scsi bus phase error", 0x002c},
+ {"pr device returned unknown status", 0x002d},
+ {"pr device not ready", 0x002e},
+ {"p device not found at startup", 0x002f},
+ {"p COD write operation failed", 0x0030},
+ {"p BDT write operation failed", 0x0031},
+ {"p missing at startup", 0x0039},
+ {"p start rebuild failed due to physical drive too small", 0x003a},
+ /* logical device events (0x0080 - 0x00ff) */
+ {"m consistency check started", 0x0080},
+ {"mr consistency check completed", 0x0081},
+ {"mr consistency check cancelled", 0x0082},
+ {"mr consistency check completed with errors", 0x0083},
+ {"mr consistency check failed due to logical drive failure", 0x0084},
+ {"mr consistency check failed due to physical device failure", 0x0085},
+ {"lr offline", 0x0086},
+ {"lr critical", 0x0087},
+ {"lr online", 0x0088},
+ {"m automatic rebuild started", 0x0089},
+ {"m manual rebuild started", 0x008a},
+ {"mr rebuild completed", 0x008b},
+ {"mr rebuild cancelled", 0x008c},
+ {"mr rebuild failed for unknown reasons", 0x008d},
+ {"mr rebuild failed due to new physical device", 0x008e},
+ {"mr rebuild failed due to logical drive failure", 0x008f},
+ {"l initialization started", 0x0090},
+ {"lr initialization completed", 0x0091},
+ {"lr initialization cancelled", 0x0092},
+ {"lr initialization failed", 0x0093},
+ {"lr found", 0x0094},
+ {"lr gone", 0x0095},
+ {"l expand capacity started", 0x0096},
+ {"lr expand capacity completed", 0x0097},
+ {"lr expand capacity failed", 0x0098},
+ {"l bad block found", 0x0099},
+ {"lr size changed", 0x009a},
+ {"lr type changed", 0x009b},
+ {"l bad data block found", 0x009c},
+ {"l read of data block in bdt", 0x009e},
+ {"l write back data for disk block lost", 0x009f},
+ /* enclosure management events (0x0100 - 0x017f) */
+ {"e enclosure %d fan %d failed", 0x0140},
+ {"e enclosure %d fan %d ok", 0x0141},
+ {"e enclosure %d fan %d not present", 0x0142},
+ {"e enclosure %d power supply %d failed", 0x0143},
+ {"e enclosure %d power supply %d ok", 0x0144},
+ {"e enclosure %d power supply %d not present", 0x0145},
+ {"e enclosure %d temperature sensor %d failed", 0x0146},
+ {"e enclosure %d temperature sensor %d critical", 0x0147},
+ {"e enclosure %d temperature sensor %d ok", 0x0148},
+ {"e enclosure %d temperature sensor %d not present", 0x0149},
+ {"e enclosure %d unit %d access critical", 0x014a},
+ {"e enclosure %d unit %d access ok", 0x014b},
+ {"e enclosure %d unit %d access offline", 0x014c},
+ /* controller events (0x0180 - 0x01ff) */
+ {"c cache write back error", 0x0181},
+ {"c battery backup unit found", 0x0188},
+ {"c battery backup unit charge level low", 0x0189},
+ {"c battery backup unit charge level ok", 0x018a},
+ {"c installation aborted", 0x0193},
+ {"c mirror race recovery in progress", 0x0195},
+ {"c mirror race on critical drive", 0x0196},
+ {"c memory soft ecc error", 0x019e},
+ {"c memory hard ecc error", 0x019f},
+ {"c battery backup unit failed", 0x01a2},
+ {NULL, 0},
+ {"? unknown event code", 0}
+};
+
+/*
+ * Values here must be 16 characters or less, as they are packed into
+ * the 'product' field in the SCSI inquiry data.
+ */
+struct mly_code_lookup mly_table_device_state[] = {
+ {"offline", MLY_DEVICE_STATE_OFFLINE},
+ {"unconfigured", MLY_DEVICE_STATE_UNCONFIGURED},
+ {"online", MLY_DEVICE_STATE_ONLINE},
+ {"critical", MLY_DEVICE_STATE_CRITICAL},
+ {"writeonly", MLY_DEVICE_STATE_WRITEONLY},
+ {"standby", MLY_DEVICE_STATE_STANDBY},
+ {"missing", MLY_DEVICE_STATE_MISSING},
+ {NULL, 0},
+ {"unknown state", 0}
+};
+
+/*
+ * Values here must be 8 characters or less, as they are packed into
+ * the 'vendor' field in the SCSI inquiry data.
+ */
+struct mly_code_lookup mly_table_device_type[] = {
+ {"RAID 0", MLY_DEVICE_TYPE_RAID0},
+ {"RAID 1", MLY_DEVICE_TYPE_RAID1},
+ {"RAID 3", MLY_DEVICE_TYPE_RAID3}, /* right asymmetric parity */
+ {"RAID 5", MLY_DEVICE_TYPE_RAID5}, /* right asymmetric parity */
+ {"RAID 6", MLY_DEVICE_TYPE_RAID6}, /* Mylex RAID 6 */
+ {"RAID 7", MLY_DEVICE_TYPE_RAID7}, /* JBOD */
+ {"SPAN", MLY_DEVICE_TYPE_NEWSPAN}, /* New Mylex SPAN */
+ {"RAID 3", MLY_DEVICE_TYPE_RAID3F}, /* fixed parity */
+ {"RAID 3", MLY_DEVICE_TYPE_RAID3L}, /* left symmetric parity */
+ {"SPAN", MLY_DEVICE_TYPE_SPAN}, /* current spanning implementation */
+ {"RAID 5", MLY_DEVICE_TYPE_RAID5L}, /* left symmetric parity */
+ {"RAID E", MLY_DEVICE_TYPE_RAIDE}, /* concatenation */
+ {"PHYSICAL", MLY_DEVICE_TYPE_PHYSICAL}, /* physical device */
+ {NULL, 0},
+ {"UNKNOWN", 0}
+};
+
+struct mly_code_lookup mly_table_stripe_size[] = {
+ {"NONE", MLY_STRIPE_ZERO},
+ {"512B", MLY_STRIPE_512b},
+ {"1k", MLY_STRIPE_1k},
+ {"2k", MLY_STRIPE_2k},
+ {"4k", MLY_STRIPE_4k},
+ {"8k", MLY_STRIPE_8k},
+ {"16k", MLY_STRIPE_16k},
+ {"32k", MLY_STRIPE_32k},
+ {"64k", MLY_STRIPE_64k},
+ {"128k", MLY_STRIPE_128k},
+ {"256k", MLY_STRIPE_256k},
+ {"512k", MLY_STRIPE_512k},
+ {"1M", MLY_STRIPE_1m},
+ {NULL, 0},
+ {"unknown", 0}
+};
+
+struct mly_code_lookup mly_table_cacheline_size[] = {
+ {"NONE", MLY_CACHELINE_ZERO},
+ {"512B", MLY_CACHELINE_512b},
+ {"1k", MLY_CACHELINE_1k},
+ {"2k", MLY_CACHELINE_2k},
+ {"4k", MLY_CACHELINE_4k},
+ {"8k", MLY_CACHELINE_8k},
+ {"16k", MLY_CACHELINE_16k},
+ {"32k", MLY_CACHELINE_32k},
+ {"64k", MLY_CACHELINE_64k},
+ {NULL, 0},
+ {"unknown", 0}
+};
+
+#endif /* MLY_DEFINE_TABLES */
OpenPOWER on IntegriCloud