1*98f0a994SHans Rosenfeld /* 2*98f0a994SHans Rosenfeld * This file and its contents are supplied under the terms of the 3*98f0a994SHans Rosenfeld * Common Development and Distribution License ("CDDL"), version 1.0. 4*98f0a994SHans Rosenfeld * You may only use this file in accordance with the terms of version 5*98f0a994SHans Rosenfeld * 1.0 of the CDDL. 6*98f0a994SHans Rosenfeld * 7*98f0a994SHans Rosenfeld * A full copy of the text of the CDDL should have accompanied this 8*98f0a994SHans Rosenfeld * source. A copy of the CDDL is also available via the Internet at 9*98f0a994SHans Rosenfeld * http://www.illumos.org/license/CDDL. 10*98f0a994SHans Rosenfeld */ 11*98f0a994SHans Rosenfeld 12*98f0a994SHans Rosenfeld /* 13*98f0a994SHans Rosenfeld * Copyright 2024 Racktop Systems, Inc. 14*98f0a994SHans Rosenfeld */ 15*98f0a994SHans Rosenfeld #ifndef _MFI_EVT_H 16*98f0a994SHans Rosenfeld #define _MFI_EVT_H 17*98f0a994SHans Rosenfeld 18*98f0a994SHans Rosenfeld #include <sys/types.h> 19*98f0a994SHans Rosenfeld #include <sys/debug.h> 20*98f0a994SHans Rosenfeld 21*98f0a994SHans Rosenfeld #include <sys/scsi/adapters/mfi/mfi.h> 22*98f0a994SHans Rosenfeld 23*98f0a994SHans Rosenfeld #ifdef __cplusplus 24*98f0a994SHans Rosenfeld extern "C" { 25*98f0a994SHans Rosenfeld #endif 26*98f0a994SHans Rosenfeld 27*98f0a994SHans Rosenfeld 28*98f0a994SHans Rosenfeld typedef struct mfi_aen mfi_aen_t; 29*98f0a994SHans Rosenfeld 30*98f0a994SHans Rosenfeld typedef struct mfi_evt mfi_evt_t; 31*98f0a994SHans Rosenfeld typedef struct mfi_evt_log_info mfi_evt_log_info_t; 32*98f0a994SHans Rosenfeld typedef struct mfi_evt_detail mfi_evt_detail_t; 33*98f0a994SHans Rosenfeld typedef struct mfi_evt_list mfi_evt_list_t; 34*98f0a994SHans Rosenfeld 35*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_cdb_sense mfi_evtarg_cdb_sense_t; 36*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ld mfi_evtarg_ld_t; 37*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ld_count mfi_evtarg_ld_count_t; 38*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ld_lba mfi_evtarg_ld_lba_t; 39*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ld_owner mfi_evtarg_ld_owner_t; 40*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ld_lba_pd_lba mfi_evtarg_ld_lba_pd_lba_t; 41*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ld_progress mfi_evtarg_ld_progress_t; 42*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ld_state mfi_evtarg_ld_state_t; 43*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ld_strip mfi_evtarg_ld_strip_t; 44*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_pd mfi_evtarg_pd_t; 45*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_pd_err mfi_evtarg_pd_err_t; 46*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_pd_lba mfi_evtarg_pd_lba_t; 47*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_pd_lba_ld mfi_evtarg_pd_lba_ld_t; 48*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_pd_progress mfi_evtarg_pd_progress_t; 49*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_pd_state mfi_evtarg_pd_state_t; 50*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_pci mfi_evtarg_pci_t; 51*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_time mfi_evtarg_time_t; 52*98f0a994SHans Rosenfeld typedef struct mfi_evtarg_ecc mfi_evtarg_ecc_t; 53*98f0a994SHans Rosenfeld 54*98f0a994SHans Rosenfeld 55*98f0a994SHans Rosenfeld /* 56*98f0a994SHans Rosenfeld * Asynchronous Event Notifications 57*98f0a994SHans Rosenfeld */ 58*98f0a994SHans Rosenfeld #define MFI_EVT_CFG_CLEARED 0x0004 59*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_PATROL_READ_COMPLETE 0x0023 60*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_PATROL_READ_RESUMED 0x0026 61*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_PATROL_READ_START 0x0027 62*98f0a994SHans Rosenfeld #define MFI_EVT_LD_BG_INIT_PROGRESS 0x0034 63*98f0a994SHans Rosenfeld #define MFI_EVT_LD_CC_COMPLETE 0x003a 64*98f0a994SHans Rosenfeld #define MFI_EVT_LD_CC_PROGRESS 0x0041 65*98f0a994SHans Rosenfeld #define MFI_EVT_LD_CC_STARTED 0x0042 66*98f0a994SHans Rosenfeld #define MFI_EVT_LD_INIT_ABORTED 0x0043 67*98f0a994SHans Rosenfeld #define MFI_EVT_LD_INIT_PROGRESS 0x0045 68*98f0a994SHans Rosenfeld #define MFI_EVT_LD_FAST_INIT_STARTED 0x0046 69*98f0a994SHans Rosenfeld #define MFI_EVT_LD_FULL_INIT_STARTED 0x0047 70*98f0a994SHans Rosenfeld #define MFI_EVT_LD_INIT_COMPLETE 0x0048 71*98f0a994SHans Rosenfeld #define MFI_EVT_LD_PROP_CHANGED 0x0049 72*98f0a994SHans Rosenfeld #define MFI_EVT_LD_STATE_CHANGE 0x0051 73*98f0a994SHans Rosenfeld #define MFI_EVT_PD_INSERTED 0x005b 74*98f0a994SHans Rosenfeld #define MFI_EVT_PD_PATROL_READ_PROGRESS 0x005e 75*98f0a994SHans Rosenfeld #define MFI_EVT_PD_REMOVED 0x0070 76*98f0a994SHans Rosenfeld #define MFI_EVT_PD_CHANGED 0x0072 77*98f0a994SHans Rosenfeld #define MFI_EVT_LD_CREATED 0x008a 78*98f0a994SHans Rosenfeld #define MFI_EVT_LD_DELETED 0x008b 79*98f0a994SHans Rosenfeld #define MFI_EVT_FOREIGN_CFG_IMPORTED 0x00db 80*98f0a994SHans Rosenfeld #define MFI_EVT_LD_OPTIMAL 0x00f9 81*98f0a994SHans Rosenfeld #define MFI_EVT_LD_OFFLINE 0x00fc 82*98f0a994SHans Rosenfeld #define MFI_EVT_PD_RESET 0x010c 83*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_PATROL_READ_CANT_START 0x0124 84*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_PROP_CHANGED 0x012f 85*98f0a994SHans Rosenfeld #define MFI_EVT_LD_BBT_CLEARED 0x014f 86*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_HOST_BUS_SCAN_REQD 0x0152 87*98f0a994SHans Rosenfeld #define MFI_EVT_LD_AVAILABLE 0x0172 88*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_PERF_COLLECTION 0x017e 89*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_BOOTDEV_SET 0x01ec 90*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_BOOTDEV_RESET 0x01f3 91*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_PERSONALITY_CHANGE 0x0206 92*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_PERSONALITY_CHANGE_PEND 0x0222 93*98f0a994SHans Rosenfeld #define MFI_EVT_CTRL_NR_OF_VALID_SNAPDUMP 0x024e 94*98f0a994SHans Rosenfeld 95*98f0a994SHans Rosenfeld #define MFI_EVT_CLASS_DEBUG (int8_t)-2 96*98f0a994SHans Rosenfeld #define MFI_EVT_CLASS_PROGRESS (int8_t)-1 97*98f0a994SHans Rosenfeld #define MFI_EVT_CLASS_INFO 0 98*98f0a994SHans Rosenfeld #define MFI_EVT_CLASS_WARNING 1 99*98f0a994SHans Rosenfeld #define MFI_EVT_CLASS_CRITICAL 2 100*98f0a994SHans Rosenfeld #define MFI_EVT_CLASS_FATAL 3 101*98f0a994SHans Rosenfeld #define MFI_EVT_CLASS_DEAD 4 102*98f0a994SHans Rosenfeld 103*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_LD 0x0001 104*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_PD 0x0002 105*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_ENCL 0x0004 106*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_BBU 0x0008 107*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_SAS 0x0010 108*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_CTRL 0x0020 109*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_CONFIG 0x0040 110*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_CLUSTER 0x0080 111*98f0a994SHans Rosenfeld #define MFI_EVT_LOCALE_ALL 0xffff 112*98f0a994SHans Rosenfeld 113*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_NONE 0 114*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_CDB_SENSE 1 115*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_LD 2 116*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_LD_COUNT 3 117*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_LD_LBA 4 118*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_LD_OWNER 5 119*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_LD_LBA_PD_LBA 6 120*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_LD_PROG 7 121*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_LD_STATE 8 122*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_LD_STRIP 9 123*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_PD 10 124*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_PD_ERR 11 125*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_PD_LBA 12 126*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_PD_LBA_LD 13 127*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_PD_PROG 14 128*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_PD_STATE 15 129*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_PCI 16 130*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_RATE 17 131*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_STR 18 132*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_TIME 19 133*98f0a994SHans Rosenfeld #define MFI_EVT_ARGS_ECC 20 134*98f0a994SHans Rosenfeld 135*98f0a994SHans Rosenfeld #pragma pack(1) 136*98f0a994SHans Rosenfeld 137*98f0a994SHans Rosenfeld struct mfi_aen { 138*98f0a994SHans Rosenfeld uint16_t aen_host_no; 139*98f0a994SHans Rosenfeld uint16_t aen_cmd_status; 140*98f0a994SHans Rosenfeld uint32_t aen_seqnum; 141*98f0a994SHans Rosenfeld uint32_t aen_class_locale_word; 142*98f0a994SHans Rosenfeld }; 143*98f0a994SHans Rosenfeld 144*98f0a994SHans Rosenfeld struct mfi_evt { 145*98f0a994SHans Rosenfeld uint16_t evt_locale; 146*98f0a994SHans Rosenfeld uint8_t evt_rsvd; 147*98f0a994SHans Rosenfeld int8_t evt_class; 148*98f0a994SHans Rosenfeld }; 149*98f0a994SHans Rosenfeld 150*98f0a994SHans Rosenfeld struct mfi_evt_log_info { 151*98f0a994SHans Rosenfeld uint32_t eli_newest_seqnum; 152*98f0a994SHans Rosenfeld uint32_t eli_oldest_seqnum; 153*98f0a994SHans Rosenfeld uint32_t eli_clear_seqnum; 154*98f0a994SHans Rosenfeld uint32_t eli_shutdown_seqnum; 155*98f0a994SHans Rosenfeld uint32_t eli_boot_seqnum; 156*98f0a994SHans Rosenfeld }; 157*98f0a994SHans Rosenfeld 158*98f0a994SHans Rosenfeld struct mfi_evtarg_ld { 159*98f0a994SHans Rosenfeld uint16_t el_tgtid; 160*98f0a994SHans Rosenfeld uint8_t el_ld_id; 161*98f0a994SHans Rosenfeld uint8_t el_rsvd; 162*98f0a994SHans Rosenfeld }; 163*98f0a994SHans Rosenfeld 164*98f0a994SHans Rosenfeld struct mfi_evtarg_pd { 165*98f0a994SHans Rosenfeld uint16_t ep_dev_id; 166*98f0a994SHans Rosenfeld uint8_t ep_enc_idx; 167*98f0a994SHans Rosenfeld uint8_t ep_slot; 168*98f0a994SHans Rosenfeld }; 169*98f0a994SHans Rosenfeld 170*98f0a994SHans Rosenfeld struct mfi_evtarg_cdb_sense { 171*98f0a994SHans Rosenfeld mfi_evtarg_pd_t cs_pd; 172*98f0a994SHans Rosenfeld uint8_t cs_cdb_len; 173*98f0a994SHans Rosenfeld uint8_t cs_sense_len; 174*98f0a994SHans Rosenfeld uint8_t cs_rsvd[2]; 175*98f0a994SHans Rosenfeld uint8_t cs_cdb[16]; 176*98f0a994SHans Rosenfeld uint8_t cs_sense[64]; 177*98f0a994SHans Rosenfeld }; 178*98f0a994SHans Rosenfeld 179*98f0a994SHans Rosenfeld struct mfi_evtarg_ld_count { 180*98f0a994SHans Rosenfeld mfi_evtarg_ld_t lc_ld; 181*98f0a994SHans Rosenfeld uint64_t lc_count; 182*98f0a994SHans Rosenfeld }; 183*98f0a994SHans Rosenfeld 184*98f0a994SHans Rosenfeld struct mfi_evtarg_ld_lba { 185*98f0a994SHans Rosenfeld uint64_t ll_lba; 186*98f0a994SHans Rosenfeld mfi_evtarg_ld_t ll_ld; 187*98f0a994SHans Rosenfeld }; 188*98f0a994SHans Rosenfeld 189*98f0a994SHans Rosenfeld struct mfi_evtarg_ld_owner { 190*98f0a994SHans Rosenfeld mfi_evtarg_ld_t lo_ld; 191*98f0a994SHans Rosenfeld uint32_t lo_prev_owner; 192*98f0a994SHans Rosenfeld uint32_t lo_new_owner; 193*98f0a994SHans Rosenfeld }; 194*98f0a994SHans Rosenfeld 195*98f0a994SHans Rosenfeld struct mfi_evtarg_ld_lba_pd_lba { 196*98f0a994SHans Rosenfeld uint64_t llpl_ld_lba; 197*98f0a994SHans Rosenfeld uint64_t llpl_pd_lba; 198*98f0a994SHans Rosenfeld mfi_evtarg_ld_t llpl_ld; 199*98f0a994SHans Rosenfeld mfi_evtarg_pd_t llpl_pd; 200*98f0a994SHans Rosenfeld }; 201*98f0a994SHans Rosenfeld 202*98f0a994SHans Rosenfeld struct mfi_evtarg_ld_progress { 203*98f0a994SHans Rosenfeld mfi_evtarg_ld_t lp_ld; 204*98f0a994SHans Rosenfeld mfi_progress_t lp_progress; 205*98f0a994SHans Rosenfeld }; 206*98f0a994SHans Rosenfeld 207*98f0a994SHans Rosenfeld struct mfi_evtarg_ld_state { 208*98f0a994SHans Rosenfeld mfi_evtarg_ld_t ls_ld; 209*98f0a994SHans Rosenfeld uint32_t ls_prev_state; 210*98f0a994SHans Rosenfeld uint32_t ls_new_state; 211*98f0a994SHans Rosenfeld }; 212*98f0a994SHans Rosenfeld 213*98f0a994SHans Rosenfeld struct mfi_evtarg_ld_strip { 214*98f0a994SHans Rosenfeld uint64_t ls_strip; 215*98f0a994SHans Rosenfeld mfi_evtarg_ld_t ls_ld; 216*98f0a994SHans Rosenfeld }; 217*98f0a994SHans Rosenfeld 218*98f0a994SHans Rosenfeld struct mfi_evtarg_pd_err { 219*98f0a994SHans Rosenfeld mfi_evtarg_pd_t pe_pd; 220*98f0a994SHans Rosenfeld uint64_t pe_err; 221*98f0a994SHans Rosenfeld }; 222*98f0a994SHans Rosenfeld 223*98f0a994SHans Rosenfeld struct mfi_evtarg_pd_lba { 224*98f0a994SHans Rosenfeld uint64_t pl_lba; 225*98f0a994SHans Rosenfeld mfi_evtarg_pd_t pl_pd; 226*98f0a994SHans Rosenfeld }; 227*98f0a994SHans Rosenfeld 228*98f0a994SHans Rosenfeld struct mfi_evtarg_pd_lba_ld { 229*98f0a994SHans Rosenfeld uint64_t pll_lba; 230*98f0a994SHans Rosenfeld mfi_evtarg_pd_t pll_pd; 231*98f0a994SHans Rosenfeld mfi_evtarg_ld_t pll_ld; 232*98f0a994SHans Rosenfeld }; 233*98f0a994SHans Rosenfeld 234*98f0a994SHans Rosenfeld struct mfi_evtarg_pd_progress { 235*98f0a994SHans Rosenfeld mfi_evtarg_pd_t pp_pd; 236*98f0a994SHans Rosenfeld mfi_progress_t pp_progress; 237*98f0a994SHans Rosenfeld }; 238*98f0a994SHans Rosenfeld 239*98f0a994SHans Rosenfeld struct mfi_evtarg_pd_state { 240*98f0a994SHans Rosenfeld mfi_evtarg_pd_t ps_pd; 241*98f0a994SHans Rosenfeld uint32_t ps_prev_state; 242*98f0a994SHans Rosenfeld uint32_t ps_new_state; 243*98f0a994SHans Rosenfeld }; 244*98f0a994SHans Rosenfeld 245*98f0a994SHans Rosenfeld struct mfi_evtarg_pci { 246*98f0a994SHans Rosenfeld uint16_t pci_vendor_id; 247*98f0a994SHans Rosenfeld uint16_t pci_device_id; 248*98f0a994SHans Rosenfeld uint16_t pci_sub_vendor_id; 249*98f0a994SHans Rosenfeld uint16_t pci_sub_device_id; 250*98f0a994SHans Rosenfeld }; 251*98f0a994SHans Rosenfeld 252*98f0a994SHans Rosenfeld struct mfi_evtarg_time { 253*98f0a994SHans Rosenfeld uint32_t t_rtc; 254*98f0a994SHans Rosenfeld uint16_t t_elapsed; 255*98f0a994SHans Rosenfeld }; 256*98f0a994SHans Rosenfeld 257*98f0a994SHans Rosenfeld struct mfi_evtarg_ecc { 258*98f0a994SHans Rosenfeld uint32_t ecc_ecar; 259*98f0a994SHans Rosenfeld uint32_t ecc_elog; 260*98f0a994SHans Rosenfeld char ecc_str[64]; 261*98f0a994SHans Rosenfeld }; 262*98f0a994SHans Rosenfeld 263*98f0a994SHans Rosenfeld struct mfi_evt_detail { 264*98f0a994SHans Rosenfeld uint32_t evt_seqnum; 265*98f0a994SHans Rosenfeld uint32_t evt_timestamp; 266*98f0a994SHans Rosenfeld uint32_t evt_code; 267*98f0a994SHans Rosenfeld mfi_evt_t evt_cl; 268*98f0a994SHans Rosenfeld uint8_t evt_argtype; 269*98f0a994SHans Rosenfeld uint8_t evt_rsvd2[15]; 270*98f0a994SHans Rosenfeld union { 271*98f0a994SHans Rosenfeld mfi_evtarg_cdb_sense_t evt_cdb_sense; 272*98f0a994SHans Rosenfeld mfi_evtarg_ld_t evt_ld; 273*98f0a994SHans Rosenfeld mfi_evtarg_ld_count_t evt_ld_count; 274*98f0a994SHans Rosenfeld mfi_evtarg_ld_lba_t evt_ld_lba; 275*98f0a994SHans Rosenfeld mfi_evtarg_ld_owner_t evt_ld_owner; 276*98f0a994SHans Rosenfeld mfi_evtarg_ld_lba_pd_lba_t evt_ld_lba_pd_lba; 277*98f0a994SHans Rosenfeld mfi_evtarg_ld_progress_t evt_ld_progress; 278*98f0a994SHans Rosenfeld mfi_evtarg_ld_state_t evt_ld_state; 279*98f0a994SHans Rosenfeld mfi_evtarg_ld_strip_t evt_ld_strip; 280*98f0a994SHans Rosenfeld mfi_evtarg_pd_t evt_pd; 281*98f0a994SHans Rosenfeld mfi_evtarg_pd_err_t evt_pd_err; 282*98f0a994SHans Rosenfeld mfi_evtarg_pd_lba_t evt_pd_lba; 283*98f0a994SHans Rosenfeld mfi_evtarg_pd_lba_ld_t evt_pd_lba_ld; 284*98f0a994SHans Rosenfeld mfi_evtarg_pd_progress_t evt_pd_progress; 285*98f0a994SHans Rosenfeld mfi_evtarg_pd_state_t evt_pd_state; 286*98f0a994SHans Rosenfeld mfi_evtarg_pci_t evt_pci; 287*98f0a994SHans Rosenfeld uint32_t evt_rebuild_rate; 288*98f0a994SHans Rosenfeld mfi_evtarg_time_t evt_time; 289*98f0a994SHans Rosenfeld mfi_evtarg_ecc_t evt_ecc; 290*98f0a994SHans Rosenfeld 291*98f0a994SHans Rosenfeld char evt_str[96]; 292*98f0a994SHans Rosenfeld }; 293*98f0a994SHans Rosenfeld char evt_descr[128]; 294*98f0a994SHans Rosenfeld }; 295*98f0a994SHans Rosenfeld CTASSERT(sizeof (mfi_evt_detail_t) == 256); 296*98f0a994SHans Rosenfeld 297*98f0a994SHans Rosenfeld struct mfi_evt_list { 298*98f0a994SHans Rosenfeld uint32_t el_count; 299*98f0a994SHans Rosenfeld uint32_t el_rsvd; 300*98f0a994SHans Rosenfeld mfi_evt_detail_t el_evt[0]; 301*98f0a994SHans Rosenfeld }; 302*98f0a994SHans Rosenfeld 303*98f0a994SHans Rosenfeld #pragma pack(0) 304*98f0a994SHans Rosenfeld 305*98f0a994SHans Rosenfeld 306*98f0a994SHans Rosenfeld #ifdef __cplusplus 307*98f0a994SHans Rosenfeld } 308*98f0a994SHans Rosenfeld #endif 309*98f0a994SHans Rosenfeld 310*98f0a994SHans Rosenfeld #endif /* _MFI_EVT_H */ 311