1/* 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 4 * for more details. 5 * 6 * Copyright (C) 1992 - 1997, 2000-2004 Silicon Graphics, Inc. All rights reserved. 7 */ 8 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> 16 17char brick_types[MAX_BRICK_TYPES + 1] = "cri.xdpn%#=vo^kjbf890123456789..."; 18/* 19 * Format a module id for printing. 20 * 21 * There are three possible formats: 22 * 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. 27 * 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). 31 * 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. 37 * 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. 42 */ 43void 44format_module_id(char *buffer, moduleid_t m, int fmt) 45{ 46 int rack, position; 47 unsigned char brickchar; 48 49 rack = MODULE_GET_RACK(m); 50 brickchar = MODULE_GET_BTCHAR(m); 51 52 /* Be sure we use the same brick type character as displayed 53 * on the brick's LCD 54 */ 55 switch (brickchar) 56 { 57 case L1_BRICKTYPE_GA: 58 case L1_BRICKTYPE_OPUS_TIO: 59 brickchar = L1_BRICKTYPE_C; 60 break; 61 62 case L1_BRICKTYPE_PX: 63 case L1_BRICKTYPE_PE: 64 case L1_BRICKTYPE_PA: 65 case L1_BRICKTYPE_SA: /* we can move this to the "I's" later 66 * if that makes more sense 67 */ 68 brickchar = L1_BRICKTYPE_P; 69 break; 70 71 case L1_BRICKTYPE_IX: 72 case L1_BRICKTYPE_IA: 73 74 brickchar = L1_BRICKTYPE_I; 75 break; 76 } 77 78 position = MODULE_GET_BPOS(m); 79 80 if ((fmt == MODULE_FORMAT_BRIEF) || (fmt == MODULE_FORMAT_LCD)) { 81 /* Brief module number format, eg. 002c15 */ 82 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); 87 88 /* Add the brick type */ 89 *buffer++ = brickchar; 90 } 91 else if (fmt == MODULE_FORMAT_LONG) { 92 /* Fuller hwgraph format, eg. rack/002/bay/15 */ 93 94 strcpy(buffer, "rack" "/"); buffer += strlen(buffer); 95 96 *buffer++ = '0' + RACK_GET_CLASS(rack); 97 *buffer++ = '0' + RACK_GET_GROUP(rack); 98 *buffer++ = '0' + RACK_GET_NUM(rack); 99 100 strcpy(buffer, "/" "bay" "/"); buffer += strlen(buffer); 101 } 102 103 /* Add the bay position, using at least two digits */ 104 if (position < 10) 105 *buffer++ = '0'; 106 sprintf(buffer, "%d", position); 107} 108