From 0dc942ca136eb577fa6b540d515a95cb16aff65c Mon Sep 17 00:00:00 2001 From: Dotan Barak Date: Thu, 7 May 2009 01:52:56 +0000 Subject: [PATCH] A lot of microchanges, but actually this means that the FreeBSD port, the SCST port, and the non-SCST Feral port are all more or less in sync. And apparently somewhat functional. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@825 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- qla_isp/README | 8 +- qla_isp/common/isp.c | 193 ++--- qla_isp/common/isp_library.c | 1503 +++++++++++++++++++--------------- qla_isp/common/isp_library.h | 15 + qla_isp/common/isp_target.c | 54 +- qla_isp/common/isp_target.h | 5 +- qla_isp/common/ispmbox.h | 8 +- qla_isp/common/ispvar.h | 24 +- qla_isp/linux/isp_cb_ops.c | 4 +- qla_isp/linux/isp_linux.c | 283 +------ qla_isp/linux/isp_linux.h | 2 +- qla_isp/linux/isp_pci.c | 3 +- 12 files changed, 1021 insertions(+), 1081 deletions(-) diff --git a/qla_isp/README b/qla_isp/README index 18b3ff9fb..b0cdea0bf 100644 --- a/qla_isp/README +++ b/qla_isp/README @@ -1,4 +1,4 @@ -$Id: README,v 1.30 2007/03/05 19:10:52 mjacob Exp $ +$Id: README,v 1.32 2009/05/02 23:25:49 mjacob Exp $ ------------------------------------------------------------------------------ Supported Cards: @@ -20,11 +20,13 @@ PCI Fibre Channel 4-Gbit: ISP2422, ISP2432 + 8-GBit: + ISP2532 + You should note that some old non-Qlogic (or very old Qlogic) 2100 cards may have trouble loading firmware. The newer f/w for 2100s is > 0x8000 words, which PROM code on some cards has trouble loading- define the token USE_SMALLER_2100_FIRMWARE to select 1.15.37 f/w for the 2100. -For 23XX (but not 2322) 2K Login firmware is available and is recommended. - +For 23XX (but not 2322) 2K Login firmware is available and is the detfault. ------------------------------------------------------------------------------ diff --git a/qla_isp/common/isp.c b/qla_isp/common/isp.c index 53484649b..6e7e9a4b3 100644 --- a/qla_isp/common/isp.c +++ b/qla_isp/common/isp.c @@ -188,12 +188,12 @@ static void isp_parse_nvram_2400(ispsoftc_t *, uint8_t *); */ void -isp_reset(ispsoftc_t *isp) +isp_reset(ispsoftc_t *isp, int do_load_defaults) { mbreg_t mbs; uint32_t code_org, val; int loops, i, dodnld = 1; - static const char *btype = "????"; + const char *btype = "????"; static const char dcrc[] = "Downloaded RISC Code Checksum Failure"; isp->isp_state = ISP_NILSTATE; @@ -511,10 +511,8 @@ isp_reset(ispsoftc_t *isp) /* * Clear data && control DMA engines. */ - ISP_WRITE(isp, CDMA_CONTROL, - DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT); - ISP_WRITE(isp, DDMA_CONTROL, - DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT); + ISP_WRITE(isp, CDMA_CONTROL, DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT); + ISP_WRITE(isp, DDMA_CONTROL, DMA_CNTRL_CLEAR_CHAN | DMA_CNTRL_RESET_INT); } else if (IS_24XX(isp)) { @@ -537,8 +535,7 @@ isp_reset(ispsoftc_t *isp) /* * Hold it in SOFT_RESET and STOP state for 100us. */ - ISP_WRITE(isp, BIU2400_CSR, - BIU2400_SOFT_RESET|BIU2400_DMA_STOP|(3 << 4)); + ISP_WRITE(isp, BIU2400_CSR, BIU2400_SOFT_RESET|BIU2400_DMA_STOP|(3 << 4)); ISP_DELAY(100); for (loops = 0; loops < 10000; loops++) { ISP_DELAY(5); @@ -565,12 +562,9 @@ isp_reset(ispsoftc_t *isp) /* * Clear data && control DMA engines. */ - ISP_WRITE(isp, CDMA2100_CONTROL, - DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); - ISP_WRITE(isp, TDMA2100_CONTROL, - DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); - ISP_WRITE(isp, RDMA2100_CONTROL, - DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); + ISP_WRITE(isp, CDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); + ISP_WRITE(isp, TDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); + ISP_WRITE(isp, RDMA2100_CONTROL, DMA_CNTRL2100_CLEAR_CHAN | DMA_CNTRL2100_RESET_INT); } /* @@ -728,8 +722,7 @@ isp_reset(ispsoftc_t *isp) mbs.logval = MBLOGALL; isp_mboxcmd(isp, &mbs); if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { - isp_prt(isp, ISP_LOGERR, "NOP ommand failed (%x)", - mbs.param[0]); + isp_prt(isp, ISP_LOGERR, "NOP ommand failed (%x)", mbs.param[0]); ISP_RESET0(isp); return; } @@ -758,10 +751,7 @@ isp_reset(ispsoftc_t *isp) mbs.param[3] != 0xffff || mbs.param[4] != 0x1111 || mbs.param[5] != 0xa5a5) { ISP_RESET0(isp); - isp_prt(isp, ISP_LOGERR, - "Register Test Failed (0x%x 0x%x 0x%x 0x%x 0x%x)", - mbs.param[1], mbs.param[2], mbs.param[3], - mbs.param[4], mbs.param[5]); + isp_prt(isp, ISP_LOGERR, "Register Test Failed (0x%x 0x%x 0x%x 0x%x 0x%x)", mbs.param[1], mbs.param[2], mbs.param[3], mbs.param[4], mbs.param[5]); return; } @@ -776,8 +766,7 @@ isp_reset(ispsoftc_t *isp) * whether we have f/w at all and whether a config flag * has disabled our download. */ - if ((isp->isp_mdvec->dv_ispfw == NULL) || - (isp->isp_confopts & ISP_CFG_NORELOAD)) { + if ((isp->isp_mdvec->dv_ispfw == NULL) || (isp->isp_confopts & ISP_CFG_NORELOAD)) { dodnld = 0; } @@ -800,9 +789,7 @@ isp_reset(ispsoftc_t *isp) for (;;) { uint32_t la, wi, wl; - isp_prt(isp, ISP_LOGDEBUG0, - "load 0x%x words of code at load address 0x%x", - ptr[3], ptr[2]); + isp_prt(isp, ISP_LOGDEBUG0, "load 0x%x words of code at load address 0x%x", ptr[3], ptr[2]); wi = 0; la = ptr[2]; @@ -821,8 +808,7 @@ isp_reset(ispsoftc_t *isp) ISP_IOXPUT_32(isp, ptr[wi++], &cp[i]); wl--; } - MEMORYBARRIER(isp, SYNC_REQUEST, - 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp))); + MEMORYBARRIER(isp, SYNC_REQUEST, 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp))); ISP_MEMZERO(&mbs, sizeof (mbs)); mbs.param[0] = MBOX_LOAD_RISC_RAM; mbs.param[1] = la; @@ -836,8 +822,7 @@ isp_reset(ispsoftc_t *isp) mbs.logval = MBLOGALL; isp_mboxcmd(isp, &mbs); if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { - isp_prt(isp, ISP_LOGERR, - "F/W Risc Ram Load Failed"); + isp_prt(isp, ISP_LOGERR, "F/W Risc Ram Load Failed"); ISP_RESET0(isp); return; } @@ -861,9 +846,7 @@ isp_reset(ispsoftc_t *isp) for (;;) { uint32_t nxtaddr; - isp_prt(isp, ISP_LOGDEBUG0, - "load 0x%x words of code at load address 0x%x", - ptr[3], la); + isp_prt(isp, ISP_LOGDEBUG0, "load 0x%x words of code at load address 0x%x", ptr[3], la); wi = 0; wl = ptr[3]; @@ -884,8 +867,7 @@ isp_reset(ispsoftc_t *isp) ISP_IOXPUT_16(isp, ptr[wi++], &cp[i]); wl--; } - MEMORYBARRIER(isp, SYNC_REQUEST, - 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp))); + MEMORYBARRIER(isp, SYNC_REQUEST, 0, ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp))); ISP_MEMZERO(&mbs, sizeof (mbs)); mbs.param[0] = MBOX_LOAD_RISC_RAM; mbs.param[1] = la; @@ -898,8 +880,7 @@ isp_reset(ispsoftc_t *isp) mbs.logval = MBLOGALL; isp_mboxcmd(isp, &mbs); if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { - isp_prt(isp, ISP_LOGERR, - "F/W Risc Ram Load Failed"); + isp_prt(isp, ISP_LOGERR, "F/W Risc Ram Load Failed"); ISP_RESET0(isp); return; } @@ -943,9 +924,7 @@ isp_reset(ispsoftc_t *isp) mbs.logval = MBLOGNONE; isp_mboxcmd(isp, &mbs); if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { - isp_prt(isp, ISP_LOGERR, - "F/W download failed at word %d", - isp->isp_mbxwrk1 - code_org); + isp_prt(isp, ISP_LOGERR, "F/W download failed at word %d", isp->isp_mbxwrk1 - code_org); ISP_RESET0(isp); return; } @@ -1075,10 +1054,8 @@ isp_reset(ispsoftc_t *isp) isp->isp_fwrev[2] = mbs.param[3]; } - isp_prt(isp, ISP_LOGCONFIG, - "Board Type %s, Chip Revision 0x%x, %s F/W Revision %d.%d.%d", - btype, isp->isp_revision, dodnld? "loaded" : "resident", - isp->isp_fwrev[0], isp->isp_fwrev[1], isp->isp_fwrev[2]); + isp_prt(isp, ISP_LOGCONFIG, "Board Type %s, Chip Revision 0x%x, %s F/W Revision %d.%d.%d", + btype, isp->isp_revision, dodnld? "loaded" : "resident", isp->isp_fwrev[0], isp->isp_fwrev[1], isp->isp_fwrev[2]); if (IS_FC(isp)) { /* @@ -1118,8 +1095,7 @@ isp_reset(ispsoftc_t *isp) isp->isp_maxcmds = mbs.param[2]; } } - isp_prt(isp, ISP_LOGCONFIG, - "%d max I/O command limit set", isp->isp_maxcmds); + isp_prt(isp, ISP_LOGCONFIG, "%d max I/O command limit set", isp->isp_maxcmds); for (i = 0; i < isp->isp_nchan; i++) { isp_fw_state(isp, i); } @@ -1171,14 +1147,15 @@ isp_reset(ispsoftc_t *isp) * effect, NVRAM is read here (unless overriden by * a configuration flag). */ - if (IS_SCSI(isp)) { - isp_setdfltsdparm(isp); - } else { - for (i = 0; i < isp->isp_nchan; i++) { - isp_setdfltfcparm(isp, i); + if (do_load_defaults) { + if (IS_SCSI(isp)) { + isp_setdfltsdparm(isp); + } else { + for (i = 0; i < isp->isp_nchan; i++) { + isp_setdfltfcparm(isp, i); + } } } - } /* @@ -1799,9 +1776,7 @@ isp_fibre_init_2400(ispsoftc_t *isp) } if (ISP_CAP_MULTI_ID(isp) == 0 && isp->isp_nchan > 1) { - isp_prt(isp, ISP_LOGWARN, - "non-MULTIID f/w loaded, only can enable 1 of %d channels", - isp->isp_nchan); + isp_prt(isp, ISP_LOGWARN, "non-MULTIID f/w loaded, only can enable 1 of %d channels", isp->isp_nchan); nchan = 1; } else { nchan = isp->isp_nchan; @@ -1838,19 +1813,14 @@ isp_fibre_init_2400(ispsoftc_t *isp) icbp->icb_version = ICB_VERSION1; icbp->icb_maxfrmlen = DEFAULT_FRAMESIZE(isp); - if (icbp->icb_maxfrmlen < ICB_MIN_FRMLEN || - icbp->icb_maxfrmlen > ICB_MAX_FRMLEN) { - isp_prt(isp, ISP_LOGERR, - "bad frame length (%d) from NVRAM- using %d", - DEFAULT_FRAMESIZE(isp), ICB_DFLT_FRMLEN); + if (icbp->icb_maxfrmlen < ICB_MIN_FRMLEN || icbp->icb_maxfrmlen > ICB_MAX_FRMLEN) { + isp_prt(isp, ISP_LOGERR, "bad frame length (%d) from NVRAM- using %d", DEFAULT_FRAMESIZE(isp), ICB_DFLT_FRMLEN); icbp->icb_maxfrmlen = ICB_DFLT_FRMLEN; } icbp->icb_execthrottle = DEFAULT_EXEC_THROTTLE(isp); if (icbp->icb_execthrottle < 1) { - isp_prt(isp, ISP_LOGERR, - "bad execution throttle of %d- using %d", - DEFAULT_EXEC_THROTTLE(isp), ICB_DFLT_THROTTLE); + isp_prt(isp, ISP_LOGERR, "bad execution throttle of %d- using %d", DEFAULT_EXEC_THROTTLE(isp), ICB_DFLT_THROTTLE); icbp->icb_execthrottle = ICB_DFLT_THROTTLE; } @@ -1914,8 +1884,7 @@ isp_fibre_init_2400(ispsoftc_t *isp) case 0: break; default: - isp_prt(isp, ISP_LOGWARN, "bad value %x in fwopt2 timer field", - icbp->icb_fwoptions2 & ICB2400_OPT2_TIMER_MASK); + isp_prt(isp, ISP_LOGWARN, "bad value %x in fwopt2 timer field", icbp->icb_fwoptions2 & ICB2400_OPT2_TIMER_MASK); icbp->icb_fwoptions2 &= ~ICB2400_OPT2_TIMER_MASK; break; } @@ -1946,19 +1915,12 @@ isp_fibre_init_2400(ispsoftc_t *isp) icbp->icb_fwoptions1 |= ICB2400_OPT1_BOTH_WWNS; MAKE_NODE_NAME_FROM_WWN(icbp->icb_portname, fcp->isp_wwpn); MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, fcp->isp_wwnn); - isp_prt(isp, ISP_LOGDEBUG1, - "Setting ICB Node 0x%08x%08x Port 0x%08x%08x", - ((uint32_t) (fcp->isp_wwnn >> 32)), - ((uint32_t) (fcp->isp_wwnn)), - ((uint32_t) (fcp->isp_wwpn >> 32)), - ((uint32_t) (fcp->isp_wwpn))); + isp_prt(isp, ISP_LOGDEBUG1, "Setting ICB Node 0x%08x%08x Port 0x%08x%08x", ((uint32_t) (fcp->isp_wwnn >> 32)), ((uint32_t) (fcp->isp_wwnn)), + ((uint32_t) (fcp->isp_wwpn >> 32)), ((uint32_t) (fcp->isp_wwpn))); } else if (fcp->isp_wwpn) { icbp->icb_fwoptions1 &= ~ICB2400_OPT1_BOTH_WWNS; MAKE_NODE_NAME_FROM_WWN(icbp->icb_portname, fcp->isp_wwpn); - isp_prt(isp, ISP_LOGDEBUG1, - "Setting ICB Node to be same as Port 0x%08x%08x", - ((uint32_t) (fcp->isp_wwpn >> 32)), - ((uint32_t) (fcp->isp_wwpn))); + isp_prt(isp, ISP_LOGDEBUG1, "Setting ICB Node to be same as Port 0x%08x%08x", ((uint32_t) (fcp->isp_wwpn >> 32)), ((uint32_t) (fcp->isp_wwpn))); } else { isp_prt(isp, ISP_LOGERR, "No valid WWNs to use"); return; @@ -1967,8 +1929,7 @@ isp_fibre_init_2400(ispsoftc_t *isp) icbp->icb_rqstqlen = RQUEST_QUEUE_LEN(isp); if (icbp->icb_rqstqlen < 8) { - isp_prt(isp, ISP_LOGERR, "bad request queue length %d", - icbp->icb_rqstqlen); + isp_prt(isp, ISP_LOGERR, "bad request queue length %d", icbp->icb_rqstqlen); return; } icbp->icb_rsltqlen = RESULT_QUEUE_LEN(isp); @@ -1991,34 +1952,25 @@ isp_fibre_init_2400(ispsoftc_t *isp) /* unconditionally set up the ATIO queue if we support target mode */ icbp->icb_atioqlen = RESULT_QUEUE_LEN(isp); if (icbp->icb_atioqlen < 8) { - isp_prt(isp, ISP_LOGERR, - "bad ATIO queue length %d", icbp->icb_atioqlen); + isp_prt(isp, ISP_LOGERR, "bad ATIO queue length %d", icbp->icb_atioqlen); return; } icbp->icb_atioqaddr[RQRSP_ADDR0015] = DMA_WD0(isp->isp_atioq_dma); icbp->icb_atioqaddr[RQRSP_ADDR1631] = DMA_WD1(isp->isp_atioq_dma); icbp->icb_atioqaddr[RQRSP_ADDR3247] = DMA_WD2(isp->isp_atioq_dma); icbp->icb_atioqaddr[RQRSP_ADDR4863] = DMA_WD3(isp->isp_atioq_dma); - isp_prt(isp, ISP_LOGDEBUG0, - "isp_fibre_init_2400: atioq %04x%04x%04x%04x", - DMA_WD3(isp->isp_atioq_dma), DMA_WD2(isp->isp_atioq_dma), + isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: atioq %04x%04x%04x%04x", DMA_WD3(isp->isp_atioq_dma), DMA_WD2(isp->isp_atioq_dma), DMA_WD1(isp->isp_atioq_dma), DMA_WD0(isp->isp_atioq_dma)); #endif - isp_prt(isp, ISP_LOGDEBUG0, - "isp_fibre_init_2400: fwopt1 0x%x fwopt2 0x%x fwopt3 0x%x", - icbp->icb_fwoptions1, icbp->icb_fwoptions2, icbp->icb_fwoptions3); + isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: fwopt1 0x%x fwopt2 0x%x fwopt3 0x%x", icbp->icb_fwoptions1, icbp->icb_fwoptions2, icbp->icb_fwoptions3); - isp_prt(isp, ISP_LOGDEBUG0, - "isp_fibre_init_2400: rqst %04x%04x%04x%04x rsp %04x%04x%04x%04x", - DMA_WD3(isp->isp_rquest_dma), DMA_WD2(isp->isp_rquest_dma), - DMA_WD1(isp->isp_rquest_dma), DMA_WD0(isp->isp_rquest_dma), - DMA_WD3(isp->isp_result_dma), DMA_WD2(isp->isp_result_dma), + isp_prt(isp, ISP_LOGDEBUG0, "isp_fibre_init_2400: rqst %04x%04x%04x%04x rsp %04x%04x%04x%04x", DMA_WD3(isp->isp_rquest_dma), DMA_WD2(isp->isp_rquest_dma), + DMA_WD1(isp->isp_rquest_dma), DMA_WD0(isp->isp_rquest_dma), DMA_WD3(isp->isp_result_dma), DMA_WD2(isp->isp_result_dma), DMA_WD1(isp->isp_result_dma), DMA_WD0(isp->isp_result_dma)); if (isp->isp_dblev & ISP_LOGDEBUG1) { - isp_print_bytes(isp, "isp_fibre_init_2400", sizeof (*icbp), - icbp); + isp_print_bytes(isp, "isp_fibre_init_2400", sizeof (*icbp), icbp); } if (FC_SCRATCH_ACQUIRE(isp, 0)) { @@ -2052,17 +2004,13 @@ isp_fibre_init_2400(ispsoftc_t *isp) if (fcp2->role != ISP_ROLE_NONE) { pi.vp_port_options = ICB2400_VPOPT_ENABLED; if (fcp2->role & ISP_ROLE_INITIATOR) { - pi.vp_port_options |= - ICB2400_VPOPT_INI_ENABLE; + pi.vp_port_options |= ICB2400_VPOPT_INI_ENABLE; } if ((fcp2->role & ISP_ROLE_TARGET) == 0) { - pi.vp_port_options |= - ICB2400_VPOPT_TGT_DISABLE; + pi.vp_port_options |= ICB2400_VPOPT_TGT_DISABLE; } - MAKE_NODE_NAME_FROM_WWN(pi.vp_port_portname, - fcp2->isp_wwpn); - MAKE_NODE_NAME_FROM_WWN(pi.vp_port_nodename, - fcp2->isp_wwnn); + MAKE_NODE_NAME_FROM_WWN(pi.vp_port_portname, fcp2->isp_wwpn); + MAKE_NODE_NAME_FROM_WWN(pi.vp_port_nodename, fcp2->isp_wwnn); } off = fcp->isp_scratch; off += ICB2400_VPINFO_PORT_OFF(chan); @@ -2085,9 +2033,7 @@ isp_fibre_init_2400(ispsoftc_t *isp) mbs.param[3] = DMA_WD0(fcp->isp_scdma); mbs.param[6] = DMA_WD3(fcp->isp_scdma); mbs.param[7] = DMA_WD2(fcp->isp_scdma); - isp_prt(isp, ISP_LOGDEBUG0, "INIT F/W from %04x%04x%04x%04x", - DMA_WD3(fcp->isp_scdma), DMA_WD2(fcp->isp_scdma), - DMA_WD1(fcp->isp_scdma), DMA_WD0(fcp->isp_scdma)); + isp_prt(isp, ISP_LOGDEBUG0, "INIT F/W from %04x%04x%04x%04x", DMA_WD3(fcp->isp_scdma), DMA_WD2(fcp->isp_scdma), DMA_WD1(fcp->isp_scdma), DMA_WD0(fcp->isp_scdma)); MEMORYBARRIER(isp, SYNC_SFORDEV, 0, sizeof (*icbp)); isp_mboxcmd(isp, &mbs); FC_SCRATCH_RELEASE(isp, 0); @@ -2118,7 +2064,7 @@ isp_mark_portdb(ispsoftc_t *isp, int chan, int disposition) for (i = 0; i < MAX_FC_TARG; i++) { if (fcp->portdb[i].target_mode) { if (disposition < 0) { - isp_prt(isp, ISP_LOGTINFO, "isp_mark_portdb: Chan %d zeroing handle 0x" "%02x port 0x%06x", chan, + isp_prt(isp, ISP_LOGTINFO, "isp_mark_portdb: Chan %d zeroing handle 0x" "%04x port 0x%06x", chan, fcp->portdb[i].handle, fcp->portdb[i].portid); ISP_MEMZERO(&fcp->portdb[i], sizeof (fcportdb_t)); } @@ -2342,7 +2288,7 @@ isp_port_login(ispsoftc_t *isp, uint16_t handle, uint32_t portid) case MBOX_LOOP_ID_USED: isp_prt(isp, ISP_LOGDEBUG0, - "isp_port_login: handle %u in use for port id 0x%02xXXXX", + "isp_port_login: handle 0x%04x in use for port id 0x%02xXXXX", handle, mbs.param[1] & 0xff); return (MBOX_LOOP_ID_USED); @@ -3191,7 +3137,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) lp->new_roles = tmp.roles; lp->state = FC_PORTDB_STATE_PENDING_VALID; isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Loop Port 0x%02x@0x%x Pending " + "Chan %d Loop Port 0x%06x@0x%04x Pending " "Valid", chan, tmp.portid, tmp.handle); break; } @@ -3207,7 +3153,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) * decide what to do. */ isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Loop Port 0x%02x@0x%x changed", + "Chan %d Loop Port 0x%06x@0x%04x changed", chan, tmp.portid, tmp.handle); lp->state = FC_PORTDB_STATE_CHANGED; lp->new_portid = tmp.portid; @@ -3250,7 +3196,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan) lp->port_wwn = tmp.port_wwn; lp->node_wwn = tmp.node_wwn; isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, - "Chan %d Loop Port 0x%02x@0x%x is New Entry", + "Chan %d Loop Port 0x%06x@0x%04x is New Entry", chan, tmp.portid, tmp.handle); } fcp->isp_loopstate = LOOP_LSCAN_DONE; @@ -7786,13 +7732,11 @@ isp_setdfltfcparm(ispsoftc_t *isp, int chan) */ void -isp_reinit(ispsoftc_t *isp) +isp_reinit(ispsoftc_t *isp, int do_load_defaults) { - XS_T *xs; int i; - uint32_t tmp; - isp_reset(isp); + isp_reset(isp, do_load_defaults); if (isp->isp_state != ISP_RESETSTATE) { isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__); @@ -7828,36 +7772,13 @@ isp_reinit(ispsoftc_t *isp) cleanup: isp->isp_nactive = 0; + + isp_clear_commands(isp); if (IS_FC(isp)) { for (i = 0; i < isp->isp_nchan; i++) { ISP_MARK_PORTDB(isp, i, -1); } } - - for (tmp = 0; tmp < isp->isp_maxcmds; tmp++) { - uint32_t handle; - - xs = isp->isp_xflist[tmp]; - if (xs == NULL) { - continue; - } - handle = isp_find_handle(isp, xs); - if (handle == 0) { - continue; - } - isp_destroy_handle(isp, handle); - if (XS_XFRLEN(xs)) { - ISP_DMAFREE(isp, xs, handle); - XS_SET_RESID(xs, XS_XFRLEN(xs)); - } else { - XS_SET_RESID(xs, 0); - } - XS_SETERR(xs, HBA_BUSRESET); - isp_done(xs); - } -#ifdef ISP_TARGET_MODE - ISP_MEMZERO(isp->isp_tgtlist, isp->isp_maxcmds * sizeof (void **)); -#endif } /* diff --git a/qla_isp/common/isp_library.c b/qla_isp/common/isp_library.c index c8699c227..d7d9f5edf 100644 --- a/qla_isp/common/isp_library.c +++ b/qla_isp/common/isp_library.c @@ -80,8 +80,7 @@ const char *isp_class3_roles[4] = { }; /* - * Command shipping- finish off first queue entry and do dma mapping and - * additional segments as needed. + * Command shipping- finish off first queue entry and do dma mapping and additional segments as needed. * * Called with the first queue entry at least partially filled out. */ @@ -387,8 +386,9 @@ isp_print_bytes(ispsoftc_t *isp, const char *msg, int amt, void *arg) to = off; for (j = 0; j < 16; j++) { ISP_SNPRINTF(buf, 128, "%s %02x", buf, ptr[off++] & 0xff); - if (off == amt) + if (off == amt) { break; + } } isp_prt(isp, ISP_LOGALL, "0x%08x:%s", to, buf); buf[0] = 0; @@ -419,16 +419,11 @@ isp_fc_runstate(ispsoftc_t *isp, int chan, int tval) if (fcp->isp_fwstate < FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) { if (isp_control(isp, ISPCTL_FCLINK_TEST, chan, tval) != 0) { - isp_prt(isp, ISP_LOGSANCFG, - "isp_fc_runstate: linktest failed for channel %d", - chan); + isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: linktest failed for channel %d", chan); return (-1); } - if (fcp->isp_fwstate != FW_READY || - fcp->isp_loopstate < LOOP_PDB_RCVD) { - isp_prt(isp, ISP_LOGSANCFG, - "isp_fc_runstate: f/w not ready for channel %d", - chan); + if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) { + isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready for channel %d", chan); return (-1); } } @@ -438,23 +433,19 @@ isp_fc_runstate(ispsoftc_t *isp, int chan, int tval) } if (isp_control(isp, ISPCTL_SCAN_LOOP, chan) != 0) { - isp_prt(isp, ISP_LOGSANCFG, - "isp_fc_runstate: scan loop fails on channel %d", chan); + isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan loop fails on channel %d", chan); return (LOOP_PDB_RCVD); } if (isp_control(isp, ISPCTL_SCAN_FABRIC, chan) != 0) { - isp_prt(isp, ISP_LOGSANCFG, - "isp_fc_runstate: scan fabric fails on channel %d", chan); + isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan fabric fails on channel %d", chan); return (LOOP_LSCAN_DONE); } if (isp_control(isp, ISPCTL_PDB_SYNC, chan) != 0) { - isp_prt(isp, ISP_LOGSANCFG, - "isp_fc_runstate: pdb_sync fails on channel %d", chan); + isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails on channel %d", chan); return (LOOP_FSCAN_DONE); } if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) { - isp_prt(isp, ISP_LOGSANCFG, - "isp_fc_runstate: f/w not ready again on channel %d", chan); + isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready again on channel %d", chan); return (-1); } return (0); @@ -494,18 +485,90 @@ isp_dump_portdb(ispsoftc_t *isp, int chan) } else { ISP_SNPRINTF(mb, sizeof (mb), "---"); } - isp_prt(isp, ISP_LOGALL, "Chan %d [%d]: hdl 0x%x %s al%d tgt %s" - " %s 0x%06x =>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x", - chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, - roles[lp->roles], lp->portid, - roles[lp->new_roles], lp->new_portid, - (uint32_t) (lp->node_wwn >> 32), - (uint32_t) (lp->node_wwn), - (uint32_t) (lp->port_wwn >> 32), - (uint32_t) (lp->port_wwn)); + isp_prt(isp, ISP_LOGALL, "Chan %d [%d]: hdl 0x%x %s al%d tgt %s %s 0x%06x =>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x", + chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, roles[lp->roles], lp->portid, roles[lp->new_roles], lp->new_portid, + (uint32_t) (lp->node_wwn >> 32), (uint32_t) (lp->node_wwn), (uint32_t) (lp->port_wwn >> 32), (uint32_t) (lp->port_wwn)); } } +void +isp_clear_commands(ispsoftc_t *isp) +{ + XS_T *xs; + uint32_t tmp, handle; +#ifdef ISP_TARGET_MODE + isp_notify_t notify; +#endif + + for (tmp = 0; isp->isp_xflist && tmp < isp->isp_maxcmds; tmp++) { + xs = isp->isp_xflist[tmp]; + if (xs == NULL) { + continue; + } + handle = isp_find_handle(isp, xs); + if (handle == 0) { + continue; + } + if (XS_XFRLEN(xs)) { + ISP_DMAFREE(isp, xs, handle); + XS_SET_RESID(xs, XS_XFRLEN(xs)); + } else { + XS_SET_RESID(xs, 0); + } + isp_destroy_handle(isp, handle); + XS_SETERR(xs, HBA_BUSRESET); + isp_done(xs); + } +#ifdef ISP_TARGET_MODE + for (tmp = 0; isp->isp_tgtlist && tmp < isp->isp_maxcmds; tmp++) { + uint8_t local[QENTRY_LEN]; + + xs = isp->isp_tgtlist[tmp]; + if (xs == NULL) { + continue; + } + handle = isp_find_tgt_handle(isp, xs); + if (handle == 0) { + continue; + } + ISP_DMAFREE(isp, xs, handle); + + ISP_MEMZERO(local, QENTRY_LEN); + if (IS_24XX(isp)) { + ct7_entry_t *ctio = (ct7_entry_t *) local; + ctio->ct_syshandle = handle; + ctio->ct_nphdl = CT_HBA_RESET; + ctio->ct_header.rqs_entry_type = RQSTYPE_CTIO7; + } else if (IS_FC(isp)) { + ct2_entry_t *ctio = (ct2_entry_t *) local; + ctio->ct_syshandle = handle; + ctio->ct_status = CT_HBA_RESET; + ctio->ct_header.rqs_entry_type = RQSTYPE_CTIO2; + } else { + ct_entry_t *ctio = (ct_entry_t *) local; + ctio->ct_syshandle = handle & 0xffff; + ctio->ct_status = CT_HBA_RESET & 0xff;; + ctio->ct_header.rqs_entry_type = RQSTYPE_CTIO; + } + isp_async(isp, ISPASYNC_TARGET_ACTION, local); + } + for (tmp = 0; tmp < isp->isp_nchan; tmp++) { + ISP_MEMZERO(¬ify, sizeof (isp_notify_t)); + notify.nt_ncode = NT_HBA_RESET; + notify.nt_hba = isp; + notify.nt_wwn = INI_ANY; + notify.nt_nphdl = NIL_HANDLE; + notify.nt_sid = PORT_ANY; + notify.nt_did = PORT_ANY; + notify.nt_tgt = TGT_ANY; + notify.nt_channel = tmp; + notify.nt_lun = LUN_ANY; + notify.nt_tagval = TAG_ANY; + isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); + } +#endif +} + const char * isp_fc_fw_statename(int state) { @@ -589,8 +652,7 @@ isp_shutdown(ispsoftc_t *isp) * (with a few exceptions for efficiency). */ -#define ISP_IS_SBUS(isp) \ - (ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS) +#define ISP_IS_SBUS(isp) (ISP_SBUS_SUPPORTED && (isp)->isp_bustype == ISP_BT_SBUS) #define ASIZE(x) (sizeof (x) / sizeof (x[0])) /* @@ -600,23 +662,15 @@ void isp_put_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst) { if (ISP_IS_SBUS(isp)) { - ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type, - &hpdst->rqs_entry_count); - ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count, - &hpdst->rqs_entry_type); - ISP_IOXPUT_8(isp, hpsrc->rqs_seqno, - &hpdst->rqs_flags); - ISP_IOXPUT_8(isp, hpsrc->rqs_flags, - &hpdst->rqs_seqno); + ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type, &hpdst->rqs_entry_count); + ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count, &hpdst->rqs_entry_type); + ISP_IOXPUT_8(isp, hpsrc->rqs_seqno, &hpdst->rqs_flags); + ISP_IOXPUT_8(isp, hpsrc->rqs_flags, &hpdst->rqs_seqno); } else { - ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type, - &hpdst->rqs_entry_type); - ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count, - &hpdst->rqs_entry_count); - ISP_IOXPUT_8(isp, hpsrc->rqs_seqno, - &hpdst->rqs_seqno); - ISP_IOXPUT_8(isp, hpsrc->rqs_flags, - &hpdst->rqs_flags); + ISP_IOXPUT_8(isp, hpsrc->rqs_entry_type, &hpdst->rqs_entry_type); + ISP_IOXPUT_8(isp, hpsrc->rqs_entry_count, &hpdst->rqs_entry_count); + ISP_IOXPUT_8(isp, hpsrc->rqs_seqno, &hpdst->rqs_seqno); + ISP_IOXPUT_8(isp, hpsrc->rqs_flags, &hpdst->rqs_flags); } } @@ -624,23 +678,15 @@ void isp_get_hdr(ispsoftc_t *isp, isphdr_t *hpsrc, isphdr_t *hpdst) { if (ISP_IS_SBUS(isp)) { - ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type, - hpdst->rqs_entry_count); - ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count, - hpdst->rqs_entry_type); - ISP_IOXGET_8(isp, &hpsrc->rqs_seqno, - hpdst->rqs_flags); - ISP_IOXGET_8(isp, &hpsrc->rqs_flags, - hpdst->rqs_seqno); + ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type, hpdst->rqs_entry_count); + ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count, hpdst->rqs_entry_type); + ISP_IOXGET_8(isp, &hpsrc->rqs_seqno, hpdst->rqs_flags); + ISP_IOXGET_8(isp, &hpsrc->rqs_flags, hpdst->rqs_seqno); } else { - ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type, - hpdst->rqs_entry_type); - ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count, - hpdst->rqs_entry_count); - ISP_IOXGET_8(isp, &hpsrc->rqs_seqno, - hpdst->rqs_seqno); - ISP_IOXGET_8(isp, &hpsrc->rqs_flags, - hpdst->rqs_flags); + ISP_IOXGET_8(isp, &hpsrc->rqs_entry_type, hpdst->rqs_entry_type); + ISP_IOXGET_8(isp, &hpsrc->rqs_entry_count, hpdst->rqs_entry_count); + ISP_IOXGET_8(isp, &hpsrc->rqs_seqno, hpdst->rqs_seqno); + ISP_IOXGET_8(isp, &hpsrc->rqs_flags, hpdst->rqs_flags); } } @@ -677,10 +723,8 @@ isp_put_request(ispsoftc_t *isp, ispreq_t *rqsrc, ispreq_t *rqdst) ISP_IOXPUT_8(isp, rqsrc->req_cdb[i], &rqdst->req_cdb[i]); } for (i = 0; i < ISP_RQDSEG; i++) { - ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base, - &rqdst->req_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count, - &rqdst->req_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_base, &rqdst->req_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, rqsrc->req_dataseg[i].ds_count, &rqdst->req_dataseg[i].ds_count); } } @@ -701,14 +745,12 @@ isp_put_marker(ispsoftc_t *isp, isp_marker_t *src, isp_marker_t *dst) ISP_IOXPUT_16(isp, src->mrk_flags, &dst->mrk_flags); ISP_IOXPUT_16(isp, src->mrk_lun, &dst->mrk_lun); for (i = 0; i < ASIZE(src->mrk_reserved1); i++) { - ISP_IOXPUT_8(isp, src->mrk_reserved1[i], - &dst->mrk_reserved1[i]); + ISP_IOXPUT_8(isp, src->mrk_reserved1[i], &dst->mrk_reserved1[i]); } } void -isp_put_marker_24xx(ispsoftc_t *isp, - isp_marker_24xx_t *src, isp_marker_24xx_t *dst) +isp_put_marker_24xx(ispsoftc_t *isp, isp_marker_24xx_t *src, isp_marker_24xx_t *dst) { int i; isp_put_hdr(isp, &src->mrk_header, &dst->mrk_header); @@ -723,8 +765,7 @@ isp_put_marker_24xx(ispsoftc_t *isp, ISP_IOXPUT_8(isp, src->mrk_lun[i], &dst->mrk_lun[i]); } for (i = 0; i < ASIZE(src->mrk_reserved3); i++) { - ISP_IOXPUT_8(isp, src->mrk_reserved3[i], - &dst->mrk_reserved3[i]); + ISP_IOXPUT_8(isp, src->mrk_reserved3[i], &dst->mrk_reserved3[i]); } } @@ -746,10 +787,8 @@ isp_put_request_t2(ispsoftc_t *isp, ispreqt2_t *src, ispreqt2_t *dst) } ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt); for (i = 0; i < ISP_RQDSEG_T2; i++) { - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, - &dst->req_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, - &dst->req_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count); } } @@ -770,10 +809,8 @@ isp_put_request_t2e(ispsoftc_t *isp, ispreqt2e_t *src, ispreqt2e_t *dst) } ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt); for (i = 0; i < ISP_RQDSEG_T2; i++) { - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, - &dst->req_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, - &dst->req_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count); } } @@ -795,12 +832,9 @@ isp_put_request_t3(ispsoftc_t *isp, ispreqt3_t *src, ispreqt3_t *dst) } ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt); for (i = 0; i < ISP_RQDSEG_T3; i++) { - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, - &dst->req_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, - &dst->req_dataseg[i].ds_basehi); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, - &dst->req_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, &dst->req_dataseg[i].ds_basehi); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count); } } @@ -821,12 +855,9 @@ isp_put_request_t3e(ispsoftc_t *isp, ispreqt3e_t *src, ispreqt3e_t *dst) } ISP_IOXPUT_32(isp, src->req_totalcnt, &dst->req_totalcnt); for (i = 0; i < ISP_RQDSEG_T3; i++) { - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, - &dst->req_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, - &dst->req_dataseg[i].ds_basehi); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, - &dst->req_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, &dst->req_dataseg[i].ds_basehi); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count); } } @@ -882,12 +913,9 @@ isp_put_request_t7(ispsoftc_t *isp, ispreqt7_t *src, ispreqt7_t *dst) ISP_IOXPUT_16(isp, src->req_tidlo, &dst->req_tidlo); ISP_IOXPUT_8(isp, src->req_tidhi, &dst->req_tidhi); ISP_IOXPUT_8(isp, src->req_vpidx, &dst->req_vpidx); - ISP_IOXPUT_32(isp, src->req_dataseg.ds_base, - &dst->req_dataseg.ds_base); - ISP_IOXPUT_32(isp, src->req_dataseg.ds_basehi, - &dst->req_dataseg.ds_basehi); - ISP_IOXPUT_32(isp, src->req_dataseg.ds_count, - &dst->req_dataseg.ds_count); + ISP_IOXPUT_32(isp, src->req_dataseg.ds_base, &dst->req_dataseg.ds_base); + ISP_IOXPUT_32(isp, src->req_dataseg.ds_basehi, &dst->req_dataseg.ds_basehi); + ISP_IOXPUT_32(isp, src->req_dataseg.ds_count, &dst->req_dataseg.ds_count); } void @@ -902,8 +930,7 @@ isp_put_24xx_tmf(ispsoftc_t *isp, isp24xx_tmf_t *src, isp24xx_tmf_t *dst) ISP_IOXPUT_16(isp, src->tmf_delay, &dst->tmf_delay); ISP_IOXPUT_16(isp, src->tmf_timeout, &dst->tmf_timeout); for (i = 0; i < ASIZE(src->tmf_reserved0); i++) { - ISP_IOXPUT_8(isp, src->tmf_reserved0[i], - &dst->tmf_reserved0[i]); + ISP_IOXPUT_8(isp, src->tmf_reserved0[i], &dst->tmf_reserved0[i]); } a = (uint32_t *) src->tmf_lun; b = (uint32_t *) dst->tmf_lun; @@ -912,15 +939,13 @@ isp_put_24xx_tmf(ispsoftc_t *isp, isp24xx_tmf_t *src, isp24xx_tmf_t *dst) } ISP_IOXPUT_32(isp, src->tmf_flags, &dst->tmf_flags); for (i = 0; i < ASIZE(src->tmf_reserved1); i++) { - ISP_IOXPUT_8(isp, src->tmf_reserved1[i], - &dst->tmf_reserved1[i]); + ISP_IOXPUT_8(isp, src->tmf_reserved1[i], &dst->tmf_reserved1[i]); } ISP_IOXPUT_16(isp, src->tmf_tidlo, &dst->tmf_tidlo); ISP_IOXPUT_8(isp, src->tmf_tidhi, &dst->tmf_tidhi); ISP_IOXPUT_8(isp, src->tmf_vpidx, &dst->tmf_vpidx); for (i = 0; i < ASIZE(src->tmf_reserved2); i++) { - ISP_IOXPUT_8(isp, src->tmf_reserved2[i], - &dst->tmf_reserved2[i]); + ISP_IOXPUT_8(isp, src->tmf_reserved2[i], &dst->tmf_reserved2[i]); } } @@ -934,15 +959,13 @@ isp_put_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst) ISP_IOXPUT_16(isp, src->abrt_options, &dst->abrt_options); ISP_IOXPUT_32(isp, src->abrt_cmd_handle, &dst->abrt_cmd_handle); for (i = 0; i < ASIZE(src->abrt_reserved); i++) { - ISP_IOXPUT_8(isp, src->abrt_reserved[i], - &dst->abrt_reserved[i]); + ISP_IOXPUT_8(isp, src->abrt_reserved[i], &dst->abrt_reserved[i]); } ISP_IOXPUT_16(isp, src->abrt_tidlo, &dst->abrt_tidlo); ISP_IOXPUT_8(isp, src->abrt_tidhi, &dst->abrt_tidhi); ISP_IOXPUT_8(isp, src->abrt_vpidx, &dst->abrt_vpidx); for (i = 0; i < ASIZE(src->abrt_reserved1); i++) { - ISP_IOXPUT_8(isp, src->abrt_reserved1[i], - &dst->abrt_reserved1[i]); + ISP_IOXPUT_8(isp, src->abrt_reserved1[i], &dst->abrt_reserved1[i]); } } @@ -952,10 +975,8 @@ isp_put_cont_req(ispsoftc_t *isp, ispcontreq_t *src, ispcontreq_t *dst) int i; isp_put_hdr(isp, &src->req_header, &dst->req_header); for (i = 0; i < ISP_CDSEG; i++) { - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, - &dst->req_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, - &dst->req_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count); } } @@ -965,12 +986,9 @@ isp_put_cont64_req(ispsoftc_t *isp, ispcontreq64_t *src, ispcontreq64_t *dst) int i; isp_put_hdr(isp, &src->req_header, &dst->req_header); for (i = 0; i < ISP_CDSEG64; i++) { - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, - &dst->req_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, - &dst->req_dataseg[i].ds_basehi); - ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, - &dst->req_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_base, &dst->req_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_basehi, &dst->req_dataseg[i].ds_basehi); + ISP_IOXPUT_32(isp, src->req_dataseg[i].ds_count, &dst->req_dataseg[i].ds_count); } } @@ -981,34 +999,29 @@ isp_get_response(ispsoftc_t *isp, ispstatusreq_t *src, ispstatusreq_t *dst) isp_get_hdr(isp, &src->req_header, &dst->req_header); ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle); ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status); - ISP_IOXGET_16(isp, &src->req_completion_status, - dst->req_completion_status); + ISP_IOXGET_16(isp, &src->req_completion_status, dst->req_completion_status); ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags); ISP_IOXGET_16(isp, &src->req_status_flags, dst->req_status_flags); ISP_IOXGET_16(isp, &src->req_time, dst->req_time); ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len); ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid); for (i = 0; i < 8; i++) { - ISP_IOXGET_8(isp, &src->req_response[i], - dst->req_response[i]); + ISP_IOXGET_8(isp, &src->req_response[i], dst->req_response[i]); } for (i = 0; i < 32; i++) { - ISP_IOXGET_8(isp, &src->req_sense_data[i], - dst->req_sense_data[i]); + ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]); } } void -isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src, - isp24xx_statusreq_t *dst) +isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src, isp24xx_statusreq_t *dst) { int i; uint32_t *s, *d; isp_get_hdr(isp, &src->req_header, &dst->req_header); ISP_IOXGET_32(isp, &src->req_handle, dst->req_handle); - ISP_IOXGET_16(isp, &src->req_completion_status, - dst->req_completion_status); + ISP_IOXGET_16(isp, &src->req_completion_status, dst->req_completion_status); ISP_IOXGET_16(isp, &src->req_oxid, dst->req_oxid); ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid); ISP_IOXGET_16(isp, &src->req_reserved0, dst->req_reserved0); @@ -1035,15 +1048,13 @@ isp_get_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst) ISP_IOXGET_16(isp, &src->abrt_options, dst->abrt_options); ISP_IOXGET_32(isp, &src->abrt_cmd_handle, dst->abrt_cmd_handle); for (i = 0; i < ASIZE(src->abrt_reserved); i++) { - ISP_IOXGET_8(isp, &src->abrt_reserved[i], - dst->abrt_reserved[i]); + ISP_IOXGET_8(isp, &src->abrt_reserved[i], dst->abrt_reserved[i]); } ISP_IOXGET_16(isp, &src->abrt_tidlo, dst->abrt_tidlo); ISP_IOXGET_8(isp, &src->abrt_tidhi, dst->abrt_tidhi); ISP_IOXGET_8(isp, &src->abrt_vpidx, dst->abrt_vpidx); for (i = 0; i < ASIZE(src->abrt_reserved1); i++) { - ISP_IOXGET_8(isp, &src->abrt_reserved1[i], - dst->abrt_reserved1[i]); + ISP_IOXGET_8(isp, &src->abrt_reserved1[i], dst->abrt_reserved1[i]); } } @@ -1057,8 +1068,7 @@ isp_get_rio2(ispsoftc_t *isp, isp_rio2_t *r2src, isp_rio2_t *r2dst) r2dst->req_header.rqs_seqno = 30; } for (i = 0; i < r2dst->req_header.rqs_seqno; i++) { - ISP_IOXGET_16(isp, &r2src->req_handles[i], - r2dst->req_handles[i]); + ISP_IOXGET_16(isp, &r2src->req_handles[i], r2dst->req_handles[i]); } while (i < 30) { r2dst->req_handles[i++] = 0; @@ -1166,14 +1176,12 @@ isp_put_icb_2400(ispsoftc_t *isp, isp_icb_2400_t *src, isp_icb_2400_t *dst) ISP_IOXPUT_16(isp, src->icb_priaddr[i], &dst->icb_priaddr[i]); } for (i = 0; i < 4; i++) { - ISP_IOXPUT_16(isp, src->icb_reserved1[i], - &dst->icb_reserved1[i]); + ISP_IOXPUT_16(isp, src->icb_reserved1[i], &dst->icb_reserved1[i]); } ISP_IOXPUT_16(isp, src->icb_atio_in, &dst->icb_atio_in); ISP_IOXPUT_16(isp, src->icb_atioqlen, &dst->icb_atioqlen); for (i = 0; i < 4; i++) { - ISP_IOXPUT_16(isp, src->icb_atioqaddr[i], - &dst->icb_atioqaddr[i]); + ISP_IOXPUT_16(isp, src->icb_atioqaddr[i], &dst->icb_atioqaddr[i]); } ISP_IOXPUT_16(isp, src->icb_idelaytimer, &dst->icb_idelaytimer); ISP_IOXPUT_16(isp, src->icb_logintime, &dst->icb_logintime); @@ -1181,8 +1189,7 @@ isp_put_icb_2400(ispsoftc_t *isp, isp_icb_2400_t *src, isp_icb_2400_t *dst) ISP_IOXPUT_32(isp, src->icb_fwoptions2, &dst->icb_fwoptions2); ISP_IOXPUT_32(isp, src->icb_fwoptions3, &dst->icb_fwoptions3); for (i = 0; i < 12; i++) { - ISP_IOXPUT_16(isp, src->icb_reserved2[i], - &dst->icb_reserved2[i]); + ISP_IOXPUT_16(isp, src->icb_reserved2[i], &dst->icb_reserved2[i]); } } @@ -1326,12 +1333,10 @@ isp_get_pdb_21xx(ispsoftc_t *isp, isp_pdb_21xx_t *src, isp_pdb_21xx_t *dst) ISP_IOXGET_8(isp, &src->pdb_mstate, dst->pdb_mstate); ISP_IOXGET_8(isp, &src->pdb_sstate, dst->pdb_sstate); for (i = 0; i < 4; i++) { - ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i], - dst->pdb_hardaddr_bits[i]); + ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i], dst->pdb_hardaddr_bits[i]); } for (i = 0; i < 4; i++) { - ISP_IOXGET_8(isp, &src->pdb_portid_bits[i], - dst->pdb_portid_bits[i]); + ISP_IOXGET_8(isp, &src->pdb_portid_bits[i], dst->pdb_portid_bits[i]); } for (i = 0; i < 8; i++) { ISP_IOXGET_8(isp, &src->pdb_nodename[i], dst->pdb_nodename[i]); @@ -1380,12 +1385,10 @@ isp_get_pdb_24xx(ispsoftc_t *isp, isp_pdb_24xx_t *src, isp_pdb_24xx_t *dst) ISP_IOXGET_8(isp, &src->pdb_curstate, dst->pdb_curstate); ISP_IOXGET_8(isp, &src->pdb_laststate, dst->pdb_laststate); for (i = 0; i < 4; i++) { - ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i], - dst->pdb_hardaddr_bits[i]); + ISP_IOXGET_8(isp, &src->pdb_hardaddr_bits[i], dst->pdb_hardaddr_bits[i]); } for (i = 0; i < 4; i++) { - ISP_IOXGET_8(isp, &src->pdb_portid_bits[i], - dst->pdb_portid_bits[i]); + ISP_IOXGET_8(isp, &src->pdb_portid_bits[i], dst->pdb_portid_bits[i]); } ISP_IOXGET_16(isp, &src->pdb_retry_timer, dst->pdb_retry_timer); ISP_IOXGET_16(isp, &src->pdb_handle, dst->pdb_handle); @@ -1400,8 +1403,7 @@ isp_get_pdb_24xx(ispsoftc_t *isp, isp_pdb_24xx_t *src, isp_pdb_24xx_t *dst) ISP_IOXGET_8(isp, &src->pdb_portname[i], dst->pdb_portname[i]); } for (i = 0; i < 24; i++) { - ISP_IOXGET_8(isp, &src->pdb_reserved1[i], - dst->pdb_reserved1[i]); + ISP_IOXGET_8(isp, &src->pdb_reserved1[i], dst->pdb_reserved1[i]); } } @@ -1422,10 +1424,8 @@ isp_get_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst) ISP_IOXGET_16(isp, &src->plogx_portlo, dst->plogx_portlo); ISP_IOXGET_16(isp, &src->plogx_rspsz_porthi, dst->plogx_rspsz_porthi); for (i = 0; i < 11; i++) { - ISP_IOXGET_16(isp, &src->plogx_ioparm[i].lo16, - dst->plogx_ioparm[i].lo16); - ISP_IOXGET_16(isp, &src->plogx_ioparm[i].hi16, - dst->plogx_ioparm[i].hi16); + ISP_IOXGET_16(isp, &src->plogx_ioparm[i].lo16, dst->plogx_ioparm[i].lo16); + ISP_IOXGET_16(isp, &src->plogx_ioparm[i].hi16, dst->plogx_ioparm[i].hi16); } } @@ -1442,10 +1442,8 @@ isp_put_plogx(ispsoftc_t *isp, isp_plogx_t *src, isp_plogx_t *dst) ISP_IOXPUT_16(isp, src->plogx_portlo, &dst->plogx_portlo); ISP_IOXPUT_16(isp, src->plogx_rspsz_porthi, &dst->plogx_rspsz_porthi); for (i = 0; i < 11; i++) { - ISP_IOXPUT_16(isp, src->plogx_ioparm[i].lo16, - &dst->plogx_ioparm[i].lo16); - ISP_IOXPUT_16(isp, src->plogx_ioparm[i].hi16, - &dst->plogx_ioparm[i].hi16); + ISP_IOXPUT_16(isp, src->plogx_ioparm[i].lo16, &dst->plogx_ioparm[i].lo16); + ISP_IOXPUT_16(isp, src->plogx_ioparm[i].hi16, &dst->plogx_ioparm[i].hi16); } } @@ -1461,29 +1459,20 @@ isp_get_ridacq(ispsoftc_t *isp, isp_ridacq_t *src, isp_ridacq_t *dst) ISP_IOXGET_16(isp, &src->ridacq_vp_port_lo, dst->ridacq_vp_port_lo); ISP_IOXGET_8(isp, &src->ridacq_vp_port_hi, dst->ridacq_vp_port_hi); ISP_IOXGET_8(isp, &src->ridacq_format, dst->ridacq_format); - for (i = 0; i < sizeof (src->ridacq_map) / sizeof (src->ridacq_map[0]); - i++) { + for (i = 0; i < sizeof (src->ridacq_map) / sizeof (src->ridacq_map[0]); i++) { ISP_IOXGET_16(isp, &src->ridacq_map[i], dst->ridacq_map[i]); } - for (i = 0; i < sizeof (src->ridacq_reserved1) / - sizeof (src->ridacq_reserved1[0]); i++) { - ISP_IOXGET_16(isp, &src->ridacq_reserved1[i], - dst->ridacq_reserved1[i]); + for (i = 0; i < sizeof (src->ridacq_reserved1) / sizeof (src->ridacq_reserved1[0]); i++) { + ISP_IOXGET_16(isp, &src->ridacq_reserved1[i], dst->ridacq_reserved1[i]); } if (dst->ridacq_format == 0) { - ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_acquired, - dst->un.type0.ridacq_vp_acquired); - ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_setup, - dst->un.type0.ridacq_vp_setup); - ISP_IOXGET_16(isp, &src->un.type0.ridacq_reserved0, - dst->un.type0.ridacq_reserved0); + ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_acquired, dst->un.type0.ridacq_vp_acquired); + ISP_IOXGET_8(isp, &src->un.type0.ridacq_vp_setup, dst->un.type0.ridacq_vp_setup); + ISP_IOXGET_16(isp, &src->un.type0.ridacq_reserved0, dst->un.type0.ridacq_reserved0); } else if (dst->ridacq_format == 1) { - ISP_IOXGET_16(isp, &src->un.type1.ridacq_vp_count, - dst->un.type1.ridacq_vp_count); - ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_index, - dst->un.type1.ridacq_vp_index); - ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_status, - dst->un.type1.ridacq_vp_status); + ISP_IOXGET_16(isp, &src->un.type1.ridacq_vp_count, dst->un.type1.ridacq_vp_count); + ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_index, dst->un.type1.ridacq_vp_index); + ISP_IOXGET_8(isp, &src->un.type1.ridacq_vp_status, dst->un.type1.ridacq_vp_status); } else { ISP_MEMZERO(&dst->un, sizeof (dst->un)); } @@ -1509,18 +1498,14 @@ isp_get_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst) ISP_IOXGET_16(isp, &src->ctp_reserved1, dst->ctp_reserved1); ISP_IOXGET_16(isp, &src->ctp_rsp_cnt, dst->ctp_rsp_cnt); for (i = 0; i < 5; i++) { - ISP_IOXGET_16(isp, &src->ctp_reserved2[i], - dst->ctp_reserved2[i]); + ISP_IOXGET_16(isp, &src->ctp_reserved2[i], dst->ctp_reserved2[i]); } ISP_IOXGET_32(isp, &src->ctp_rsp_bcnt, dst->ctp_rsp_bcnt); ISP_IOXGET_32(isp, &src->ctp_cmd_bcnt, dst->ctp_cmd_bcnt); for (i = 0; i < 2; i++) { - ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_base, - dst->ctp_dataseg[i].ds_base); - ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_basehi, - dst->ctp_dataseg[i].ds_basehi); - ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_count, - dst->ctp_dataseg[i].ds_count); + ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_base, dst->ctp_dataseg[i].ds_base); + ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_basehi, dst->ctp_dataseg[i].ds_basehi); + ISP_IOXGET_32(isp, &src->ctp_dataseg[i].ds_count, dst->ctp_dataseg[i].ds_count); } } @@ -1545,12 +1530,9 @@ isp_get_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst) ISP_IOXGET_32(isp, &src->ms_rsp_bcnt, dst->ms_rsp_bcnt); ISP_IOXGET_32(isp, &src->ms_cmd_bcnt, dst->ms_cmd_bcnt); for (i = 0; i < 2; i++) { - ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_base, - dst->ms_dataseg[i].ds_base); - ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_basehi, - dst->ms_dataseg[i].ds_basehi); - ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_count, - dst->ms_dataseg[i].ds_count); + ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_base, dst->ms_dataseg[i].ds_base); + ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_basehi, dst->ms_dataseg[i].ds_basehi); + ISP_IOXGET_32(isp, &src->ms_dataseg[i].ds_count, dst->ms_dataseg[i].ds_count); } } @@ -1570,18 +1552,14 @@ isp_put_ct_pt(ispsoftc_t *isp, isp_ct_pt_t *src, isp_ct_pt_t *dst) ISP_IOXPUT_16(isp, src->ctp_reserved1, &dst->ctp_reserved1); ISP_IOXPUT_16(isp, src->ctp_rsp_cnt, &dst->ctp_rsp_cnt); for (i = 0; i < 5; i++) { - ISP_IOXPUT_16(isp, src->ctp_reserved2[i], - &dst->ctp_reserved2[i]); + ISP_IOXPUT_16(isp, src->ctp_reserved2[i], &dst->ctp_reserved2[i]); } ISP_IOXPUT_32(isp, src->ctp_rsp_bcnt, &dst->ctp_rsp_bcnt); ISP_IOXPUT_32(isp, src->ctp_cmd_bcnt, &dst->ctp_cmd_bcnt); for (i = 0; i < 2; i++) { - ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_base, - &dst->ctp_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_basehi, - &dst->ctp_dataseg[i].ds_basehi); - ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_count, - &dst->ctp_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_base, &dst->ctp_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_basehi, &dst->ctp_dataseg[i].ds_basehi); + ISP_IOXPUT_32(isp, src->ctp_dataseg[i].ds_count, &dst->ctp_dataseg[i].ds_count); } } @@ -1606,12 +1584,9 @@ isp_put_ms(ispsoftc_t *isp, isp_ms_t *src, isp_ms_t *dst) ISP_IOXPUT_32(isp, src->ms_rsp_bcnt, &dst->ms_rsp_bcnt); ISP_IOXPUT_32(isp, src->ms_cmd_bcnt, &dst->ms_cmd_bcnt); for (i = 0; i < 2; i++) { - ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_base, - &dst->ms_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_basehi, - &dst->ms_dataseg[i].ds_basehi); - ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_count, - &dst->ms_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_base, &dst->ms_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_basehi, &dst->ms_dataseg[i].ds_basehi); + ISP_IOXPUT_32(isp, src->ms_dataseg[i].ds_count, &dst->ms_dataseg[i].ds_count); } } @@ -1634,8 +1609,7 @@ isp_put_sns_request(ispsoftc_t *isp, sns_screq_t *src, sns_screq_t *dst) } void -isp_put_gid_ft_request(ispsoftc_t *isp, sns_gid_ft_req_t *src, - sns_gid_ft_req_t *dst) +isp_put_gid_ft_request(ispsoftc_t *isp, sns_gid_ft_req_t *src, sns_gid_ft_req_t *dst) { ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen); ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0); @@ -1652,8 +1626,7 @@ isp_put_gid_ft_request(ispsoftc_t *isp, sns_gid_ft_req_t *src, } void -isp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src, - sns_gxn_id_req_t *dst) +isp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src, sns_gxn_id_req_t *dst) { ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen); ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0); @@ -1674,8 +1647,7 @@ isp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src, * isn't always 16 bit words. */ void -isp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src, - sns_scrsp_t *dst, int nwords) +isp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src, sns_scrsp_t *dst, int nwords) { int i; isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); @@ -1694,20 +1666,15 @@ isp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src, } void -isp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src, - sns_gid_ft_rsp_t *dst, int nwords) +isp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src, sns_gid_ft_rsp_t *dst, int nwords) { int i; isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); for (i = 0; i < nwords; i++) { int j; - ISP_IOXGET_8(isp, - &src->snscb_ports[i].control, - dst->snscb_ports[i].control); + ISP_IOXGET_8(isp, &src->snscb_ports[i].control, dst->snscb_ports[i].control); for (j = 0; j < 3; j++) { - ISP_IOXGET_8(isp, - &src->snscb_ports[i].portid[j], - dst->snscb_ports[i].portid[j]); + ISP_IOXGET_8(isp, &src->snscb_ports[i].portid[j], dst->snscb_ports[i].portid[j]); } if (dst->snscb_ports[i].control & 0x80) { break; @@ -1716,76 +1683,66 @@ isp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src, } void -isp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src, - sns_gxn_id_rsp_t *dst) +isp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src, sns_gxn_id_rsp_t *dst) { int i; isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); - for (i = 0; i < 8; i++) + for (i = 0; i < 8; i++) { ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]); -} - -void -isp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src, - sns_gff_id_rsp_t *dst) -{ - int i; - isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); - for (i = 0; i < 32; i++) { - ISP_IOXGET_32(isp, &src->snscb_fc4_features[i], - dst->snscb_fc4_features[i]); } } void -isp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src, - sns_ga_nxt_rsp_t *dst) +isp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src, sns_gff_id_rsp_t *dst) +{ + int i; + isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); + for (i = 0; i < 32; i++) { + ISP_IOXGET_32(isp, &src->snscb_fc4_features[i], dst->snscb_fc4_features[i]); + } +} + +void +isp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src, sns_ga_nxt_rsp_t *dst) { int i; isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type); for (i = 0; i < 3; i++) { - ISP_IOXGET_8(isp, &src->snscb_port_id[i], - dst->snscb_port_id[i]); + ISP_IOXGET_8(isp, &src->snscb_port_id[i], dst->snscb_port_id[i]); } for (i = 0; i < 8; i++) { - ISP_IOXGET_8(isp, &src->snscb_portname[i], - dst->snscb_portname[i]); + ISP_IOXGET_8(isp, &src->snscb_portname[i], dst->snscb_portname[i]); } ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen); for (i = 0; i < 255; i++) { ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]); } for (i = 0; i < 8; i++) { - ISP_IOXGET_8(isp, &src->snscb_nodename[i], - dst->snscb_nodename[i]); + ISP_IOXGET_8(isp, &src->snscb_nodename[i], dst->snscb_nodename[i]); } ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen); for (i = 0; i < 255; i++) { ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]); } for (i = 0; i < 8; i++) { - ISP_IOXGET_8(isp, &src->snscb_ipassoc[i], - dst->snscb_ipassoc[i]); + ISP_IOXGET_8(isp, &src->snscb_ipassoc[i], dst->snscb_ipassoc[i]); } for (i = 0; i < 16; i++) { ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]); } for (i = 0; i < 4; i++) { - ISP_IOXGET_8(isp, &src->snscb_svc_class[i], - dst->snscb_svc_class[i]); + ISP_IOXGET_8(isp, &src->snscb_svc_class[i], dst->snscb_svc_class[i]); } for (i = 0; i < 32; i++) { - ISP_IOXGET_8(isp, &src->snscb_fc4_types[i], - dst->snscb_fc4_types[i]); + ISP_IOXGET_8(isp, &src->snscb_fc4_types[i], dst->snscb_fc4_types[i]); } for (i = 0; i < 8; i++) { ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]); } ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved); for (i = 0; i < 3; i++) { - ISP_IOXGET_8(isp, &src->snscb_hardaddr[i], - dst->snscb_hardaddr[i]); + ISP_IOXGET_8(isp, &src->snscb_hardaddr[i], dst->snscb_hardaddr[i]); } } @@ -1815,8 +1772,7 @@ isp_get_els(ispsoftc_t *isp, els_t *src, els_t *dst) ISP_IOXGET_32(isp, &src->els_subcode1, dst->els_subcode1); ISP_IOXGET_32(isp, &src->els_subcode2, dst->els_subcode2); for (i = 0; i < 20; i++) { - ISP_IOXGET_8(isp, &src->els_reserved4[i], - dst->els_reserved4[i]); + ISP_IOXGET_8(isp, &src->els_reserved4[i], dst->els_reserved4[i]); } } @@ -1890,18 +1846,13 @@ isp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *dst) ISP_IOZGET_8(isp, &src->fcp_cmnd_lun[i], dst->fcp_cmnd_lun[i]); } ISP_IOZGET_8(isp, &src->fcp_cmnd_crn, dst->fcp_cmnd_crn); - ISP_IOZGET_8(isp, &src->fcp_cmnd_task_attribute, - dst->fcp_cmnd_task_attribute); - ISP_IOZGET_8(isp, &src->fcp_cmnd_task_management, - dst->fcp_cmnd_task_management); - ISP_IOZGET_8(isp, &src->fcp_cmnd_alen_datadir, - dst->fcp_cmnd_alen_datadir); + ISP_IOZGET_8(isp, &src->fcp_cmnd_task_attribute, dst->fcp_cmnd_task_attribute); + ISP_IOZGET_8(isp, &src->fcp_cmnd_task_management, dst->fcp_cmnd_task_management); + ISP_IOZGET_8(isp, &src->fcp_cmnd_alen_datadir, dst->fcp_cmnd_alen_datadir); for (i = 0; i < 16; i++) { - ISP_IOZGET_8(isp, &src->cdb_dl.sf.fcp_cmnd_cdb[i], - dst->cdb_dl.sf.fcp_cmnd_cdb[i]); + ISP_IOZGET_8(isp, &src->cdb_dl.sf.fcp_cmnd_cdb[i], dst->cdb_dl.sf.fcp_cmnd_cdb[i]); } - ISP_IOZGET_32(isp, &src->cdb_dl.sf.fcp_cmnd_dl, - dst->cdb_dl.sf.fcp_cmnd_dl); + ISP_IOZGET_32(isp, &src->cdb_dl.sf.fcp_cmnd_dl, dst->cdb_dl.sf.fcp_cmnd_dl); } void @@ -1914,8 +1865,7 @@ isp_put_rft_id(ispsoftc_t *isp, rft_id_t *src, rft_id_t *dst) ISP_IOZPUT_8(isp, src->rftid_portid[i], &dst->rftid_portid[i]); } for (i = 0; i < 8; i++) { - ISP_IOZPUT_32(isp, src->rftid_fc4types[i], - &dst->rftid_fc4types[i]); + ISP_IOZPUT_32(isp, src->rftid_fc4types[i], &dst->rftid_fc4types[i]); } } @@ -2226,9 +2176,8 @@ isp_save_xs_tgt(ispsoftc_t *isp, void *xs, uint32_t *handlep) void * isp_find_xs_tgt(ispsoftc_t *isp, uint32_t handle) { - if (handle == 0 || IS_TARGET_HANDLE(handle) == 0 || - (handle & ISP_HANDLE_MASK) > isp->isp_maxcmds) { - isp_prt(isp, ISP_LOGERR, "bad handle in isp_find_xs_tgt"); + if (handle == 0 || IS_TARGET_HANDLE(handle) == 0 || (handle & ISP_HANDLE_MASK) > isp->isp_maxcmds) { + isp_prt(isp, ISP_LOGERR, "bad handle %u in isp_find_xs_tgt", handle); return (NULL); } else { return (isp->isp_tgtlist[(handle & ISP_HANDLE_MASK) - 1]); @@ -2242,7 +2191,11 @@ isp_find_tgt_handle(ispsoftc_t *isp, void *xs) if (xs != NULL) { for (i = 0; i < isp->isp_maxcmds; i++) { if (isp->isp_tgtlist[i] == xs) { - return ((i+1) & ISP_HANDLE_MASK); + uint32_t handle = i; + handle += 1; + handle &= ISP_HANDLE_MASK; + handle |= 0x8000; + return (handle); } } } @@ -2252,15 +2205,460 @@ isp_find_tgt_handle(ispsoftc_t *isp, void *xs) void isp_destroy_tgt_handle(ispsoftc_t *isp, uint32_t handle) { - if (handle == 0 || IS_TARGET_HANDLE(handle) == 0 || - (handle & ISP_HANDLE_MASK) > isp->isp_maxcmds) { - isp_prt(isp, ISP_LOGERR, - "bad handle in isp_destroy_tgt_handle"); + if (handle == 0 || IS_TARGET_HANDLE(handle) == 0 || (handle & ISP_HANDLE_MASK) > isp->isp_maxcmds) { + isp_prt(isp, ISP_LOGERR, "bad handle in isp_destroy_tgt_handle"); } else { isp->isp_tgtlist[(handle & ISP_HANDLE_MASK) - 1] = NULL; } } +/* + * Find target mode entries + */ +int +isp_find_pdb_by_wwn(ispsoftc_t *isp, int chan, uint64_t wwn, fcportdb_t **lptr) +{ + fcparam *fcp; + int i; + + if (chan < isp->isp_nchan) { + fcp = FCPARAM(isp, chan); + for (i = 0; i < MAX_FC_TARG; i++) { + fcportdb_t *lp = &fcp->portdb[i]; + + if (lp->target_mode == 0) { + continue; + } + if (lp->port_wwn == wwn) { + *lptr = lp; + return (1); + } + } + } + return (0); +} + +int +isp_find_pdb_by_loopid(ispsoftc_t *isp, int chan, uint32_t loopid, fcportdb_t **lptr) +{ + fcparam *fcp; + int i; + + if (chan < isp->isp_nchan) { + fcp = FCPARAM(isp, chan); + for (i = 0; i < MAX_FC_TARG; i++) { + fcportdb_t *lp = &fcp->portdb[i]; + + if (lp->target_mode == 0) { + continue; + } + if (lp->handle == loopid) { + *lptr = lp; + return (1); + } + } + } + return (0); +} + +int +isp_find_pdb_by_sid(ispsoftc_t *isp, int chan, uint32_t sid, fcportdb_t **lptr) +{ + fcparam *fcp; + int i; + + if (chan >= isp->isp_nchan) { + return (0); + } + + fcp = FCPARAM(isp, chan); + for (i = 0; i < MAX_FC_TARG; i++) { + fcportdb_t *lp = &fcp->portdb[i]; + + if (lp->target_mode == 0) { + continue; + } + if (lp->portid == sid) { + *lptr = lp; + return (1); + } + } + return (0); +} + +void +isp_find_chan_by_did(ispsoftc_t *isp, uint32_t did, uint16_t *cp) +{ + uint16_t chan; + + *cp = ISP_NOCHAN; + for (chan = 0; chan < isp->isp_nchan; chan++) { + fcparam *fcp = FCPARAM(isp, chan); + if ((fcp->role & ISP_ROLE_TARGET) == 0 || fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) { + continue; + } + if (fcp->isp_portid == did) { + *cp = chan; + break; + } + } +} + +/* + * Add an initiator device to the port database + */ +void +isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id) +{ + fcparam *fcp; + fcportdb_t *lp; + isp_notify_t nt; + int i; + + fcp = FCPARAM(isp, chan); + + if (nphdl >= MAX_NPORT_HANDLE) { + isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x", + __func__, chan, (unsigned long long) ini, nphdl, s_id); + return; + } + + lp = NULL; + if (fcp->isp_tgt_map[nphdl]) { + lp = &fcp->portdb[fcp->isp_tgt_map[nphdl] - 1]; + } else { + /* + * Make sure the addition of a new target mode entry doesn't duplicate entries + * with the same N-Port handles, the same portids or the same Port WWN. + */ + for (i = 0; i < MAX_FC_TARG; i++) { + lp = &fcp->portdb[i]; + if (lp->target_mode == 0) { + lp = NULL; + continue; + } + if (lp->handle == nphdl) { + break; + } + if (s_id != PORT_ANY && lp->portid == s_id) { + break; + } + if (VALID_INI(ini) && lp->port_wwn == ini) { + break; + } + lp = NULL; + } + + } + + if (lp) { + int something = 0; + if (lp->handle != nphdl) { + isp_prt(isp, ISP_LOGWARN, "%s: Chan %d attempt to re-enter N-port handle 0x%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x", + __func__, chan, nphdl, (unsigned long long)ini, s_id, (unsigned long long) lp->port_wwn, lp->handle, lp->portid); + return; + } + if (s_id != PORT_NONE) { + if (lp->portid == PORT_NONE) { + lp->portid = s_id; + isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets Port ID 0x%06x", __func__, chan, nphdl, s_id); + something++; + } else if (lp->portid != s_id) { + isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x tries to change Port ID 0x%06x to 0x%06x", __func__, chan, nphdl, + lp->portid, s_id); + return; + } + } + if (VALID_INI(ini)) { + if (!VALID_INI(lp->port_wwn)) { + lp->port_wwn = ini; + isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets WWN 0x%016llxx", __func__, chan, nphdl, (unsigned long long) ini); + something++; + } else if (lp->port_wwn != ini) { + isp_prt(isp, ISP_LOGWARN, "%s: Chan %d N-port handle 0x%04x tries to change WWN 0x%016llx to 0x%016llx", __func__, chan, nphdl, + (unsigned long long) lp->port_wwn, (unsigned long long) ini); + return; + } + } + + if (!something) { + isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x reentered", __func__, chan, + (unsigned long long) lp->port_wwn, lp->handle, lp->portid); + } + return; + } + + /* + * Find a new spot + */ + for (i = MAX_FC_TARG - 1; i >= 0; i--) { + if (fcp->portdb[i].target_mode == 1) { + continue; + } + if (fcp->portdb[i].state == FC_PORTDB_STATE_NIL) { + break; + } + } + if (i < 0) { + isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x- no room in port database", + __func__, chan, (unsigned long long) ini, nphdl, s_id); + return; + } + + lp = &fcp->portdb[i]; + ISP_MEMZERO(lp, sizeof (fcportdb_t)); + lp->target_mode = 1; + lp->handle = nphdl; + lp->portid = s_id; + lp->port_wwn = ini; + fcp->isp_tgt_map[nphdl] = i + 1; + + isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d added", __func__, chan, (unsigned long long) ini, nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1); + + ISP_MEMZERO(&nt, sizeof (nt)); + nt.nt_hba = isp; + nt.nt_wwn = ini; + nt.nt_tgt = FCPARAM(isp, chan)->isp_wwpn; + nt.nt_sid = s_id; + nt.nt_did = FCPARAM(isp, chan)->isp_portid; + nt.nt_nphdl = nphdl; + nt.nt_channel = chan; + nt.nt_ncode = NT_ARRIVED; + isp_async(isp, ISPASYNC_TARGET_NOTIFY, &nt); +} + +/* + * Remove a target device to the port database + */ +void +isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id) +{ + fcparam *fcp; + isp_notify_t nt; + fcportdb_t *lp; + + if (nphdl >= MAX_NPORT_HANDLE) { + isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x", + __func__, chan, (unsigned long long) ini, nphdl, s_id); + return; + } + + fcp = FCPARAM(isp, chan); + if (fcp->isp_tgt_map[nphdl] == 0) { + lp = NULL; + } else { + lp = &fcp->portdb[fcp->isp_tgt_map[nphdl] - 1]; + if (lp->target_mode == 0) { + lp = NULL; + } + } + if (lp == NULL) { + isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x cannot be found to be cleared", + __func__, chan, (unsigned long long) ini, nphdl, s_id); + return; + } + isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d cleared", + __func__, chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid, fcp->isp_tgt_map[nphdl] - 1); + fcp->isp_tgt_map[nphdl] = 0; + + ISP_MEMZERO(&nt, sizeof (nt)); + nt.nt_hba = isp; + nt.nt_wwn = lp->port_wwn; + nt.nt_tgt = FCPARAM(isp, chan)->isp_wwpn; + nt.nt_sid = lp->portid; + nt.nt_did = FCPARAM(isp, chan)->isp_portid; + nt.nt_nphdl = nphdl; + nt.nt_channel = chan; + nt.nt_ncode = NT_DEPARTED; + isp_async(isp, ISPASYNC_TARGET_NOTIFY, &nt); +} + +void +isp_del_all_wwn_entries(ispsoftc_t *isp, int chan) +{ + fcparam *fcp; + int i; + + if (!IS_FC(isp)) { + return; + } + + /* + * Handle iterations over all channels via recursion + */ + if (chan == ISP_NOCHAN) { + for (chan = 0; chan < isp->isp_nchan; chan++) { + isp_del_all_wwn_entries(isp, chan); + } + return; + } + + if (chan > isp->isp_nchan) { + return; + } + + fcp = FCPARAM(isp, chan); + if (fcp == NULL) { + return; + } + for (i = 0; i < MAX_NPORT_HANDLE; i++) { + if (fcp->isp_tgt_map[i]) { + fcportdb_t *lp = &fcp->portdb[fcp->isp_tgt_map[i] - 1]; + isp_del_wwn_entry(isp, chan, lp->port_wwn, lp->handle, lp->portid); + } + } +} + +void +isp_del_wwn_entries(ispsoftc_t *isp, isp_notify_t *mp) +{ + fcportdb_t *lp; + + /* + * Handle iterations over all channels via recursion + */ + if (mp->nt_channel == ISP_NOCHAN) { + for (mp->nt_channel = 0; mp->nt_channel < isp->isp_nchan; mp->nt_channel++) { + isp_del_wwn_entries(isp, mp); + } + mp->nt_channel = ISP_NOCHAN; + return; + } + + /* + * We have an entry which is only partially identified. + * + * It's only known by WWN, N-Port handle, or Port ID. + * We need to find the actual entry so we can delete it. + */ + if (mp->nt_nphdl != NIL_HANDLE) { + if (isp_find_pdb_by_loopid(isp, mp->nt_channel, mp->nt_nphdl, &lp)) { + isp_del_wwn_entry(isp, mp->nt_channel, lp->port_wwn, lp->handle, lp->portid); + } else { + isp_prt(isp, ISP_LOGWARN, "unable to find entry to delete for N-port handle 0x%x", mp->nt_nphdl); + } + return; + } + if (mp->nt_wwn != INI_ANY) { + if (isp_find_pdb_by_wwn(isp, mp->nt_channel, mp->nt_wwn, &lp)) { + isp_del_wwn_entry(isp, mp->nt_channel, lp->port_wwn, lp->handle, lp->portid); + } else { + isp_prt(isp, ISP_LOGWARN, "unable to find entry to delete for initiator WWN 0x%016llx", (unsigned long long)mp->nt_wwn); + } + return; + } + if (mp->nt_sid != PORT_ANY) { + if (isp_find_pdb_by_sid(isp, mp->nt_channel, mp->nt_sid, &lp)) { + isp_del_wwn_entry(isp, mp->nt_channel, lp->port_wwn, lp->handle, lp->portid); + } else { + isp_prt(isp, ISP_LOGWARN, "unable to find entry to delete for Initiator S_ID 0x%x", mp->nt_sid); + } + return; + } + isp_prt(isp, ISP_LOGWARN, "%s: unable to find entries to delete", __func__); +} + +/* + * Change Roles + */ +int +isp_fc_change_role(ispsoftc_t *isp, int chan, int new_role) +{ + fcparam *fcp = FCPARAM(isp, chan); + + if (chan >= isp->isp_nchan) { + isp_prt(isp, ISP_LOGWARN, "%s: bad channel %d", __func__, chan); + return (ENXIO); + } + if (chan == 0) { +#ifdef ISP_TARGET_MODE + isp_del_all_wwn_entries(isp, chan); +#endif + isp_clear_commands(isp); + + isp_reset(isp, 0); + if (isp->isp_state != ISP_RESETSTATE) { + isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__); + return (EIO); + } + fcp->role = new_role; + isp_init(isp); + if (isp->isp_state != ISP_INITSTATE) { + isp_prt(isp, ISP_LOGERR, "%s: cannot init card", __func__); + return (EIO); + } + isp->isp_state = ISP_RUNSTATE; + return (0); + } else if (ISP_CAP_MULTI_ID(isp)) { + mbreg_t mbs; + vp_modify_t *vp; + uint8_t qe[QENTRY_LEN], *scp; + + ISP_MEMZERO(qe, QENTRY_LEN); + /* Acquire Scratch */ + + if (FC_SCRATCH_ACQUIRE(isp, chan)) { + return (EBUSY); + } + scp = fcp->isp_scratch; + + /* + * Build a VP MODIFY command in memory + */ + vp = (vp_modify_t *) qe; + vp->vp_mod_hdr.rqs_entry_type = RQSTYPE_VP_MODIFY; + vp->vp_mod_hdr.rqs_entry_count = 1; + vp->vp_mod_cnt = 1; + vp->vp_mod_idx0 = chan; + vp->vp_mod_cmd = VP_MODIFY_ENA; + vp->vp_mod_ports[0].options = ICB2400_VPOPT_ENABLED; + if (new_role & ISP_ROLE_INITIATOR) { + vp->vp_mod_ports[0].options |= ICB2400_VPOPT_INI_ENABLE; + } + if ((new_role & ISP_ROLE_TARGET) == 0) { + vp->vp_mod_ports[0].options |= ICB2400_VPOPT_TGT_DISABLE; + } + MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwpn, fcp->isp_wwpn); + MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwnn, fcp->isp_wwnn); + isp_put_vp_modify(isp, vp, (vp_modify_t *) scp); + + /* + * Build a EXEC IOCB A64 command that points to the VP MODIFY command + */ + MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, 0); + mbs.param[1] = QENTRY_LEN; + mbs.param[2] = DMA_WD1(fcp->isp_scdma); + mbs.param[3] = DMA_WD0(fcp->isp_scdma); + mbs.param[6] = DMA_WD3(fcp->isp_scdma); + mbs.param[7] = DMA_WD2(fcp->isp_scdma); + MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN); + isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs); + if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { + FC_SCRATCH_RELEASE(isp, chan); + return (EIO); + } + MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN); + isp_get_vp_modify(isp, (vp_modify_t *)&scp[QENTRY_LEN], vp); + +#ifdef ISP_TARGET_MODE + isp_del_all_wwn_entries(isp, chan); +#endif + /* + * Release Scratch + */ + FC_SCRATCH_RELEASE(isp, chan); + + if (vp->vp_mod_status != VP_STS_OK) { + isp_prt(isp, ISP_LOGERR, "%s: VP_MODIFY of Chan %d failed with status %d", __func__, chan, vp->vp_mod_status); + return (EIO); + } + fcp->role = new_role; + return (0); + } else { + return (EINVAL); + } +} + void isp_put_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst) { @@ -2283,8 +2681,7 @@ isp_put_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst) ISP_IOXPUT_8(isp, src->at_cdblen, &dst->at_cdblen); ISP_IOXPUT_8(isp, src->at_tgt, &dst->at_tgt); ISP_IOXPUT_8(isp, src->at_status, &dst->at_status); - ISP_IOXPUT_8(isp, src->at_scsi_status, - &dst->at_scsi_status); + ISP_IOXPUT_8(isp, src->at_scsi_status, &dst->at_scsi_status); ISP_IOXPUT_8(isp, src->at_tag_val, &dst->at_tag_val); ISP_IOXPUT_8(isp, src->at_tag_type, &dst->at_tag_type); } @@ -2319,8 +2716,7 @@ isp_get_atio(ispsoftc_t *isp, at_entry_t *src, at_entry_t *dst) ISP_IOXGET_8(isp, &src->at_cdblen, dst->at_cdblen); ISP_IOXGET_8(isp, &src->at_tgt, dst->at_tgt); ISP_IOXGET_8(isp, &src->at_status, dst->at_status); - ISP_IOXGET_8(isp, &src->at_scsi_status, - dst->at_scsi_status); + ISP_IOXGET_8(isp, &src->at_scsi_status, dst->at_scsi_status); ISP_IOXGET_8(isp, &src->at_tag_val, dst->at_tag_val); ISP_IOXGET_8(isp, &src->at_tag_type, dst->at_tag_type); } @@ -2357,8 +2753,7 @@ isp_put_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst) ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]); } for (i = 0; i < 6; i++) { - ISP_IOXPUT_16(isp, src->at_reserved2[i], - &dst->at_reserved2[i]); + ISP_IOXPUT_16(isp, src->at_reserved2[i], &dst->at_reserved2[i]); } ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid); } @@ -2386,8 +2781,7 @@ isp_put_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst) ISP_IOXPUT_16(isp, src->at_wwpn[i], &dst->at_wwpn[i]); } for (i = 0; i < 6; i++) { - ISP_IOXPUT_16(isp, src->at_reserved2[i], - &dst->at_reserved2[i]); + ISP_IOXPUT_16(isp, src->at_reserved2[i], &dst->at_reserved2[i]); } ISP_IOXPUT_16(isp, src->at_oxid, &dst->at_oxid); } @@ -2416,8 +2810,7 @@ isp_get_atio2(ispsoftc_t *isp, at2_entry_t *src, at2_entry_t *dst) ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]); } for (i = 0; i < 6; i++) { - ISP_IOXGET_16(isp, &src->at_reserved2[i], - dst->at_reserved2[i]); + ISP_IOXGET_16(isp, &src->at_reserved2[i], dst->at_reserved2[i]); } ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid); } @@ -2445,8 +2838,7 @@ isp_get_atio2e(ispsoftc_t *isp, at2e_entry_t *src, at2e_entry_t *dst) ISP_IOXGET_16(isp, &src->at_wwpn[i], dst->at_wwpn[i]); } for (i = 0; i < 6; i++) { - ISP_IOXGET_16(isp, &src->at_reserved2[i], - dst->at_reserved2[i]); + ISP_IOXGET_16(isp, &src->at_reserved2[i], dst->at_reserved2[i]); } ISP_IOXGET_16(isp, &src->at_oxid, dst->at_oxid); } @@ -2495,10 +2887,8 @@ isp_put_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst) ISP_IOXPUT_16(isp, src->ct_timeout, &dst->ct_timeout); ISP_IOXPUT_16(isp, src->ct_seg_count, &dst->ct_seg_count); for (i = 0; i < ISP_RQDSEG; i++) { - ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_base, - &dst->ct_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_count, - &dst->ct_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_base, &dst->ct_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->ct_dataseg[i].ds_count, &dst->ct_dataseg[i].ds_count); } } @@ -2524,8 +2914,7 @@ isp_get_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst) ISP_IOXGET_8(isp, &src->ct_reserved2, dst->ct_reserved2); ISP_IOXGET_8(isp, &src->ct_tgt, dst->ct_tgt); ISP_IOXGET_8(isp, &src->ct_status, dst->ct_status); - ISP_IOXGET_8(isp, &src->ct_scsi_status, - dst->ct_scsi_status); + ISP_IOXGET_8(isp, &src->ct_scsi_status, dst->ct_scsi_status); ISP_IOXGET_8(isp, &src->ct_tag_val, dst->ct_tag_val); ISP_IOXGET_8(isp, &src->ct_tag_type, dst->ct_tag_type); } @@ -2535,12 +2924,8 @@ isp_get_ctio(ispsoftc_t *isp, ct_entry_t *src, ct_entry_t *dst) ISP_IOXGET_16(isp, &src->ct_timeout, dst->ct_timeout); ISP_IOXGET_16(isp, &src->ct_seg_count, dst->ct_seg_count); for (i = 0; i < ISP_RQDSEG; i++) { - ISP_IOXGET_32(isp, - &src->ct_dataseg[i].ds_base, - dst->ct_dataseg[i].ds_base); - ISP_IOXGET_32(isp, - &src->ct_dataseg[i].ds_count, - dst->ct_dataseg[i].ds_count); + ISP_IOXGET_32(isp, &src->ct_dataseg[i].ds_base, dst->ct_dataseg[i].ds_base); + ISP_IOXGET_32(isp, &src->ct_dataseg[i].ds_count, dst->ct_dataseg[i].ds_count); } } @@ -2559,71 +2944,42 @@ isp_put_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst) ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid); ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff); if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) { - ISP_IOXPUT_32(isp, src->rsp.m0._reserved, - &dst->rsp.m0._reserved); - ISP_IOXPUT_16(isp, src->rsp.m0._reserved2, - &dst->rsp.m0._reserved2); - ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status, - &dst->rsp.m0.ct_scsi_status); - ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, - &dst->rsp.m0.ct_xfrlen); + ISP_IOXPUT_32(isp, src->rsp.m0._reserved, &dst->rsp.m0._reserved); + ISP_IOXPUT_16(isp, src->rsp.m0._reserved2, &dst->rsp.m0._reserved2); + ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status, &dst->rsp.m0.ct_scsi_status); + ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, &dst->rsp.m0.ct_xfrlen); if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) { for (i = 0; i < ISP_RQDSEG_T2; i++) { - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg[i].ds_base, - &dst->rsp.m0.u.ct_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg[i].ds_count, - &dst->rsp.m0.u.ct_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg[i].ds_base, &dst->rsp.m0.u.ct_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg[i].ds_count, &dst->rsp.m0.u.ct_dataseg[i].ds_count); } } else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) { for (i = 0; i < ISP_RQDSEG_T3; i++) { - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg64[i].ds_base, - &dst->rsp.m0.u.ct_dataseg64[i].ds_base); - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg64[i].ds_basehi, - &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi); - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg64[i].ds_count, - &dst->rsp.m0.u.ct_dataseg64[i].ds_count); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_base, &dst->rsp.m0.u.ct_dataseg64[i].ds_base); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_basehi, &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_count, &dst->rsp.m0.u.ct_dataseg64[i].ds_count); } } else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) { - ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type, - &dst->rsp.m0.u.ct_dslist.ds_type); - ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment, + ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type, &dst->rsp.m0.u.ct_dslist.ds_type); ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment, &dst->rsp.m0.u.ct_dslist.ds_segment); - ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base, - &dst->rsp.m0.u.ct_dslist.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base, &dst->rsp.m0.u.ct_dslist.ds_base); } } else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) { - ISP_IOXPUT_16(isp, src->rsp.m1._reserved, - &dst->rsp.m1._reserved); - ISP_IOXPUT_16(isp, src->rsp.m1._reserved2, - &dst->rsp.m1._reserved2); - ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen, - &dst->rsp.m1.ct_senselen); - ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status, - &dst->rsp.m1.ct_scsi_status); - ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, - &dst->rsp.m1.ct_resplen); + ISP_IOXPUT_16(isp, src->rsp.m1._reserved, &dst->rsp.m1._reserved); + ISP_IOXPUT_16(isp, src->rsp.m1._reserved2, &dst->rsp.m1._reserved2); + ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen, &dst->rsp.m1.ct_senselen); + ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status, &dst->rsp.m1.ct_scsi_status); + ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, &dst->rsp.m1.ct_resplen); for (i = 0; i < MAXRESPLEN; i++) { - ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i], - &dst->rsp.m1.ct_resp[i]); + ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i], &dst->rsp.m1.ct_resp[i]); } } else { - ISP_IOXPUT_32(isp, src->rsp.m2._reserved, - &dst->rsp.m2._reserved); - ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, - &dst->rsp.m2._reserved2); - ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, - &dst->rsp.m2._reserved3); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, - &dst->rsp.m2.ct_datalen); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, - &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, - &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + ISP_IOXPUT_32(isp, src->rsp.m2._reserved, &dst->rsp.m2._reserved); + ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2); + ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); } } @@ -2641,71 +2997,42 @@ isp_put_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst) ISP_IOXPUT_32(isp, src->ct_resid, &dst->ct_resid); ISP_IOXPUT_32(isp, src->ct_reloff, &dst->ct_reloff); if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) { - ISP_IOXPUT_32(isp, src->rsp.m0._reserved, - &dst->rsp.m0._reserved); - ISP_IOXPUT_16(isp, src->rsp.m0._reserved2, - &dst->rsp.m0._reserved2); - ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status, - &dst->rsp.m0.ct_scsi_status); - ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, - &dst->rsp.m0.ct_xfrlen); + ISP_IOXPUT_32(isp, src->rsp.m0._reserved, &dst->rsp.m0._reserved); + ISP_IOXPUT_16(isp, src->rsp.m0._reserved2, &dst->rsp.m0._reserved2); + ISP_IOXPUT_16(isp, src->rsp.m0.ct_scsi_status, &dst->rsp.m0.ct_scsi_status); + ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, &dst->rsp.m0.ct_xfrlen); if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) { for (i = 0; i < ISP_RQDSEG_T2; i++) { - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg[i].ds_base, - &dst->rsp.m0.u.ct_dataseg[i].ds_base); - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg[i].ds_count, - &dst->rsp.m0.u.ct_dataseg[i].ds_count); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg[i].ds_base, &dst->rsp.m0.u.ct_dataseg[i].ds_base); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg[i].ds_count, &dst->rsp.m0.u.ct_dataseg[i].ds_count); } } else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO3) { for (i = 0; i < ISP_RQDSEG_T3; i++) { - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg64[i].ds_base, - &dst->rsp.m0.u.ct_dataseg64[i].ds_base); - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg64[i].ds_basehi, - &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi); - ISP_IOXPUT_32(isp, - src->rsp.m0.u.ct_dataseg64[i].ds_count, - &dst->rsp.m0.u.ct_dataseg64[i].ds_count); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_base, &dst->rsp.m0.u.ct_dataseg64[i].ds_base); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_basehi, &dst->rsp.m0.u.ct_dataseg64[i].ds_basehi); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dataseg64[i].ds_count, &dst->rsp.m0.u.ct_dataseg64[i].ds_count); } } else if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO4) { - ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type, - &dst->rsp.m0.u.ct_dslist.ds_type); - ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment, - &dst->rsp.m0.u.ct_dslist.ds_segment); - ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base, - &dst->rsp.m0.u.ct_dslist.ds_base); + ISP_IOXPUT_16(isp, src->rsp.m0.u.ct_dslist.ds_type, &dst->rsp.m0.u.ct_dslist.ds_type); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_segment, &dst->rsp.m0.u.ct_dslist.ds_segment); + ISP_IOXPUT_32(isp, src->rsp.m0.u.ct_dslist.ds_base, &dst->rsp.m0.u.ct_dslist.ds_base); } } else if ((src->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) { - ISP_IOXPUT_16(isp, src->rsp.m1._reserved, - &dst->rsp.m1._reserved); - ISP_IOXPUT_16(isp, src->rsp.m1._reserved2, - &dst->rsp.m1._reserved2); - ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen, - &dst->rsp.m1.ct_senselen); - ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status, - &dst->rsp.m1.ct_scsi_status); - ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, - &dst->rsp.m1.ct_resplen); + ISP_IOXPUT_16(isp, src->rsp.m1._reserved, &dst->rsp.m1._reserved); + ISP_IOXPUT_16(isp, src->rsp.m1._reserved2, &dst->rsp.m1._reserved2); + ISP_IOXPUT_16(isp, src->rsp.m1.ct_senselen, &dst->rsp.m1.ct_senselen); + ISP_IOXPUT_16(isp, src->rsp.m1.ct_scsi_status, &dst->rsp.m1.ct_scsi_status); + ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, &dst->rsp.m1.ct_resplen); for (i = 0; i < MAXRESPLEN; i++) { - ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i], - &dst->rsp.m1.ct_resp[i]); + ISP_IOXPUT_8(isp, src->rsp.m1.ct_resp[i], &dst->rsp.m1.ct_resp[i]); } } else { - ISP_IOXPUT_32(isp, src->rsp.m2._reserved, - &dst->rsp.m2._reserved); - ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, - &dst->rsp.m2._reserved2); - ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, - &dst->rsp.m2._reserved3); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, - &dst->rsp.m2.ct_datalen); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, - &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, - &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + ISP_IOXPUT_32(isp, src->rsp.m2._reserved, &dst->rsp.m2._reserved); + ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2); + ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); } } @@ -2732,23 +3059,16 @@ isp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst) ISP_IOXPUT_16(isp, src->ct_scsi_status, &dst->ct_scsi_status); if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) { ISP_IOXPUT_32(isp, src->rsp.m0.reloff, &dst->rsp.m0.reloff); - ISP_IOXPUT_32(isp, src->rsp.m0.reserved0, - &dst->rsp.m0.reserved0); - ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, - &dst->rsp.m0.ct_xfrlen); - ISP_IOXPUT_32(isp, src->rsp.m0.reserved1, - &dst->rsp.m0.reserved1); - ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_base, - &dst->rsp.m0.ds.ds_base); - ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_basehi, - &dst->rsp.m0.ds.ds_basehi); - ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_count, - &dst->rsp.m0.ds.ds_count); + ISP_IOXPUT_32(isp, src->rsp.m0.reserved0, &dst->rsp.m0.reserved0); + ISP_IOXPUT_32(isp, src->rsp.m0.ct_xfrlen, &dst->rsp.m0.ct_xfrlen); + ISP_IOXPUT_32(isp, src->rsp.m0.reserved1, &dst->rsp.m0.reserved1); + ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_base, &dst->rsp.m0.ds.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_basehi, &dst->rsp.m0.ds.ds_basehi); + ISP_IOXPUT_32(isp, src->rsp.m0.ds.ds_count, &dst->rsp.m0.ds.ds_count); } else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) { uint32_t *a, *b; - ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, - &dst->rsp.m1.ct_resplen); + ISP_IOXPUT_16(isp, src->rsp.m1.ct_resplen, &dst->rsp.m1.ct_resplen); ISP_IOXPUT_16(isp, src->rsp.m1.reserved, &dst->rsp.m1.reserved); a = (uint32_t *) src->rsp.m1.ct_resp; b = (uint32_t *) dst->rsp.m1.ct_resp; @@ -2756,18 +3076,12 @@ isp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst) *b++ = ISP_SWAP32(isp, *a++); } } else { - ISP_IOXPUT_32(isp, src->rsp.m2.reserved0, - &dst->rsp.m2.reserved0); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, - &dst->rsp.m2.ct_datalen); - ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, - &dst->rsp.m2.reserved1); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, - &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, - &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi); - ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, - &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + ISP_IOXPUT_32(isp, src->rsp.m2.reserved0, &dst->rsp.m2.reserved0); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen); + ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, &dst->rsp.m2.reserved1); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi); + ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); } } @@ -2789,71 +3103,42 @@ isp_get_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst) ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff); ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid); if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) { - ISP_IOXGET_32(isp, &src->rsp.m0._reserved, - dst->rsp.m0._reserved); - ISP_IOXGET_16(isp, &src->rsp.m0._reserved2, - dst->rsp.m0._reserved2); - ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status, - dst->rsp.m0.ct_scsi_status); - ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, - dst->rsp.m0.ct_xfrlen); + ISP_IOXGET_32(isp, &src->rsp.m0._reserved, dst->rsp.m0._reserved); + ISP_IOXGET_16(isp, &src->rsp.m0._reserved2, dst->rsp.m0._reserved2); + ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status, dst->rsp.m0.ct_scsi_status); + ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, dst->rsp.m0.ct_xfrlen); if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO2) { for (i = 0; i < ISP_RQDSEG_T2; i++) { - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg[i].ds_base, - dst->rsp.m0.u.ct_dataseg[i].ds_base); - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg[i].ds_count, - dst->rsp.m0.u.ct_dataseg[i].ds_count); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg[i].ds_base, dst->rsp.m0.u.ct_dataseg[i].ds_base); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg[i].ds_count, dst->rsp.m0.u.ct_dataseg[i].ds_count); } } else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) { for (i = 0; i < ISP_RQDSEG_T3; i++) { - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg64[i].ds_base, - dst->rsp.m0.u.ct_dataseg64[i].ds_base); - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg64[i].ds_basehi, - dst->rsp.m0.u.ct_dataseg64[i].ds_basehi); - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg64[i].ds_count, - dst->rsp.m0.u.ct_dataseg64[i].ds_count); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_base, dst->rsp.m0.u.ct_dataseg64[i].ds_base); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_basehi, dst->rsp.m0.u.ct_dataseg64[i].ds_basehi); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_count, dst->rsp.m0.u.ct_dataseg64[i].ds_count); } } else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) { - ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type, - dst->rsp.m0.u.ct_dslist.ds_type); - ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment, - dst->rsp.m0.u.ct_dslist.ds_segment); - ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base, - dst->rsp.m0.u.ct_dslist.ds_base); + ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type, dst->rsp.m0.u.ct_dslist.ds_type); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment, dst->rsp.m0.u.ct_dslist.ds_segment); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base, dst->rsp.m0.u.ct_dslist.ds_base); } } else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) { - ISP_IOXGET_16(isp, &src->rsp.m1._reserved, - dst->rsp.m1._reserved); - ISP_IOXGET_16(isp, &src->rsp.m1._reserved2, - dst->rsp.m1._reserved2); - ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen, - dst->rsp.m1.ct_senselen); - ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status, - dst->rsp.m1.ct_scsi_status); - ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, - dst->rsp.m1.ct_resplen); + ISP_IOXGET_16(isp, &src->rsp.m1._reserved, dst->rsp.m1._reserved); + ISP_IOXGET_16(isp, &src->rsp.m1._reserved2, dst->rsp.m1._reserved2); + ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen, dst->rsp.m1.ct_senselen); + ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status, dst->rsp.m1.ct_scsi_status); + ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, dst->rsp.m1.ct_resplen); for (i = 0; i < MAXRESPLEN; i++) { - ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], - dst->rsp.m1.ct_resp[i]); + ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], dst->rsp.m1.ct_resp[i]); } } else { - ISP_IOXGET_32(isp, &src->rsp.m2._reserved, - dst->rsp.m2._reserved); - ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, - dst->rsp.m2._reserved2); - ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, - dst->rsp.m2._reserved3); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, - dst->rsp.m2.ct_datalen); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, - dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, - dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + ISP_IOXGET_32(isp, &src->rsp.m2._reserved, dst->rsp.m2._reserved); + ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2); + ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); } } @@ -2873,71 +3158,42 @@ isp_get_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst) ISP_IOXGET_32(isp, &src->ct_reloff, dst->ct_reloff); ISP_IOXGET_32(isp, &src->ct_resid, dst->ct_resid); if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE0) { - ISP_IOXGET_32(isp, &src->rsp.m0._reserved, - dst->rsp.m0._reserved); - ISP_IOXGET_16(isp, &src->rsp.m0._reserved2, - dst->rsp.m0._reserved2); - ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status, - dst->rsp.m0.ct_scsi_status); - ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, - dst->rsp.m0.ct_xfrlen); + ISP_IOXGET_32(isp, &src->rsp.m0._reserved, dst->rsp.m0._reserved); + ISP_IOXGET_16(isp, &src->rsp.m0._reserved2, dst->rsp.m0._reserved2); + ISP_IOXGET_16(isp, &src->rsp.m0.ct_scsi_status, dst->rsp.m0.ct_scsi_status); + ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, dst->rsp.m0.ct_xfrlen); if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) { for (i = 0; i < ISP_RQDSEG_T2; i++) { - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg[i].ds_base, - dst->rsp.m0.u.ct_dataseg[i].ds_base); - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg[i].ds_count, - dst->rsp.m0.u.ct_dataseg[i].ds_count); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg[i].ds_base, dst->rsp.m0.u.ct_dataseg[i].ds_base); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg[i].ds_count, dst->rsp.m0.u.ct_dataseg[i].ds_count); } } else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO3) { for (i = 0; i < ISP_RQDSEG_T3; i++) { - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg64[i].ds_base, - dst->rsp.m0.u.ct_dataseg64[i].ds_base); - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg64[i].ds_basehi, - dst->rsp.m0.u.ct_dataseg64[i].ds_basehi); - ISP_IOXGET_32(isp, - &src->rsp.m0.u.ct_dataseg64[i].ds_count, - dst->rsp.m0.u.ct_dataseg64[i].ds_count); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_base, dst->rsp.m0.u.ct_dataseg64[i].ds_base); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_basehi, dst->rsp.m0.u.ct_dataseg64[i].ds_basehi); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dataseg64[i].ds_count, dst->rsp.m0.u.ct_dataseg64[i].ds_count); } } else if (dst->ct_header.rqs_entry_type == RQSTYPE_CTIO4) { - ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type, - dst->rsp.m0.u.ct_dslist.ds_type); - ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment, - dst->rsp.m0.u.ct_dslist.ds_segment); - ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base, - dst->rsp.m0.u.ct_dslist.ds_base); + ISP_IOXGET_16(isp, &src->rsp.m0.u.ct_dslist.ds_type, dst->rsp.m0.u.ct_dslist.ds_type); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_segment, dst->rsp.m0.u.ct_dslist.ds_segment); + ISP_IOXGET_32(isp, &src->rsp.m0.u.ct_dslist.ds_base, dst->rsp.m0.u.ct_dslist.ds_base); } } else if ((dst->ct_flags & CT2_FLAG_MMASK) == CT2_FLAG_MODE1) { - ISP_IOXGET_16(isp, &src->rsp.m1._reserved, - dst->rsp.m1._reserved); - ISP_IOXGET_16(isp, &src->rsp.m1._reserved2, - dst->rsp.m1._reserved2); - ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen, - dst->rsp.m1.ct_senselen); - ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status, - dst->rsp.m1.ct_scsi_status); - ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, - dst->rsp.m1.ct_resplen); + ISP_IOXGET_16(isp, &src->rsp.m1._reserved, dst->rsp.m1._reserved); + ISP_IOXGET_16(isp, &src->rsp.m1._reserved2, dst->rsp.m1._reserved2); + ISP_IOXGET_16(isp, &src->rsp.m1.ct_senselen, dst->rsp.m1.ct_senselen); + ISP_IOXGET_16(isp, &src->rsp.m1.ct_scsi_status, dst->rsp.m1.ct_scsi_status); + ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, dst->rsp.m1.ct_resplen); for (i = 0; i < MAXRESPLEN; i++) { - ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], - dst->rsp.m1.ct_resp[i]); + ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], dst->rsp.m1.ct_resp[i]); } } else { - ISP_IOXGET_32(isp, &src->rsp.m2._reserved, - dst->rsp.m2._reserved); - ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, - dst->rsp.m2._reserved2); - ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, - dst->rsp.m2._reserved3); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, - dst->rsp.m2.ct_datalen); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, - dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, - dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + ISP_IOXGET_32(isp, &src->rsp.m2._reserved, dst->rsp.m2._reserved); + ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2); + ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); } } @@ -2964,46 +3220,32 @@ isp_get_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst) ISP_IOXGET_16(isp, &src->ct_scsi_status, dst->ct_scsi_status); if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE0) { ISP_IOXGET_32(isp, &src->rsp.m0.reloff, dst->rsp.m0.reloff); - ISP_IOXGET_32(isp, &src->rsp.m0.reserved0, - dst->rsp.m0.reserved0); - ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, - dst->rsp.m0.ct_xfrlen); - ISP_IOXGET_32(isp, &src->rsp.m0.reserved1, - dst->rsp.m0.reserved1); - ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_base, - dst->rsp.m0.ds.ds_base); - ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_basehi, - dst->rsp.m0.ds.ds_basehi); - ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_count, - dst->rsp.m0.ds.ds_count); + ISP_IOXGET_32(isp, &src->rsp.m0.reserved0, dst->rsp.m0.reserved0); + ISP_IOXGET_32(isp, &src->rsp.m0.ct_xfrlen, dst->rsp.m0.ct_xfrlen); + ISP_IOXGET_32(isp, &src->rsp.m0.reserved1, dst->rsp.m0.reserved1); + ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_base, dst->rsp.m0.ds.ds_base); + ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_basehi, dst->rsp.m0.ds.ds_basehi); + ISP_IOXGET_32(isp, &src->rsp.m0.ds.ds_count, dst->rsp.m0.ds.ds_count); } else if ((dst->ct_flags & CT7_FLAG_MMASK) == CT7_FLAG_MODE1) { uint32_t *a, *b; - ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, - dst->rsp.m1.ct_resplen); + ISP_IOXGET_16(isp, &src->rsp.m1.ct_resplen, dst->rsp.m1.ct_resplen); ISP_IOXGET_16(isp, &src->rsp.m1.reserved, dst->rsp.m1.reserved); a = (uint32_t *) src->rsp.m1.ct_resp; b = (uint32_t *) dst->rsp.m1.ct_resp; for (i = 0; i < MAXRESPLEN_24XX; i++) { - ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], - dst->rsp.m1.ct_resp[i]); + ISP_IOXGET_8(isp, &src->rsp.m1.ct_resp[i], dst->rsp.m1.ct_resp[i]); } for (i = 0; i < (ASIZE(src->rsp.m1.ct_resp) >> 2); i++) { *b++ = ISP_SWAP32(isp, *a++); } } else { - ISP_IOXGET_32(isp, &src->rsp.m2.reserved0, - dst->rsp.m2.reserved0); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, - dst->rsp.m2.ct_datalen); - ISP_IOXGET_32(isp, &src->rsp.m2.reserved1, - dst->rsp.m2.reserved1); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, - dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, - dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi); - ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, - dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); + ISP_IOXGET_32(isp, &src->rsp.m2.reserved0, dst->rsp.m2.reserved0); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen); + ISP_IOXGET_32(isp, &src->rsp.m2.reserved1, dst->rsp.m2.reserved1); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi); + ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count); } } @@ -3039,8 +3281,7 @@ isp_put_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst) ISP_IOXPUT_32(isp, lesrc->le_flags, &ledst->le_flags); ISP_IOXPUT_16(isp, lesrc->le_timeout, &ledst->le_timeout); for (i = 0; i < 20; i++) { - ISP_IOXPUT_8(isp, lesrc->le_reserved3[i], - &ledst->le_reserved3[i]); + ISP_IOXPUT_8(isp, lesrc->le_reserved3[i], &ledst->le_reserved3[i]); } } @@ -3076,8 +3317,7 @@ isp_get_enable_lun(ispsoftc_t *isp, lun_entry_t *lesrc, lun_entry_t *ledst) ISP_IOXGET_32(isp, &lesrc->le_flags, ledst->le_flags); ISP_IOXGET_16(isp, &lesrc->le_timeout, ledst->le_timeout); for (i = 0; i < 20; i++) { - ISP_IOXGET_8(isp, &lesrc->le_reserved3[i], - ledst->le_reserved3[i]); + ISP_IOXGET_8(isp, &lesrc->le_reserved3[i], ledst->le_reserved3[i]); } } @@ -3112,12 +3352,10 @@ isp_put_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst) ISP_IOXPUT_8(isp, src->in_msg[i], &dst->in_msg[i]); } for (i = 0; i < IN_RSVDLEN; i++) { - ISP_IOXPUT_8(isp, src->in_reserved3[i], - &dst->in_reserved3[i]); + ISP_IOXPUT_8(isp, src->in_reserved3[i], &dst->in_reserved3[i]); } for (i = 0; i < QLTM_SENSELEN; i++) { - ISP_IOXPUT_8(isp, src->in_sense[i], - &dst->in_sense[i]); + ISP_IOXPUT_8(isp, src->in_sense[i], &dst->in_sense[i]); } } @@ -3152,18 +3390,15 @@ isp_get_notify(ispsoftc_t *isp, in_entry_t *src, in_entry_t *dst) ISP_IOXGET_8(isp, &src->in_msg[i], dst->in_msg[i]); } for (i = 0; i < IN_RSVDLEN; i++) { - ISP_IOXGET_8(isp, &src->in_reserved3[i], - dst->in_reserved3[i]); + ISP_IOXGET_8(isp, &src->in_reserved3[i], dst->in_reserved3[i]); } for (i = 0; i < QLTM_SENSELEN; i++) { - ISP_IOXGET_8(isp, &src->in_sense[i], - dst->in_sense[i]); + ISP_IOXGET_8(isp, &src->in_sense[i], dst->in_sense[i]); } } void -isp_put_notify_fc(ispsoftc_t *isp, in_fcentry_t *src, - in_fcentry_t *dst) +isp_put_notify_fc(ispsoftc_t *isp, in_fcentry_t *src, in_fcentry_t *dst) { isp_put_hdr(isp, &src->in_header, &dst->in_header); ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved); @@ -3177,8 +3412,7 @@ isp_put_notify_fc(ispsoftc_t *isp, in_fcentry_t *src, } void -isp_put_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src, - in_fcentry_e_t *dst) +isp_put_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src, in_fcentry_e_t *dst) { isp_put_hdr(isp, &src->in_header, &dst->in_header); ISP_IOXPUT_32(isp, src->in_reserved, &dst->in_reserved); @@ -3191,8 +3425,7 @@ isp_put_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src, } void -isp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, - in_fcentry_24xx_t *dst) +isp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, in_fcentry_24xx_t *dst) { int i; @@ -3228,8 +3461,7 @@ isp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, } void -isp_get_notify_fc(ispsoftc_t *isp, in_fcentry_t *src, - in_fcentry_t *dst) +isp_get_notify_fc(ispsoftc_t *isp, in_fcentry_t *src, in_fcentry_t *dst) { isp_get_hdr(isp, &src->in_header, &dst->in_header); ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved); @@ -3243,8 +3475,7 @@ isp_get_notify_fc(ispsoftc_t *isp, in_fcentry_t *src, } void -isp_get_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src, - in_fcentry_e_t *dst) +isp_get_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src, in_fcentry_e_t *dst) { isp_get_hdr(isp, &src->in_header, &dst->in_header); ISP_IOXGET_32(isp, &src->in_reserved, dst->in_reserved); @@ -3257,8 +3488,7 @@ isp_get_notify_fc_e(ispsoftc_t *isp, in_fcentry_e_t *src, } void -isp_get_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, - in_fcentry_24xx_t *dst) +isp_get_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, in_fcentry_24xx_t *dst) { int i; @@ -3312,8 +3542,7 @@ isp_put_notify_ack(ispsoftc_t *isp, na_entry_t *src, na_entry_t *dst) } ISP_IOXPUT_32(isp, src->na_flags, &dst->na_flags); for (i = 0; i < NA_RSVDLEN; i++) { - ISP_IOXPUT_16(isp, src->na_reserved3[i], - &dst->na_reserved3[i]); + ISP_IOXPUT_16(isp, src->na_reserved3[i], &dst->na_reserved3[i]); } } @@ -3336,14 +3565,12 @@ isp_get_notify_ack(ispsoftc_t *isp, na_entry_t *src, na_entry_t *dst) } ISP_IOXGET_32(isp, &src->na_flags, dst->na_flags); for (i = 0; i < NA_RSVDLEN; i++) { - ISP_IOXGET_16(isp, &src->na_reserved3[i], - dst->na_reserved3[i]); + ISP_IOXGET_16(isp, &src->na_reserved3[i], dst->na_reserved3[i]); } } void -isp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src, - na_fcentry_t *dst) +isp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src, na_fcentry_t *dst) { int i; isp_put_hdr(isp, &src->na_header, &dst->na_header); @@ -3357,14 +3584,12 @@ isp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src, ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags); ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid); for (i = 0; i < NA2_RSVDLEN; i++) { - ISP_IOXPUT_16(isp, src->na_reserved3[i], - &dst->na_reserved3[i]); + ISP_IOXPUT_16(isp, src->na_reserved3[i], &dst->na_reserved3[i]); } } void -isp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src, - na_fcentry_e_t *dst) +isp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src, na_fcentry_e_t *dst) { int i; isp_put_hdr(isp, &src->na_header, &dst->na_header); @@ -3377,14 +3602,12 @@ isp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src, ISP_IOXPUT_16(isp, src->na_task_flags, &dst->na_task_flags); ISP_IOXPUT_16(isp, src->na_seqid, &dst->na_seqid); for (i = 0; i < NA2_RSVDLEN; i++) { - ISP_IOXPUT_16(isp, src->na_reserved3[i], - &dst->na_reserved3[i]); + ISP_IOXPUT_16(isp, src->na_reserved3[i], &dst->na_reserved3[i]); } } void -isp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src, - na_fcentry_24xx_t *dst) +isp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src, na_fcentry_24xx_t *dst) { int i; @@ -3407,10 +3630,8 @@ isp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src, } ISP_IOXPUT_8(isp, src->na_reserved4, &dst->na_reserved4); ISP_IOXPUT_8(isp, src->na_vpidx, &dst->na_vpidx); - ISP_IOXPUT_8(isp, src->na_srr_reject_vunique, - &dst->na_srr_reject_vunique); - ISP_IOXPUT_8(isp, src->na_srr_reject_explanation, - &dst->na_srr_reject_explanation); + ISP_IOXPUT_8(isp, src->na_srr_reject_vunique, &dst->na_srr_reject_vunique); + ISP_IOXPUT_8(isp, src->na_srr_reject_explanation, &dst->na_srr_reject_explanation); ISP_IOXPUT_8(isp, src->na_srr_reject_code, &dst->na_srr_reject_code); ISP_IOXPUT_8(isp, src->na_reserved5, &dst->na_reserved5); for (i = 0; i < 6; i++) { @@ -3420,8 +3641,7 @@ isp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src, } void -isp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src, - na_fcentry_t *dst) +isp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src, na_fcentry_t *dst) { int i; isp_get_hdr(isp, &src->na_header, &dst->na_header); @@ -3435,14 +3655,12 @@ isp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *src, ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags); ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid); for (i = 0; i < NA2_RSVDLEN; i++) { - ISP_IOXGET_16(isp, &src->na_reserved3[i], - dst->na_reserved3[i]); + ISP_IOXGET_16(isp, &src->na_reserved3[i], dst->na_reserved3[i]); } } void -isp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src, - na_fcentry_e_t *dst) +isp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src, na_fcentry_e_t *dst) { int i; isp_get_hdr(isp, &src->na_header, &dst->na_header); @@ -3455,14 +3673,12 @@ isp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *src, ISP_IOXGET_16(isp, &src->na_task_flags, dst->na_task_flags); ISP_IOXGET_16(isp, &src->na_seqid, dst->na_seqid); for (i = 0; i < NA2_RSVDLEN; i++) { - ISP_IOXGET_16(isp, &src->na_reserved3[i], - dst->na_reserved3[i]); + ISP_IOXGET_16(isp, &src->na_reserved3[i], dst->na_reserved3[i]); } } void -isp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src, - na_fcentry_24xx_t *dst) +isp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src, na_fcentry_24xx_t *dst) { int i; @@ -3485,10 +3701,8 @@ isp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src, } ISP_IOXGET_8(isp, &src->na_reserved4, dst->na_reserved4); ISP_IOXGET_8(isp, &src->na_vpidx, dst->na_vpidx); - ISP_IOXGET_8(isp, &src->na_srr_reject_vunique, - dst->na_srr_reject_vunique); - ISP_IOXGET_8(isp, &src->na_srr_reject_explanation, - dst->na_srr_reject_explanation); + ISP_IOXGET_8(isp, &src->na_srr_reject_vunique, dst->na_srr_reject_vunique); + ISP_IOXGET_8(isp, &src->na_srr_reject_explanation, dst->na_srr_reject_explanation); ISP_IOXGET_8(isp, &src->na_srr_reject_code, dst->na_srr_reject_code); ISP_IOXGET_8(isp, &src->na_reserved5, dst->na_reserved5); for (i = 0; i < 6; i++) { @@ -3504,8 +3718,7 @@ isp_get_abts(ispsoftc_t *isp, abts_t *src, abts_t *dst) isp_get_hdr(isp, &src->abts_header, &dst->abts_header); for (i = 0; i < 6; i++) { - ISP_IOXGET_8(isp, &src->abts_reserved0[i], - dst->abts_reserved0[i]); + ISP_IOXGET_8(isp, &src->abts_reserved0[i], dst->abts_reserved0[i]); } ISP_IOXGET_16(isp, &src->abts_nphdl, dst->abts_nphdl); ISP_IOXGET_16(isp, &src->abts_reserved1, dst->abts_reserved1); @@ -3527,8 +3740,7 @@ isp_get_abts(ispsoftc_t *isp, abts_t *src, abts_t *dst) ISP_IOXGET_16(isp, &src->abts_ox_id, dst->abts_ox_id); ISP_IOXGET_32(isp, &src->abts_param, dst->abts_param); for (i = 0; i < 16; i++) { - ISP_IOXGET_8(isp, &src->abts_reserved2[i], - dst->abts_reserved2[i]); + ISP_IOXGET_8(isp, &src->abts_reserved2[i], dst->abts_reserved2[i]); } ISP_IOXGET_32(isp, &src->abts_rxid_task, dst->abts_rxid_task); } @@ -3561,43 +3773,27 @@ isp_put_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst) ISP_IOXPUT_16(isp, src->abts_rsp_ox_id, &dst->abts_rsp_ox_id); ISP_IOXPUT_32(isp, src->abts_rsp_param, &dst->abts_rsp_param); if (src->abts_rsp_r_ctl == BA_ACC) { - ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved, - &dst->abts_rsp_payload.ba_acc.reserved); - ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.last_seq_id, - &dst->abts_rsp_payload.ba_acc.last_seq_id); - ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.seq_id_valid, - &dst->abts_rsp_payload.ba_acc.seq_id_valid); - ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_rx_id, - &dst->abts_rsp_payload.ba_acc.aborted_rx_id); - ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_ox_id, - &dst->abts_rsp_payload.ba_acc.aborted_ox_id); - ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.high_seq_cnt, - &dst->abts_rsp_payload.ba_acc.high_seq_cnt); - ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.low_seq_cnt, - &dst->abts_rsp_payload.ba_acc.low_seq_cnt); + ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved, &dst->abts_rsp_payload.ba_acc.reserved); + ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.last_seq_id, &dst->abts_rsp_payload.ba_acc.last_seq_id); + ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_acc.seq_id_valid, &dst->abts_rsp_payload.ba_acc.seq_id_valid); + ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_rx_id, &dst->abts_rsp_payload.ba_acc.aborted_rx_id); + ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.aborted_ox_id, &dst->abts_rsp_payload.ba_acc.aborted_ox_id); + ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.high_seq_cnt, &dst->abts_rsp_payload.ba_acc.high_seq_cnt); + ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.low_seq_cnt, &dst->abts_rsp_payload.ba_acc.low_seq_cnt); for (i = 0; i < 4; i++) { - ISP_IOXPUT_16(isp, - src->abts_rsp_payload.ba_acc.reserved2[i], - &dst->abts_rsp_payload.ba_acc.reserved2[i]); + ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_acc.reserved2[i], &dst->abts_rsp_payload.ba_acc.reserved2[i]); } } else if (src->abts_rsp_r_ctl == BA_RJT) { - ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.vendor_unique, - &dst->abts_rsp_payload.ba_rjt.vendor_unique); - ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.explanation, - &dst->abts_rsp_payload.ba_rjt.explanation); - ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reason, - &dst->abts_rsp_payload.ba_rjt.reason); - ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reserved, - &dst->abts_rsp_payload.ba_rjt.reserved); + ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.vendor_unique, &dst->abts_rsp_payload.ba_rjt.vendor_unique); + ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.explanation, &dst->abts_rsp_payload.ba_rjt.explanation); + ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reason, &dst->abts_rsp_payload.ba_rjt.reason); + ISP_IOXPUT_8(isp, src->abts_rsp_payload.ba_rjt.reserved, &dst->abts_rsp_payload.ba_rjt.reserved); for (i = 0; i < 12; i++) { - ISP_IOXPUT_16(isp, - src->abts_rsp_payload.ba_rjt.reserved2[i], - &dst->abts_rsp_payload.ba_rjt.reserved2[i]); + ISP_IOXPUT_16(isp, src->abts_rsp_payload.ba_rjt.reserved2[i], &dst->abts_rsp_payload.ba_rjt.reserved2[i]); } } else { for (i = 0; i < 16; i++) { - ISP_IOXPUT_8(isp, src->abts_rsp_payload.reserved[i], - &dst->abts_rsp_payload.reserved[i]); + ISP_IOXPUT_8(isp, src->abts_rsp_payload.reserved[i], &dst->abts_rsp_payload.reserved[i]); } } ISP_IOXPUT_32(isp, src->abts_rsp_rxid_task, &dst->abts_rsp_rxid_task); @@ -3631,13 +3827,10 @@ isp_get_abts_rsp(ispsoftc_t *isp, abts_rsp_t *src, abts_rsp_t *dst) ISP_IOXGET_16(isp, &src->abts_rsp_ox_id, dst->abts_rsp_ox_id); ISP_IOXGET_32(isp, &src->abts_rsp_param, dst->abts_rsp_param); for (i = 0; i < 8; i++) { - ISP_IOXGET_8(isp, &src->abts_rsp_payload.rsp.reserved[i], - dst->abts_rsp_payload.rsp.reserved[i]); + ISP_IOXGET_8(isp, &src->abts_rsp_payload.rsp.reserved[i], dst->abts_rsp_payload.rsp.reserved[i]); } - ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode1, - dst->abts_rsp_payload.rsp.subcode1); - ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode2, - dst->abts_rsp_payload.rsp.subcode2); + ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode1, dst->abts_rsp_payload.rsp.subcode1); + ISP_IOXGET_32(isp, &src->abts_rsp_payload.rsp.subcode2, dst->abts_rsp_payload.rsp.subcode2); ISP_IOXGET_32(isp, &src->abts_rsp_rxid_task, dst->abts_rsp_rxid_task); } #endif /* ISP_TARGET_MODE */ diff --git a/qla_isp/common/isp_library.h b/qla_isp/common/isp_library.h index 5d823fab0..6092ae6fb 100644 --- a/qla_isp/common/isp_library.h +++ b/qla_isp/common/isp_library.h @@ -98,6 +98,11 @@ const char *isp_fc_loop_statename(int); const char *isp_fc_toponame(fcparam *); +/* + * Cleanup + */ +void isp_clear_commands(ispsoftc_t *); + /* * Common chip shutdown function */ @@ -182,6 +187,16 @@ void *isp_find_xs_tgt(ispsoftc_t *, uint32_t); uint32_t isp_find_tgt_handle(ispsoftc_t *, void *); void isp_destroy_tgt_handle(ispsoftc_t *, uint32_t); +int isp_find_pdb_by_wwn(ispsoftc_t *, int, uint64_t, fcportdb_t **); +int isp_find_pdb_by_loopid(ispsoftc_t *, int, uint32_t, fcportdb_t **); +int isp_find_pdb_by_sid(ispsoftc_t *, int, uint32_t, fcportdb_t **); +void isp_find_chan_by_did(ispsoftc_t *, uint32_t, uint16_t *); +void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t); +void isp_del_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t); +void isp_del_all_wwn_entries(ispsoftc_t *, int); +void isp_del_wwn_entries(ispsoftc_t *, isp_notify_t *); +int isp_fc_change_role(ispsoftc_t *, int, int); + void isp_put_atio(ispsoftc_t *, at_entry_t *, at_entry_t *); void isp_get_atio(ispsoftc_t *, at_entry_t *, at_entry_t *); void isp_put_atio2(ispsoftc_t *, at2_entry_t *, at2_entry_t *); diff --git a/qla_isp/common/isp_target.c b/qla_isp/common/isp_target.c index 006c0fa3e..711926c07 100644 --- a/qla_isp/common/isp_target.c +++ b/qla_isp/common/isp_target.c @@ -280,26 +280,28 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp) break; } if (IS_FC(isp)) { - inot_fcp = (in_fcentry_t *) local; if (ISP_CAP_2KLOGIN(isp)) { in_fcentry_e_t *ecp = (in_fcentry_e_t *)local; - isp_get_notify_fc_e(isp, inote_fcp, (in_fcentry_e_t *)local); + isp_get_notify_fc_e(isp, inote_fcp, ecp); iid = ecp->in_iid; + status = ecp->in_status; + seqid = ecp->in_seqid; } else { - isp_get_notify_fc(isp, inot_fcp, (in_fcentry_t *)local); - iid = inot_fcp->in_iid; + in_fcentry_t *fcp = (in_fcentry_t *)local; + isp_get_notify_fc(isp, inot_fcp, fcp); + iid = fcp->in_iid; + status = fcp->in_status; + seqid = fcp->in_seqid; } - status = inot_fcp->in_status; - seqid = inot_fcp->in_seqid; } else { - isp_get_notify(isp, inotp, (in_entry_t *)local); - inotp = (in_entry_t *) local; - status = inotp->in_status & 0xff; - seqid = inotp->in_seqid; - iid = inotp->in_iid; + in_entry_t *inp = (in_entry_t *)local; + isp_get_notify(isp, inotp, inp); + status = inp->in_status & 0xff; + seqid = inp->in_seqid; + iid = inp->in_iid; if (IS_DUALBUS(isp)) { - bus = GET_BUS_VAL(inotp->in_iid); - SET_BUS_VAL(inotp->in_iid, 0); + bus = GET_BUS_VAL(inp->in_iid); + SET_BUS_VAL(inp->in_iid, 0); } } @@ -318,6 +320,7 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp) isp_prt(isp, ISP_LOGINFO, "Firmware out of ATIOs"); (void) isp_notify_ack(isp, local); break; + case IN_RESET: ISP_MEMZERO(¬ify, sizeof (isp_notify_t)); notify.nt_hba = isp; @@ -334,6 +337,7 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp) notify.nt_lreserved = local; isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); break; + case IN_PORT_LOGOUT: ISP_MEMZERO(¬ify, sizeof (isp_notify_t)); notify.nt_hba = isp; @@ -346,6 +350,7 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp) notify.nt_lreserved = local; isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); break; + case IN_ABORT_TASK: ISP_MEMZERO(¬ify, sizeof (isp_notify_t)); notify.nt_hba = isp; @@ -360,12 +365,26 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp) break; case IN_GLOBAL_LOGO: + isp_prt(isp, ISP_LOGTINFO, "%s: all ports logged out", __func__); + ISP_MEMZERO(¬ify, sizeof (isp_notify_t)); + notify.nt_hba = isp; + notify.nt_wwn = INI_ANY; + notify.nt_nphdl = NIL_HANDLE; + notify.nt_sid = PORT_ANY; + notify.nt_did = PORT_ANY; + notify.nt_ncode = NT_GLOBAL_LOGOUT; + isp_async(isp, ISPASYNC_TARGET_NOTIFY, ¬ify); + (void) isp_notify_ack(isp, local); + break; + case IN_PORT_CHANGED: isp_prt(isp, ISP_LOGTINFO, "%s: port changed", __func__); (void) isp_notify_ack(isp, local); break; + default: - isp_prt(isp, ISP_LOGTINFO, "%s: unknown status (0x%x)", __func__, status); + ISP_SNPRINTF(local, sizeof local, "%s: unknown status to RQSTYPE_NOTIFY (0x%x)", __func__, status); + isp_print_bytes(isp, local, QENTRY_LEN, vptr); (void) isp_notify_ack(isp, local); break; } @@ -426,7 +445,7 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp) abts_rsp->abts_rsp_payload.rsp.subcode1, abts_rsp->abts_rsp_payload.rsp.subcode2); break; default: - isp_prt(isp, ISP_LOGERR, "Unknown entry type 0x%x in isp_target_notify", type); + isp_prt(isp, ISP_LOGERR, "%s: unknown entry type 0x%x", __func__, type); rval = 0; break; } @@ -1847,8 +1866,9 @@ isp_handle_24xx_inotify(ispsoftc_t *isp, in_fcentry_24xx_t *inot_24xx) hichan = isp->isp_nchan; } else { if (chan >= isp->isp_nchan) { - isp_prt(isp, ISP_LOGINFO, "%s: bad channel %d for status 0x%x", __func__, chan, inot_24xx->in_status); - isp_print_bytes(isp, "XXX", QENTRY_LEN, inot_24xx); + char buf[64]; + ISP_SNPRINTF(buf, sizeof buf, "%s: bad channel %d for status 0x%x", __func__, chan, inot_24xx->in_status); + isp_print_bytes(isp, buf, QENTRY_LEN, inot_24xx); (void) isp_notify_ack(isp, inot_24xx); return; } diff --git a/qla_isp/common/isp_target.h b/qla_isp/common/isp_target.h index 01312ee2c..e7c4db0f8 100644 --- a/qla_isp/common/isp_target.h +++ b/qla_isp/common/isp_target.h @@ -75,6 +75,9 @@ typedef enum { NT_LINK_UP, NT_LINK_DOWN, NT_LOGOUT, + NT_GLOBAL_LOGOUT, + NT_ARRIVED, + NT_DEPARTED, NT_HBA_RESET } isp_ncode_t; @@ -87,7 +90,6 @@ typedef struct isp_notify { uint64_t nt_tgt; /* destination (wwn) */ uint64_t nt_tagval; /* tag value */ uint32_t - nt_channel : 6, /* channel id */ nt_sid : 24; /* source port id */ uint32_t nt_failed : 1, /* notify operation failed */ @@ -96,6 +98,7 @@ typedef struct isp_notify { uint32_t nt_lun : 16, /* logical unit */ nt_nphdl : 16; /* n-port handle */ + uint8_t nt_channel; /* channel id */ isp_ncode_t nt_ncode; /* action */ } isp_notify_t; #define MATCH_TMD(tmd, iid, lun, tag) \ diff --git a/qla_isp/common/ispmbox.h b/qla_isp/common/ispmbox.h index b973cacec..5bf2bd2ab 100644 --- a/qla_isp/common/ispmbox.h +++ b/qla_isp/common/ispmbox.h @@ -2226,6 +2226,8 @@ typedef struct { #define CT_SRR 0x45 /* SRR Received */ #define CT_LUN_RESET 0x48 /* Lun Reset Received */ +#define CT_HBA_RESET 0xffff /* pseudo error - command destroyed by HBA reset*/ + /* * When the firmware returns a CTIO entry, it may overwrite the last * part of the structure with sense data. This starts at offset 0x2E @@ -2442,13 +2444,13 @@ typedef struct { #define CT7_ABORTED 0x02 /* aborted by host */ #define CT7_ERR 0x04 /* see sense data for error */ #define CT7_INVAL 0x06 /* request for disabled lun */ -#define CT7_INVRXID 0x08 /* (FC only) Invalid RX_ID */ -#define CT7_DATA_OVER 0x09 /* (FC only) Data Overrun */ +#define CT7_INVRXID 0x08 /* Invalid RX_ID */ +#define CT7_DATA_OVER 0x09 /* Data Overrun */ #define CT7_TIMEOUT 0x0B /* timed out */ #define CT7_RESET 0x0E /* LIP Rset Received */ #define CT7_BUS_ERROR 0x10 /* DMA PCI Error */ #define CT7_REASSY_ERR 0x11 /* DMA reassembly error */ -#define CT7_DATA_UNDER 0x15 /* (FC only) Data Underrun */ +#define CT7_DATA_UNDER 0x15 /* Data Underrun */ #define CT7_PORTUNAVAIL 0x28 /* port not available */ #define CT7_LOGOUT 0x29 /* port logout */ #define CT7_PORTCHANGED 0x2A /* port changed */ diff --git a/qla_isp/common/ispvar.h b/qla_isp/common/ispvar.h index 5e9bd0fdd..15eebf04a 100644 --- a/qla_isp/common/ispvar.h +++ b/qla_isp/common/ispvar.h @@ -292,6 +292,11 @@ typedef struct { */ #define LOCAL_LOOP_LIM 126 +/* + * Limit for (2K login) N-port handle amounts + */ +#define MAX_NPORT_HANDLE 2048 + /* * Special Constants */ @@ -469,6 +474,18 @@ typedef struct { */ uint16_t isp_dev_map[MAX_FC_TARG]; +#ifdef ISP_TARGET_MODE + /* + * This maps N-Port Handle to portdb entry so we + * don't have to search for every incoming command. + * + * The mapping function is to take any non-zero entry and + * subtract one to get the portdb index. This means that + * entries which are zero are unmapped (i.e., don't exist). + */ + uint16_t isp_tgt_map[MAX_NPORT_HANDLE]; +#endif + /* * Scratch DMA mapped in area to fetch Port Database stuff, etc. */ @@ -782,10 +799,9 @@ struct ispsoftc { */ /* - * Reset Hardware. Totally. Assumes that you'll follow this with - * a call to isp_init. + * Reset Hardware. Totally. Assumes that you'll follow this with a call to isp_init. */ -void isp_reset(ispsoftc_t *); +void isp_reset(ispsoftc_t *, int); /* * Initialize Hardware to known state @@ -795,7 +811,7 @@ void isp_init(ispsoftc_t *); /* * Reset the ISP and call completion for any orphaned commands. */ -void isp_reinit(ispsoftc_t *); +void isp_reinit(ispsoftc_t *, int); /* * Internal Interrupt Service Routine diff --git a/qla_isp/linux/isp_cb_ops.c b/qla_isp/linux/isp_cb_ops.c index 150c35174..ce51e1d85 100644 --- a/qla_isp/linux/isp_cb_ops.c +++ b/qla_isp/linux/isp_cb_ops.c @@ -193,7 +193,7 @@ isplinux_proc_info(struct Scsi_Host *shp, char *buf, char **st, off_t off, int l io = len; } else if (strncmp(buf, "reset", 5) == 0) { ISP_LOCKU_SOFTC(isp); - isp_reinit(isp); + isp_reinit(isp, 0); ISP_UNLKU_SOFTC(isp); io = len; } else if (strncmp(buf, "bins", 4) == 0) { @@ -540,7 +540,7 @@ isp_ioctl(struct inode *ip, struct file *fp, unsigned int c, unsigned long arg) case ISP_RESETHBA: { ISP_LOCK_SOFTC(isp); - isp_reset(isp); + isp_reset(isp, 0); ISP_UNLK_SOFTC(isp); break; } diff --git a/qla_isp/linux/isp_linux.c b/qla_isp/linux/isp_linux.c index 39785f407..4d507b634 100644 --- a/qla_isp/linux/isp_linux.c +++ b/qla_isp/linux/isp_linux.c @@ -116,10 +116,6 @@ static char *isp_wwnns; extern void ISP_PARENT_TARGET (qact_e, void *); static inline tmd_cmd_t *isp_find_tmd(ispsoftc_t *, uint64_t); -static void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t); -static void isp_del_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t); -static inline int isp_find_pdb_by_loopid(ispsoftc_t *, int, uint32_t, fcportdb_t **); -static inline int isp_find_pdb_by_sid(ispsoftc_t *, int, uint32_t, fcportdb_t **); static void isp_taction(qact_e, void *); static void isp_target_start_ctio(ispsoftc_t *, tmd_xact_t *); static void isp_handle_platform_atio(ispsoftc_t *, at_entry_t *); @@ -772,7 +768,7 @@ isplinux_hreset(Scsi_Cmnd *Cmnd) isp->isp_osinfo.wqnext = NULL; isp->isp_nactive = 0; - (void) isplinux_reinit(isp); + (void) isplinux_reinit(isp, 0); ISP_UNLKU_SOFTC(isp); ISP_DRIVER_CTL_EXIT_LOCK(isp); @@ -996,162 +992,6 @@ isp_find_tmd(ispsoftc_t *isp, uint64_t tagval) return (NULL); } -static void -isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id) -{ - fcparam *fcp; - fcportdb_t *lp; - int i; - - /* - * Make sure the addition of a new target mode entry doesn't duplicate entries - * with the same N-Port handles, the same portids or the same Port WWN. - */ - fcp = FCPARAM(isp, chan); - for (i = 0; i < MAX_FC_TARG; i++) { - lp = &fcp->portdb[i]; - - if (lp->target_mode == 0) { - continue; - } - if (nphdl != NIL_HANDLE && lp->handle == nphdl) { - break; - } - if (s_id != PORT_NONE && lp->portid == s_id) { - break; - } - if (VALID_INI(ini) && lp->port_wwn == ini) { - break; - } - } - - if (i < MAX_FC_TARG) { - if (lp->portid != s_id || (VALID_INI(lp->port_wwn) && lp->port_wwn != ini)) { - i = ISP_LOGWARN; - } else { - i = ISP_LOGTINFO; - } - if (lp->portid == s_id && VALID_INI(lp->port_wwn) && (lp->port_wwn == ini || ini == INI_NONE) && lp->handle == nphdl) { - isp_prt(isp, i, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%02x Port ID 0x%06x reentered", __func__, chan, - (ull) lp->port_wwn, lp->handle, lp->portid); - } else { - isp_prt(isp, i, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%02x Port ID 0x%06x overwrites IID 0x%016llx N-Port Handle 0x%02x Port Id 0x%06x", - __func__, chan, (ull) ini, nphdl, s_id, (ull) lp->port_wwn, lp->handle, lp->portid); - } - lp->portid = s_id; - if (VALID_INI(ini)) { - lp->port_wwn = ini; - } - lp->handle = nphdl; - return; - } - while (--i >= 0) { - if (i >= FL_ID && i <= SNS_ID) { - continue; - } - if (fcp->portdb[i].target_mode == 1) { - continue; - } - if (fcp->portdb[i].state == FC_PORTDB_STATE_NIL) { - break; - } - } - if (i < 0) { - isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%02x Port ID 0x%06x- no room in port database", - __func__, chan, (ull) ini, nphdl, s_id); - return; - } - lp = &fcp->portdb[i]; - memset(lp, 0, sizeof (fcportdb_t)); - lp->target_mode = 1; - lp->handle = nphdl; - lp->portid = s_id; - lp->port_wwn = ini; - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%02x Port ID 0x%06x added", - __func__, chan, (ull) ini, nphdl, s_id); -} - -static void -isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id) -{ - fcparam *fcp; - fcportdb_t *lp; - int i; - fcp = FCPARAM(isp, chan); - for (i = 0; i < MAX_FC_TARG; i++) { - lp = &fcp->portdb[i]; - if (lp->target_mode == 0) { - continue; - } - if (ini == INI_ANY && nphdl == NIL_HANDLE && s_id == PORT_ANY) { - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%x Port ID 0x%06x cleared due to wildcard call", - __func__, chan, (ull) lp->port_wwn, lp->handle, lp->portid); - memset(&fcp->portdb[i], 0, sizeof (fcportdb_t)); - continue; - } - if ((s_id == PORT_ANY || lp->portid == s_id) && lp->handle == nphdl) { - break; - } - } - if (ini == INI_ANY && nphdl == NIL_HANDLE && s_id == PORT_ANY) { - return; - } - if (i == MAX_FC_TARG) { - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%x Port ID 0x%06x cannot be found to be cleared", - __func__, chan, (ull) lp->port_wwn, nphdl, lp->portid); - } else { - isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%x Port ID 0x%06x cleared", - __func__, chan, (ull) lp->port_wwn, nphdl, lp->portid); - memset(&fcp->portdb[i], 0, sizeof (fcportdb_t)); - } -} - -static inline int -isp_find_pdb_by_loopid(ispsoftc_t *isp, int chan, uint32_t loopid, fcportdb_t **lptr) -{ - fcparam *fcp; - int i; - - fcp = FCPARAM(isp, chan); - for (i = MAX_FC_TARG-1; i >= 0; i--) { - fcportdb_t *lp = &fcp->portdb[i]; - - if (lp->target_mode == 0) { - continue; - } - if (lp->handle == loopid) { - *lptr = lp; - return (1); - } - } - return (0); -} - -static inline int -isp_find_pdb_by_sid(ispsoftc_t *isp, int chan, uint32_t sid, fcportdb_t **lptr) -{ - fcparam *fcp; - int i; - - if (chan >= isp->isp_nchan) { - return (0); - } - - fcp = FCPARAM(isp, chan); - for (i = MAX_FC_TARG-1; i >= 0; i--) { - fcportdb_t *lp = &fcp->portdb[i]; - - if (lp->target_mode == 0) { - continue; - } - if (lp->portid == sid) { - *lptr = lp; - return (1); - } - } - return (0); -} - static void isp_tgt_dump_pdb(ispsoftc_t *isp, int chan) { @@ -2162,7 +2002,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep) CALL_PARENT_TMD(isp, tmd, QOUT_TMD_START); } else { tmd->cd_portid = PORT_NONE; - isp_add_wwn_entry(isp, 0, tmd->cd_iid, tmd->cd_nphdl, PORT_NONE); + isp_add_wwn_entry(isp, 0, tmd->cd_iid, tmd->cd_nphdl, PORT_ANY); (void) isp_thread_event(isp, ISP_THREAD_FINDPORTID, tmd, 0, __func__, __LINE__); } } @@ -2614,95 +2454,6 @@ isp_complete_ctio(ispsoftc_t *isp, tmd_xact_t *xact) } } - -static int -isp_fc_change_role(ispsoftc_t *isp, int chan, int new_role) -{ - fcparam *fcp; - if (IS_SCSI(isp)) { - return (0); - } - if (chan >= isp->isp_nchan) { - isp_prt(isp, ISP_LOGWARN, "%s: bad channel %d", __func__, chan); - return (-ENXIO); - } - fcp = FCPARAM(isp, chan); - ISP_DATA(isp, chan)->blocked = 1; - if (chan == 0 || new_role == ISP_ROLE_NONE) { - SET_DEFAULT_ROLE(isp, chan, new_role); - isp_reinit(isp); - } else { - mbreg_t mbs; - vp_modify_t *vp; - uint8_t qe[QENTRY_LEN], *scp; - - memset(qe, 0, QENTRY_LEN); - /* Acquire Scratch */ - - if (FC_SCRATCH_ACQUIRE(isp, chan)) { - ISP_DATA(isp, chan)->blocked = 0; - return (-EBUSY); - } - scp = fcp->isp_scratch; - - /* - * Build a VP MODIFY command in memory - */ - vp = (vp_modify_t *) qe; - vp->vp_mod_hdr.rqs_entry_type = RQSTYPE_VP_MODIFY; - vp->vp_mod_hdr.rqs_entry_count = 1; - vp->vp_mod_cnt = 1; - vp->vp_mod_idx0 = chan; - vp->vp_mod_cmd = VP_MODIFY_ENA; - vp->vp_mod_ports[0].options = ICB2400_VPOPT_ENABLED; - if (new_role & ISP_ROLE_INITIATOR) { - vp->vp_mod_ports[0].options |= ICB2400_VPOPT_INI_ENABLE; - } - if ((new_role & ISP_ROLE_TARGET) == 0) { - vp->vp_mod_ports[0].options |= ICB2400_VPOPT_TGT_DISABLE; - } - MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwpn, fcp->isp_wwpn); - MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwnn, fcp->isp_wwnn); - isp_put_vp_modify(isp, vp, (vp_modify_t *) scp); - - /* - * Build a EXEC IOCB A64 command that points to the VP MODIFY command - */ - memset(&mbs, 0, sizeof (mbs)); - mbs.param[0] = MBOX_EXEC_COMMAND_IOCB_A64; - mbs.param[1] = QENTRY_LEN; - mbs.param[2] = DMA_WD1(fcp->isp_scdma); - mbs.param[3] = DMA_WD0(fcp->isp_scdma); - mbs.param[6] = DMA_WD3(fcp->isp_scdma); - mbs.param[7] = DMA_WD2(fcp->isp_scdma); - mbs.logval = MBLOGALL; - MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN); - isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs); - if (mbs.param[0] != MBOX_COMMAND_COMPLETE) { - FC_SCRATCH_RELEASE(isp, chan); - ISP_DATA(isp, chan)->blocked = 0; - return (-EIO); - } - MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN); - isp_get_vp_modify(isp, (vp_modify_t *)&scp[QENTRY_LEN], vp); - - /* - * Release Scratch - */ - FC_SCRATCH_RELEASE(isp, chan); - - if (vp->vp_mod_status != VP_STS_OK) { - isp_prt(isp, ISP_LOGERR, "%s: VP_MODIFY of Chan %d failed with status %d", __func__, chan, vp->vp_mod_status); - ISP_DATA(isp, chan)->blocked = 0; - return (-EIO); - } - SET_DEFAULT_ROLE(isp, chan, new_role); - fcp->role = new_role; - } - ISP_DATA(isp, chan)->blocked = 0; - return (0); -} - int isp_enable_lun(ispsoftc_t *isp, uint16_t bus, uint16_t lun) { @@ -3263,16 +3014,28 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) mp = va_arg(ap, isp_notify_t *); va_end(ap); + if (mp == NULL) { + break; + } + + if (FCPARAM(isp, mp->nt_channel) == NULL) { + break; + } + if (isp->isp_osinfo.hcb == 0) { isp_prt(isp, ISP_LOGWARN, "ISPASYNC_TARGET_NOTIFY with target mode not enabled"); - isp_notify_ack(isp, mp->nt_lreserved); + if (mp->nt_need_ack && mp->nt_lreserved) { + isp_notify_ack(isp, mp->nt_lreserved); + } break; } ins = isp->isp_osinfo.nfreelist; if (ins == NULL) { isp_prt(isp, ISP_LOGERR, "out of TMD NOTIFY structs"); - isp_notify_ack(isp, mp->nt_lreserved); + if (mp->nt_need_ack && mp->nt_lreserved) { + isp_notify_ack(isp, mp->nt_lreserved); + } break; } isp->isp_osinfo.nfreelist = ins->notify.nt_lreserved; @@ -3301,6 +3064,9 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) case NT_LINK_UP: case NT_LINK_DOWN: break; + case NT_DEPARTED: + case NT_ARRIVED: + break; case NT_LUN_RESET: case NT_TARGET_RESET: /* @@ -3339,6 +3105,9 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...) case NT_LINK_DOWN: ins->notify.nt_wwn = INI_NONE; break; + case NT_DEPARTED: + case NT_ARRIVED: + break; default: if (isp_find_pdb_by_loopid(isp, mp->nt_channel, loopid, &lp) == 0) { isp_prt(isp, ISP_LOGTINFO, "cannot find WWN for loopid 0x%x for notify action 0x%x", loopid, mp->nt_ncode); @@ -4339,7 +4108,7 @@ isplinux_common_init(ispsoftc_t *isp) add_timer(&isp->isp_osinfo.timer); isp->dogactive = 1; - retval = isplinux_reinit(isp); + retval = isplinux_reinit(isp, 1); if (retval) { isp_prt(isp, ISP_LOGERR, "failed to init HBA port- skipping it"); @@ -4360,11 +4129,11 @@ isplinux_common_init(ispsoftc_t *isp) } int -isplinux_reinit(ispsoftc_t *isp) +isplinux_reinit(ispsoftc_t *isp, int doset_defaults) { int maxluns = isp_maxluns; - isp_reset(isp); + isp_reset(isp, doset_defaults); if (isp->isp_state != ISP_RESETSTATE) { isp_prt(isp, ISP_LOGERR, "failed to enter RESET state"); @@ -4578,7 +4347,7 @@ isp_task_thread(void *arg) ISP_UNLKU_SOFTC(isp); break; } - isp_reinit(isp); + isp_reinit(isp, 0); if (isp->isp_state == ISP_RUNSTATE) { for (i = 0; i < isp->isp_nchan; i++) { ISP_DATA(isp, i)->blocked = 0; diff --git a/qla_isp/linux/isp_linux.h b/qla_isp/linux/isp_linux.h index 9a5f1aefb..92d70d6fe 100644 --- a/qla_isp/linux/isp_linux.h +++ b/qla_isp/linux/isp_linux.h @@ -635,7 +635,7 @@ int isplinux_common_init(ispsoftc_t *); void isplinux_init_proc(ispsoftc_t *); void isplinux_undo_proc(ispsoftc_t *); #endif -int isplinux_reinit(ispsoftc_t *); +int isplinux_reinit(ispsoftc_t *, int); void isplinux_sqd(struct Scsi_Host *, struct scsi_device *); int isp_thread_event(ispsoftc_t *, int, void *, int, const char *, const int line); diff --git a/qla_isp/linux/isp_pci.c b/qla_isp/linux/isp_pci.c index 35a620301..e3a3ae4f2 100644 --- a/qla_isp/linux/isp_pci.c +++ b/qla_isp/linux/isp_pci.c @@ -70,8 +70,7 @@ static void isp_pci_wr_reg(ispsoftc_t *, int, uint32_t); static uint32_t isp_pci_rd_reg_1080(ispsoftc_t *, int); static void isp_pci_wr_reg_1080(ispsoftc_t *, int, uint32_t); #endif -#if !(defined(ISP_DISABLE_1020_SUPPORT) && defined(ISP_DISABLE_1080_SUPPORT) && defined(ISP_DISABLE_12160_SUPPORT) && \ - defined(ISP_DISABLE_2100_SUPPORT) && defined(ISP_DISABLE_2200_SUPPORT)) +#if !(defined(ISP_DISABLE_1020_SUPPORT) && defined(ISP_DISABLE_1080_SUPPORT) && defined(ISP_DISABLE_12160_SUPPORT) && defined(ISP_DISABLE_2100_SUPPORT) && defined(ISP_DISABLE_2200_SUPPORT)) static int isp_pci_rd_isr(ispsoftc_t *, uint32_t *, uint16_t *, uint16_t *); #endif #if !(defined(ISP_DISABLE_2300_SUPPORT) && defined(ISP_DISABLE_2322_SUPPORT))