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: stable/11/sys/cddl/compat/opensolaris/sys/kstat.h 321529 2017-07-26 16:14:05Z mav $
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
38286574Smav#define	KSTAT_READ	0
39286574Smav#define	KSTAT_WRITE	1
40286574Smav
41168404Spjdtypedef struct kstat {
42168404Spjd	void	*ks_data;
43168404Spjd	u_int	 ks_ndata;
44168404Spjd#ifdef _KERNEL
45168404Spjd	struct sysctl_ctx_list ks_sysctl_ctx;
46168404Spjd	struct sysctl_oid *ks_sysctl_root;
47286578Smav#endif
48286574Smav	int		(*ks_update)(struct kstat *, int); /* dynamic update */
49286574Smav	void		*ks_private;	/* arbitrary provider-private data */
50168404Spjd} kstat_t;
51168404Spjd
52168404Spjdtypedef struct kstat_named {
53168404Spjd#define	KSTAT_STRLEN	31
54168404Spjd	char	name[KSTAT_STRLEN];
55168404Spjd#define	KSTAT_DATA_CHAR		0
56168404Spjd#define	KSTAT_DATA_INT32	1
57168404Spjd#define	KSTAT_DATA_UINT32	2
58168404Spjd#define	KSTAT_DATA_INT64	3
59168404Spjd#define	KSTAT_DATA_UINT64	4
60168404Spjd	uchar_t	data_type;
61244155Ssmh#define	KSTAT_DESCLEN		128
62244155Ssmh	char	desc[KSTAT_DESCLEN];
63168404Spjd	union {
64168404Spjd		uint64_t	ui64;
65168404Spjd	} value;
66168404Spjd} kstat_named_t;
67168404Spjd
68222950Sgibbskstat_t *kstat_create(char *module, int instance, char *name, char *cls,
69168404Spjd    uchar_t type, ulong_t ndata, uchar_t flags);
70168404Spjdvoid kstat_install(kstat_t *ksp);
71168404Spjdvoid kstat_delete(kstat_t *ksp);
72321529Smavvoid kstat_set_string(char *, const char *);
73321529Smavvoid kstat_named_init(kstat_named_t *, const char *, uchar_t);
74168404Spjd
75168404Spjd#endif	/* _OPENSOLARIS_SYS_KSTAT_H_ */
76