Ignore:
File:
1 edited

Legend:

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

    rfbcdeb8 r8d70937  
    4545/** Create address space area.
    4646 *
    47  * @param base  Starting virtual address of the area.
    48  *              If set to (void *) -1, the kernel finds
    49  *              a mappable area.
    50  * @param size  Size of the area.
    51  * @param flags Flags describing type of the area.
     47 * @param address Virtual address where to place new address space area.
     48 * @param size    Size of the area.
     49 * @param flags   Flags describing type of the area.
    5250 *
    53  * @return Starting virtual address of the created area on success.
    54  * @return (void *) -1 otherwise.
     51 * @return address on success, (void *) -1 otherwise.
    5552 *
    5653 */
    57 void *as_area_create(void *base, size_t size, unsigned int flags)
     54void *as_area_create(void *address, size_t size, unsigned int flags)
    5855{
    59         return (void *) __SYSCALL4(SYS_AS_AREA_CREATE, (sysarg_t) base,
    60             (sysarg_t) size, (sysarg_t) flags, (sysarg_t) __entry);
     56        return (void *) __SYSCALL3(SYS_AS_AREA_CREATE, (sysarg_t) address,
     57            (sysarg_t) size, (sysarg_t) flags);
    6158}
    6259
     
    105102}
    106103
     104/** Return pointer to unmapped address space area
     105 *
     106 * @param size Requested size of the allocation.
     107 *
     108 * @return Pointer to the beginning of unmapped address space area.
     109 *
     110 */
     111void *as_get_mappable_page(size_t size)
     112{
     113        return (void *) __SYSCALL2(SYS_AS_GET_UNMAPPED_AREA,
     114            (sysarg_t) __entry, (sysarg_t) size);
     115}
     116
    107117/** Find mapping to physical address.
    108118 *
    109  * @param      virt Virtual address to find mapping for.
    110  * @param[out] phys Physical adress.
    111  *
    112  * @return EOK on no error.
    113  * @retval ENOENT if no mapping was found.
    114  *
     119 * @param address Virtual address in question (virtual).
     120 * @param[out] frame Frame address (physical).
     121 * @return Error code.
     122 * @retval EOK No error, @p frame holds the translation.
     123 * @retval ENOENT Mapping not found.
    115124 */
    116 int as_get_physical_mapping(const void *virt, uintptr_t *phys)
     125int as_get_physical_mapping(const void *address, uintptr_t *frame)
    117126{
    118         return (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING, (sysarg_t) virt,
    119             (sysarg_t) phys);
     127        uintptr_t tmp_frame;
     128        uintptr_t virt = (uintptr_t) address;
     129       
     130        int rc = (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING,
     131            (sysarg_t) virt, (sysarg_t) &tmp_frame);
     132        if (rc != EOK) {
     133                return rc;
     134        }
     135       
     136        if (frame != NULL) {
     137                *frame = tmp_frame;
     138        }
     139       
     140        return EOK;
    120141}
    121142
Note: See TracChangeset for help on using the changeset viewer.