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 * Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved. * Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@ -280,6 +280,9 @@ aue_csr_read_1(sc, reg)
uByte val = 0; uByte val = 0;
int s; int s;
if (sc->aue_dying)
return (0);
req.bmRequestType = UT_READ_VENDOR_DEVICE; req.bmRequestType = UT_READ_VENDOR_DEVICE;
req.bRequest = AUE_UR_READREG; req.bRequest = AUE_UR_READREG;
USETW(req.wValue, 0); USETW(req.wValue, 0);
@ -309,6 +312,9 @@ aue_csr_read_2(sc, reg)
uWord val; uWord val;
int s; int s;
if (sc->aue_dying)
return (0);
req.bmRequestType = UT_READ_VENDOR_DEVICE; req.bmRequestType = UT_READ_VENDOR_DEVICE;
req.bRequest = AUE_UR_READREG; req.bRequest = AUE_UR_READREG;
USETW(req.wValue, 0); USETW(req.wValue, 0);
@ -338,6 +344,9 @@ aue_csr_write_1(sc, reg, aval)
int s; int s;
uByte val; uByte val;
if (sc->aue_dying)
return (0);
val = aval; val = aval;
req.bmRequestType = UT_WRITE_VENDOR_DEVICE; req.bmRequestType = UT_WRITE_VENDOR_DEVICE;
req.bRequest = AUE_UR_WRITEREG; req.bRequest = AUE_UR_WRITEREG;
@ -368,6 +377,9 @@ aue_csr_write_2(sc, reg, aval)
int s; int s;
uWord val; uWord val;
if (sc->aue_dying)
return (0);
USETW(val, aval); USETW(val, aval);
req.bmRequestType = UT_WRITE_VENDOR_DEVICE; req.bmRequestType = UT_WRITE_VENDOR_DEVICE;
req.bRequest = AUE_UR_WRITEREG; 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 * Copyright (c) 1997, 1998, 1999, 2000
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved. * 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 void kue_reset __P((struct kue_softc *));
static usbd_status kue_do_request static usbd_status kue_do_request
__P((usbd_device_handle, __P((struct kue_softc *,
usb_device_request_t *, void *, u_int16_t, usb_device_request_t *, void *, u_int16_t,
u_int32_t *)); u_int32_t *));
static usbd_status kue_ctl_l __P((struct kue_softc *, int, u_int8_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. * than the default timeout.
*/ */
static usbd_status static usbd_status
kue_do_request(dev, req, data, flags, lenp) kue_do_request(sc, req, data, flags, lenp)
usbd_device_handle dev; struct kue_softc *sc;
usb_device_request_t *req; usb_device_request_t *req;
void *data; void *data;
u_int16_t flags; u_int16_t flags;
@ -259,9 +259,12 @@ kue_do_request(dev, req, data, flags, lenp)
DPRINTFN(15,("kue_do_request: enter\n")); 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 */ /* 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); data, UGETW(req->wLength), flags, 0);
err = usbd_sync_transfer(xfer); err = usbd_sync_transfer(xfer);
if (lenp != NULL) if (lenp != NULL)
@ -269,7 +272,8 @@ kue_do_request(dev, req, data, flags, lenp)
usbd_free_xfer(xfer); usbd_free_xfer(xfer);
if (err) { 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); return (err);
@ -294,7 +298,7 @@ kue_setword(sc, breq, word)
USETW(req.wLength, 0); USETW(req.wLength, 0);
s = splusb(); 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); splx(s);
return (err); return (err);
@ -329,8 +333,7 @@ kue_ctl_l(sc, rw, breq, val, data, len, flags, lenp)
USETW(req.wLength, len); USETW(req.wLength, len);
s = splusb(); s = splusb();
err = kue_do_request(sc->kue_udev, &req, data, err = kue_do_request(sc, &req, data, sc->kue_xfer_flags | flags, lenp);
sc->kue_xfer_flags | flags, lenp);
splx(s); splx(s);
return (err); return (err);