diff options
Diffstat (limited to 'usr/src/uts/sun/io/socal.c')
-rw-r--r-- | usr/src/uts/sun/io/socal.c | 1607 |
1 files changed, 812 insertions, 795 deletions
diff --git a/usr/src/uts/sun/io/socal.c b/usr/src/uts/sun/io/socal.c index f1b40d9f90..6064218c37 100644 --- a/usr/src/uts/sun/io/socal.c +++ b/usr/src/uts/sun/io/socal.c @@ -20,11 +20,10 @@ */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" /* * socal - Serial Optical Channel Arbitrated Loop host adapter driver. @@ -318,7 +317,7 @@ static struct bus_ops socal_bus_ops = { ddi_dma_win, ddi_dma_mctl, /* int (*bus_dma_ctl)() */ socal_bus_ctl, /* int (*bus_ctl)() */ - ddi_bus_prop_op /* int (*bus_prop_op*)() */ + ddi_bus_prop_op, /* int (*bus_prop_op*)() */ }; static struct cb_ops socal_cb_ops = { @@ -356,7 +355,9 @@ static struct dev_ops socal_ops = { socal_detach, /* detach */ nodev, /* reset */ &socal_cb_ops, /* driver operations */ - &socal_bus_ops /* bus operations */ + &socal_bus_ops, /* bus operations */ + NULL, /* power */ + ddi_quiesce_not_supported, /* quiesce */ }; /* @@ -399,10 +400,10 @@ extern struct mod_ops mod_driverops; * Module linkage information for the kernel. */ #define SOCAL_NAME "SOC+ FC-AL Host Adapter Driver" -static char socal_version[] = "%I% %E%"; +static char socal_version[] = "1.62 08/19/2008"; static struct modldrv modldrv = { &mod_driverops, /* Type of module. This one is a driver */ - SOCAL_NAME " %I%", + SOCAL_NAME, &socal_ops, /* driver ops */ }; @@ -415,7 +416,7 @@ static struct modlinkage modlinkage = { */ #if !defined(lint) -static char socal_initmsg[] = "socal _init: socal.c\t%I%\t%E%\n"; +static char socal_initmsg[] = "socal _init: socal.c\t1.62\t08/19/2008\n"; #endif int @@ -427,7 +428,7 @@ _init(void) /* Allocate soft state. */ stat = ddi_soft_state_init(&socal_soft_state_p, - sizeof (socal_state_t), SOCAL_INIT_ITEMS); + sizeof (socal_state_t), SOCAL_INIT_ITEMS); if (stat != 0) return (stat); @@ -507,15 +508,15 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) if (ddi_dev_is_sid(dip) != DDI_SUCCESS) { cmn_err(CE_WARN, "socal%d probe: Not self-identifying", - instance); + instance); return (DDI_FAILURE); } /* If we are in a slave-slot, then we can't be used. */ if (ddi_slaveonly(dip) == DDI_SUCCESS) { cmn_err(CE_WARN, - "socal%d attach failed: device in slave-only slot", - instance); + "socal%d attach failed: device in slave-only slot", + instance); return (DDI_FAILURE); } @@ -529,7 +530,7 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) */ cmn_err(CE_WARN, "socal%d attach failed: hilevel interrupt unsupported", - instance); + instance); return (DDI_FAILURE); } @@ -537,11 +538,11 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) if (ddi_soft_state_zalloc(socal_soft_state_p, instance) != DDI_SUCCESS) { cmn_err(CE_WARN, "socal%d attach failed: alloc soft state", - instance); + instance); return (DDI_FAILURE); } DEBUGF(4, (CE_CONT, "socal%d attach: allocated soft state\n", - instance)); + instance)); /* * Initialize the state structure. @@ -549,11 +550,11 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) socalp = ddi_get_soft_state(socal_soft_state_p, instance); if (socalp == (socal_state_t *)NULL) { cmn_err(CE_WARN, "socal%d attach failed: bad soft state", - instance); + instance); return (DDI_FAILURE); } DEBUGF(4, (CE_CONT, "socal%d: attach: soc soft state ptr=0x%p\n", - instance, socalp)); + instance, socalp)); socalp->dip = dip; socallim = &default_socallim; @@ -594,8 +595,8 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) /* Get out Node wwn and calculate port wwns */ rval = ddi_prop_op(DDI_DEV_T_ANY, dip, - PROP_LEN_AND_VAL_ALLOC, DDI_PROP_DONTPASS | - DDI_PROP_CANSLEEP, "wwn", (caddr_t)&wwn, &i); + PROP_LEN_AND_VAL_ALLOC, DDI_PROP_DONTPASS | + DDI_PROP_CANSLEEP, "wwn", (caddr_t)&wwn, &i); if ((rval != DDI_PROP_SUCCESS) || (i < FC_WWN_SIZE) || (bcmp(wwn, "00000000", FC_WWN_SIZE) == 0)) { @@ -604,8 +605,8 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) bcopy((caddr_t)&ourmacaddr, (caddr_t)&s, sizeof (short)); socalp->socal_n_wwn.w.wwn_hi = s; bcopy((caddr_t)&ourmacaddr+2, - (caddr_t)&socalp->socal_n_wwn.w.wwn_lo, - sizeof (uint_t)); + (caddr_t)&socalp->socal_n_wwn.w.wwn_lo, + sizeof (uint_t)); socalp->socal_n_wwn.w.naa_id = NAA_ID_IEEE; socalp->socal_n_wwn.w.nport_id = 0; } else { @@ -617,15 +618,15 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) for (i = 0; i < FC_WWN_SIZE; i++) { (void) sprintf(&socalp->socal_stats.node_wwn[i << 1], - "%02x", socalp->socal_n_wwn.raw_wwn[i]); + "%02x", socalp->socal_n_wwn.raw_wwn[i]); } DEBUGF(4, (CE_CONT, "socal%d attach: node wwn: %s\n", - instance, socalp->socal_stats.node_wwn)); + instance, socalp->socal_stats.node_wwn)); bcopy((caddr_t)&socalp->socal_n_wwn, (caddr_t)&porta->sp_p_wwn, - sizeof (la_wwn_t)); + sizeof (la_wwn_t)); bcopy((caddr_t)&socalp->socal_n_wwn, (caddr_t)&portb->sp_p_wwn, - sizeof (la_wwn_t)); + sizeof (la_wwn_t)); porta->sp_p_wwn.w.naa_id = NAA_ID_IEEE_EXTENDED; portb->sp_p_wwn.w.naa_id = NAA_ID_IEEE_EXTENDED; porta->sp_p_wwn.w.nport_id = instance*2; @@ -633,30 +634,30 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) for (i = 0; i < FC_WWN_SIZE; i++) { (void) sprintf(&socalp->socal_stats.port_wwn[0][i << 1], - "%02x", porta->sp_p_wwn.raw_wwn[i]); + "%02x", porta->sp_p_wwn.raw_wwn[i]); (void) sprintf(&socalp->socal_stats.port_wwn[1][i << 1], - "%02x", portb->sp_p_wwn.raw_wwn[i]); + "%02x", portb->sp_p_wwn.raw_wwn[i]); } DEBUGF(4, (CE_CONT, "socal%d attach: porta wwn: %s\n", - instance, socalp->socal_stats.port_wwn[0])); + instance, socalp->socal_stats.port_wwn[0])); DEBUGF(4, (CE_CONT, "socal%d attach: portb wwn: %s\n", - instance, socalp->socal_stats.port_wwn[1])); + instance, socalp->socal_stats.port_wwn[1])); if ((porta->sp_transport = (fcal_transport_t *) - kmem_zalloc(sizeof (fcal_transport_t), KM_SLEEP)) == NULL) { + kmem_zalloc(sizeof (fcal_transport_t), KM_SLEEP)) == NULL) { socal_disp_err(socalp, CE_WARN, "attach.4011", - "attach failed: unable to alloc xport struct"); + "attach failed: unable to alloc xport struct"); goto fail; } if ((portb->sp_transport = (fcal_transport_t *) - kmem_zalloc(sizeof (fcal_transport_t), KM_SLEEP)) == NULL) { + kmem_zalloc(sizeof (fcal_transport_t), KM_SLEEP)) == NULL) { socal_disp_err(socalp, CE_WARN, "attach.4012", - "attach failed: unable to alloc xport struct"); + "attach failed: unable to alloc xport struct"); goto fail; } DEBUGF(4, (CE_CONT, "socal%d attach: allocated transport structs\n", - instance)); + instance)); /* * Map the external ram and registers for SOC+. @@ -666,54 +667,54 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) if ((ddi_dev_nregs(dip, &i) == DDI_SUCCESS) && (i == 1)) { /* Map XRAM */ if (ddi_map_regs(dip, 0, &socalp->socal_xrp, 0, 0) - != DDI_SUCCESS) { + != DDI_SUCCESS) { socalp->socal_xrp = NULL; socal_disp_err(socalp, CE_WARN, "attach.4020", - "attach failed: unable to map XRAM"); + "attach failed: unable to map XRAM"); goto fail; } /* Map registers */ socalp->socal_rp = (socal_reg_t *)(socalp->socal_xrp + - SOCAL_XRAM_SIZE); + SOCAL_XRAM_SIZE); } else { /* Map EEPROM */ if (ddi_map_regs(dip, 0, &socalp->socal_eeprom, 0, 0) != DDI_SUCCESS) { socalp->socal_eeprom = NULL; socal_disp_err(socalp, CE_WARN, "attach.4010", - "attach failed: unable to map eeprom"); + "attach failed: unable to map eeprom"); goto fail; } DEBUGF(4, (CE_CONT, "socal%d attach: mapped eeprom 0x%p\n", - instance, socalp->socal_eeprom)); + instance, socalp->socal_eeprom)); /* Map XRAM */ if (ddi_map_regs(dip, 1, &socalp->socal_xrp, 0, 0) != - DDI_SUCCESS) { + DDI_SUCCESS) { socalp->socal_xrp = NULL; socal_disp_err(socalp, CE_WARN, "attach.4020", - "attach failed: unable to map XRAM"); + "attach failed: unable to map XRAM"); goto fail; } DEBUGF(4, (CE_CONT, "socal%d attach: mapped xram 0x%p\n", - instance, socalp->socal_xrp)); + instance, socalp->socal_xrp)); /* Map registers */ if (ddi_map_regs(dip, 2, (caddr_t *)&socalp->socal_rp, 0, 0) != - DDI_SUCCESS) { + DDI_SUCCESS) { socalp->socal_rp = NULL; socal_disp_err(socalp, CE_WARN, "attach.4030", - "attach failed: unable to map registers"); + "attach failed: unable to map registers"); goto fail; } DEBUGF(4, (CE_CONT, "socal%d attach: mapped regs 0x%p\n", - instance, socalp->socal_rp)); + instance, socalp->socal_rp)); } /* * Check to see we really have a SOC+ Host Adapter card installed */ if (ddi_peek32(dip, (int32_t *)&socalp->socal_rp->socal_csr.w, - (int32_t *)NULL) != DDI_SUCCESS) { + (int32_t *)NULL) != DDI_SUCCESS) { socal_disp_err(socalp, CE_WARN, "attach.4040", - "attach failed: unable to access status register"); + "attach failed: unable to access status register"); goto fail; } /* now that we have our registers mapped make sure soc+ reset */ @@ -721,25 +722,25 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) /* try defacing a spot in XRAM */ if (ddi_poke32(dip, (int32_t *)(socalp->socal_xrp + SOCAL_XRAM_UCODE), - 0xdefaced) != DDI_SUCCESS) { + 0xdefaced) != DDI_SUCCESS) { socal_disp_err(socalp, CE_WARN, "attach.4050", - "attach failed: unable to write host adapter XRAM"); + "attach failed: unable to write host adapter XRAM"); goto fail; } /* see if it stayed defaced */ if (ddi_peek32(dip, (int32_t *)(socalp->socal_xrp + SOCAL_XRAM_UCODE), (int32_t *)&y) - != DDI_SUCCESS) { + != DDI_SUCCESS) { socal_disp_err(socalp, CE_WARN, "attach.4051", - "attach failed: unable to access host adapter XRAM"); + "attach failed: unable to access host adapter XRAM"); goto fail; } #ifdef DEBUG for (i = 0; i < 4; i++) { socalp->socal_rp->socal_cr.w &= - ~SOCAL_CR_EXTERNAL_RAM_BANK_MASK; + ~SOCAL_CR_EXTERNAL_RAM_BANK_MASK; socalp->socal_rp->socal_cr.w |= i<<24; cptr = (char *)(socal_xrambuf + (i*0x10000)); bcopy((caddr_t)socalp->socal_xrp, (caddr_t)cptr, 0x10000); @@ -751,25 +752,25 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) if (y != 0xdefaced) { socal_disp_err(socalp, CE_WARN, "attach.4052", - "attach failed: read/write mismatch in XRAM"); + "attach failed: read/write mismatch in XRAM"); goto fail; } /* Point to the SOC XRAM CQ Descriptor locations. */ socalp->xram_reqp = (soc_cq_t *)(socalp->socal_xrp + - SOCAL_XRAM_REQ_DESC); + SOCAL_XRAM_REQ_DESC); socalp->xram_rspp = (soc_cq_t *)(socalp->socal_xrp + - SOCAL_XRAM_RSP_DESC); + SOCAL_XRAM_RSP_DESC); if ((socalp->socal_ksp = kstat_create("socal", instance, "statistics", "controller", KSTAT_TYPE_RAW, sizeof (struct socal_stats), KSTAT_FLAG_VIRTUAL)) == NULL) { socal_disp_err(socalp, CE_WARN, "attach.4053", - "unable to create kstats"); + "unable to create kstats"); } else { socalp->socal_stats.version = 2; (void) sprintf(socalp->socal_stats.drvr_name, - "%s: %s", SOCAL_NAME, socal_version); + "%s: %s", SOCAL_NAME, socal_version); socalp->socal_stats.pstats[0].port = 0; socalp->socal_stats.pstats[1].port = 1; socalp->socal_ksp->ks_data = (void *)&socalp->socal_stats; @@ -780,14 +781,14 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) * Install a dummy interrupt routine. */ if (ddi_add_intr(dip, - (uint_t)0, - &socalp->iblkc, - &socalp->idevc, - socal_dummy_intr, - (caddr_t)socalp) != DDI_SUCCESS) { - socal_disp_err(socalp, CE_WARN, "attach.4060", + (uint_t)0, + &socalp->iblkc, + &socalp->idevc, + socal_dummy_intr, + (caddr_t)socalp) != DDI_SUCCESS) { + socal_disp_err(socalp, CE_WARN, "attach.4060", "attach failed: unable to install interrupt handler"); - goto fail; + goto fail; } ddi_set_driver_private(dip, socalp); @@ -807,8 +808,8 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) cv_init(&socalp->board_cv, NULL, CV_DRIVER, NULL); DEBUGF(4, (CE_CONT, - "socal%d: attach: inited imr mutex, board mutex, board cv\n", - instance)); + "socal%d: attach: inited imr mutex, board mutex, board cv\n", + instance)); /* init the port mutexes */ mutex_init(&porta->sp_mtx, NULL, MUTEX_DRIVER, socalp->iblkc); @@ -816,18 +817,18 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) mutex_init(&portb->sp_mtx, NULL, MUTEX_DRIVER, socalp->iblkc); cv_init(&portb->sp_cv, NULL, CV_DRIVER, NULL); DEBUGF(4, (CE_CONT, "socal%d: attach: inited port mutexes and cvs\n", - instance)); + instance)); /* get local copy of service params */ socal_wcopy((uint_t *)socalp->socal_xrp + SOCAL_XRAM_SERV_PARAMS, - (uint_t *)socalp->socal_service_params, SOCAL_SVC_LENGTH); + (uint_t *)socalp->socal_service_params, SOCAL_SVC_LENGTH); DEBUGF(4, (CE_CONT, "socal%d: attach: got service params\n", instance)); /* * Initailize the FCAL transport interface. */ socal_init_transport_interface(socalp); DEBUGF(4, (CE_CONT, "socal%d: attach: initalized transport interface\n", - instance)); + instance)); /* * Allocate request and response queues and init their mutexs. @@ -844,19 +845,20 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) */ burstsize = ddi_dma_burstsizes(socalp->request[0].skc_dhandle); DEBUGF(4, (CE_CONT, "socal%d: attach: burstsize = 0x%x\n", - instance, burstsize)); + instance, burstsize)); j = burstsize & BURSTSIZE_MASK; for (i = 0; socal_burst32_table[i] != SOCAL_CR_BURST_64; i++) if (!(j >>= 1)) break; socalp->socal_cfg = (socalp->socal_cfg & ~SOCAL_CR_SBUS_BURST_SIZE_MASK) - | socal_burst32_table[i]; + | socal_burst32_table[i]; if (socal_64bitsbus) { - if (ddi_dma_set_sbus64(socalp->request[0].skc_dhandle, - socal_dma_attr.dma_attr_burstsizes | BURST128) == DDI_SUCCESS) { + if (ddi_dma_set_sbus64(socalp->request[0].skc_dhandle, + socal_dma_attr.dma_attr_burstsizes | BURST128) == + DDI_SUCCESS) { DEBUGF(4, (CE_CONT, "socal%d: enabled 64 bit sbus\n", - instance)); + instance)); socalp->socal_cfg |= SOCAL_CR_SBUS_ENHANCED; burstsize = ddi_dma_burstsizes(socalp->request[0]. skc_dhandle); @@ -871,7 +873,7 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) socalp->socal_cfg = (socalp->socal_cfg & ~SOCAL_CR_SBUS_BURST_SIZE_64BIT_MASK) | socal_burst64_table[i]; - } + } } ddi_remove_intr(dip, 0, socalp->iblkc); @@ -880,24 +882,24 @@ socal_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) * Install the interrupt routine. */ if (ddi_add_intr(dip, - (uint_t)0, - &socalp->iblkc, - &socalp->idevc, - socal_intr, - (caddr_t)socalp) != DDI_SUCCESS) { - socal_disp_err(socalp, CE_WARN, "attach.4060", + (uint_t)0, + &socalp->iblkc, + &socalp->idevc, + socal_intr, + (caddr_t)socalp) != DDI_SUCCESS) { + socal_disp_err(socalp, CE_WARN, "attach.4060", "attach failed: unable to install interrupt handler"); - goto fail; + goto fail; } DEBUGF(4, (CE_CONT, "socal%d: attach: set config reg %x\n", - instance, socalp->socal_cfg)); + instance, socalp->socal_cfg)); if (ddi_create_minor_node(dip, SOCAL_PORTA_NAME, S_IFCHR, - instance*N_SOCAL_NPORTS, SOCAL_NT_PORT, 0) != DDI_SUCCESS) + instance*N_SOCAL_NPORTS, SOCAL_NT_PORT, 0) != DDI_SUCCESS) goto fail; if (ddi_create_minor_node(dip, SOCAL_PORTB_NAME, S_IFCHR, - instance*N_SOCAL_NPORTS+1, SOCAL_NT_PORT, 0) != DDI_SUCCESS) + instance*N_SOCAL_NPORTS+1, SOCAL_NT_PORT, 0) != DDI_SUCCESS) goto fail; if (socal_start(socalp) != FCAL_SUCCESS) @@ -1000,8 +1002,8 @@ socal_dodetach(dev_info_t *dip) if (socalp->iblkc != (void *)NULL) { ddi_remove_intr(dip, (uint_t)0, socalp->iblkc); DEBUGF(2, (CE_CONT, - "socal%d: detach: Removed SOC+ interrupt from ddi\n", - instance)); + "socal%d: detach: Removed SOC+ interrupt from ddi\n", + instance)); } for (i = 0; i < N_SOCAL_NPORTS; i++) { @@ -1011,9 +1013,9 @@ socal_dodetach(dev_info_t *dip) mutex_destroy(&portp->sp_transport->fcal_mtx); cv_destroy(&portp->sp_transport->fcal_cv); kmem_free((void *)portp->sp_transport, - sizeof (fcal_transport_t)); + sizeof (fcal_transport_t)); for (cb = portp->sp_unsol_cb; cb != (socal_unsol_cb_t *)NULL; - cb = cbn) { + cb = cbn) { cbn = cb->next; kmem_free((void *)cb, sizeof (socal_unsol_cb_t)); } @@ -1052,11 +1054,11 @@ socal_dodetach(dev_info_t *dip) } if (socalp->request[i].deferred_intr_timeoutid) { (void) untimeout(socalp-> - request[i].deferred_intr_timeoutid); + request[i].deferred_intr_timeoutid); } if (socalp->response[i].deferred_intr_timeoutid) { (void) untimeout(socalp-> - response[i].deferred_intr_timeoutid); + response[i].deferred_intr_timeoutid); } } @@ -1136,7 +1138,7 @@ socal_bus_ctl(dev_info_t *dip, dev_info_t *rip, ddi_ctl_enum_t op, return (DDI_FAILURE); port = ddi_getprop(DDI_DEV_T_ANY, child_dip, - DDI_PROP_DONTPASS, SOCAL_PORT_NO_PROP, -1); + DDI_PROP_DONTPASS, SOCAL_PORT_NO_PROP, -1); if ((port < 0) || (port > 1)) { port = ddi_getprop(DDI_DEV_T_ANY, child_dip, @@ -1170,7 +1172,7 @@ socal_bus_ctl(dev_info_t *dip, dev_info_t *rip, ddi_ctl_enum_t op, socalp = ddi_get_driver_private(dip); port = ddi_getprop(DDI_DEV_T_ANY, child_dip, - DDI_PROP_DONTPASS, SOCAL_PORT_NO_PROP, -1); + DDI_PROP_DONTPASS, SOCAL_PORT_NO_PROP, -1); if ((port < 0) || (port > 1)) { port = ddi_getprop(DDI_DEV_T_ANY, child_dip, @@ -1235,8 +1237,8 @@ socal_bus_ctl(dev_info_t *dip, dev_info_t *rip, ddi_ctl_enum_t op, * Remaining requests get passed up to our parent */ DEBUGF(2, (CE_CONT, "%s%d: op (%d) from %s%d\n", - ddi_get_name(dip), ddi_get_instance(dip), - op, ddi_get_name(rip), ddi_get_instance(rip))); + ddi_get_name(dip), ddi_get_instance(dip), + op, ddi_get_name(rip), ddi_get_instance(rip))); return (ddi_ctlops(dip, rip, op, a, v)); } @@ -1286,7 +1288,7 @@ socal_open(dev_t *devp, int flag, int otyp, cred_t *cred_p) { int instance = getminor(*devp)/2; socal_state_t *socalp = - ddi_get_soft_state(socal_soft_state_p, instance); + ddi_get_soft_state(socal_soft_state_p, instance); socal_port_t *port_statep; int port; @@ -1310,7 +1312,7 @@ socal_close(dev_t dev, int flag, int otyp, cred_t *cred_p) { int instance = getminor(dev)/2; socal_state_t *socalp = - ddi_get_soft_state(socal_soft_state_p, instance); + ddi_get_soft_state(socal_soft_state_p, instance); socal_port_t *port_statep; int port; @@ -1332,7 +1334,7 @@ socal_ioctl(dev_t dev, { int instance = getminor(dev)/2; socal_state_t *socalp = - ddi_get_soft_state(socal_soft_state_p, instance); + ddi_get_soft_state(socal_soft_state_p, instance); int port; socal_port_t *port_statep; int i; @@ -1367,413 +1369,417 @@ socal_ioctl(dev_t dev, port = getminor(dev)%2; switch (cmd) { - case FCIO_FCODE_MCODE_VERSION: + case FCIO_FCODE_MCODE_VERSION: #ifdef _MULTI_DATAMODEL - switch (ddi_model_convert_from(mode & FMODELS)) { - case DDI_MODEL_ILP32: - dm32 = 1; - if (ddi_copyin((caddr_t)arg, - (caddr_t)&ver32, sizeof (ver32), - mode) == -1) - return (EFAULT); - ver.fcode_ver_len = - ver32.fcode_ver_len; - ver.mcode_ver_len = - ver32.mcode_ver_len; - ver.prom_ver_len = - ver32.prom_ver_len; - ver.fcode_ver = - (caddr_t)(uintptr_t)ver32.fcode_ver; - ver.mcode_ver = - (caddr_t)(uintptr_t)ver32.mcode_ver; - ver.prom_ver = - (caddr_t)(uintptr_t)ver32.prom_ver; - break; - case DDI_MODEL_NONE: - if (ddi_copyin((caddr_t)arg, - (caddr_t)&ver, sizeof (ver), - mode) == -1) - return (EFAULT); - } -#else /* _MULTI_DATAMODEL */ - if (ddi_copyin((caddr_t)arg, (caddr_t)&ver, - sizeof (ver), mode) == -1) - return (EFAULT); -#endif /* _MULTI_DATAMODEL */ - dip = socalp->dip; - if (ddi_prop_op(DDI_DEV_T_ANY, dip, - PROP_LEN_AND_VAL_ALLOC, DDI_PROP_DONTPASS | - DDI_PROP_CANSLEEP, "version", (caddr_t)&buffer, - &i) != DDI_PROP_SUCCESS) - return (EIO); - if (i < ver.fcode_ver_len) - ver.fcode_ver_len = i; - if (ddi_copyout((caddr_t)buffer, - (caddr_t)ver.fcode_ver, ver.fcode_ver_len, - mode) == -1) { - kmem_free((caddr_t)buffer, i); - return (EFAULT); - } - kmem_free((caddr_t)buffer, i); - if (socalp->socal_eeprom) { - for (i = 0; i < SOCAL_N_CQS; i++) { - mutex_enter( - &socalp->request[i].skc_mtx); - mutex_enter( - &socalp->response[i].skc_mtx); - } - i = socalp->socal_rp->socal_cr.w; - socalp->socal_rp->socal_cr.w &= - ~SOCAL_CR_EEPROM_BANK_MASK; - socalp->socal_rp->socal_cr.w |= 3 << 16; - if (ver.prom_ver_len > 10) - ver.prom_ver_len = 10; - bcopy((caddr_t)socalp->socal_eeprom + (unsigned) - 0xfff6, tmp, 10); - socalp->socal_rp->socal_cr.w = i; - for (i = SOCAL_N_CQS-1; i >= 0; i--) { - mutex_exit(&socalp->request[i].skc_mtx); - mutex_exit( - &socalp->response[i].skc_mtx); - } - if (ddi_copyout((caddr_t)tmp, - (caddr_t)ver.prom_ver, - ver.prom_ver_len, mode) == -1) + switch (ddi_model_convert_from(mode & FMODELS)) { + case DDI_MODEL_ILP32: + dm32 = 1; + if (ddi_copyin((caddr_t)arg, + (caddr_t)&ver32, sizeof (ver32), + mode) == -1) return (EFAULT); - } else { - ver.prom_ver_len = 0; - } - ver.mcode_ver_len = 0; -#ifdef _MULTI_DATAMODEL - if (dm32) { - ver32.fcode_ver_len = ver.fcode_ver_len; - ver32.mcode_ver_len = ver.mcode_ver_len; - ver32.prom_ver_len = ver.prom_ver_len; - ver32.fcode_ver = (caddr32_t)(uintptr_t) - ver.fcode_ver; - ver32.mcode_ver = (caddr32_t)(uintptr_t) - ver.mcode_ver; - ver32.prom_ver = (caddr32_t)(uintptr_t) - ver.prom_ver; - if (ddi_copyout((caddr_t)&ver32, - (caddr_t)arg, sizeof (ver32), + ver.fcode_ver_len = + ver32.fcode_ver_len; + ver.mcode_ver_len = + ver32.mcode_ver_len; + ver.prom_ver_len = + ver32.prom_ver_len; + ver.fcode_ver = + (caddr_t)(uintptr_t)ver32.fcode_ver; + ver.mcode_ver = + (caddr_t)(uintptr_t)ver32.mcode_ver; + ver.prom_ver = + (caddr_t)(uintptr_t)ver32.prom_ver; + break; + case DDI_MODEL_NONE: + if (ddi_copyin((caddr_t)arg, + (caddr_t)&ver, sizeof (ver), mode) == -1) return (EFAULT); - } else + } +#else /* _MULTI_DATAMODEL */ + if (ddi_copyin((caddr_t)arg, (caddr_t)&ver, + sizeof (ver), mode) == -1) + return (EFAULT); #endif /* _MULTI_DATAMODEL */ - if (ddi_copyout((caddr_t)&ver, (caddr_t)arg, - sizeof (struct socal_fm_version), mode) == -1) - return (EFAULT); - break; - case FCIO_LOADUCODE: - mutex_enter(&socalp->k_imr_mtx); - socal_disable(socalp); - mutex_exit(&socalp->k_imr_mtx); - if (copyin((caddr_t)arg, (caddr_t)socal_ucode, 0x10000) - == -1) - return (EFAULT); - /* restart socal after resetting */ - (void) socal_force_reset((void *)socalp, 0, - RESET_PORT); - break; - case FCIO_DUMPXRAM: + dip = socalp->dip; + if (ddi_prop_op(DDI_DEV_T_ANY, dip, + PROP_LEN_AND_VAL_ALLOC, DDI_PROP_DONTPASS | + DDI_PROP_CANSLEEP, "version", (caddr_t)&buffer, + &i) != DDI_PROP_SUCCESS) + return (EIO); + if (i < ver.fcode_ver_len) + ver.fcode_ver_len = i; + if (ddi_copyout((caddr_t)buffer, + (caddr_t)ver.fcode_ver, ver.fcode_ver_len, + mode) == -1) { + kmem_free((caddr_t)buffer, i); + return (EFAULT); + } + kmem_free((caddr_t)buffer, i); + if (socalp->socal_eeprom) { for (i = 0; i < SOCAL_N_CQS; i++) { - mutex_enter(&socalp->request[i].skc_mtx); - mutex_enter(&socalp->response[i].skc_mtx); - } - for (i = 0; i < 4; i++) { - offset = arg+(0x10000 * i); - socalp->socal_rp->socal_cr.w &= - ~SOCAL_CR_EXTERNAL_RAM_BANK_MASK; - socalp->socal_rp->socal_cr.w |= i<<24; - (void) copyout((caddr_t)socalp->socal_xrp, - (caddr_t)(uintptr_t)offset, 0x10000); + mutex_enter( + &socalp->request[i].skc_mtx); + mutex_enter( + &socalp->response[i].skc_mtx); } + i = socalp->socal_rp->socal_cr.w; socalp->socal_rp->socal_cr.w &= - ~SOCAL_CR_EXTERNAL_RAM_BANK_MASK; + ~SOCAL_CR_EEPROM_BANK_MASK; + socalp->socal_rp->socal_cr.w |= 3 << 16; + if (ver.prom_ver_len > 10) + ver.prom_ver_len = 10; + bcopy((caddr_t)socalp->socal_eeprom + (unsigned) + 0xfff6, tmp, 10); + socalp->socal_rp->socal_cr.w = i; for (i = SOCAL_N_CQS-1; i >= 0; i--) { mutex_exit(&socalp->request[i].skc_mtx); - mutex_exit(&socalp->response[i].skc_mtx); + mutex_exit( + &socalp->response[i].skc_mtx); } - break; + if (ddi_copyout((caddr_t)tmp, + (caddr_t)ver.prom_ver, + ver.prom_ver_len, mode) == -1) + return (EFAULT); + } else { + ver.prom_ver_len = 0; + } + ver.mcode_ver_len = 0; +#ifdef _MULTI_DATAMODEL + if (dm32) { + ver32.fcode_ver_len = ver.fcode_ver_len; + ver32.mcode_ver_len = ver.mcode_ver_len; + ver32.prom_ver_len = ver.prom_ver_len; + ver32.fcode_ver = (caddr32_t)(uintptr_t) + ver.fcode_ver; + ver32.mcode_ver = (caddr32_t)(uintptr_t) + ver.mcode_ver; + ver32.prom_ver = (caddr32_t)(uintptr_t) + ver.prom_ver; + if (ddi_copyout((caddr_t)&ver32, + (caddr_t)arg, sizeof (ver32), + mode) == -1) + return (EFAULT); + } else +#endif /* _MULTI_DATAMODEL */ + if (ddi_copyout((caddr_t)&ver, (caddr_t)arg, + sizeof (struct socal_fm_version), mode) == -1) + return (EFAULT); + break; + case FCIO_LOADUCODE: + mutex_enter(&socalp->k_imr_mtx); + socal_disable(socalp); + mutex_exit(&socalp->k_imr_mtx); + if (copyin((caddr_t)arg, (caddr_t)socal_ucode, 0x10000) + == -1) + return (EFAULT); + /* restart socal after resetting */ + (void) socal_force_reset((void *)socalp, 0, + RESET_PORT); + break; + case FCIO_DUMPXRAM: + for (i = 0; i < SOCAL_N_CQS; i++) { + mutex_enter(&socalp->request[i].skc_mtx); + mutex_enter(&socalp->response[i].skc_mtx); + } + for (i = 0; i < 4; i++) { + offset = arg+(0x10000 * i); + socalp->socal_rp->socal_cr.w &= + ~SOCAL_CR_EXTERNAL_RAM_BANK_MASK; + socalp->socal_rp->socal_cr.w |= i<<24; + (void) copyout((caddr_t)socalp->socal_xrp, + (caddr_t)(uintptr_t)offset, 0x10000); + } + socalp->socal_rp->socal_cr.w &= + ~SOCAL_CR_EXTERNAL_RAM_BANK_MASK; + for (i = SOCAL_N_CQS-1; i >= 0; i--) { + mutex_exit(&socalp->request[i].skc_mtx); + mutex_exit(&socalp->response[i].skc_mtx); + } + break; #ifdef DEBUG - case FCIO_DUMPXRAMBUF: - (void) copyout((caddr_t)socal_xrambuf, (caddr_t)arg, - 0x40000); - break; + case FCIO_DUMPXRAMBUF: + (void) copyout((caddr_t)socal_xrambuf, (caddr_t)arg, + 0x40000); + break; #endif - case FCIO_GETMAP: - mutex_enter(&socalp->ioctl_mtx); - if (socal_getmap(socalp, port, (caddr_t)arg, 0, 0) == - -1) - retval = FCAL_ALLOC_FAILED; - mutex_exit(&socalp->ioctl_mtx); - break; - case FCIO_BYPASS_DEV: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_bypass_dev((void *)socalp, port, arg); - mutex_exit(&socalp->ioctl_mtx); - break; - case FCIO_FORCE_LIP: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_force_lip((void *)socalp, port, 0, - FCAL_FORCE_LIP); - mutex_exit(&socalp->ioctl_mtx); - break; - case FCIO_FORCE_OFFLINE: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_force_offline((void *)socalp, port, 0); - mutex_exit(&socalp->ioctl_mtx); - break; - case FCIO_ADISC_ELS: - { - if ((adisc_pl = - (la_els_adisc_t *)kmem_zalloc(sizeof (la_els_adisc_t), - KM_NOSLEEP)) == NULL) - return (ENOMEM); - - if (copyin((caddr_t)arg, (caddr_t)adisc_pl, - sizeof (la_els_adisc_t)) == -1) { - kmem_free((void *)adisc_pl, sizeof (la_els_adisc_t)); + case FCIO_GETMAP: + mutex_enter(&socalp->ioctl_mtx); + if (socal_getmap(socalp, port, (caddr_t)arg, 0, 0) == + -1) + retval = FCAL_ALLOC_FAILED; + mutex_exit(&socalp->ioctl_mtx); + break; + case FCIO_BYPASS_DEV: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_bypass_dev((void *)socalp, port, arg); + mutex_exit(&socalp->ioctl_mtx); + break; + case FCIO_FORCE_LIP: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_force_lip((void *)socalp, port, 0, + FCAL_FORCE_LIP); + mutex_exit(&socalp->ioctl_mtx); + break; + case FCIO_FORCE_OFFLINE: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_force_offline((void *)socalp, port, 0); + mutex_exit(&socalp->ioctl_mtx); + break; + case FCIO_ADISC_ELS: + { + if ((adisc_pl = + (la_els_adisc_t *)kmem_zalloc( + sizeof (la_els_adisc_t), + KM_NOSLEEP)) == NULL) + return (ENOMEM); + + if (copyin((caddr_t)arg, (caddr_t)adisc_pl, + sizeof (la_els_adisc_t)) == -1) { + kmem_free((void *)adisc_pl, + sizeof (la_els_adisc_t)); return (EFAULT); - } - mutex_enter(&socalp->ioctl_mtx); - retval = socal_issue_adisc(socalp, port, adisc_pl->nport_id, - adisc_pl, 0); - mutex_exit(&socalp->ioctl_mtx); + } + mutex_enter(&socalp->ioctl_mtx); + retval = socal_issue_adisc(socalp, port, + adisc_pl->nport_id, + adisc_pl, 0); + mutex_exit(&socalp->ioctl_mtx); + + if (retval == FCAL_SUCCESS) { + if (copyout((caddr_t)adisc_pl, (caddr_t)arg, + sizeof (la_els_adisc_t)) == -1) { + kmem_free((void *)adisc_pl, + sizeof (la_els_adisc_t)); + return (EFAULT); + } + } - if (retval == FCAL_SUCCESS) { - if (copyout((caddr_t)adisc_pl, (caddr_t)arg, - sizeof (la_els_adisc_t)) == -1) { - kmem_free((void *)adisc_pl, - sizeof (la_els_adisc_t)); - return (EFAULT); - } - } + kmem_free((void *)adisc_pl, sizeof (la_els_adisc_t)); + break; + } + case FCIO_LINKSTATUS: + { + int dest; + if ((rls_pl = + (la_els_rls_reply_t *) + kmem_zalloc(sizeof (la_els_rls_reply_t), + KM_NOSLEEP)) == NULL) + return (ENOMEM); - kmem_free((void *)adisc_pl, sizeof (la_els_adisc_t)); - break; + if (copyin((caddr_t)arg, (caddr_t)rls_pl, + sizeof (la_els_rls_reply_t)) == -1) { + kmem_free((void *)rls_pl, + sizeof (la_els_rls_reply_t)); + return (EFAULT); } - case FCIO_LINKSTATUS: - { - int dest; - if ((rls_pl = - (la_els_rls_reply_t *) - kmem_zalloc(sizeof (la_els_rls_reply_t), - KM_NOSLEEP)) == NULL) - return (ENOMEM); - - if (copyin((caddr_t)arg, (caddr_t)rls_pl, - sizeof (la_els_rls_reply_t)) == -1) { - kmem_free((void *)rls_pl, sizeof (la_els_rls_reply_t)); + dest = (rls_pl->mbz[0] << 16) + (rls_pl->mbz[1] << 8) + + rls_pl->mbz[2]; + mutex_enter(&socalp->ioctl_mtx); + retval = socal_issue_rls(socalp, port, dest, + rls_pl, 0); + mutex_exit(&socalp->ioctl_mtx); + + if (retval == FCAL_SUCCESS) { + if (copyout((caddr_t)rls_pl, (caddr_t)arg, + sizeof (la_els_rls_reply_t)) == -1) { + kmem_free((void *)rls_pl, + sizeof (la_els_rls_reply_t)); return (EFAULT); - } - dest = (rls_pl->mbz[0] << 16) + (rls_pl->mbz[1] << 8) + - rls_pl->mbz[2]; - mutex_enter(&socalp->ioctl_mtx); - retval = socal_issue_rls(socalp, port, dest, - rls_pl, 0); - mutex_exit(&socalp->ioctl_mtx); - - if (retval == FCAL_SUCCESS) { - if (copyout((caddr_t)rls_pl, (caddr_t)arg, - sizeof (la_els_rls_reply_t)) == -1) { - kmem_free((void *)rls_pl, - sizeof (la_els_rls_reply_t)); - return (EFAULT); - } - } - kmem_free((void *)rls_pl, sizeof (la_els_rls_reply_t)); - break; } - case FCIO_LOOPBACK_INTERNAL: - /* - * If userland doesn't provide a location for a return - * value the driver will permanently offline the port, - * ignoring any checks for devices on the loop. - */ - mutex_enter(&socalp->ioctl_mtx); - if (arg == 0) { - port_statep = &socalp->port_state[port]; - mutex_enter(&port_statep->sp_mtx); - if (port_statep->sp_status & PORT_DISABLED) { - /* Already disabled */ - mutex_exit(&port_statep->sp_mtx); - mutex_exit(&socalp->ioctl_mtx); - return (EALREADY); - } - port_statep->sp_status |= PORT_DISABLED; - mutex_exit(&port_statep->sp_mtx); - } - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_INT_LOOP); - mutex_exit(&socalp->ioctl_mtx); - if (arg == 0) break; - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_LOOPBACK_MANUAL: - mutex_enter(&socalp->ioctl_mtx); + } + kmem_free((void *)rls_pl, sizeof (la_els_rls_reply_t)); + break; + } + case FCIO_LOOPBACK_INTERNAL: + /* + * If userland doesn't provide a location for a return + * value the driver will permanently offline the port, + * ignoring any checks for devices on the loop. + */ + mutex_enter(&socalp->ioctl_mtx); + if (arg == 0) { port_statep = &socalp->port_state[port]; mutex_enter(&port_statep->sp_mtx); if (port_statep->sp_status & PORT_DISABLED) { + /* Already disabled */ mutex_exit(&port_statep->sp_mtx); mutex_exit(&socalp->ioctl_mtx); - return (EBUSY); + return (EALREADY); } + port_statep->sp_status |= PORT_DISABLED; mutex_exit(&port_statep->sp_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_EXT_LOOP); - mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_NO_LOOPBACK: - mutex_enter(&socalp->ioctl_mtx); - port_statep = &socalp->port_state[port]; - mutex_enter(&port_statep->sp_mtx); - /* Do not allow online if we're disabled */ - if (port_statep->sp_status & PORT_DISABLED) { - if (arg != 0) { - mutex_exit(&port_statep->sp_mtx); - mutex_exit(&socalp->ioctl_mtx); - /* - * It's permanently disabled -- Need to - * enable it first - */ - return (EBUSY); - } - /* This was a request to online. */ - port_statep->sp_status &= ~PORT_DISABLED; - } + } + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_INT_LOOP); + mutex_exit(&socalp->ioctl_mtx); + if (arg == 0) break; + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_LOOPBACK_MANUAL: + mutex_enter(&socalp->ioctl_mtx); + port_statep = &socalp->port_state[port]; + mutex_enter(&port_statep->sp_mtx); + if (port_statep->sp_status & PORT_DISABLED) { mutex_exit(&port_statep->sp_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_REM_LOOP); - mutex_exit(&socalp->ioctl_mtx); - if (arg == 0) break; - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_DIAG_NOP: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_NOP); - mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_DIAG_XRAM: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_XRAM_TEST); - mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_DIAG_SOC: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_SOC_TEST); - mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_DIAG_HCB: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_HCB_TEST); - mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_DIAG_SOCLB: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_SOCLB_TEST); - mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_DIAG_SRDSLB: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_SRDSLB_TEST); mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_DIAG_EXTLB: - mutex_enter(&socalp->ioctl_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - SOC_DIAG_EXTOE_TEST); - mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_DIAG_RAW: - if (copyin((caddr_t)arg, (caddr_t)&i, sizeof (uint_t)) - == -1) - return (EFAULT); - mutex_enter(&socalp->ioctl_mtx); - retval = socal_diag_request((void *)socalp, port, &r, - (uint_t)i); - mutex_exit(&socalp->ioctl_mtx); - if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) - == -1) - return (EFAULT); - break; - case FCIO_LOOPBACK_FRAME: - if ((flb_hdr = (flb_hdr_t *)kmem_zalloc(sizeof (flb_hdr_t), - KM_NOSLEEP)) == NULL) - return (ENOMEM); - - if (copyin((caddr_t)arg, - (caddr_t)flb_hdr, sizeof (flb_hdr_t)) == -1) { - kmem_free((void *)flb_hdr, sizeof (flb_hdr_t)); + return (EBUSY); + } + mutex_exit(&port_statep->sp_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_EXT_LOOP); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_NO_LOOPBACK: + mutex_enter(&socalp->ioctl_mtx); + port_statep = &socalp->port_state[port]; + mutex_enter(&port_statep->sp_mtx); + /* Do not allow online if we're disabled */ + if (port_statep->sp_status & PORT_DISABLED) { + if (arg != 0) { + mutex_exit(&port_statep->sp_mtx); + mutex_exit(&socalp->ioctl_mtx); + /* + * It's permanently disabled -- Need to + * enable it first + */ + return (EBUSY); + } + /* This was a request to online. */ + port_statep->sp_status &= ~PORT_DISABLED; + } + mutex_exit(&port_statep->sp_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_REM_LOOP); + mutex_exit(&socalp->ioctl_mtx); + if (arg == 0) break; + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_DIAG_NOP: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_NOP); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_DIAG_XRAM: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_XRAM_TEST); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_DIAG_SOC: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_SOC_TEST); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_DIAG_HCB: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_HCB_TEST); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_DIAG_SOCLB: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_SOCLB_TEST); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) return (EFAULT); - } + break; + case FCIO_DIAG_SRDSLB: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_SRDSLB_TEST); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_DIAG_EXTLB: + mutex_enter(&socalp->ioctl_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + SOC_DIAG_EXTOE_TEST); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_DIAG_RAW: + if (copyin((caddr_t)arg, (caddr_t)&i, sizeof (uint_t)) + == -1) + return (EFAULT); + mutex_enter(&socalp->ioctl_mtx); + retval = socal_diag_request((void *)socalp, port, &r, + (uint_t)i); + mutex_exit(&socalp->ioctl_mtx); + if (copyout((caddr_t)&r, (caddr_t)arg, sizeof (uint_t)) + == -1) + return (EFAULT); + break; + case FCIO_LOOPBACK_FRAME: + if ((flb_hdr = (flb_hdr_t *)kmem_zalloc(sizeof (flb_hdr_t), + KM_NOSLEEP)) == NULL) + return (ENOMEM); - flb_size = flb_hdr->length; + if (copyin((caddr_t)arg, + (caddr_t)flb_hdr, sizeof (flb_hdr_t)) == -1) { + kmem_free((void *)flb_hdr, sizeof (flb_hdr_t)); + return (EFAULT); + } - if ((flb_pl = - (uchar_t *)kmem_zalloc(flb_size, KM_NOSLEEP)) == NULL) - return (ENOMEM); + flb_size = flb_hdr->length; - if (copyin((caddr_t)(arg + sizeof (flb_hdr_t)), - (caddr_t)flb_pl, flb_size) == -1) { - kmem_free((void *)flb_pl, flb_size); - return (EFAULT); - } - mutex_enter(&socalp->ioctl_mtx); - retval = socal_issue_lbf(socalp, port, flb_pl, - flb_size, 1); - mutex_exit(&socalp->ioctl_mtx); + if ((flb_pl = + (uchar_t *)kmem_zalloc(flb_size, KM_NOSLEEP)) == NULL) + return (ENOMEM); - if (retval == FCAL_SUCCESS) { - if (copyout((caddr_t)flb_pl, - (caddr_t)(arg + sizeof (flb_hdr_t) + - flb_hdr->max_length), flb_size) == -1) { - kmem_free((void *)flb_pl, flb_size); - kmem_free((void *)flb_hdr, sizeof (flb_hdr_t)); - return (EFAULT); - } - } + if (copyin((caddr_t)(arg + sizeof (flb_hdr_t)), + (caddr_t)flb_pl, flb_size) == -1) { + kmem_free((void *)flb_pl, flb_size); + return (EFAULT); + } + mutex_enter(&socalp->ioctl_mtx); + retval = socal_issue_lbf(socalp, port, flb_pl, + flb_size, 1); + mutex_exit(&socalp->ioctl_mtx); + + if (retval == FCAL_SUCCESS) { + if (copyout((caddr_t)flb_pl, + (caddr_t)(arg + sizeof (flb_hdr_t) + + flb_hdr->max_length), flb_size) == -1) { + kmem_free((void *)flb_pl, flb_size); + kmem_free((void *)flb_hdr, sizeof (flb_hdr_t)); + return (EFAULT); + } + } - kmem_free((void *)flb_pl, flb_size); - kmem_free((void *)flb_hdr, sizeof (flb_hdr_t)); - break; - default: - return (ENOTTY); + kmem_free((void *)flb_pl, flb_size); + kmem_free((void *)flb_hdr, sizeof (flb_hdr_t)); + break; + default: + return (ENOTTY); } switch (retval) { @@ -1842,7 +1848,7 @@ socal_init_transport_interface(socal_state_t *socalp) for (i = 0; i < N_SOCAL_NPORTS; i++) { xport = socalp->port_state[i].sp_transport; mutex_init(&xport->fcal_mtx, NULL, MUTEX_DRIVER, - (void *)(socalp->iblkc)); + (void *)(socalp->iblkc)); cv_init(&xport->fcal_cv, NULL, CV_DRIVER, NULL); @@ -1853,9 +1859,9 @@ socal_init_transport_interface(socal_state_t *socalp) xport->fcal_accattr = &socal_acc_attr; xport->fcal_loginparms = socalp->socal_service_params; bcopy((caddr_t)&socalp->socal_n_wwn, - (caddr_t)&xport->fcal_n_wwn, sizeof (la_wwn_t)); + (caddr_t)&xport->fcal_n_wwn, sizeof (la_wwn_t)); bcopy((caddr_t)&socalp->port_state[i].sp_p_wwn, - (caddr_t)&xport->fcal_p_wwn, sizeof (la_wwn_t)); + (caddr_t)&xport->fcal_p_wwn, sizeof (la_wwn_t)); xport->fcal_portno = i; xport->fcal_cmdmax = SOCAL_MAX_XCHG; xport->fcal_ops = &socal_transport_ops; @@ -1911,7 +1917,7 @@ socal_cqalloc_init(socal_state_t *socalp, uint32_t index) &cqp->skc_acchandle) != DDI_SUCCESS) { socal_disp_err(socalp, CE_WARN, "driver.4030", "!alloc of dma space failed"); - goto fail; + goto fail; } if (real_len < (cq_size + SOCAL_CQ_ALIGN)) { @@ -1920,8 +1926,8 @@ socal_cqalloc_init(socal_state_t *socalp, uint32_t index) goto fail; } cqp->skc_cq = (cqe_t *)(((uintptr_t)cqp->skc_cq_raw + - (uintptr_t)SOCAL_CQ_ALIGN - 1) & - ((uintptr_t)(~(SOCAL_CQ_ALIGN-1)))); + (uintptr_t)SOCAL_CQ_ALIGN - 1) & + ((uintptr_t)(~(SOCAL_CQ_ALIGN-1)))); if (ddi_dma_addr_bind_handle(cqp->skc_dhandle, (struct as *)NULL, (caddr_t)cqp->skc_cq, cq_size, @@ -1965,7 +1971,7 @@ socal_cqalloc_init(socal_state_t *socalp, uint32_t index) &cqp->skc_acchandle) != DDI_SUCCESS) { socal_disp_err(socalp, CE_WARN, "driver.4060", "!alloc of dma space failed"); - goto fail; + goto fail; } if (real_len < (cq_size + SOCAL_CQ_ALIGN)) { @@ -1975,8 +1981,8 @@ socal_cqalloc_init(socal_state_t *socalp, uint32_t index) } cqp->skc_cq = (cqe_t *)(((uintptr_t)cqp->skc_cq_raw + - (uintptr_t)SOCAL_CQ_ALIGN - 1) & - ((uintptr_t)(~(SOCAL_CQ_ALIGN-1)))); + (uintptr_t)SOCAL_CQ_ALIGN - 1) & + ((uintptr_t)(~(SOCAL_CQ_ALIGN-1)))); if (ddi_dma_addr_bind_handle(cqp->skc_dhandle, (struct as *)NULL, (caddr_t)cqp->skc_cq, cq_size, @@ -2066,9 +2072,9 @@ socal_cqinit(socal_state_t *socalp, uint32_t index) kcq_rsp->skc_socalp = socalp; kcq_req->skc_xram_cqdesc = - (socalp->xram_reqp + (index * sizeof (struct cq))/8); + (socalp->xram_reqp + (index * sizeof (struct cq))/8); kcq_rsp->skc_xram_cqdesc = - (socalp->xram_rspp + (index * sizeof (struct cq))/8); + (socalp->xram_rspp + (index * sizeof (struct cq))/8); /* Clear out memory we have allocated */ if (kcq_req->skc_cq != NULL) @@ -2094,13 +2100,13 @@ socal_start(socal_state_t *socalp) mutex_enter(&socalp->port_state[0].sp_mtx); socalp->port_state[0].sp_status - &= (PORT_OPEN|PORT_CHILD_INIT|PORT_DISABLED|PORT_TARGET_MODE); + &= (PORT_OPEN|PORT_CHILD_INIT|PORT_DISABLED|PORT_TARGET_MODE); socalp->port_state[0].sp_status |= PORT_OFFLINE; mutex_exit(&socalp->port_state[0].sp_mtx); mutex_enter(&socalp->port_state[1].sp_mtx); socalp->port_state[1].sp_status - &= (PORT_OPEN|PORT_CHILD_INIT|PORT_DISABLED|PORT_TARGET_MODE); + &= (PORT_OPEN|PORT_CHILD_INIT|PORT_DISABLED|PORT_TARGET_MODE); socalp->port_state[1].sp_status |= PORT_OFFLINE; mutex_exit(&socalp->port_state[1].sp_mtx); @@ -2108,10 +2114,10 @@ socal_start(socal_state_t *socalp) /* Make sure disabled ports stay disabled. */ if (socalp->port_state[0].sp_status & PORT_DISABLED) (void) socal_diag_request((void *)socalp, 0, &r, - SOC_DIAG_INT_LOOP); + SOC_DIAG_INT_LOOP); if (socalp->port_state[1].sp_status & PORT_DISABLED) (void) socal_diag_request((void *)socalp, 1, &r, - SOC_DIAG_INT_LOOP); + SOC_DIAG_INT_LOOP); mutex_enter(&socalp->k_imr_mtx); socalp->socal_shutdown = 0; @@ -2165,9 +2171,9 @@ socal_doreset(socal_state_t *socalp) mutex_enter(&port_statep->sp_mtx); port_statep->sp_status &= ~ (PORT_STATUS_MASK | - PORT_LILP_PENDING | PORT_LIP_PENDING | - PORT_ABORT_PENDING | PORT_BYPASS_PENDING | - PORT_ELS_PENDING); + PORT_LILP_PENDING | PORT_LIP_PENDING | + PORT_ABORT_PENDING | PORT_BYPASS_PENDING | + PORT_ELS_PENDING); mutex_exit(&port_statep->sp_mtx); } @@ -2180,7 +2186,7 @@ socal_doreset(socal_state_t *socalp) for (i = 0; i < N_SOCAL_NPORTS; i++) { for (scbp = socalp->port_state[i].sp_unsol_cb; scbp; - scbp = scbp->next) + scbp = scbp->next) (scbp->statec_cb)(scbp->arg, FCAL_STATE_RESET); } @@ -2225,7 +2231,7 @@ socal_download_ucode(socal_state_t *socalp) /* Copy the firmware image */ socal_wcopy((uint_t *)&socal_ucode, - (uint_t *)socalp->socal_xrp, fw_len); + (uint_t *)socalp->socal_xrp, fw_len); socal_fix_harda(socalp, 0); socal_fix_harda(socalp, 1); @@ -2236,16 +2242,19 @@ socal_download_ucode(socal_state_t *socalp) date_str[sizeof (date_str) / sizeof (uint_t) - 1] = 0; if (*(caddr_t)date_str != '\0') { - (void) sprintf(buf, "!Downloading host adapter, fw date code: %s\n", - (caddr_t)date_str); - socal_disp_err(socalp, CE_CONT, "driver.1010", buf); - (void) strcpy(socalp->socal_stats.fw_revision, (char *)date_str); + (void) sprintf(buf, + "!Downloading host adapter, fw date code: %s\n", + (caddr_t)date_str); + socal_disp_err(socalp, CE_CONT, "driver.1010", buf); + (void) strcpy(socalp->socal_stats.fw_revision, + (char *)date_str); } else { - (void) sprintf(buf, - "!Downloading host adapter fw, date code: <not available>\n"); - socal_disp_err(socalp, CE_CONT, "driver.3010", buf); - (void) strcpy(socalp->socal_stats.fw_revision, - "<Not Available>"); + (void) sprintf(buf, + "!Downloading host adapter fw, " + "date code: <not available>\n"); + socal_disp_err(socalp, CE_CONT, "driver.3010", buf); + (void) strcpy(socalp->socal_stats.fw_revision, + "<Not Available>"); } } @@ -2272,17 +2281,17 @@ socal_disp_err( c = *msg; if (c == '!') /* log only */ - cmn_err(level, + cmn_err(level, "!ID[SUNWssa.socal.%s] socal%d: %s", mid, instance, msg+1); else if (c == '?') /* boot message - log && maybe console */ - cmn_err(level, + cmn_err(level, "?ID[SUNWssa.socal.%s] socal%d: %s", mid, instance, msg+1); else if (c == '^') /* console only */ - cmn_err(level, "^socal%d: %s", instance, msg+1); + cmn_err(level, "^socal%d: %s", instance, msg+1); else { /* log and console */ - cmn_err(level, "^socal%d: %s", instance, msg); - cmn_err(level, "!ID[SUNWssa.socal.%s] socal%d: %s", mid, - instance, msg); + cmn_err(level, "^socal%d: %s", instance, msg); + cmn_err(level, "!ID[SUNWssa.socal.%s] socal%d: %s", mid, + instance, msg); } } @@ -2315,12 +2324,13 @@ socal_init_cq_desc(socal_state_t *socalp) */ for (i = 0; i < SOCAL_N_CQS; i++) { if (socal_req_entries[i]) { - que_desc[i].cq_address = - (uint32_t)socalp->request[i].skc_dcookie.dmac_address; - que_desc[i].cq_last_index = socal_req_entries[i] - 1; + que_desc[i].cq_address = + (uint32_t)socalp->request[i]. + skc_dcookie.dmac_address; + que_desc[i].cq_last_index = socal_req_entries[i] - 1; } else { - que_desc[i].cq_address = (uint32_t)0; - que_desc[i].cq_last_index = 0; + que_desc[i].cq_address = (uint32_t)0; + que_desc[i].cq_last_index = 0; } que_desc[i].cq_in = 0; que_desc[i].cq_out = 0; @@ -2329,28 +2339,29 @@ socal_init_cq_desc(socal_state_t *socalp) /* copy to XRAM */ socal_wcopy((uint_t *)que_desc, /* pointer to kernel copy */ - (uint_t *)socalp->xram_reqp, /* pointer to xram location */ - SOCAL_N_CQS * sizeof (soc_cq_t)); + (uint_t *)socalp->xram_reqp, /* pointer to xram location */ + SOCAL_N_CQS * sizeof (soc_cq_t)); /* * Do response queues */ for (i = 0; i < SOCAL_N_CQS; i++) { if (socal_rsp_entries[i]) { - que_desc[i].cq_last_index = socal_rsp_entries[i] - 1; - que_desc[i].cq_address = - (uint32_t)socalp->response[i].skc_dcookie.dmac_address; + que_desc[i].cq_last_index = socal_rsp_entries[i] - 1; + que_desc[i].cq_address = + (uint32_t)socalp->response[i]. + skc_dcookie.dmac_address; } else { - que_desc[i].cq_address = 0; - que_desc[i].cq_last_index = 0; + que_desc[i].cq_address = 0; + que_desc[i].cq_last_index = 0; } } /* copy to XRAM */ socal_wcopy((uint_t *)que_desc, /* pointer to kernel copy */ - (uint_t *)socalp->xram_rspp, /* pointer to xram location */ - SOCAL_N_CQS * sizeof (soc_cq_t)); + (uint_t *)socalp->xram_rspp, /* pointer to xram location */ + SOCAL_N_CQS * sizeof (soc_cq_t)); } static void @@ -2358,18 +2369,18 @@ socal_init_wwn(socal_state_t *socalp) { /* copy the node wwn to xram */ socal_wcopy((uint_t *)&socalp->socal_n_wwn, - (uint_t *)(socalp->socal_xrp + - SOCAL_XRAM_NODE_WWN), sizeof (la_wwn_t)); + (uint_t *)(socalp->socal_xrp + + SOCAL_XRAM_NODE_WWN), sizeof (la_wwn_t)); /* copy port a's wwn to xram */ socal_wcopy((uint_t *)&socalp->port_state[0].sp_p_wwn, - (uint_t *)(socalp->socal_xrp + SOCAL_XRAM_PORTA_WWN), - sizeof (la_wwn_t)); + (uint_t *)(socalp->socal_xrp + SOCAL_XRAM_PORTA_WWN), + sizeof (la_wwn_t)); /* copy port b's wwn to xram */ socal_wcopy((uint_t *)&socalp->port_state[1].sp_p_wwn, - (uint_t *)(socalp->socal_xrp + SOCAL_XRAM_PORTB_WWN), - sizeof (la_wwn_t)); + (uint_t *)(socalp->socal_xrp + SOCAL_XRAM_PORTB_WWN), + sizeof (la_wwn_t)); /* * need to avoid deadlock by assuring no other thread grabs both of @@ -2379,7 +2390,7 @@ socal_init_wwn(socal_state_t *socalp) mutex_enter(&socalp->port_state[1].sp_transport->fcal_mtx); socal_wcopy((uint_t *)(socalp->socal_xrp + SOCAL_XRAM_SERV_PARAMS), - (uint_t *)&socalp->socal_service_params, SOCAL_SVC_LENGTH); + (uint_t *)&socalp->socal_service_params, SOCAL_SVC_LENGTH); mutex_exit(&socalp->port_state[1].sp_transport->fcal_mtx); mutex_exit(&socalp->port_state[0].sp_transport->fcal_mtx); } @@ -2388,7 +2399,7 @@ static void socal_enable(socal_state_t *socalp) { DEBUGF(2, (CE_CONT, "socal%d: enable:\n", - ddi_get_instance(socalp->dip))); + ddi_get_instance(socalp->dip))); socalp->socal_rp->socal_cr.w = socalp->socal_cfg; socalp->socal_rp->socal_csr.w = SOCAL_CSR_SOCAL_TO_HOST; @@ -2415,15 +2426,15 @@ socal_establish_pool(socal_state_t *socalp, uint32_t poolid) int result; if ((prq = - (soc_pool_request_t *)kmem_zalloc(sizeof (soc_pool_request_t), - KM_NOSLEEP)) == NULL) + (soc_pool_request_t *)kmem_zalloc(sizeof (soc_pool_request_t), + KM_NOSLEEP)) == NULL) return (FCAL_FAILURE); /* * Fill in the request structure. */ prq->spr_soc_hdr.sh_request_token = 1; prq->spr_soc_hdr.sh_flags = SOC_FC_HEADER | SOC_UNSOLICITED | - SOC_NO_RESPONSE; + SOC_NO_RESPONSE; prq->spr_soc_hdr.sh_class = 0; prq->spr_soc_hdr.sh_seg_cnt = 1; prq->spr_soc_hdr.sh_byte_cnt = 0; @@ -2452,7 +2463,7 @@ socal_establish_pool(socal_state_t *socalp, uint32_t poolid) /* Enque the request. */ result = socal_cq_enque(socalp, NULL, (cqe_t *)prq, CQ_REQUEST_1, - FCAL_NOSLEEP, NULL, 0); + FCAL_NOSLEEP, NULL, 0); kmem_free((void *)prq, sizeof (soc_pool_request_t)); return (result); @@ -2479,8 +2490,8 @@ socal_add_pool_buffer(socal_state_t *socalp, uint32_t poolid) uint_t ccount; if ((drq = - (soc_data_request_t *)kmem_zalloc(sizeof (soc_data_request_t), - KM_NOSLEEP)) == NULL) + (soc_data_request_t *)kmem_zalloc(sizeof (soc_data_request_t), + KM_NOSLEEP)) == NULL) return (FCAL_FAILURE); /* Allocate DVMA resources for the buffer pool */ @@ -2517,7 +2528,7 @@ socal_add_pool_buffer(socal_state_t *socalp, uint32_t poolid) drq->sdr_soc_hdr.sh_byte_cnt = 0; drq->sdr_dataseg[0].fc_base = - (uint32_t)socalp->pool_dcookie.dmac_address; + (uint32_t)socalp->pool_dcookie.dmac_address; drq->sdr_dataseg[0].fc_count = SOCAL_POOL_SIZE; drq->sdr_dataseg[1].fc_base = 0; drq->sdr_dataseg[1].fc_count = 0; @@ -2537,13 +2548,13 @@ socal_add_pool_buffer(socal_state_t *socalp, uint32_t poolid) /* Transport the request. */ result = socal_cq_enque(socalp, NULL, (cqe_t *)drq, CQ_REQUEST_1, - FCAL_NOSLEEP, NULL, 0); + FCAL_NOSLEEP, NULL, 0); kmem_free((void *)drq, sizeof (soc_data_request_t)); return (result); fail: socal_disp_err(socalp, CE_WARN, "driver.4110", - "!Buffer pool DVMA alloc failed"); + "!Buffer pool DVMA alloc failed"); if (socalp->pool_dhandle) { if (bound) (void) ddi_dma_unbind_handle(socalp->pool_dhandle); @@ -2573,7 +2584,7 @@ socal_transport(fcal_packet_t *fcalpkt, fcal_sleep_t sleep, int req_q_no) port_statep = &socalp->port_state[port]; DEBUGF(4, (CE_CONT, "socal%d: transport: packet, sleep = %p, %d\n", - instance, fcalpkt, sleep)); + instance, fcalpkt, sleep)); fcalpkt->fcal_cmd_state = 0; fcalpkt->fcal_pkt_flags &= ~(FCFLAG_COMPLETE | FCFLAG_ABORTING); @@ -2630,8 +2641,8 @@ socal_cq_enque(socal_state_t *socalp, socal_port_t *port_statep, cqe_t *cqe, */ if (to_queue) { if ((to_queue->fcal_socal_request.sr_soc_hdr.sh_request_token = - SOCAL_ID_GET(to_queue, mtxheld ? FCAL_NOSLEEP : - sleep)) == NULL) { + SOCAL_ID_GET(to_queue, mtxheld ? FCAL_NOSLEEP : + sleep)) == NULL) { return (FCAL_TRANSPORT_QFULL); } } @@ -2648,22 +2659,23 @@ socal_cq_enque(socal_state_t *socalp, socal_port_t *port_statep, cqe_t *cqe, do { - if (kcq->skc_full) { + if (kcq->skc_full) { /* * If soc's queue full, then we wait for an interrupt * telling us we are not full. */ - if (to_queue) { + if (to_queue) { to_queue->fcal_pkt_next = NULL; if (!kcq->skc_overflowh) { - DEBUGF(2, (CE_CONT, - "socal%d: cq_enque: request que %d is full\n", - instance, rqix)); - kcq->skc_overflowh = to_queue; - socalp->socal_stats.qfulls++; + DEBUGF(2, (CE_CONT, + "socal%d: cq_enque: request " + "que %d is full\n", + instance, rqix)); + kcq->skc_overflowh = to_queue; + socalp->socal_stats.qfulls++; } else - kcq->skc_overflowt->fcal_pkt_next = to_queue; + kcq->skc_overflowt->fcal_pkt_next = to_queue; kcq->skc_overflowt = to_queue; mutex_enter(&socalp->k_imr_mtx); @@ -2674,29 +2686,29 @@ socal_cq_enque(socal_state_t *socalp, socal_port_t *port_statep, cqe_t *cqe, if (!mtxheld) mutex_exit(&kcq->skc_mtx); return (FCAL_TRANSPORT_SUCCESS); - } + } - if (!mtxheld) + if (!mtxheld) mutex_exit(&kcq->skc_mtx); - return (FCAL_TRANSPORT_QFULL); - } + return (FCAL_TRANSPORT_QFULL); + } - if (((kcq->skc_in + 1) & kcq->skc_last_index) - == (out = kcq->skc_out)) { + if (((kcq->skc_in + 1) & kcq->skc_last_index) + == (out = kcq->skc_out)) { /* * get SOC+'s copy of out to update our copy of out */ s_out = SOCAL_REQUESTQ_INDEX(rqix, socalp->socal_rp->socal_reqp.w); DEBUGF(2, (CE_CONT, - "socal%d: cq_enque: &XRAM cq_in: 0x%p s_out.out 0x%x\n", - instance, &kcq->skc_xram_cqdesc->cq_in, s_out)); + "socal%d: cq_enque: &XRAM cq_in: 0x%p s_out.out 0x%x\n", + instance, &kcq->skc_xram_cqdesc->cq_in, s_out)); kcq->skc_out = out = s_out; /* if soc+'s que still full set flag */ kcq->skc_full = ((((kcq->skc_in + 1) & - kcq->skc_last_index) == out)) ? SOCAL_SKC_FULL : 0; - } + kcq->skc_last_index) == out)) ? SOCAL_SKC_FULL : 0; + } } while (kcq->skc_full); @@ -2797,15 +2809,15 @@ socal_doit(fcal_packet_t *fcalpkt, socal_port_t *port_statep, int polled, port_statep->sp_status |= flag; if ((status = socal_transport(fcalpkt, FCAL_NOSLEEP, CQ_REQUEST_0)) == FCAL_TRANSPORT_SUCCESS) { - lb = ddi_get_lbolt(); + lb = ddi_get_lbolt(); while (!(fcalpkt->fcal_cmd_state & FCAL_CMD_COMPLETE)) { if ((retval = cv_timedwait(&port_statep->sp_cv, &port_statep->sp_mtx, lb+drv_usectohz(timo))) == -1) { - status = FCAL_TRANSPORT_TIMEOUT; - break; + status = FCAL_TRANSPORT_TIMEOUT; + break; + } } - } } port_statep->sp_status &= ~flag; mutex_exit(&port_statep->sp_mtx); @@ -2857,7 +2869,7 @@ socal_doit(fcal_packet_t *fcalpkt, socal_port_t *port_statep, int polled, if (flag == PORT_LIP_PENDING || flag == PORT_LILP_PENDING) { if (socal_core && - (socal_core & SOCAL_FAILED_LIP)) { + (socal_core & SOCAL_FAILED_LIP)) { socal_core = 0; socal_take_core(socalp); } @@ -2869,7 +2881,8 @@ socal_doit(fcal_packet_t *fcalpkt, socal_port_t *port_statep, int polled, } else (void) socal_force_lip(port_statep->sp_board, - port_statep->sp_port, polled, FCAL_FORCE_LIP); + port_statep->sp_port, polled, + FCAL_FORCE_LIP); retval = FCAL_TIMEOUT; break; case FCAL_TRANSPORT_FAILURE: @@ -2900,7 +2913,7 @@ socal_lilp_map(void *ssp, uint_t port, uint32_t bufid, uint_t polled) sdr = (soc_data_request_t *)&fcalpkt->fcal_socal_request; if (port) - sdr->sdr_soc_hdr.sh_flags = SOC_PORT_B; + sdr->sdr_soc_hdr.sh_flags = SOC_PORT_B; sdr->sdr_soc_hdr.sh_seg_cnt = 1; sdr->sdr_soc_hdr.sh_byte_cnt = 132; sdr->sdr_dataseg[0].fc_base = bufid; @@ -2925,11 +2938,11 @@ socal_force_lip(void *ssp, uint_t port, uint_t polled, uint_t lip_req) if (lip_req == FCAL_NO_LIP) { mutex_enter(&port_statep->sp_mtx); if ((port_statep->sp_status & PORT_ONLINE_LOOP) && - (port_statep->sp_unsol_cb->statec_cb != NULL)) { + (port_statep->sp_unsol_cb->statec_cb != NULL)) { mutex_exit(&port_statep->sp_mtx); (*port_statep->sp_unsol_cb->statec_cb) - (port_statep->sp_unsol_cb->arg, - FCAL_STATUS_LOOP_ONLINE); + (port_statep->sp_unsol_cb->arg, + FCAL_STATUS_LOOP_ONLINE); return (FCAL_SUCCESS); } else @@ -2943,7 +2956,7 @@ socal_force_lip(void *ssp, uint_t port, uint_t polled, uint_t lip_req) scr = (soc_cmdonly_request_t *)&fcalpkt->fcal_socal_request; if (port) - scr->scr_soc_hdr.sh_flags = SOC_PORT_B; + scr->scr_soc_hdr.sh_flags = SOC_PORT_B; scr->scr_cqhdr.cq_hdr_count = 1; scr->scr_cqhdr.cq_hdr_type = CQ_TYPE_REQUEST_LIP; @@ -2978,7 +2991,7 @@ socal_abort_cmd(void *ssp, uint_t port, fcal_packet_t *fcalpkt, uint_t polled) mutex_exit(&kcq->skc_mtx); socalp->socal_stats.pstats[port].abts_ok++; SOCAL_ID_FREE(fcalpkt->fcal_socal_request. - sr_soc_hdr.sh_request_token); + sr_soc_hdr.sh_request_token); return (FCAL_ABORTED); } else { fpkt = fcalpkt2; @@ -3040,7 +3053,7 @@ socal_bypass_dev(void *ssp, uint_t port, uint_t dest) scr = (soc_cmdonly_request_t *)&fcalpkt->fcal_socal_request; if (port) - scr->scr_soc_hdr.sh_flags = SOC_PORT_B; + scr->scr_soc_hdr.sh_flags = SOC_PORT_B; scr->scr_soc_hdr.sh_byte_cnt = dest; scr->scr_cqhdr.cq_hdr_count = 1; scr->scr_cqhdr.cq_hdr_type = CQ_TYPE_BYPASS_DEV; @@ -3179,8 +3192,8 @@ socal_intr(caddr_t arg) cause = (int)SOCAL_INTR_CAUSE(socalp, csr); DEBUGF(2, (CE_CONT, - "socal%d: intr: csr: 0x%x cause: 0x%x\n", - instance, csr, cause)); + "socal%d: intr: csr: 0x%x cause: 0x%x\n", + instance, csr, cause)); if (!cause) { socalp->socal_on_intr = 0; @@ -3197,15 +3210,15 @@ socal_intr(caddr_t arg) * */ - if (cause & SOCAL_CSR_RSP_QUE_1) { - socal_intr_unsolicited(socalp, 1); + if (cause & SOCAL_CSR_RSP_QUE_1) { + socal_intr_unsolicited(socalp, 1); DEBUGF(4, (CE_CONT, "socal%d intr: did unsolicited\n", instance)); - } + } - if (cause & SOCAL_CSR_RSP_QUE_0) { - socal_intr_solicited(socalp, 0); + if (cause & SOCAL_CSR_RSP_QUE_0) { + socal_intr_solicited(socalp, 0); DEBUGF(4, (CE_CONT, "socal%d intr: did solicited\n", instance)); - } + } /* * for use with token-only response queues in the future @@ -3221,18 +3234,18 @@ socal_intr(caddr_t arg) * queue is full and we are waiting so we can enque * another command. */ - if ((request = (cause & SOCAL_CSR_HOST_TO_SOCAL)) != 0) { + if ((request = (cause & SOCAL_CSR_HOST_TO_SOCAL)) != 0) { socalp->socal_stats.reqq_intrs++; for (i = SOCAL_CSR_1ST_H_TO_S, j = 0; j < SOCAL_N_CQS; - j++, i <<= 1) { - if (request & i) { + j++, i <<= 1) { + if (request & i) { socal_kcq_t *kcq = &socalp->request[j]; if (kcq->skc_full) { - mutex_enter(&kcq->skc_mtx); - full = kcq->skc_full; - kcq->skc_full = 0; - while ((fpkt = kcq->skc_overflowh) != NULL) { + mutex_enter(&kcq->skc_mtx); + full = kcq->skc_full; + kcq->skc_full = 0; + while ((fpkt = kcq->skc_overflowh) != NULL) { nfpkt = fpkt->fcal_pkt_next; fpkt->fcal_pkt_next = NULL; kcq->skc_overflowh = nfpkt; @@ -3241,12 +3254,12 @@ socal_intr(caddr_t arg) (cqe_t *)&fpkt->fcal_socal_request, j, FCAL_NOSLEEP, NULL, 1) != FCAL_TRANSPORT_SUCCESS) { - break; + break; + } } - } - if (!kcq->skc_overflowh) { + if (!kcq->skc_overflowh) { if (full & SOCAL_SKC_SLEEP) - cv_broadcast(&kcq->skc_cv); + cv_broadcast(&kcq->skc_cv); /* Disable this queue's intrs */ DEBUGF(2, (CE_CONT, @@ -3256,14 +3269,14 @@ socal_intr(caddr_t arg) socalp->socal_rp->socal_imr = (socalp->socal_k_imr &= ~i); mutex_exit(&socalp->k_imr_mtx); - } - mutex_exit(&kcq->skc_mtx); + } + mutex_exit(&kcq->skc_mtx); } - } + } + } } - } - csr = socalreg->socal_csr.w; - cause = (int)SOCAL_INTR_CAUSE(socalp, csr); + csr = socalreg->socal_csr.w; + cause = (int)SOCAL_INTR_CAUSE(socalp, csr); DEBUGF(4, (CE_CONT, "socal%d intr: did request queues\n", instance)); } @@ -3325,7 +3338,7 @@ socal_intr_solicited(socal_state_t *socalp, uint32_t srq) while (kcqv->skc_out != index_in) { /* Find out where the newest entry lives in the queue */ (void) ddi_dma_sync(kcq->skc_dhandle, 0, 0, - DDI_DMA_SYNC_FORKERNEL); + DDI_DMA_SYNC_FORKERNEL); srp = (soc_response_t *)cqe; port = srp->sr_soc_hdr.sh_flags & SOC_PORT_B; @@ -3350,15 +3363,15 @@ socal_intr_solicited(socal_state_t *socalp, uint32_t srq) kcq->skc_saved_out = kcqv->skc_out; kcq->skc_saved_seqno = kcqv->skc_seqno; kcq->deferred_intr_timeoutid = timeout( - socal_deferred_intr, (caddr_t)kcq, - drv_usectohz(10000)); + socal_deferred_intr, (caddr_t)kcq, + drv_usectohz(10000)); mutex_exit(&kcq->skc_mtx); return; } } fcalpkt = (fcal_packet_t *) - SOCAL_ID_LOOKUP(shp->sh_request_token); + SOCAL_ID_LOOKUP(shp->sh_request_token); if ((socal_core & SOCAL_TAKE_CORE) && ddi_peek8(socalp->dip, (char *)fcalpkt, &val) != DDI_SUCCESS) { @@ -3368,13 +3381,13 @@ socal_intr_solicited(socal_state_t *socalp, uint32_t srq) } if ((fcalpkt == (fcal_packet_t *)NULL) || - (fcalpkt->fcal_magic != FCALP_MAGIC)) { - (void) sprintf(buf, "!invalid FC packet; \n\ - in, out, seqno = 0x%x, 0x%x, 0x%x\n", - kcqv->skc_in, kcqv->skc_out, kcqv->skc_seqno); - socal_disp_err(socalp, CE_WARN, "link.4060", buf); - DEBUGF(4, (CE_CONT, - "\tsoc CR: 0x%x SAE: 0x%x CSR: 0x%x IMR: 0x%x\n", + (fcalpkt->fcal_magic != FCALP_MAGIC)) { + (void) sprintf(buf, "!invalid FC packet; \n\ + in, out, seqno = 0x%x, 0x%x, 0x%x\n", + kcqv->skc_in, kcqv->skc_out, kcqv->skc_seqno); + socal_disp_err(socalp, CE_WARN, "link.4060", buf); + DEBUGF(4, (CE_CONT, + "\tsoc CR: 0x%x SAE: 0x%x CSR: 0x%x IMR: 0x%x\n", socalreg->socal_cr.w, socalreg->socal_sae.w, socalreg->socal_csr.w, @@ -3382,16 +3395,16 @@ socal_intr_solicited(socal_state_t *socalp, uint32_t srq) /* * Update response queue ptrs and soc registers. */ - kcqv->skc_out++; - if ((kcqv->skc_out & kcq->skc_last_index) == 0) { - kcqv->skc_out = 0; - kcqv->skc_seqno++; - } + kcqv->skc_out++; + if ((kcqv->skc_out & kcq->skc_last_index) == 0) { + kcqv->skc_out = 0; + kcqv->skc_seqno++; + } } else { DEBUGF(2, (CE_CONT, "packet 0x%p complete\n", - fcalpkt)); + fcalpkt)); status = srp->sr_soc_status; fcalpkt->fcal_pkt_status = status; DEBUGF(2, (CE_CONT, "SOC status: 0x%x\n", status)); @@ -3401,7 +3414,7 @@ socal_intr_solicited(socal_state_t *socalp, uint32_t srq) */ ASSERT((fcalpkt->fcal_cmd_state & FCAL_CMD_COMPLETE) - == 0); + == 0); mutex_enter(&socalp->abort_mtx); fcalpkt->fcal_pkt_flags |= FCFLAG_COMPLETE; mutex_exit(&socalp->abort_mtx); @@ -3425,16 +3438,17 @@ socal_intr_solicited(socal_state_t *socalp, uint32_t srq) i = srp->sr_soc_hdr.sh_flags & SOC_PORT_B ? 1 : 0; if ((status != FCAL_STATUS_OK) && - (status <= FCAL_STATUS_MAX_STATUS)) { + (status <= FCAL_STATUS_MAX_STATUS)) { socalp->socal_stats.pstats[i]. - resp_status[status]++; + resp_status[status]++; } else { socalp->socal_stats.pstats[i]. - resp_status[FCAL_STATUS_ERROR]++; + resp_status[FCAL_STATUS_ERROR]++; } } else if (status == FCAL_STATUS_OK) { - fcalpkt->fcal_socal_request.sr_soc_hdr.sh_byte_cnt = - shp->sh_byte_cnt; + fcalpkt->fcal_socal_request. + sr_soc_hdr.sh_byte_cnt = + shp->sh_byte_cnt; } fcalpkt->fcal_diag_status = (uint32_t)srp->sr_dataseg.fc_base; @@ -3451,7 +3465,7 @@ socal_intr_solicited(socal_state_t *socalp, uint32_t srq) /* For incmplt DMA offline loop by loopback */ if (fcalpkt->fcal_pkt_status == - FCAL_STATUS_INCOMPLETE_DMA_ERR) { + FCAL_STATUS_INCOMPLETE_DMA_ERR) { socal_port_t *port_statep; uint_t r; @@ -3547,21 +3561,19 @@ socal_intr_solicited(socal_state_t *socalp, uint32_t srq) * all entries that are available. */ - socalreg->socal_csr.w = - ((kcqv->skc_out << 24) | - (SOCAL_CSR_SOCAL_TO_HOST & ~SOCAL_CSR_RSP_QUE_0)); + socalreg->socal_csr.w = ((kcqv->skc_out << 24) | + (SOCAL_CSR_SOCAL_TO_HOST & ~SOCAL_CSR_RSP_QUE_0)); /* Make sure the csr write has completed */ - i = socalreg->socal_csr.w; - DEBUGF(9, (CE_CONT, "csr.w = %x\n", i)); + i = socalreg->socal_csr.w; + DEBUGF(9, (CE_CONT, "csr.w = %x\n", i)); /* * Update our idea of where the host adapter has placed * the most recent entry in the response queue and resync * the response queue */ - index_in = - SOCAL_RESPONSEQ_INDEX(srq, socalreg->socal_rspp.w); + index_in = SOCAL_RESPONSEQ_INDEX(srq, socalreg->socal_rspp.w); kcqv->skc_in = index_in; } @@ -3627,23 +3639,23 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) while (kcqv->skc_out != index_in) { (void) ddi_dma_sync(kcq->skc_dhandle, 0, 0, - DDI_DMA_SYNC_FORKERNEL); + DDI_DMA_SYNC_FORKERNEL); /* Check for continuation entries */ if ((hdr_count = cqe->cqe_hdr.cq_hdr_count) != 1) { - t_seqno = kcqv->skc_seqno; - t_index = kcqv->skc_out + hdr_count; + t_seqno = kcqv->skc_seqno; + t_index = kcqv->skc_out + hdr_count; - i = index_in; - if (kcqv->skc_out > index_in) + i = index_in; + if (kcqv->skc_out > index_in) i += kcq->skc_last_index + 1; /* * If we think the continuation entries haven't yet * arrived, try once more before giving up */ - if (i < t_index) { + if (i < t_index) { socalreg->socal_csr.w = ((kcqv->skc_out << 24) | @@ -3657,25 +3669,26 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) * the most recent entry in the response queue */ i = index_in = SOCAL_RESPONSEQ_INDEX(urq, - socalreg->socal_rspp.w); + socalreg->socal_rspp.w); if (kcqv->skc_out > index_in) - i += kcq->skc_last_index + 1; + i += kcq->skc_last_index + 1; /* * Exit if the continuation entries haven't yet * arrived */ if (i < t_index) - break; - } + break; + } - if (t_index > kcq->skc_last_index) { + if (t_index > kcq->skc_last_index) { t_seqno++; t_index &= kcq->skc_last_index; - } + } - cqe_cont = (volatile cqe_t *) - &(kcq->skc_cq[t_index ? t_index - 1 : kcq->skc_last_index]); + cqe_cont = (volatile cqe_t *) + &(kcq->skc_cq[t_index ? t_index - 1 : + kcq->skc_last_index]); /* A cq_hdr_count > 2 is illegal; throw away the response */ @@ -3684,16 +3697,16 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) * XXX - should probably throw out as many entries as the * hdr_cout tells us there are */ - if (hdr_count != 2) { + if (hdr_count != 2) { socal_disp_err(socalp, CE_WARN, "driver.4030", "!too many continuation entries"); DEBUGF(4, (CE_CONT, - "socal%d: soc+ unsolicited entry count = %d\n", - instance, cqe->cqe_hdr.cq_hdr_count)); + "socal%d: soc+ unsolicited entry count = %d\n", + instance, cqe->cqe_hdr.cq_hdr_count)); if ((++t_index & kcq->skc_last_index) == 0) { - t_index = 0; - t_seqno++; + t_index = 0; + t_seqno++; } kcqv->skc_out = t_index; kcqv->skc_seqno = t_seqno; @@ -3701,7 +3714,7 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) cqe = &(kcq->skc_cq[kcqv->skc_out]); cqe_cont = NULL; continue; - } + } } /* @@ -3714,19 +3727,19 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) } if (cqe_cont != NULL) { - kcqv->skc_out++; - if ((kcqv->skc_out & kcq->skc_last_index) == 0) { - kcqv->skc_out = 0; - kcqv->skc_seqno++; - } + kcqv->skc_out++; + if ((kcqv->skc_out & kcq->skc_last_index) == 0) { + kcqv->skc_out = 0; + kcqv->skc_seqno++; + } } if (index_in == kcqv->skc_out) { - socalreg->socal_csr.w = ((kcqv->skc_out << 24) | - (SOCAL_CSR_SOCAL_TO_HOST & ~SOCAL_CSR_RSP_QUE_1)); + socalreg->socal_csr.w = ((kcqv->skc_out << 24) | + (SOCAL_CSR_SOCAL_TO_HOST & ~SOCAL_CSR_RSP_QUE_1)); /* Make sure the csr write has completed */ - i = socalreg->socal_csr.w; + i = socalreg->socal_csr.w; } srp = (soc_response_t *)cqe; @@ -3740,10 +3753,10 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) switch (flags & ~SOC_PORT_B) { case SOC_UNSOLICITED | SOC_FC_HEADER: - srp = (soc_response_t *)cqe; + srp = (soc_response_t *)cqe; - switch (srp->sr_fc_frame_hdr.r_ctl & R_CTL_ROUTING) { - case R_CTL_EXTENDED_SVC: + switch (srp->sr_fc_frame_hdr.r_ctl & R_CTL_ROUTING) { + case R_CTL_EXTENDED_SVC: /* * Extended Link Services frame received */ @@ -3753,31 +3766,32 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) /* do callbacks to any interested ULPs */ mutex_enter(&port_statep->sp_mtx); for (cblist = port_statep->sp_unsol_cb; cblist; - cblist = cblist->next) { + cblist = cblist->next) { if (cblist->els_cb) { - mutex_exit(&port_statep->sp_mtx); - mutex_exit(&kcq->skc_mtx); - cblist->els_cb(cblist->arg, (cqe_t *)cqe, - (caddr_t)cqe_cont); - mutex_enter(&kcq->skc_mtx); - mutex_enter(&port_statep->sp_mtx); + mutex_exit(&port_statep->sp_mtx); + mutex_exit(&kcq->skc_mtx); + cblist->els_cb(cblist->arg, + (cqe_t *)cqe, + (caddr_t)cqe_cont); + mutex_enter(&kcq->skc_mtx); + mutex_enter(&port_statep->sp_mtx); } } mutex_exit(&port_statep->sp_mtx); break; - case R_CTL_BASIC_SVC: + case R_CTL_BASIC_SVC: (void) sprintf(buf, "!unsupported Link Service command: 0x%x", - srp->sr_fc_frame_hdr.type); + srp->sr_fc_frame_hdr.type); socal_disp_err(socalp, CE_WARN, "link.4020", buf); break; - case R_CTL_DEVICE_DATA: + case R_CTL_DEVICE_DATA: switch (srp->sr_fc_frame_hdr.type) { default: - mutex_enter(&port_statep->sp_mtx); - status = 1; - for (cblist = port_statep->sp_unsol_cb; cblist; - cblist = cblist->next) { + mutex_enter(&port_statep->sp_mtx); + status = 1; + for (cblist = port_statep->sp_unsol_cb; cblist; + cblist = cblist->next) { if (cblist->data_cb && (cblist->type == srp->sr_fc_frame_hdr.type)) { @@ -3789,25 +3803,27 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) mutex_enter(&port_statep->sp_mtx); status = 0; } - } - mutex_exit(&port_statep->sp_mtx); + } + mutex_exit(&port_statep->sp_mtx); - if (status == 0) + if (status == 0) break; - (void) sprintf(buf, "!unknown FC-4 command: 0x%x", - srp->sr_fc_frame_hdr.type); - socal_disp_err(socalp, CE_WARN, "link.4030", buf); - break; + (void) sprintf(buf, + "!unknown FC-4 command: 0x%x", + srp->sr_fc_frame_hdr.type); + socal_disp_err(socalp, CE_WARN, + "link.4030", buf); + break; } break; - default: + default: (void) sprintf(buf, "!unsupported FC frame R_CTL: 0x%x", srp->sr_fc_frame_hdr.r_ctl); socal_disp_err(socalp, CE_WARN, "link.4040", buf); break; - } - break; + } + break; case SOC_STATUS: { @@ -3823,23 +3839,23 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) (void) sprintf(buf, "!port %d: Fibre Channel is ONLINE\n", port); socal_disp_err(socalp, CE_CONT, "link.6010", - buf); + buf); mutex_enter(&port_statep->sp_mtx); port_statep->sp_status &= ~PORT_STATUS_MASK; port_statep->sp_status |= PORT_ONLINE; mutex_exit(&port_statep->sp_mtx); socalp->socal_stats.pstats[port].onlines++; DEBUGF(4, (CE_CONT, - "socal%d intr_unsol: ONLINE intr\n", - instance)); + "socal%d intr_unsol: ONLINE intr\n", + instance)); break; case FCAL_STATUS_LOOP_ONLINE: (void) sprintf(buf, "!port %d: Fibre Channel Loop is ONLINE\n", - port); + port); socal_disp_err(socalp, CE_CONT, "link.6010", - buf); + buf); mutex_enter(&port_statep->sp_mtx); port_statep->sp_status &= ~PORT_STATUS_MASK; port_statep->sp_status |= PORT_ONLINE_LOOP; @@ -3860,7 +3876,7 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) (void) sprintf(buf, "!port %d: Fibre Channel is OFFLINE\n", port); socal_disp_err(socalp, CE_CONT, "link.5010", - buf); + buf); mutex_enter(&port_statep->sp_mtx); port_statep->sp_status &= ~PORT_STATUS_MASK; @@ -3875,18 +3891,19 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) break; default: (void) sprintf(buf, "!unknown status: 0x%x\n", - status); + status); socal_disp_err(socalp, CE_WARN, "link.3020", - buf); + buf); } mutex_exit(&kcq->skc_mtx); mutex_enter(&port_statep->sp_mtx); for (cblist = port_statep->sp_unsol_cb; cblist; - cblist = cblist->next) { + cblist = cblist->next) { if (cblist->statec_cb) { - mutex_exit(&port_statep->sp_mtx); - (*cblist->statec_cb)(cblist->arg, status); - mutex_enter(&port_statep->sp_mtx); + mutex_exit(&port_statep->sp_mtx); + (*cblist->statec_cb)(cblist->arg, + status); + mutex_enter(&port_statep->sp_mtx); } } mutex_exit(&port_statep->sp_mtx); @@ -3901,14 +3918,14 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) } default: (void) sprintf(buf, "!unexpected state: flags: 0x%x\n", - flags); + flags); socal_disp_err(socalp, CE_WARN, "link.4050", buf); DEBUGF(4, (CE_CONT, - "\tsoc CR: 0x%x SAE: 0x%x CSR: 0x%x IMR: 0x%x\n", - socalp->socal_rp->socal_cr.w, - socalp->socal_rp->socal_sae.w, - socalp->socal_rp->socal_csr.w, - socalp->socal_rp->socal_imr)); + "\tsoc CR: 0x%x SAE: 0x%x CSR: 0x%x IMR: 0x%x\n", + socalp->socal_rp->socal_cr.w, + socalp->socal_rp->socal_sae.w, + socalp->socal_rp->socal_csr.w, + socalp->socal_rp->socal_imr)); } @@ -3944,19 +3961,19 @@ socal_intr_unsolicited(socal_state_t *socalp, uint32_t urq) */ if (index_in == kcqv->skc_out) { - socalreg->socal_csr.w = - ((kcqv->skc_out << 24) | - (SOCAL_CSR_SOCAL_TO_HOST & ~SOCAL_CSR_RSP_QUE_1)); + socalreg->socal_csr.w = + ((kcqv->skc_out << 24) | + (SOCAL_CSR_SOCAL_TO_HOST & ~SOCAL_CSR_RSP_QUE_1)); /* Make sure the csr write has completed */ - i = socalreg->socal_csr.w; + i = socalreg->socal_csr.w; /* * Update our idea of where the host adapter has placed * the most recent entry in the response queue */ - index_in = - SOCAL_RESPONSEQ_INDEX(urq, socalreg->socal_rspp.w); + index_in = + SOCAL_RESPONSEQ_INDEX(urq, socalreg->socal_rspp.w); } socalp->socal_stats.pstats[port].unsol_resps++; @@ -3987,9 +4004,9 @@ socal_us_els(socal_state_t *socalp, cqe_t *cqe, caddr_t payload) * extended link services */ if ((els == NULL) || ((i = srp->sr_soc_hdr.sh_byte_cnt) == 0)) { - socal_disp_err(socalp, CE_WARN, "link.4010", + socal_disp_err(socalp, CE_WARN, "link.4010", "!incomplete continuation entry"); - return; + return; } /* Quietly impose a maximum byte count */ @@ -4001,7 +4018,7 @@ socal_us_els(socal_state_t *socalp, cqe_t *cqe, caddr_t payload) * Decode the LS_Command code */ switch (els->els_cmd.c.ls_command) { - case LA_ELS_DISPLAY: + case LA_ELS_DISPLAY: els->els_data[i] = '\0'; /* terminate the string */ for (bp = (char *)&(els->els_data[0]); *bp; bp++) { /* squash newlines */ @@ -4011,9 +4028,9 @@ socal_us_els(socal_state_t *socalp, cqe_t *cqe, caddr_t payload) socal_disp_err(socalp, CE_CONT, "link.1010", buf); break; - default: + default: DEBUGF(3, (CE_CONT, "!unknown LS_Command, %x\n", - els->els_cmd.i)); + els->els_cmd.i)); break; } @@ -4147,9 +4164,9 @@ socal_abort_done(fcal_packet_t *fcalpkt) uint32_t port; socal_state_t *socalp = (socal_state_t *)fcalpkt->fcal_pkt_cookie; soc_header_t *shp = - (soc_header_t *)&fcalpkt->fcal_socal_request.sr_soc_hdr; + (soc_header_t *)&fcalpkt->fcal_socal_request.sr_soc_hdr; fcal_packet_t *target = (fcal_packet_t *) - SOCAL_ID_LOOKUP(shp->sh_request_token); + SOCAL_ID_LOOKUP(shp->sh_request_token); mutex_enter(&socalp->abort_mtx); ASSERT(target->fcal_pkt_flags & FCFLAG_ABORTING); @@ -4201,9 +4218,9 @@ socal_diag_request(socal_state_t *socalp, uint32_t port, uint_t *diagcode, /* Grabbing the state mutex is totally unnecessary.... */ if (!(port_statep->sp_status & PORT_DISABLED)) { if (socal_getmap(socalp, port, (caddr_t)&map, 0, FKIOCTL) - != -1) { + != -1) { if (map.lilp_length != 1 && ((port_statep->sp_status & - PORT_ONLINE_LOOP) && cmd != SOC_DIAG_REM_LOOP)) + PORT_ONLINE_LOOP) && cmd != SOC_DIAG_REM_LOOP)) return (FCAL_TRANSPORT_UNAVAIL); } } @@ -4212,7 +4229,7 @@ socal_diag_request(socal_state_t *socalp, uint32_t port, uint_t *diagcode, return (FCAL_ALLOC_FAILED); sdr = (soc_diag_request_t *)&fcalpkt->fcal_socal_request; if (port) - sdr->sdr_soc_hdr.sh_flags = SOC_PORT_B; + sdr->sdr_soc_hdr.sh_flags = SOC_PORT_B; sdr->sdr_diag_cmd = cmd; sdr->sdr_cqhdr.cq_hdr_count = 1; sdr->sdr_cqhdr.cq_hdr_type = CQ_TYPE_DIAGNOSTIC; @@ -4236,7 +4253,7 @@ socal_force_offline(void *ssp, uint_t port, uint_t polled) scr = (soc_cmdonly_request_t *)&fcalpkt->fcal_socal_request; if (port) - scr->scr_soc_hdr.sh_flags = SOC_PORT_B; + scr->scr_soc_hdr.sh_flags = SOC_PORT_B; scr->scr_cqhdr.cq_hdr_count = 1; scr->scr_cqhdr.cq_hdr_type = CQ_TYPE_OFFLINE; fcalpkt->fcal_pkt_cookie = (void *)socalp; @@ -4280,7 +4297,7 @@ socal_issue_adisc(socal_state_t *socalp, uint32_t port, uint32_t dest, SOCAL_ADISC_TIMEOUT, PORT_ADISC_PENDING, NULL); if (retval == FCAL_SUCCESS) { (void) ddi_dma_sync(privp->rsp_handle, 0, 0, - DDI_DMA_SYNC_FORKERNEL); + DDI_DMA_SYNC_FORKERNEL); bcopy(privp->rsp, (caddr_t)payload, sizeof (la_els_adisc_t)); } privp->fapktp = NULL; @@ -4300,7 +4317,7 @@ socal_issue_lbf(socal_state_t *socalp, uint32_t port, port_statep = &socalp->port_state[port]; if ((fcalpkt = socal_lbf_alloc(socalp, port, length, length, - (caddr_t *)&privp, polled)) == (fcal_packet_t *)NULL) + (caddr_t *)&privp, polled)) == (fcal_packet_t *)NULL) return (FCAL_ALLOC_FAILED); privp = (socal_priv_cmd_t *)fcalpkt->fcal_pkt_private; @@ -4312,7 +4329,7 @@ socal_issue_lbf(socal_state_t *socalp, uint32_t port, if (retval == FCAL_SUCCESS) { (void) ddi_dma_sync(privp->rsp_handle, 0, 0, - DDI_DMA_SYNC_FORKERNEL); + DDI_DMA_SYNC_FORKERNEL); bcopy(privp->rsp, (caddr_t)payload, length); } privp->fapktp = NULL; @@ -4376,7 +4393,7 @@ socal_issue_rls(socal_state_t *socalp, uint32_t port, uint32_t dest, SOCAL_RLS_TIMEOUT, PORT_RLS_PENDING, NULL); if (retval == FCAL_SUCCESS) { (void) ddi_dma_sync(privp->rsp_handle, 0, 0, - DDI_DMA_SYNC_FORKERNEL); + DDI_DMA_SYNC_FORKERNEL); bcopy(privp->rsp, (caddr_t)payload, sizeof (la_els_rls_reply_t)); } @@ -4425,13 +4442,13 @@ socal_els_alloc(socal_state_t *socalp, uint32_t port, uint32_t dest, goto fail; if (ddi_dma_alloc_handle(socalp->dip, &socal_dma_attr, - DDI_DMA_DONTWAIT, NULL, &chandle) != DDI_SUCCESS) + DDI_DMA_DONTWAIT, NULL, &chandle) != DDI_SUCCESS) goto fail; privp->cmd_handle = chandle; if (ddi_dma_mem_alloc(chandle, cmd_size, &socal_acc_attr, - DDI_DMA_CONSISTENT, DDI_DMA_DONTWAIT, NULL, - (caddr_t *)&cmd, &real_len, &cacchandle) != DDI_SUCCESS) + DDI_DMA_CONSISTENT, DDI_DMA_DONTWAIT, NULL, + (caddr_t *)&cmd, &real_len, &cacchandle) != DDI_SUCCESS) goto fail; privp->cmd = cmd; privp->cmd_acchandle = cacchandle; @@ -4440,56 +4457,56 @@ socal_els_alloc(socal_state_t *socalp, uint32_t port, uint32_t dest, goto fail; if (ddi_dma_addr_bind_handle(chandle, (struct as *)NULL, - (caddr_t)cmd, cmd_size, - DDI_DMA_WRITE | DDI_DMA_CONSISTENT, - DDI_DMA_DONTWAIT, NULL, &ccookie, &ccount) - != DDI_DMA_MAPPED) + (caddr_t)cmd, cmd_size, + DDI_DMA_WRITE | DDI_DMA_CONSISTENT, + DDI_DMA_DONTWAIT, NULL, &ccookie, &ccount) + != DDI_DMA_MAPPED) goto fail; cmd_bound = 1; if (ccount != 1) goto fail; if (rsp_size) { - if (ddi_dma_alloc_handle(socalp->dip, &socal_dma_attr, - DDI_DMA_DONTWAIT, NULL, &rhandle) != DDI_SUCCESS) + if (ddi_dma_alloc_handle(socalp->dip, &socal_dma_attr, + DDI_DMA_DONTWAIT, NULL, &rhandle) != DDI_SUCCESS) goto fail; - privp->rsp_handle = rhandle; - if (ddi_dma_mem_alloc(rhandle, rsp_size, &socal_acc_attr, - DDI_DMA_CONSISTENT, DDI_DMA_DONTWAIT, NULL, - &rsp, &real_len, &racchandle) != DDI_SUCCESS) - goto fail; - privp->rsp = rsp; - privp->rsp_acchandle = racchandle; - if (real_len < rsp_size) + privp->rsp_handle = rhandle; + if (ddi_dma_mem_alloc(rhandle, rsp_size, &socal_acc_attr, + DDI_DMA_CONSISTENT, DDI_DMA_DONTWAIT, NULL, + &rsp, &real_len, &racchandle) != DDI_SUCCESS) + goto fail; + privp->rsp = rsp; + privp->rsp_acchandle = racchandle; + if (real_len < rsp_size) goto fail; - if (ddi_dma_addr_bind_handle(rhandle, (struct as *)NULL, - rsp, rsp_size, - DDI_DMA_READ | DDI_DMA_CONSISTENT, - DDI_DMA_DONTWAIT, NULL, &rcookie, &ccount) - != DDI_DMA_MAPPED) + if (ddi_dma_addr_bind_handle(rhandle, (struct as *)NULL, + rsp, rsp_size, + DDI_DMA_READ | DDI_DMA_CONSISTENT, + DDI_DMA_DONTWAIT, NULL, &rcookie, &ccount) + != DDI_DMA_MAPPED) goto fail; - rsp_bound = 1; - if (ccount != 1) + rsp_bound = 1; + if (ccount != 1) goto fail; } srp = (soc_request_t *)&fcalpkt->fcal_socal_request; srp->sr_soc_hdr.sh_flags = SOC_FC_HEADER; if (port) - srp->sr_soc_hdr.sh_flags |= SOC_PORT_B; + srp->sr_soc_hdr.sh_flags |= SOC_PORT_B; srp->sr_soc_hdr.sh_class = 3; srp->sr_soc_hdr.sh_byte_cnt = cmd_size; srp->sr_dataseg[0].fc_base = (uint32_t)ccookie.dmac_address; srp->sr_dataseg[0].fc_count = cmd_size; if (rsp_size == 0) { - srp->sr_soc_hdr.sh_seg_cnt = 1; + srp->sr_soc_hdr.sh_seg_cnt = 1; } else { - srp->sr_soc_hdr.sh_seg_cnt = 2; - srp->sr_dataseg[1].fc_base = (uint32_t)rcookie.dmac_address; - srp->sr_dataseg[1].fc_count = rsp_size; + srp->sr_soc_hdr.sh_seg_cnt = 2; + srp->sr_dataseg[1].fc_base = (uint32_t)rcookie.dmac_address; + srp->sr_dataseg[1].fc_count = rsp_size; } srp->sr_cqhdr.cq_hdr_count = 1; /* this will potentially be overwritten by the calling function */ @@ -4571,13 +4588,13 @@ socal_lbf_alloc(socal_state_t *socalp, uint32_t port, privp->fapktp = (void *)fcalpkt; if (ddi_dma_alloc_handle(socalp->dip, &socal_dma_attr, - DDI_DMA_DONTWAIT, NULL, &chandle) != DDI_SUCCESS) + DDI_DMA_DONTWAIT, NULL, &chandle) != DDI_SUCCESS) goto fail; privp->cmd_handle = chandle; if (ddi_dma_mem_alloc(chandle, cmd_size, &socal_acc_attr, - DDI_DMA_CONSISTENT, DDI_DMA_DONTWAIT, NULL, - (caddr_t *)&cmd, &real_len, &cacchandle) != DDI_SUCCESS) + DDI_DMA_CONSISTENT, DDI_DMA_DONTWAIT, NULL, + (caddr_t *)&cmd, &real_len, &cacchandle) != DDI_SUCCESS) goto fail; privp->cmd = cmd; privp->cmd_acchandle = cacchandle; @@ -4586,57 +4603,57 @@ socal_lbf_alloc(socal_state_t *socalp, uint32_t port, goto fail; if (ddi_dma_addr_bind_handle(chandle, (struct as *)NULL, - (caddr_t)cmd, cmd_size, - DDI_DMA_WRITE | DDI_DMA_CONSISTENT, - DDI_DMA_DONTWAIT, NULL, &ccookie, &ccount) - != DDI_DMA_MAPPED) + (caddr_t)cmd, cmd_size, + DDI_DMA_WRITE | DDI_DMA_CONSISTENT, + DDI_DMA_DONTWAIT, NULL, &ccookie, &ccount) + != DDI_DMA_MAPPED) goto fail; cmd_bound = 1; if (ccount != 1) goto fail; if (rsp_size) { - if (ddi_dma_alloc_handle(socalp->dip, &socal_dma_attr, - DDI_DMA_DONTWAIT, NULL, &rhandle) != DDI_SUCCESS) + if (ddi_dma_alloc_handle(socalp->dip, &socal_dma_attr, + DDI_DMA_DONTWAIT, NULL, &rhandle) != DDI_SUCCESS) goto fail; - privp->rsp_handle = rhandle; - if (ddi_dma_mem_alloc(rhandle, rsp_size, &socal_acc_attr, - DDI_DMA_CONSISTENT, DDI_DMA_DONTWAIT, NULL, - &rsp, &real_len, &racchandle) != DDI_SUCCESS) + privp->rsp_handle = rhandle; + if (ddi_dma_mem_alloc(rhandle, rsp_size, &socal_acc_attr, + DDI_DMA_CONSISTENT, DDI_DMA_DONTWAIT, NULL, + &rsp, &real_len, &racchandle) != DDI_SUCCESS) goto fail; - privp->rsp = rsp; - privp->rsp_acchandle = racchandle; - if (real_len < rsp_size) + privp->rsp = rsp; + privp->rsp_acchandle = racchandle; + if (real_len < rsp_size) goto fail; - if (ddi_dma_addr_bind_handle(rhandle, (struct as *)NULL, - rsp, rsp_size, - DDI_DMA_READ | DDI_DMA_CONSISTENT, - DDI_DMA_DONTWAIT, NULL, &rcookie, &ccount) - != DDI_DMA_MAPPED) + if (ddi_dma_addr_bind_handle(rhandle, (struct as *)NULL, + rsp, rsp_size, + DDI_DMA_READ | DDI_DMA_CONSISTENT, + DDI_DMA_DONTWAIT, NULL, &rcookie, &ccount) + != DDI_DMA_MAPPED) goto fail; - rsp_bound = 1; - if (ccount != 1) + rsp_bound = 1; + if (ccount != 1) goto fail; } srp = (soc_request_t *)&fcalpkt->fcal_socal_request; srp->sr_soc_hdr.sh_flags = SOC_FC_HEADER; if (port) - srp->sr_soc_hdr.sh_flags |= SOC_PORT_B; + srp->sr_soc_hdr.sh_flags |= SOC_PORT_B; srp->sr_soc_hdr.sh_class = 3; srp->sr_soc_hdr.sh_byte_cnt = cmd_size; srp->sr_dataseg[0].fc_base = (uint32_t)ccookie.dmac_address; srp->sr_dataseg[0].fc_count = cmd_size; if (rsp_size == 0) { - srp->sr_soc_hdr.sh_seg_cnt = 1; + srp->sr_soc_hdr.sh_seg_cnt = 1; } else { - srp->sr_soc_hdr.sh_seg_cnt = 2; - srp->sr_dataseg[1].fc_base = (uint32_t)rcookie.dmac_address; - srp->sr_dataseg[1].fc_count = rsp_size; + srp->sr_soc_hdr.sh_seg_cnt = 2; + srp->sr_dataseg[1].fc_base = (uint32_t)rcookie.dmac_address; + srp->sr_dataseg[1].fc_count = rsp_size; } srp->sr_cqhdr.cq_hdr_count = 1; /* this will potentially be overwritten by the calling function */ @@ -4751,19 +4768,19 @@ socal_getmap(socal_state_t *socalp, uint32_t port, caddr_t arg, if (port_statep->sp_lilpmap_valid) { - buf = &port_statep->sp_lilpmap; /* give from cache */ + buf = &port_statep->sp_lilpmap; /* give from cache */ - if (arg) { + if (arg) { if (ddi_copyout(buf, (caddr_t)arg, sizeof (struct lilpmap), flags) == -1) return (-1); - } + } - return (buf->lilp_myalpa); + return (buf->lilp_myalpa); } if (ddi_dma_alloc_handle(socalp->dip, &socal_dma_attr, - DDI_DMA_DONTWAIT, NULL, &dhandle) != DDI_SUCCESS) + DDI_DMA_DONTWAIT, NULL, &dhandle) != DDI_SUCCESS) goto getmap_fail; i = sizeof (struct fcal_lilp_map); @@ -4791,20 +4808,20 @@ socal_getmap(socal_state_t *socalp, uint32_t port, caddr_t arg, (void) ddi_dma_sync(dhandle, 0, 0, DDI_DMA_SYNC_FORKERNEL); if (retval == FCAL_SUCCESS) { - bcopy(buf, &port_statep->sp_lilpmap, sizeof (fcal_lilp_map_t)); + bcopy(buf, &port_statep->sp_lilpmap, sizeof (fcal_lilp_map_t)); - mutex_enter(&port_statep->sp_mtx); - port_statep->sp_src_id = buf->lilp_myalpa; - port_statep->sp_lilpmap_valid = 1; /* cached */ - mutex_exit(&port_statep->sp_mtx); + mutex_enter(&port_statep->sp_mtx); + port_statep->sp_src_id = buf->lilp_myalpa; + port_statep->sp_lilpmap_valid = 1; /* cached */ + mutex_exit(&port_statep->sp_mtx); - if (arg) { + if (arg) { if (ddi_copyout(buf, (caddr_t)arg, sizeof (struct lilpmap), flags) == -1) goto getmap_fail; - } + } - retval = buf->lilp_myalpa; + retval = buf->lilp_myalpa; } else retval = -1; @@ -4859,7 +4876,7 @@ socal_flush_overflowq(socal_state_t *socalp, int port, int q_no) head = fpkt2; fpkt2 = tmp; SOCAL_ID_FREE(head->fcal_socal_request. - sr_soc_hdr.sh_request_token); + sr_soc_hdr.sh_request_token); } else { fpkt1 = fpkt2; fpkt2 = fpkt2->fcal_pkt_next; @@ -4898,7 +4915,7 @@ socal_deferred_intr(void *arg) if (socalp->socal_on_intr) { mutex_exit(&kcq->skc_mtx); kcq->deferred_intr_timeoutid = timeout(socal_deferred_intr, - (caddr_t)kcq, drv_usectohz(10000)); + (caddr_t)kcq, drv_usectohz(10000)); return; } @@ -4920,10 +4937,10 @@ socal_take_core(void *arg) } for (i = 0; i < 4; i++) { socalp->socal_rp->socal_cr.w &= - ~SOCAL_CR_EXTERNAL_RAM_BANK_MASK; + ~SOCAL_CR_EXTERNAL_RAM_BANK_MASK; socalp->socal_rp->socal_cr.w |= i<<24; (void) bcopy((caddr_t)socalp->socal_xrp, - (caddr_t)&socal_xrambuf[i*0x10000], 0x10000); + (caddr_t)&socal_xrambuf[i*0x10000], 0x10000); } for (i = 3; i >= 0; i--) { mutex_exit(&socalp->request[i].skc_mtx); @@ -4931,7 +4948,7 @@ socal_take_core(void *arg) } instance = ddi_get_instance(socalp->dip); cmn_err(CE_PANIC, - "socal take core (socal instance %d)", instance); + "socal take core (socal instance %d)", instance); } /* |