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 32 /** 33 * @file 34 * Declarations for the common functions used by ocs_mgmt. 35 */ 36 37 #if !defined(__OCS_MGMT_H__) 38 #define __OCS_MGMT_H__ 39 40 #include "ocs_utils.h" 41 42 #define OCS_MGMT_MAX_NAME 128 43 #define OCS_MGMT_MAX_VALUE 128 44 45 #define MGMT_MODE_RD 4 46 #define MGMT_MODE_WR 2 47 #define MGMT_MODE_EX 1 48 #define MGMT_MODE_RW (MGMT_MODE_RD | MGMT_MODE_WR) 49 50 #define FW_WRITE_BUFSIZE 64*1024 51 52 typedef struct ocs_mgmt_fw_write_result { 53 ocs_sem_t semaphore; 54 int32_t status; 55 uint32_t actual_xfer; 56 uint32_t change_status; 57 } ocs_mgmt_fw_write_result_t; 58 59 /* 60 * This structure is used in constructing a table of internal handler functions. 61 */ 62 typedef void (*ocs_mgmt_get_func)(ocs_t *, char *, ocs_textbuf_t*); 63 typedef int (*ocs_mgmt_set_func)(ocs_t *, char *, char *); 64 typedef int (*ocs_mgmt_action_func)(ocs_t *, char *, void *, uint32_t, void *, uint32_t); 65 typedef struct ocs_mgmt_table_entry_s { 66 char *name; 67 ocs_mgmt_get_func get_handler; 68 ocs_mgmt_set_func set_handler; 69 ocs_mgmt_action_func action_handler; 70 } ocs_mgmt_table_entry_t; 71 72 /* 73 * This structure is used when defining the top level management handlers for 74 * different types of objects (sport, node, domain, etc) 75 */ 76 typedef void (*ocs_mgmt_get_list_handler)(ocs_textbuf_t *textbuf, void* object); 77 typedef void (*ocs_mgmt_get_all_handler)(ocs_textbuf_t *textbuf, void* object); 78 typedef int (*ocs_mgmt_get_handler)(ocs_textbuf_t *, char *parent, char *name, void *object); 79 typedef int (*ocs_mgmt_set_handler)(char *parent, char *name, char *value, void *object); 80 typedef int (*ocs_mgmt_exec_handler)(char *parent, char *action, void *arg_in, uint32_t arg_in_length, 81 void *arg_out, uint32_t arg_out_length, void *object); 82 83 typedef struct ocs_mgmt_functions_s { 84 ocs_mgmt_get_list_handler get_list_handler; 85 ocs_mgmt_get_handler get_handler; 86 ocs_mgmt_get_all_handler get_all_handler; 87 ocs_mgmt_set_handler set_handler; 88 ocs_mgmt_exec_handler exec_handler; 89 } ocs_mgmt_functions_t; 90 91 /* Helper functions */ 92 extern void ocs_mgmt_start_section(ocs_textbuf_t *textbuf, const char *name, int index); 93 extern void ocs_mgmt_start_unnumbered_section(ocs_textbuf_t *textbuf, const char *name); 94 extern void ocs_mgmt_end_section(ocs_textbuf_t *textbuf, const char *name, int index); 95 extern void ocs_mgmt_end_unnumbered_section(ocs_textbuf_t *textbuf, const char *name); 96 extern void ocs_mgmt_emit_property_name(ocs_textbuf_t *textbuf, int access, const char *name); 97 extern void ocs_mgmt_emit_string(ocs_textbuf_t *textbuf, int access, const char *name, const char *value); 98 __attribute__((format(printf,4,5))) 99 extern void ocs_mgmt_emit_int(ocs_textbuf_t *textbuf, int access, const char *name, const char *fmt, ...); 100 extern void ocs_mgmt_emit_boolean(ocs_textbuf_t *textbuf, int access, const char *name, const int value); 101 extern int parse_wwn(char *wwn_in, uint64_t *wwn_out); 102 103 /* Top level management functions - called by the ioctl */ 104 extern void ocs_mgmt_get_list(ocs_t *ocs, ocs_textbuf_t *textbuf); 105 extern void ocs_mgmt_get_all(ocs_t *ocs, ocs_textbuf_t *textbuf); 106 extern int ocs_mgmt_get(ocs_t *ocs, char *name, ocs_textbuf_t *textbuf); 107 extern int ocs_mgmt_set(ocs_t *ocs, char *name, char *value); 108 extern int ocs_mgmt_exec(ocs_t *ocs, char *action, void *arg_in, uint32_t arg_in_length, 109 void *arg_out, uint32_t arg_out_length); 110 111 extern int set_req_wwnn(ocs_t*, char*, char*); 112 extern int set_req_wwpn(ocs_t*, char*, char*); 113 extern int set_configured_speed(ocs_t*, char*, char*); 114 extern int set_configured_topology(ocs_t*, char*, char*); 115 116 #endif 117