parent
06e7c947bc
commit
0cf8d75346
|
@ -58,7 +58,6 @@ Pci_tree::Pci_tree(unsigned device_class, unsigned class_mask)
|
||||||
Pci::Device_capability prev_device_cap;
|
Pci::Device_capability prev_device_cap;
|
||||||
Pci::Device_capability device_cap = _pci_drv.first_device(device_class,
|
Pci::Device_capability device_cap = _pci_drv.first_device(device_class,
|
||||||
class_mask);
|
class_mask);
|
||||||
|
|
||||||
while (device_cap.valid()) {
|
while (device_cap.valid()) {
|
||||||
|
|
||||||
Pci_device *device = new (env()->heap()) Pci_device(device_cap);
|
Pci_device *device = new (env()->heap()) Pci_device(device_cap);
|
||||||
|
@ -66,10 +65,19 @@ Pci_tree::Pci_tree(unsigned device_class, unsigned class_mask)
|
||||||
_devices.insert(device);
|
_devices.insert(device);
|
||||||
|
|
||||||
prev_device_cap = device_cap;
|
prev_device_cap = device_cap;
|
||||||
device_cap = _pci_drv.next_device(prev_device_cap, device_class,
|
|
||||||
class_mask);
|
for (unsigned i = 0; i < 2; i++) {
|
||||||
|
try {
|
||||||
|
device_cap = _pci_drv.next_device(prev_device_cap, device_class,
|
||||||
|
class_mask);
|
||||||
|
break;
|
||||||
|
} catch (Pci::Device::Quota_exceeded) {
|
||||||
|
Genode::env()->parent()->upgrade(_pci_drv.cap(), "ram_quota=4096");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
_show_devices();
|
_show_devices();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,8 +125,32 @@ namespace Dde_kit {
|
||||||
size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
/* trigger that the device gets assigned to this driver */
|
/* trigger that the device gets assigned to this driver */
|
||||||
pci_drv.config_extended(_device);
|
for (unsigned i = 0; i < 2; i++) {
|
||||||
return pci_drv.alloc_dma_buffer(size);
|
try {
|
||||||
|
pci_drv.config_extended(_device);
|
||||||
|
break;
|
||||||
|
} catch (Pci::Device::Quota_exceeded) {
|
||||||
|
if (i == 1)
|
||||||
|
return Ram_dataspace_capability();
|
||||||
|
Genode::env()->parent()->upgrade(pci_drv.cap(), "ram_quota=4096");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < 2; i++) {
|
||||||
|
try {
|
||||||
|
return pci_drv.alloc_dma_buffer(size);
|
||||||
|
} catch (Pci::Device::Quota_exceeded) {
|
||||||
|
if (i == 0) {
|
||||||
|
char buf[32];
|
||||||
|
Genode::snprintf(buf, sizeof(buf), "ram_quota=%zd",
|
||||||
|
size);
|
||||||
|
Genode::env()->parent()->upgrade(pci_drv.cap(),
|
||||||
|
buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ram_dataspace_capability();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue