2  * This file is subject to the terms and conditions of the GNU General Public
 
   3  * License.  See the file "COPYING" in the main directory of this archive
 
   6  * Copyright (C) 1992 - 1997, 2000-2004 Silicon Graphics, Inc. All rights reserved.
 
   9 #include <linux/types.h>
 
  10 #include <linux/ctype.h>
 
  11 #include <linux/string.h>
 
  12 #include <linux/kernel.h>
 
  13 #include <asm/sn/types.h>
 
  14 #include <asm/sn/module.h>
 
  15 #include <asm/sn/l1.h>
 
  17 char brick_types[MAX_BRICK_TYPES + 1] = "cri.xdpn%#=vo^kjbf890123456789...";
 
  19  * Format a module id for printing.
 
  21  * There are three possible formats:
 
  23  *   MODULE_FORMAT_BRIEF        is the brief 6-character format, including
 
  24  *                              the actual brick-type as recorded in the 
 
  25  *                              moduleid_t, eg. 002c15 for a C-brick, or
 
  26  *                              101#17 for a PX-brick.
 
  28  *   MODULE_FORMAT_LONG         is the hwgraph format, eg. rack/002/bay/15
 
  29  *                              of rack/101/bay/17 (note that the brick
 
  30  *                              type does not appear in this format).
 
  32  *   MODULE_FORMAT_LCD          is like MODULE_FORMAT_BRIEF, except that it
 
  33  *                              ensures that the module id provided appears
 
  34  *                              exactly as it would on the LCD display of
 
  35  *                              the corresponding brick, eg. still 002c15
 
  36  *                              for a C-brick, but 101p17 for a PX-brick.
 
  38  * maule (9/13/04):  Removed top-level check for (fmt == MODULE_FORMAT_LCD)
 
  39  * making MODULE_FORMAT_LCD equivalent to MODULE_FORMAT_BRIEF.  It was
 
  40  * decided that all callers should assume the returned string should be what
 
  41  * is displayed on the brick L1 LCD.
 
  44 format_module_id(char *buffer, moduleid_t m, int fmt)
 
  47         unsigned char brickchar;
 
  49         rack = MODULE_GET_RACK(m);
 
  50         brickchar = MODULE_GET_BTCHAR(m);
 
  52         /* Be sure we use the same brick type character as displayed
 
  58         case L1_BRICKTYPE_OPUS_TIO:
 
  59                 brickchar = L1_BRICKTYPE_C;
 
  65         case L1_BRICKTYPE_SA: /* we can move this to the "I's" later
 
  66                                * if that makes more sense
 
  68                 brickchar = L1_BRICKTYPE_P;
 
  74                 brickchar = L1_BRICKTYPE_I;
 
  78         position = MODULE_GET_BPOS(m);
 
  80         if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) {
 
  81                 /* Brief module number format, eg. 002c15 */
 
  83                 /* Decompress the rack number */
 
  84                 *buffer++ = '0' + RACK_GET_CLASS(rack);
 
  85                 *buffer++ = '0' + RACK_GET_GROUP(rack);
 
  86                 *buffer++ = '0' + RACK_GET_NUM(rack);
 
  88                 /* Add the brick type */
 
  89                 *buffer++ = brickchar;
 
  91         else if (fmt == MODULE_FORMAT_LONG) {
 
  92                 /* Fuller hwgraph format, eg. rack/002/bay/15 */
 
  94                 strcpy(buffer, "rack" "/");  buffer += strlen(buffer);
 
  96                 *buffer++ = '0' + RACK_GET_CLASS(rack);
 
  97                 *buffer++ = '0' + RACK_GET_GROUP(rack);
 
  98                 *buffer++ = '0' + RACK_GET_NUM(rack);
 
 100                 strcpy(buffer, "/" "bay" "/");  buffer += strlen(buffer);
 
 103         /* Add the bay position, using at least two digits */
 
 106         sprintf(buffer, "%d", position);