]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/devs/usb/at91/v2_0/src/bitops.h
Initial revision
[karo-tx-redboot.git] / packages / devs / usb / at91 / v2_0 / src / bitops.h
1 #ifndef CYGONCE_USBS_AT91_BITOPS_H
2 #define CYGONCE_USBS_AT91_BITOPS_H
3
4 //==========================================================================
5 //
6 //      bitops.h
7 //
8 //      Hardware Bit manipulation macros for the AT91 USB device
9 //
10 //==========================================================================
11 //####ECOSGPLCOPYRIGHTBEGIN####
12 // -------------------------------------------
13 // This file is part of eCos, the Embedded Configurable Operating System.
14 // Copyright (C) 2002 Bart Veer
15 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
16 //
17 // eCos is free software; you can redistribute it and/or modify it under
18 // the terms of the GNU General Public License as published by the Free
19 // Software Foundation; either version 2 or (at your option) any later version.
20 //
21 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
22 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
23 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
24 // for more details.
25 //
26 // You should have received a copy of the GNU General Public License along
27 // with eCos; if not, write to the Free Software Foundation, Inc.,
28 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
29 //
30 // As a special exception, if other files instantiate templates or use macros
31 // or inline functions from this file, or you compile this file and link it
32 // with other works to produce a work based on this file, this file does not
33 // by itself cause the resulting work to be covered by the GNU General Public
34 // License. However the source code for this file must still be made available
35 // in accordance with section (3) of the GNU General Public License.
36 //
37 // This exception does not invalidate any other reasons why a work based on
38 // this file might be covered by the GNU General Public License.
39 // -------------------------------------------
40 //####ECOSGPLCOPYRIGHTEND####
41 //==========================================================================
42 //#####DESCRIPTIONBEGIN####
43 //
44 // Author(s):    Oliver Munz
45 // Contributors: bartv
46 // Date:         2006-02-22
47 //
48 //####DESCRIPTIONEND####
49 //==========================================================================
50
51 // Set the given bits in a device register
52 #define SET_BITS(_register_, _bits_)          \
53     CYG_MACRO_START                           \
54     cyg_uint32 _value_;                       \
55     HAL_READ_UINT32(_register_, _value_);     \
56     _value_ |= _bits_;                        \
57     HAL_WRITE_UINT32(_register_, _value_);    \
58     CYG_MACRO_END
59
60 // Clear the given bits in a device register
61 #define CLEAR_BITS(_register_, _bits_)        \
62     CYG_MACRO_START                           \
63     cyg_uint32 _value_;                       \
64     HAL_READ_UINT32(_register_, _value_);     \
65     _value_ &= ~_bits_;                       \
66     HAL_WRITE_UINT32(_register_, _value_);    \
67     CYG_MACRO_END
68
69 #define BITS_ARE_SET(_register_, _bits)       \
70     bits_are_set(_register_, _bits)
71
72 #define BITS_ARE_CLEARED(_register_, _bits)   \
73     bits_are_cleared(_register_, _bits)
74
75 static inline cyg_bool
76 bits_are_set (cyg_addrword_t addr, cyg_uint32 bits)
77 {
78   cyg_uint32 read;
79   
80   HAL_READ_UINT32 (addr, read);
81   
82   return (read & bits) == bits;
83 }
84
85 static inline cyg_bool
86 bits_are_cleared (cyg_addrword_t addr, cyg_uint32 bits)
87 {
88   cyg_uint32 read;
89
90   HAL_READ_UINT32 (addr, read);
91
92   return (read | ~bits) == ~bits;
93 }
94
95
96 #endif // CYGONCE_USBS_AT91_BITOPS_H
97