summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/uscanner.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb/uscanner.c')
-rw-r--r--sys/dev/usb/uscanner.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/sys/dev/usb/uscanner.c b/sys/dev/usb/uscanner.c
index 00462e0..60a79c9 100644
--- a/sys/dev/usb/uscanner.c
+++ b/sys/dev/usb/uscanner.c
@@ -64,7 +64,6 @@ __FBSDID("$FreeBSD$");
#include <sys/sysctl.h>
#include <sys/uio.h>
-#include <dev/usb/usb_port.h>
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
@@ -289,7 +288,26 @@ static void uscanner_do_close(struct uscanner_softc *);
#define USCANNERUNIT(n) (minor(n))
-USB_DECLARE_DRIVER(uscanner);
+static device_probe_t uscanner_match;
+static device_attach_t uscanner_attach;
+static device_detach_t uscanner_detach;
+
+static device_method_t uscanner_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, uscanner_match),
+ DEVMETHOD(device_attach, uscanner_attach),
+ DEVMETHOD(device_detach, uscanner_detach),
+
+ { 0, 0 }
+};
+
+static driver_t uscanner_driver = {
+ "uscanner",
+ uscanner_methods,
+ sizeof(struct uscanner_softc)
+};
+
+static devclass_t uscanner_devclass;
static int
uscanner_match(device_t self)
@@ -306,7 +324,8 @@ uscanner_match(device_t self)
static int
uscanner_attach(device_t self)
{
- USB_ATTACH_START(uscanner, sc, uaa);
+ struct uscanner_softc *sc = device_get_softc(self);
+ struct usb_attach_arg *uaa = device_get_ivars(self);
usb_interface_descriptor_t *id = 0;
usb_endpoint_descriptor_t *ed, *ed_bulkin = NULL, *ed_bulkout = NULL;
int i;
@@ -379,7 +398,9 @@ uscanneropen(struct cdev *dev, int flag, int mode, struct thread *p)
int unit = USCANNERUNIT(dev);
usbd_status err;
- USB_GET_SC_OPEN(uscanner, unit, sc);
+ sc = devclass_get_softc(uscanner_devclass, unit);
+ if (sc == NULL)
+ return (ENXIO);
DPRINTFN(5, ("uscanneropen: flag=%d, mode=%d, unit=%d\n",
flag, mode, unit));
@@ -440,8 +461,7 @@ uscannerclose(struct cdev *dev, int flag, int mode, struct thread *p)
{
struct uscanner_softc *sc;
- USB_GET_SC(uscanner, USCANNERUNIT(dev), sc);
-
+ sc = devclass_get_softc(uscanner_devclass, USCANNERUNIT(dev));
DPRINTFN(5, ("uscannerclose: flag=%d, mode=%d, unit=%d\n",
flag, mode, USCANNERUNIT(dev)));
@@ -539,8 +559,7 @@ uscannerread(struct cdev *dev, struct uio *uio, int flag)
struct uscanner_softc *sc;
int error;
- USB_GET_SC(uscanner, USCANNERUNIT(dev), sc);
-
+ sc = devclass_get_softc(uscanner_devclass, USCANNERUNIT(dev));
sc->sc_refcnt++;
error = uscanner_do_read(sc, uio, flag);
if (--sc->sc_refcnt < 0)
@@ -589,8 +608,7 @@ uscannerwrite(struct cdev *dev, struct uio *uio, int flag)
struct uscanner_softc *sc;
int error;
- USB_GET_SC(uscanner, USCANNERUNIT(dev), sc);
-
+ sc = devclass_get_softc(uscanner_devclass, USCANNERUNIT(dev));
sc->sc_refcnt++;
error = uscanner_do_write(sc, uio, flag);
if (--sc->sc_refcnt < 0)
@@ -601,7 +619,7 @@ uscannerwrite(struct cdev *dev, struct uio *uio, int flag)
static int
uscanner_detach(device_t self)
{
- USB_DETACH_START(uscanner, sc);
+ struct uscanner_softc *sc = device_get_softc(self);
int s;
DPRINTF(("uscanner_detach: sc=%p\n", sc));
@@ -635,8 +653,7 @@ uscannerpoll(struct cdev *dev, int events, struct thread *p)
struct uscanner_softc *sc;
int revents = 0;
- USB_GET_SC(uscanner, USCANNERUNIT(dev), sc);
-
+ sc = devclass_get_softc(uscanner_devclass, USCANNERUNIT(dev));
if (sc->sc_dying)
return (EIO);
@@ -651,4 +668,5 @@ uscannerpoll(struct cdev *dev, int events, struct thread *p)
return (revents);
}
+MODULE_DEPEND(uscanner, usb, 1, 1, 1);
DRIVER_MODULE(uscanner, uhub, uscanner_driver, uscanner_devclass, usbd_driver_load, 0);
OpenPOWER on IntegriCloud