Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7df5358d authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'qed-iscsi'

Manish Rangankar says:

====================
Add QLogic FastLinQ iSCSI (qedi) driver.

This series introduces hardware offload iSCSI initiator driver for the
41000 Series Converged Network Adapters (579xx chip) by Qlogic. The overall
driver design includes a common module ('qed') and protocol specific
dependent modules ('qedi' for iSCSI).

This is an open iSCSI driver, modifications to open iSCSI user components
'iscsid', 'iscsiuio', etc. are required for the solution to work. The user
space changes are also in the process of being submitted.

    https://groups.google.com/forum/#!forum/open-iscsi



The 'qed' common module, under drivers/net/ethernet/qlogic/qed/, is
enhanced with functionality required for the iSCSI support. This series
is based on:

    net tree base: Merge of net and net-next as of 11/29/2016

Changes from RFC v2:

  1. qedi patches are squashed into single patch to prevent krobot
     warning.
  2. Fixed 'hw_p_cpuq' incompatible pointer type.
  3. Fixed sparse incompatible types in comparison expression.
  4. Misc fixes with latest 'checkpatch --strict' option.
  5. Remove int_mode option from MODULE_PARAM.
  6. Prefix all MODULE_PARAM params with qedi_*.
  7. Use CONFIG_QED_ISCSI instead of CONFIG_QEDI
  8. Added bad task mem access fix.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents b14945ac 1d6cff4f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -110,4 +110,7 @@ config QEDE
config QED_RDMA
	bool

config QED_ISCSI
	bool

endif # NET_VENDOR_QLOGIC
+1 −0
Original line number Diff line number Diff line
@@ -6,3 +6,4 @@ qed-y := qed_cxt.o qed_dev.o qed_hw.o qed_init_fw_funcs.o qed_init_ops.o \
qed-$(CONFIG_QED_SRIOV) += qed_sriov.o qed_vf.o
qed-$(CONFIG_QED_LL2) += qed_ll2.o
qed-$(CONFIG_QED_RDMA) += qed_roce.o
qed-$(CONFIG_QED_ISCSI) += qed_iscsi.o qed_ooo.o
+7 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ extern const struct qed_common_ops qed_common_ops_pass;

#define QED_WFQ_UNIT	100

#define ISCSI_BDQ_ID(_port_id) (_port_id)
#define QED_WID_SIZE            (1024)
#define QED_PF_DEMS_SIZE        (4)

@@ -382,7 +383,9 @@ struct qed_hwfn {
	/* Protocol related */
	bool				using_ll2;
	struct qed_ll2_info		*p_ll2_info;
	struct qed_ooo_info		*p_ooo_info;
	struct qed_rdma_info		*p_rdma_info;
	struct qed_iscsi_info		*p_iscsi_info;
	struct qed_pf_params		pf_params;

	bool b_rdma_enabled_in_prs;
@@ -581,6 +584,8 @@ struct qed_dev {
	/* Linux specific here */
	struct  qede_dev		*edev;
	struct  pci_dev			*pdev;
	u32 flags;
#define QED_FLAG_STORAGE_STARTED	(BIT(0))
	int				msg_enable;

	struct pci_params		pci_params;
@@ -594,6 +599,7 @@ struct qed_dev {
	union {
		struct qed_common_cb_ops	*common;
		struct qed_eth_cb_ops		*eth;
		struct qed_iscsi_cb_ops		*iscsi;
	} protocol_ops;
	void				*ops_cookie;

@@ -603,7 +609,7 @@ struct qed_dev {
	struct qed_cb_ll2_info		*ll2;
	u8				ll2_mac_address[ETH_ALEN];
#endif

	DECLARE_HASHTABLE(connections, 10);
	const struct firmware		*firmware;

	u32 rdma_max_sge;
+22 −0
Original line number Diff line number Diff line
@@ -29,8 +29,10 @@
#include "qed_hw.h"
#include "qed_init_ops.h"
#include "qed_int.h"
#include "qed_iscsi.h"
#include "qed_ll2.h"
#include "qed_mcp.h"
#include "qed_ooo.h"
#include "qed_reg_addr.h"
#include "qed_sp.h"
#include "qed_sriov.h"
@@ -146,6 +148,10 @@ void qed_resc_free(struct qed_dev *cdev)
#ifdef CONFIG_QED_LL2
		qed_ll2_free(p_hwfn, p_hwfn->p_ll2_info);
#endif
		if (p_hwfn->hw_info.personality == QED_PCI_ISCSI) {
			qed_iscsi_free(p_hwfn, p_hwfn->p_iscsi_info);
			qed_ooo_free(p_hwfn, p_hwfn->p_ooo_info);
		}
		qed_iov_free(p_hwfn);
		qed_dmae_info_free(p_hwfn);
		qed_dcbx_info_free(p_hwfn, p_hwfn->p_dcbx_info);
@@ -402,6 +408,8 @@ int qed_qm_reconf(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)

int qed_resc_alloc(struct qed_dev *cdev)
{
	struct qed_iscsi_info *p_iscsi_info;
	struct qed_ooo_info *p_ooo_info;
#ifdef CONFIG_QED_LL2
	struct qed_ll2_info *p_ll2_info;
#endif
@@ -507,6 +515,16 @@ int qed_resc_alloc(struct qed_dev *cdev)
			p_hwfn->p_ll2_info = p_ll2_info;
		}
#endif
		if (p_hwfn->hw_info.personality == QED_PCI_ISCSI) {
			p_iscsi_info = qed_iscsi_alloc(p_hwfn);
			if (!p_iscsi_info)
				goto alloc_no_mem;
			p_hwfn->p_iscsi_info = p_iscsi_info;
			p_ooo_info = qed_ooo_alloc(p_hwfn);
			if (!p_ooo_info)
				goto alloc_no_mem;
			p_hwfn->p_ooo_info = p_ooo_info;
		}

		/* DMA info initialization */
		rc = qed_dmae_info_alloc(p_hwfn);
@@ -560,6 +578,10 @@ void qed_resc_setup(struct qed_dev *cdev)
		if (p_hwfn->using_ll2)
			qed_ll2_setup(p_hwfn, p_hwfn->p_ll2_info);
#endif
		if (p_hwfn->hw_info.personality == QED_PCI_ISCSI) {
			qed_iscsi_setup(p_hwfn, p_hwfn->p_iscsi_info);
			qed_ooo_setup(p_hwfn, p_hwfn->p_ooo_info);
		}
	}
}

+1277 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading