svn commit: r191226 - head/sys/netgraph/bluetooth/drivers/ubtbcmfw

Ed Schouten ed at FreeBSD.org
Fri Apr 17 22:13:43 UTC 2009


Author: ed
Date: Fri Apr 17 22:13:41 2009
New Revision: 191226
URL: http://svn.freebsd.org/changeset/base/191226

Log:
  Switch ubtbcmfw(4) to use si_drv1 instead of storing the unit number.
  
  The unit number is still used to store the type of the device node.
  
  Approved by:	emax

Modified:
  head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c

Modified: head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c
==============================================================================
--- head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c	Fri Apr 17 22:04:19 2009	(r191225)
+++ head/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c	Fri Apr 17 22:13:41 2009	(r191226)
@@ -83,9 +83,6 @@ typedef struct ubtbcmfw_softc	*ubtbcmfw_
  * Device methods
  */
 
-#define UBTBCMFW_UNIT(n)	((dev2unit(n) >> 4) & 0xf)
-#define UBTBCMFW_ENDPOINT(n)	(dev2unit(n) & 0xf)
-#define UBTBCMFW_MINOR(u, e)	(((u) << 4) | (e))
 #define UBTBCMFW_BSIZE		1024
 
 static d_open_t		ubtbcmfw_open;
@@ -210,19 +207,19 @@ ubtbcmfw_attach(device_t self)
 
 	/* Create device nodes */
 	sc->sc_ctrl_dev = make_dev(&ubtbcmfw_cdevsw,
-		UBTBCMFW_MINOR(device_get_unit(sc->sc_dev), 0),
-		UID_ROOT, GID_OPERATOR, 0644,
+		0, UID_ROOT, GID_OPERATOR, 0644,
 		"%s", device_get_nameunit(sc->sc_dev));
+	sc->sc_ctrl_dev->si_drv1 = sc;
 
 	sc->sc_intr_in_dev = make_dev(&ubtbcmfw_cdevsw,
-		UBTBCMFW_MINOR(device_get_unit(sc->sc_dev), UBTBCMFW_INTR_IN),
-		UID_ROOT, GID_OPERATOR, 0644,
+		UBTBCMFW_INTR_IN, UID_ROOT, GID_OPERATOR, 0644,
 		"%s.%d", device_get_nameunit(sc->sc_dev), UBTBCMFW_INTR_IN);
+	sc->sc_intr_in_dev->si_drv1 = sc;
 
 	sc->sc_bulk_out_dev = make_dev(&ubtbcmfw_cdevsw,
-		UBTBCMFW_MINOR(device_get_unit(sc->sc_dev), UBTBCMFW_BULK_OUT),
-		UID_ROOT, GID_OPERATOR, 0644,
+		UBTBCMFW_BULK_OUT, UID_ROOT, GID_OPERATOR, 0644,
 		"%s.%d", device_get_nameunit(sc->sc_dev), UBTBCMFW_BULK_OUT);
+	sc->sc_bulk_out_dev->si_drv1 = sc;
 
 	return 0;
 bad:
