Lines Matching defs:fwdev
248 faa.fwdev = NULL;
270 struct fw_device *fwdev, *fwdev_next;
301 for (fwdev = STAILQ_FIRST(&fc->devices); fwdev != NULL;
302 fwdev = fwdev_next) {
303 fwdev_next = STAILQ_NEXT(fwdev, link);
304 free(fwdev, M_FW);
338 * Lookup fwdev by node id.
343 struct fw_device *fwdev;
346 STAILQ_FOREACH(fwdev, &fc->devices, link)
347 if (fwdev->dst == dst && fwdev->status != FWDEVINVAL)
351 return fwdev;
355 * Lookup fwdev by EUI64.
360 struct fw_device *fwdev;
363 STAILQ_FOREACH(fwdev, &fc->devices, link)
364 if (FW_EUI64_EQUAL(fwdev->eui, *eui))
368 if (fwdev == NULL)
370 if (fwdev->status == FWDEVINVAL)
372 return fwdev;
1611 struct fw_device *fwdev;
1620 STAILQ_FOREACH(fwdev, &fc->devices, link)
1621 if (fwdev->status != FWDEVINVAL) {
1622 fwdev->status = FWDEVINVAL;
1623 fwdev->rcnt = 0;
1626 fwdev->eui.hi, fwdev->eui.lo);
1630 fwdev->eui.hi, fwdev->eui.lo);
1638 fw_explore_read_quads(struct fw_device *fwdev, int offset, uint32_t *quad,
1646 xfer = fwmem_read_quad(fwdev, NULL, -1, 0xffff,
1665 fw_explore_csrblock(struct fw_device *fwdev, int offset, int recur)
1672 dir = (struct csrdirectory *)&fwdev->csrrom[offset/sizeof(uint32_t)];
1673 err = fw_explore_read_quads(fwdev, CSRROMOFF + offset, (uint32_t *)dir,
1679 reg = (struct csrreg *)&fwdev->csrrom[offset / sizeof(uint32_t)];
1680 err = fw_explore_read_quads(fwdev, CSRROMOFF + offset, (uint32_t *)reg,
1688 if (fwdev->rommax < off)
1689 fwdev->rommax = off;
1704 aprint_error_dev(fwdev->fc->bdev, "invalid offset %d\n",
1708 err = fw_explore_csrblock(fwdev, off, recur);
1719 struct fw_device *fwdev, *pfwdev, *tfwdev;
1772 STAILQ_FOREACH(fwdev, &fc->devices, link)
1773 if (FW_EUI64_EQUAL(fwdev->eui, binfo->eui64))
1776 if (fwdev == NULL) {
1778 fwdev = malloc(sizeof(struct fw_device), M_FW, M_WAITOK | M_ZERO);
1779 fwdev->fc = fc;
1780 fwdev->eui = binfo->eui64;
1781 fwdev->dst = dfwdev->dst;
1782 fwdev->maxrec = dfwdev->maxrec;
1783 fwdev->status = FWDEVNEW;
1795 fwdev->speed = fc->speed_map->speed[fc->nodeid][node];
1797 fwdev->speed = binfo->link_spd;
1802 while (fwdev->speed > FWSPD_S100 /* 0 */) {
1803 err = fw_explore_read_quads(fwdev, CSRROMOFF,
1806 aprint_error_dev(fc->bdev, "fwdev->speed(%s)"
1808 fw_linkspeed[fwdev->speed]);
1809 fwdev->speed--;
1814 * If the fwdev is not found in the
1820 if (tfwdev->eui.hi > fwdev->eui.hi ||
1821 (tfwdev->eui.hi == fwdev->eui.hi &&
1822 tfwdev->eui.lo > fwdev->eui.lo))
1827 STAILQ_INSERT_HEAD(&fc->devices, fwdev, link);
1829 STAILQ_INSERT_AFTER(&fc->devices, pfwdev, fwdev, link);
1833 fw_linkspeed[fwdev->speed], fwdev->eui.hi, fwdev->eui.lo);
1835 fwdev->dst = node;
1836 fwdev->status = FWDEVINIT;
1838 if (memcmp(csr, fwdev->csrrom, sizeof(uint32_t) * 5) == 0) {
1845 memset(fwdev->csrrom, 0, CROMSIZE);
1848 memcpy(fwdev->csrrom, csr, sizeof(uint32_t) * 5);
1849 fwdev->rommax = CSRROMOFF + sizeof(uint32_t) * 4;
1851 err = fw_explore_csrblock(fwdev, 0x14, 1); /* root directory */
1856 fwdev->status = FWDEVINVAL;
1857 fwdev->csrrom[0] = 0;
1892 /* setup dummy fwdev */
1976 fw_get_devclass(struct fw_device *fwdev)
1981 crom_init_context(&cc, fwdev->csrrom);
2023 struct fw_device *fwdev, *next;
2032 for (fwdev = STAILQ_FIRST(&fc->devices); fwdev != NULL; fwdev = next) {
2033 next = STAILQ_NEXT(fwdev, link);
2035 switch (fwdev->status) {
2039 locs[IEEE1394IFCF_EUIHI] = fwdev->eui.hi;
2040 locs[IEEE1394IFCF_EUILO] = fwdev->eui.lo;
2042 fwa.name = fw_get_devclass(fwdev);
2043 fwa.fwdev = fwdev;
2045 fwdev->dev = config_found(sc->dev, &fwa, firewire_print,
2049 if (fwdev->dev == NULL) {
2054 devlist->fwdev = fwdev;
2055 devlist->dev = fwdev->dev;
2072 fwdev->status = FWDEVATTACHED;
2076 fwdev->rcnt++;
2078 printf("fwdev->rcnt(%d), hold_count(%d)\n",
2079 fwdev->rcnt, hold_count);
2096 for (fwdev = STAILQ_FIRST(&fc->devices); fwdev != NULL; fwdev = next) {
2097 next = STAILQ_NEXT(fwdev, link);
2098 if (fwdev->rcnt > 0 && fwdev->rcnt > hold_count) {
2104 if (devlist->fwdev == fwdev)
2110 if (devlist->fwdev != fwdev)
2117 if (config_detach(fwdev->dev, DETACH_FORCE) != 0)
2120 STAILQ_REMOVE(&fc->devices, fwdev, fw_device, link);
2121 free(fwdev, M_FW);
2300 struct fw_device fwdev;
2334 /* Bus probe has not finished, make dummy fwdev for cmstr */
2335 memset(&fwdev, 0, sizeof(fwdev));
2336 fwdev.fc = fc;
2337 fwdev.dst = cmstr;
2338 fwdev.speed = 0;
2339 fwdev.maxrec = 8; /* 512 */
2340 fwdev.status = FWDEVINIT;
2343 fwmem_write_quad(&fwdev, NULL, 0/*spd*/, 0xffff, 0xf0000000 | STATE_SET,