carl9170: Update to latest upstream
[linux-libre-firmware.git] / carl9170fw / include / linux / compiler.h
index 9ef76ec7311f25c79d9ed54d436501fe6f12b5b4..e2656ae2cfc198270c956a8cdccdf1fb4139660b 100644 (file)
@@ -25,6 +25,9 @@
 #define __in_section(s)        __attribute__((section("." # s)))
 #define __visible      __attribute__((externally_visible))
 
+#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
+
+
 #define BUILD_BUG_ON(condition)        ((void)sizeof(char[1 - 2*!!(condition)]))
 #define BUILD_BUG_ON_ZERO(e) (sizeof(char[1 - 2 * !!(e)]) - 1)
 
@@ -101,4 +104,42 @@ static inline long IS_ERR_OR_NULL(const void *ptr)
        return !ptr || IS_ERR_VALUE((unsigned long)ptr);
 }
 
+static inline unsigned int hweight8(unsigned int w)
+{
+        unsigned int res = w - ((w >> 1) & 0x55);
+        res = (res & 0x33) + ((res >> 2) & 0x33);
+        return (res + (res >> 4)) & 0x0F;
+}
+
+static inline unsigned int hweight16(unsigned int w)
+{
+        unsigned int res = w - ((w >> 1) & 0x5555);
+        res = (res & 0x3333) + ((res >> 2) & 0x3333);
+        res = (res + (res >> 4)) & 0x0F0F;
+        return (res + (res >> 8)) & 0x00FF;
+}
+
+/**
+ * DECLARE_FLEX_ARRAY() - Declare a flexible array usable in a union
+ *
+ * @TYPE: The type of each flexible array element
+ * @NAME: The name of the flexible array member
+ *
+ * In order to have a flexible array member in a union or alone in a
+ * struct, it needs to be wrapped in an anonymous struct with at least 1
+ * named member, but that member can be empty.
+ */
+#define DECLARE_FLEX_ARRAY(TYPE, NAME) \
+       struct { \
+               struct { } __empty_ ## NAME; \
+               TYPE NAME[]; \
+       }
+
+#define __bf_shf(x) (__builtin_ffsll(x) - 1)
+
+#define FIELD_MAX(_mask)                                                \
+        ({                                                              \
+                (typeof(_mask))((_mask) >> __bf_shf(_mask));            \
+        })
+
 #endif /* __SHARED_COMPILER_H */