Пример #1
0
static unsigned long l4io_remap(unsigned long phys_addr, size_t size)
{
	int i;
	l4_addr_t reg_start, reg_len;
	void *addr;
	unsigned long offset;

	if (!l4io_has_resource(L4IO_RESOURCE_MEM, phys_addr, phys_addr + size - 1)) {
		printf("ERROR: IO-memory (%lx+%zx) not available\n", phys_addr, size);
		return NULL;
	}

	if ((i = l4io_search_iomem_region(phys_addr, size, &reg_start, &reg_len))) {
		printf("ioremap: No region found for %lx: %d\n", phys_addr, i);
		return NULL;
	}

	if ((i = l4io_request_iomem(reg_start, reg_len, 0, (l4_addr_t *)&addr))) {
		printf("ERROR: l4io_request_iomem error(%lx+%lx): %d\n", reg_start, reg_len, i);
		return NULL;
	}

	printf("%s: Mapping physaddr %08lx [0x%zx Bytes, %08lx+%06lx] to %08lx+%06lx\n",
		    __func__, phys_addr, size, reg_start, reg_len, (unsigned long)addr, offset
	);

	offset = 0;
	offset += phys_addr - reg_start;

	return (unsigned long)addr + offset;
}
Пример #2
0
static void setup_memory(void)
{
	int ret;

	l4_size_t phys_size;

	if (fb_vaddr)
		return;

	ret = l4io_request_iomem(0x48050000, 0x1000, 0, &omap_dss_virt_base);
	if (ret)
	{
		printf("[LCD] Error: Could not map device memory\n");
		return;
	}

	// get some frame buffer
	l4re_ds_t mem = l4re_util_cap_alloc();
	if (l4_is_invalid_cap(mem))
		return;

	if (l4re_ma_alloc(fbmem_size(), mem, L4RE_MA_CONTINUOUS | L4RE_MA_PINNED))
	{
		printf("[LCD] Error: Could not allocate memory\n");
		return;
	}

	fb_vaddr = 0;
	if (l4re_rm_attach(&fb_vaddr, fbmem_size(),
		L4RE_RM_SEARCH_ADDR | L4RE_RM_EAGER_MAP,
		mem, 0, L4_PAGESHIFT))
	{
		printf("[LCD] Error: Could not attach memory\n");
		return;
	}

	printf("[LCD] Info: Video memory is at virtual %p (size: 0x%x Bytes)\n",
	fb_vaddr, fbmem_size());

	// get physical address
	if (l4re_ds_phys(mem, 0, &fb_paddr, &phys_size) || phys_size != fbmem_size())
	{
		printf("[LCD] Error: Could not get physical address\n");
		return;
	}
	printf("[LCD] Info: Physical video memory is at %p\n", (void *)fb_paddr);
}
Пример #3
0
static void setup_memory(void)
{
    l4_addr_t fb_paddr;
    l4_addr_t a = 0;
    int ret;

    if (fb_vaddr)
        return;

    fb_paddr = 0x1c012000;
    ret = l4io_request_iomem(fb_paddr, 0x500000, 0, &a);
    if (ret)
    {
        printf("[LCD] Error: Could not map device memory\n");
        return;
    }

    fb_vaddr = (void *)a;

    printf("[LCD] Info: Video memory is at virtual %p (size: 0x%x Bytes)\n",
           fb_vaddr, fbmem_size());
    printf("[LCD] Info: Physical video memory is at %p\n", (void *)fb_paddr);
}
Пример #4
0
/** Request a memory region.
 *
 * \return vaddr virtual address of memory region
 * \return 0	 success
 * \return -1	 error
 */
int ddekit_request_mem(ddekit_addr_t start, ddekit_addr_t count, ddekit_addr_t *vaddr) {

	return l4io_request_iomem(start, count, 0, vaddr);
}