Move bitmap functions to a new home.
authormglocker <mglocker@openbsd.org>
Thu, 8 Sep 2022 18:16:26 +0000 (18:16 +0000)
committermglocker <mglocker@openbsd.org>
Thu, 8 Sep 2022 18:16:26 +0000 (18:16 +0000)
ok kettenis@

sys/dev/usb/dwc2/bitmap.h [new file with mode: 0644]
sys/dev/usb/dwc2/dwc2_hcdqueue.c

diff --git a/sys/dev/usb/dwc2/bitmap.h b/sys/dev/usb/dwc2/bitmap.h
new file mode 100644 (file)
index 0000000..9e32e8b
--- /dev/null
@@ -0,0 +1,137 @@
+/*     $OpenBSD: bitmap.h,v 1.1 2022/09/08 18:16:26 mglocker Exp $ */
+
+/*
+ * Copyright 2004 Eric Anholt
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+static inline void
+__clear_bit(u_int b, volatile void *p)
+{
+       volatile u_int *ptr = (volatile u_int *)p;
+       ptr[b >> 5] &= ~(1 << (b & 0x1f));
+}
+
+static inline void
+__set_bit(u_int b, volatile void *p)
+{
+       volatile u_int *ptr = (volatile u_int *)p;
+       ptr[b >> 5] |= (1 << (b & 0x1f));
+}
+
+static inline int
+find_next_zero_bit(volatile void *p, int max, int b)
+{
+       volatile u_int *ptr = (volatile u_int *)p;
+
+       for (; b < max; b += 32) {
+               if (ptr[b >> 5] != ~0) {
+                       for (;;) {
+                               if ((ptr[b >> 5] & (1 << (b & 0x1f))) == 0)
+                                       return b;
+                               b++;
+                       }
+               }
+       }
+       return max;
+}
+
+static inline int
+find_next_bit(volatile void *p, int max, int b)
+{
+       volatile u_int *ptr = (volatile u_int *)p;
+
+       for (; b < max; b+= 32) {
+               if (ptr[b >> 5] != 0) {
+                       for (;;) {
+                               if (ptr[b >> 5] & (1 << (b & 0x1f)))
+                                       return b;
+                               b++;
+                       }
+               }
+       }
+       return max;
+}
+
+/*
+ * Copyright (c) 2013, 2014, 2015 Mark Kettenis
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+static inline void
+bitmap_set(void *p, int b, u_int n)
+{
+       u_int end = b + n;
+
+       for (; b < end; b++)
+               __set_bit(b, p);
+}
+
+static inline void
+bitmap_clear(void *p, int b, u_int n)
+{
+       u_int end = b + n;
+
+       for (; b < end; b++)
+               __clear_bit(b, p);
+}
+
+static inline u_long
+bitmap_find_next_zero_area_off(void *p, u_long size, u_long start, u_long n,
+    u_long align_mask, u_long align_offset)
+{
+       u_long index, end, i;
+
+       while (1) {
+               index = (((find_next_zero_bit(p, size, start) +
+                   align_offset) + align_mask) & ~align_mask) - align_offset;
+
+               end = index + n;
+               if (end > size)
+                       return end;
+
+               i = find_next_bit(p, end, index);
+               if (i >= end)
+                       break;
+               start = i + 1;
+       }
+
+       return index;
+}
+
+static inline unsigned long
+bitmap_find_next_zero_area(void *p, u_long size, u_long start, u_long n,
+    u_long align_mask)
+{
+       return bitmap_find_next_zero_area_off(p, size, start, n, align_mask, 0);
+}
index 9f56c26..7a0013d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: dwc2_hcdqueue.c,v 1.13 2022/09/04 08:42:40 mglocker Exp $     */
+/*     $OpenBSD: dwc2_hcdqueue.c,v 1.14 2022/09/08 18:16:26 mglocker Exp $     */
 /*     $NetBSD: dwc2_hcdqueue.c,v 1.11 2014/09/03 10:00:08 skrll Exp $ */
 
 /*
 #include <dev/usb/dwc2/dwc2_hcd.h>
 
 #include <dev/usb/dwc2/gcd.h>
-
-/*
- * XXX: Include from dev/pci/drm/include/linux?  Although,
- * bitmap_find_next_zero_area() is missing there currently ...
- */
-static inline void
-__set_bit(u_int b, volatile void *p)
-{
-       volatile u_int *ptr = (volatile u_int *)p;
-       ptr[b >> 5] |= (1 << (b & 0x1f));
-}
-
-static inline void
-__clear_bit(u_int b, volatile void *p)
-{
-       volatile u_int *ptr = (volatile u_int *)p;
-       ptr[b >> 5] &= ~(1 << (b & 0x1f));
-}
-
-static inline int
-find_next_bit(volatile void *p, int max, int b)
-{
-       volatile u_int *ptr = (volatile u_int *)p;
-
-       for (; b < max; b+= 32) {
-               if (ptr[b >> 5] != 0) {
-                       for (;;) {
-                               if (ptr[b >> 5] & (1 << (b & 0x1f)))
-                                       return b;
-                               b++;
-                       }
-               }
-       }
-       return max;
-}
-
-static inline int
-find_next_zero_bit(volatile void *p, int max, int b)
-{
-       volatile u_int *ptr = (volatile u_int *)p;
-
-       for (; b < max; b += 32) {
-               if (ptr[b >> 5] != ~0) {
-                       for (;;) {
-                               if ((ptr[b >> 5] & (1 << (b & 0x1f))) == 0)
-                                       return b;
-                               b++;
-                       }
-               }
-       }
-       return max;
-}
-
-unsigned long
-bitmap_find_next_zero_area_off(unsigned long *,
-                              unsigned long,
-                              unsigned long,
-                              unsigned int,
-                              unsigned long,
-                              unsigned long);
-
-#define __ALIGN_KERNEL_MASK(x, mask)   (((x) + (mask)) & ~(mask))
-#define __ALIGN_MASK(x, mask)          __ALIGN_KERNEL_MASK((x), (mask))
-
-unsigned long
-bitmap_find_next_zero_area_off(unsigned long *map,
-                              unsigned long size,
-                              unsigned long start,
-                              unsigned int nr,
-                              unsigned long align_mask,
-                              unsigned long align_offset)
-{
-       unsigned long index, end, i;
-again:
-       index = find_next_zero_bit(map, size, start);
-
-       /* Align allocation */
-       index = __ALIGN_MASK(index + align_offset, align_mask) - align_offset;
-
-       end = index + nr;
-       if (end > size)
-               return end;
-       i = find_next_bit(map, end, index);
-       if (i < end) {
-               start = i + 1;
-               goto again;
-       }
-       return index;
-}
-
-static inline unsigned long
-bitmap_find_next_zero_area(unsigned long *map,
-                          unsigned long size,
-                          unsigned long start,
-                          unsigned int nr,
-                          unsigned long align_mask)
-{
-       return bitmap_find_next_zero_area_off(map, size, start, nr,
-                                             align_mask, 0);
-}
-
-static inline void
-bitmap_set(void *p, int b, u_int n)
-{
-       u_int end = b + n;
-
-       for (; b < end; b++)
-               __set_bit(b, p);
-}
-
-static inline void
-bitmap_clear(void *p, int b, u_int n)
-{
-       u_int end = b + n;
-
-       for (; b < end; b++)
-               __clear_bit(b, p);
-}
+#include <dev/usb/dwc2/bitmap.h>
 
 STATIC void dwc2_wait_timer_fn(void *);