Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / ia64 / sn / kernel / klconflib.c
diff --git a/kernel/arch/ia64/sn/kernel/klconflib.c b/kernel/arch/ia64/sn/kernel/klconflib.c
new file mode 100644 (file)
index 0000000..87682b4
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 1992 - 1997, 2000-2004 Silicon Graphics, Inc. All rights reserved.
+ */
+
+#include <linux/types.h>
+#include <linux/ctype.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <asm/sn/types.h>
+#include <asm/sn/module.h>
+#include <asm/sn/l1.h>
+
+char brick_types[MAX_BRICK_TYPES + 1] = "cri.xdpn%#=vo^kjbf890123456789...";
+/*
+ * Format a module id for printing.
+ *
+ * There are three possible formats:
+ *
+ *   MODULE_FORMAT_BRIEF       is the brief 6-character format, including
+ *                             the actual brick-type as recorded in the 
+ *                             moduleid_t, eg. 002c15 for a C-brick, or
+ *                             101#17 for a PX-brick.
+ *
+ *   MODULE_FORMAT_LONG                is the hwgraph format, eg. rack/002/bay/15
+ *                             of rack/101/bay/17 (note that the brick
+ *                             type does not appear in this format).
+ *
+ *   MODULE_FORMAT_LCD         is like MODULE_FORMAT_BRIEF, except that it
+ *                             ensures that the module id provided appears
+ *                             exactly as it would on the LCD display of
+ *                             the corresponding brick, eg. still 002c15
+ *                             for a C-brick, but 101p17 for a PX-brick.
+ *
+ * maule (9/13/04):  Removed top-level check for (fmt == MODULE_FORMAT_LCD)
+ * making MODULE_FORMAT_LCD equivalent to MODULE_FORMAT_BRIEF.  It was
+ * decided that all callers should assume the returned string should be what
+ * is displayed on the brick L1 LCD.
+ */
+void
+format_module_id(char *buffer, moduleid_t m, int fmt)
+{
+       int rack, position;
+       unsigned char brickchar;
+
+       rack = MODULE_GET_RACK(m);
+       brickchar = MODULE_GET_BTCHAR(m);
+
+       /* Be sure we use the same brick type character as displayed
+        * on the brick's LCD
+        */
+       switch (brickchar) 
+       {
+       case L1_BRICKTYPE_GA:
+       case L1_BRICKTYPE_OPUS_TIO:
+               brickchar = L1_BRICKTYPE_C;
+               break;
+
+       case L1_BRICKTYPE_PX:
+       case L1_BRICKTYPE_PE:
+       case L1_BRICKTYPE_PA:
+       case L1_BRICKTYPE_SA: /* we can move this to the "I's" later
+                              * if that makes more sense
+                              */
+               brickchar = L1_BRICKTYPE_P;
+               break;
+
+       case L1_BRICKTYPE_IX:
+       case L1_BRICKTYPE_IA:
+
+               brickchar = L1_BRICKTYPE_I;
+               break;
+       }
+
+       position = MODULE_GET_BPOS(m);
+
+       if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) {
+               /* Brief module number format, eg. 002c15 */
+
+               /* Decompress the rack number */
+               *buffer++ = '0' + RACK_GET_CLASS(rack);
+               *buffer++ = '0' + RACK_GET_GROUP(rack);
+               *buffer++ = '0' + RACK_GET_NUM(rack);
+
+               /* Add the brick type */
+               *buffer++ = brickchar;
+       }
+       else if (fmt == MODULE_FORMAT_LONG) {
+               /* Fuller hwgraph format, eg. rack/002/bay/15 */
+
+               strcpy(buffer, "rack" "/");  buffer += strlen(buffer);
+
+               *buffer++ = '0' + RACK_GET_CLASS(rack);
+               *buffer++ = '0' + RACK_GET_GROUP(rack);
+               *buffer++ = '0' + RACK_GET_NUM(rack);
+
+               strcpy(buffer, "/" "bay" "/");  buffer += strlen(buffer);
+       }
+
+       /* Add the bay position, using at least two digits */
+       if (position < 10)
+               *buffer++ = '0';
+       sprintf(buffer, "%d", position);
+}