Logo Search packages:      
Sourcecode: linux version File versions

klconflib.c

/*
 * 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);
}

Generated by  Doxygen 1.6.0   Back to index