0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef _EFC_SM_H
0013 #define _EFC_SM_H
0014
0015 struct efc_sm_ctx;
0016
0017
0018 enum efc_sm_event {
0019
0020 EFC_EVT_ENTER,
0021 EFC_EVT_REENTER,
0022 EFC_EVT_EXIT,
0023 EFC_EVT_SHUTDOWN,
0024 EFC_EVT_ALL_CHILD_NODES_FREE,
0025 EFC_EVT_RESUME,
0026 EFC_EVT_TIMER_EXPIRED,
0027
0028
0029 EFC_EVT_RESPONSE,
0030 EFC_EVT_ERROR,
0031
0032 EFC_EVT_DOMAIN_FOUND,
0033 EFC_EVT_DOMAIN_ALLOC_OK,
0034 EFC_EVT_DOMAIN_ALLOC_FAIL,
0035 EFC_EVT_DOMAIN_REQ_ATTACH,
0036 EFC_EVT_DOMAIN_ATTACH_OK,
0037 EFC_EVT_DOMAIN_ATTACH_FAIL,
0038 EFC_EVT_DOMAIN_LOST,
0039 EFC_EVT_DOMAIN_FREE_OK,
0040 EFC_EVT_DOMAIN_FREE_FAIL,
0041 EFC_EVT_HW_DOMAIN_REQ_ATTACH,
0042 EFC_EVT_HW_DOMAIN_REQ_FREE,
0043
0044
0045 EFC_EVT_NPORT_ALLOC_OK,
0046 EFC_EVT_NPORT_ALLOC_FAIL,
0047 EFC_EVT_NPORT_ATTACH_OK,
0048 EFC_EVT_NPORT_ATTACH_FAIL,
0049 EFC_EVT_NPORT_FREE_OK,
0050 EFC_EVT_NPORT_FREE_FAIL,
0051 EFC_EVT_NPORT_TOPOLOGY_NOTIFY,
0052 EFC_EVT_HW_PORT_ALLOC_OK,
0053 EFC_EVT_HW_PORT_ALLOC_FAIL,
0054 EFC_EVT_HW_PORT_ATTACH_OK,
0055 EFC_EVT_HW_PORT_REQ_ATTACH,
0056 EFC_EVT_HW_PORT_REQ_FREE,
0057 EFC_EVT_HW_PORT_FREE_OK,
0058
0059
0060 EFC_EVT_SRRS_ELS_REQ_OK,
0061 EFC_EVT_SRRS_ELS_CMPL_OK,
0062 EFC_EVT_SRRS_ELS_REQ_FAIL,
0063 EFC_EVT_SRRS_ELS_CMPL_FAIL,
0064 EFC_EVT_SRRS_ELS_REQ_RJT,
0065 EFC_EVT_NODE_ATTACH_OK,
0066 EFC_EVT_NODE_ATTACH_FAIL,
0067 EFC_EVT_NODE_FREE_OK,
0068 EFC_EVT_NODE_FREE_FAIL,
0069 EFC_EVT_ELS_FRAME,
0070 EFC_EVT_ELS_REQ_TIMEOUT,
0071 EFC_EVT_ELS_REQ_ABORTED,
0072
0073 EFC_EVT_ABORT_ELS,
0074
0075 EFC_EVT_ELS_ABORT_CMPL,
0076
0077 EFC_EVT_ABTS_RCVD,
0078
0079
0080 EFC_EVT_NODE_MISSING,
0081
0082 EFC_EVT_NODE_REFOUND,
0083
0084 EFC_EVT_SHUTDOWN_IMPLICIT_LOGO,
0085
0086 EFC_EVT_SHUTDOWN_EXPLICIT_LOGO,
0087
0088 EFC_EVT_PLOGI_RCVD,
0089 EFC_EVT_FLOGI_RCVD,
0090 EFC_EVT_LOGO_RCVD,
0091 EFC_EVT_PRLI_RCVD,
0092 EFC_EVT_PRLO_RCVD,
0093 EFC_EVT_PDISC_RCVD,
0094 EFC_EVT_FDISC_RCVD,
0095 EFC_EVT_ADISC_RCVD,
0096 EFC_EVT_RSCN_RCVD,
0097 EFC_EVT_SCR_RCVD,
0098 EFC_EVT_ELS_RCVD,
0099
0100 EFC_EVT_FCP_CMD_RCVD,
0101
0102 EFC_EVT_GIDPT_DELAY_EXPIRED,
0103
0104
0105 EFC_EVT_NODE_ACTIVE_IO_LIST_EMPTY,
0106 EFC_EVT_NODE_DEL_INI_COMPLETE,
0107 EFC_EVT_NODE_DEL_TGT_COMPLETE,
0108 EFC_EVT_NODE_SESS_REG_OK,
0109 EFC_EVT_NODE_SESS_REG_FAIL,
0110
0111
0112 EFC_EVT_LAST
0113 };
0114
0115
0116 #define EFC_SM_EVENT_NAME { \
0117 [EFC_EVT_ENTER] = "EFC_EVT_ENTER", \
0118 [EFC_EVT_REENTER] = "EFC_EVT_REENTER", \
0119 [EFC_EVT_EXIT] = "EFC_EVT_EXIT", \
0120 [EFC_EVT_SHUTDOWN] = "EFC_EVT_SHUTDOWN", \
0121 [EFC_EVT_ALL_CHILD_NODES_FREE] = "EFC_EVT_ALL_CHILD_NODES_FREE",\
0122 [EFC_EVT_RESUME] = "EFC_EVT_RESUME", \
0123 [EFC_EVT_TIMER_EXPIRED] = "EFC_EVT_TIMER_EXPIRED", \
0124 [EFC_EVT_RESPONSE] = "EFC_EVT_RESPONSE", \
0125 [EFC_EVT_ERROR] = "EFC_EVT_ERROR", \
0126 [EFC_EVT_DOMAIN_FOUND] = "EFC_EVT_DOMAIN_FOUND", \
0127 [EFC_EVT_DOMAIN_ALLOC_OK] = "EFC_EVT_DOMAIN_ALLOC_OK", \
0128 [EFC_EVT_DOMAIN_ALLOC_FAIL] = "EFC_EVT_DOMAIN_ALLOC_FAIL", \
0129 [EFC_EVT_DOMAIN_REQ_ATTACH] = "EFC_EVT_DOMAIN_REQ_ATTACH", \
0130 [EFC_EVT_DOMAIN_ATTACH_OK] = "EFC_EVT_DOMAIN_ATTACH_OK", \
0131 [EFC_EVT_DOMAIN_ATTACH_FAIL] = "EFC_EVT_DOMAIN_ATTACH_FAIL", \
0132 [EFC_EVT_DOMAIN_LOST] = "EFC_EVT_DOMAIN_LOST", \
0133 [EFC_EVT_DOMAIN_FREE_OK] = "EFC_EVT_DOMAIN_FREE_OK", \
0134 [EFC_EVT_DOMAIN_FREE_FAIL] = "EFC_EVT_DOMAIN_FREE_FAIL", \
0135 [EFC_EVT_HW_DOMAIN_REQ_ATTACH] = "EFC_EVT_HW_DOMAIN_REQ_ATTACH",\
0136 [EFC_EVT_HW_DOMAIN_REQ_FREE] = "EFC_EVT_HW_DOMAIN_REQ_FREE", \
0137 [EFC_EVT_NPORT_ALLOC_OK] = "EFC_EVT_NPORT_ALLOC_OK", \
0138 [EFC_EVT_NPORT_ALLOC_FAIL] = "EFC_EVT_NPORT_ALLOC_FAIL", \
0139 [EFC_EVT_NPORT_ATTACH_OK] = "EFC_EVT_NPORT_ATTACH_OK", \
0140 [EFC_EVT_NPORT_ATTACH_FAIL] = "EFC_EVT_NPORT_ATTACH_FAIL", \
0141 [EFC_EVT_NPORT_FREE_OK] = "EFC_EVT_NPORT_FREE_OK", \
0142 [EFC_EVT_NPORT_FREE_FAIL] = "EFC_EVT_NPORT_FREE_FAIL", \
0143 [EFC_EVT_NPORT_TOPOLOGY_NOTIFY] = "EFC_EVT_NPORT_TOPOLOGY_NOTIFY",\
0144 [EFC_EVT_HW_PORT_ALLOC_OK] = "EFC_EVT_HW_PORT_ALLOC_OK", \
0145 [EFC_EVT_HW_PORT_ALLOC_FAIL] = "EFC_EVT_HW_PORT_ALLOC_FAIL", \
0146 [EFC_EVT_HW_PORT_ATTACH_OK] = "EFC_EVT_HW_PORT_ATTACH_OK", \
0147 [EFC_EVT_HW_PORT_REQ_ATTACH] = "EFC_EVT_HW_PORT_REQ_ATTACH", \
0148 [EFC_EVT_HW_PORT_REQ_FREE] = "EFC_EVT_HW_PORT_REQ_FREE", \
0149 [EFC_EVT_HW_PORT_FREE_OK] = "EFC_EVT_HW_PORT_FREE_OK", \
0150 [EFC_EVT_SRRS_ELS_REQ_OK] = "EFC_EVT_SRRS_ELS_REQ_OK", \
0151 [EFC_EVT_SRRS_ELS_CMPL_OK] = "EFC_EVT_SRRS_ELS_CMPL_OK", \
0152 [EFC_EVT_SRRS_ELS_REQ_FAIL] = "EFC_EVT_SRRS_ELS_REQ_FAIL", \
0153 [EFC_EVT_SRRS_ELS_CMPL_FAIL] = "EFC_EVT_SRRS_ELS_CMPL_FAIL", \
0154 [EFC_EVT_SRRS_ELS_REQ_RJT] = "EFC_EVT_SRRS_ELS_REQ_RJT", \
0155 [EFC_EVT_NODE_ATTACH_OK] = "EFC_EVT_NODE_ATTACH_OK", \
0156 [EFC_EVT_NODE_ATTACH_FAIL] = "EFC_EVT_NODE_ATTACH_FAIL", \
0157 [EFC_EVT_NODE_FREE_OK] = "EFC_EVT_NODE_FREE_OK", \
0158 [EFC_EVT_NODE_FREE_FAIL] = "EFC_EVT_NODE_FREE_FAIL", \
0159 [EFC_EVT_ELS_FRAME] = "EFC_EVT_ELS_FRAME", \
0160 [EFC_EVT_ELS_REQ_TIMEOUT] = "EFC_EVT_ELS_REQ_TIMEOUT", \
0161 [EFC_EVT_ELS_REQ_ABORTED] = "EFC_EVT_ELS_REQ_ABORTED", \
0162 [EFC_EVT_ABORT_ELS] = "EFC_EVT_ABORT_ELS", \
0163 [EFC_EVT_ELS_ABORT_CMPL] = "EFC_EVT_ELS_ABORT_CMPL", \
0164 [EFC_EVT_ABTS_RCVD] = "EFC_EVT_ABTS_RCVD", \
0165 [EFC_EVT_NODE_MISSING] = "EFC_EVT_NODE_MISSING", \
0166 [EFC_EVT_NODE_REFOUND] = "EFC_EVT_NODE_REFOUND", \
0167 [EFC_EVT_SHUTDOWN_IMPLICIT_LOGO] = "EFC_EVT_SHUTDOWN_IMPLICIT_LOGO",\
0168 [EFC_EVT_SHUTDOWN_EXPLICIT_LOGO] = "EFC_EVT_SHUTDOWN_EXPLICIT_LOGO",\
0169 [EFC_EVT_PLOGI_RCVD] = "EFC_EVT_PLOGI_RCVD", \
0170 [EFC_EVT_FLOGI_RCVD] = "EFC_EVT_FLOGI_RCVD", \
0171 [EFC_EVT_LOGO_RCVD] = "EFC_EVT_LOGO_RCVD", \
0172 [EFC_EVT_PRLI_RCVD] = "EFC_EVT_PRLI_RCVD", \
0173 [EFC_EVT_PRLO_RCVD] = "EFC_EVT_PRLO_RCVD", \
0174 [EFC_EVT_PDISC_RCVD] = "EFC_EVT_PDISC_RCVD", \
0175 [EFC_EVT_FDISC_RCVD] = "EFC_EVT_FDISC_RCVD", \
0176 [EFC_EVT_ADISC_RCVD] = "EFC_EVT_ADISC_RCVD", \
0177 [EFC_EVT_RSCN_RCVD] = "EFC_EVT_RSCN_RCVD", \
0178 [EFC_EVT_SCR_RCVD] = "EFC_EVT_SCR_RCVD", \
0179 [EFC_EVT_ELS_RCVD] = "EFC_EVT_ELS_RCVD", \
0180 [EFC_EVT_FCP_CMD_RCVD] = "EFC_EVT_FCP_CMD_RCVD", \
0181 [EFC_EVT_NODE_DEL_INI_COMPLETE] = "EFC_EVT_NODE_DEL_INI_COMPLETE",\
0182 [EFC_EVT_NODE_DEL_TGT_COMPLETE] = "EFC_EVT_NODE_DEL_TGT_COMPLETE",\
0183 [EFC_EVT_LAST] = "EFC_EVT_LAST", \
0184 }
0185
0186 int
0187 efc_sm_post_event(struct efc_sm_ctx *ctx,
0188 enum efc_sm_event evt, void *data);
0189 void
0190 efc_sm_transition(struct efc_sm_ctx *ctx,
0191 void (*state)(struct efc_sm_ctx *ctx,
0192 enum efc_sm_event evt, void *arg),
0193 void *data);
0194 void efc_sm_disable(struct efc_sm_ctx *ctx);
0195 const char *efc_sm_event_name(enum efc_sm_event evt);
0196
0197 #endif