1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 2000-2001 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #ifndef _ANCESTOR_H 28 #define _ANCESTOR_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #ifdef __cplusplus 37 } 38 #endif 39 40 #include "libfru.h" 41 #include "libfrureg.h" 42 #include "fru_tag.h" 43 #include "Str.h" 44 45 // the object used to determine the ancestory of a particular element. 46 struct Ancestor 47 { 48 Ancestor(Str field, fru_tag_t t, const fru_regdef_t *d); 49 ~Ancestor(); 50 51 void addInstance(const char *path, uint32_t offset); 52 53 Str getFieldName(void); 54 fru_tag_t getTag(void); 55 56 const fru_regdef_t *getDef(void); 57 58 int getNumInstances(void); 59 uint32_t getInstOffset(int num); 60 const char *getPath(int num); 61 /* 62 * void print(void); 63 */ 64 65 // returns a NULL terminated list of Ancestor objects which contain 66 // information about all the Ancestors of element. 67 static Ancestor *listTaggedAncestors(char *element); 68 69 public: 70 Ancestor *next; 71 72 private: 73 Str field_name; 74 fru_tag_t tag; 75 const fru_regdef_t *def; 76 int numInstances; 77 #define ANCESTOR_INST_BUF_SIZE 256 78 int numBufs; 79 uint32_t *offsets; 80 char **paths; 81 82 // internal calls 83 static Ancestor * createTaggedAncestor(const fru_regdef_t *def, 84 Str element); 85 static int definitionContains(const fru_regdef_t *def, 86 const fru_regdef_t *parent_def, 87 Str element, 88 uint32_t offset, 89 Ancestor *ant, 90 Str path); 91 92 private: 93 Ancestor(const Ancestor&); 94 void operator=(const Ancestor&); 95 }; 96 97 #ifdef __cplusplus 98 extern "C" { 99 #endif 100 101 #ifdef __cplusplus 102 } 103 #endif 104 105 #endif /* _ANCESTOR_H */ 106