143518607SKenneth D. Merry /*- 243518607SKenneth D. Merry * Copyright (c) 2013, 2014 Spectra Logic Corporation 343518607SKenneth D. Merry * All rights reserved. 443518607SKenneth D. Merry * 543518607SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 643518607SKenneth D. Merry * modification, are permitted provided that the following conditions 743518607SKenneth D. Merry * are met: 843518607SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright 943518607SKenneth D. Merry * notice, this list of conditions, and the following disclaimer, 1043518607SKenneth D. Merry * without modification. 1143518607SKenneth D. Merry * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1243518607SKenneth D. Merry * substantially similar to the "NO WARRANTY" disclaimer below 1343518607SKenneth D. Merry * ("Disclaimer") and any redistribution must be conditioned upon 1443518607SKenneth D. Merry * including a substantially similar Disclaimer requirement for further 1543518607SKenneth D. Merry * binary redistribution. 1643518607SKenneth D. Merry * 1743518607SKenneth D. Merry * NO WARRANTY 1843518607SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1943518607SKenneth D. Merry * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2043518607SKenneth D. Merry * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 2143518607SKenneth D. Merry * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2243518607SKenneth D. Merry * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2343518607SKenneth D. Merry * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2443518607SKenneth D. Merry * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2543518607SKenneth D. Merry * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 2643518607SKenneth D. Merry * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 2743518607SKenneth D. Merry * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2843518607SKenneth D. Merry * POSSIBILITY OF SUCH DAMAGES. 2943518607SKenneth D. Merry * 3043518607SKenneth D. Merry * Authors: Ken Merry (Spectra Logic Corporation) 3143518607SKenneth D. Merry */ 3243518607SKenneth D. Merry 3343518607SKenneth D. Merry #ifndef _MTLIB_H 3443518607SKenneth D. Merry #define _MTLIB_H 3543518607SKenneth D. Merry 3643518607SKenneth D. Merry typedef enum { 3743518607SKenneth D. Merry MT_TYPE_NONE, 3843518607SKenneth D. Merry MT_TYPE_STRING, 3943518607SKenneth D. Merry MT_TYPE_INT, 4043518607SKenneth D. Merry MT_TYPE_UINT, 4143518607SKenneth D. Merry MT_TYPE_NODE 4243518607SKenneth D. Merry } mt_variable_type; 4343518607SKenneth D. Merry 4443518607SKenneth D. Merry struct mt_status_nv { 4543518607SKenneth D. Merry char *name; 4643518607SKenneth D. Merry char *value; 4743518607SKenneth D. Merry STAILQ_ENTRY(mt_status_nv) links; 4843518607SKenneth D. Merry }; 4943518607SKenneth D. Merry 5043518607SKenneth D. Merry struct mt_status_entry { 5143518607SKenneth D. Merry char *entry_name; 5243518607SKenneth D. Merry char *value; 5343518607SKenneth D. Merry uint64_t value_unsigned; 5443518607SKenneth D. Merry int64_t value_signed; 5543518607SKenneth D. Merry char *fmt; 5643518607SKenneth D. Merry char *desc; 5743518607SKenneth D. Merry size_t size; 5843518607SKenneth D. Merry mt_variable_type var_type; 5943518607SKenneth D. Merry struct mt_status_entry *parent; 6043518607SKenneth D. Merry STAILQ_HEAD(, mt_status_nv) nv_list; 6143518607SKenneth D. Merry STAILQ_HEAD(, mt_status_entry) child_entries; 6243518607SKenneth D. Merry STAILQ_ENTRY(mt_status_entry) links; 6343518607SKenneth D. Merry }; 6443518607SKenneth D. Merry 6543518607SKenneth D. Merry struct mt_status_data { 6643518607SKenneth D. Merry int level; 6743518607SKenneth D. Merry struct sbuf *cur_sb[32]; 6843518607SKenneth D. Merry struct mt_status_entry *cur_entry[32]; 6943518607SKenneth D. Merry int error; 7043518607SKenneth D. Merry char error_str[128]; 7143518607SKenneth D. Merry STAILQ_HEAD(, mt_status_entry) entries; 7243518607SKenneth D. Merry }; 7343518607SKenneth D. Merry 7443518607SKenneth D. Merry typedef enum { 7543518607SKenneth D. Merry MT_PF_NONE = 0x00, 7643518607SKenneth D. Merry MT_PF_VERBOSE = 0x01, 7743518607SKenneth D. Merry MT_PF_FULL_PATH = 0x02, 7843518607SKenneth D. Merry MT_PF_INCLUDE_ROOT = 0x04 7943518607SKenneth D. Merry } mt_print_flags; 8043518607SKenneth D. Merry 8143518607SKenneth D. Merry struct mt_print_params { 8243518607SKenneth D. Merry mt_print_flags flags; 8343518607SKenneth D. Merry char root_name[64]; 8443518607SKenneth D. Merry }; 8543518607SKenneth D. Merry 8643518607SKenneth D. Merry __BEGIN_DECLS 8743518607SKenneth D. Merry void mt_start_element(void *user_data, const char *name, const char **attr); 8843518607SKenneth D. Merry void mt_end_element(void *user_data, const char *name); 8943518607SKenneth D. Merry void mt_char_handler(void *user_data, const XML_Char *str, int len); 9043518607SKenneth D. Merry void mt_status_tree_sbuf(struct sbuf *sb, struct mt_status_entry *entry, 9143518607SKenneth D. Merry int indent, void (*sbuf_func)(struct sbuf *sb, 9243518607SKenneth D. Merry struct mt_status_entry *entry, void *arg), void *arg); 9343518607SKenneth D. Merry void mt_status_tree_print(struct mt_status_entry *entry, int indent, 9443518607SKenneth D. Merry void (*print_func)(struct mt_status_entry *entry, 9543518607SKenneth D. Merry void *arg), void *arg); 9643518607SKenneth D. Merry struct mt_status_entry *mt_entry_find(struct mt_status_entry *entry, 9743518607SKenneth D. Merry char *name); 9843518607SKenneth D. Merry struct mt_status_entry *mt_status_entry_find(struct mt_status_data *status_data, 9943518607SKenneth D. Merry char *name); 10043518607SKenneth D. Merry void mt_status_entry_free(struct mt_status_entry *entry); 10143518607SKenneth D. Merry void mt_status_free(struct mt_status_data *status_data); 10243518607SKenneth D. Merry void mt_entry_sbuf(struct sbuf *sb, struct mt_status_entry *entry, char *fmt); 10343518607SKenneth D. Merry void mt_param_parent_print(struct mt_status_entry *entry, 10443518607SKenneth D. Merry struct mt_print_params *print_params); 10543518607SKenneth D. Merry void mt_param_parent_sbuf(struct sbuf *sb, struct mt_status_entry *entry, 10643518607SKenneth D. Merry struct mt_print_params *print_params); 10743518607SKenneth D. Merry void mt_param_entry_sbuf(struct sbuf *sb, struct mt_status_entry *entry, 10843518607SKenneth D. Merry void *arg); 10943518607SKenneth D. Merry void mt_param_entry_print(struct mt_status_entry *entry, void *arg); 11043518607SKenneth D. Merry int mt_protect_print(struct mt_status_data *status_data, int verbose); 11143518607SKenneth D. Merry int mt_param_list(struct mt_status_data *status_data, char *param_name, 11243518607SKenneth D. Merry int quiet); 11343518607SKenneth D. Merry const char *mt_density_name(int density_num); 11443518607SKenneth D. Merry int mt_density_bp(int density_num, int bpi); 11543518607SKenneth D. Merry int mt_density_num(const char *density_name); 11643518607SKenneth D. Merry int mt_get_xml_str(int mtfd, unsigned long cmd, char **xml_str); 11743518607SKenneth D. Merry int mt_get_status(char *xml_str, struct mt_status_data *status_data); 11843518607SKenneth D. Merry __END_DECLS 11943518607SKenneth D. Merry 12043518607SKenneth D. Merry #endif /* _MTLIB_H */ 121