aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mrsas
diff options
context:
space:
mode:
authorKashyap D Desai <kadesai@FreeBSD.org>2016-11-29 12:56:53 +0000
committerKashyap D Desai <kadesai@FreeBSD.org>2016-11-29 12:56:53 +0000
commit8bc320add0a5d2bffa0be1450960ec80026e4f7b (patch)
treeedf12143692de5ccffae4733c191adb820326859 /sys/dev/mrsas
parent808517a4f94986ce48f0b5be8d6b2e1e0e77c43d (diff)
downloadsrc-8bc320add0a5d2bffa0be1450960ec80026e4f7b.tar.gz
src-8bc320add0a5d2bffa0be1450960ec80026e4f7b.zip
Update controller properties(read OCR capability bit) when MR_EVT_CTRL_PROP_CHANGED recieved.
Submitted by: Sumit Saxena <sumit.saxena@broadcom.com> Reviewed by: Kashyap Desai <Kashyap.Desai@broadcom.com> MFC after: 3 days Sponsored by: Broadcom Limited/AVAGO Technologies
Notes
Notes: svn path=/head/; revision=309287
Diffstat (limited to 'sys/dev/mrsas')
-rw-r--r--sys/dev/mrsas/mrsas.c21
-rw-r--r--sys/dev/mrsas/mrsas.h1
2 files changed, 16 insertions, 6 deletions
diff --git a/sys/dev/mrsas/mrsas.c b/sys/dev/mrsas/mrsas.c
index 208eed9a7589..cb257f927acc 100644
--- a/sys/dev/mrsas/mrsas.c
+++ b/sys/dev/mrsas/mrsas.c
@@ -3250,7 +3250,11 @@ mrsas_get_ctrl_info(struct mrsas_softc *sc)
dcmd->sgl.sge32[0].phys_addr = sc->ctlr_info_phys_addr;
dcmd->sgl.sge32[0].length = sizeof(struct mrsas_ctrl_info);
- retcode = mrsas_issue_polled(sc, cmd);
+ if (!sc->mask_interrupts)
+ retcode = mrsas_issue_blocked_cmd(sc, cmd);
+ else
+ retcode = mrsas_issue_polled(sc, cmd);
+
if (retcode == ETIMEDOUT)
goto dcmd_timeout;
else
@@ -3261,6 +3265,8 @@ mrsas_get_ctrl_info(struct mrsas_softc *sc)
sc->use_seqnum_jbod_fp =
sc->ctrl_info->adapterOperations3.useSeqNumJbodFP;
+ sc->disableOnlineCtrlReset =
+ sc->ctrl_info->properties.OnOffProperties.disableOnlineCtrlReset;
dcmd_timeout:
mrsas_free_ctlr_info_cmd(sc);
@@ -3268,6 +3274,9 @@ dcmd_timeout:
if (do_ocr)
sc->do_timedout_reset = MFI_DCMD_TIMEOUT_OCR;
+ if (!sc->mask_interrupts)
+ mrsas_release_mfi_cmd(cmd);
+
return (retcode);
}
@@ -4379,7 +4388,6 @@ mrsas_aen_handler(struct mrsas_softc *sc)
mrsas_bus_scan_sim(sc, sc->sim_1);
else
goto skip_register_aen;
- doscan = 0;
break;
case MR_EVT_PD_REMOVED:
fail_aen = mrsas_get_pd_list(sc);
@@ -4387,13 +4395,11 @@ mrsas_aen_handler(struct mrsas_softc *sc)
mrsas_bus_scan_sim(sc, sc->sim_1);
else
goto skip_register_aen;
- doscan = 0;
break;
case MR_EVT_LD_OFFLINE:
case MR_EVT_CFG_CLEARED:
case MR_EVT_LD_DELETED:
mrsas_bus_scan_sim(sc, sc->sim_0);
- doscan = 0;
break;
case MR_EVT_LD_CREATED:
fail_aen = mrsas_get_ld_list(sc);
@@ -4401,15 +4407,18 @@ mrsas_aen_handler(struct mrsas_softc *sc)
mrsas_bus_scan_sim(sc, sc->sim_0);
else
goto skip_register_aen;
- doscan = 0;
break;
case MR_EVT_CTRL_HOST_BUS_SCAN_REQUESTED:
case MR_EVT_FOREIGN_CFG_IMPORTED:
case MR_EVT_LD_STATE_CHANGE:
doscan = 1;
break;
+ case MR_EVT_CTRL_PROP_CHANGED:
+ fail_aen = mrsas_get_ctrl_info(sc);
+ if (fail_aen)
+ goto skip_register_aen;
+ break;
default:
- doscan = 0;
break;
}
} else {
diff --git a/sys/dev/mrsas/mrsas.h b/sys/dev/mrsas/mrsas.h
index bcfd6d2ae641..898ca5f1c8c1 100644
--- a/sys/dev/mrsas/mrsas.h
+++ b/sys/dev/mrsas/mrsas.h
@@ -1449,6 +1449,7 @@ enum MR_PD_QUERY_TYPE {
#define MR_EVT_LD_DELETED 0x008b
#define MR_EVT_FOREIGN_CFG_IMPORTED 0x00db
#define MR_EVT_LD_OFFLINE 0x00fc
+#define MR_EVT_CTRL_PROP_CHANGED 0x012f
#define MR_EVT_CTRL_HOST_BUS_SCAN_REQUESTED 0x0152
enum MR_PD_STATE {