Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
17 | char 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 | */ | |
43 | void | |
44 | format_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)) { | |
2fcc3db0 | 81 | /* Brief module number format, eg. 002c15 */ |
1da177e4 | 82 | |
2fcc3db0 JS |
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); | |
1da177e4 | 87 | |
2fcc3db0 JS |
88 | /* Add the brick type */ |
89 | *buffer++ = brickchar; | |
1da177e4 LT |
90 | } |
91 | else if (fmt == MODULE_FORMAT_LONG) { | |
2fcc3db0 | 92 | /* Fuller hwgraph format, eg. rack/002/bay/15 */ |
1da177e4 | 93 | |
2fcc3db0 | 94 | strcpy(buffer, "rack" "/"); buffer += strlen(buffer); |
1da177e4 | 95 | |
2fcc3db0 JS |
96 | *buffer++ = '0' + RACK_GET_CLASS(rack); |
97 | *buffer++ = '0' + RACK_GET_GROUP(rack); | |
98 | *buffer++ = '0' + RACK_GET_NUM(rack); | |
1da177e4 | 99 | |
2fcc3db0 | 100 | strcpy(buffer, "/" "bay" "/"); buffer += strlen(buffer); |
1da177e4 LT |
101 | } |
102 | ||
103 | /* Add the bay position, using at least two digits */ | |
104 | if (position < 10) | |
2fcc3db0 | 105 | *buffer++ = '0'; |
1da177e4 | 106 | sprintf(buffer, "%d", position); |
1da177e4 | 107 | } |