/*
* 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 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _FPC_IMPL_H
#define _FPC_IMPL_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/* Hide what's behind the platform-specific handle from the common files. */
typedef struct __fire_perfreg_handle_t *fire_perfreg_handle_t;
#define IS_READ B_FALSE
#define IS_WRITE B_TRUE
typedef struct {
char *name;
kmutex_t mutex;
void *plat_data_p;
} node_data_t;
/* Functions exported by platform specific file. */
extern int fpc_platform_check();
extern int fpc_platform_module_init(dev_info_t *dip);
extern int fpc_platform_node_init(dev_info_t *dip, int *avail);
extern void fpc_platform_node_fini(void *arg);
extern void fpc_platform_module_fini(dev_info_t *dip);
extern fire_perfreg_handle_t fpc_get_perfreg_handle(int devnum);
extern int fpc_free_counter_handle(fire_perfreg_handle_t);
extern int fpc_event_io(fire_perfreg_handle_t handle, fire_perfcnt_t group,
uint64_t *event, boolean_t is_write);
extern int fpc_counter_io(fire_perfreg_handle_t handle, fire_perfcnt_t group,
int counter_index, uint64_t *value, boolean_t is_write);
/* Functions exported by common file. */
extern void fpc_common_node_setup(dev_info_t *dip, int *index_p);
extern char *fpc_get_dev_name_by_number(int index);
extern void *fpc_get_platform_data_by_number(int index);
extern int fpc_set_platform_data_by_number(int index, void *data);
#ifdef __cplusplus
}
#endif
#endif /* _FPC_IMPL_H */