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