mirror of
https://github.com/genodelabs/genode.git
synced 2025-03-01 04:36:13 +00:00
parent
aeb65d6b1b
commit
6727b5ea49
repos
dde_linux/src/lib/lx_emul/shadow
pc
@ -125,3 +125,65 @@ void dma_unmap_sg_attrs(struct device * dev,
|
|||||||
sg->dma_address = 0;
|
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;
|
||||||
|
}
|
||||||
|
@ -279,3 +279,6 @@ int idle_cpu(int cpu)
|
|||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void sched_set_fifo(struct task_struct * p) { }
|
||||||
|
@ -80,6 +80,7 @@ static struct page * lx_alloc_pages(unsigned const nr_pages)
|
|||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In earlier kernel versions, '__alloc_pages' was an inline function.
|
* 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;
|
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);
|
||||||
|
}
|
||||||
|
@ -24,12 +24,15 @@ SRC_CC += lx_emul/io_mem.cc
|
|||||||
SRC_CC += lx_emul/io_port.cc
|
SRC_CC += lx_emul/io_port.cc
|
||||||
SRC_CC += lx_emul/irq.cc
|
SRC_CC += lx_emul/irq.cc
|
||||||
SRC_CC += lx_emul/random.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/dma/mapping.c
|
||||||
SRC_C += lx_emul/shadow/kernel/irq/spurious.c
|
SRC_C += lx_emul/shadow/kernel/irq/spurious.c
|
||||||
SRC_C += lx_emul/shadow/lib/devres.c
|
SRC_C += lx_emul/shadow/lib/devres.c
|
||||||
SRC_C += lx_emul/shadow/lib/smp_processor_id.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/memblock.c
|
||||||
SRC_C += lx_emul/shadow/mm/page_alloc.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/char/random.c
|
||||||
SRC_C += lx_emul/shadow/drivers/pci/host-bridge.c
|
SRC_C += lx_emul/shadow/drivers/pci/host-bridge.c
|
||||||
SRC_C += lx_emul/shadow/drivers/pci/pci.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.
|
# 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/lib/logic_iomem.c
|
||||||
|
|
||||||
SRC_C += lx_emul/shadow/drivers/acpi/bus.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/property.c
|
||||||
SRC_C += lx_emul/shadow/drivers/acpi/scan.c
|
SRC_C += lx_emul/shadow/drivers/acpi/scan.c
|
||||||
SRC_C += lx_emul/shadow/drivers/acpi/utils.c
|
SRC_C += lx_emul/shadow/drivers/acpi/utils.c
|
||||||
|
|
||||||
# not needed by intel fb
|
|
||||||
SRC_C += lx_emul/shadow/mm/dmapool.c
|
|
||||||
|
@ -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 <lx_emul/alloc.h>
|
|
||||||
|
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
@ -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 <linux/gfp.h>
|
|
||||||
#include <linux/mm.h>
|
|
||||||
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
@ -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 <lx_emul.h>
|
|
||||||
|
|
||||||
#include <linux/sched.h>
|
|
||||||
|
|
||||||
|
|
||||||
void sched_set_fifo(struct task_struct * p)
|
|
||||||
{
|
|
||||||
lx_emul_trace(__func__);
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user