]> Pileus Git - ~andy/linux/blobdiff - include/drm/drm_mm.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[~andy/linux] / include / drm / drm_mm.h
index 4d06edb56d5fbb74480d0ffc4b24297870f8149e..cba67865d18f51adabf46f9a18c1071c4e47c19b 100644 (file)
 /*
  * Generic range manager structs
  */
+#include <linux/bug.h>
+#include <linux/kernel.h>
 #include <linux/list.h>
+#include <linux/spinlock.h>
 #ifdef CONFIG_DEBUG_FS
 #include <linux/seq_file.h>
 #endif
 
+enum drm_mm_search_flags {
+       DRM_MM_SEARCH_DEFAULT =         0,
+       DRM_MM_SEARCH_BEST =            1 << 0,
+};
+
 struct drm_mm_node {
        struct list_head node_list;
        struct list_head hole_stack;
@@ -62,9 +70,6 @@ struct drm_mm {
        /* head_node.node_list is the list of all memory nodes, ordered
         * according to the (increasing) start address of the memory node. */
        struct drm_mm_node head_node;
-       struct list_head unused_nodes;
-       int num_unused;
-       spinlock_t unused_lock;
        unsigned int scan_check_range : 1;
        unsigned scan_alignment;
        unsigned long scan_color;
@@ -115,13 +120,6 @@ static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node)
 #define drm_mm_for_each_node(entry, mm) list_for_each_entry(entry, \
                                                &(mm)->head_node.node_list, \
                                                node_list)
-#define drm_mm_for_each_scanned_node_reverse(entry, n, mm) \
-       for (entry = (mm)->prev_scanned_node, \
-               next = entry ? list_entry(entry->node_list.next, \
-                       struct drm_mm_node, node_list) : NULL; \
-            entry != NULL; entry = next, \
-               next = entry ? list_entry(entry->node_list.next, \
-                       struct drm_mm_node, node_list) : NULL) \
 
 /* Note that we need to unroll list_for_each_entry in order to inline
  * setting hole_start and hole_end on each iteration and keep the
@@ -138,124 +136,50 @@ static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node)
 /*
  * Basic range manager support (drm_mm.c)
  */
-extern struct drm_mm_node *drm_mm_create_block(struct drm_mm *mm,
-                                              unsigned long start,
-                                              unsigned long size,
-                                              bool atomic);
-extern struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *node,
-                                                   unsigned long size,
-                                                   unsigned alignment,
-                                                   unsigned long color,
-                                                   int atomic);
-extern struct drm_mm_node *drm_mm_get_block_range_generic(
-                                               struct drm_mm_node *node,
-                                               unsigned long size,
-                                               unsigned alignment,
-                                               unsigned long color,
-                                               unsigned long start,
-                                               unsigned long end,
-                                               int atomic);
-static inline struct drm_mm_node *drm_mm_get_block(struct drm_mm_node *parent,
-                                                  unsigned long size,
-                                                  unsigned alignment)
-{
-       return drm_mm_get_block_generic(parent, size, alignment, 0, 0);
-}
-static inline struct drm_mm_node *drm_mm_get_block_atomic(struct drm_mm_node *parent,
-                                                         unsigned long size,
-                                                         unsigned alignment)
-{
-       return drm_mm_get_block_generic(parent, size, alignment, 0, 1);
-}
-static inline struct drm_mm_node *drm_mm_get_block_range(
-                                               struct drm_mm_node *parent,
-                                               unsigned long size,
-                                               unsigned alignment,
-                                               unsigned long start,
-                                               unsigned long end)
-{
-       return drm_mm_get_block_range_generic(parent, size, alignment, 0,
-                                             start, end, 0);
-}
-static inline struct drm_mm_node *drm_mm_get_block_atomic_range(
-                                               struct drm_mm_node *parent,
-                                               unsigned long size,
-                                               unsigned alignment,
-                                               unsigned long start,
-                                               unsigned long end)
-{
-       return drm_mm_get_block_range_generic(parent, size, alignment, 0,
-                                               start, end, 1);
-}
+extern int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node);
 
-extern int drm_mm_insert_node(struct drm_mm *mm,
-                             struct drm_mm_node *node,
-                             unsigned long size,
-                             unsigned alignment);
-extern int drm_mm_insert_node_in_range(struct drm_mm *mm,
-                                      struct drm_mm_node *node,
-                                      unsigned long size,
-                                      unsigned alignment,
-                                      unsigned long start,
-                                      unsigned long end);
 extern int drm_mm_insert_node_generic(struct drm_mm *mm,
                                      struct drm_mm_node *node,
                                      unsigned long size,
                                      unsigned alignment,
-                                     unsigned long color);
+                                     unsigned long color,
+                                     enum drm_mm_search_flags flags);
+static inline int drm_mm_insert_node(struct drm_mm *mm,
+                                    struct drm_mm_node *node,
+                                    unsigned long size,
+                                    unsigned alignment,
+                                    enum drm_mm_search_flags flags)
+{
+       return drm_mm_insert_node_generic(mm, node, size, alignment, 0, flags);
+}
+
 extern int drm_mm_insert_node_in_range_generic(struct drm_mm *mm,
                                       struct drm_mm_node *node,
                                       unsigned long size,
                                       unsigned alignment,
                                       unsigned long color,
                                       unsigned long start,
-                                      unsigned long end);
-extern void drm_mm_put_block(struct drm_mm_node *cur);
-extern void drm_mm_remove_node(struct drm_mm_node *node);
-extern void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new);
-extern struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
-                                                     unsigned long size,
-                                                     unsigned alignment,
-                                                     unsigned long color,
-                                                     bool best_match);
-extern struct drm_mm_node *drm_mm_search_free_in_range_generic(
-                                               const struct drm_mm *mm,
-                                               unsigned long size,
-                                               unsigned alignment,
-                                               unsigned long color,
-                                               unsigned long start,
-                                               unsigned long end,
-                                               bool best_match);
-static inline struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm,
-                                                    unsigned long size,
-                                                    unsigned alignment,
-                                                    bool best_match)
+                                      unsigned long end,
+                                      enum drm_mm_search_flags flags);
+static inline int drm_mm_insert_node_in_range(struct drm_mm *mm,
+                                             struct drm_mm_node *node,
+                                             unsigned long size,
+                                             unsigned alignment,
+                                             unsigned long start,
+                                             unsigned long end,
+                                             enum drm_mm_search_flags flags)
 {
-       return drm_mm_search_free_generic(mm,size, alignment, 0, best_match);
-}
-static inline  struct drm_mm_node *drm_mm_search_free_in_range(
-                                               const struct drm_mm *mm,
-                                               unsigned long size,
-                                               unsigned alignment,
-                                               unsigned long start,
-                                               unsigned long end,
-                                               bool best_match)
-{
-       return drm_mm_search_free_in_range_generic(mm, size, alignment, 0,
-                                                  start, end, best_match);
+       return drm_mm_insert_node_in_range_generic(mm, node, size, alignment,
+                                                  0, start, end, flags);
 }
 
+extern void drm_mm_remove_node(struct drm_mm_node *node);
+extern void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new);
 extern void drm_mm_init(struct drm_mm *mm,
                        unsigned long start,
                        unsigned long size);
 extern void drm_mm_takedown(struct drm_mm *mm);
 extern int drm_mm_clean(struct drm_mm *mm);
-extern int drm_mm_pre_get(struct drm_mm *mm);
-
-static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)
-{
-       return block->mm;
-}
 
 void drm_mm_init_scan(struct drm_mm *mm,
                      unsigned long size,