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

Commit eaae5267 authored by John Soni Jose's avatar John Soni Jose Committed by James Bottomley
Browse files

[SCSI] be2iscsi: Fix support for handling CQ_CREATE V2 version.



For latest adapters, V2 version of cq_create MBX_CMD is to be used. When
driver is loaded depending on the adapter type appropriate cq_create command
will be called.

Signed-off-by: default avatarJohn Soni Jose <sony.john-n@emulex.com>
Signed-off-by: default avatarJayamohan Kallickal <jayamohan.kallickal@emulex.com>
Reviewed-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 22abeef0
Loading
Loading
Loading
Loading
+27 −11
Original line number Diff line number Diff line
@@ -649,8 +649,22 @@ int beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl,
			OPCODE_COMMON_CQ_CREATE, sizeof(*req));

	req->num_pages = cpu_to_le16(PAGES_4K_SPANNED(q_mem->va, q_mem->size));

	AMAP_SET_BITS(struct amap_cq_context, coalescwm, ctxt, coalesce_wm);
	if (chip_skh_r(ctrl->pdev)) {
		req->hdr.version = MBX_CMD_VER2;
		req->page_size = 1;
		AMAP_SET_BITS(struct amap_cq_context_v2, coalescwm,
			      ctxt, coalesce_wm);
		AMAP_SET_BITS(struct amap_cq_context_v2, nodelay,
			      ctxt, no_delay);
		AMAP_SET_BITS(struct amap_cq_context_v2, count, ctxt,
			      __ilog2_u32(cq->len / 256));
		AMAP_SET_BITS(struct amap_cq_context_v2, valid, ctxt, 1);
		AMAP_SET_BITS(struct amap_cq_context_v2, eventable, ctxt, 1);
		AMAP_SET_BITS(struct amap_cq_context_v2, eqid, ctxt, eq->id);
		AMAP_SET_BITS(struct amap_cq_context_v2, armed, ctxt, 1);
	} else {
		AMAP_SET_BITS(struct amap_cq_context, coalescwm,
			      ctxt, coalesce_wm);
		AMAP_SET_BITS(struct amap_cq_context, nodelay, ctxt, no_delay);
		AMAP_SET_BITS(struct amap_cq_context, count, ctxt,
			      __ilog2_u32(cq->len / 256));
@@ -661,6 +675,8 @@ int beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl,
		AMAP_SET_BITS(struct amap_cq_context, armed, ctxt, 1);
		AMAP_SET_BITS(struct amap_cq_context, func, ctxt,
			      PCI_FUNC(ctrl->pdev->devfn));
	}

	be_dws_cpu_to_le(ctxt, sizeof(req->context));

	be_cmd_page_addrs_prepare(req->pages, ARRAY_SIZE(req->pages), q_mem);
+24 −2
Original line number Diff line number Diff line
@@ -58,6 +58,9 @@ struct be_mcc_wrb {
#define CQE_STATUS_EXTD_MASK 0xFFFF
#define CQE_STATUS_EXTD_SHIFT 16		/* bits 0 - 15 */

/* MBOX Command VER */
#define MBX_CMD_VER2	0x02

struct be_mcc_compl {
	u32 status;		/* dword 0 */
	u32 tag0;		/* dword 1 */
@@ -183,7 +186,8 @@ struct be_cmd_req_hdr {
	u8 domain;		/* dword 0 */
	u32 timeout;		/* dword 1 */
	u32 request_length;	/* dword 2 */
	u32 rsvd0;		/* dword 3 */
	u8 version;		/* dword 3 */
	u8 rsvd0[3];		/* dword 3 */
};

struct be_cmd_resp_hdr {
@@ -483,10 +487,28 @@ struct amap_cq_context {
	u8 rsvd5[32];		/* dword 3 */
} __packed;

struct amap_cq_context_v2 {
	u8 rsvd0[12];   /* dword 0 */
	u8 coalescwm[2];    /* dword 0 */
	u8 nodelay;     /* dword 0 */
	u8 rsvd1[12];   /* dword 0 */
	u8 count[2];    /* dword 0 */
	u8 valid;       /* dword 0 */
	u8 rsvd2;       /* dword 0 */
	u8 eventable;   /* dword 0 */
	u8 eqid[16];    /* dword 1 */
	u8 rsvd3[15];   /* dword 1 */
	u8 armed;       /* dword 1 */
	u8 cqecount[16];/* dword 2 */
	u8 rsvd4[16];   /* dword 2 */
	u8 rsvd5[32];   /* dword 3 */
};

struct be_cmd_req_cq_create {
	struct be_cmd_req_hdr hdr;
	u16 num_pages;
	u16 rsvd0;
	u8 page_size;
	u8 rsvd0;
	u8 context[sizeof(struct amap_cq_context) / 8];
	struct phys_addr pages[4];
} __packed;
+1 −0
Original line number Diff line number Diff line
@@ -265,6 +265,7 @@ struct invalidate_command_table {
	unsigned short cid;
} __packed;

#define chip_skh_r(pdev)	(pdev->device == OC_SKH_ID1)
struct beiscsi_hba {
	struct hba_parameters params;
	struct hwi_controller *phwi_ctrlr;