Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  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
 24typedef unsigned char	geo_type_t;
 25
 26/* Fields common to all substructures */
 27typedef 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 */
 35typedef struct geo_node_s {
 36    geo_common_t	common;		/* No additional fields needed */
 37} geo_node_t;
 38
 39typedef struct geo_rtr_s {
 40    geo_common_t	common;		/* No additional fields needed */
 41} geo_rtr_t;
 42
 43typedef struct geo_iocntl_s {
 44    geo_common_t	common;		/* No additional fields needed */
 45} geo_iocntl_t;
 46
 47typedef 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 */
 54typedef struct geo_cpu_s {
 55    geo_node_t	node;
 56    char	slice;		/* Which CPU on the node */
 57} geo_cpu_t;
 58
 59typedef 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
 66typedef 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
112static 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
118static 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
124static 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
130extern geoid_t cnodeid_get_geoid(cnodeid_t cnode);
131
132#endif /* _ASM_IA64_SN_GEO_H */