1168404Spjd/*-
2168404Spjd * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org>
3168404Spjd * All rights reserved.
4168404Spjd *
5168404Spjd * Redistribution and use in source and binary forms, with or without
6168404Spjd * modification, are permitted provided that the following conditions
7168404Spjd * are met:
8168404Spjd * 1. Redistributions of source code must retain the above copyright
9168404Spjd *    notice, this list of conditions and the following disclaimer.
10168404Spjd * 2. Redistributions in binary form must reproduce the above copyright
11168404Spjd *    notice, this list of conditions and the following disclaimer in the
12168404Spjd *    documentation and/or other materials provided with the distribution.
13168404Spjd *
14168404Spjd * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
15168404Spjd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16168404Spjd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17168404Spjd * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
18168404Spjd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19168404Spjd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20168404Spjd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21168404Spjd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22168404Spjd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23168404Spjd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24168404Spjd * SUCH DAMAGE.
25168404Spjd *
26168404Spjd * $FreeBSD$
27168404Spjd */
28168404Spjd
29168404Spjd#ifndef _OPENSOLARIS_SYS_KSTAT_H_
30168404Spjd#define	_OPENSOLARIS_SYS_KSTAT_H_
31168404Spjd
32168404Spjd#include <sys/sysctl.h>
33168404Spjd
34168404Spjd#define	KSTAT_TYPE_NAMED	1
35168404Spjd
36168404Spjd#define	KSTAT_FLAG_VIRTUAL	0x01
37168404Spjd
38168404Spjdtypedef struct kstat {
39168404Spjd	void	*ks_data;
40168404Spjd	u_int	 ks_ndata;
41168404Spjd#ifdef _KERNEL
42168404Spjd	struct sysctl_ctx_list ks_sysctl_ctx;
43168404Spjd	struct sysctl_oid *ks_sysctl_root;
44168404Spjd#endif
45168404Spjd} kstat_t;
46168404Spjd
47168404Spjdtypedef struct kstat_named {
48168404Spjd#define	KSTAT_STRLEN	31
49168404Spjd	char	name[KSTAT_STRLEN];
50168404Spjd#define	KSTAT_DATA_CHAR		0
51168404Spjd#define	KSTAT_DATA_INT32	1
52168404Spjd#define	KSTAT_DATA_UINT32	2
53168404Spjd#define	KSTAT_DATA_INT64	3
54168404Spjd#define	KSTAT_DATA_UINT64	4
55168404Spjd	uchar_t	data_type;
56244155Ssmh#define	KSTAT_DESCLEN		128
57244155Ssmh	char	desc[KSTAT_DESCLEN];
58168404Spjd	union {
59168404Spjd		uint64_t	ui64;
60168404Spjd	} value;
61168404Spjd} kstat_named_t;
62168404Spjd
63222950Sgibbskstat_t *kstat_create(char *module, int instance, char *name, char *cls,
64168404Spjd    uchar_t type, ulong_t ndata, uchar_t flags);
65168404Spjdvoid kstat_install(kstat_t *ksp);
66168404Spjdvoid kstat_delete(kstat_t *ksp);
67168404Spjd
68168404Spjd#endif	/* _OPENSOLARIS_SYS_KSTAT_H_ */
69