From 18d24eec7b0ac3611b337857bf6786e797446daf Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 20 Oct 2015 14:47:24 +0200 Subject: [PATCH] add missing .so files to noux_tool_chain.inc required by grep Issue #1040 --- .../platform/spec/x86/pci_session_component.h | 59 +++++++++++++------ repos/ports/run/noux_tool_chain.inc | 4 +- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/repos/os/src/drivers/platform/spec/x86/pci_session_component.h b/repos/os/src/drivers/platform/spec/x86/pci_session_component.h index 5acb705ee..3e12916cb 100644 --- a/repos/os/src/drivers/platform/spec/x86/pci_session_component.h +++ b/repos/os/src/drivers/platform/spec/x86/pci_session_component.h @@ -44,17 +44,36 @@ namespace Platform { class Platform::Rmrr : public Genode::List::Element { + public: + + class Bdf : public Genode::List::Element { + + private: + + Genode::uint8_t _bus, _dev, _func; + + public: + + Bdf(Genode::uint8_t bus, Genode::uint8_t dev, + Genode::uint8_t func) + : _bus(bus), _dev(dev), _func(func) { } + + bool match(Genode::uint8_t bus, Genode::uint8_t dev, + Genode::uint8_t func) { + return bus == _bus && dev == _dev && func == _func; } + }; + private: Genode::uint64_t _start, _end; Genode::Io_mem_dataspace_capability _cap; - Genode::uint8_t _bus, _dev, _func; + + Genode::List _bdf_list; public: - Rmrr(Genode::uint64_t start, Genode::uint64_t end, - Genode::uint8_t bus, Genode::uint8_t dev, Genode::uint8_t func) - : _start(start), _end(end), _bus(bus), _dev(dev), _func(func) + Rmrr(Genode::uint64_t start, Genode::uint64_t end) + : _start(start), _end(end) { } Genode::Io_mem_dataspace_capability match(Device_config config) { @@ -62,19 +81,24 @@ class Platform::Rmrr : public Genode::List::Element Genode::uint8_t device = config.device_number(); Genode::uint8_t function = config.function_number(); - if (!(_bus == bus && _dev == device && _func == function)) - return Genode::Io_mem_dataspace_capability(); + for (Bdf *bdf = _bdf_list.first(); bdf; bdf = bdf->next()) { + if (!bdf->match(bus, device, function)) + continue; + + if (_cap.valid()) + return _cap; + + Genode::Io_mem_connection io_mem(_start, _end - _start + 1); + io_mem.on_destruction(Genode::Io_mem_connection::KEEP_OPEN); + _cap = io_mem.dataspace(); - if (_cap.valid()) return _cap; - - Genode::Io_mem_connection io_mem(_start, _end - _start + 1); - io_mem.on_destruction(Genode::Io_mem_connection::KEEP_OPEN); - _cap = io_mem.dataspace(); - - return _cap; + } + return Genode::Io_mem_dataspace_capability(); } + void add(Bdf * bdf) { _bdf_list.insert(bdf); } + static Genode::List *list() { static Genode::List _list; @@ -780,6 +804,9 @@ class Platform::Root : public Genode::Root_component if (node.num_sub_nodes() == 0) throw 2; + Rmrr * rmrr = new (env()->heap()) Rmrr(mem_start, mem_end); + Rmrr::list()->insert(rmrr); + for (unsigned s = 0; s < node.num_sub_nodes(); s++) { Xml_node scope = node.sub_node(s); if (!scope.num_sub_nodes() || !scope.has_type("scope")) @@ -804,10 +831,8 @@ class Platform::Root : public Genode::Root_component Device::ACCESS_8BIT); } - Rmrr * rmrr = new (env()->heap()) Rmrr(mem_start, - mem_end, bus, - dev, func); - Rmrr::list()->insert(rmrr); + rmrr->add(new (env()->heap()) Rmrr::Bdf(bus, dev, + func)); } } diff --git a/repos/ports/run/noux_tool_chain.inc b/repos/ports/run/noux_tool_chain.inc index d7c06a4a0..ce90d6245 100644 --- a/repos/ports/run/noux_tool_chain.inc +++ b/repos/ports/run/noux_tool_chain.inc @@ -255,7 +255,9 @@ install_config $config # generic modules set boot_modules { core init timer ld.lib.so noux terminal ram_fs - libc.lib.so libm.lib.so libc_noux.lib.so ncurses.lib.so stdcxx.lib.so } + libc.lib.so libm.lib.so libc_noux.lib.so ncurses.lib.so stdcxx.lib.so + pcre.lib.so zlib.lib.so readline.lib.so +} append boot_modules { gmp.lib.so mpfr.lib.so mpc.lib.so }