From e4d663cf412cd297ca0bdb3e77e247b2c72780b7 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 22 Apr 2015 16:31:39 +0200 Subject: [PATCH] pci: remove device_cap from dma calls Issue #1486 --- repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc | 2 +- repos/dde_linux/src/lib/usb/pci_driver.cc | 12 ++---------- repos/dde_linux/src/lib/wifi/pci_driver.cc | 9 ++------- repos/os/include/pci_session/client.h | 18 ++++++++---------- repos/os/include/pci_session/pci_session.h | 10 ++++------ repos/os/src/drivers/ahci/x86/ahci_device.h | 7 ++----- .../os/src/drivers/pci/pci_session_component.h | 5 ++--- repos/os/src/lib/dde_kit/pci_tree.h | 2 +- 8 files changed, 22 insertions(+), 43 deletions(-) diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc b/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc index 672810b6c..6b9e79335 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc +++ b/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc @@ -203,7 +203,7 @@ struct Pci_driver /* trigger that the device gets assigned to this driver */ _pci.config_extended(_cap); Ram_dataspace_capability ram_cap; - ram_cap = _pci.alloc_dma_buffer(_cap, size); + ram_cap = _pci.alloc_dma_buffer(size); _region.mapped_base = (Genode::addr_t)env()->rm_session()->attach(ram_cap); _region.base = Dataspace_client(ram_cap).phys_addr(); diff --git a/repos/dde_linux/src/lib/usb/pci_driver.cc b/repos/dde_linux/src/lib/usb/pci_driver.cc index 834a54ef7..1e9e35976 100644 --- a/repos/dde_linux/src/lib/usb/pci_driver.cc +++ b/repos/dde_linux/src/lib/usb/pci_driver.cc @@ -250,7 +250,6 @@ struct Dma_object : Memory_object_base ** Linux interface ** *********************/ -static Pci::Device_capability pci_device_cap; static Pci::Connection pci; static Genode::Object_pool memory_pool; @@ -288,13 +287,6 @@ int pci_register_driver(struct pci_driver *drv) Pci_driver *pci_drv = 0; try { - /* - * Assign cap already here, since for probing already DMA - * buffer is required and allocated by - * Genode::Mem::alloc_dma_buffer(size_t size) - */ - pci_device_cap = cap; - /* trigger that the device get be assigned to the usb driver */ pci.config_extended(cap); @@ -395,7 +387,7 @@ const char *pci_name(const struct pci_dev *pdev) void Ram_object::free() { Genode::env()->ram_session()->free(ram_cap()); } -void Dma_object::free() { pci.free_dma_buffer(pci_device_cap, ram_cap()); } +void Dma_object::free() { pci.free_dma_buffer(ram_cap()); } Genode::Ram_dataspace_capability @@ -409,7 +401,7 @@ Backend_memory::alloc(Genode::addr_t size, Genode::Cache_attribute cached) cap = env()->ram_session()->alloc(size); o = new (env()->heap()) Ram_object(cap); } else { - cap = pci.alloc_dma_buffer(pci_device_cap, size); + cap = pci.alloc_dma_buffer(size); o = new (env()->heap()) Dma_object(cap); } diff --git a/repos/dde_linux/src/lib/wifi/pci_driver.cc b/repos/dde_linux/src/lib/wifi/pci_driver.cc index 5c9fd9513..370578ac3 100644 --- a/repos/dde_linux/src/lib/wifi/pci_driver.cc +++ b/repos/dde_linux/src/lib/wifi/pci_driver.cc @@ -293,11 +293,6 @@ extern "C" int pci_register_driver(struct pci_driver *drv) while (cap.valid()) { Pci_driver *pci_drv = 0; try { - /* - * Assign cap already here, since for probing already DMA - * buffer is required and allocated by - * Genode::Mem::alloc_dma_buffer(size_t size) - */ pci_device_cap = cap; /* trigger that the device get be assigned to the wifi driver */ @@ -449,7 +444,7 @@ extern "C" int pcie_capability_read_word(struct pci_dev *pdev, int pos, u16 *val void Ram_object::free() { Genode::env()->ram_session()->free(ram_cap()); } -void Dma_object::free() { pci()->free_dma_buffer(pci_device_cap, ram_cap()); } +void Dma_object::free() { pci()->free_dma_buffer(ram_cap()); } Genode::Ram_dataspace_capability @@ -463,7 +458,7 @@ Lx::backend_alloc(Genode::addr_t size, Genode::Cache_attribute cached) cap = env()->ram_session()->alloc(size); o = new (env()->heap()) Ram_object(cap); } else { - cap = pci()->alloc_dma_buffer(pci_device_cap, size); + cap = pci()->alloc_dma_buffer(size); o = new (env()->heap()) Dma_object(cap); } diff --git a/repos/os/include/pci_session/client.h b/repos/os/include/pci_session/client.h index cc9c1deb0..cfa45ecdf 100644 --- a/repos/os/include/pci_session/client.h +++ b/repos/os/include/pci_session/client.h @@ -26,27 +26,25 @@ struct Pci::Session_client : public Genode::Rpc_client : Genode::Rpc_client(session) { } Device_capability first_device(unsigned device_class = 0, - unsigned class_mask = 0) { + unsigned class_mask = 0) override { return call(device_class, class_mask); } Device_capability next_device(Device_capability prev_device, unsigned device_class = 0, - unsigned class_mask = 0) { + unsigned class_mask = 0) override { return call(prev_device, device_class, class_mask); } - void release_device(Device_capability device) { + void release_device(Device_capability device) override { call(device); } - Genode::Io_mem_dataspace_capability config_extended(Device_capability device_cap) { + Genode::Io_mem_dataspace_capability config_extended(Device_capability device_cap) override { return call(device_cap); } - Genode::Ram_dataspace_capability alloc_dma_buffer(Device_capability device_cap, - Genode::size_t size) { - return call(device_cap, size); } + Genode::Ram_dataspace_capability alloc_dma_buffer(Genode::size_t size) override { + return call(size); } - void free_dma_buffer(Device_capability device_cap, - Genode::Ram_dataspace_capability cap) { - call(device_cap, cap); } + void free_dma_buffer(Genode::Ram_dataspace_capability cap) override { + call(cap); } }; #endif /* _INCLUDE__PCI_SESSION__CLIENT_H_ */ diff --git a/repos/os/include/pci_session/pci_session.h b/repos/os/include/pci_session/pci_session.h index f624a1bb5..b6937514d 100644 --- a/repos/os/include/pci_session/pci_session.h +++ b/repos/os/include/pci_session/pci_session.h @@ -64,14 +64,12 @@ struct Pci::Session : Genode::Session /** * Allocate memory suitable for DMA. */ - virtual Genode::Ram_dataspace_capability alloc_dma_buffer(Device_capability, - Genode::size_t) = 0; + virtual Genode::Ram_dataspace_capability alloc_dma_buffer(Genode::size_t) = 0; /** * Free previously allocated DMA memory */ - virtual void free_dma_buffer(Device_capability, - Genode::Ram_dataspace_capability) = 0; + virtual void free_dma_buffer(Genode::Ram_dataspace_capability) = 0; /********************* ** RPC declaration ** @@ -87,9 +85,9 @@ struct Pci::Session : Genode::Session GENODE_RPC_THROW(Rpc_alloc_dma_buffer, Genode::Ram_dataspace_capability, alloc_dma_buffer, GENODE_TYPE_LIST(Genode::Ram_session::Quota_exceeded), - Device_capability, Genode::size_t); + Genode::size_t); GENODE_RPC(Rpc_free_dma_buffer, void, free_dma_buffer, - Device_capability, Genode::Ram_dataspace_capability); + Genode::Ram_dataspace_capability); GENODE_RPC_INTERFACE(Rpc_first_device, Rpc_next_device, Rpc_release_device, Rpc_config_extended, diff --git a/repos/os/src/drivers/ahci/x86/ahci_device.h b/repos/os/src/drivers/ahci/x86/ahci_device.h index db50d1d14..ae74cc926 100644 --- a/repos/os/src/drivers/ahci/x86/ahci_device.h +++ b/repos/os/src/drivers/ahci/x86/ahci_device.h @@ -40,7 +40,6 @@ class Ahci_device : public Ahci_device_base ::Pci::Connection &_pci; ::Pci::Device_client *_pci_device; - ::Pci::Device_capability _pci_device_cap; /** * Return next PCI device @@ -188,8 +187,6 @@ class Ahci_device : public Ahci_device_base device->_irq->sigh(cap); device->_irq->ack_irq(); - /* remember pci_device to be able to allocate ram memory which is dma able */ - device->_pci_device_cap = device_cap; device->_pci_device = pci_device; /* trigger assignment of pci device to the ahci driver */ pci.config_extended(device_cap); @@ -208,10 +205,10 @@ class Ahci_device : public Ahci_device_base } Ram_dataspace_capability alloc_dma_buffer(size_t size) { - return _pci.alloc_dma_buffer(_pci_device_cap, size); } + return _pci.alloc_dma_buffer(size); } void free_dma_buffer(Ram_dataspace_capability cap) { - return _pci.free_dma_buffer(_pci_device_cap, cap); } + return _pci.free_dma_buffer(cap); } }; #endif /* _AHCI_DEVICE_H_ */ diff --git a/repos/os/src/drivers/pci/pci_session_component.h b/repos/os/src/drivers/pci/pci_session_component.h index c32bea8ca..9db1e4084 100644 --- a/repos/os/src/drivers/pci/pci_session_component.h +++ b/repos/os/src/drivers/pci/pci_session_component.h @@ -315,8 +315,7 @@ namespace Pci { */ typedef Genode::Ram_dataspace_capability Ram_capability; - Ram_capability alloc_dma_buffer(Device_capability device_cap, - Genode::size_t size) + Ram_capability alloc_dma_buffer(Genode::size_t size) { if (Genode::env()->ram_session()->transfer_quota(_ram->cap(), size)) @@ -331,7 +330,7 @@ namespace Pci { return ram; } - void free_dma_buffer(Device_capability, Ram_capability ram) + void free_dma_buffer(Ram_capability ram) { if (ram.valid()) _ram->free(ram); diff --git a/repos/os/src/lib/dde_kit/pci_tree.h b/repos/os/src/lib/dde_kit/pci_tree.h index 60da22726..8498f4829 100644 --- a/repos/os/src/lib/dde_kit/pci_tree.h +++ b/repos/os/src/lib/dde_kit/pci_tree.h @@ -126,7 +126,7 @@ namespace Dde_kit { { /* trigger that the device gets assigned to this driver */ pci_drv.config_extended(_device); - return pci_drv.alloc_dma_buffer(_device, size); + return pci_drv.alloc_dma_buffer(size); } };