diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c index 5c9652d6585f..431164384f4c 100644 --- a/sys/dev/firewire/firewire.c +++ b/sys/dev/firewire/firewire.c @@ -133,7 +133,7 @@ fw_noderesolve_nodeid(struct firewire_comm *fc, int dst) int s; s = splfw(); - TAILQ_FOREACH(fwdev, &fc->devices, link) + STAILQ_FOREACH(fwdev, &fc->devices, link) if (fwdev->dst == dst) break; splx(s); @@ -153,8 +153,8 @@ fw_noderesolve_eui64(struct firewire_comm *fc, struct fw_eui64 eui) int s; s = splfw(); - TAILQ_FOREACH(fwdev, &fc->devices, link) - if (fwdev->eui.hi == eui.hi && fwdev->eui.lo == eui.lo) + STAILQ_FOREACH(fwdev, &fc->devices, link) + if (FW_EUI64_EQUAL(fwdev->eui, eui)) break; splx(s); @@ -366,14 +366,18 @@ firewire_attach( device_t dev ) #else sc->dev[i] = d; #endif - sc->fc->timeouthandle = timeout((timeout_t *)sc->fc->timeout, (void *)sc->fc, hz * 10); - - callout_init(&sc->fc->busprobe_callout #if __FreeBSD_version >= 500000 - , /* mpsafe? */ 0); +#define CALLOUT_INIT(x) callout_init(x, 0 /* mpsafe */) #else - ); +#define CALLOUT_INIT(x) callout_init(x) #endif + CALLOUT_INIT(&sc->fc->timeout_callout); + CALLOUT_INIT(&sc->fc->bmr_callout); + CALLOUT_INIT(&sc->fc->retry_probe_callout); + CALLOUT_INIT(&sc->fc->busprobe_callout); + + callout_reset(&sc->fc->timeout_callout, hz * 10, + (void *)sc->fc->timeout, (void *)sc->fc); /* Locate our children */ bus_generic_probe(dev); @@ -426,7 +430,10 @@ firewire_detach( device_t dev ) } #endif /* XXX xfree_free and untimeout on all xfers */ - untimeout((timeout_t *)sc->fc->timeout, sc->fc, sc->fc->timeouthandle); + callout_stop(&sc->fc->timeout_callout); + callout_stop(&sc->fc->bmr_callout); + callout_stop(&sc->fc->retry_probe_callout); + callout_stop(&sc->fc->busprobe_callout); free(sc->fc->topology_map, M_DEVBUF); free(sc->fc->speed_map, M_DEVBUF); bus_generic_detach(dev); @@ -451,7 +458,7 @@ fw_busreset(struct firewire_comm *fc) switch(fc->status){ case FWBUSMGRELECT: - untimeout((timeout_t *)fw_try_bmr, (void *)fc, fc->bmrhandle); + callout_stop(&fc->bmr_callout); break; default: break; @@ -612,7 +619,7 @@ void fw_init(struct firewire_comm *fc) CSRARC(fc, SPED_MAP) = 0x3f1 << 16; CSRARC(fc, SPED_MAP + 4) = 1; - TAILQ_INIT(&fc->devices); + STAILQ_INIT(&fc->devices); STAILQ_INIT(&fc->pending); /* Initialize csr ROM work space */ @@ -1049,8 +1056,8 @@ void fw_sidrcv(struct firewire_comm* fc, caddr_t buf, u_int len, u_int off) CSRARC(fc, BUS_MGR_ID) = fc->set_bmr(fc, fc->irm); } else { fc->status = FWBUSMGRELECT; - fc->bmrhandle = timeout((timeout_t *)fw_try_bmr, - (void *)fc, hz / 8); + callout_reset(&fc->bmr_callout, hz/8, + (void *)fw_try_bmr, (void *)fc); } } else { fc->status = FWBUSMGRDONE; @@ -1085,15 +1092,15 @@ fw_bus_probe(struct firewire_comm *fc) * Invalidate all devices, just after bus reset. Devices * to be removed has not been seen longer time. */ - for(fwdev = TAILQ_FIRST(&fc->devices); fwdev != NULL; fwdev = next) { - next = TAILQ_NEXT(fwdev, link); - if(fwdev->status != FWDEVINVAL){ + for (fwdev = STAILQ_FIRST(&fc->devices); fwdev != NULL; fwdev = next) { + next = STAILQ_NEXT(fwdev, link); + if (fwdev->status != FWDEVINVAL) { fwdev->status = FWDEVINVAL; fwdev->rcnt = 0; - }else if(fwdev->rcnt < FW_MAXDEVRCNT){ + } else if(fwdev->rcnt < FW_MAXDEVRCNT) { fwdev->rcnt ++; - }else{ - TAILQ_REMOVE(&fc->devices, fwdev, link); + } else { + STAILQ_REMOVE(&fc->devices, fwdev, fw_device, link); free(fwdev, M_DEVBUF); } } @@ -1146,12 +1153,9 @@ loop: fc->ongoaddr = CSRROMOFF + 0x10; addr = 0xf0000000 | fc->ongoaddr; }else if(fc->ongodev == NULL){ - for(fwdev = TAILQ_FIRST(&fc->devices); fwdev != NULL; - fwdev = TAILQ_NEXT(fwdev, link)){ - if(fwdev->eui.hi == fc->ongoeui.hi && fwdev->eui.lo == fc->ongoeui.lo){ + STAILQ_FOREACH(fwdev, &fc->devices, link) + if (FW_EUI64_EQUAL(fwdev->eui, fc->ongoeui)) break; - } - } if(fwdev != NULL){ fwdev->dst = fc->ongonode; fwdev->status = FWDEVATTACHED; @@ -1177,7 +1181,7 @@ loop: #endif pfwdev = NULL; - TAILQ_FOREACH(tfwdev, &fc->devices, link) { + STAILQ_FOREACH(tfwdev, &fc->devices, link) { if (tfwdev->eui.hi > fwdev->eui.hi || (tfwdev->eui.hi == fwdev->eui.hi && tfwdev->eui.lo > fwdev->eui.lo)) @@ -1185,9 +1189,9 @@ loop: pfwdev = tfwdev; } if (pfwdev == NULL) - TAILQ_INSERT_HEAD(&fc->devices, fwdev, link); + STAILQ_INSERT_HEAD(&fc->devices, fwdev, link); else - TAILQ_INSERT_AFTER(&fc->devices, pfwdev, fwdev, link); + STAILQ_INSERT_AFTER(&fc->devices, pfwdev, fwdev, link); device_printf(fc->bdev, "New %s device ID:%08x%08x\n", linkspeed[fwdev->speed], @@ -1479,8 +1483,7 @@ fw_attach_dev(struct firewire_comm *fc) struct firewire_dev_comm *fdc; u_int32_t spec, ver; - for(fwdev = TAILQ_FIRST(&fc->devices); fwdev != NULL; - fwdev = TAILQ_NEXT(fwdev, link)){ + STAILQ_FOREACH(fwdev, &fc->devices, link) { if(fwdev->status == FWDEVINIT){ spec = getcsrdata(fwdev, CSRKEY_SPEC); if(spec == 0) @@ -1567,8 +1570,8 @@ fw_attach_dev(struct firewire_comm *fc) printf("fw_attach_dev: %d pending handlers called\n", i); if (fc->retry_count > 0) { printf("retry_count = %d\n", fc->retry_count); - fc->retry_probe_handle = timeout((timeout_t *)fc->ibr, - (void *)fc, hz*2); + callout_reset(&fc->retry_probe_callout, hz*2, + (void *)fc->ibr, (void *)fc); } return; } diff --git a/sys/dev/firewire/firewire.h b/sys/dev/firewire/firewire.h index e07dfd7e768d..f96e331776e0 100644 --- a/sys/dev/firewire/firewire.h +++ b/sys/dev/firewire/firewire.h @@ -315,6 +315,8 @@ struct fw_eui64 { ((eui)->hi >> (8*(3-(x)))): \ ((eui)->lo >> (8*(7-(x)))) \ ) & 0xff) +#define FW_EUI64_EQUAL(x, y) \ + ((x).hi == (y).hi && (x).lo == (y).lo) struct fw_asyreq { struct fw_asyreq_t{ diff --git a/sys/dev/firewire/firewirereg.h b/sys/dev/firewire/firewirereg.h index 568bff79dd43..1c71eca5094e 100644 --- a/sys/dev/firewire/firewirereg.h +++ b/sys/dev/firewire/firewirereg.h @@ -65,7 +65,7 @@ struct fw_device{ #define FWDEVINIT 1 #define FWDEVATTACHED 2 #define FWDEVINVAL 3 - TAILQ_ENTRY(fw_device) link; + STAILQ_ENTRY(fw_device) link; #if 0 LIST_HEAD(, fw_xfer) txqueue; LIST_HEAD(, fw_xfer) rxqueue; @@ -141,7 +141,7 @@ struct firewire_comm{ *arq, *atq, *ars, *ats, *it[FW_MAX_DMACH],*ir[FW_MAX_DMACH]; STAILQ_HEAD(, tlabel) tlabels[0x40]; STAILQ_HEAD(, fw_bind) binds; - TAILQ_HEAD(, fw_device) devices; + STAILQ_HEAD(, fw_device) devices; STAILQ_HEAD(, fw_xfer) pending; volatile u_int32_t *sid_buf; u_int sid_cnt; @@ -152,9 +152,9 @@ struct firewire_comm{ struct fw_topology_map *topology_map; struct fw_speed_map *speed_map; struct callout busprobe_callout; - struct callout_handle bmrhandle; - struct callout_handle timeouthandle; - struct callout_handle retry_probe_handle; + struct callout bmr_callout; + struct callout timeout_callout; + struct callout retry_probe_callout; u_int32_t (*cyctimer) __P((struct firewire_comm *)); void (*ibr) __P((struct firewire_comm *)); u_int32_t (*set_bmr) __P((struct firewire_comm *, u_int32_t)); diff --git a/sys/dev/firewire/fwdev.c b/sys/dev/firewire/fwdev.c index 0a740180ba0e..4652eb653edd 100644 --- a/sys/dev/firewire/fwdev.c +++ b/sys/dev/firewire/fwdev.c @@ -841,8 +841,7 @@ error: devinfo->status = 0; /* XXX */ devinfo->eui.hi = sc->fc->eui.hi; devinfo->eui.lo = sc->fc->eui.lo; - for (fwdev = TAILQ_FIRST(&sc->fc->devices); fwdev != NULL; - fwdev = TAILQ_NEXT(fwdev, link)) { + STAILQ_FOREACH(fwdev, &sc->fc->devices, link) { if(len < FW_MAX_DEVLST){ devinfo = &fwdevlst->dev[len++]; devinfo->dst = fwdev->dst; @@ -861,12 +860,9 @@ error: (sc->fc->topology_map->crc_len + 1) * 4); break; case FW_GCROM: - for (fwdev = TAILQ_FIRST(&sc->fc->devices); fwdev != NULL; - fwdev = TAILQ_NEXT(fwdev, link)) { - if (fwdev->eui.hi == crom_buf->eui.hi && - fwdev->eui.lo == crom_buf->eui.lo) + STAILQ_FOREACH(fwdev, &sc->fc->devices, link) + if (FW_EUI64_EQUAL(fwdev->eui, crom_buf->eui)) break; - } if (fwdev == NULL) { err = FWNODE_INVAL; break; diff --git a/sys/dev/firewire/fwohci.c b/sys/dev/firewire/fwohci.c index 2c0a267021b6..2f196dac236c 100644 --- a/sys/dev/firewire/fwohci.c +++ b/sys/dev/firewire/fwohci.c @@ -718,8 +718,8 @@ fwohci_timeout(void *arg) struct fwohci_softc *sc; sc = (struct fwohci_softc *)arg; - sc->fc.timeouthandle = timeout(fwohci_timeout, - (void *)sc, FW_XFERTIMEOUT * hz * 10); + callout_reset(&sc->fc.timeout_callout, FW_XFERTIMEOUT * hz * 10, + (void *)fwohci_timeout, (void *)sc); } u_int32_t diff --git a/sys/dev/firewire/sbp.c b/sys/dev/firewire/sbp.c index 1b630573742f..81d5711f14d7 100644 --- a/sys/dev/firewire/sbp.c +++ b/sys/dev/firewire/sbp.c @@ -669,11 +669,9 @@ END_DEBUG /* Gabage Collection */ for(i = 0 ; i < SBP_NUM_TARGETS ; i ++){ target = &sbp->targets[i]; - for( fwdev = TAILQ_FIRST(&sbp->fd.fc->devices); - fwdev != NULL; fwdev = TAILQ_NEXT(fwdev, link)){ - if(target->fwdev == NULL) break; - if(target->fwdev == fwdev) break; - } + STAILQ_FOREACH(fwdev, &sbp->fd.fc->devices, link) + if (target->fwdev == NULL || target->fwdev == fwdev) + break; if(fwdev == NULL){ /* device has removed in lower driver */ sbp_cam_detach_target(target); @@ -685,8 +683,7 @@ END_DEBUG } } /* traverse device list */ - for( fwdev = TAILQ_FIRST(&sbp->fd.fc->devices); - fwdev != NULL; fwdev = TAILQ_NEXT(fwdev, link)){ + STAILQ_FOREACH(fwdev, &sbp->fd.fc->devices, link) { SBP_DEBUG(0) printf("sbp_post_explore: EUI:%08x%08x ", fwdev->eui.hi, fwdev->eui.lo); @@ -1781,7 +1778,7 @@ sbp_cam_detach_target(struct sbp_target *target) SBP_DEBUG(0) printf("sbp_detach_target %d\n", target->target_id); END_DEBUG - for (i=0; i < target->num_lun; i++) { + for (i = 0; i < target->num_lun; i++) { sdev = &target->luns[i]; if (sdev->status == SBP_DEV_RESET || sdev->status == SBP_DEV_DEAD)