summaryrefslogtreecommitdiff
path: root/sys/dev/cardbus
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2005-03-11 05:27:05 +0000
committerWarner Losh <imp@FreeBSD.org>2005-03-11 05:27:05 +0000
commit0f675788ff79966ed7bf3b0daded34e6d93735f9 (patch)
tree504aec576c594117130ea7b3a91d161bd09c96c5 /sys/dev/cardbus
parentfa20c234019ae7105ae5c4ae975e96ea8d66d7f3 (diff)
Notes
Diffstat (limited to 'sys/dev/cardbus')
-rw-r--r--sys/dev/cardbus/cardbus.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/dev/cardbus/cardbus.c b/sys/dev/cardbus/cardbus.c
index 19974cd4219e..aaabd08f5865 100644
--- a/sys/dev/cardbus/cardbus.c
+++ b/sys/dev/cardbus/cardbus.c
@@ -471,10 +471,10 @@ cardbus_attach_card(device_t cbdev)
}
cardbus_pickup_maps(cbdev, child);
cardbus_alloc_resources(cbdev, child);
- pci_cfg_save(child, &dinfo->pci, 0);
- pci_cfg_restore(child, &dinfo->pci);
pci_print_verbose(&dinfo->pci);
- if (device_probe_and_attach(child) == 0)
+ if (device_probe_and_attach(child) != 0)
+ cardbus_release_all_resources(cbdev, dinfo);
+ else
cardattached++;
}
}
@@ -545,8 +545,12 @@ cardbus_driver_added(device_t cbdev, driver_t *driver)
continue;
dinfo = device_get_ivars(dev);
pci_print_verbose(&dinfo->pci);
- pci_cfg_restore(dev, &dinfo->pci);
- device_probe_and_attach(dev);
+ resource_list_init(&dinfo->pci.resources);
+ cardbus_do_cis(cbdev, dev);
+ cardbus_pickup_maps(cbdev, child);
+ cardbus_alloc_resources(cbdev, child);
+ if (device_probe_and_attach(dev) != 0)
+ cardbus_release_all_resources(cbdev, dinfo);
}
free(devlist, M_TEMP);
}