Ignore:
Timestamp:
2018-03-21T19:32:48Z (6 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Children:
1c7a170
Parents:
973be387
Message:

Change the way page flags work. TODO description

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/include/arch/mm/page_armv6.h

    r973be387 r94d211e  
    4949#define PTE_GET_FRAME_ARCH(pte) \
    5050        (((uintptr_t) ((pte_t *) (pte))->l1.frame_base_addr) << FRAME_WIDTH)
     51#define PTE_READABLE_ARCH(pte) \
     52        1
    5153#define PTE_WRITABLE_ARCH(pte) \
    5254        (((pte_t *) (pte))->l1.access_permission_1 != PTE_AP1_RO)
     
    171173        const unsigned np = (p->descriptor_type == PTE_DESCRIPTOR_NOT_PRESENT);
    172174
    173         return (np << PAGE_PRESENT_SHIFT) | (1 << PAGE_USER_SHIFT) |
    174             (1 << PAGE_READ_SHIFT) | (1 << PAGE_WRITE_SHIFT) |
    175             (1 << PAGE_EXEC_SHIFT) | (1 << PAGE_CACHEABLE_SHIFT);
     175        return (np << PAGE_NOT_PRESENT_SHIFT) | PAGE_NEXT_LEVEL_PT;
    176176}
    177177
     
    190190        const unsigned ap1 = p->access_permission_1;
    191191
    192         return ((dt == PTE_DESCRIPTOR_NOT_PRESENT) << PAGE_PRESENT_SHIFT) |
     192        return ((dt == PTE_DESCRIPTOR_NOT_PRESENT) << PAGE_NOT_PRESENT_SHIFT) |
    193193            ((dt != PTE_DESCRIPTOR_SMALL_PAGE_NX) << PAGE_EXEC_SHIFT) |
    194194            ((ap0 == PTE_AP0_USER_LIMITED_KERNEL_FULL) << PAGE_READ_SHIFT) |
     
    198198            (((ap1 != PTE_AP1_RO) && (ap0 == PTE_AP0_USER_FULL_KERNEL_FULL)) << PAGE_WRITE_SHIFT) |
    199199            (((ap1 != PTE_AP1_RO) && (ap0 == PTE_AP0_USER_NO_KERNEL_FULL)) << PAGE_WRITE_SHIFT) |
    200             (p->bufferable << PAGE_CACHEABLE);
     200            (p->bufferable ? PAGE_CACHEABLE : PAGE_NOT_CACHEABLE);
    201201}
    202202
     
    249249                p->descriptor_type = PTE_DESCRIPTOR_NOT_PRESENT;
    250250        } else {
    251                 if (flags & PAGE_EXEC)
     251                if (flags & _PAGE_EXEC)
    252252                        p->descriptor_type = PTE_DESCRIPTOR_SMALL_PAGE;
    253253                else
     
    288288        p->access_permission_0 = PTE_AP0_USER_NO_KERNEL_FULL;
    289289
    290         if (flags & PAGE_USER) {
     290        if (flags & PAGE_USER)
    291291                p->access_permission_0 = PTE_AP0_USER_FULL_KERNEL_FULL;
    292                 // TODO Fix kernel to use PAGE_WRITE flag properly and
    293                 // apply this for kernel pages as well.
    294                 if (!(flags & PAGE_WRITE))
    295                         p->access_permission_1 = PTE_AP1_RO;
    296         }
     292
     293        if (!(flags & _PAGE_WRITE))
     294                p->access_permission_1 = PTE_AP1_RO;
     295
    297296        pt_coherence(p);
    298297}
Note: See TracChangeset for help on using the changeset viewer.