Blame SOURCES/0136-iscsiuio-Correct-the-handling-of-Multi-Function-mode.patch

50b97d
From 254ad4686ab8206b57f94ce13b0697cb9fc884b7 Mon Sep 17 00:00:00 2001
50b97d
From: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com>
50b97d
Date: Tue, 16 Jun 2015 08:52:59 -0400
50b97d
Subject: [PATCH 136/160] iscsiuio: Correct the handling of Multi Function mode
50b97d
50b97d
Handle the Multi Function mode correctly when dealing with bnx2x driver.
50b97d
50b97d
Signed-off-by: Adheer Chandravanshi <adheer.chandravanshi@qlogic.com>
50b97d
---
50b97d
 iscsiuio/src/unix/libs/bnx2x.c | 23 ++++++++++++++++-------
50b97d
 1 file changed, 16 insertions(+), 7 deletions(-)
50b97d
50b97d
diff --git a/iscsiuio/src/unix/libs/bnx2x.c b/iscsiuio/src/unix/libs/bnx2x.c
50b97d
index 1495762..a364d76 100644
50b97d
--- a/iscsiuio/src/unix/libs/bnx2x.c
50b97d
+++ b/iscsiuio/src/unix/libs/bnx2x.c
50b97d
@@ -672,6 +672,9 @@ static int bnx2x_open(nic_t *nic)
50b97d
 	uint32_t bus;
50b97d
 	uint32_t slot;
50b97d
 	uint32_t func;
50b97d
+	uint32_t mode;
50b97d
+	__u32 proto_offset;
50b97d
+	__u32 ovtag_offset;
50b97d
 
50b97d
 	/*  Sanity Check: validate the parameters */
50b97d
 	if (nic == NULL) {
50b97d
@@ -1002,9 +1005,11 @@ static int bnx2x_open(nic_t *nic)
50b97d
 			mf_cfg_addr = bp->shmem_base + 0x7e4;
50b97d
 
50b97d
 		/* shared_feat_cfg.config */
50b97d
-		val = bnx2x_rd32(bp, bp->shmem_base + 0x354);
50b97d
-		/* SI mode */
50b97d
-		if ((val & 0x700) == 0x300) {
50b97d
+		mode = bnx2x_rd32(bp, bp->shmem_base + 0x354);
50b97d
+		mode &= 0x700;
50b97d
+		LOG_DEBUG(PFX "%s: mode = 0x%x", nic->log_name, mode);
50b97d
+		switch (mode) {
50b97d
+		case 0x300: /* SI mode */
50b97d
 			mac_offset = 0xe4 + (bp->func * 0x28) + 4;
50b97d
 			val = bnx2x_rd32(bp, mf_cfg_addr + mac_offset);
50b97d
 			mac[0] = (__u8) (val >> 8);
50b97d
@@ -1027,9 +1032,13 @@ static int bnx2x_open(nic_t *nic)
50b97d
 				rc = -ENOTSUP;
50b97d
 				goto open_error;
50b97d
 			}
50b97d
-		} else if ((val & 0x700) == 0) {
50b97d
-			__u32 proto_offset = 0x24 + (bp->func * 0x18);
50b97d
-			__u32 ovtag_offset = proto_offset + 0xc;
50b97d
+			break;
50b97d
+
50b97d
+		case 0x0: /* MF SD mode */
50b97d
+		case 0x500:
50b97d
+		case 0x600:
50b97d
+			proto_offset = 0x24 + (bp->func * 0x18);
50b97d
+			ovtag_offset = proto_offset + 0xc;
50b97d
 
50b97d
 			rc = -ENOTSUP;
50b97d
 			val = bnx2x_rd32(bp, mf_cfg_addr + ovtag_offset);
50b97d
@@ -1057,7 +1066,7 @@ static int bnx2x_open(nic_t *nic)
50b97d
 			mac[4] = (__u8) (val >> 8);
50b97d
 			mac[5] = (__u8) val;
50b97d
 			memcpy(nic->mac_addr, mac, 6);
50b97d
-
50b97d
+			break;
50b97d
 		}
50b97d
 	}
50b97d
 SF:
50b97d
-- 
50b97d
2.5.5
50b97d