Avoid accessing the device if it is dying.

This commit is contained in:
augustss 2000-03-12 21:57:50 +00:00
parent dff1e64aad
commit b8b53d87db
2 changed files with 26 additions and 11 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_aue.c,v 1.29 2000/03/08 15:33:24 augustss Exp $ */
/* $NetBSD: if_aue.c,v 1.30 2000/03/12 21:57:50 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@ -280,6 +280,9 @@ aue_csr_read_1(sc, reg)
uByte val = 0;
int s;
if (sc->aue_dying)
return (0);
req.bmRequestType = UT_READ_VENDOR_DEVICE;
req.bRequest = AUE_UR_READREG;
USETW(req.wValue, 0);
@ -309,6 +312,9 @@ aue_csr_read_2(sc, reg)
uWord val;
int s;
if (sc->aue_dying)
return (0);
req.bmRequestType = UT_READ_VENDOR_DEVICE;
req.bRequest = AUE_UR_READREG;
USETW(req.wValue, 0);
@ -338,6 +344,9 @@ aue_csr_write_1(sc, reg, aval)
int s;
uByte val;
if (sc->aue_dying)
return (0);
val = aval;
req.bmRequestType = UT_WRITE_VENDOR_DEVICE;
req.bRequest = AUE_UR_WRITEREG;
@ -368,6 +377,9 @@ aue_csr_write_2(sc, reg, aval)
int s;
uWord val;
if (sc->aue_dying)
return (0);
USETW(val, aval);
req.bmRequestType = UT_WRITE_VENDOR_DEVICE;
req.bRequest = AUE_UR_WRITEREG;

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_kue.c,v 1.14 2000/03/08 15:33:38 augustss Exp $ */
/* $NetBSD: if_kue.c,v 1.15 2000/03/12 21:59:38 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@ -195,7 +195,7 @@ static void kue_setmulti __P((struct kue_softc *));
static void kue_reset __P((struct kue_softc *));
static usbd_status kue_do_request
__P((usbd_device_handle,
__P((struct kue_softc *,
usb_device_request_t *, void *, u_int16_t,
u_int32_t *));
static usbd_status kue_ctl_l __P((struct kue_softc *, int, u_int8_t,
@ -247,8 +247,8 @@ DRIVER_MODULE(if_kue, uhub, kue_driver, kue_devclass, usbd_driver_load, 0);
* than the default timeout.
*/
static usbd_status
kue_do_request(dev, req, data, flags, lenp)
usbd_device_handle dev;
kue_do_request(sc, req, data, flags, lenp)
struct kue_softc *sc;
usb_device_request_t *req;
void *data;
u_int16_t flags;
@ -259,9 +259,12 @@ kue_do_request(dev, req, data, flags, lenp)
DPRINTFN(15,("kue_do_request: enter\n"));
xfer = usbd_alloc_xfer(dev);
if (sc->kue_dying)
return (0);
xfer = usbd_alloc_xfer(sc->kue_udev);
/* XXX 20000 */
usbd_setup_default_xfer(xfer, dev, 0, 20000, req,
usbd_setup_default_xfer(xfer, sc->kue_udev, 0, 20000, req,
data, UGETW(req->wLength), flags, 0);
err = usbd_sync_transfer(xfer);
if (lenp != NULL)
@ -269,7 +272,8 @@ kue_do_request(dev, req, data, flags, lenp)
usbd_free_xfer(xfer);
if (err) {
DPRINTF(("kue_do_request: err=%s\n", usbd_errstr(err)));
DPRINTF(("%s: kue_do_request: err=%s\n",
USBDEVNAME(sc->kue_dev), usbd_errstr(err)));
}
return (err);
@ -294,7 +298,7 @@ kue_setword(sc, breq, word)
USETW(req.wLength, 0);
s = splusb();
err = kue_do_request(sc->kue_udev, &req, NULL, sc->kue_xfer_flags, 0);
err = kue_do_request(sc, &req, NULL, sc->kue_xfer_flags, 0);
splx(s);
return (err);
@ -329,8 +333,7 @@ kue_ctl_l(sc, rw, breq, val, data, len, flags, lenp)
USETW(req.wLength, len);
s = splusb();
err = kue_do_request(sc->kue_udev, &req, data,
sc->kue_xfer_flags | flags, lenp);
err = kue_do_request(sc, &req, data, sc->kue_xfer_flags | flags, lenp);
splx(s);
return (err);