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#pragma ident	"%Z%%M%	%I%	%E% SMI"
28
29#include "libfrureg.h"
30
31#include <stdio.h>
32#include <stdlib.h>
33#include <string.h>
34
35#define	FRU_REVNO 1
36#include "frudefs.c"
37
38const int max_data_element_count = sizeof (Element_Defs) /
39				sizeof (fru_regdef_t);
40
41const fru_regdef_t *
42fru_reg_lookup_def_by_name(const char *elem_name)
43{
44	fru_regdef_t *ret_def = NULL;
45	int i = 0;
46	for (i = 0; i < max_data_element_count; i++) {
47		ret_def = &(Element_Defs[i]);
48		if (strcmp(ret_def->name, elem_name) == 0) {
49			return (ret_def);
50		}
51	}
52	return (NULL);
53}
54
55const fru_regdef_t *
56fru_reg_lookup_def_by_tag(fru_tag_t tag)
57{
58	fru_regdef_t *ret_def = NULL;
59	int i = 0;
60	for (i = 0; i < max_data_element_count; i++) {
61		ret_def = &(Element_Defs[i]);
62		if (ret_def->tagType == get_tag_type(&tag) &&
63			ret_def->tagDense == get_tag_dense(&tag) &&
64			ret_def->payloadLen == get_payload_length(&tag)) {
65			return (ret_def);
66		}
67	}
68	return (NULL);
69}
70
71char **
72fru_reg_list_entries(unsigned int *num)
73{
74	char **rc = NULL;
75	int number = 0;
76	fru_regdef_t *def = NULL;
77	int i = 0;
78
79	for (i = 0; i < max_data_element_count; i++) {
80		def = &(Element_Defs[i]);
81		rc = realloc(rc, sizeof (char *) * (number + 1));
82		rc[number] = strdup(def->name);
83		number++;
84	}
85
86	*num = number;
87	return (rc);
88}
89