1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 #ifndef _MP_UTILS_H 26 #define _MP_UTILS_H 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 32 #include <mpapi.h> 33 #include <sys/scsi/adapters/mpapi_impl.h> 34 35 #include <sys/types.h> 36 #include <libsysevent.h> 37 #include <syslog.h> 38 #include <pthread.h> 39 40 /* Default bytes */ 41 #define DEFAULT_BUFFER_SIZE_LU_LIST 4096 42 #define DEFAULT_BUFFER_SIZE_INIT_PORT_LIST 1024 43 #define DEFAULT_BUFFER_SIZE_PATH_LIST 1024 44 #define DEFAULT_BUFFER_SIZE_DEV_PROD 1024 45 #define DEFAULT_BUFFER_SIZE_TPG 1024 46 #define DEFAULT_BUFFER_SIZE_LOADBALANCE 1024 47 48 49 /* Node to hold pointer to client callback */ 50 typedef struct _property_node 51 { 52 MP_OBJECT_PROPERTY_FN pClientFn; 53 void *pCallerData; 54 55 } PROPERTY_CALLBACK_NODE; 56 57 58 /* Node to hold pointer to client callback */ 59 typedef struct _visibility_node 60 { 61 MP_OBJECT_VISIBILITY_FN pClientFn; 62 void *pCallerData; 63 64 } VISIBILITY_CALLBACK_NODE; 65 66 67 /* Global array to hold client callbacks */ 68 extern 69 PROPERTY_CALLBACK_NODE g_Property_Callback_List[MP_OBJECT_TYPE_MAX + 1]; 70 71 /* Global array to hold client callbacks */ 72 extern 73 VISIBILITY_CALLBACK_NODE g_Visibility_Callback_List[MP_OBJECT_TYPE_MAX + 1]; 74 75 76 /* Global variable to hold this pligin's ID */ 77 extern MP_UINT32 g_pluginOwnerID; 78 79 /* Global variable to hold scsi_vhci file descriptor */ 80 extern int g_scsi_vhci_fd; 81 82 /* Global variable to hold sysevent handle */ 83 extern sysevent_handle_t *g_SysEventHandle; 84 85 /* Mutexes to make array modify/read thread safe */ 86 extern pthread_mutex_t g_visa_mutex; 87 extern pthread_mutex_t g_prop_mutex; 88 89 90 91 /* Used to add debug (log) info */ 92 void log(int priority, const char *routine, char *msg, ...); 93 94 /* Returns an MP_STATUS code for an mp_iocdata_t.mp_errno code */ 95 MP_STATUS getStatus4ErrorCode(int driverError); 96 97 /* Returns an MP_OID_LIST that will hold "size" MP_OID elements */ 98 MP_OID_LIST *createOidList(int size); 99 100 /* Initializes the sysevent framework */ 101 MP_STATUS init_sysevents(); 102 103 /* Implementation function for MP_GetAssociatedTPGOidList() */ 104 MP_STATUS getAssociatedTPGOidList(MP_OID oid, MP_OID_LIST **ppList); 105 106 /* Implementation function for MP_GetTargetPortGroupProperties() */ 107 MP_STATUS getTargetPortGroupProperties(MP_OID oid, 108 MP_TARGET_PORT_GROUP_PROPERTIES *pProps); 109 110 /* Implementation function for MP_GetTargetPortOidList() */ 111 MP_STATUS getTargetPortOidList(MP_OID oid, MP_OID_LIST **ppList); 112 113 #ifdef __cplusplus 114 } 115 #endif 116 117 #endif /* _MP_UTILS_H */ 118