Ignore:
File:
1 edited

Legend:

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

    rfbcdeb8 rc6ae4c2  
    4545#include <align.h>
    4646#include <libarch/config.h>
    47 #include "private/libc.h"
    4847
    4948/** Return unique device number.
     
    6261 *
    6362 * @param phys  Physical address of the starting frame.
     63 * @param virt  Virtual address of the starting page.
    6464 * @param pages Number of pages to map.
    6565 * @param flags Flags for the new address space area.
    66  * @param virt  Virtual address of the starting page.
    6766 *
    6867 * @return EOK on success
     
    7372 *
    7473 */
    75 int physmem_map(void *phys, size_t pages, unsigned int flags, void **virt)
     74int physmem_map(void *phys, void *virt, size_t pages, unsigned int flags)
    7675{
    77         return __SYSCALL5(SYS_PHYSMEM_MAP, (sysarg_t) phys,
    78             pages, flags, (sysarg_t) virt, (sysarg_t) __entry);
     76        return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) phys,
     77            (sysarg_t) virt, pages, flags);
    7978}
    8079
     
    8281    unsigned int flags, void **phys)
    8382{
    84         return (int) __SYSCALL6(SYS_DMAMEM_MAP, (sysarg_t) size,
    85             (sysarg_t) map_flags, (sysarg_t) flags & ~DMAMEM_FLAGS_ANONYMOUS,
    86             (sysarg_t) phys, (sysarg_t) virt, 0);
     83        return (int) __SYSCALL5(SYS_DMAMEM_MAP, (sysarg_t) virt,
     84            (sysarg_t) size, (sysarg_t) map_flags, (sysarg_t) flags,
     85            (sysarg_t) phys);
    8786}
    8887
     
    9089    unsigned int flags, void **phys, void **virt)
    9190{
    92         return (int) __SYSCALL6(SYS_DMAMEM_MAP, (sysarg_t) size,
    93             (sysarg_t) map_flags, (sysarg_t) flags | DMAMEM_FLAGS_ANONYMOUS,
    94             (sysarg_t) phys, (sysarg_t) virt, (sysarg_t) __entry);
     91        *virt = as_get_mappable_page(size);
     92        if (*virt == NULL)
     93                return ENOMEM;
     94       
     95        return dmamem_map(*virt, size, map_flags,
     96            flags | DMAMEM_FLAGS_ANONYMOUS, phys);
    9597}
    9698
    97 int dmamem_unmap(void *virt, size_t size)
     99int dmamem_unmap(void *virt, size_t size, unsigned int flags)
    98100{
    99         return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, (sysarg_t) size, 0);
     101        return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, (sysarg_t) size,
     102            (sysarg_t) flags);
    100103}
    101104
     
    135138 * @param pio_addr I/O start address.
    136139 * @param size     Size of the I/O region.
    137  * @param virt     Virtual address for application's
    138  *                 PIO operations.
     140 * @param use_addr Address where the final address for
     141 *                 application's PIO will be stored.
    139142 *
    140  * @return EOK on success.
    141  * @return Negative error code on failure.
     143 * @return Zero on success or negative error code.
    142144 *
    143145 */
    144 int pio_enable(void *pio_addr, size_t size, void **virt)
     146int pio_enable(void *pio_addr, size_t size, void **use_addr)
    145147{
     148        void *phys;
     149        void *virt;
     150        size_t offset;
     151        unsigned int pages;
     152       
    146153#ifdef IO_SPACE_BOUNDARY
    147154        if (pio_addr < IO_SPACE_BOUNDARY) {
    148                 *virt = pio_addr;
     155                *use_addr = pio_addr;
    149156                return iospace_enable(task_get_id(), pio_addr, size);
    150157        }
    151158#endif
    152159       
    153         void *phys_frame =
    154             (void *) ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE);
    155         size_t offset = pio_addr - phys_frame;
    156         size_t pages = SIZE2PAGES(offset + size);
    157        
    158         void *virt_page;
    159         int rc = physmem_map(phys_frame, pages,
    160             AS_AREA_READ | AS_AREA_WRITE, &virt_page);
    161         if (rc != EOK)
    162                 return rc;
    163        
    164         *virt = virt_page + offset;
    165         return EOK;
     160        phys = (void *) ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE);
     161        offset = pio_addr - phys;
     162        pages = ALIGN_UP(offset + size, PAGE_SIZE) >> PAGE_WIDTH;
     163        virt = as_get_mappable_page(pages << PAGE_WIDTH);
     164        *use_addr = virt + offset;
     165        return physmem_map(phys, virt, pages, AS_AREA_READ | AS_AREA_WRITE);
    166166}
    167167
     
    176176 *
    177177 */
    178 int irq_register(int inr, int devno, int method, irq_code_t *ucode)
     178int register_irq(int inr, int devno, int method, irq_code_t *ucode)
    179179{
    180         return __SYSCALL4(SYS_IRQ_REGISTER, inr, devno, method,
     180        return __SYSCALL4(SYS_REGISTER_IRQ, inr, devno, method,
    181181            (sysarg_t) ucode);
    182182}
     
    190190 *
    191191 */
    192 int irq_unregister(int inr, int devno)
     192int unregister_irq(int inr, int devno)
    193193{
    194         return __SYSCALL2(SYS_IRQ_UNREGISTER, inr, devno);
     194        return __SYSCALL2(SYS_UNREGISTER_IRQ, inr, devno);
    195195}
    196196
Note: See TracChangeset for help on using the changeset viewer.