1*43518607SKenneth D. Merry /*- 2*43518607SKenneth D. Merry * Copyright (c) 2013, 2014 Spectra Logic Corporation 3*43518607SKenneth D. Merry * All rights reserved. 4*43518607SKenneth D. Merry * 5*43518607SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 6*43518607SKenneth D. Merry * modification, are permitted provided that the following conditions 7*43518607SKenneth D. Merry * are met: 8*43518607SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright 9*43518607SKenneth D. Merry * notice, this list of conditions, and the following disclaimer, 10*43518607SKenneth D. Merry * without modification. 11*43518607SKenneth D. Merry * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12*43518607SKenneth D. Merry * substantially similar to the "NO WARRANTY" disclaimer below 13*43518607SKenneth D. Merry * ("Disclaimer") and any redistribution must be conditioned upon 14*43518607SKenneth D. Merry * including a substantially similar Disclaimer requirement for further 15*43518607SKenneth D. Merry * binary redistribution. 16*43518607SKenneth D. Merry * 17*43518607SKenneth D. Merry * NO WARRANTY 18*43518607SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19*43518607SKenneth D. Merry * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20*43518607SKenneth D. Merry * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 21*43518607SKenneth D. Merry * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22*43518607SKenneth D. Merry * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23*43518607SKenneth D. Merry * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24*43518607SKenneth D. Merry * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25*43518607SKenneth D. Merry * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26*43518607SKenneth D. Merry * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 27*43518607SKenneth D. Merry * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28*43518607SKenneth D. Merry * POSSIBILITY OF SUCH DAMAGES. 29*43518607SKenneth D. Merry * 30*43518607SKenneth D. Merry * Authors: Ken Merry (Spectra Logic Corporation) 31*43518607SKenneth D. Merry */ 32*43518607SKenneth D. Merry 33*43518607SKenneth D. Merry #ifndef _MTLIB_H 34*43518607SKenneth D. Merry #define _MTLIB_H 35*43518607SKenneth D. Merry 36*43518607SKenneth D. Merry typedef enum { 37*43518607SKenneth D. Merry MT_TYPE_NONE, 38*43518607SKenneth D. Merry MT_TYPE_STRING, 39*43518607SKenneth D. Merry MT_TYPE_INT, 40*43518607SKenneth D. Merry MT_TYPE_UINT, 41*43518607SKenneth D. Merry MT_TYPE_NODE 42*43518607SKenneth D. Merry } mt_variable_type; 43*43518607SKenneth D. Merry 44*43518607SKenneth D. Merry struct mt_status_nv { 45*43518607SKenneth D. Merry char *name; 46*43518607SKenneth D. Merry char *value; 47*43518607SKenneth D. Merry STAILQ_ENTRY(mt_status_nv) links; 48*43518607SKenneth D. Merry }; 49*43518607SKenneth D. Merry 50*43518607SKenneth D. Merry struct mt_status_entry { 51*43518607SKenneth D. Merry char *entry_name; 52*43518607SKenneth D. Merry char *value; 53*43518607SKenneth D. Merry uint64_t value_unsigned; 54*43518607SKenneth D. Merry int64_t value_signed; 55*43518607SKenneth D. Merry char *fmt; 56*43518607SKenneth D. Merry char *desc; 57*43518607SKenneth D. Merry size_t size; 58*43518607SKenneth D. Merry mt_variable_type var_type; 59*43518607SKenneth D. Merry struct mt_status_entry *parent; 60*43518607SKenneth D. Merry STAILQ_HEAD(, mt_status_nv) nv_list; 61*43518607SKenneth D. Merry STAILQ_HEAD(, mt_status_entry) child_entries; 62*43518607SKenneth D. Merry STAILQ_ENTRY(mt_status_entry) links; 63*43518607SKenneth D. Merry }; 64*43518607SKenneth D. Merry 65*43518607SKenneth D. Merry struct mt_status_data { 66*43518607SKenneth D. Merry int level; 67*43518607SKenneth D. Merry struct sbuf *cur_sb[32]; 68*43518607SKenneth D. Merry struct mt_status_entry *cur_entry[32]; 69*43518607SKenneth D. Merry int error; 70*43518607SKenneth D. Merry char error_str[128]; 71*43518607SKenneth D. Merry STAILQ_HEAD(, mt_status_entry) entries; 72*43518607SKenneth D. Merry }; 73*43518607SKenneth D. Merry 74*43518607SKenneth D. Merry typedef enum { 75*43518607SKenneth D. Merry MT_PF_NONE = 0x00, 76*43518607SKenneth D. Merry MT_PF_VERBOSE = 0x01, 77*43518607SKenneth D. Merry MT_PF_FULL_PATH = 0x02, 78*43518607SKenneth D. Merry MT_PF_INCLUDE_ROOT = 0x04 79*43518607SKenneth D. Merry } mt_print_flags; 80*43518607SKenneth D. Merry 81*43518607SKenneth D. Merry struct mt_print_params { 82*43518607SKenneth D. Merry mt_print_flags flags; 83*43518607SKenneth D. Merry char root_name[64]; 84*43518607SKenneth D. Merry }; 85*43518607SKenneth D. Merry 86*43518607SKenneth D. Merry __BEGIN_DECLS 87*43518607SKenneth D. Merry void mt_start_element(void *user_data, const char *name, const char **attr); 88*43518607SKenneth D. Merry void mt_end_element(void *user_data, const char *name); 89*43518607SKenneth D. Merry void mt_char_handler(void *user_data, const XML_Char *str, int len); 90*43518607SKenneth D. Merry void mt_status_tree_sbuf(struct sbuf *sb, struct mt_status_entry *entry, 91*43518607SKenneth D. Merry int indent, void (*sbuf_func)(struct sbuf *sb, 92*43518607SKenneth D. Merry struct mt_status_entry *entry, void *arg), void *arg); 93*43518607SKenneth D. Merry void mt_status_tree_print(struct mt_status_entry *entry, int indent, 94*43518607SKenneth D. Merry void (*print_func)(struct mt_status_entry *entry, 95*43518607SKenneth D. Merry void *arg), void *arg); 96*43518607SKenneth D. Merry struct mt_status_entry *mt_entry_find(struct mt_status_entry *entry, 97*43518607SKenneth D. Merry char *name); 98*43518607SKenneth D. Merry struct mt_status_entry *mt_status_entry_find(struct mt_status_data *status_data, 99*43518607SKenneth D. Merry char *name); 100*43518607SKenneth D. Merry void mt_status_entry_free(struct mt_status_entry *entry); 101*43518607SKenneth D. Merry void mt_status_free(struct mt_status_data *status_data); 102*43518607SKenneth D. Merry void mt_entry_sbuf(struct sbuf *sb, struct mt_status_entry *entry, char *fmt); 103*43518607SKenneth D. Merry void mt_param_parent_print(struct mt_status_entry *entry, 104*43518607SKenneth D. Merry struct mt_print_params *print_params); 105*43518607SKenneth D. Merry void mt_param_parent_sbuf(struct sbuf *sb, struct mt_status_entry *entry, 106*43518607SKenneth D. Merry struct mt_print_params *print_params); 107*43518607SKenneth D. Merry void mt_param_entry_sbuf(struct sbuf *sb, struct mt_status_entry *entry, 108*43518607SKenneth D. Merry void *arg); 109*43518607SKenneth D. Merry void mt_param_entry_print(struct mt_status_entry *entry, void *arg); 110*43518607SKenneth D. Merry int mt_protect_print(struct mt_status_data *status_data, int verbose); 111*43518607SKenneth D. Merry int mt_param_list(struct mt_status_data *status_data, char *param_name, 112*43518607SKenneth D. Merry int quiet); 113*43518607SKenneth D. Merry const char *mt_density_name(int density_num); 114*43518607SKenneth D. Merry int mt_density_bp(int density_num, int bpi); 115*43518607SKenneth D. Merry int mt_density_num(const char *density_name); 116*43518607SKenneth D. Merry int mt_get_xml_str(int mtfd, unsigned long cmd, char **xml_str); 117*43518607SKenneth D. Merry int mt_get_status(char *xml_str, struct mt_status_data *status_data); 118*43518607SKenneth D. Merry __END_DECLS 119*43518607SKenneth D. Merry 120*43518607SKenneth D. Merry #endif /* _MTLIB_H */ 121