Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/ia64/sn/kernel/klconflib.c
10819 views
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)) {
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
109