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

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [libl4/] [src/] [arch/] [arm/] [v5/] [mutex.S.ARM] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/*
2
 * Copyright (C) 2009 Bahadir Balban
3
 */
4
#include 
5
#include 
6
 
7
/*
8
 * These use the same lock word for both being granted
9
 * exclusive access to the word, and for storing lock values.
10
 */
11
 
12
BEGIN_PROC(__l4_mutex_lock)
13
        mov     r2, #-2
14
1:
15
        swp     r1, r2, [r0]
16
        cmp     r1, r2
17
        beq     1b
18
 
19
        @ Grabbed the lock,
20
        add     r1, r1, #1              @ now increment its value
21
        str     r1, [r0]                @ Store and finish
22
        cmp     r1, #L4_MUTEX_LOCKED    @ Have we locked it?
23
        moveq   r0, #L4_MUTEX_SUCCESS
24
        movne   r0, #L4_MUTEX_CONTENDED
25
        mov     pc, lr
26
END_PROC(__l4_mutex_lock)
27
 
28
 
29
BEGIN_PROC(__l4_mutex_unlock)
30
        mov     r2, #-2
31
        mov     r1, #L4_MUTEX_UNLOCKED
32
1:
33
        swp     r3, r2, [r0]
34
        cmp     r3, r2
35
        beq     1b
36
 
37
        @ Grabbed the lock
38
        str     r1, [r0]                @ Now store unlocked value and finish
39
        mov     r0, r3                  @ Get the value of contenders
40
        mov     pc, lr
41
END_PROC(__l4_mutex_unlock)
42
 

powered by: WebSVN 2.1.0

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