devstat.h revision 39498
139211Sgibbs/*
239211Sgibbs * Copyright (c) 1997, 1998 Kenneth D. Merry.
339211Sgibbs * All rights reserved.
439211Sgibbs *
539211Sgibbs * Redistribution and use in source and binary forms, with or without
639211Sgibbs * modification, are permitted provided that the following conditions
739211Sgibbs * are met:
839211Sgibbs * 1. Redistributions of source code must retain the above copyright
939211Sgibbs *    notice, this list of conditions and the following disclaimer.
1039211Sgibbs * 2. Redistributions in binary form must reproduce the above copyright
1139211Sgibbs *    notice, this list of conditions and the following disclaimer in the
1239211Sgibbs *    documentation and/or other materials provided with the distribution.
1339211Sgibbs * 3. The name of the author may not be used to endorse or promote products
1439211Sgibbs *    derived from this software without specific prior written permission.
1539211Sgibbs *
1639211Sgibbs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1739211Sgibbs * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1839211Sgibbs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1939211Sgibbs * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2039211Sgibbs * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2139211Sgibbs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2239211Sgibbs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2339211Sgibbs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2439211Sgibbs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2539211Sgibbs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2639211Sgibbs * SUCH DAMAGE.
2739211Sgibbs *
2839498Sken *	$Id: devstat.h,v 1.1 1998/09/15 06:23:21 gibbs Exp $
2939211Sgibbs */
3039211Sgibbs
3139211Sgibbs#ifndef _DEVSTAT_H
3239211Sgibbs#define _DEVSTAT_H
3339211Sgibbs#include <sys/cdefs.h>
3439211Sgibbs#include <sys/devicestat.h>
3539211Sgibbs
3639211Sgibbs#define DEVSTAT_ERRBUF_SIZE  2048 /* size of the devstat library error string */
3739211Sgibbs
3839211Sgibbsextern char devstat_errbuf[];
3939211Sgibbs
4039211Sgibbstypedef enum {
4139211Sgibbs	DEVSTAT_MATCH_NONE	= 0x00,
4239211Sgibbs	DEVSTAT_MATCH_TYPE	= 0x01,
4339211Sgibbs	DEVSTAT_MATCH_IF	= 0x02,
4439211Sgibbs	DEVSTAT_MATCH_PASS	= 0x04
4539211Sgibbs} devstat_match_flags;
4639211Sgibbs
4739211Sgibbsstruct devstat_match {
4839211Sgibbs	devstat_match_flags	match_fields;
4939211Sgibbs	devstat_type_flags	device_type;
5039211Sgibbs	int			num_match_categories;
5139211Sgibbs};
5239211Sgibbs
5339211Sgibbsstruct devstat_match_table {
5439211Sgibbs	char 			*match_str;
5539211Sgibbs	devstat_type_flags	type;
5639211Sgibbs	devstat_match_flags	match_field;
5739211Sgibbs};
5839211Sgibbs
5939211Sgibbsstruct device_selection {
6039211Sgibbs	u_int32_t	device_number;
6139211Sgibbs	char		device_name[DEVSTAT_NAME_LEN];
6239211Sgibbs	int		unit_number;
6339211Sgibbs	int		selected;
6439211Sgibbs	u_int64_t	bytes;
6539211Sgibbs	int		position;
6639211Sgibbs};
6739211Sgibbs
6839211Sgibbsstruct devinfo {
6939211Sgibbs	struct devstat	*devices;
7039211Sgibbs	u_int8_t	*mem_ptr;
7139498Sken	long		generation;
7239211Sgibbs	int		numdevs;
7339211Sgibbs};
7439211Sgibbs
7539211Sgibbsstruct statinfo {
7639211Sgibbs	long		cp_time[CPUSTATES];
7739211Sgibbs	long		tk_nin;
7839211Sgibbs	long		tk_nout;
7939211Sgibbs	struct devinfo	*dinfo;
8039211Sgibbs	struct timeval	busy_time;
8139211Sgibbs};
8239211Sgibbs
8339211Sgibbstypedef enum {
8439211Sgibbs	DS_SELECT_ADD,
8539211Sgibbs	DS_SELECT_ONLY,
8639211Sgibbs	DS_SELECT_REMOVE,
8739211Sgibbs	DS_SELECT_ADDONLY
8839211Sgibbs} devstat_select_mode;
8939211Sgibbs
9039211Sgibbs__BEGIN_DECLS
9139211Sgibbsint getnumdevs(void);
9239498Skenlong getgeneration(void);
9339211Sgibbsint getversion(void);
9439211Sgibbsint checkversion(void);
9539211Sgibbsint getdevs(struct statinfo *stats);
9639211Sgibbsint selectdevs(struct device_selection **dev_select, int *num_selected,
9739498Sken	       int *num_selections, long *select_generation,
9839498Sken	       long current_generation, struct devstat *devices, int numdevs,
9939211Sgibbs	       struct devstat_match *matches, int num_matches,
10039211Sgibbs	       char **dev_selections, int num_dev_selections,
10139211Sgibbs	       devstat_select_mode select_mode, int maxshowdevs,
10239211Sgibbs	       int perf_select);
10339211Sgibbsint buildmatch(char *match_str, struct devstat_match **matches,
10439211Sgibbs	       int *num_matches);
10539211Sgibbsint compute_stats(struct devstat *current, struct devstat *previous,
10639211Sgibbs		  long double etime, u_int64_t *total_bytes,
10739211Sgibbs		  u_int64_t *total_transfers, u_int64_t *total_blocks,
10839211Sgibbs		  long double *kb_per_transfer,
10939211Sgibbs		  long double *transfers_per_second, long double *mb_per_second,
11039211Sgibbs		  long double *blocks_per_second,
11139211Sgibbs		  long double *ms_per_transaction);
11239211Sgibbslong double compute_etime(struct timeval cur_time, struct timeval prev_time);
11339211Sgibbs__END_DECLS
11439211Sgibbs
11539211Sgibbs#endif /* _DEVSTAT_H  */
116