OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [posix/] [mm0/] [mm/] [arch/] [arm/] [v5/] [mm.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/*
2
 * ARMv5 specific functions
3
 *
4
 * Copyright (C) 2008 - 2010 B Labs Ltd.
5
 */
6
#include <task.h>
7
#include <vm_area.h>
8
#include <l4lib/exregs.h>
9
#include __INC_ARCH(mm.h)
10
 
11
/* Extracts generic protection flags from architecture-specific pte */
12
unsigned int vm_prot_flags(pte_t pte)
13
{
14
        unsigned int vm_prot_flags = 0;
15
        unsigned int rw_flags = __MAP_USR_RW & PTE_PROT_MASK;
16
        unsigned int ro_flags = __MAP_USR_RO & PTE_PROT_MASK;
17
 
18
        /* Clear non-protection flags */
19
        pte &= PTE_PROT_MASK;
20
 
21
        if (pte == ro_flags)
22
                vm_prot_flags = VM_READ | VM_EXEC;
23
        else if (pte == rw_flags)
24
                vm_prot_flags = VM_READ | VM_WRITE | VM_EXEC;
25
        else
26
                vm_prot_flags = VM_NONE;
27
 
28
        return vm_prot_flags;
29
}
30
 
31
/*
32
 * PTE STATES:
33
 * PTE type field: 00 (Translation fault)
34
 * PTE type field correct, AP bits: None (Read or Write access fault)
35
 * PTE type field correct, AP bits: RO (Write access fault)
36
 */
37
 
38
/*
39
 * Extracts arch-specific fault parameters
40
 * and puts them into generic format
41
 */
42
void set_generic_fault_params(struct fault_data *fault)
43
{
44
        unsigned int prot_flags = vm_prot_flags(fault->kdata->pte);
45
 
46
        fault->reason = 0;
47
        fault->pte_flags = prot_flags;
48
 
49
        if (is_prefetch_abort(fault->kdata->fsr)) {
50
                fault->reason |= VM_READ;
51
                fault->address = fault->kdata->faulty_pc;
52
        } else {
53
                fault->address = fault->kdata->far;
54
 
55
                /* Always assume read fault first */
56
                if (prot_flags & VM_NONE)
57
                        fault->reason |= VM_READ;
58
                else if (prot_flags & VM_READ)
59
                        fault->reason |= VM_WRITE;
60
                else
61
                        BUG();
62
        }
63
        arch_print_fault_params(fault);
64
}
65
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.