1 /*- 2 * Copyright (c) 2017 Broadcom. All rights reserved. 3 * The term "Broadcom" refers to Broadcom Limited and/or its subsidiaries. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation 13 * and/or other materials provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 * 31 * $FreeBSD$ 32 */ 33 34 /** 35 * @file 36 * Declarations for the common functions used by ocs_mgmt. 37 */ 38 39 #if !defined(__OCS_MGMT_H__) 40 #define __OCS_MGMT_H__ 41 42 #include "ocs_utils.h" 43 44 #define OCS_MGMT_MAX_NAME 128 45 #define OCS_MGMT_MAX_VALUE 128 46 47 #define MGMT_MODE_RD 4 48 #define MGMT_MODE_WR 2 49 #define MGMT_MODE_EX 1 50 #define MGMT_MODE_RW (MGMT_MODE_RD | MGMT_MODE_WR) 51 52 #define FW_WRITE_BUFSIZE 64*1024 53 54 typedef struct ocs_mgmt_fw_write_result { 55 ocs_sem_t semaphore; 56 int32_t status; 57 uint32_t actual_xfer; 58 uint32_t change_status; 59 } ocs_mgmt_fw_write_result_t; 60 61 /* 62 * This structure is used in constructing a table of internal handler functions. 63 */ 64 typedef void (*ocs_mgmt_get_func)(ocs_t *, char *, ocs_textbuf_t*); 65 typedef int (*ocs_mgmt_set_func)(ocs_t *, char *, char *); 66 typedef int (*ocs_mgmt_action_func)(ocs_t *, char *, void *, uint32_t, void *, uint32_t); 67 typedef struct ocs_mgmt_table_entry_s { 68 char *name; 69 ocs_mgmt_get_func get_handler; 70 ocs_mgmt_set_func set_handler; 71 ocs_mgmt_action_func action_handler; 72 } ocs_mgmt_table_entry_t; 73 74 /* 75 * This structure is used when defining the top level management handlers for 76 * different types of objects (sport, node, domain, etc) 77 */ 78 typedef void (*ocs_mgmt_get_list_handler)(ocs_textbuf_t *textbuf, void* object); 79 typedef void (*ocs_mgmt_get_all_handler)(ocs_textbuf_t *textbuf, void* object); 80 typedef int (*ocs_mgmt_get_handler)(ocs_textbuf_t *, char *parent, char *name, void *object); 81 typedef int (*ocs_mgmt_set_handler)(char *parent, char *name, char *value, void *object); 82 typedef int (*ocs_mgmt_exec_handler)(char *parent, char *action, void *arg_in, uint32_t arg_in_length, 83 void *arg_out, uint32_t arg_out_length, void *object); 84 85 typedef struct ocs_mgmt_functions_s { 86 ocs_mgmt_get_list_handler get_list_handler; 87 ocs_mgmt_get_handler get_handler; 88 ocs_mgmt_get_all_handler get_all_handler; 89 ocs_mgmt_set_handler set_handler; 90 ocs_mgmt_exec_handler exec_handler; 91 } ocs_mgmt_functions_t; 92 93 /* Helper functions */ 94 extern void ocs_mgmt_start_section(ocs_textbuf_t *textbuf, const char *name, int index); 95 extern void ocs_mgmt_start_unnumbered_section(ocs_textbuf_t *textbuf, const char *name); 96 extern void ocs_mgmt_end_section(ocs_textbuf_t *textbuf, const char *name, int index); 97 extern void ocs_mgmt_end_unnumbered_section(ocs_textbuf_t *textbuf, const char *name); 98 extern void ocs_mgmt_emit_property_name(ocs_textbuf_t *textbuf, int access, const char *name); 99 extern void ocs_mgmt_emit_string(ocs_textbuf_t *textbuf, int access, const char *name, const char *value); 100 __attribute__((format(printf,4,5))) 101 extern void ocs_mgmt_emit_int(ocs_textbuf_t *textbuf, int access, const char *name, const char *fmt, ...); 102 extern void ocs_mgmt_emit_boolean(ocs_textbuf_t *textbuf, int access, const char *name, const int value); 103 extern int parse_wwn(char *wwn_in, uint64_t *wwn_out); 104 105 /* Top level management functions - called by the ioctl */ 106 extern void ocs_mgmt_get_list(ocs_t *ocs, ocs_textbuf_t *textbuf); 107 extern void ocs_mgmt_get_all(ocs_t *ocs, ocs_textbuf_t *textbuf); 108 extern int ocs_mgmt_get(ocs_t *ocs, char *name, ocs_textbuf_t *textbuf); 109 extern int ocs_mgmt_set(ocs_t *ocs, char *name, char *value); 110 extern int ocs_mgmt_exec(ocs_t *ocs, char *action, void *arg_in, uint32_t arg_in_length, 111 void *arg_out, uint32_t arg_out_length); 112 113 extern int set_req_wwnn(ocs_t*, char*, char*); 114 extern int set_req_wwpn(ocs_t*, char*, char*); 115 extern int set_configured_speed(ocs_t*, char*, char*); 116 extern int set_configured_topology(ocs_t*, char*, char*); 117 118 #endif 119