@@ -288,17 +285,13 @@ ubtbcmfw_detach(device_t self)
 static int
 ubtbcmfw_open(struct cdev *dev, int flag, int mode, struct thread *p)
 {
-	ubtbcmfw_softc_p	sc = NULL;
+	ubtbcmfw_softc_p	sc = dev->si_drv1;
 	int			error = 0;
 
-	/* checks for sc != NULL */
-	sc = devclass_get_softc(ubtbcmfw_devclass, UBTBCMFW_UNIT(dev));
-	if (sc == NULL)
-		return (ENXIO);
 	if (sc->sc_dying)
 		return (ENXIO);
 
-	switch (UBTBCMFW_ENDPOINT(dev)) {
+	switch (dev2unit(dev)) {
 	case USB_CONTROL_ENDPOINT:
 		if (!(sc->sc_flags & UBTBCMFW_CTRL_DEV))
 			sc->sc_flags |= UBTBCMFW_CTRL_DEV;
@@ -342,13 +335,9 @@ ubtbcmfw_open(struct cdev *dev, int flag
 static int
 ubtbcmfw_close(struct cdev *dev, int flag, int mode, struct thread *p)
 {
-	ubtbcmfw_softc_p	sc = NULL;
-
-	sc = devclass_get_softc(ubtbcmfw_devclass, UBTBCMFW_UNIT(dev));
-	if (sc == NULL)
-		return (ENXIO);
+	ubtbcmfw_softc_p	sc = dev->si_drv1;
 
-	switch (UBTBCMFW_ENDPOINT(dev)) {
+	switch (dev2unit(dev)) {
 	case USB_CONTROL_ENDPOINT:
 		sc->sc_flags &= ~UBTBCMFW_CTRL_DEV;
 		break;
@@ -379,17 +368,16 @@ ubtbcmfw_close(struct cdev *dev, int fla
 static int
 ubtbcmfw_read(struct cdev *dev, struct uio *uio, int flag)
 {
-	ubtbcmfw_softc_p	sc = NULL;
+	ubtbcmfw_softc_p	sc = dev->si_drv1;
 	u_int8_t		buf[UBTBCMFW_BSIZE];
 	usbd_xfer_handle	xfer;
 	usbd_status		err;
 	int			n, tn, error = 0;
 
-	sc = devclass_get_softc(ubtbcmfw_devclass, UBTBCMFW_UNIT(dev));
-	if (sc == NULL || sc->sc_dying)
+	if (sc->sc_dying)
 		return (ENXIO);
 
-	if (UBTBCMFW_ENDPOINT(dev) != UBTBCMFW_INTR_IN)
+	if (dev2unit(dev) != UBTBCMFW_INTR_IN)
 		return (EOPNOTSUPP);
 	if (sc->sc_intr_in_pipe == NULL)
 		return (ENXIO);
@@ -443,17 +431,16 @@ ubtbcmfw_read(struct cdev *dev, struct u
 static int
 ubtbcmfw_write(struct cdev *dev, struct uio *uio, int flag)
 {
-	ubtbcmfw_softc_p	sc = NULL;
+	ubtbcmfw_softc_p	sc = dev->si_drv1;
 	u_int8_t		buf[UBTBCMFW_BSIZE];
 	usbd_xfer_handle	xfer;
 	usbd_status		err;
 	int			n, error = 0;
 
-	sc = devclass_get_softc(ubtbcmfw_devclass, UBTBCMFW_UNIT(dev));
-	if (sc == NULL || sc->sc_dying)
+	if (sc->sc_dying)
 		return (ENXIO);
 
-	if (UBTBCMFW_ENDPOINT(dev) != UBTBCMFW_BULK_OUT)
+	if (dev2unit(dev) != UBTBCMFW_BULK_OUT)
 		return (EOPNOTSUPP);
 	if (sc->sc_bulk_out_pipe == NULL)
 		return (ENXIO);
@@ -509,14 +496,13 @@ static int
 ubtbcmfw_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag,
   struct thread *p)
 {
-	ubtbcmfw_softc_p	sc = NULL;
+	ubtbcmfw_softc_p	sc = dev->si_drv1;
 	int			error = 0;
 
-	sc = devclass_get_softc(ubtbcmfw_devclass, UBTBCMFW_UNIT(dev));
-	if (sc == NULL || sc->sc_dying)
+	if (sc->sc_dying)
 		return (ENXIO);
 
-	if (UBTBCMFW_ENDPOINT(dev) != USB_CONTROL_ENDPOINT)
+	if (dev2unit(dev) != USB_CONTROL_ENDPOINT)
 		return (EOPNOTSUPP);
 
 	sc->sc_refcnt ++;
@@ -546,14 +532,10 @@ ubtbcmfw_ioctl(struct cdev *dev, u_long 
 static int
 ubtbcmfw_poll(struct cdev *dev, int events, struct thread *p)
 {
-	ubtbcmfw_softc_p	sc = NULL;
+	ubtbcmfw_softc_p	sc = dev->si_drv1;
 	int			revents = 0;
 
-	sc = devclass_get_softc(ubtbcmfw_devclass, UBTBCMFW_UNIT(dev));
-	if (sc == NULL)
-		return (ENXIO);
-
-	switch (UBTBCMFW_ENDPOINT(dev)) {
+	switch (dev2unit(dev)) {
 	case UBTBCMFW_INTR_IN:
 		if (sc->sc_intr_in_pipe != NULL)
 			revents |= events & (POLLIN | POLLRDNORM);


More information about the svn-src-head mailing list