X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=carlfw%2Finclude%2Fio.h;h=5bdc821a30eca60a2c824781b68c5d4988a43d2a;hb=f239f43b91dfa5fbec1a8d19b41db0b792d4c751;hp=f594a3f73e60379c4e126fe751802ab0edfd0ea0;hpb=e72388a0aa23da8bc8e24a0cbe9d523c5a9ce294;p=carl9170fw.git diff --git a/carlfw/include/io.h b/carlfw/include/io.h index f594a3f..5bdc821 100644 --- a/carlfw/include/io.h +++ b/carlfw/include/io.h @@ -10,8 +10,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * with this program; If not, see . */ #ifndef __CARL9170FW_IO_H @@ -31,14 +30,14 @@ static inline __inline uint16_t readw(const volatile void *addr) return *(const volatile uint16_t *) addr; } -static inline __inline void *readp(const volatile void *addr) +static inline __inline volatile void *readp(const volatile void *addr) { - return *(void **) addr; + return *(volatile void **) addr; } static inline __inline uint32_t readl(const volatile void *addr) { - return (uint32_t) (const unsigned int *) readp(addr); + return *(const volatile unsigned int *) addr; } static inline __inline void writeb(volatile void *addr, const volatile uint8_t val) @@ -81,13 +80,11 @@ static inline __inline uint32_t readl_async(const volatile void *addr) uint32_t i = 0, read, tmp; read = readl(addr); - while (i++ < 10) { + do { + tmp = read; tmp = readl(addr); - if (tmp == read) - break; - else - read = tmp; - } + i++; + } while (tmp != read && i <= 10); return read; } @@ -119,10 +116,10 @@ static inline __inline void incl(const volatile uint32_t addr) static inline __inline uint32_t get(const volatile uint32_t addr) { - return readl((const volatile void *) addr); + return readl((volatile void *) addr); } -static inline __inline void *getp(const volatile uint32_t addr) +static inline __inline volatile void *getp(const volatile uint32_t addr) { return readp((const volatile void *) addr); } @@ -152,4 +149,9 @@ static inline __inline void orb(const volatile uint32_t addr, const volatile uin setb(addr, getb(addr) | val); } +static inline __inline uint16_t getw(const volatile uint32_t addr) +{ + return readw((const volatile void *) addr); +} + #endif /* __CARL9170FW_IO_H */