diff options
| author | Glen Barber <gjb@FreeBSD.org> | 2016-04-11 15:24:59 +0000 |
|---|---|---|
| committer | Glen Barber <gjb@FreeBSD.org> | 2016-04-11 15:24:59 +0000 |
| commit | 876d357fa7bc8aeb8d050dd8fe227dd4fd8ed4df (patch) | |
| tree | f5194d1ce3fa45b67cf63080fc519fec83abc57a /sys/dev/cardbus/cardbus.c | |
| parent | 7a888f325e494860d6158821dfbcef85a3310783 (diff) | |
| parent | b2d7040c1cc76c5bbbf54cd2351b4d137b8c22b6 (diff) | |
Notes
Diffstat (limited to 'sys/dev/cardbus/cardbus.c')
| -rw-r--r-- | sys/dev/cardbus/cardbus.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/sys/dev/cardbus/cardbus.c b/sys/dev/cardbus/cardbus.c index b33f462a9448..e785b0f26f7d 100644 --- a/sys/dev/cardbus/cardbus.c +++ b/sys/dev/cardbus/cardbus.c @@ -226,31 +226,30 @@ cardbus_attach_card(device_t cbdev) return (ENOENT); } +static void +cardbus_child_deleted(device_t cbdev, device_t child) +{ + struct cardbus_devinfo *dinfo = device_get_ivars(child); + + if (dinfo->pci.cfg.dev != child) + device_printf(cbdev, "devinfo dev mismatch\n"); + cardbus_device_destroy(dinfo); + pci_child_deleted(cbdev, child); +} + static int cardbus_detach_card(device_t cbdev) { - int numdevs; - device_t *devlist; - int tmp; int err = 0; - if (device_get_children(cbdev, &devlist, &numdevs) != 0) - return (ENOENT); - if (numdevs == 0) { - free(devlist, M_TEMP); - return (ENOENT); - } - - for (tmp = 0; tmp < numdevs; tmp++) { - struct cardbus_devinfo *dinfo = device_get_ivars(devlist[tmp]); + err = bus_generic_detach(cbdev); + if (err) + return (err); + err = device_delete_children(cbdev); + if (err) + return (err); - if (dinfo->pci.cfg.dev != devlist[tmp]) - device_printf(cbdev, "devinfo dev mismatch\n"); - cardbus_device_destroy(dinfo); - pci_delete_child(cbdev, devlist[tmp]); - } POWER_DISABLE_SOCKET(device_get_parent(cbdev), cbdev); - free(devlist, M_TEMP); return (err); } @@ -335,6 +334,7 @@ static device_method_t cardbus_methods[] = { DEVMETHOD(device_resume, cardbus_resume), /* Bus interface */ + DEVMETHOD(bus_child_deleted, cardbus_child_deleted), DEVMETHOD(bus_get_dma_tag, bus_generic_get_dma_tag), DEVMETHOD(bus_read_ivar, cardbus_read_ivar), DEVMETHOD(bus_driver_added, cardbus_driver_added), |
