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 {