diff --git a/repos/pc/src/lib/pc/lx_emul/shadow/fs/libfs.c b/repos/dde_linux/src/lib/lx_emul/shadow/fs/libfs.c similarity index 100% rename from repos/pc/src/lib/pc/lx_emul/shadow/fs/libfs.c rename to repos/dde_linux/src/lib/lx_emul/shadow/fs/libfs.c diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c index 2396407cdd..94f7365bab 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/dma/mapping.c @@ -125,3 +125,65 @@ void dma_unmap_sg_attrs(struct device * dev, sg->dma_address = 0; } } + + +dma_addr_t dma_map_page_attrs(struct device * dev, + struct page * page, + size_t offset, + size_t size, + enum dma_data_direction dir, + unsigned long attrs) +{ + dma_addr_t const dma_addr = page_to_phys(page); + unsigned long const virt_addr = (unsigned long)page_to_virt(page); + + lx_emul_mem_cache_clean_invalidate((void *)(virt_addr + offset), size); + return dma_addr + offset; +} + + +void dma_unmap_page_attrs(struct device * dev, + dma_addr_t addr, + size_t size, + enum dma_data_direction dir, + unsigned long attrs) +{ + unsigned long const virt_addr = lx_emul_mem_virt_addr((void*)addr); + + if (!virt_addr) + return; + + if (dir == DMA_FROM_DEVICE) + lx_emul_mem_cache_invalidate((void *)virt_addr, size); +} + + +void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, + size_t size, enum dma_data_direction dir) +{ + unsigned long const virt_addr = lx_emul_mem_virt_addr((void*)addr); + + if (!virt_addr) + return; + + lx_emul_mem_cache_invalidate((void *)virt_addr, size); +} + + +void dma_sync_single_for_device(struct device *dev, dma_addr_t addr, + size_t size, enum dma_data_direction dir) +{ + unsigned long const virt_addr = lx_emul_mem_virt_addr((void*)addr); + + if (!virt_addr) + return; + + lx_emul_mem_cache_clean_invalidate((void *)virt_addr, size); +} + + +int dma_supported(struct device * dev,u64 mask) +{ + /* do we need to evaluate the mask? */ + return 1; +} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c index 54468b8d03..3e5718af7f 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c @@ -279,3 +279,6 @@ int idle_cpu(int cpu) { return 1; } + + +void sched_set_fifo(struct task_struct * p) { } diff --git a/repos/pc/src/lib/pc/lx_emul/shadow/mm/dmapool.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/dmapool.c similarity index 100% rename from repos/pc/src/lib/pc/lx_emul/shadow/mm/dmapool.c rename to repos/dde_linux/src/lib/lx_emul/shadow/mm/dmapool.c diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/mm/page_alloc.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/page_alloc.c index b71812db0e..2388c3daba 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/mm/page_alloc.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/mm/page_alloc.c @@ -80,6 +80,7 @@ static struct page * lx_alloc_pages(unsigned const nr_pages) return page; } + /* * In earlier kernel versions, '__alloc_pages' was an inline function. */ @@ -96,3 +97,21 @@ void *alloc_pages_exact(size_t size, gfp_t gfp_mask) { return lx_alloc_pages(PAGE_ALIGN(size) / PAGE_SIZE)->virtual; } + + +void free_pages(unsigned long addr,unsigned int order) +{ + if (addr != 0ul) + __free_pages(virt_to_page((void *)addr), order); +} + + +unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) +{ + struct page *page = lx_alloc_pages(1u << order); + + if (!page) + return 0; + + return (unsigned long)page_address(page); +} diff --git a/repos/pc/src/lib/pc/lx_emul/vmalloc.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/vmalloc.c similarity index 100% rename from repos/pc/src/lib/pc/lx_emul/vmalloc.c rename to repos/dde_linux/src/lib/lx_emul/shadow/mm/vmalloc.c diff --git a/repos/pc/lib/import/import-pc_lx_emul.mk b/repos/pc/lib/import/import-pc_lx_emul.mk index bb49158009..1229a4e9f5 100644 --- a/repos/pc/lib/import/import-pc_lx_emul.mk +++ b/repos/pc/lib/import/import-pc_lx_emul.mk @@ -24,12 +24,15 @@ SRC_CC += lx_emul/io_mem.cc SRC_CC += lx_emul/io_port.cc SRC_CC += lx_emul/irq.cc SRC_CC += lx_emul/random.cc +SRC_C += lx_emul/shadow/fs/libfs.c SRC_C += lx_emul/shadow/kernel/dma/mapping.c SRC_C += lx_emul/shadow/kernel/irq/spurious.c SRC_C += lx_emul/shadow/lib/devres.c SRC_C += lx_emul/shadow/lib/smp_processor_id.c +SRC_C += lx_emul/shadow/mm/dmapool.c SRC_C += lx_emul/shadow/mm/memblock.c SRC_C += lx_emul/shadow/mm/page_alloc.c +SRC_C += lx_emul/shadow/mm/vmalloc.c SRC_C += lx_emul/shadow/drivers/char/random.c SRC_C += lx_emul/shadow/drivers/pci/host-bridge.c SRC_C += lx_emul/shadow/drivers/pci/pci.c @@ -50,12 +53,6 @@ SRC_C += lx_emul/shadow/fs/sysfs/symlink.c # # Replacing implementations that could be merged into DDE Linux. # -SRC_C += lx_emul/mapping.c -SRC_C += lx_emul/page_alloc.c -SRC_C += lx_emul/sched_core.c -SRC_C += lx_emul/vmalloc.c - -SRC_C += lx_emul/shadow/fs/libfs.c SRC_C += lx_emul/shadow/lib/logic_iomem.c SRC_C += lx_emul/shadow/drivers/acpi/bus.c @@ -64,6 +61,3 @@ SRC_C += lx_emul/shadow/drivers/acpi/glue.c SRC_C += lx_emul/shadow/drivers/acpi/property.c SRC_C += lx_emul/shadow/drivers/acpi/scan.c SRC_C += lx_emul/shadow/drivers/acpi/utils.c - -# not needed by intel fb -SRC_C += lx_emul/shadow/mm/dmapool.c diff --git a/repos/pc/src/lib/pc/lx_emul/mapping.c b/repos/pc/src/lib/pc/lx_emul/mapping.c deleted file mode 100644 index e84c4ec961..0000000000 --- a/repos/pc/src/lib/pc/lx_emul/mapping.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * \brief Supplement for emulation of kernel/dma/mapping.c - * \author Josef Soentgen - * \date 2022-04-05 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - - -#include - -#include - -dma_addr_t dma_map_page_attrs(struct device * dev, - struct page * page, - size_t offset, - size_t size, - enum dma_data_direction dir, - unsigned long attrs) -{ - dma_addr_t const dma_addr = page_to_phys(page); - unsigned long const virt_addr = (unsigned long)page_to_virt(page); - - lx_emul_mem_cache_clean_invalidate((void *)(virt_addr + offset), size); - return dma_addr + offset; -} - - -void dma_unmap_page_attrs(struct device * dev, - dma_addr_t addr, - size_t size, - enum dma_data_direction dir, - unsigned long attrs) -{ - unsigned long const virt_addr = lx_emul_mem_virt_addr((void*)addr); - - if (!virt_addr) - return; - - if (dir == DMA_FROM_DEVICE) - lx_emul_mem_cache_invalidate((void *)virt_addr, size); -} - - -void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, - size_t size, enum dma_data_direction dir) -{ - unsigned long const virt_addr = lx_emul_mem_virt_addr((void*)addr); - - if (!virt_addr) - return; - - lx_emul_mem_cache_invalidate((void *)virt_addr, size); -} - - -void dma_sync_single_for_device(struct device *dev, dma_addr_t addr, - size_t size, enum dma_data_direction dir) -{ - unsigned long const virt_addr = lx_emul_mem_virt_addr((void*)addr); - - if (!virt_addr) - return; - - lx_emul_mem_cache_clean_invalidate((void *)virt_addr, size); -} - - -int dma_supported(struct device * dev,u64 mask) -{ - lx_emul_trace(__func__); - return 1; -} diff --git a/repos/pc/src/lib/pc/lx_emul/page_alloc.c b/repos/pc/src/lib/pc/lx_emul/page_alloc.c deleted file mode 100644 index bf58215209..0000000000 --- a/repos/pc/src/lib/pc/lx_emul/page_alloc.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * \brief Supplement for emulation of mm/page_alloc.c - * \author Josef Soentgen - * \date 2022-04-05 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - - -#include -#include - - -void free_pages(unsigned long addr,unsigned int order) -{ - if (addr != 0ul) - __free_pages(virt_to_page((void *)addr), order); -} - - -unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) -{ - struct page *page = alloc_pages(gfp_mask & ~__GFP_HIGHMEM, order); - - if (!page) - return 0; - - return (unsigned long)page_address(page); -} diff --git a/repos/pc/src/lib/pc/lx_emul/sched_core.c b/repos/pc/src/lib/pc/lx_emul/sched_core.c deleted file mode 100644 index 5739adc262..0000000000 --- a/repos/pc/src/lib/pc/lx_emul/sched_core.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * \brief Supplement for emulation of kernel/sched/core.c - * \author Josef Soentgen - * \date 2022-05-05 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - - -#include - -#include - - -void sched_set_fifo(struct task_struct * p) -{ - lx_emul_trace(__func__); -}