#ifndef _EMLXS_EVENTS_H
#define _EMLXS_EVENTS_H
#ifdef __cplusplus
extern "C" {
#endif
extern void emlxs_null_func();
#ifdef DEF_EVENT_STRUCT
#define DEFINE_EVT(_name, _label, _mask, _timeout, _destroy) \
extern void _destroy(); \
emlxs_event_t _name = {_mask, _label, _timeout, _destroy};
#else
#define DEFINE_EVT(_name, _label, _mask, _timeout, _destroy) \
extern void _destroy(); \
extern emlxs_event_t _name;
#endif
#define EVT_LINK 0x00000001
#define EVT_RSCN 0x00000002
#define EVT_CT 0x00000004
#define EVT_MPULSE 0x00000008
#define EVT_DUMP 0x00000010
#define EVT_TEMP 0x00000020
#define EVT_VPORTRSCN 0x00000040
#define EVT_ASYNC 0x00000080
#ifdef SAN_DIAG_SUPPORT
#define EVT_SD_ELS 0x00001000
#define EVT_SD_FABRIC 0x00002000
#define EVT_SD_SCSI 0x00004000
#define EVT_SD_BOARD 0x00008000
#endif
#define EVT_FCOE 0x80000000
typedef struct emlxs_event
{
uint32_t mask;
char label[64];
uint32_t timeout;
void (*destroy)();
} emlxs_event_t;
#define EMLXS_EVENT_PERIOD 5
#define EVT_TIMEOUT_DEFAULT 60
#define EVT_TIMEOUT_NEVER 0
#define EVT_DESTROY_DEFAULT emlxs_null_func
DEFINE_EVT(emlxs_link_event, \
"LINK", \
EVT_LINK,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_rscn_event, \
"RSCN", \
EVT_RSCN,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_vportrscn_event, \
"VPORT RSCN", \
EVT_VPORTRSCN,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_ct_event, \
"CT", \
EVT_CT,
EVT_TIMEOUT_DEFAULT,
emlxs_ct_event_destroy)
DEFINE_EVT(emlxs_dump_event, \
"DUMP", \
EVT_DUMP,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_temp_event, \
"TEMP", \
EVT_TEMP,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_fcoe_event, \
"FCOE", \
EVT_FCOE,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_async_event, \
"ASYNC", \
EVT_ASYNC,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
#ifdef SAN_DIAG_SUPPORT
DEFINE_EVT(emlxs_sd_els_event, \
"SD_ELS", \
EVT_SD_ELS,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_sd_fabric_event, \
"SD_FC", \
EVT_SD_FABRIC,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_sd_scsi_event, \
"SD_SCSI", \
EVT_SD_SCSI,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
DEFINE_EVT(emlxs_sd_board_event, \
"SD_BOARD", \
EVT_SD_BOARD,
EVT_TIMEOUT_DEFAULT,
EVT_DESTROY_DEFAULT)
#endif
#define MAX_LOG_INFO_LENGTH 96
typedef struct emlxs_event_entry
{
struct emlxs_event_entry *next;
struct emlxs_event_entry *prev;
uint32_t id;
uint32_t timestamp;
uint32_t timer;
emlxs_event_t *evt;
void *port;
void *bp;
uint32_t size;
uint32_t flag;
#define EMLXS_DFC_EVENT_DONE 0x00000001
#define EMLXS_SD_EVENT_DONE 0x00000002
} emlxs_event_entry_t;
typedef struct emlxs_event_queue
{
kmutex_t lock;
kcondvar_t lock_cv;
uint32_t last_id[32];
uint32_t next_id;
uint32_t count;
emlxs_event_entry_t *first;
emlxs_event_entry_t *last;
} emlxs_event_queue_t;
#ifdef __cplusplus
}
#endif
#endif