mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-15 15:06:42 +00:00
- replace timeout with callout_*.
- replace TAILQ with STAILQ for device list. - some clean up.
This commit is contained in:
parent
6f8132a867
commit
0981f5f00e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=110193
@ -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 @@ fw_bus_explore(struct firewire_comm *fc )
|
||||
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 @@ fw_bus_explore(struct firewire_comm *fc )
|
||||
#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 @@ fw_bus_explore(struct firewire_comm *fc )
|
||||
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;
|
||||
}
|
||||
|
@ -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{
|
||||
|
@ -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));
|
||||
|
@ -841,8 +841,7 @@ fw_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
|
||||
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 @@ fw_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td)
|
||||
(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;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user