hc
2023-10-25 6c2073b7aa40e29d0eca7d571dd7bc590c7ecaa7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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);
}