~ubuntu-branches/ubuntu/saucy/linux-n900/saucy

« back to all changes in this revision

Viewing changes to arch/mn10300/lib/bitops.c

  • Committer: Bazaar Package Importer
  • Author(s): Mathieu Poirier
  • Date: 2011-02-18 09:43:31 UTC
  • Revision ID: james.westby@ubuntu.com-20110218094331-eyubsja4f9k0yhmq
Tags: 2.6.35-1.1
Initial release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* MN10300 Non-trivial bit operations
 
2
 *
 
3
 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
 
4
 * Written by David Howells (dhowells@redhat.com)
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or
 
7
 * modify it under the terms of the GNU General Public Licence
 
8
 * as published by the Free Software Foundation; either version
 
9
 * 2 of the Licence, or (at your option) any later version.
 
10
 */
 
11
#include <linux/module.h>
 
12
#include <asm/bitops.h>
 
13
#include <asm/system.h>
 
14
 
 
15
/*
 
16
 * try flipping a bit using BSET and BCLR
 
17
 */
 
18
void change_bit(int nr, volatile void *addr)
 
19
{
 
20
        if (test_bit(nr, addr))
 
21
                goto try_clear_bit;
 
22
 
 
23
try_set_bit:
 
24
        if (!test_and_set_bit(nr, addr))
 
25
                return;
 
26
 
 
27
try_clear_bit:
 
28
        if (test_and_clear_bit(nr, addr))
 
29
                return;
 
30
 
 
31
        goto try_set_bit;
 
32
}
 
33
 
 
34
/*
 
35
 * try flipping a bit using BSET and BCLR and returning the old value
 
36
 */
 
37
int test_and_change_bit(int nr, volatile void *addr)
 
38
{
 
39
        if (test_bit(nr, addr))
 
40
                goto try_clear_bit;
 
41
 
 
42
try_set_bit:
 
43
        if (!test_and_set_bit(nr, addr))
 
44
                return 0;
 
45
 
 
46
try_clear_bit:
 
47
        if (test_and_clear_bit(nr, addr))
 
48
                return 1;
 
49
 
 
50
        goto try_set_bit;
 
51
}