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 9 * http://www.opensource.org/licenses/cddl1.txt. 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 /* 23 * Copyright (c) 2004-2011 Emulex. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _EMLXS_EVENTS_H 28 #define _EMLXS_EVENTS_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 extern void emlxs_null_func(); 35 36 #ifdef DEF_EVENT_STRUCT 37 38 #define DEFINE_EVT(_name, _label, _mask, _timeout, _destroy) \ 39 extern void _destroy(); \ 40 emlxs_event_t _name = {_mask, _label, _timeout, _destroy}; 41 42 #else 43 44 #define DEFINE_EVT(_name, _label, _mask, _timeout, _destroy) \ 45 extern void _destroy(); \ 46 extern emlxs_event_t _name; 47 48 #endif /* DEF_EVENT_STRUCT */ 49 50 51 /* Event Mask Bits */ 52 #define EVT_LINK 0x00000001 /* FC_REG_LINK_EVENT */ 53 #define EVT_RSCN 0x00000002 /* FC_REG_RSCN_EVENT */ 54 #define EVT_CT 0x00000004 /* FC_REG_CT_EVENT */ 55 #define EVT_MPULSE 0x00000008 /* FC_REG_MULTIPULSE_EVENT */ 56 #define EVT_DUMP 0x00000010 /* FC_REG_DUMP_EVENT */ 57 #define EVT_TEMP 0x00000020 /* FC_REG_TEMP_EVENT */ 58 #define EVT_VPORTRSCN 0x00000040 /* FC_REG_VPORTRSCN_EVENT */ 59 #define EVT_ASYNC 0x00000080 /* FC_REG_ASYNC_EVENT */ 60 61 #ifdef SAN_DIAG_SUPPORT 62 #define EVT_SD_ELS 0x00001000 /* FC_REG_SD_ELS_EVENT */ 63 #define EVT_SD_FABRIC 0x00002000 /* FC_REG_SD_FABRIC_EVENT */ 64 #define EVT_SD_SCSI 0x00004000 /* FC_REG_SD_SCSI_EVENT */ 65 #define EVT_SD_BOARD 0x00008000 /* FC_REG_SD_BOARD_EVENT */ 66 #endif /* SAN_DIAG_SUPPORT */ 67 68 #define EVT_FCOE 0x80000000 /* FC_REG_FCOE_EVENT */ 69 70 71 typedef struct emlxs_event 72 { 73 uint32_t mask; 74 char label[64]; 75 uint32_t timeout; 76 void (*destroy)(); 77 78 } emlxs_event_t; 79 80 81 #define EMLXS_EVENT_PERIOD 5 82 #define EVT_TIMEOUT_DEFAULT 60 83 #define EVT_TIMEOUT_NEVER 0 84 #define EVT_DESTROY_DEFAULT emlxs_null_func 85 86 87 /* EVENT defines */ 88 DEFINE_EVT(emlxs_link_event, \ 89 "LINK", \ 90 EVT_LINK, 91 EVT_TIMEOUT_DEFAULT, 92 EVT_DESTROY_DEFAULT) 93 94 DEFINE_EVT(emlxs_rscn_event, \ 95 "RSCN", \ 96 EVT_RSCN, 97 EVT_TIMEOUT_DEFAULT, 98 EVT_DESTROY_DEFAULT) 99 100 DEFINE_EVT(emlxs_vportrscn_event, \ 101 "VPORT RSCN", \ 102 EVT_VPORTRSCN, 103 EVT_TIMEOUT_DEFAULT, 104 EVT_DESTROY_DEFAULT) 105 106 DEFINE_EVT(emlxs_ct_event, \ 107 "CT", \ 108 EVT_CT, 109 EVT_TIMEOUT_DEFAULT, 110 emlxs_ct_event_destroy) 111 112 DEFINE_EVT(emlxs_dump_event, \ 113 "DUMP", \ 114 EVT_DUMP, 115 EVT_TIMEOUT_DEFAULT, 116 EVT_DESTROY_DEFAULT) 117 118 DEFINE_EVT(emlxs_temp_event, \ 119 "TEMP", \ 120 EVT_TEMP, 121 EVT_TIMEOUT_DEFAULT, 122 EVT_DESTROY_DEFAULT) 123 124 DEFINE_EVT(emlxs_fcoe_event, \ 125 "FCOE", \ 126 EVT_FCOE, 127 EVT_TIMEOUT_DEFAULT, 128 EVT_DESTROY_DEFAULT) 129 130 DEFINE_EVT(emlxs_async_event, \ 131 "ASYNC", \ 132 EVT_ASYNC, 133 EVT_TIMEOUT_DEFAULT, 134 EVT_DESTROY_DEFAULT) 135 136 #ifdef SAN_DIAG_SUPPORT 137 DEFINE_EVT(emlxs_sd_els_event, \ 138 "SD_ELS", \ 139 EVT_SD_ELS, 140 EVT_TIMEOUT_DEFAULT, 141 EVT_DESTROY_DEFAULT) 142 143 DEFINE_EVT(emlxs_sd_fabric_event, \ 144 "SD_FC", \ 145 EVT_SD_FABRIC, 146 EVT_TIMEOUT_DEFAULT, 147 EVT_DESTROY_DEFAULT) 148 149 DEFINE_EVT(emlxs_sd_scsi_event, \ 150 "SD_SCSI", \ 151 EVT_SD_SCSI, 152 EVT_TIMEOUT_DEFAULT, 153 EVT_DESTROY_DEFAULT) 154 155 DEFINE_EVT(emlxs_sd_board_event, \ 156 "SD_BOARD", \ 157 EVT_SD_BOARD, 158 EVT_TIMEOUT_DEFAULT, 159 EVT_DESTROY_DEFAULT) 160 #endif /* SAN_DIAG_SUPPORT */ 161 162 #define MAX_LOG_INFO_LENGTH 96 163 164 typedef struct emlxs_event_entry 165 { 166 struct emlxs_event_entry *next; 167 struct emlxs_event_entry *prev; 168 169 uint32_t id; 170 uint32_t timestamp; 171 uint32_t timer; 172 173 emlxs_event_t *evt; 174 175 void *port; 176 177 void *bp; /* Context buffer */ 178 /* pointer */ 179 uint32_t size; /* Context buffer */ 180 /* size */ 181 uint32_t flag; 182 #define EMLXS_DFC_EVENT_DONE 0x00000001 183 #define EMLXS_SD_EVENT_DONE 0x00000002 184 185 } emlxs_event_entry_t; 186 187 188 typedef struct emlxs_event_queue 189 { 190 kmutex_t lock; 191 kcondvar_t lock_cv; 192 193 uint32_t last_id[32]; /* per event */ 194 uint32_t next_id; 195 uint32_t count; 196 197 emlxs_event_entry_t *first; 198 emlxs_event_entry_t *last; 199 200 } emlxs_event_queue_t; 201 202 #ifdef __cplusplus 203 } 204 #endif 205 206 #endif /* _EMLXS_EVENTS_H */ 207