Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mn10300
lib
bitops.c
Go to the documentation of this file.
1
/* MN10300 Non-trivial bit operations
2
*
3
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4
* Written by David Howells (
[email protected]
)
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
14
/*
15
* try flipping a bit using BSET and BCLR
16
*/
17
void
change_bit
(
unsigned
long
nr
,
volatile
void
*
addr
)
18
{
19
if
(
test_bit
(nr, addr))
20
goto
try_clear_bit;
21
22
try_set_bit:
23
if
(!
test_and_set_bit
(nr, addr))
24
return
;
25
26
try_clear_bit:
27
if
(
test_and_clear_bit
(nr, addr))
28
return
;
29
30
goto
try_set_bit;
31
}
32
33
/*
34
* try flipping a bit using BSET and BCLR and returning the old value
35
*/
36
int
test_and_change_bit
(
unsigned
long
nr
,
volatile
void
*
addr
)
37
{
38
if
(
test_bit
(nr, addr))
39
goto
try_clear_bit;
40
41
try_set_bit:
42
if
(!
test_and_set_bit
(nr, addr))
43
return
0;
44
45
try_clear_bit:
46
if
(
test_and_clear_bit
(nr, addr))
47
return
1;
48
49
goto
try_set_bit;
50
}
Generated on Thu Jan 10 2013 13:03:46 for Linux Kernel by
1.8.2