diff options
author | Kashyap D Desai <kadesai@FreeBSD.org> | 2016-11-29 12:56:53 +0000 |
---|---|---|
committer | Kashyap D Desai <kadesai@FreeBSD.org> | 2016-11-29 12:56:53 +0000 |
commit | 8bc320add0a5d2bffa0be1450960ec80026e4f7b (patch) | |
tree | edf12143692de5ccffae4733c191adb820326859 /sys/dev/mrsas | |
parent | 808517a4f94986ce48f0b5be8d6b2e1e0e77c43d (diff) | |
download | src-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.c | 21 | ||||
-rw-r--r-- | sys/dev/mrsas/mrsas.h | 1 |
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 { |