summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2015-05-07 13:03:47 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-07-30 00:11:09 -0400
commit5363bb1d10c88e54ecdb9662b5f96b3909869885 (patch)
treec5c5c0213377a45ce99d89470bc8134b0d0742b4
parentfc083322b0c8a58b51976adf23a582bce8bb75f1 (diff)
drm: consolidate common list implementations (v2)
This is used by radeon and freedreno and will be used by amdgpu. I looked at switching to libdrm_lists.h, but it's pretty horrible. E.g., DRMLISTFOREACHENTRYSAFE. v2: remove missed list.h from tests/radeon/Makefile.am Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--Makefile.sources3
-rw-r--r--freedreno/Makefile.sources3
-rw-r--r--freedreno/freedreno_priv.h2
-rw-r--r--tests/radeon/Makefile.am1
-rw-r--r--tests/radeon/list.h137
-rw-r--r--tests/radeon/rbo.h2
-rw-r--r--util_double_list.h (renamed from freedreno/list.h)0
7 files changed, 5 insertions, 143 deletions
diff --git a/Makefile.sources b/Makefile.sources
index 8b563292..38626be6 100644
--- a/Makefile.sources
+++ b/Makefile.sources
@@ -8,7 +8,8 @@ LIBDRM_FILES := \
xf86drmMode.c \
xf86atomic.h \
libdrm_macros.h \
- libdrm_lists.h
+ libdrm_lists.h \
+ util_double_list.h
LIBDRM_H_FILES := \
xf86drm.h \
diff --git a/freedreno/Makefile.sources b/freedreno/Makefile.sources
index c8c0244f..57a8bf1b 100644
--- a/freedreno/Makefile.sources
+++ b/freedreno/Makefile.sources
@@ -9,8 +9,7 @@ LIBDRM_FREEDRENO_FILES := \
msm/msm_drm.h \
msm/msm_pipe.c \
msm/msm_priv.h \
- msm/msm_ringbuffer.c \
- list.h
+ msm/msm_ringbuffer.c
LIBDRM_FREEDRENO_KGSL_FILES := \
kgsl/kgsl_bo.c \
diff --git a/freedreno/freedreno_priv.h b/freedreno/freedreno_priv.h
index 3c194fb3..cb24780d 100644
--- a/freedreno/freedreno_priv.h
+++ b/freedreno/freedreno_priv.h
@@ -48,7 +48,7 @@
#include "xf86drm.h"
#include "xf86atomic.h"
-#include "list.h"
+#include "util_double_list.h"
#include "freedreno_drmif.h"
#include "freedreno_ringbuffer.h"
diff --git a/tests/radeon/Makefile.am b/tests/radeon/Makefile.am
index d18620da..9da76259 100644
--- a/tests/radeon/Makefile.am
+++ b/tests/radeon/Makefile.am
@@ -11,5 +11,4 @@ noinst_PROGRAMS = \
radeon_ttm_SOURCES = \
rbo.c \
rbo.h \
- list.h \
radeon_ttm.c
diff --git a/tests/radeon/list.h b/tests/radeon/list.h
deleted file mode 100644
index 27e0761b..00000000
--- a/tests/radeon/list.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- *
- * Copyright 2006 Tungsten Graphics, Inc., Bismarck, ND. USA.
- * 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, sub license, 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 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 NON-INFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS, AUTHORS 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.
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- */
-
-/**
- * \file
- * List macros heavily inspired by the Linux kernel
- * list handling. No list looping yet.
- *
- * Is not threadsafe, so common operations need to
- * be protected using an external mutex.
- */
-#ifndef _U_DOUBLE_LIST_H_
-#define _U_DOUBLE_LIST_H_
-
-#include <stddef.h>
-
-struct list_head
-{
- struct list_head *prev;
- struct list_head *next;
-};
-
-static inline void list_inithead(struct list_head *item)
-{
- item->prev = item;
- item->next = item;
-}
-
-static inline void list_add(struct list_head *item, struct list_head *list)
-{
- item->prev = list;
- item->next = list->next;
- list->next->prev = item;
- list->next = item;
-}
-
-static inline void list_addtail(struct list_head *item, struct list_head *list)
-{
- item->next = list;
- item->prev = list->prev;
- list->prev->next = item;
- list->prev = item;
-}
-
-static inline void list_replace(struct list_head *from, struct list_head *to)
-{
- to->prev = from->prev;
- to->next = from->next;
- from->next->prev = to;
- from->prev->next = to;
-}
-
-static inline void list_del(struct list_head *item)
-{
- item->prev->next = item->next;
- item->next->prev = item->prev;
-}
-
-static inline void list_delinit(struct list_head *item)
-{
- item->prev->next = item->next;
- item->next->prev = item->prev;
- item->next = item;
- item->prev = item;
-}
-
-#define LIST_INITHEAD(__item) list_inithead(__item)
-#define LIST_ADD(__item, __list) list_add(__item, __list)
-#define LIST_ADDTAIL(__item, __list) list_addtail(__item, __list)
-#define LIST_REPLACE(__from, __to) list_replace(__from, __to)
-#define LIST_DEL(__item) list_del(__item)
-#define LIST_DELINIT(__item) list_delinit(__item)
-
-#define LIST_ENTRY(__type, __item, __field) \
- ((__type *)(((char *)(__item)) - offsetof(__type, __field)))
-
-#define LIST_IS_EMPTY(__list) \
- ((__list)->next == (__list))
-
-#ifndef container_of
-#define container_of(ptr, sample, member) \
- (void *)((char *)(ptr) \
- - ((char *)&(sample)->member - (char *)(sample)))
-#endif
-
-#define LIST_FOR_EACH_ENTRY(pos, head, member) \
- for (pos = container_of((head)->next, pos, member); \
- &pos->member != (head); \
- pos = container_of(pos->member.next, pos, member))
-
-#define LIST_FOR_EACH_ENTRY_SAFE(pos, storage, head, member) \
- for (pos = container_of((head)->next, pos, member), \
- storage = container_of(pos->member.next, pos, member); \
- &pos->member != (head); \
- pos = storage, storage = container_of(storage->member.next, storage, member))
-
-#define LIST_FOR_EACH_ENTRY_SAFE_REV(pos, storage, head, member) \
- for (pos = container_of((head)->prev, pos, member), \
- storage = container_of(pos->member.prev, pos, member); \
- &pos->member != (head); \
- pos = storage, storage = container_of(storage->member.prev, storage, member))
-
-#define LIST_FOR_EACH_ENTRY_FROM(pos, start, head, member) \
- for (pos = container_of((start), pos, member); \
- &pos->member != (head); \
- pos = container_of(pos->member.next, pos, member))
-
-#define LIST_FOR_EACH_ENTRY_FROM_REV(pos, start, head, member) \
- for (pos = container_of((start), pos, member); \
- &pos->member != (head); \
- pos = container_of(pos->member.prev, pos, member))
-
-#endif /*_U_DOUBLE_LIST_H_*/
diff --git a/tests/radeon/rbo.h b/tests/radeon/rbo.h
index c25c73a4..9164091d 100644
--- a/tests/radeon/rbo.h
+++ b/tests/radeon/rbo.h
@@ -26,7 +26,7 @@
#ifndef RBO_H
#define RBO_H
-#include "list.h"
+#include "util_double_list.h"
struct rbo {
struct list_head list;
diff --git a/freedreno/list.h b/util_double_list.h
index 27e0761b..27e0761b 100644
--- a/freedreno/list.h
+++ b/util_double_list.h