Changeset 8cbf1c3 in mainline for kernel/generic/src


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

prepare the public API of the frame allocator for the new backend
remove FRAME_KA (can be easily implemented explicitly)

Location:
kernel/generic/src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/cpu/cpu.c

    rc67dbd6 r8cbf1c3  
    7373                size_t i;
    7474                for (i = 0; i < config.cpu_count; i++) {
    75                         cpus[i].stack = (uint8_t *) frame_alloc(STACK_FRAMES,
    76                             FRAME_LOWMEM | FRAME_KA | FRAME_ATOMIC);
     75                        cpus[i].stack = (uint8_t *) PA2KA(frame_alloc(STACK_FRAMES,
     76                            FRAME_LOWMEM | FRAME_ATOMIC, 0));
    7777                        cpus[i].id = i;
    7878                       
  • kernel/generic/src/ddi/ddi.c

    rc67dbd6 r8cbf1c3  
    314314
    315315NO_TRACE static int dmamem_map(uintptr_t virt, size_t size, unsigned int map_flags,
    316     unsigned int flags, void **phys)
     316    unsigned int flags, uintptr_t *phys)
    317317{
    318318        ASSERT(TASK);
     
    323323
    324324NO_TRACE static int dmamem_map_anonymous(size_t size, unsigned int map_flags,
    325     unsigned int flags, void **phys, uintptr_t *virt, uintptr_t bound)
     325    unsigned int flags, uintptr_t *phys, uintptr_t *virt, uintptr_t bound)
    326326{
    327327        ASSERT(TASK);
     
    336336                order = fnzb(pages - 1) + 1;
    337337       
    338         *phys = frame_alloc_noreserve(order, 0);
    339         if (*phys == NULL)
     338        *phys = frame_alloc_noreserve(order, 0, 0);
     339        if (*phys == 0)
    340340                return ENOMEM;
    341341       
    342342        mem_backend_data_t backend_data;
    343         backend_data.base = (uintptr_t) *phys;
     343        backend_data.base = *phys;
    344344        backend_data.frames = pages;
    345345       
    346346        if (!as_area_create(TASK->as, map_flags, size,
    347347            AS_AREA_ATTR_NONE, &phys_backend, &backend_data, virt, bound)) {
    348                 frame_free_noreserve((uintptr_t) *phys);
     348                frame_free_noreserve(*phys);
    349349                return ENOMEM;
    350350        }
     
    387387                 */
    388388               
    389                 void *phys;
     389                uintptr_t phys;
    390390                int rc = dmamem_map((uintptr_t) virt_ptr, size, map_flags,
    391391                    flags, &phys);
     
    404404                 */
    405405               
    406                 void *phys;
     406                uintptr_t phys;
    407407                uintptr_t virt = (uintptr_t) -1;
    408408                int rc = dmamem_map_anonymous(size, map_flags, flags,
  • kernel/generic/src/mm/frame.c

    rc67dbd6 r8cbf1c3  
    873873
    874874        return ADDR2PFN((uintptr_t) frame_alloc(order - FRAME_WIDTH,
    875             FRAME_LOWMEM | FRAME_ATOMIC));
     875            FRAME_LOWMEM | FRAME_ATOMIC, 0));
    876876}
    877877
     
    10241024 *
    10251025 */
    1026 void *frame_alloc_generic(uint8_t order, frame_flags_t flags, size_t *pzone)
     1026uintptr_t frame_alloc_generic(uint8_t order, frame_flags_t flags,
     1027    uintptr_t constraint, size_t *pzone)
    10271028{
    10281029        size_t size = ((size_t) 1) << order;
     
    10711072                        if (!(flags & FRAME_NO_RESERVE))
    10721073                                reserve_free(size);
    1073                         return NULL;
     1074                        return 0;
    10741075                }
    10751076               
     
    11261127                *pzone = znum;
    11271128       
    1128         if (flags & FRAME_KA)
    1129                 return (void *) PA2KA(PFN2ADDR(pfn));
    1130        
    1131         return (void *) PFN2ADDR(pfn);
    1132 }
    1133 
    1134 void *frame_alloc(uint8_t order, frame_flags_t flags)
    1135 {
    1136         return frame_alloc_generic(order, flags, NULL);
    1137 }
    1138 
    1139 void *frame_alloc_noreserve(uint8_t order, frame_flags_t flags)
    1140 {
    1141         return frame_alloc_generic(order, flags | FRAME_NO_RESERVE, NULL);
     1129        return PFN2ADDR(pfn);
     1130}
     1131
     1132uintptr_t frame_alloc(uint8_t order, frame_flags_t flags, uintptr_t constraint)
     1133{
     1134        return frame_alloc_generic(order, flags, constraint, NULL);
     1135}
     1136
     1137uintptr_t frame_alloc_noreserve(uint8_t order, frame_flags_t flags,
     1138    uintptr_t constraint)
     1139{
     1140        return frame_alloc_generic(order, flags | FRAME_NO_RESERVE, constraint,
     1141            NULL);
    11421142}
    11431143
  • kernel/generic/src/mm/km.c

    rc67dbd6 r8cbf1c3  
    249249         * Allocate a frame, preferably from high memory.
    250250         */
    251         frame = (uintptr_t) frame_alloc(ONE_FRAME,
    252             FRAME_HIGHMEM | FRAME_ATOMIC | flags);
     251        frame = frame_alloc(ONE_FRAME,
     252            FRAME_HIGHMEM | FRAME_ATOMIC | flags, 0);
    253253        if (frame) {
    254254                page = km_map(frame, PAGE_SIZE,
     
    256256                ASSERT(page);   // FIXME
    257257        } else {
    258                 frame = (uintptr_t) frame_alloc(ONE_FRAME,
    259                     FRAME_LOWMEM | flags);
     258                frame = frame_alloc(ONE_FRAME, FRAME_LOWMEM | flags, 0);
    260259                if (!frame)
    261260                        return (uintptr_t) NULL;
  • kernel/generic/src/mm/page.c

    rc67dbd6 r8cbf1c3  
    169169}
    170170
    171 int page_find_mapping(uintptr_t virt, void **phys)
     171int page_find_mapping(uintptr_t virt, uintptr_t *phys)
    172172{
    173173        page_table_lock(AS, true);
     
    179179        }
    180180       
    181         *phys = (void *) PTE_GET_FRAME(pte) +
     181        *phys = PTE_GET_FRAME(pte) +
    182182            (virt - ALIGN_DOWN(virt, PAGE_SIZE));
    183183       
     
    193193 *
    194194 */
    195 sysarg_t sys_page_find_mapping(uintptr_t virt, void *phys_ptr)
    196 {
    197         void *phys;
     195sysarg_t sys_page_find_mapping(uintptr_t virt, uintptr_t *phys_ptr)
     196{
     197        uintptr_t phys;
    198198        int rc = page_find_mapping(virt, &phys);
    199199        if (rc != EOK)
  • kernel/generic/src/mm/slab.c

    rc67dbd6 r8cbf1c3  
    182182        size_t zone = 0;
    183183       
    184         void *data = frame_alloc_generic(cache->order, FRAME_KA | flags, &zone);
     184        void *data = (void *)
     185            PA2KA(frame_alloc_generic(cache->order, flags, 0, &zone));
    185186        if (!data) {
    186187                return NULL;
  • kernel/generic/src/proc/thread.c

    rc67dbd6 r8cbf1c3  
    192192        kmflags &= ~FRAME_HIGHMEM;
    193193       
    194         thread->kstack = (uint8_t *) frame_alloc(STACK_FRAMES, FRAME_KA | kmflags);
     194        thread->kstack = (uint8_t *)
     195            PA2KA(frame_alloc(STACK_FRAMES, kmflags, 0));
    195196        if (!thread->kstack) {
    196197#ifdef CONFIG_FPU
  • kernel/generic/src/time/clock.c

    rc67dbd6 r8cbf1c3  
    8181void clock_counter_init(void)
    8282{
    83         void *faddr = frame_alloc(ONE_FRAME, FRAME_ATOMIC);
    84         if (!faddr)
     83        uintptr_t faddr = frame_alloc(ONE_FRAME, FRAME_ATOMIC, 0);
     84        if (faddr == 0)
    8585                panic("Cannot allocate page for clock.");
    8686       
     
    9191        uptime->useconds = 0;
    9292       
    93         clock_parea.pbase = (uintptr_t) faddr;
     93        clock_parea.pbase = faddr;
    9494        clock_parea.frames = 1;
    9595        clock_parea.unpriv = true;
Note: See TracChangeset for help on using the changeset viewer.