sgfrutree.h revision 03831d35f7499c87d51205817c93e9a8d42c4bae
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2000 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SGFRUTREE_H
#define _SGFRUTREE_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <sys/sgfru.h>
#define ROOTPARENT 0 /* well-known node value */
#define MAX_NODE_CHILDREN 16 /* hint */
#define MAX_NODE_NAME 16 /* max name size */
/*
* PICL classes used by serengeti sgfrutree
*/
#define TEMP_CLASS 0x0 /* currently unused */
#define FRU_CLASS 0x1 /* fru class */
#define LOCATION_CLASS 0x2 /* location class */
#define PSEUDO_FRU_CLASS 0x3 /* fru class with no seeprom */
typedef struct {
fru_hdl_t handle; /* (container) handle */
char nodename[MAX_NODE_NAME]; /* picl nodename, thing name */
int16_t has_children; /* hint if node has children */
uint16_t class; /* one of the picl classes */
union class_info {
struct location_info {
int16_t slot; /* location: valid slot or -1 */
char label[MAX_NODE_NAME]; /* label property, place name */
} linfo;
} cinfo;
} node_t;
#define location_slot cinfo.linfo.slot
#define location_label cinfo.linfo.label
typedef frup_info_t child_info_t;
typedef frup_info_t handles_t;
typedef frup_info_t node_info_t;
/*
* PICL FRU Hierarchy
*
* + frutree
* |
* +-- safari-node
* |
* +-- picl fru node, name = <name> (picl class = fru)
* |
* +-- picl location node, name = <name> (picl class = location)
* | o optional property slot = <instance>
* |
* +-- picl location node, name = <name> (picl class = location)
* | | o optional property slot = <instance>
* | |
* | +-- picl fru node, name = <name> (picl class = fru)
* |
* +-- picl tree sibling +-- picl tree child
*
*
* Request: child_info_t, with parent fru handle and max count
* Receive: child_info_t, with child_info_t array and actual count
*/
#define SGFRU_GETCHILDLIST 0x000f
/*
* Request: handles_t, with fru handle, max count, and preallocated buffer
* Receive: handles_t, with handle array and actual count
*/
#define SGFRU_GETCHILDHANDLES 0x0010
/*
* Request: node_info_t, with fru handle
* Receive: node_info_t, with node_t info for the node
*/
#define SGFRU_GETNODEINFO 0x0020
#ifdef DEBUG
/*
* DESCRIPTION
* fru_get_children() fills an array of structures representing the
* children of a node.
*
* ARGUMENTS
*
* RETURN
* int
* On success, the number of node_t structures written is returned;
* on error, -1 is returned and "errno" is set appropriately.
*
* ERRORS
* ENOMEM
* The parent FRU has more than "max_children" children.
*/
int fru_get_children(fru_hdl_t parent, node_t *children, int max_children);
/*
* DESCRIPTION
* fru_get_handles() fills an array of structures representing the
* children of a node that have FRUs. Use 0 for the top root node.
*
* ARGUMENTS
*
* RETURN
* int
* On success, the number of fru_hdl_t structures written is returned;
* on error, -1 is returned and "errno" is set appropriately.
*
* ERRORS
* ENOMEM
* The parent FRU has more than "max_handles" children.
*/
int fru_get_handles(fru_hdl_t parent, fru_hdl_t *children, int max_handles);
/*
* DESCRIPTION
* fru_get_node_info() gets the node_t info for a handle.
*
* ARGUMENTS
*
* RETURN
* int
* On success, 0 is returned as well as the node_info;
* on error, -1 is returned and "errno" is set appropriately.
*
* ERRORS
*/
int fru_get_node_info(fru_hdl_t node_hdl, node_t *node);
#endif /* DEBUG */
#ifdef __cplusplus
}
#endif
#endif /* _SGFRUTREE_H */