X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=carlfw%2Finclude%2Fio.h;h=4ccdc6e4c8f78df780c282979cf9f1ed8e66912b;hb=8b944e7f0c1bd11fab1f1ce1862367f5e077bad0;hp=f594a3f73e60379c4e126fe751802ab0edfd0ea0;hpb=e72388a0aa23da8bc8e24a0cbe9d523c5a9ce294;p=carl9170fw.git diff --git a/carlfw/include/io.h b/carlfw/include/io.h index f594a3f..4ccdc6e 100644 --- a/carlfw/include/io.h +++ b/carlfw/include/io.h @@ -31,14 +31,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 +81,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 +117,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); }