Blame view
include/drm/drm_flip_work.h
3 KB
cabaafc78 drm: add flip-wor... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* * Copyright (C) 2013 Red Hat * * 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 * THE AUTHORS OR COPYRIGHT HOLDERS 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. */ #ifndef DRM_FLIP_WORK_H #define DRM_FLIP_WORK_H #include <linux/kfifo.h> |
8bd4ae202 drm: rework flip-... |
28 |
#include <linux/spinlock.h> |
cabaafc78 drm: add flip-wor... |
29 30 31 32 33 34 35 |
#include <linux/workqueue.h> /** * DOC: flip utils * * Util to queue up work to run from work-queue context after flip/vblank. * Typically this can be used to defer unref of framebuffer's, cursor |
8bd4ae202 drm: rework flip-... |
36 37 38 |
* bo's, etc until after vblank. The APIs are all thread-safe. * Moreover, drm_flip_work_queue_task and drm_flip_work_queue can be called * in atomic context. |
cabaafc78 drm: add flip-wor... |
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
*/ struct drm_flip_work; /* * drm_flip_func_t - callback function * * @work: the flip work * @val: value queued via drm_flip_work_queue() * * Callback function to be called for each of the queue'd work items after * drm_flip_work_commit() is called. */ typedef void (*drm_flip_func_t)(struct drm_flip_work *work, void *val); /** |
8bd4ae202 drm: rework flip-... |
55 56 57 58 59 60 61 62 63 64 |
* struct drm_flip_task - flip work task * @node: list entry element * @data: data to pass to work->func */ struct drm_flip_task { struct list_head node; void *data; }; /** |
cabaafc78 drm: add flip-wor... |
65 66 |
* struct drm_flip_work - flip work queue * @name: debug name |
cabaafc78 drm: add flip-wor... |
67 68 |
* @func: callback fxn called for each committed item * @worker: worker which calls @func |
8bd4ae202 drm: rework flip-... |
69 70 71 |
* @queued: queued tasks * @commited: commited tasks * @lock: lock to access queued and commited lists |
cabaafc78 drm: add flip-wor... |
72 73 74 |
*/ struct drm_flip_work { const char *name; |
cabaafc78 drm: add flip-wor... |
75 76 |
drm_flip_func_t func; struct work_struct worker; |
8bd4ae202 drm: rework flip-... |
77 78 79 |
struct list_head queued; struct list_head commited; spinlock_t lock; |
cabaafc78 drm: add flip-wor... |
80 |
}; |
8bd4ae202 drm: rework flip-... |
81 82 83 |
struct drm_flip_task *drm_flip_work_allocate_task(void *data, gfp_t flags); void drm_flip_work_queue_task(struct drm_flip_work *work, struct drm_flip_task *task); |
cabaafc78 drm: add flip-wor... |
84 85 86 |
void drm_flip_work_queue(struct drm_flip_work *work, void *val); void drm_flip_work_commit(struct drm_flip_work *work, struct workqueue_struct *wq); |
d7f8db530 drm: flip-work: c... |
87 |
void drm_flip_work_init(struct drm_flip_work *work, |
cabaafc78 drm: add flip-wor... |
88 89 90 91 |
const char *name, drm_flip_func_t func); void drm_flip_work_cleanup(struct drm_flip_work *work); #endif /* DRM_FLIP_WORK_H */ |