1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Media device request objects
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright 2018 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
6*4882a593Smuzhiyun * Copyright (C) 2018 Intel Corporation
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * Author: Hans Verkuil <hans.verkuil@cisco.com>
9*4882a593Smuzhiyun * Author: Sakari Ailus <sakari.ailus@linux.intel.com>
10*4882a593Smuzhiyun */
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun #ifndef MEDIA_REQUEST_H
13*4882a593Smuzhiyun #define MEDIA_REQUEST_H
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun #include <linux/list.h>
16*4882a593Smuzhiyun #include <linux/slab.h>
17*4882a593Smuzhiyun #include <linux/spinlock.h>
18*4882a593Smuzhiyun #include <linux/refcount.h>
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun #include <media/media-device.h>
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun /**
23*4882a593Smuzhiyun * enum media_request_state - media request state
24*4882a593Smuzhiyun *
25*4882a593Smuzhiyun * @MEDIA_REQUEST_STATE_IDLE: Idle
26*4882a593Smuzhiyun * @MEDIA_REQUEST_STATE_VALIDATING: Validating the request, no state changes
27*4882a593Smuzhiyun * allowed
28*4882a593Smuzhiyun * @MEDIA_REQUEST_STATE_QUEUED: Queued
29*4882a593Smuzhiyun * @MEDIA_REQUEST_STATE_COMPLETE: Completed, the request is done
30*4882a593Smuzhiyun * @MEDIA_REQUEST_STATE_CLEANING: Cleaning, the request is being re-inited
31*4882a593Smuzhiyun * @MEDIA_REQUEST_STATE_UPDATING: The request is being updated, i.e.
32*4882a593Smuzhiyun * request objects are being added,
33*4882a593Smuzhiyun * modified or removed
34*4882a593Smuzhiyun * @NR_OF_MEDIA_REQUEST_STATE: The number of media request states, used
35*4882a593Smuzhiyun * internally for sanity check purposes
36*4882a593Smuzhiyun */
37*4882a593Smuzhiyun enum media_request_state {
38*4882a593Smuzhiyun MEDIA_REQUEST_STATE_IDLE,
39*4882a593Smuzhiyun MEDIA_REQUEST_STATE_VALIDATING,
40*4882a593Smuzhiyun MEDIA_REQUEST_STATE_QUEUED,
41*4882a593Smuzhiyun MEDIA_REQUEST_STATE_COMPLETE,
42*4882a593Smuzhiyun MEDIA_REQUEST_STATE_CLEANING,
43*4882a593Smuzhiyun MEDIA_REQUEST_STATE_UPDATING,
44*4882a593Smuzhiyun NR_OF_MEDIA_REQUEST_STATE,
45*4882a593Smuzhiyun };
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun struct media_request_object;
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun /**
50*4882a593Smuzhiyun * struct media_request - Media device request
51*4882a593Smuzhiyun * @mdev: Media device this request belongs to
52*4882a593Smuzhiyun * @kref: Reference count
53*4882a593Smuzhiyun * @debug_str: Prefix for debug messages (process name:fd)
54*4882a593Smuzhiyun * @state: The state of the request
55*4882a593Smuzhiyun * @updating_count: count the number of request updates that are in progress
56*4882a593Smuzhiyun * @access_count: count the number of request accesses that are in progress
57*4882a593Smuzhiyun * @objects: List of @struct media_request_object request objects
58*4882a593Smuzhiyun * @num_incomplete_objects: The number of incomplete objects in the request
59*4882a593Smuzhiyun * @poll_wait: Wait queue for poll
60*4882a593Smuzhiyun * @lock: Serializes access to this struct
61*4882a593Smuzhiyun */
62*4882a593Smuzhiyun struct media_request {
63*4882a593Smuzhiyun struct media_device *mdev;
64*4882a593Smuzhiyun struct kref kref;
65*4882a593Smuzhiyun char debug_str[TASK_COMM_LEN + 11];
66*4882a593Smuzhiyun enum media_request_state state;
67*4882a593Smuzhiyun unsigned int updating_count;
68*4882a593Smuzhiyun unsigned int access_count;
69*4882a593Smuzhiyun struct list_head objects;
70*4882a593Smuzhiyun unsigned int num_incomplete_objects;
71*4882a593Smuzhiyun wait_queue_head_t poll_wait;
72*4882a593Smuzhiyun spinlock_t lock;
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun #ifdef CONFIG_MEDIA_CONTROLLER
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun /**
78*4882a593Smuzhiyun * media_request_lock_for_access - Lock the request to access its objects
79*4882a593Smuzhiyun *
80*4882a593Smuzhiyun * @req: The media request
81*4882a593Smuzhiyun *
82*4882a593Smuzhiyun * Use before accessing a completed request. A reference to the request must
83*4882a593Smuzhiyun * be held during the access. This usually takes place automatically through
84*4882a593Smuzhiyun * a file handle. Use @media_request_unlock_for_access when done.
85*4882a593Smuzhiyun */
86*4882a593Smuzhiyun static inline int __must_check
media_request_lock_for_access(struct media_request * req)87*4882a593Smuzhiyun media_request_lock_for_access(struct media_request *req)
88*4882a593Smuzhiyun {
89*4882a593Smuzhiyun unsigned long flags;
90*4882a593Smuzhiyun int ret = -EBUSY;
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun spin_lock_irqsave(&req->lock, flags);
93*4882a593Smuzhiyun if (req->state == MEDIA_REQUEST_STATE_COMPLETE) {
94*4882a593Smuzhiyun req->access_count++;
95*4882a593Smuzhiyun ret = 0;
96*4882a593Smuzhiyun }
97*4882a593Smuzhiyun spin_unlock_irqrestore(&req->lock, flags);
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun return ret;
100*4882a593Smuzhiyun }
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun /**
103*4882a593Smuzhiyun * media_request_unlock_for_access - Unlock a request previously locked for
104*4882a593Smuzhiyun * access
105*4882a593Smuzhiyun *
106*4882a593Smuzhiyun * @req: The media request
107*4882a593Smuzhiyun *
108*4882a593Smuzhiyun * Unlock a request that has previously been locked using
109*4882a593Smuzhiyun * @media_request_lock_for_access.
110*4882a593Smuzhiyun */
media_request_unlock_for_access(struct media_request * req)111*4882a593Smuzhiyun static inline void media_request_unlock_for_access(struct media_request *req)
112*4882a593Smuzhiyun {
113*4882a593Smuzhiyun unsigned long flags;
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun spin_lock_irqsave(&req->lock, flags);
116*4882a593Smuzhiyun if (!WARN_ON(!req->access_count))
117*4882a593Smuzhiyun req->access_count--;
118*4882a593Smuzhiyun spin_unlock_irqrestore(&req->lock, flags);
119*4882a593Smuzhiyun }
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun /**
122*4882a593Smuzhiyun * media_request_lock_for_update - Lock the request for updating its objects
123*4882a593Smuzhiyun *
124*4882a593Smuzhiyun * @req: The media request
125*4882a593Smuzhiyun *
126*4882a593Smuzhiyun * Use before updating a request, i.e. adding, modifying or removing a request
127*4882a593Smuzhiyun * object in it. A reference to the request must be held during the update. This
128*4882a593Smuzhiyun * usually takes place automatically through a file handle. Use
129*4882a593Smuzhiyun * @media_request_unlock_for_update when done.
130*4882a593Smuzhiyun */
131*4882a593Smuzhiyun static inline int __must_check
media_request_lock_for_update(struct media_request * req)132*4882a593Smuzhiyun media_request_lock_for_update(struct media_request *req)
133*4882a593Smuzhiyun {
134*4882a593Smuzhiyun unsigned long flags;
135*4882a593Smuzhiyun int ret = 0;
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun spin_lock_irqsave(&req->lock, flags);
138*4882a593Smuzhiyun if (req->state == MEDIA_REQUEST_STATE_IDLE ||
139*4882a593Smuzhiyun req->state == MEDIA_REQUEST_STATE_UPDATING) {
140*4882a593Smuzhiyun req->state = MEDIA_REQUEST_STATE_UPDATING;
141*4882a593Smuzhiyun req->updating_count++;
142*4882a593Smuzhiyun } else {
143*4882a593Smuzhiyun ret = -EBUSY;
144*4882a593Smuzhiyun }
145*4882a593Smuzhiyun spin_unlock_irqrestore(&req->lock, flags);
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun return ret;
148*4882a593Smuzhiyun }
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun /**
151*4882a593Smuzhiyun * media_request_unlock_for_update - Unlock a request previously locked for
152*4882a593Smuzhiyun * update
153*4882a593Smuzhiyun *
154*4882a593Smuzhiyun * @req: The media request
155*4882a593Smuzhiyun *
156*4882a593Smuzhiyun * Unlock a request that has previously been locked using
157*4882a593Smuzhiyun * @media_request_lock_for_update.
158*4882a593Smuzhiyun */
media_request_unlock_for_update(struct media_request * req)159*4882a593Smuzhiyun static inline void media_request_unlock_for_update(struct media_request *req)
160*4882a593Smuzhiyun {
161*4882a593Smuzhiyun unsigned long flags;
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun spin_lock_irqsave(&req->lock, flags);
164*4882a593Smuzhiyun WARN_ON(req->updating_count <= 0);
165*4882a593Smuzhiyun if (!--req->updating_count)
166*4882a593Smuzhiyun req->state = MEDIA_REQUEST_STATE_IDLE;
167*4882a593Smuzhiyun spin_unlock_irqrestore(&req->lock, flags);
168*4882a593Smuzhiyun }
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun /**
171*4882a593Smuzhiyun * media_request_get - Get the media request
172*4882a593Smuzhiyun *
173*4882a593Smuzhiyun * @req: The media request
174*4882a593Smuzhiyun *
175*4882a593Smuzhiyun * Get the media request.
176*4882a593Smuzhiyun */
media_request_get(struct media_request * req)177*4882a593Smuzhiyun static inline void media_request_get(struct media_request *req)
178*4882a593Smuzhiyun {
179*4882a593Smuzhiyun kref_get(&req->kref);
180*4882a593Smuzhiyun }
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun /**
183*4882a593Smuzhiyun * media_request_put - Put the media request
184*4882a593Smuzhiyun *
185*4882a593Smuzhiyun * @req: The media request
186*4882a593Smuzhiyun *
187*4882a593Smuzhiyun * Put the media request. The media request will be released
188*4882a593Smuzhiyun * when the refcount reaches 0.
189*4882a593Smuzhiyun */
190*4882a593Smuzhiyun void media_request_put(struct media_request *req);
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun /**
193*4882a593Smuzhiyun * media_request_get_by_fd - Get a media request by fd
194*4882a593Smuzhiyun *
195*4882a593Smuzhiyun * @mdev: Media device this request belongs to
196*4882a593Smuzhiyun * @request_fd: The file descriptor of the request
197*4882a593Smuzhiyun *
198*4882a593Smuzhiyun * Get the request represented by @request_fd that is owned
199*4882a593Smuzhiyun * by the media device.
200*4882a593Smuzhiyun *
201*4882a593Smuzhiyun * Return a -EBADR error pointer if requests are not supported
202*4882a593Smuzhiyun * by this driver. Return -EINVAL if the request was not found.
203*4882a593Smuzhiyun * Return the pointer to the request if found: the caller will
204*4882a593Smuzhiyun * have to call @media_request_put when it finished using the
205*4882a593Smuzhiyun * request.
206*4882a593Smuzhiyun */
207*4882a593Smuzhiyun struct media_request *
208*4882a593Smuzhiyun media_request_get_by_fd(struct media_device *mdev, int request_fd);
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun /**
211*4882a593Smuzhiyun * media_request_alloc - Allocate the media request
212*4882a593Smuzhiyun *
213*4882a593Smuzhiyun * @mdev: Media device this request belongs to
214*4882a593Smuzhiyun * @alloc_fd: Store the request's file descriptor in this int
215*4882a593Smuzhiyun *
216*4882a593Smuzhiyun * Allocated the media request and put the fd in @alloc_fd.
217*4882a593Smuzhiyun */
218*4882a593Smuzhiyun int media_request_alloc(struct media_device *mdev,
219*4882a593Smuzhiyun int *alloc_fd);
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun #else
222*4882a593Smuzhiyun
media_request_get(struct media_request * req)223*4882a593Smuzhiyun static inline void media_request_get(struct media_request *req)
224*4882a593Smuzhiyun {
225*4882a593Smuzhiyun }
226*4882a593Smuzhiyun
media_request_put(struct media_request * req)227*4882a593Smuzhiyun static inline void media_request_put(struct media_request *req)
228*4882a593Smuzhiyun {
229*4882a593Smuzhiyun }
230*4882a593Smuzhiyun
231*4882a593Smuzhiyun static inline struct media_request *
media_request_get_by_fd(struct media_device * mdev,int request_fd)232*4882a593Smuzhiyun media_request_get_by_fd(struct media_device *mdev, int request_fd)
233*4882a593Smuzhiyun {
234*4882a593Smuzhiyun return ERR_PTR(-EBADR);
235*4882a593Smuzhiyun }
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun #endif
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun /**
240*4882a593Smuzhiyun * struct media_request_object_ops - Media request object operations
241*4882a593Smuzhiyun * @prepare: Validate and prepare the request object, optional.
242*4882a593Smuzhiyun * @unprepare: Unprepare the request object, optional.
243*4882a593Smuzhiyun * @queue: Queue the request object, optional.
244*4882a593Smuzhiyun * @unbind: Unbind the request object, optional.
245*4882a593Smuzhiyun * @release: Release the request object, required.
246*4882a593Smuzhiyun */
247*4882a593Smuzhiyun struct media_request_object_ops {
248*4882a593Smuzhiyun int (*prepare)(struct media_request_object *object);
249*4882a593Smuzhiyun void (*unprepare)(struct media_request_object *object);
250*4882a593Smuzhiyun void (*queue)(struct media_request_object *object);
251*4882a593Smuzhiyun void (*unbind)(struct media_request_object *object);
252*4882a593Smuzhiyun void (*release)(struct media_request_object *object);
253*4882a593Smuzhiyun };
254*4882a593Smuzhiyun
255*4882a593Smuzhiyun /**
256*4882a593Smuzhiyun * struct media_request_object - An opaque object that belongs to a media
257*4882a593Smuzhiyun * request
258*4882a593Smuzhiyun *
259*4882a593Smuzhiyun * @ops: object's operations
260*4882a593Smuzhiyun * @priv: object's priv pointer
261*4882a593Smuzhiyun * @req: the request this object belongs to (can be NULL)
262*4882a593Smuzhiyun * @list: List entry of the object for @struct media_request
263*4882a593Smuzhiyun * @kref: Reference count of the object, acquire before releasing req->lock
264*4882a593Smuzhiyun * @completed: If true, then this object was completed.
265*4882a593Smuzhiyun *
266*4882a593Smuzhiyun * An object related to the request. This struct is always embedded in
267*4882a593Smuzhiyun * another struct that contains the actual data for this request object.
268*4882a593Smuzhiyun */
269*4882a593Smuzhiyun struct media_request_object {
270*4882a593Smuzhiyun const struct media_request_object_ops *ops;
271*4882a593Smuzhiyun void *priv;
272*4882a593Smuzhiyun struct media_request *req;
273*4882a593Smuzhiyun struct list_head list;
274*4882a593Smuzhiyun struct kref kref;
275*4882a593Smuzhiyun bool completed;
276*4882a593Smuzhiyun };
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun #ifdef CONFIG_MEDIA_CONTROLLER
279*4882a593Smuzhiyun
280*4882a593Smuzhiyun /**
281*4882a593Smuzhiyun * media_request_object_get - Get a media request object
282*4882a593Smuzhiyun *
283*4882a593Smuzhiyun * @obj: The object
284*4882a593Smuzhiyun *
285*4882a593Smuzhiyun * Get a media request object.
286*4882a593Smuzhiyun */
media_request_object_get(struct media_request_object * obj)287*4882a593Smuzhiyun static inline void media_request_object_get(struct media_request_object *obj)
288*4882a593Smuzhiyun {
289*4882a593Smuzhiyun kref_get(&obj->kref);
290*4882a593Smuzhiyun }
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun /**
293*4882a593Smuzhiyun * media_request_object_put - Put a media request object
294*4882a593Smuzhiyun *
295*4882a593Smuzhiyun * @obj: The object
296*4882a593Smuzhiyun *
297*4882a593Smuzhiyun * Put a media request object. Once all references are gone, the
298*4882a593Smuzhiyun * object's memory is released.
299*4882a593Smuzhiyun */
300*4882a593Smuzhiyun void media_request_object_put(struct media_request_object *obj);
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun /**
303*4882a593Smuzhiyun * media_request_object_find - Find an object in a request
304*4882a593Smuzhiyun *
305*4882a593Smuzhiyun * @req: The media request
306*4882a593Smuzhiyun * @ops: Find an object with this ops value
307*4882a593Smuzhiyun * @priv: Find an object with this priv value
308*4882a593Smuzhiyun *
309*4882a593Smuzhiyun * Both @ops and @priv must be non-NULL.
310*4882a593Smuzhiyun *
311*4882a593Smuzhiyun * Returns the object pointer or NULL if not found. The caller must
312*4882a593Smuzhiyun * call media_request_object_put() once it finished using the object.
313*4882a593Smuzhiyun *
314*4882a593Smuzhiyun * Since this function needs to walk the list of objects it takes
315*4882a593Smuzhiyun * the @req->lock spin lock to make this safe.
316*4882a593Smuzhiyun */
317*4882a593Smuzhiyun struct media_request_object *
318*4882a593Smuzhiyun media_request_object_find(struct media_request *req,
319*4882a593Smuzhiyun const struct media_request_object_ops *ops,
320*4882a593Smuzhiyun void *priv);
321*4882a593Smuzhiyun
322*4882a593Smuzhiyun /**
323*4882a593Smuzhiyun * media_request_object_init - Initialise a media request object
324*4882a593Smuzhiyun *
325*4882a593Smuzhiyun * @obj: The object
326*4882a593Smuzhiyun *
327*4882a593Smuzhiyun * Initialise a media request object. The object will be released using the
328*4882a593Smuzhiyun * release callback of the ops once it has no references (this function
329*4882a593Smuzhiyun * initialises references to one).
330*4882a593Smuzhiyun */
331*4882a593Smuzhiyun void media_request_object_init(struct media_request_object *obj);
332*4882a593Smuzhiyun
333*4882a593Smuzhiyun /**
334*4882a593Smuzhiyun * media_request_object_bind - Bind a media request object to a request
335*4882a593Smuzhiyun *
336*4882a593Smuzhiyun * @req: The media request
337*4882a593Smuzhiyun * @ops: The object ops for this object
338*4882a593Smuzhiyun * @priv: A driver-specific priv pointer associated with this object
339*4882a593Smuzhiyun * @is_buffer: Set to true if the object a buffer object.
340*4882a593Smuzhiyun * @obj: The object
341*4882a593Smuzhiyun *
342*4882a593Smuzhiyun * Bind this object to the request and set the ops and priv values of
343*4882a593Smuzhiyun * the object so it can be found later with media_request_object_find().
344*4882a593Smuzhiyun *
345*4882a593Smuzhiyun * Every bound object must be unbound or completed by the kernel at some
346*4882a593Smuzhiyun * point in time, otherwise the request will never complete. When the
347*4882a593Smuzhiyun * request is released all completed objects will be unbound by the
348*4882a593Smuzhiyun * request core code.
349*4882a593Smuzhiyun *
350*4882a593Smuzhiyun * Buffer objects will be added to the end of the request's object
351*4882a593Smuzhiyun * list, non-buffer objects will be added to the front of the list.
352*4882a593Smuzhiyun * This ensures that all buffer objects are at the end of the list
353*4882a593Smuzhiyun * and that all non-buffer objects that they depend on are processed
354*4882a593Smuzhiyun * first.
355*4882a593Smuzhiyun */
356*4882a593Smuzhiyun int media_request_object_bind(struct media_request *req,
357*4882a593Smuzhiyun const struct media_request_object_ops *ops,
358*4882a593Smuzhiyun void *priv, bool is_buffer,
359*4882a593Smuzhiyun struct media_request_object *obj);
360*4882a593Smuzhiyun
361*4882a593Smuzhiyun /**
362*4882a593Smuzhiyun * media_request_object_unbind - Unbind a media request object
363*4882a593Smuzhiyun *
364*4882a593Smuzhiyun * @obj: The object
365*4882a593Smuzhiyun *
366*4882a593Smuzhiyun * Unbind the media request object from the request.
367*4882a593Smuzhiyun */
368*4882a593Smuzhiyun void media_request_object_unbind(struct media_request_object *obj);
369*4882a593Smuzhiyun
370*4882a593Smuzhiyun /**
371*4882a593Smuzhiyun * media_request_object_complete - Mark the media request object as complete
372*4882a593Smuzhiyun *
373*4882a593Smuzhiyun * @obj: The object
374*4882a593Smuzhiyun *
375*4882a593Smuzhiyun * Mark the media request object as complete. Only bound objects can
376*4882a593Smuzhiyun * be completed.
377*4882a593Smuzhiyun */
378*4882a593Smuzhiyun void media_request_object_complete(struct media_request_object *obj);
379*4882a593Smuzhiyun
380*4882a593Smuzhiyun #else
381*4882a593Smuzhiyun
382*4882a593Smuzhiyun static inline int __must_check
media_request_lock_for_access(struct media_request * req)383*4882a593Smuzhiyun media_request_lock_for_access(struct media_request *req)
384*4882a593Smuzhiyun {
385*4882a593Smuzhiyun return -EINVAL;
386*4882a593Smuzhiyun }
387*4882a593Smuzhiyun
media_request_unlock_for_access(struct media_request * req)388*4882a593Smuzhiyun static inline void media_request_unlock_for_access(struct media_request *req)
389*4882a593Smuzhiyun {
390*4882a593Smuzhiyun }
391*4882a593Smuzhiyun
392*4882a593Smuzhiyun static inline int __must_check
media_request_lock_for_update(struct media_request * req)393*4882a593Smuzhiyun media_request_lock_for_update(struct media_request *req)
394*4882a593Smuzhiyun {
395*4882a593Smuzhiyun return -EINVAL;
396*4882a593Smuzhiyun }
397*4882a593Smuzhiyun
media_request_unlock_for_update(struct media_request * req)398*4882a593Smuzhiyun static inline void media_request_unlock_for_update(struct media_request *req)
399*4882a593Smuzhiyun {
400*4882a593Smuzhiyun }
401*4882a593Smuzhiyun
media_request_object_get(struct media_request_object * obj)402*4882a593Smuzhiyun static inline void media_request_object_get(struct media_request_object *obj)
403*4882a593Smuzhiyun {
404*4882a593Smuzhiyun }
405*4882a593Smuzhiyun
media_request_object_put(struct media_request_object * obj)406*4882a593Smuzhiyun static inline void media_request_object_put(struct media_request_object *obj)
407*4882a593Smuzhiyun {
408*4882a593Smuzhiyun }
409*4882a593Smuzhiyun
410*4882a593Smuzhiyun static inline struct media_request_object *
media_request_object_find(struct media_request * req,const struct media_request_object_ops * ops,void * priv)411*4882a593Smuzhiyun media_request_object_find(struct media_request *req,
412*4882a593Smuzhiyun const struct media_request_object_ops *ops,
413*4882a593Smuzhiyun void *priv)
414*4882a593Smuzhiyun {
415*4882a593Smuzhiyun return NULL;
416*4882a593Smuzhiyun }
417*4882a593Smuzhiyun
media_request_object_init(struct media_request_object * obj)418*4882a593Smuzhiyun static inline void media_request_object_init(struct media_request_object *obj)
419*4882a593Smuzhiyun {
420*4882a593Smuzhiyun obj->ops = NULL;
421*4882a593Smuzhiyun obj->req = NULL;
422*4882a593Smuzhiyun }
423*4882a593Smuzhiyun
media_request_object_bind(struct media_request * req,const struct media_request_object_ops * ops,void * priv,bool is_buffer,struct media_request_object * obj)424*4882a593Smuzhiyun static inline int media_request_object_bind(struct media_request *req,
425*4882a593Smuzhiyun const struct media_request_object_ops *ops,
426*4882a593Smuzhiyun void *priv, bool is_buffer,
427*4882a593Smuzhiyun struct media_request_object *obj)
428*4882a593Smuzhiyun {
429*4882a593Smuzhiyun return 0;
430*4882a593Smuzhiyun }
431*4882a593Smuzhiyun
media_request_object_unbind(struct media_request_object * obj)432*4882a593Smuzhiyun static inline void media_request_object_unbind(struct media_request_object *obj)
433*4882a593Smuzhiyun {
434*4882a593Smuzhiyun }
435*4882a593Smuzhiyun
media_request_object_complete(struct media_request_object * obj)436*4882a593Smuzhiyun static inline void media_request_object_complete(struct media_request_object *obj)
437*4882a593Smuzhiyun {
438*4882a593Smuzhiyun }
439*4882a593Smuzhiyun
440*4882a593Smuzhiyun #endif
441*4882a593Smuzhiyun
442*4882a593Smuzhiyun #endif
443