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

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [src/] [arch/] [arm/] [v6/] [irq.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/*
2
 * Low-level irq routines.
3
 *
4
 * Copyright (C) 2010 B Labs Ltd.
5
 * Written by  Bahadir Balban
6
 * Prem Mallappa <prem.mallappa@b-labs.co.uk>
7
 */
8
 
9
void irq_local_disable_save(unsigned long *state)
10
{
11
        unsigned int tmp;
12
        __asm__ __volatile__ (
13
                "mrs %0, cpsr_fc \n"
14
                "cpsid ia \n"
15
                : "=r"(tmp)
16
                :
17
                : "cc"
18
                );
19
        *state = tmp;
20
}
21
 
22
void irq_local_restore(unsigned long state)
23
{
24
        __asm__ __volatile__ (
25
                "msr cpsr_fc, %0\n"
26
                :
27
                : "r"(state)
28
                : "cc"
29
                );
30
}
31
 
32
u8 l4_atomic_dest_readb(u8 *location)
33
{
34
        unsigned int tmp, res;
35
        __asm__ __volatile__ (
36
                "1: \n"
37
                "ldrex %0, [%2] \n"
38
                "strex %1, %3, [%2] \n"
39
                "teq %1, #0 \n"
40
                "bne 1b \n"
41
                : "=&r"(tmp), "=&r"(res)
42
                : "r"(location), "r"(0)
43
                : "cc", "memory"
44
                );
45
 
46
        return (u8)tmp;
47
}
48
 
49
int irqs_enabled(void)
50
{
51
        int tmp;
52
        __asm__ __volatile__ (
53
                "mrs %0, cpsr_fc\n"
54
                : "=r"(tmp)
55
                );
56
        if (tmp & 0x80)
57
                return 0;
58
 
59
        return 1;
60
}

powered by: WebSVN 2.1.0

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