| Viewing file:  geo.h (3.51 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
/** 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-2005 Silicon Graphics, Inc. All rights reserved.
 */
 
 #ifndef _ASM_IA64_SN_GEO_H
 #define _ASM_IA64_SN_GEO_H
 
 /* The geoid_t implementation below is based loosely on the pcfg_t
 implementation in sys/SN/promcfg.h. */
 
 /* Type declaractions */
 
 /* Size of a geoid_t structure (must be before decl. of geoid_u) */
 #define GEOID_SIZE    8    /* Would 16 be better?  The size can
 be different on different platforms. */
 
 #define MAX_SLOTS    0xf    /* slots per module */
 #define MAX_SLABS    0xf    /* slabs per slot */
 
 typedef unsigned char    geo_type_t;
 
 /* Fields common to all substructures */
 typedef struct geo_common_s {
 moduleid_t    module;        /* The module (box) this h/w lives in */
 geo_type_t    type;        /* What type of h/w is named by this geoid_t */
 slabid_t    slab:4;        /* slab (ASIC), 0 .. 15 within slot */
 slotid_t    slot:4;        /* slot (Blade), 0 .. 15 within module */
 } geo_common_t;
 
 /* Additional fields for particular types of hardware */
 typedef struct geo_node_s {
 geo_common_t    common;        /* No additional fields needed */
 } geo_node_t;
 
 typedef struct geo_rtr_s {
 geo_common_t    common;        /* No additional fields needed */
 } geo_rtr_t;
 
 typedef struct geo_iocntl_s {
 geo_common_t    common;        /* No additional fields needed */
 } geo_iocntl_t;
 
 typedef struct geo_pcicard_s {
 geo_iocntl_t    common;
 char        bus;    /* Bus/widget number */
 char        slot;    /* PCI slot number */
 } geo_pcicard_t;
 
 /* Subcomponents of a node */
 typedef struct geo_cpu_s {
 geo_node_t    node;
 char    slice;        /* Which CPU on the node */
 } geo_cpu_t;
 
 typedef struct geo_mem_s {
 geo_node_t    node;
 char    membus;        /* The memory bus on the node */
 char    memslot;    /* The memory slot on the bus */
 } geo_mem_t;
 
 
 typedef union geoid_u {
 geo_common_t    common;
 geo_node_t        node;
 geo_iocntl_t    iocntl;
 geo_pcicard_t    pcicard;
 geo_rtr_t        rtr;
 geo_cpu_t        cpu;
 geo_mem_t        mem;
 char        padsize[GEOID_SIZE];
 } geoid_t;
 
 
 /* Preprocessor macros */
 
 #define GEO_MAX_LEN    48    /* max. formatted length, plus some pad:
 module/001c07/slab/5/node/memory/2/slot/4 */
 
 /* Values for geo_type_t */
 #define GEO_TYPE_INVALID    0
 #define GEO_TYPE_MODULE        1
 #define GEO_TYPE_NODE        2
 #define GEO_TYPE_RTR        3
 #define GEO_TYPE_IOCNTL        4
 #define GEO_TYPE_IOCARD        5
 #define GEO_TYPE_CPU        6
 #define GEO_TYPE_MEM        7
 #define GEO_TYPE_MAX        (GEO_TYPE_MEM+1)
 
 /* Parameter for hwcfg_format_geoid_compt() */
 #define GEO_COMPT_MODULE    1
 #define GEO_COMPT_SLAB        2
 #define GEO_COMPT_IOBUS        3
 #define GEO_COMPT_IOSLOT    4
 #define GEO_COMPT_CPU        5
 #define GEO_COMPT_MEMBUS    6
 #define GEO_COMPT_MEMSLOT    7
 
 #define GEO_INVALID_STR        "<invalid>"
 
 #define INVALID_NASID           ((nasid_t)-1)
 #define INVALID_CNODEID         ((cnodeid_t)-1)
 #define INVALID_PNODEID         ((pnodeid_t)-1)
 #define INVALID_SLAB            (slabid_t)-1
 #define INVALID_SLOT            (slotid_t)-1
 #define INVALID_MODULE          ((moduleid_t)-1)
 
 static inline slabid_t geo_slab(geoid_t g)
 {
 return (g.common.type == GEO_TYPE_INVALID) ?
 INVALID_SLAB : g.common.slab;
 }
 
 static inline slotid_t geo_slot(geoid_t g)
 {
 return (g.common.type == GEO_TYPE_INVALID) ?
 INVALID_SLOT : g.common.slot;
 }
 
 static inline moduleid_t geo_module(geoid_t g)
 {
 return (g.common.type == GEO_TYPE_INVALID) ?
 INVALID_MODULE : g.common.module;
 }
 
 extern geoid_t cnodeid_get_geoid(cnodeid_t cnode);
 
 #endif /* _ASM_IA64_SN_GEO_H */
 
 |