diff options
Diffstat (limited to 'arch/ia64/include/asm/sn/geo.h')
-rw-r--r-- | arch/ia64/include/asm/sn/geo.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/arch/ia64/include/asm/sn/geo.h b/arch/ia64/include/asm/sn/geo.h new file mode 100644 index 000000000000..f083c9434066 --- /dev/null +++ b/arch/ia64/include/asm/sn/geo.h | |||
@@ -0,0 +1,132 @@ | |||
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-2005 Silicon Graphics, Inc. All rights reserved. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_IA64_SN_GEO_H | ||
10 | #define _ASM_IA64_SN_GEO_H | ||
11 | |||
12 | /* The geoid_t implementation below is based loosely on the pcfg_t | ||
13 | implementation in sys/SN/promcfg.h. */ | ||
14 | |||
15 | /* Type declaractions */ | ||
16 | |||
17 | /* Size of a geoid_t structure (must be before decl. of geoid_u) */ | ||
18 | #define GEOID_SIZE 8 /* Would 16 be better? The size can | ||
19 | be different on different platforms. */ | ||
20 | |||
21 | #define MAX_SLOTS 0xf /* slots per module */ | ||
22 | #define MAX_SLABS 0xf /* slabs per slot */ | ||
23 | |||
24 | typedef unsigned char geo_type_t; | ||
25 | |||
26 | /* Fields common to all substructures */ | ||
27 | typedef struct geo_common_s { | ||
28 | moduleid_t module; /* The module (box) this h/w lives in */ | ||
29 | geo_type_t type; /* What type of h/w is named by this geoid_t */ | ||
30 | slabid_t slab:4; /* slab (ASIC), 0 .. 15 within slot */ | ||
31 | slotid_t slot:4; /* slot (Blade), 0 .. 15 within module */ | ||
32 | } geo_common_t; | ||
33 | |||
34 | /* Additional fields for particular types of hardware */ | ||
35 | typedef struct geo_node_s { | ||
36 | geo_common_t common; /* No additional fields needed */ | ||
37 | } geo_node_t; | ||
38 | |||
39 | typedef struct geo_rtr_s { | ||
40 | geo_common_t common; /* No additional fields needed */ | ||
41 | } geo_rtr_t; | ||
42 | |||
43 | typedef struct geo_iocntl_s { | ||
44 | geo_common_t common; /* No additional fields needed */ | ||
45 | } geo_iocntl_t; | ||
46 | |||
47 | typedef struct geo_pcicard_s { | ||
48 | geo_iocntl_t common; | ||
49 | char bus; /* Bus/widget number */ | ||
50 | char slot; /* PCI slot number */ | ||
51 | } geo_pcicard_t; | ||
52 | |||
53 | /* Subcomponents of a node */ | ||
54 | typedef struct geo_cpu_s { | ||
55 | geo_node_t node; | ||
56 | char slice; /* Which CPU on the node */ | ||
57 | } geo_cpu_t; | ||
58 | |||
59 | typedef struct geo_mem_s { | ||
60 | geo_node_t node; | ||
61 | char membus; /* The memory bus on the node */ | ||
62 | char memslot; /* The memory slot on the bus */ | ||
63 | } geo_mem_t; | ||
64 | |||
65 | |||
66 | typedef union geoid_u { | ||
67 | geo_common_t common; | ||
68 | geo_node_t node; | ||
69 | geo_iocntl_t iocntl; | ||
70 | geo_pcicard_t pcicard; | ||
71 | geo_rtr_t rtr; | ||
72 | geo_cpu_t cpu; | ||
73 | geo_mem_t mem; | ||
74 | char padsize[GEOID_SIZE]; | ||
75 | } geoid_t; | ||
76 | |||
77 | |||
78 | /* Preprocessor macros */ | ||
79 | |||
80 | #define GEO_MAX_LEN 48 /* max. formatted length, plus some pad: | ||
81 | module/001c07/slab/5/node/memory/2/slot/4 */ | ||
82 | |||
83 | /* Values for geo_type_t */ | ||
84 | #define GEO_TYPE_INVALID 0 | ||
85 | #define GEO_TYPE_MODULE 1 | ||
86 | #define GEO_TYPE_NODE 2 | ||
87 | #define GEO_TYPE_RTR 3 | ||
88 | #define GEO_TYPE_IOCNTL 4 | ||
89 | #define GEO_TYPE_IOCARD 5 | ||
90 | #define GEO_TYPE_CPU 6 | ||
91 | #define GEO_TYPE_MEM 7 | ||
92 | #define GEO_TYPE_MAX (GEO_TYPE_MEM+1) | ||
93 | |||
94 | /* Parameter for hwcfg_format_geoid_compt() */ | ||
95 | #define GEO_COMPT_MODULE 1 | ||
96 | #define GEO_COMPT_SLAB 2 | ||
97 | #define GEO_COMPT_IOBUS 3 | ||
98 | #define GEO_COMPT_IOSLOT 4 | ||
99 | #define GEO_COMPT_CPU 5 | ||
100 | #define GEO_COMPT_MEMBUS 6 | ||
101 | #define GEO_COMPT_MEMSLOT 7 | ||
102 | |||
103 | #define GEO_INVALID_STR "<invalid>" | ||
104 | |||
105 | #define INVALID_NASID ((nasid_t)-1) | ||
106 | #define INVALID_CNODEID ((cnodeid_t)-1) | ||
107 | #define INVALID_PNODEID ((pnodeid_t)-1) | ||
108 | #define INVALID_SLAB (slabid_t)-1 | ||
109 | #define INVALID_SLOT (slotid_t)-1 | ||
110 | #define INVALID_MODULE ((moduleid_t)-1) | ||
111 | |||
112 | static inline slabid_t geo_slab(geoid_t g) | ||
113 | { | ||
114 | return (g.common.type == GEO_TYPE_INVALID) ? | ||
115 | INVALID_SLAB : g.common.slab; | ||
116 | } | ||
117 | |||
118 | static inline slotid_t geo_slot(geoid_t g) | ||
119 | { | ||
120 | return (g.common.type == GEO_TYPE_INVALID) ? | ||
121 | INVALID_SLOT : g.common.slot; | ||
122 | } | ||
123 | |||
124 | static inline moduleid_t geo_module(geoid_t g) | ||
125 | { | ||
126 | return (g.common.type == GEO_TYPE_INVALID) ? | ||
127 | INVALID_MODULE : g.common.module; | ||
128 | } | ||
129 | |||
130 | extern geoid_t cnodeid_get_geoid(cnodeid_t cnode); | ||
131 | |||
132 | #endif /* _ASM_IA64_SN_GEO_H */ | ||