~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/drm/drm_flip_work.h

Version: ~ [ linux-4.17-rc1 ] ~ [ linux-4.16.2 ] ~ [ linux-4.15.17 ] ~ [ linux-4.14.34 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.94 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.128 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.51 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.105 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.56 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.101 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.27.62 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Copyright (C) 2013 Red Hat
  3  *
  4  * Permission is hereby granted, free of charge, to any person obtaining a
  5  * copy of this software and associated documentation files (the "Software"),
  6  * to deal in the Software without restriction, including without limitation
  7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8  * and/or sell copies of the Software, and to permit persons to whom the
  9  * Software is furnished to do so, subject to the following conditions:
 10  *
 11  * The above copyright notice and this permission notice (including the next
 12  * paragraph) shall be included in all copies or substantial portions of the
 13  * Software.
 14  *
 15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 21  * SOFTWARE.
 22  */
 23 
 24 #ifndef DRM_FLIP_WORK_H
 25 #define DRM_FLIP_WORK_H
 26 
 27 #include <linux/kfifo.h>
 28 #include <linux/spinlock.h>
 29 #include <linux/workqueue.h>
 30 
 31 /**
 32  * DOC: flip utils
 33  *
 34  * Util to queue up work to run from work-queue context after flip/vblank.
 35  * Typically this can be used to defer unref of framebuffer's, cursor
 36  * bo's, etc until after vblank.  The APIs are all thread-safe.
 37  * Moreover, drm_flip_work_queue_task and drm_flip_work_queue can be called
 38  * in atomic context.
 39  */
 40 
 41 struct drm_flip_work;
 42 
 43 /*
 44  * drm_flip_func_t - callback function
 45  *
 46  * @work: the flip work
 47  * @val: value queued via drm_flip_work_queue()
 48  *
 49  * Callback function to be called for each of the  queue'd work items after
 50  * drm_flip_work_commit() is called.
 51  */
 52 typedef void (*drm_flip_func_t)(struct drm_flip_work *work, void *val);
 53 
 54 /**
 55  * struct drm_flip_task - flip work task
 56  * @node: list entry element
 57  * @data: data to pass to &drm_flip_work.func
 58  */
 59 struct drm_flip_task {
 60         struct list_head node;
 61         void *data;
 62 };
 63 
 64 /**
 65  * struct drm_flip_work - flip work queue
 66  * @name: debug name
 67  * @func: callback fxn called for each committed item
 68  * @worker: worker which calls @func
 69  * @queued: queued tasks
 70  * @commited: commited tasks
 71  * @lock: lock to access queued and commited lists
 72  */
 73 struct drm_flip_work {
 74         const char *name;
 75         drm_flip_func_t func;
 76         struct work_struct worker;
 77         struct list_head queued;
 78         struct list_head commited;
 79         spinlock_t lock;
 80 };
 81 
 82 struct drm_flip_task *drm_flip_work_allocate_task(void *data, gfp_t flags);
 83 void drm_flip_work_queue_task(struct drm_flip_work *work,
 84                               struct drm_flip_task *task);
 85 void drm_flip_work_queue(struct drm_flip_work *work, void *val);
 86 void drm_flip_work_commit(struct drm_flip_work *work,
 87                 struct workqueue_struct *wq);
 88 void drm_flip_work_init(struct drm_flip_work *work,
 89                 const char *name, drm_flip_func_t func);
 90 void drm_flip_work_cleanup(struct drm_flip_work *work);
 91 
 92 #endif  /* DRM_FLIP_WORK_H */
 93 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp