182527734SSukumar Swaminathan /* 282527734SSukumar Swaminathan * CDDL HEADER START 382527734SSukumar Swaminathan * 482527734SSukumar Swaminathan * The contents of this file are subject to the terms of the 582527734SSukumar Swaminathan * Common Development and Distribution License (the "License"). 682527734SSukumar Swaminathan * You may not use this file except in compliance with the License. 782527734SSukumar Swaminathan * 8*8f23e9faSHans Rosenfeld * You can obtain a copy of the license at 9*8f23e9faSHans Rosenfeld * http://www.opensource.org/licenses/cddl1.txt. 1082527734SSukumar Swaminathan * See the License for the specific language governing permissions 1182527734SSukumar Swaminathan * and limitations under the License. 1282527734SSukumar Swaminathan * 1382527734SSukumar Swaminathan * When distributing Covered Code, include this CDDL HEADER in each 1482527734SSukumar Swaminathan * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1582527734SSukumar Swaminathan * If applicable, add the following below this CDDL HEADER, with the 1682527734SSukumar Swaminathan * fields enclosed by brackets "[]" replaced with your own identifying 1782527734SSukumar Swaminathan * information: Portions Copyright [yyyy] [name of copyright owner] 1882527734SSukumar Swaminathan * 1982527734SSukumar Swaminathan * CDDL HEADER END 2082527734SSukumar Swaminathan */ 2182527734SSukumar Swaminathan 2282527734SSukumar Swaminathan /* 23*8f23e9faSHans Rosenfeld * Copyright (c) 2004-2011 Emulex. All rights reserved. 2482527734SSukumar Swaminathan * Use is subject to license terms. 2582527734SSukumar Swaminathan */ 2682527734SSukumar Swaminathan 2782527734SSukumar Swaminathan #ifndef _EMLXS_EVENTS_H 2882527734SSukumar Swaminathan #define _EMLXS_EVENTS_H 2982527734SSukumar Swaminathan 3082527734SSukumar Swaminathan #ifdef __cplusplus 3182527734SSukumar Swaminathan extern "C" { 3282527734SSukumar Swaminathan #endif 3382527734SSukumar Swaminathan 3482527734SSukumar Swaminathan extern void emlxs_null_func(); 3582527734SSukumar Swaminathan 3682527734SSukumar Swaminathan #ifdef DEF_EVENT_STRUCT 3782527734SSukumar Swaminathan 3882527734SSukumar Swaminathan #define DEFINE_EVT(_name, _label, _mask, _timeout, _destroy) \ 3982527734SSukumar Swaminathan extern void _destroy(); \ 4082527734SSukumar Swaminathan emlxs_event_t _name = {_mask, _label, _timeout, _destroy}; 4182527734SSukumar Swaminathan 4282527734SSukumar Swaminathan #else 4382527734SSukumar Swaminathan 4482527734SSukumar Swaminathan #define DEFINE_EVT(_name, _label, _mask, _timeout, _destroy) \ 4582527734SSukumar Swaminathan extern void _destroy(); \ 4682527734SSukumar Swaminathan extern emlxs_event_t _name; 4782527734SSukumar Swaminathan 4882527734SSukumar Swaminathan #endif /* DEF_EVENT_STRUCT */ 4982527734SSukumar Swaminathan 5082527734SSukumar Swaminathan 5182527734SSukumar Swaminathan /* Event Mask Bits */ 5282527734SSukumar Swaminathan #define EVT_LINK 0x00000001 /* FC_REG_LINK_EVENT */ 5382527734SSukumar Swaminathan #define EVT_RSCN 0x00000002 /* FC_REG_RSCN_EVENT */ 5482527734SSukumar Swaminathan #define EVT_CT 0x00000004 /* FC_REG_CT_EVENT */ 5582527734SSukumar Swaminathan #define EVT_MPULSE 0x00000008 /* FC_REG_MULTIPULSE_EVENT */ 5682527734SSukumar Swaminathan #define EVT_DUMP 0x00000010 /* FC_REG_DUMP_EVENT */ 5782527734SSukumar Swaminathan #define EVT_TEMP 0x00000020 /* FC_REG_TEMP_EVENT */ 5882527734SSukumar Swaminathan #define EVT_VPORTRSCN 0x00000040 /* FC_REG_VPORTRSCN_EVENT */ 5982527734SSukumar Swaminathan #define EVT_ASYNC 0x00000080 /* FC_REG_ASYNC_EVENT */ 6082527734SSukumar Swaminathan 6182527734SSukumar Swaminathan #ifdef SAN_DIAG_SUPPORT 6282527734SSukumar Swaminathan #define EVT_SD_ELS 0x00001000 /* FC_REG_SD_ELS_EVENT */ 6382527734SSukumar Swaminathan #define EVT_SD_FABRIC 0x00002000 /* FC_REG_SD_FABRIC_EVENT */ 6482527734SSukumar Swaminathan #define EVT_SD_SCSI 0x00004000 /* FC_REG_SD_SCSI_EVENT */ 6582527734SSukumar Swaminathan #define EVT_SD_BOARD 0x00008000 /* FC_REG_SD_BOARD_EVENT */ 6682527734SSukumar Swaminathan #endif /* SAN_DIAG_SUPPORT */ 6782527734SSukumar Swaminathan 6882527734SSukumar Swaminathan #define EVT_FCOE 0x80000000 /* FC_REG_FCOE_EVENT */ 6982527734SSukumar Swaminathan 7082527734SSukumar Swaminathan 7182527734SSukumar Swaminathan typedef struct emlxs_event 7282527734SSukumar Swaminathan { 7382527734SSukumar Swaminathan uint32_t mask; 7482527734SSukumar Swaminathan char label[64]; 7582527734SSukumar Swaminathan uint32_t timeout; 7682527734SSukumar Swaminathan void (*destroy)(); 7782527734SSukumar Swaminathan 7882527734SSukumar Swaminathan } emlxs_event_t; 7982527734SSukumar Swaminathan 8082527734SSukumar Swaminathan 8182527734SSukumar Swaminathan #define EMLXS_EVENT_PERIOD 5 8282527734SSukumar Swaminathan #define EVT_TIMEOUT_DEFAULT 60 8382527734SSukumar Swaminathan #define EVT_TIMEOUT_NEVER 0 8482527734SSukumar Swaminathan #define EVT_DESTROY_DEFAULT emlxs_null_func 8582527734SSukumar Swaminathan 8682527734SSukumar Swaminathan 8782527734SSukumar Swaminathan /* EVENT defines */ 8882527734SSukumar Swaminathan DEFINE_EVT(emlxs_link_event, \ 8982527734SSukumar Swaminathan "LINK", \ 9082527734SSukumar Swaminathan EVT_LINK, 9182527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 9282527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 9382527734SSukumar Swaminathan 9482527734SSukumar Swaminathan DEFINE_EVT(emlxs_rscn_event, \ 9582527734SSukumar Swaminathan "RSCN", \ 9682527734SSukumar Swaminathan EVT_RSCN, 9782527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 9882527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 9982527734SSukumar Swaminathan 10082527734SSukumar Swaminathan DEFINE_EVT(emlxs_vportrscn_event, \ 10182527734SSukumar Swaminathan "VPORT RSCN", \ 10282527734SSukumar Swaminathan EVT_VPORTRSCN, 10382527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 10482527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 10582527734SSukumar Swaminathan 10682527734SSukumar Swaminathan DEFINE_EVT(emlxs_ct_event, \ 10782527734SSukumar Swaminathan "CT", \ 10882527734SSukumar Swaminathan EVT_CT, 10982527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 11082527734SSukumar Swaminathan emlxs_ct_event_destroy) 11182527734SSukumar Swaminathan 11282527734SSukumar Swaminathan DEFINE_EVT(emlxs_dump_event, \ 11382527734SSukumar Swaminathan "DUMP", \ 11482527734SSukumar Swaminathan EVT_DUMP, 11582527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 11682527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 11782527734SSukumar Swaminathan 11882527734SSukumar Swaminathan DEFINE_EVT(emlxs_temp_event, \ 11982527734SSukumar Swaminathan "TEMP", \ 12082527734SSukumar Swaminathan EVT_TEMP, 12182527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 12282527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 12382527734SSukumar Swaminathan 12482527734SSukumar Swaminathan DEFINE_EVT(emlxs_fcoe_event, \ 12582527734SSukumar Swaminathan "FCOE", \ 12682527734SSukumar Swaminathan EVT_FCOE, 12782527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 12882527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 12982527734SSukumar Swaminathan 13082527734SSukumar Swaminathan DEFINE_EVT(emlxs_async_event, \ 13182527734SSukumar Swaminathan "ASYNC", \ 13282527734SSukumar Swaminathan EVT_ASYNC, 13382527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 13482527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 13582527734SSukumar Swaminathan 13682527734SSukumar Swaminathan #ifdef SAN_DIAG_SUPPORT 13782527734SSukumar Swaminathan DEFINE_EVT(emlxs_sd_els_event, \ 13882527734SSukumar Swaminathan "SD_ELS", \ 13982527734SSukumar Swaminathan EVT_SD_ELS, 14082527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 14182527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 14282527734SSukumar Swaminathan 14382527734SSukumar Swaminathan DEFINE_EVT(emlxs_sd_fabric_event, \ 14482527734SSukumar Swaminathan "SD_FC", \ 14582527734SSukumar Swaminathan EVT_SD_FABRIC, 14682527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 14782527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 14882527734SSukumar Swaminathan 14982527734SSukumar Swaminathan DEFINE_EVT(emlxs_sd_scsi_event, \ 15082527734SSukumar Swaminathan "SD_SCSI", \ 15182527734SSukumar Swaminathan EVT_SD_SCSI, 15282527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 15382527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 15482527734SSukumar Swaminathan 15582527734SSukumar Swaminathan DEFINE_EVT(emlxs_sd_board_event, \ 15682527734SSukumar Swaminathan "SD_BOARD", \ 15782527734SSukumar Swaminathan EVT_SD_BOARD, 15882527734SSukumar Swaminathan EVT_TIMEOUT_DEFAULT, 15982527734SSukumar Swaminathan EVT_DESTROY_DEFAULT) 16082527734SSukumar Swaminathan #endif /* SAN_DIAG_SUPPORT */ 16182527734SSukumar Swaminathan 162e2ca2865SSukumar Swaminathan #define MAX_LOG_INFO_LENGTH 96 163e2ca2865SSukumar Swaminathan 164e2ca2865SSukumar Swaminathan typedef struct emlxs_event_entry 165e2ca2865SSukumar Swaminathan { 166e2ca2865SSukumar Swaminathan struct emlxs_event_entry *next; 167e2ca2865SSukumar Swaminathan struct emlxs_event_entry *prev; 168e2ca2865SSukumar Swaminathan 169e2ca2865SSukumar Swaminathan uint32_t id; 170e2ca2865SSukumar Swaminathan uint32_t timestamp; 171e2ca2865SSukumar Swaminathan uint32_t timer; 172e2ca2865SSukumar Swaminathan 173e2ca2865SSukumar Swaminathan emlxs_event_t *evt; 174e2ca2865SSukumar Swaminathan 175e2ca2865SSukumar Swaminathan void *port; 176e2ca2865SSukumar Swaminathan 177e2ca2865SSukumar Swaminathan void *bp; /* Context buffer */ 178e2ca2865SSukumar Swaminathan /* pointer */ 179e2ca2865SSukumar Swaminathan uint32_t size; /* Context buffer */ 180e2ca2865SSukumar Swaminathan /* size */ 181e2ca2865SSukumar Swaminathan uint32_t flag; 182e2ca2865SSukumar Swaminathan #define EMLXS_DFC_EVENT_DONE 0x00000001 183e2ca2865SSukumar Swaminathan #define EMLXS_SD_EVENT_DONE 0x00000002 184e2ca2865SSukumar Swaminathan 185e2ca2865SSukumar Swaminathan } emlxs_event_entry_t; 186e2ca2865SSukumar Swaminathan 187e2ca2865SSukumar Swaminathan 188e2ca2865SSukumar Swaminathan typedef struct emlxs_event_queue 189e2ca2865SSukumar Swaminathan { 190e2ca2865SSukumar Swaminathan kmutex_t lock; 191e2ca2865SSukumar Swaminathan kcondvar_t lock_cv; 192e2ca2865SSukumar Swaminathan 193e2ca2865SSukumar Swaminathan uint32_t last_id[32]; /* per event */ 194e2ca2865SSukumar Swaminathan uint32_t next_id; 195e2ca2865SSukumar Swaminathan uint32_t count; 196e2ca2865SSukumar Swaminathan 197e2ca2865SSukumar Swaminathan emlxs_event_entry_t *first; 198e2ca2865SSukumar Swaminathan emlxs_event_entry_t *last; 199e2ca2865SSukumar Swaminathan 200e2ca2865SSukumar Swaminathan } emlxs_event_queue_t; 201e2ca2865SSukumar Swaminathan 20282527734SSukumar Swaminathan #ifdef __cplusplus 20382527734SSukumar Swaminathan } 20482527734SSukumar Swaminathan #endif 20582527734SSukumar Swaminathan 20682527734SSukumar Swaminathan #endif /* _EMLXS_EVENTS_H */ 207