From: James Smart <jsmart2021@gmail.com>
To: linux-scsi@vger.kernel.org
Cc: James Smart <jsmart2021@gmail.com>,
Ram Vegesna <ram.vegesna@broadcom.com>
Subject: [PATCH 08/32] elx: libefc: Generic state machine framework
Date: Wed, 23 Oct 2019 14:55:33 -0700 [thread overview]
Message-ID: <20191023215557.12581-9-jsmart2021@gmail.com> (raw)
In-Reply-To: <20191023215557.12581-1-jsmart2021@gmail.com>
This patch starts the population of the libefc library.
The library will contain common tasks usable by a target or initiator
driver. The library will also contain a FC discovery state machine
interface.
This patch creates the library directory and adds definitions
for the discovery state machine interface.
Signed-off-by: Ram Vegesna <ram.vegesna@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
---
drivers/scsi/elx/libefc/efc_sm.c | 275 +++++++++++++++++++++++++++++++++++++++
drivers/scsi/elx/libefc/efc_sm.h | 171 ++++++++++++++++++++++++
2 files changed, 446 insertions(+)
create mode 100644 drivers/scsi/elx/libefc/efc_sm.c
create mode 100644 drivers/scsi/elx/libefc/efc_sm.h
diff --git a/drivers/scsi/elx/libefc/efc_sm.c b/drivers/scsi/elx/libefc/efc_sm.c
new file mode 100644
index 000000000000..4c2b844a23df
--- /dev/null
+++ b/drivers/scsi/elx/libefc/efc_sm.c
@@ -0,0 +1,275 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 Broadcom. All Rights Reserved. The term
+ * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
+ */
+
+/*
+ * Generic state machine framework.
+ */
+#include "efc.h"
+#include "efc_sm.h"
+
+const char *efc_sm_id[] = {
+ "common",
+ "domain",
+ "login"
+};
+
+/**
+ * @brief Post an event to a context.
+ *
+ * @param ctx State machine context
+ * @param evt Event to post
+ * @param data Event-specific data (if any)
+ *
+ * @return 0 if successfully posted event; -1 if state machine
+ * is disabled
+ */
+int
+efc_sm_post_event(struct efc_sm_ctx_s *ctx,
+ enum efc_sm_event_e evt, void *data)
+{
+ if (ctx->current_state) {
+ ctx->current_state(ctx, evt, data);
+ return 0;
+ } else {
+ return -1;
+ }
+}
+
+/**
+ * @brief Transition to a new state.
+ */
+void
+efc_sm_transition(struct efc_sm_ctx_s *ctx,
+ void *(*state)(struct efc_sm_ctx_s *,
+ enum efc_sm_event_e, void *), void *data)
+
+{
+ if (ctx->current_state == state) {
+ efc_sm_post_event(ctx, EFC_EVT_REENTER, data);
+ } else {
+ efc_sm_post_event(ctx, EFC_EVT_EXIT, data);
+ ctx->current_state = state;
+ efc_sm_post_event(ctx, EFC_EVT_ENTER, data);
+ }
+}
+
+/**
+ * @brief Disable further state machine processing.
+ */
+void
+efc_sm_disable(struct efc_sm_ctx_s *ctx)
+{
+ ctx->current_state = NULL;
+}
+
+const char *efc_sm_event_name(enum efc_sm_event_e evt)
+{
+ switch (evt) {
+ case EFC_EVT_ENTER:
+ return "EFC_EVT_ENTER";
+ case EFC_EVT_REENTER:
+ return "EFC_EVT_REENTER";
+ case EFC_EVT_EXIT:
+ return "EFC_EVT_EXIT";
+ case EFC_EVT_SHUTDOWN:
+ return "EFC_EVT_SHUTDOWN";
+ case EFC_EVT_RESPONSE:
+ return "EFC_EVT_RESPONSE";
+ case EFC_EVT_RESUME:
+ return "EFC_EVT_RESUME";
+ case EFC_EVT_TIMER_EXPIRED:
+ return "EFC_EVT_TIMER_EXPIRED";
+ case EFC_EVT_ERROR:
+ return "EFC_EVT_ERROR";
+ case EFC_EVT_SRRS_ELS_REQ_OK:
+ return "EFC_EVT_SRRS_ELS_REQ_OK";
+ case EFC_EVT_SRRS_ELS_CMPL_OK:
+ return "EFC_EVT_SRRS_ELS_CMPL_OK";
+ case EFC_EVT_SRRS_ELS_REQ_FAIL:
+ return "EFC_EVT_SRRS_ELS_REQ_FAIL";
+ case EFC_EVT_SRRS_ELS_CMPL_FAIL:
+ return "EFC_EVT_SRRS_ELS_CMPL_FAIL";
+ case EFC_EVT_SRRS_ELS_REQ_RJT:
+ return "EFC_EVT_SRRS_ELS_REQ_RJT";
+ case EFC_EVT_NODE_ATTACH_OK:
+ return "EFC_EVT_NODE_ATTACH_OK";
+ case EFC_EVT_NODE_ATTACH_FAIL:
+ return "EFC_EVT_NODE_ATTACH_FAIL";
+ case EFC_EVT_NODE_FREE_OK:
+ return "EFC_EVT_NODE_FREE_OK";
+ case EFC_EVT_ELS_REQ_TIMEOUT:
+ return "EFC_EVT_ELS_REQ_TIMEOUT";
+ case EFC_EVT_ELS_REQ_ABORTED:
+ return "EFC_EVT_ELS_REQ_ABORTED";
+ case EFC_EVT_ABORT_ELS:
+ return "EFC_EVT_ABORT_ELS";
+ case EFC_EVT_ELS_ABORT_CMPL:
+ return "EFC_EVT_ELS_ABORT_CMPL";
+
+ case EFC_EVT_DOMAIN_FOUND:
+ return "EFC_EVT_DOMAIN_FOUND";
+ case EFC_EVT_DOMAIN_ALLOC_OK:
+ return "EFC_EVT_DOMAIN_ALLOC_OK";
+ case EFC_EVT_DOMAIN_ALLOC_FAIL:
+ return "EFC_EVT_DOMAIN_ALLOC_FAIL";
+ case EFC_EVT_DOMAIN_REQ_ATTACH:
+ return "EFC_EVT_DOMAIN_REQ_ATTACH";
+ case EFC_EVT_DOMAIN_ATTACH_OK:
+ return "EFC_EVT_DOMAIN_ATTACH_OK";
+ case EFC_EVT_DOMAIN_ATTACH_FAIL:
+ return "EFC_EVT_DOMAIN_ATTACH_FAIL";
+ case EFC_EVT_DOMAIN_LOST:
+ return "EFC_EVT_DOMAIN_LOST";
+ case EFC_EVT_DOMAIN_FREE_OK:
+ return "EFC_EVT_DOMAIN_FREE_OK";
+ case EFC_EVT_DOMAIN_FREE_FAIL:
+ return "EFC_EVT_DOMAIN_FREE_FAIL";
+ case EFC_EVT_HW_DOMAIN_REQ_ATTACH:
+ return "EFC_EVT_HW_DOMAIN_REQ_ATTACH";
+ case EFC_EVT_HW_DOMAIN_REQ_FREE:
+ return "EFC_EVT_HW_DOMAIN_REQ_FREE";
+ case EFC_EVT_ALL_CHILD_NODES_FREE:
+ return "EFC_EVT_ALL_CHILD_NODES_FREE";
+
+ case EFC_EVT_SPORT_ALLOC_OK:
+ return "EFC_EVT_SPORT_ALLOC_OK";
+ case EFC_EVT_SPORT_ALLOC_FAIL:
+ return "EFC_EVT_SPORT_ALLOC_FAIL";
+ case EFC_EVT_SPORT_ATTACH_OK:
+ return "EFC_EVT_SPORT_ATTACH_OK";
+ case EFC_EVT_SPORT_ATTACH_FAIL:
+ return "EFC_EVT_SPORT_ATTACH_FAIL";
+ case EFC_EVT_SPORT_FREE_OK:
+ return "EFC_EVT_SPORT_FREE_OK";
+ case EFC_EVT_SPORT_FREE_FAIL:
+ return "EFC_EVT_SPORT_FREE_FAIL";
+ case EFC_EVT_SPORT_TOPOLOGY_NOTIFY:
+ return "EFC_EVT_SPORT_TOPOLOGY_NOTIFY";
+ case EFC_EVT_HW_PORT_ALLOC_OK:
+ return "EFC_EVT_HW_PORT_ALLOC_OK";
+ case EFC_EVT_HW_PORT_ALLOC_FAIL:
+ return "EFC_EVT_HW_PORT_ALLOC_FAIL";
+ case EFC_EVT_HW_PORT_ATTACH_OK:
+ return "EFC_EVT_HW_PORT_ATTACH_OK";
+ case EFC_EVT_HW_PORT_REQ_ATTACH:
+ return "EFC_EVT_HW_PORT_REQ_ATTACH";
+ case EFC_EVT_HW_PORT_REQ_FREE:
+ return "EFC_EVT_HW_PORT_REQ_FREE";
+ case EFC_EVT_HW_PORT_FREE_OK:
+ return "EFC_EVT_HW_PORT_FREE_OK";
+
+ case EFC_EVT_NODE_FREE_FAIL:
+ return "EFC_EVT_NODE_FREE_FAIL";
+
+ case EFC_EVT_ABTS_RCVD:
+ return "EFC_EVT_ABTS_RCVD";
+
+ case EFC_EVT_NODE_MISSING:
+ return "EFC_EVT_NODE_MISSING";
+ case EFC_EVT_NODE_REFOUND:
+ return "EFC_EVT_NODE_REFOUND";
+ case EFC_EVT_SHUTDOWN_IMPLICIT_LOGO:
+ return "EFC_EVT_SHUTDOWN_IMPLICIT_LOGO";
+ case EFC_EVT_SHUTDOWN_EXPLICIT_LOGO:
+ return "EFC_EVT_SHUTDOWN_EXPLICIT_LOGO";
+
+ case EFC_EVT_ELS_FRAME:
+ return "EFC_EVT_ELS_FRAME";
+ case EFC_EVT_PLOGI_RCVD:
+ return "EFC_EVT_PLOGI_RCVD";
+ case EFC_EVT_FLOGI_RCVD:
+ return "EFC_EVT_FLOGI_RCVD";
+ case EFC_EVT_LOGO_RCVD:
+ return "EFC_EVT_LOGO_RCVD";
+ case EFC_EVT_PRLI_RCVD:
+ return "EFC_EVT_PRLI_RCVD";
+ case EFC_EVT_PRLO_RCVD:
+ return "EFC_EVT_PRLO_RCVD";
+ case EFC_EVT_PDISC_RCVD:
+ return "EFC_EVT_PDISC_RCVD";
+ case EFC_EVT_FDISC_RCVD:
+ return "EFC_EVT_FDISC_RCVD";
+ case EFC_EVT_ADISC_RCVD:
+ return "EFC_EVT_ADISC_RCVD";
+ case EFC_EVT_RSCN_RCVD:
+ return "EFC_EVT_RSCN_RCVD";
+ case EFC_EVT_SCR_RCVD:
+ return "EFC_EVT_SCR_RCVD";
+ case EFC_EVT_ELS_RCVD:
+ return "EFC_EVT_ELS_RCVD";
+ case EFC_EVT_LAST:
+ return "EFC_EVT_LAST";
+ case EFC_EVT_FCP_CMD_RCVD:
+ return "EFC_EVT_FCP_CMD_RCVD";
+
+ case EFC_EVT_RFT_ID_RCVD:
+ return "EFC_EVT_RFT_ID_RCVD";
+ case EFC_EVT_RFF_ID_RCVD:
+ return "EFC_EVT_RFF_ID_RCVD";
+ case EFC_EVT_GNN_ID_RCVD:
+ return "EFC_EVT_GNN_ID_RCVD";
+ case EFC_EVT_GPN_ID_RCVD:
+ return "EFC_EVT_GPN_ID_RCVD";
+ case EFC_EVT_GFPN_ID_RCVD:
+ return "EFC_EVT_GFPN_ID_RCVD";
+ case EFC_EVT_GFF_ID_RCVD:
+ return "EFC_EVT_GFF_ID_RCVD";
+ case EFC_EVT_GID_FT_RCVD:
+ return "EFC_EVT_GID_FT_RCVD";
+ case EFC_EVT_GID_PT_RCVD:
+ return "EFC_EVT_GID_PT_RCVD";
+ case EFC_EVT_RPN_ID_RCVD:
+ return "EFC_EVT_RPN_ID_RCVD";
+ case EFC_EVT_RNN_ID_RCVD:
+ return "EFC_EVT_RNN_ID_RCVD";
+ case EFC_EVT_RCS_ID_RCVD:
+ return "EFC_EVT_RCS_ID_RCVD";
+ case EFC_EVT_RSNN_NN_RCVD:
+ return "EFC_EVT_RSNN_NN_RCVD";
+ case EFC_EVT_RSPN_ID_RCVD:
+ return "EFC_EVT_RSPN_ID_RCVD";
+ case EFC_EVT_RHBA_RCVD:
+ return "EFC_EVT_RHBA_RCVD";
+ case EFC_EVT_RPA_RCVD:
+ return "EFC_EVT_RPA_RCVD";
+
+ case EFC_EVT_GIDPT_DELAY_EXPIRED:
+ return "EFC_EVT_GIDPT_DELAY_EXPIRED";
+
+ case EFC_EVT_ABORT_IO:
+ return "EFC_EVT_ABORT_IO";
+ case EFC_EVT_ABORT_IO_NO_RESP:
+ return "EFC_EVT_ABORT_IO_NO_RESP";
+ case EFC_EVT_IO_CMPL:
+ return "EFC_EVT_IO_CMPL";
+ case EFC_EVT_IO_CMPL_ERRORS:
+ return "EFC_EVT_IO_CMPL_ERRORS";
+ case EFC_EVT_RESP_CMPL:
+ return "EFC_EVT_RESP_CMPL";
+ case EFC_EVT_ABORT_CMPL:
+ return "EFC_EVT_ABORT_CMPL";
+ case EFC_EVT_NODE_ACTIVE_IO_LIST_EMPTY:
+ return "EFC_EVT_NODE_ACTIVE_IO_LIST_EMPTY";
+ case EFC_EVT_NODE_DEL_INI_COMPLETE:
+ return "EFC_EVT_NODE_DEL_INI_COMPLETE";
+ case EFC_EVT_NODE_DEL_TGT_COMPLETE:
+ return "EFC_EVT_NODE_DEL_TGT_COMPLETE";
+ case EFC_EVT_IO_ABORTED_BY_TMF:
+ return "EFC_EVT_IO_ABORTED_BY_TMF";
+ case EFC_EVT_IO_ABORT_IGNORED:
+ return "EFC_EVT_IO_ABORT_IGNORED";
+ case EFC_EVT_IO_FIRST_BURST:
+ return "EFC_EVT_IO_FIRST_BURST";
+ case EFC_EVT_IO_FIRST_BURST_ERR:
+ return "EFC_EVT_IO_FIRST_BURST_ERR";
+ case EFC_EVT_IO_FIRST_BURST_ABORTED:
+ return "EFC_EVT_IO_FIRST_BURST_ABORTED";
+
+ default:
+ break;
+ }
+ return "unknown";
+}
diff --git a/drivers/scsi/elx/libefc/efc_sm.h b/drivers/scsi/elx/libefc/efc_sm.h
new file mode 100644
index 000000000000..4e9370a8e362
--- /dev/null
+++ b/drivers/scsi/elx/libefc/efc_sm.h
@@ -0,0 +1,171 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2019 Broadcom. All Rights Reserved. The term
+ * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
+ *
+ */
+
+/**
+ * Generic state machine framework declarations.
+ */
+
+#ifndef _EFC_SM_H
+#define _EFC_SM_H
+
+/**
+ * State Machine (SM) IDs.
+ */
+enum {
+ EFC_SM_COMMON = 0,
+ EFC_SM_DOMAIN,
+ EFC_SM_PORT,
+ EFC_SM_LOGIN,
+ EFC_SM_LAST
+};
+
+#define EFC_SM_EVENT_SHIFT 24
+#define EFC_SM_EVENT_START(id) ((id) << EFC_SM_EVENT_SHIFT)
+
+/* String format of the above enums. */
+extern const char *efc_sm_id[];
+
+struct efc_sm_ctx_s;
+
+/*
+ * State Machine events.
+ */
+enum efc_sm_event_e {
+ /* Common Events */
+ EFC_EVT_ENTER = EFC_SM_EVENT_START(EFC_SM_COMMON),
+ EFC_EVT_REENTER,
+ EFC_EVT_EXIT,
+ EFC_EVT_SHUTDOWN,
+ EFC_EVT_ALL_CHILD_NODES_FREE,
+ EFC_EVT_RESUME,
+ EFC_EVT_TIMER_EXPIRED,
+
+ /* Domain Events */
+ EFC_EVT_RESPONSE = EFC_SM_EVENT_START(EFC_SM_DOMAIN),
+ EFC_EVT_ERROR,
+
+ EFC_EVT_DOMAIN_FOUND,
+ EFC_EVT_DOMAIN_ALLOC_OK,
+ EFC_EVT_DOMAIN_ALLOC_FAIL,
+ EFC_EVT_DOMAIN_REQ_ATTACH,
+ EFC_EVT_DOMAIN_ATTACH_OK,
+ EFC_EVT_DOMAIN_ATTACH_FAIL,
+ EFC_EVT_DOMAIN_LOST,
+ EFC_EVT_DOMAIN_FREE_OK,
+ EFC_EVT_DOMAIN_FREE_FAIL,
+ EFC_EVT_HW_DOMAIN_REQ_ATTACH,
+ EFC_EVT_HW_DOMAIN_REQ_FREE,
+
+ /* Sport Events */
+ EFC_EVT_SPORT_ALLOC_OK = EFC_SM_EVENT_START(EFC_SM_PORT),
+ EFC_EVT_SPORT_ALLOC_FAIL,
+ EFC_EVT_SPORT_ATTACH_OK,
+ EFC_EVT_SPORT_ATTACH_FAIL,
+ EFC_EVT_SPORT_FREE_OK,
+ EFC_EVT_SPORT_FREE_FAIL,
+ EFC_EVT_SPORT_TOPOLOGY_NOTIFY,
+ EFC_EVT_HW_PORT_ALLOC_OK,
+ EFC_EVT_HW_PORT_ALLOC_FAIL,
+ EFC_EVT_HW_PORT_ATTACH_OK,
+ EFC_EVT_HW_PORT_REQ_ATTACH,
+ EFC_EVT_HW_PORT_REQ_FREE,
+ EFC_EVT_HW_PORT_FREE_OK,
+
+ /* Login Events */
+ EFC_EVT_SRRS_ELS_REQ_OK = EFC_SM_EVENT_START(EFC_SM_LOGIN),
+ EFC_EVT_SRRS_ELS_CMPL_OK,
+ EFC_EVT_SRRS_ELS_REQ_FAIL,
+ EFC_EVT_SRRS_ELS_CMPL_FAIL,
+ EFC_EVT_SRRS_ELS_REQ_RJT,
+ EFC_EVT_NODE_ATTACH_OK,
+ EFC_EVT_NODE_ATTACH_FAIL,
+ EFC_EVT_NODE_FREE_OK,
+ EFC_EVT_NODE_FREE_FAIL,
+ EFC_EVT_ELS_FRAME,
+ EFC_EVT_ELS_REQ_TIMEOUT,
+ EFC_EVT_ELS_REQ_ABORTED,
+ /* request an ELS IO be aborted */
+ EFC_EVT_ABORT_ELS,
+ /* ELS abort process complete */
+ EFC_EVT_ELS_ABORT_CMPL,
+
+ EFC_EVT_ABTS_RCVD,
+
+ /* node is not in the GID_PT payload */
+ EFC_EVT_NODE_MISSING,
+ /* node is allocated and in the GID_PT payload */
+ EFC_EVT_NODE_REFOUND,
+ /* node shutting down due to PLOGI recvd (implicit logo) */
+ EFC_EVT_SHUTDOWN_IMPLICIT_LOGO,
+ /* node shutting down due to LOGO recvd/sent (explicit logo) */
+ EFC_EVT_SHUTDOWN_EXPLICIT_LOGO,
+
+ EFC_EVT_PLOGI_RCVD,
+ EFC_EVT_FLOGI_RCVD,
+ EFC_EVT_LOGO_RCVD,
+ EFC_EVT_PRLI_RCVD,
+ EFC_EVT_PRLO_RCVD,
+ EFC_EVT_PDISC_RCVD,
+ EFC_EVT_FDISC_RCVD,
+ EFC_EVT_ADISC_RCVD,
+ EFC_EVT_RSCN_RCVD,
+ EFC_EVT_SCR_RCVD,
+ EFC_EVT_ELS_RCVD,
+
+ EFC_EVT_FCP_CMD_RCVD,
+
+ /* Used by fabric emulation */
+ EFC_EVT_RFT_ID_RCVD,
+ EFC_EVT_RFF_ID_RCVD,
+ EFC_EVT_GNN_ID_RCVD,
+ EFC_EVT_GPN_ID_RCVD,
+ EFC_EVT_GFPN_ID_RCVD,
+ EFC_EVT_GFF_ID_RCVD,
+ EFC_EVT_GID_FT_RCVD,
+ EFC_EVT_GID_PT_RCVD,
+ EFC_EVT_RPN_ID_RCVD,
+ EFC_EVT_RNN_ID_RCVD,
+ EFC_EVT_RCS_ID_RCVD,
+ EFC_EVT_RSNN_NN_RCVD,
+ EFC_EVT_RSPN_ID_RCVD,
+ EFC_EVT_RHBA_RCVD,
+ EFC_EVT_RPA_RCVD,
+
+ EFC_EVT_GIDPT_DELAY_EXPIRED,
+
+ /* SCSI Target Server events */
+ EFC_EVT_ABORT_IO,
+ EFC_EVT_ABORT_IO_NO_RESP,
+ EFC_EVT_IO_CMPL,
+ EFC_EVT_IO_CMPL_ERRORS,
+ EFC_EVT_RESP_CMPL,
+ EFC_EVT_ABORT_CMPL,
+ EFC_EVT_NODE_ACTIVE_IO_LIST_EMPTY,
+ EFC_EVT_NODE_DEL_INI_COMPLETE,
+ EFC_EVT_NODE_DEL_TGT_COMPLETE,
+ EFC_EVT_IO_ABORTED_BY_TMF,
+ EFC_EVT_IO_ABORT_IGNORED,
+ EFC_EVT_IO_FIRST_BURST,
+ EFC_EVT_IO_FIRST_BURST_ERR,
+ EFC_EVT_IO_FIRST_BURST_ABORTED,
+
+ /* Must be last */
+ EFC_EVT_LAST
+};
+
+int
+efc_sm_post_event(struct efc_sm_ctx_s *ctx,
+ enum efc_sm_event_e evt, void *data);
+void
+efc_sm_transition(struct efc_sm_ctx_s *ctx,
+ void *(*state)(struct efc_sm_ctx_s *ctx,
+ enum efc_sm_event_e evt, void *arg),
+ void *data);
+void efc_sm_disable(struct efc_sm_ctx_s *ctx);
+const char *efc_sm_event_name(enum efc_sm_event_e evt);
+
+#endif /* ! _EFC_SM_H */
--
2.13.7
next prev parent reply other threads:[~2019-10-23 21:56 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-23 21:55 [PATCH 00/32] [NEW] efct: Broadcom (Emulex) FC Target driver James Smart
2019-10-23 21:55 ` [PATCH 01/32] elx: libefc_sli: SLI-4 register offsets and field definitions James Smart
2019-10-24 16:22 ` Daniel Wagner
2019-10-25 23:04 ` James Smart
2019-10-23 21:55 ` [PATCH 02/32] elx: libefc_sli: SLI Descriptors and Queue entries James Smart
2019-10-25 9:59 ` Daniel Wagner
2019-10-25 23:00 ` James Smart
2019-10-23 21:55 ` [PATCH 03/32] elx: libefc_sli: Data structures and defines for mbox commands James Smart
2019-10-25 11:19 ` Daniel Wagner
2019-10-25 12:20 ` Steffen Maier
2019-10-25 22:10 ` James Smart
2019-10-25 22:42 ` James Smart
2019-10-23 21:55 ` [PATCH 04/32] elx: libefc_sli: queue create/destroy/parse routines James Smart
2019-10-25 15:35 ` Daniel Wagner
2019-10-25 22:24 ` James Smart
2019-10-23 21:55 ` [PATCH 05/32] elx: libefc_sli: Populate and post different WQEs James Smart
2019-10-23 21:55 ` [PATCH 06/32] elx: libefc_sli: bmbx routines and SLI config commands James Smart
2019-10-23 21:55 ` [PATCH 07/32] elx: libefc_sli: APIs to setup SLI library James Smart
2019-10-23 21:55 ` James Smart [this message]
2019-10-23 21:55 ` [PATCH 09/32] elx: libefc: Emulex FC discovery library APIs and definitions James Smart
2019-10-23 21:55 ` [PATCH 10/32] elx: libefc: FC Domain state machine interfaces James Smart
2019-10-23 21:55 ` [PATCH 11/32] elx: libefc: SLI and FC PORT " James Smart
2019-10-23 21:55 ` [PATCH 12/32] elx: libefc: Remote node " James Smart
2019-10-23 21:55 ` [PATCH 13/32] elx: libefc: Fabric " James Smart
2019-10-23 21:55 ` [PATCH 14/32] elx: libefc: FC node ELS and state handling James Smart
2019-10-23 21:55 ` [PATCH 15/32] elx: efct: Data structures and defines for hw operations James Smart
2019-10-23 21:55 ` [PATCH 16/32] elx: efct: Driver initialization routines James Smart
2019-10-23 21:55 ` [PATCH 17/32] elx: efct: Hardware queues creation and deletion James Smart
2019-10-23 21:55 ` [PATCH 18/32] elx: efct: RQ buffer, memory pool allocation and deallocation APIs James Smart
2019-10-23 21:55 ` [PATCH 19/32] elx: efct: Hardware IO and SGL initialization James Smart
2019-10-23 21:55 ` [PATCH 20/32] elx: efct: Hardware queues processing James Smart
2019-10-23 21:55 ` [PATCH 21/32] elx: efct: Unsolicited FC frame processing routines James Smart
2019-10-23 21:55 ` [PATCH 22/32] elx: efct: Extended link Service IO handling James Smart
2019-10-23 21:55 ` [PATCH 23/32] elx: efct: SCSI IO handling routines James Smart
2019-10-23 21:55 ` [PATCH 24/32] elx: efct: LIO backend interface routines James Smart
2019-10-24 22:27 ` Bart Van Assche
2019-10-28 17:49 ` James Smart
2019-10-28 18:31 ` Bart Van Assche
2019-10-23 21:55 ` [PATCH 25/32] elx: efct: Hardware IO submission routines James Smart
2019-10-23 21:55 ` [PATCH 26/32] elx: efct: link statistics and SFP data James Smart
2019-10-23 21:55 ` [PATCH 27/32] elx: efct: xport and hardware teardown routines James Smart
2019-10-23 21:55 ` [PATCH 28/32] elx: efct: IO timeout handling routines James Smart
2019-10-23 21:55 ` [PATCH 29/32] elx: efct: Firmware update, async link processing James Smart
2019-10-23 21:55 ` [PATCH 30/32] elx: efct: scsi_transport_fc host interface support James Smart
2019-10-23 21:55 ` [PATCH 31/32] elx: efct: Add Makefile and Kconfig for efct driver James Smart
2019-10-25 15:55 ` Daniel Wagner
2019-10-25 22:47 ` James Smart
2019-10-23 21:55 ` [PATCH 32/32] elx: efct: Tie into kernel Kconfig and build process James Smart
2019-10-26 0:34 ` kbuild test robot
2019-10-26 0:34 ` kbuild test robot
2019-10-26 0:39 ` Randy Dunlap
2019-10-26 0:39 ` Randy Dunlap
2019-10-26 14:13 ` kbuild test robot
2019-10-26 14:13 ` kbuild test robot
2019-10-26 14:13 ` [RFC PATCH] elx: efct: efct_libefc_templ can be static kbuild test robot
2019-10-26 14:13 ` kbuild test robot
2019-10-25 15:56 ` [PATCH 00/32] [NEW] efct: Broadcom (Emulex) FC Target driver Daniel Wagner
2019-10-25 22:31 ` James Smart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191023215557.12581-9-jsmart2021@gmail.com \
--to=jsmart2021@gmail.com \
--cc=linux-scsi@vger.kernel.org \
--cc=ram.vegesna@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.