uv_geo.h (2405B)
1/* SPDX-License-Identifier: GPL-2.0-or-later 2 * 3 * This file is subject to the terms and conditions of the GNU General Public 4 * License. See the file "COPYING" in the main directory of this archive 5 * for more details. 6 * 7 * Copyright (C) 2020 Hewlett Packard Enterprise Development LP. All rights reserved. 8 */ 9 10#ifndef _ASM_UV_GEO_H 11#define _ASM_UV_GEO_H 12 13/* Type declarations */ 14 15/* Size of a geoid_s structure (must be before decl. of geoid_u) */ 16#define GEOID_SIZE 8 17 18/* Fields common to all substructures */ 19struct geo_common_s { 20 unsigned char type; /* What type of h/w is named by this geoid_s */ 21 unsigned char blade; 22 unsigned char slot; /* slot is IRU */ 23 unsigned char upos; 24 unsigned char rack; 25}; 26 27/* Additional fields for particular types of hardware */ 28struct geo_node_s { 29 struct geo_common_s common; /* No additional fields needed */ 30}; 31 32struct geo_rtr_s { 33 struct geo_common_s common; /* No additional fields needed */ 34}; 35 36struct geo_iocntl_s { 37 struct geo_common_s common; /* No additional fields needed */ 38}; 39 40struct geo_pcicard_s { 41 struct geo_iocntl_s common; 42 char bus; /* Bus/widget number */ 43 char slot; /* PCI slot number */ 44}; 45 46/* Subcomponents of a node */ 47struct geo_cpu_s { 48 struct geo_node_s node; 49 unsigned char socket:4, /* Which CPU on the node */ 50 thread:4; 51 unsigned char core; 52}; 53 54struct geo_mem_s { 55 struct geo_node_s node; 56 char membus; /* The memory bus on the node */ 57 char memslot; /* The memory slot on the bus */ 58}; 59 60union geoid_u { 61 struct geo_common_s common; 62 struct geo_node_s node; 63 struct geo_iocntl_s iocntl; 64 struct geo_pcicard_s pcicard; 65 struct geo_rtr_s rtr; 66 struct geo_cpu_s cpu; 67 struct geo_mem_s mem; 68 char padsize[GEOID_SIZE]; 69}; 70 71/* Defined constants */ 72 73#define GEO_MAX_LEN 48 74 75#define GEO_TYPE_INVALID 0 76#define GEO_TYPE_MODULE 1 77#define GEO_TYPE_NODE 2 78#define GEO_TYPE_RTR 3 79#define GEO_TYPE_IOCNTL 4 80#define GEO_TYPE_IOCARD 5 81#define GEO_TYPE_CPU 6 82#define GEO_TYPE_MEM 7 83#define GEO_TYPE_MAX (GEO_TYPE_MEM+1) 84 85static inline int geo_rack(union geoid_u g) 86{ 87 return (g.common.type == GEO_TYPE_INVALID) ? 88 -1 : g.common.rack; 89} 90 91static inline int geo_slot(union geoid_u g) 92{ 93 return (g.common.type == GEO_TYPE_INVALID) ? 94 -1 : g.common.upos; 95} 96 97static inline int geo_blade(union geoid_u g) 98{ 99 return (g.common.type == GEO_TYPE_INVALID) ? 100 -1 : g.common.blade * 2 + g.common.slot; 101} 102 103#endif /* _ASM_UV_GEO_H */