diff --git a/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc b/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc
deleted file mode 100644
index 5bf1bcd4d7..0000000000
--- a/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * \brief PCI device handling
- * \author Sebastian Sumpf
- * \date 2016-04-25
- */
-
-/*
- * Copyright (C) 2016-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-/* Genode includes */
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-
-
-/**
- * Quirks
- */
-extern "C" void __pci_fixup_quirk_usb_early_handoff(void *data);
-
-
-/**
- * List of pci devices from platform driver
- */
-class Pci_dev_list
-{
- private:
-
- struct Element : public Lx_kit::List::Element
- {
- Platform::Device_capability cap;
-
- Element(Platform::Device_capability cap) : cap(cap) { }
- };
-
- Lx_kit::List _pci_caps;
-
- public:
-
- Pci_dev_list()
- {
- /*
- * Obtain first device, the operation may exceed the session quota.
- * So we use the 'with_upgrade' mechanism.
- */
- Platform::Device_capability cap =
- Lx::pci()->with_upgrade([&] () {
- return Lx::pci()->first_device(); });
-
- /*
- * Iterate over the devices of the platform session.
- */
- while (cap.valid()) {
-
- /*
- * Keep PCI devices in natural bus order. Otherwise on a Lenovo
- * ThinkCentre M57p, the system locks up when the UHCI
- * controller BIOS handoff (disabling bit 4 in the LEGSUP
- * register) for the controller with PCI BDF 00:1d:2 is
- * attempted before the handoff for the controller with BDF
- * 00:1a:0.
- */
- _pci_caps.append(new (Lx::Malloc::mem()) Element(cap));
-
- /* try next one. Upgrade session quota on demand.*/
- Lx::pci()->with_upgrade([&] () {
- cap = Lx::pci()->next_device(cap); });
- }
- }
-
- template
- void for_each_pci_device(FUNC const &func)
- {
- for (Element *e = _pci_caps.first(); e; e = e->next())
- func(e->cap);
- }
-};
-
-
-Pci_dev_list *pci_dev_list()
-{
- static Pci_dev_list _list;
- return &_list;
-}
-
-
-extern "C" int pci_register_driver(struct pci_driver *driver)
-{
- driver->driver.name = driver->name;
-
- pci_device_id const *id_table = driver->id_table;
- if (!id_table)
- return -ENODEV;
-
- using namespace Genode;
-
- bool found = false;
-
- auto lamda = [&] (Platform::Device_capability cap) {
-
- Platform::Device_client client(cap);
-
- /* request device ID from platform driver */
- unsigned const class_code = client.class_code();
-
- /* look if we find the device ID in the driver's 'id_table' */
- pci_device_id const *matching_id = nullptr;
- for (pci_device_id const *id = id_table; id->device; id++) {
-
- lx_log(DEBUG_PCI,"idclass: %x idclassm: %x devclass %x", id->class_,
- id->class_mask, class_code);
-
- /* check for drivers that support any device for a given class */
- if (id->device != (unsigned)PCI_ANY_ID || !id->class_mask)
- continue;
-
- if ((id->class_ & id->class_mask) == (class_code & id->class_mask)) {
- matching_id = id;
- break;
- }
- }
-
- /* skip device that is not handled by driver */
- if (!matching_id)
- return false;
-
- /* create 'pci_dev' struct for matching device */
- Lx::Pci_dev *pci_dev = new (Lx::Malloc::mem()) Lx::Pci_dev(cap);
-
- /* enable ioremap to work */
- Lx::pci_dev_registry()->insert(pci_dev);
-
- /* register driver at the 'pci_dev' struct */
- pci_dev->dev.driver = &driver->driver;
-
- /*
- * This quirk handles device handoff from BIOS, since the BIOS may still
- * access the USB controller after bootup. For this the ext cap register of
- * the PCI config space is checked
- */
- if (Lx_kit::env().config_rom().xml().attribute_value("bios_handoff", true))
- __pci_fixup_quirk_usb_early_handoff(pci_dev);
-
- /* call probe function of the Linux driver */
- if (driver->probe(pci_dev, matching_id)) {
-
- /* if the probing failed, revert the creation of 'pci_dev' */
- pci_dev_put(pci_dev);
- return false;
- }
-
- found = true;
-
- /* multiple device support continue */
- return true;
- };
-
- pci_dev_list()->for_each_pci_device(lamda);
-
- return found ? 0 : -ENODEV;
-}
-
-
-/***********************
- ** linux/interrupt.h **
- ***********************/
-
-int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
- const char *name, void *dev)
-{
- for (Lx::Pci_dev *pci_dev = Lx::pci_dev_registry()->first(); pci_dev; pci_dev = pci_dev->next())
- if (pci_dev->irq == irq) {
- Genode::Irq_session_client is(pci_dev->client().irq(0));
- if ((is.info().type != Genode::Irq_session::Info::MSI)
- && !flags) return 1;
- Lx::Irq::irq().request_irq(is.rpc_cap(), irq, handler, dev);
- return 0;
- }
-
- return -ENODEV;
-}
-
-
-/*********************************
- ** Platform backend alloc init **
- *********************************/
-
-void backend_alloc_init(Genode::Env &env, Genode::Ram_allocator &ram,
- Genode::Allocator &alloc)
-{
- Lx::pci_init(env, ram, alloc);
-}
-
-
-extern "C" void module_ehci_hcd_init();
-extern "C" void module_ehci_pci_init();
-extern "C" void module_ohci_hcd_mod_init();
-extern "C" void module_ohci_pci_init();
-extern "C" void module_uhci_hcd_init();
-extern "C" void module_xhci_hcd_init();
-extern "C" void module_xhci_pci_init();
-
-void platform_hcd_init(Genode::Env &, Services *s)
-{
- if (s->xhci) {
- module_xhci_hcd_init();
- module_xhci_pci_init();
- }
-
- if (s->ehci) {
- /* ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after */
- module_ehci_hcd_init();
- module_ehci_pci_init();
- }
-
- if (s->ohci) {
- module_ohci_hcd_mod_init();
- module_ohci_pci_init();
- }
-
- if (s->uhci) {
- module_uhci_hcd_init();
- }
-}
diff --git a/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc b/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc
deleted file mode 100644
index 71cd68ac4c..0000000000
--- a/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-include $(REP_DIR)/src/drivers/usb_host/target.inc
-
-TARGET = legacy_pc_usb_host_drv
-
-INC_DIR += $(REP_DIR)/src_drivers/usb_host/spec/x86
-INC_DIR += $(REP_DIR)/src/include/spec/x86
-
-SRC_C += usb/core/hcd-pci.c
-SRC_C += usb/host/ehci-pci.c
-SRC_C += usb/host/ohci-hcd.c
-SRC_C += usb/host/ohci-pci.c
-SRC_C += usb/host/pci-quirks.c
-SRC_C += usb/host/uhci-hcd.c
-SRC_C += usb/host/xhci-pci.c
-
-SRC_CC += lx_kit/mapped_io_mem_range.cc
-
-SRC_CC += spec/x86/platform.cc
-
-CC_OPT += -DCONFIG_PCI=1
-CC_OPT += -DCONFIG_USB_PCI=1
-CC_OPT += -DCONFIG_USB_EHCI_HCD=1
-CC_OPT += -DCONFIG_USB_OHCI_HCD=1
-CC_OPT += -DCONFIG_USB_UHCI_HCD=1
-CC_OPT += -DCONFIG_USB_XHCI_HCD=1
diff --git a/repos/dde_linux/src/drivers/usb_host/spec/x86_32/target.mk b/repos/dde_linux/src/drivers/usb_host/spec/x86_32/target.mk
deleted file mode 100644
index 7f8739b0e5..0000000000
--- a/repos/dde_linux/src/drivers/usb_host/spec/x86_32/target.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-include $(REP_DIR)/src/drivers/usb_host/spec/x86/target.inc
-
-REQUIRES = x86_32
-INC_DIR += $(REP_DIR)/src/include/spec/x86_32
diff --git a/repos/dde_linux/src/drivers/usb_host/spec/x86_64/target.mk b/repos/dde_linux/src/drivers/usb_host/spec/x86_64/target.mk
deleted file mode 100644
index ce38422e33..0000000000
--- a/repos/dde_linux/src/drivers/usb_host/spec/x86_64/target.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-include $(REP_DIR)/src/drivers/usb_host/spec/x86/target.inc
-
-REQUIRES = x86_64
-INC_DIR += $(REP_DIR)/src/include/spec/x86_64
diff --git a/repos/dde_linux/src/include/legacy/lx_emul/impl/io.h b/repos/dde_linux/src/include/legacy/lx_emul/impl/io.h
deleted file mode 100644
index 335f4e54b4..0000000000
--- a/repos/dde_linux/src/include/legacy/lx_emul/impl/io.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * \brief Implementation of linux/io.h
- * \author Norman Feske
- * \date 2015-09-09
- */
-
-/*
- * Copyright (C) 2015-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-/* Linux kit includes */
-#include
-#include
-
-
-void *ioremap(phys_addr_t phys_addr, unsigned long size)
-{
- return Lx::ioremap(phys_addr, size, Genode::UNCACHED);
-}
-
-
-void *ioremap_wc(resource_size_t phys_addr, unsigned long size)
-{
- return Lx::ioremap(phys_addr, size, Genode::WRITE_COMBINED);
-}
-
-
-/**********************
- ** asm-generic/io.h **
- **********************/
-
-void outb(u8 value, u32 port) { Lx::pci_dev_registry()->io_write (port, value); }
-void outw(u16 value, u32 port) { Lx::pci_dev_registry()->io_write(port, value); }
-void outl(u32 value, u32 port) { Lx::pci_dev_registry()->io_write(port, value); }
-
-u8 inb(u32 port) { return Lx::pci_dev_registry()->io_read (port); }
-u16 inw(u32 port) { return Lx::pci_dev_registry()->io_read(port); }
-u32 inl(u32 port) { return Lx::pci_dev_registry()->io_read(port); }
diff --git a/repos/dde_linux/src/include/legacy/lx_emul/impl/pci.h b/repos/dde_linux/src/include/legacy/lx_emul/impl/pci.h
deleted file mode 100644
index 8272ea464f..0000000000
--- a/repos/dde_linux/src/include/legacy/lx_emul/impl/pci.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * \brief Implementation of linux/pci.h
- * \author Norman Feske
- * \date 2015-09-09
- */
-
-/*
- * Copyright (C) 2015-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-/* Linux kit includes */
-#include
-#include
-#include
-
-#include
-
-
-extern "C" int pci_register_driver(struct pci_driver *driver)
-{
- driver->driver.name = driver->name;
-
- pci_device_id const *id_table = driver->id_table;
- if (!id_table)
- return -ENODEV;
-
- using namespace Genode;
-
- Lx::Pci_dev *pci_dev = nullptr;
-
- auto lamda = [&] (Platform::Device_capability cap) {
-
- Platform::Device_client client(cap);
-
- /* request device ID from platform driver */
- unsigned const device_id = client.device_id();
- unsigned const subdevice_id = client.config_read(0x2e,
- Platform::Device::ACCESS_16BIT);
-
- /* look if we find the device ID in the driver's 'id_table' */
- pci_device_id const *matching_id = nullptr;
- for (pci_device_id const *id = id_table; id->device; id++) {
- if ((id->device == device_id) &&
- (id->subdevice == (unsigned int)PCI_ANY_ID ||
- id->subdevice == subdevice_id)) {
- matching_id = id;
- break;
- }
- }
-
- /* skip device that is not handled by driver */
- if (!matching_id)
- return false;
-
- /* create 'pci_dev' struct for matching device */
- pci_dev = new (&Lx_kit::env().heap()) Lx::Pci_dev(cap);
-
- /* enable ioremap to work */
- Lx::pci_dev_registry()->insert(pci_dev);
-
- /* register driver at the 'pci_dev' struct */
- pci_dev->dev.driver = &driver->driver;
-
- /* call probe function of the Linux driver */
- if (driver->probe(pci_dev, matching_id)) {
-
- /* if the probing failed, revert the creation of 'pci_dev' */
- pci_dev_put(pci_dev);
- pci_dev = nullptr;
- return false;
- }
-
- /* aquire the device, stop iterating */
- return true;
- };
-
- Lx::for_each_pci_device(lamda);
-
- return pci_dev ? 0 : -ENODEV;
-}
diff --git a/repos/dde_linux/src/include/legacy/lx_emul/impl/pci_resource.h b/repos/dde_linux/src/include/legacy/lx_emul/impl/pci_resource.h
deleted file mode 100644
index cb2a8edfbe..0000000000
--- a/repos/dde_linux/src/include/legacy/lx_emul/impl/pci_resource.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * \brief Implementation of linux/pci.h
- * \author Norman Feske
- * \date 2015-09-09
- */
-
-/*
- * Copyright (C) 2015-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-/* Linux kit includes */
-#include
-#include
-
-
-extern "C" size_t pci_resource_start(struct pci_dev *dev, unsigned bar)
-{
- if (bar >= DEVICE_COUNT_RESOURCE)
- return 0;
-
- return dev->resource[bar].start;
-}
-
-extern "C" size_t pci_resource_end(struct pci_dev *dev, unsigned bar)
-{
- if (bar >= DEVICE_COUNT_RESOURCE)
- return 0;
-
- return dev->resource[bar].end;
-}
-
-extern "C" size_t pci_resource_len(struct pci_dev *dev, unsigned bar)
-{
- size_t start = pci_resource_start(dev, bar);
-
- if (!start)
- return 0;
-
- return (dev->resource[bar].end - start) + 1;
-}
-
-
-extern "C" void *pci_ioremap_bar(struct pci_dev *dev, int bar)
-{
- using namespace Genode;
-
- if (bar >= DEVICE_COUNT_RESOURCE || bar < 0)
- return 0;
-
- return Lx::ioremap(pci_resource_start(dev, bar),
- pci_resource_len(dev, bar),
- Genode::UNCACHED);
-}
-
-
-extern "C" unsigned int pci_resource_flags(struct pci_dev *dev, unsigned bar)
-{
- if (bar >= DEVICE_COUNT_RESOURCE)
- return 0;
-
- return dev->resource[bar].flags;
-}
-
-
-extern "C" int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int, int where, u8 *val)
-{
- Lx::Pci_dev *dev = (Lx::Pci_dev *)bus;
- dev->config_read(where, val);
- return 0;
-}
-
-
-extern "C" int pci_bus_read_config_word(struct pci_bus *bus, unsigned int, int where, u16 *val)
-{
- Lx::Pci_dev *dev = (Lx::Pci_dev *)bus;
- dev->config_read(where, val);
- return 0;
-}
-
-
-extern "C" int pci_bus_read_config_dword(struct pci_bus *bus, unsigned int, int where, u32 *val)
-{
- Lx::Pci_dev *dev = (Lx::Pci_dev *)bus;
- dev->config_read(where, val);
- return 0;
-}
-
-
-extern "C" int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int, int where, u8 val)
-{
- Lx::Pci_dev *dev = (Lx::Pci_dev *)bus;
- dev->config_write(where, val);
- return 0;
-}
-
-
-extern "C" int pci_bus_write_config_word(struct pci_bus *bus, unsigned int, int where, u16 val)
-{
- Lx::Pci_dev *dev = (Lx::Pci_dev *)bus;
- dev->config_write(where, val);
- return 0;
-}
-
-
-extern "C" int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int, int where, u32 val)
-{
- Lx::Pci_dev *dev = (Lx::Pci_dev *)bus;
- dev->config_write(where, val);
- return 0;
-}
-
-
-extern "C" const char *pci_name(const struct pci_dev *pdev)
-{
- /* simply return driver name */
- return "dummy";
-}
-
-
-extern "C" int pcie_capability_read_word(struct pci_dev *pdev, int pos, u16 *val)
-{
- Lx::Pci_dev *dev = (Lx::Pci_dev *)pdev->bus;
- switch (pos) {
- case PCI_EXP_LNKCTL:
- dev->config_read(pdev->pcie_cap + PCI_EXP_LNKCTL, val);
- return 0;
- break;
- default:
- break;
- }
-
- return 1;
-}
diff --git a/repos/dde_linux/src/include/legacy/lx_kit/internal/pci_dev.h b/repos/dde_linux/src/include/legacy/lx_kit/internal/pci_dev.h
deleted file mode 100644
index da19e514cb..0000000000
--- a/repos/dde_linux/src/include/legacy/lx_kit/internal/pci_dev.h
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * \brief Emulate 'pci_dev' structure
- * \author Sebastian Sumpf
- * \author Josef Soentgen
- * \author Norman Feske
- * \date 2014-10-10
- */
-
-/*
- * Copyright (C) 2014-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-#ifndef _LX_KIT__INTERNAL__PCI_DEV_H_
-#define _LX_KIT__INTERNAL__PCI_DEV_H_
-
-/* Genode includes */
-#include
-#include
-#include
-#include
-#include
-#include
-
-/* Linux emulation environment includes */
-#include
-#include
-
-namespace Lx {
-
- class Pci_dev;
-
- /**
- * Return singleton 'Platform::Connection'
- *
- * Implementation must be provided by the driver.
- */
- Platform::Connection *pci();
-
- template
- static inline void for_each_pci_device(FUNC const &func,
- unsigned const device_class = 0,
- unsigned const class_mask = 0);
-}
-
-
-class Lx::Pci_dev : public pci_dev, public Lx_kit::List::Element
-{
- private:
-
- bool const verbose = true;
-
- Platform::Device_client _client;
-
- Io_port _io_port;
- Genode::Io_mem_session_capability _io_mem[DEVICE_COUNT_RESOURCE];
-
- /* offset used in PCI config space */
- enum Pci_config { IRQ = 0x3c, REV = 0x8, CMD = 0x4,
- STATUS = 0x4, CAP = 0x34 };
- enum Pci_cap { CAP_LIST = 0x10, CAP_EXP = 0x10,
- CAP_EXP_FLAGS = 0x2, CAP_EXP_DEVCAP = 0x4 };
-
- template
- Platform::Device::Access_size _access_size(T t)
- {
- switch (sizeof(T))
- {
- case 1:
- return Platform::Device::ACCESS_8BIT;
- case 2:
- return Platform::Device::ACCESS_16BIT;
- default:
- return Platform::Device::ACCESS_32BIT;
- }
- }
-
- static unsigned _virq_num()
- {
- static unsigned instance = 128;
- return ++instance;
- }
-
- public:
-
- /**
- * Constructor
- */
- Pci_dev(Platform::Device_capability cap)
- :
- _client(cap)
- {
- using namespace Platform;
-
- Genode::memset(static_cast(this), 0, sizeof(pci_dev));
-
- this->vendor = _client.vendor_id();
- this->device = _client.device_id();
- this->class_ = _client.class_code();
- this->revision = _client.config_read(REV, Device::ACCESS_8BIT);
-
- /* dummy dma mask used to mark device as DMA capable */
- this->dev._dma_mask_buf = ~(u64)0;
- this->dev.dma_mask = &this->dev._dma_mask_buf;
- this->dev.coherent_dma_mask = ~0;
-
- enum { USB_SUB_CLASS = 0xc0300 };
-
- /*
- * For USB we generate virtual IRQ numbers so we can identify the device
- * later on
- */
- if ((class_ & ~0xffU) == USB_SUB_CLASS)
- this->irq = _virq_num();
- else
- /* read interrupt line */
- this->irq = _client.config_read(IRQ, Device::ACCESS_8BIT);
-
-
- /* hide ourselfs in bus structure */
- this->bus = (struct pci_bus *)this;
-
- /* setup resources */
- bool io = false;
- bool mem = false;
- for (int i = 0; i < Device::NUM_RESOURCES; i++) {
- Device::Resource res = _client.resource(i);
- if (res.type() == Device::Resource::INVALID)
- continue;
-
- this->resource[i].start = res.base();
- this->resource[i].end = res.base() + res.size() - 1;
-
- unsigned flags = 0;
- if (res.type() == Device::Resource::IO) flags |= IORESOURCE_IO;
- if (res.type() == Device::Resource::MEMORY) flags |= IORESOURCE_MEM;
- this->resource[i].flags = flags;
-
- /* request port I/O session */
- if (res.type() == Device::Resource::IO) {
- uint8_t const virt_bar = _client.phys_bar_to_virt(i);
- _io_port.session(res.base(), res.size(), _client.io_port(virt_bar));
- io = true;
- }
- if (res.type() == Device::Resource::MEMORY)
- mem = true;
- }
-
- /* enable bus master, memory and io bits */
- uint16_t cmd = _client.config_read(CMD, Device::ACCESS_16BIT);
- cmd |= io ? 0x1 : 0;
- cmd |= mem ? 0x2 : 0;
-
- /* enable bus master */
- cmd |= 0x4;
- config_write(CMD, cmd);
-
- /* get pci express capability */
- this->pcie_cap = 0;
- uint16_t status = _client.config_read(STATUS, Device::ACCESS_32BIT) >> 16;
- if (status & CAP_LIST) {
- uint8_t offset = _client.config_read(CAP, Device::ACCESS_8BIT);
- while (offset != 0x00) {
- uint8_t value = _client.config_read(offset, Device::ACCESS_8BIT);
-
- if (value == CAP_EXP)
- this->pcie_cap = offset;
-
- offset = _client.config_read(offset + 1, Device::ACCESS_8BIT);
- }
- }
-
- if (this->pcie_cap) {
- uint16_t reg_val = _client.config_read(this->pcie_cap, Device::ACCESS_16BIT);
- this->pcie_flags_reg = reg_val;
- }
- }
-
- /**
- * Read/write data from/to config space
- */
- template
- void config_read(unsigned int devfn, T *val)
- {
- *val = _client.config_read(devfn, _access_size(*val));
- }
-
- template
- void config_write(unsigned int devfn, T val)
- {
- pci()->with_upgrade([&] () {
- _client.config_write(devfn, val, _access_size(val)); });
- }
-
- Platform::Device &client() { return _client; }
-
- Io_port &io_port() { return _io_port; }
-
- Genode::Io_mem_session_capability io_mem(unsigned bar, Genode::Cache cache)
- {
- if (bar >= DEVICE_COUNT_RESOURCE)
- return Genode::Io_mem_session_capability();
-
- if (!_io_mem[bar].valid())
- _io_mem[bar] = _client.io_mem(_client.phys_bar_to_virt(bar),
- cache);
-
- return _io_mem[bar];
- }
-};
-
-
-/**
- * Call functor for each available physical PCI device
- *
- * The functor is called with the device capability as argument. If
- * returns true if we can stop iterating. In this case, the device
- * is expected to be acquired by the driver. All other devices are
- * released at the platform driver.
- */
-template
-void Lx::for_each_pci_device(FUNC const &func, unsigned const device_class,
- unsigned const class_mask)
-{
- /*
- * Obtain first device, the operation may exceed the session quota.
- * So we use the 'retry' mechanism.
- */
- Platform::Device_capability cap =
- Lx::pci()->with_upgrade([&] () {
- return Lx::pci()->first_device(device_class, class_mask); });
-
- /*
- * Iterate over the devices of the platform session.
- */
- while (cap.valid()) {
-
- /*
- * Call functor, stop iterating depending on its return value.
- */
- if (func(cap))
- break;
-
- /*
- * Release current device and try next one. Upgrade session
- * quota on demand.
- */
- Platform::Device_capability next_cap =
- Lx::pci()->with_upgrade([&] () {
- return pci()->next_device(cap, device_class, class_mask); });
-
- Lx::pci()->release_device(cap);
- cap = next_cap;
- }
-}
-
-#endif /* _LX_KIT__INTERNAL__PCI_DEV_H_ */
diff --git a/repos/dde_linux/src/include/legacy/lx_kit/pci_dev_registry.h b/repos/dde_linux/src/include/legacy/lx_kit/pci_dev_registry.h
deleted file mode 100644
index 063fd23d47..0000000000
--- a/repos/dde_linux/src/include/legacy/lx_kit/pci_dev_registry.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * \brief Registry of PCI devices
- * \author Norman Feske
- * \date 2015-09-09
- */
-
-/*
- * Copyright (C) 2015-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-#ifndef _LX_KIT__PCI_DEV_REGISTRY_H_
-#define _LX_KIT__PCI_DEV_REGISTRY_H_
-
-/* Linux emulation environment includes */
-#include
-#include
-#include
-
-namespace Lx {
-
- class Pci_dev_registry;
-
- /**
- * Return singleton 'Pci_dev_registry' object
- *
- * Implementation must be provided by the driver.
- */
- Pci_dev_registry *pci_dev_registry(Genode::Env *env = nullptr);
-}
-
-
-class Lx::Pci_dev_registry
-{
- private:
-
- Lx_kit::List _devs;
- Genode::Env &_env;
-
- public:
-
- Pci_dev_registry(Genode::Env &env) : _env(env) { }
-
- void insert(Pci_dev *pci_dev)
- {
- /*
- * Keep PCI devices in natural bus order. Otherwise on a Lenovo
- * ThinkCentre M57p, the system locks up when the UHCI controller
- * BIOS handoff (disabling bit 4 in the LEGSUP register) for the
- * controller with PCI BDF 00:1d:2 is attempted before the handoff
- * for the controller with BDF 00:1a:0.
- */
- _devs.append(pci_dev);
- }
-
- void remove(Pci_dev *pci_dev)
- {
- _devs.remove(pci_dev);
- }
-
- Pci_dev* first() { return _devs.first(); }
-
- Genode::Io_mem_dataspace_capability io_mem(Genode::addr_t phys,
- Genode::Cache cache,
- Genode::size_t size,
- Genode::addr_t &offset)
- {
- enum { PCI_ROM_RESOURCE = 6 };
-
- for (Pci_dev *d = _devs.first(); d; d = d->next()) {
-
- unsigned bar = 0;
- for (; bar < PCI_ROM_RESOURCE; bar++) {
- if ((pci_resource_flags(d, bar) & IORESOURCE_MEM) &&
- (pci_resource_start(d, bar) <= phys) &&
- (pci_resource_end(d, bar) >= (phys+size-1)))
- break;
- }
- if (bar >= PCI_ROM_RESOURCE)
- continue;
-
- /* offset from the beginning of the PCI resource */
- offset = phys - pci_resource_start(d, bar);
-
- Genode::Io_mem_session_capability io_mem_cap =
- d->io_mem(bar, cache);
-
- return Genode::Io_mem_session_client(io_mem_cap).dataspace();
- }
-
- Genode::error("device using I/O memory of address ",
- Genode::Hex(phys), " is unknown");
- return Genode::Io_mem_dataspace_capability();
- }
-
- template
- T io_read(unsigned port)
- {
- /* try I/O access on all PCI devices */
- for (Pci_dev *d = _devs.first(); d; d = d->next()) {
- T value = 0;
- if (d->io_port().in(port, &value))
- return value;
- }
-
- try {
- Genode::Io_port_connection iox(_env, port, sizeof(T));
- switch (sizeof(T)) {
- case 1:
- return iox.inb(port);
- case 2:
- return iox.inw(port);
- case 4:
- return iox.inl(port);
- }
- } catch (...) {
- Genode::error("unknown exception io_read");
- }
-
- Genode::warning("I/O port(", port, ") read failed");
-
- return (T)~0U;
- }
-
- template
- void io_write(unsigned port, T value)
- {
- /* try I/O access on all PCI devices, return on first success */
- for (Pci_dev *d = _devs.first(); d; d = d->next()) {
- if (d->io_port().out(port, value))
- return;
- }
-
- try {
- Genode::Io_port_connection iox(_env, port, sizeof(T));
- switch (sizeof(T)) {
- case 1:
- iox.outb(port, value);
- return;
- case 2:
- iox.outw(port, value);
- return;
- case 4:
- iox.outl(port, value);
- return;
- }
- } catch (...) {
- Genode::error("unknown exception io_write");
- }
-
- Genode::warning("I/O port(", port, ") write failed");
- }
-};
-
-#endif /* _LX_KIT__PCI_DEV_REGISTRY_H_ */
diff --git a/repos/dde_linux/src/lib/legacy/lx_kit/mapped_io_mem_range.cc b/repos/dde_linux/src/lib/legacy/lx_kit/mapped_io_mem_range.cc
deleted file mode 100644
index b5558f4907..0000000000
--- a/repos/dde_linux/src/lib/legacy/lx_kit/mapped_io_mem_range.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * \brief Representation of a locally-mapped MMIO range
- * \author Norman Feske
- * \date 2015-09-09
- */
-
-/*
- * Copyright (C) 2015-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-/* Genode includes */
-#include
-#include
-#include
-#include
-
-/* Linux emulation environment */
-#include
-
-/* Linux emulation environment includes */
-#include
-#include
-#include
-#include
-#include
-
-namespace Lx_kit { class Mapped_io_mem_range; }
-
-
-/**
- * Representation of a locally-mapped MMIO range
- *
- * This class is supposed to be a private utility to support 'ioremap'.
- */
-class Lx_kit::Mapped_io_mem_range : public Lx_kit::List::Element
-{
- private:
-
- Genode::size_t const _size;
- Genode::addr_t const _phys;
- Genode::Region_map_client _region_map;
- Genode::Attached_dataspace _ds;
- Genode::addr_t const _virt;
-
- public:
-
- Mapped_io_mem_range(Genode::Env &env,
- Genode::Rm_connection &rm,
- Genode::addr_t phys, Genode::size_t size,
- Genode::Io_mem_dataspace_capability ds_cap,
- Genode::addr_t offset)
- :
- _size(size),
- _phys(phys),
- _region_map(rm.create(size)),
- _ds(env.rm(), _region_map.dataspace()),
- _virt((Genode::addr_t)_ds.local_addr() | (phys &0xfffUL))
- {
- _region_map.attach_at(ds_cap, 0, size, offset);
- }
-
- Genode::addr_t phys() const { return _phys; }
- Genode::addr_t virt() const { return _virt; }
- Genode::Dataspace_capability cap() const { return _ds.cap(); }
-
- /**
- * Return true if the mapped range contains the specified sub range
- */
- bool phys_range(Genode::addr_t phys, Genode::size_t size) const
- {
- return (phys >= _phys) && (phys + size - 1 <= _phys + _size - 1);
- }
-
- /**
- * Return true if the mapped range contains the specified sub range
- */
- bool virt_range(Genode::addr_t virt, Genode::size_t size) const
- {
- return (virt >= _virt) && (virt + size - 1 <= _virt + _size - 1);
- }
-};
-
-
-static Lx_kit::List ranges;
-
-
-/************************************************
- ** Lx_kit::Mapped_io_mem_range implementation **
- ************************************************/
-
-static Genode::Constructible _global_rm;
-
-
-void *Lx::ioremap(addr_t phys_addr, unsigned long size, Genode::Cache cache)
-{
- using namespace Genode;
-
- /* search for the requested region within the already mapped ranges */
- for (Lx_kit::Mapped_io_mem_range *r = ranges.first(); r; r = r->next()) {
-
- if (r->phys_range(phys_addr, size)) {
- void * const virt = (void *)(r->virt() + phys_addr - r->phys());
- log("ioremap: return sub range phys ", Hex(phys_addr), " "
- "(size ", size, ") to virt ", virt);
- return virt;
- }
- }
-
- addr_t offset = 0;
- Io_mem_dataspace_capability ds_cap =
- Lx::pci_dev_registry()->io_mem(phys_addr, cache, size, offset);
-
- if (!ds_cap.valid()) {
- error("failed to request I/O memory: ",
- Hex_range(phys_addr, size));
- return nullptr;
- }
-
- if (!_global_rm.constructed()) {
- _global_rm.construct(Lx_kit::env().env());
- }
-
- Lx_kit::Mapped_io_mem_range *io_mem = nullptr;
-
- retry(
- [&] () {
- io_mem = new (&Lx_kit::env().heap())
- Lx_kit::Mapped_io_mem_range(Lx_kit::env().env(), *_global_rm,
- phys_addr, size, ds_cap, offset);
- },
- [&] () {
- _global_rm->upgrade_ram(16384);
- },
- 10
- );
-
- ranges.insert(io_mem);
-
- log("ioremap: mapped phys ", Hex(phys_addr), " (size ", size, ") "
- "to virt ", Hex(io_mem->virt()));
-
- return (void *)io_mem->virt();
-}
-
-void Lx::iounmap(volatile void * virt)
-{
- using namespace Genode;
-
- /* search for the requested region within the already mapped ranges */
- for (Lx_kit::Mapped_io_mem_range *r = ranges.first(); r; r = r->next()) {
-
- if (r->virt() == (addr_t)virt) {
- ranges.remove(r);
- destroy(&Lx_kit::env().heap(), r);
- return;
- }
- }
-}
-
-Genode::Dataspace_capability
-Lx::ioremap_lookup(Genode::addr_t virt_addr, Genode::size_t size)
-{
- /* search for the requested region within the already mapped ranges */
- for (Lx_kit::Mapped_io_mem_range *r = ranges.first(); r; r = r->next())
- if (r->virt_range(virt_addr, size))
- return r->cap();
-
- return Genode::Dataspace_capability();
-}
diff --git a/repos/dde_linux/src/lib/legacy/lx_kit/pci.cc b/repos/dde_linux/src/lib/legacy/lx_kit/pci.cc
deleted file mode 100644
index e94b58ba19..0000000000
--- a/repos/dde_linux/src/lib/legacy/lx_kit/pci.cc
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * \brief Backend allocator for DMA-capable memory
- * \author Sebastian Sumpf
- * \author Josef Soentgen
- * \author Norman Feske
- * \date 2014-10-10
- */
-
-/*
- * Copyright (C) 2014-2017 Genode Labs GmbH
- *
- * This file is distributed under the terms of the GNU General Public License
- * version 2.
- */
-
-/* Genode includes */
-#include
-#include
-
-/* XXX only because of struct pci_dev */
-#include
-
-/* Linux emulation environment includes */
-#include
-#include
-
-
-namespace Lx_kit {
-
- struct Memory_object_base;
- struct Ram_object;
- struct Dma_object;
-
- Genode::Object_pool memory_pool;
-};
-
-
-struct Lx_kit::Memory_object_base : Genode::Object_pool::Entry
-{
- Memory_object_base(Genode::Ram_dataspace_capability cap)
- : Genode::Object_pool::Entry(cap) {}
- virtual ~Memory_object_base() {};
-
- virtual void free() = 0;
-
- virtual Genode::addr_t dma_addr() const { return 0; }
-
- Genode::Ram_dataspace_capability ram_cap()
- {
- using namespace Genode;
- return reinterpret_cap_cast(cap());
- }
-};
-
-
-struct Lx_kit::Ram_object : Memory_object_base
-{
- Genode::Ram_allocator &_ram;
-
- Ram_object(Genode::Ram_allocator &ram,
- Genode::Ram_dataspace_capability cap)
- : Memory_object_base(cap), _ram(ram) {}
-
- void free() { _ram.free(ram_cap()); }
-};
-
-
-struct Lx_kit::Dma_object : Memory_object_base
-{
- Platform::Connection &_pci;
-
- Genode::addr_t const _dma_addr = _pci.dma_addr(ram_cap());
-
- Dma_object(Platform::Connection &pci,
- Genode::Ram_dataspace_capability cap)
- : Memory_object_base(cap), _pci(pci) { }
-
- void free() { _pci.free_dma_buffer(ram_cap()); }
-
- Genode::addr_t dma_addr() const override { return _dma_addr; }
-};
-
-
-/********************
- ** Pci singletons **
- ********************/
-
-static Genode::Constructible _global_pci;
-static Genode::Allocator *_global_md_alloc;
-static Genode::Ram_allocator *_global_ram;
-
-
-void Lx::pci_init(Genode::Env &env, Genode::Ram_allocator &ram,
- Genode::Allocator &md_alloc)
-{
- _global_pci.construct(env);
- _global_ram = &ram;
- _global_md_alloc = &md_alloc;
-
- Lx::pci_dev_registry(&env);
-}
-
-
-Platform::Connection *Lx::pci()
-{
- return &*_global_pci;
-}
-
-
-Lx::Pci_dev_registry *Lx::pci_dev_registry(Genode::Env *env)
-{
- static Lx::Pci_dev_registry _pci_dev_registry(*env);
- return &_pci_dev_registry;
-}
-
-
-/*********************************
- ** Lx::Backend_alloc interface **
- *********************************/
-
-Genode::Ram_dataspace_capability
-Lx::backend_alloc(Genode::addr_t size, Genode::Cache cache)
-{
- using namespace Genode;
- using namespace Lx_kit;
-
- Memory_object_base *obj;
- Genode::Ram_dataspace_capability cap;
- if (cache == CACHED) {
- cap = _global_ram->alloc(size);
- obj = new (_global_md_alloc) Ram_object(*_global_ram, cap);
- } else {
- Genode::size_t donate = size;
- cap = retry(
- [&] () {
- return retry(
- [&] () { return _global_pci->alloc_dma_buffer(size, UNCACHED); },
- [&] () { _global_pci->upgrade_caps(2); });
- },
- [&] () {
- _global_pci->upgrade_ram(donate);
- donate = donate * 2 > size ? 4096 : donate * 2;
- });
-
- obj = new (_global_md_alloc) Dma_object(*_global_pci, cap);
- }
-
- memory_pool.insert(obj);
- return cap;
-}
-
-
-void Lx::backend_free(Genode::Ram_dataspace_capability cap)
-{
- using namespace Genode;
- using namespace Lx_kit;
-
- Memory_object_base *object;
- memory_pool.apply(cap, [&] (Memory_object_base *obj) {
- object = obj;
- if (!object) { return; }
-
- object->free();
- memory_pool.remove(object);
- });
- destroy(_global_md_alloc, object);
-}
-
-
-Genode::addr_t Lx::backend_dma_addr(Genode::Ram_dataspace_capability cap)
-{
- using namespace Genode;
- using namespace Lx_kit;
-
- addr_t result = 0;
- memory_pool.apply(cap, [&] (Dma_object *obj_ptr) {
- if (obj_ptr)
- result = obj_ptr->dma_addr(); });
-
- return result;
-}