xref: /OK3568_Linux_fs/kernel/include/media/media-request.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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