Changeset 8442d10 in mainline for uspace/lib/c


Ignore:
Timestamp:
2013-09-09T21:48:12Z (12 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c67dbd6
Parents:
2e2c18a1
Message:

improve the API of physmem_map(), dmamem_map() and dmamem_map_anonymous()
the "constraint" argument of dmamem_map_anonymous() should be used to specify bits disallowed in the physical frame address

Location:
uspace/lib/c
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/ddi.c

    r2e2c18a1 r8442d10  
    7676 *
    7777 */
    78 int physmem_map(void *phys, size_t pages, unsigned int flags, void **virt)
     78int physmem_map(uintptr_t phys, size_t pages, unsigned int flags, void **virt)
    7979{
    8080        return __SYSCALL5(SYS_PHYSMEM_MAP, (sysarg_t) phys,
     
    8383
    8484int dmamem_map(void *virt, size_t size, unsigned int map_flags,
    85     unsigned int flags, void **phys)
     85    unsigned int flags, uintptr_t *phys)
    8686{
    8787        return (int) __SYSCALL6(SYS_DMAMEM_MAP, (sysarg_t) size,
     
    9090}
    9191
    92 int dmamem_map_anonymous(size_t size, unsigned int map_flags,
    93     unsigned int flags, void **phys, void **virt)
    94 {
     92int dmamem_map_anonymous(size_t size, uintptr_t constraint,
     93    unsigned int map_flags, unsigned int flags, uintptr_t *phys, void **virt)
     94{
     95        *phys = constraint;
     96       
    9597        return (int) __SYSCALL6(SYS_DMAMEM_MAP, (sysarg_t) size,
    9698            (sysarg_t) map_flags, (sysarg_t) flags | DMAMEM_FLAGS_ANONYMOUS,
     
    158160        if (!virt)
    159161                return EINVAL;
    160 
    161         void *phys_frame =
    162             (void *) ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE);
    163         size_t offset = pio_addr - phys_frame;
     162       
     163        uintptr_t phys_frame =
     164            ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE);
     165        size_t offset = (uintptr_t) pio_addr - phys_frame;
    164166        size_t pages = SIZE2PAGES(offset + size);
    165167       
  • uspace/lib/c/generic/time.c

    r2e2c18a1 r8442d10  
    556556               
    557557                void *addr;
    558                 rc = physmem_map((void *) faddr, 1,
    559                     AS_AREA_READ | AS_AREA_CACHEABLE, &addr);
     558                rc = physmem_map(faddr, 1, AS_AREA_READ | AS_AREA_CACHEABLE,
     559                    &addr);
    560560                if (rc != EOK) {
    561561                        as_area_destroy(addr);
  • uspace/lib/c/include/ddi.h

    r2e2c18a1 r8442d10  
    4242#include <task.h>
    4343
     44#define DMAMEM_16MiB  ((uintptr_t) UINT64_C(0xffffffffff000000))
     45#define DMAMEM_4GiB   ((uintptr_t) UINT64_C(0xffffffff00000000))
     46
    4447extern int device_assign_devno(void);
    4548
    46 extern int physmem_map(void *, size_t, unsigned int, void **);
     49extern int physmem_map(uintptr_t, size_t, unsigned int, void **);
    4750
    48 extern int dmamem_map(void *, size_t, unsigned int, unsigned int, void **);
    49 extern int dmamem_map_anonymous(size_t, unsigned int, unsigned int, void **,
    50     void **);
     51extern int dmamem_map(void *, size_t, unsigned int, unsigned int, uintptr_t *);
     52extern int dmamem_map_anonymous(size_t, uintptr_t, unsigned int, unsigned int,
     53    uintptr_t *, void **);
    5154extern int dmamem_unmap(void *, size_t);
    5255extern int dmamem_unmap_anonymous(void *);
Note: See TracChangeset for help on using the changeset viewer.