Index: firewire.c =================================================================== RCS file: /cvsroot/src/sys/dev/ieee1394/firewire.c,v retrieving revision 1.37 diff -u -p -r1.37 firewire.c --- firewire.c 26 Aug 2010 08:56:15 -0000 1.37 +++ firewire.c 29 Aug 2010 22:14:33 -0000 @@ -1959,6 +1959,45 @@ fw_bus_probe_thread(void *arg) /* NOTREACHED */ } +static const char * +fw_get_devclass(struct fw_device *fwdev) +{ + struct crom_context cc; + struct csrreg *reg; + + crom_init_context(&cc, fwdev->csrrom); + reg = crom_search_key(&cc, CSRKEY_VER); + if (reg == NULL) + return "null"; + + switch (reg->val) { + case CSR_PROTAVC: + return "av/c"; + case CSR_PROTCAL: + return "cal"; + case CSR_PROTEHS: + return "ehs"; + case CSR_PROTHAVI: + return "havi"; + case CSR_PROTCAM104: + return "cam104"; + case CSR_PROTCAM120: + return "cam120"; + case CSR_PROTCAM130: + return "cam130"; + case CSR_PROTDPP: + return "printer"; + case CSR_PROTIICP: + return "iicp"; + case CSRVAL_T10SBP2: + return "sbp"; + default: + if (firewire_debug) + printf("%s: reg->val 0x%x\n", + __func__, reg->val); + return "sbp"; + } +} /* * To attach sub-devices layer onto IEEE1394 bus. @@ -1973,7 +2012,7 @@ fw_attach_dev(struct firewire_comm *fc) struct fw_attach_args fwa; int locs[IEEE1394IFCF_NLOCS]; - fwa.name = "sbp"; + fwa.name = "null"; fwa.fc = fc; mutex_enter(&fc->fc_mtx); @@ -1993,16 +2032,17 @@ fw_attach_dev(struct firewire_comm *fc) locs[IEEE1394IFCF_EUIHI] = fwdev->eui.hi; locs[IEEE1394IFCF_EUILO] = fwdev->eui.lo; + fwa.name = fw_get_devclass(fwdev); fwa.fwdev = fwdev; - fwdev->sbp = config_found_sm_loc(sc->dev, "ieee1394if", + fwdev->dev = config_found_sm_loc(sc->dev, "ieee1394if", locs, &fwa, firewire_print, config_stdsubmatch); - if (fwdev->sbp == NULL) { + if (fwdev->dev == NULL) { free(devlist, M_DEVBUF); break; } devlist->fwdev = fwdev; - devlist->dev = fwdev->sbp; + devlist->dev = fwdev->dev; mutex_enter(&fc->fc_mtx); if (SLIST_EMPTY(&sc->devlist)) @@ -2064,7 +2104,7 @@ fw_attach_dev(struct firewire_comm *fc) link); free(devlist, M_DEVBUF); - if (config_detach(fwdev->sbp, DETACH_FORCE) != 0) + if (config_detach(fwdev->dev, DETACH_FORCE) != 0) return; STAILQ_REMOVE(&fc->devices, fwdev, fw_device, link); Index: firewirereg.h =================================================================== RCS file: /cvsroot/src/sys/dev/ieee1394/firewirereg.h,v retrieving revision 1.13 diff -u -p -r1.13 firewirereg.h --- firewirereg.h 23 May 2010 18:56:58 -0000 1.13 +++ firewirereg.h 29 Aug 2010 22:14:33 -0000 @@ -63,7 +63,7 @@ struct fw_device { #define FWDEVATTACHED 2 #define FWDEVINVAL 3 STAILQ_ENTRY(fw_device) link; - device_t sbp; + device_t dev; }; struct firewire_softc {