carl9170 firmware: get rid of nested wlan_tx calls
[carl9170fw.git] / carlfw / include / io.h
index f594a3f73e60379c4e126fe751802ab0edfd0ea0..4ccdc6e4c8f78df780c282979cf9f1ed8e66912b 100644 (file)
@@ -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);
 }