xref: /linux/include/media/media-request.h (revision e79c7159)
110905d70SHans Verkuil // SPDX-License-Identifier: GPL-2.0
210905d70SHans Verkuil /*
310905d70SHans Verkuil  * Media device request objects
410905d70SHans Verkuil  *
510905d70SHans Verkuil  * Copyright 2018 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
610905d70SHans Verkuil  * Copyright (C) 2018 Intel Corporation
710905d70SHans Verkuil  *
810905d70SHans Verkuil  * Author: Hans Verkuil <hans.verkuil@cisco.com>
910905d70SHans Verkuil  * Author: Sakari Ailus <sakari.ailus@linux.intel.com>
1010905d70SHans Verkuil  */
1110905d70SHans Verkuil 
1210905d70SHans Verkuil #ifndef MEDIA_REQUEST_H
1310905d70SHans Verkuil #define MEDIA_REQUEST_H
1410905d70SHans Verkuil 
1510905d70SHans Verkuil #include <linux/list.h>
1610905d70SHans Verkuil #include <linux/slab.h>
1710905d70SHans Verkuil #include <linux/spinlock.h>
1810905d70SHans Verkuil #include <linux/refcount.h>
1910905d70SHans Verkuil 
2010905d70SHans Verkuil #include <media/media-device.h>
2110905d70SHans Verkuil 
2210905d70SHans Verkuil /**
2310905d70SHans Verkuil  * enum media_request_state - media request state
2410905d70SHans Verkuil  *
2510905d70SHans Verkuil  * @MEDIA_REQUEST_STATE_IDLE:		Idle
2610905d70SHans Verkuil  * @MEDIA_REQUEST_STATE_VALIDATING:	Validating the request, no state changes
2710905d70SHans Verkuil  *					allowed
2810905d70SHans Verkuil  * @MEDIA_REQUEST_STATE_QUEUED:		Queued
2910905d70SHans Verkuil  * @MEDIA_REQUEST_STATE_COMPLETE:	Completed, the request is done
3010905d70SHans Verkuil  * @MEDIA_REQUEST_STATE_CLEANING:	Cleaning, the request is being re-inited
3110905d70SHans Verkuil  * @MEDIA_REQUEST_STATE_UPDATING:	The request is being updated, i.e.
3210905d70SHans Verkuil  *					request objects are being added,
3310905d70SHans Verkuil  *					modified or removed
3410905d70SHans Verkuil  * @NR_OF_MEDIA_REQUEST_STATE:		The number of media request states, used
3510905d70SHans Verkuil  *					internally for sanity check purposes
3610905d70SHans Verkuil  */
3710905d70SHans Verkuil enum media_request_state {
3810905d70SHans Verkuil 	MEDIA_REQUEST_STATE_IDLE,
3910905d70SHans Verkuil 	MEDIA_REQUEST_STATE_VALIDATING,
4010905d70SHans Verkuil 	MEDIA_REQUEST_STATE_QUEUED,
4110905d70SHans Verkuil 	MEDIA_REQUEST_STATE_COMPLETE,
4210905d70SHans Verkuil 	MEDIA_REQUEST_STATE_CLEANING,
4310905d70SHans Verkuil 	MEDIA_REQUEST_STATE_UPDATING,
4410905d70SHans Verkuil 	NR_OF_MEDIA_REQUEST_STATE,
4510905d70SHans Verkuil };
4610905d70SHans Verkuil 
4710905d70SHans Verkuil struct media_request_object;
4810905d70SHans Verkuil 
4910905d70SHans Verkuil /**
5010905d70SHans Verkuil  * struct media_request - Media device request
5110905d70SHans Verkuil  * @mdev: Media device this request belongs to
5210905d70SHans Verkuil  * @kref: Reference count
5310905d70SHans Verkuil  * @debug_str: Prefix for debug messages (process name:fd)
5410905d70SHans Verkuil  * @state: The state of the request
5510905d70SHans Verkuil  * @updating_count: count the number of request updates that are in progress
566736f4e9SHans Verkuil  * @access_count: count the number of request accesses that are in progress
5710905d70SHans Verkuil  * @objects: List of @struct media_request_object request objects
5810905d70SHans Verkuil  * @num_incomplete_objects: The number of incomplete objects in the request
5910905d70SHans Verkuil  * @poll_wait: Wait queue for poll
6010905d70SHans Verkuil  * @lock: Serializes access to this struct
6110905d70SHans Verkuil  */
6210905d70SHans Verkuil struct media_request {
6310905d70SHans Verkuil 	struct media_device *mdev;
6410905d70SHans Verkuil 	struct kref kref;
6510905d70SHans Verkuil 	char debug_str[TASK_COMM_LEN + 11];
6610905d70SHans Verkuil 	enum media_request_state state;
6710905d70SHans Verkuil 	unsigned int updating_count;
686736f4e9SHans Verkuil 	unsigned int access_count;
6910905d70SHans Verkuil 	struct list_head objects;
7010905d70SHans Verkuil 	unsigned int num_incomplete_objects;
7142123687SJasmin Jessich 	wait_queue_head_t poll_wait;
7210905d70SHans Verkuil 	spinlock_t lock;
7310905d70SHans Verkuil };
7410905d70SHans Verkuil 
7510905d70SHans Verkuil #ifdef CONFIG_MEDIA_CONTROLLER
7610905d70SHans Verkuil 
7710905d70SHans Verkuil /**
786736f4e9SHans Verkuil  * media_request_lock_for_access - Lock the request to access its objects
796736f4e9SHans Verkuil  *
806736f4e9SHans Verkuil  * @req: The media request
816736f4e9SHans Verkuil  *
826736f4e9SHans Verkuil  * Use before accessing a completed request. A reference to the request must
836736f4e9SHans Verkuil  * be held during the access. This usually takes place automatically through
846736f4e9SHans Verkuil  * a file handle. Use @media_request_unlock_for_access when done.
856736f4e9SHans Verkuil  */
866736f4e9SHans Verkuil static inline int __must_check
media_request_lock_for_access(struct media_request * req)876736f4e9SHans Verkuil media_request_lock_for_access(struct media_request *req)
886736f4e9SHans Verkuil {
896736f4e9SHans Verkuil 	unsigned long flags;
906736f4e9SHans Verkuil 	int ret = -EBUSY;
916736f4e9SHans Verkuil 
926736f4e9SHans Verkuil 	spin_lock_irqsave(&req->lock, flags);
936736f4e9SHans Verkuil 	if (req->state == MEDIA_REQUEST_STATE_COMPLETE) {
946736f4e9SHans Verkuil 		req->access_count++;
956736f4e9SHans Verkuil 		ret = 0;
966736f4e9SHans Verkuil 	}
976736f4e9SHans Verkuil 	spin_unlock_irqrestore(&req->lock, flags);
986736f4e9SHans Verkuil 
996736f4e9SHans Verkuil 	return ret;
1006736f4e9SHans Verkuil }
1016736f4e9SHans Verkuil 
1026736f4e9SHans Verkuil /**
1036736f4e9SHans Verkuil  * media_request_unlock_for_access - Unlock a request previously locked for
1046736f4e9SHans Verkuil  *				     access
1056736f4e9SHans Verkuil  *
1066736f4e9SHans Verkuil  * @req: The media request
1076736f4e9SHans Verkuil  *
1086736f4e9SHans Verkuil  * Unlock a request that has previously been locked using
1096736f4e9SHans Verkuil  * @media_request_lock_for_access.
1106736f4e9SHans Verkuil  */
media_request_unlock_for_access(struct media_request * req)1116736f4e9SHans Verkuil static inline void media_request_unlock_for_access(struct media_request *req)
1126736f4e9SHans Verkuil {
1136736f4e9SHans Verkuil 	unsigned long flags;
1146736f4e9SHans Verkuil 
1156736f4e9SHans Verkuil 	spin_lock_irqsave(&req->lock, flags);
1166736f4e9SHans Verkuil 	if (!WARN_ON(!req->access_count))
1176736f4e9SHans Verkuil 		req->access_count--;
1186736f4e9SHans Verkuil 	spin_unlock_irqrestore(&req->lock, flags);
1196736f4e9SHans Verkuil }
1206736f4e9SHans Verkuil 
1216736f4e9SHans Verkuil /**
12210905d70SHans Verkuil  * media_request_lock_for_update - Lock the request for updating its objects
12310905d70SHans Verkuil  *
12410905d70SHans Verkuil  * @req: The media request
12510905d70SHans Verkuil  *
12610905d70SHans Verkuil  * Use before updating a request, i.e. adding, modifying or removing a request
12710905d70SHans Verkuil  * object in it. A reference to the request must be held during the update. This
12810905d70SHans Verkuil  * usually takes place automatically through a file handle. Use
12910905d70SHans Verkuil  * @media_request_unlock_for_update when done.
13010905d70SHans Verkuil  */
13110905d70SHans Verkuil static inline int __must_check
media_request_lock_for_update(struct media_request * req)13210905d70SHans Verkuil media_request_lock_for_update(struct media_request *req)
13310905d70SHans Verkuil {
13410905d70SHans Verkuil 	unsigned long flags;
13510905d70SHans Verkuil 	int ret = 0;
13610905d70SHans Verkuil 
13710905d70SHans Verkuil 	spin_lock_irqsave(&req->lock, flags);
13810905d70SHans Verkuil 	if (req->state == MEDIA_REQUEST_STATE_IDLE ||
13910905d70SHans Verkuil 	    req->state == MEDIA_REQUEST_STATE_UPDATING) {
14010905d70SHans Verkuil 		req->state = MEDIA_REQUEST_STATE_UPDATING;
14110905d70SHans Verkuil 		req->updating_count++;
14210905d70SHans Verkuil 	} else {
14310905d70SHans Verkuil 		ret = -EBUSY;
14410905d70SHans Verkuil 	}
14510905d70SHans Verkuil 	spin_unlock_irqrestore(&req->lock, flags);
14610905d70SHans Verkuil 
14710905d70SHans Verkuil 	return ret;
14810905d70SHans Verkuil }
14910905d70SHans Verkuil 
15010905d70SHans Verkuil /**
15110905d70SHans Verkuil  * media_request_unlock_for_update - Unlock a request previously locked for
15210905d70SHans Verkuil  *				     update
15310905d70SHans Verkuil  *
15410905d70SHans Verkuil  * @req: The media request
15510905d70SHans Verkuil  *
15610905d70SHans Verkuil  * Unlock a request that has previously been locked using
15710905d70SHans Verkuil  * @media_request_lock_for_update.
15810905d70SHans Verkuil  */
media_request_unlock_for_update(struct media_request * req)15910905d70SHans Verkuil static inline void media_request_unlock_for_update(struct media_request *req)
16010905d70SHans Verkuil {
16110905d70SHans Verkuil 	unsigned long flags;
16210905d70SHans Verkuil 
16310905d70SHans Verkuil 	spin_lock_irqsave(&req->lock, flags);
16410905d70SHans Verkuil 	WARN_ON(req->updating_count <= 0);
16510905d70SHans Verkuil 	if (!--req->updating_count)
16610905d70SHans Verkuil 		req->state = MEDIA_REQUEST_STATE_IDLE;
16710905d70SHans Verkuil 	spin_unlock_irqrestore(&req->lock, flags);
16810905d70SHans Verkuil }
16910905d70SHans Verkuil 
17010905d70SHans Verkuil /**
17110905d70SHans Verkuil  * media_request_get - Get the media request
17210905d70SHans Verkuil  *
17310905d70SHans Verkuil  * @req: The media request
17410905d70SHans Verkuil  *
17510905d70SHans Verkuil  * Get the media request.
17610905d70SHans Verkuil  */
media_request_get(struct media_request * req)17710905d70SHans Verkuil static inline void media_request_get(struct media_request *req)
17810905d70SHans Verkuil {
17910905d70SHans Verkuil 	kref_get(&req->kref);
18010905d70SHans Verkuil }
18110905d70SHans Verkuil 
18210905d70SHans Verkuil /**
18310905d70SHans Verkuil  * media_request_put - Put the media request
18410905d70SHans Verkuil  *
18510905d70SHans Verkuil  * @req: The media request
18610905d70SHans Verkuil  *
18710905d70SHans Verkuil  * Put the media request. The media request will be released
18810905d70SHans Verkuil  * when the refcount reaches 0.
18910905d70SHans Verkuil  */
19010905d70SHans Verkuil void media_request_put(struct media_request *req);
19110905d70SHans Verkuil 
19210905d70SHans Verkuil /**
193be9d6d4bSHans Verkuil  * media_request_get_by_fd - Get a media request by fd
194be9d6d4bSHans Verkuil  *
195be9d6d4bSHans Verkuil  * @mdev: Media device this request belongs to
196be9d6d4bSHans Verkuil  * @request_fd: The file descriptor of the request
197be9d6d4bSHans Verkuil  *
198be9d6d4bSHans Verkuil  * Get the request represented by @request_fd that is owned
199be9d6d4bSHans Verkuil  * by the media device.
200be9d6d4bSHans Verkuil  *
201*e79c7159SHans Verkuil  * Return a -EBADR error pointer if requests are not supported
20234b41472SHans Verkuil  * by this driver. Return -EINVAL if the request was not found.
203be9d6d4bSHans Verkuil  * Return the pointer to the request if found: the caller will
204be9d6d4bSHans Verkuil  * have to call @media_request_put when it finished using the
205be9d6d4bSHans Verkuil  * request.
206be9d6d4bSHans Verkuil  */
207be9d6d4bSHans Verkuil struct media_request *
208be9d6d4bSHans Verkuil media_request_get_by_fd(struct media_device *mdev, int request_fd);
209be9d6d4bSHans Verkuil 
210be9d6d4bSHans Verkuil /**
21110905d70SHans Verkuil  * media_request_alloc - Allocate the media request
21210905d70SHans Verkuil  *
21310905d70SHans Verkuil  * @mdev: Media device this request belongs to
21410905d70SHans Verkuil  * @alloc_fd: Store the request's file descriptor in this int
21510905d70SHans Verkuil  *
21610905d70SHans Verkuil  * Allocated the media request and put the fd in @alloc_fd.
21710905d70SHans Verkuil  */
21810905d70SHans Verkuil int media_request_alloc(struct media_device *mdev,
21910905d70SHans Verkuil 			int *alloc_fd);
22010905d70SHans Verkuil 
22110905d70SHans Verkuil #else
22210905d70SHans Verkuil 
media_request_get(struct media_request * req)22310905d70SHans Verkuil static inline void media_request_get(struct media_request *req)
22410905d70SHans Verkuil {
22510905d70SHans Verkuil }
22610905d70SHans Verkuil 
media_request_put(struct media_request * req)22710905d70SHans Verkuil static inline void media_request_put(struct media_request *req)
22810905d70SHans Verkuil {
22910905d70SHans Verkuil }
23010905d70SHans Verkuil 
231be9d6d4bSHans Verkuil static inline struct media_request *
media_request_get_by_fd(struct media_device * mdev,int request_fd)232be9d6d4bSHans Verkuil media_request_get_by_fd(struct media_device *mdev, int request_fd)
233be9d6d4bSHans Verkuil {
234*e79c7159SHans Verkuil 	return ERR_PTR(-EBADR);
235be9d6d4bSHans Verkuil }
236be9d6d4bSHans Verkuil 
23710905d70SHans Verkuil #endif
23810905d70SHans Verkuil 
23910905d70SHans Verkuil /**
24010905d70SHans Verkuil  * struct media_request_object_ops - Media request object operations
24110905d70SHans Verkuil  * @prepare: Validate and prepare the request object, optional.
24210905d70SHans Verkuil  * @unprepare: Unprepare the request object, optional.
24310905d70SHans Verkuil  * @queue: Queue the request object, optional.
24410905d70SHans Verkuil  * @unbind: Unbind the request object, optional.
24510905d70SHans Verkuil  * @release: Release the request object, required.
24610905d70SHans Verkuil  */
24710905d70SHans Verkuil struct media_request_object_ops {
24810905d70SHans Verkuil 	int (*prepare)(struct media_request_object *object);
24910905d70SHans Verkuil 	void (*unprepare)(struct media_request_object *object);
25010905d70SHans Verkuil 	void (*queue)(struct media_request_object *object);
25110905d70SHans Verkuil 	void (*unbind)(struct media_request_object *object);
25210905d70SHans Verkuil 	void (*release)(struct media_request_object *object);
25310905d70SHans Verkuil };
25410905d70SHans Verkuil 
25510905d70SHans Verkuil /**
25610905d70SHans Verkuil  * struct media_request_object - An opaque object that belongs to a media
25710905d70SHans Verkuil  *				 request
25810905d70SHans Verkuil  *
25910905d70SHans Verkuil  * @ops: object's operations
26010905d70SHans Verkuil  * @priv: object's priv pointer
26110905d70SHans Verkuil  * @req: the request this object belongs to (can be NULL)
26210905d70SHans Verkuil  * @list: List entry of the object for @struct media_request
26310905d70SHans Verkuil  * @kref: Reference count of the object, acquire before releasing req->lock
26410905d70SHans Verkuil  * @completed: If true, then this object was completed.
26510905d70SHans Verkuil  *
26610905d70SHans Verkuil  * An object related to the request. This struct is always embedded in
26710905d70SHans Verkuil  * another struct that contains the actual data for this request object.
26810905d70SHans Verkuil  */
26910905d70SHans Verkuil struct media_request_object {
27010905d70SHans Verkuil 	const struct media_request_object_ops *ops;
27110905d70SHans Verkuil 	void *priv;
27210905d70SHans Verkuil 	struct media_request *req;
27310905d70SHans Verkuil 	struct list_head list;
27410905d70SHans Verkuil 	struct kref kref;
27510905d70SHans Verkuil 	bool completed;
27610905d70SHans Verkuil };
27710905d70SHans Verkuil 
27810905d70SHans Verkuil #ifdef CONFIG_MEDIA_CONTROLLER
27910905d70SHans Verkuil 
28010905d70SHans Verkuil /**
28110905d70SHans Verkuil  * media_request_object_get - Get a media request object
28210905d70SHans Verkuil  *
28310905d70SHans Verkuil  * @obj: The object
28410905d70SHans Verkuil  *
28510905d70SHans Verkuil  * Get a media request object.
28610905d70SHans Verkuil  */
media_request_object_get(struct media_request_object * obj)28710905d70SHans Verkuil static inline void media_request_object_get(struct media_request_object *obj)
28810905d70SHans Verkuil {
28910905d70SHans Verkuil 	kref_get(&obj->kref);
29010905d70SHans Verkuil }
29110905d70SHans Verkuil 
29210905d70SHans Verkuil /**
29310905d70SHans Verkuil  * media_request_object_put - Put a media request object
29410905d70SHans Verkuil  *
29510905d70SHans Verkuil  * @obj: The object
29610905d70SHans Verkuil  *
29710905d70SHans Verkuil  * Put a media request object. Once all references are gone, the
29810905d70SHans Verkuil  * object's memory is released.
29910905d70SHans Verkuil  */
30010905d70SHans Verkuil void media_request_object_put(struct media_request_object *obj);
30110905d70SHans Verkuil 
30210905d70SHans Verkuil /**
3030ca0e844SHans Verkuil  * media_request_object_find - Find an object in a request
3040ca0e844SHans Verkuil  *
3050ca0e844SHans Verkuil  * @req: The media request
3060ca0e844SHans Verkuil  * @ops: Find an object with this ops value
3070ca0e844SHans Verkuil  * @priv: Find an object with this priv value
3080ca0e844SHans Verkuil  *
3090ca0e844SHans Verkuil  * Both @ops and @priv must be non-NULL.
3100ca0e844SHans Verkuil  *
3110ca0e844SHans Verkuil  * Returns the object pointer or NULL if not found. The caller must
3120ca0e844SHans Verkuil  * call media_request_object_put() once it finished using the object.
3130ca0e844SHans Verkuil  *
3140ca0e844SHans Verkuil  * Since this function needs to walk the list of objects it takes
3150ca0e844SHans Verkuil  * the @req->lock spin lock to make this safe.
3160ca0e844SHans Verkuil  */
3170ca0e844SHans Verkuil struct media_request_object *
3180ca0e844SHans Verkuil media_request_object_find(struct media_request *req,
3190ca0e844SHans Verkuil 			  const struct media_request_object_ops *ops,
3200ca0e844SHans Verkuil 			  void *priv);
3210ca0e844SHans Verkuil 
3220ca0e844SHans Verkuil /**
32310905d70SHans Verkuil  * media_request_object_init - Initialise a media request object
32410905d70SHans Verkuil  *
32510905d70SHans Verkuil  * @obj: The object
32610905d70SHans Verkuil  *
32710905d70SHans Verkuil  * Initialise a media request object. The object will be released using the
32810905d70SHans Verkuil  * release callback of the ops once it has no references (this function
32910905d70SHans Verkuil  * initialises references to one).
33010905d70SHans Verkuil  */
33110905d70SHans Verkuil void media_request_object_init(struct media_request_object *obj);
33210905d70SHans Verkuil 
33310905d70SHans Verkuil /**
33410905d70SHans Verkuil  * media_request_object_bind - Bind a media request object to a request
33510905d70SHans Verkuil  *
33610905d70SHans Verkuil  * @req: The media request
33710905d70SHans Verkuil  * @ops: The object ops for this object
33810905d70SHans Verkuil  * @priv: A driver-specific priv pointer associated with this object
33910905d70SHans Verkuil  * @is_buffer: Set to true if the object a buffer object.
34010905d70SHans Verkuil  * @obj: The object
34110905d70SHans Verkuil  *
34210905d70SHans Verkuil  * Bind this object to the request and set the ops and priv values of
34310905d70SHans Verkuil  * the object so it can be found later with media_request_object_find().
34410905d70SHans Verkuil  *
34510905d70SHans Verkuil  * Every bound object must be unbound or completed by the kernel at some
34610905d70SHans Verkuil  * point in time, otherwise the request will never complete. When the
34710905d70SHans Verkuil  * request is released all completed objects will be unbound by the
34810905d70SHans Verkuil  * request core code.
34910905d70SHans Verkuil  *
35010905d70SHans Verkuil  * Buffer objects will be added to the end of the request's object
35110905d70SHans Verkuil  * list, non-buffer objects will be added to the front of the list.
35210905d70SHans Verkuil  * This ensures that all buffer objects are at the end of the list
35310905d70SHans Verkuil  * and that all non-buffer objects that they depend on are processed
35410905d70SHans Verkuil  * first.
35510905d70SHans Verkuil  */
35610905d70SHans Verkuil int media_request_object_bind(struct media_request *req,
35710905d70SHans Verkuil 			      const struct media_request_object_ops *ops,
35810905d70SHans Verkuil 			      void *priv, bool is_buffer,
35910905d70SHans Verkuil 			      struct media_request_object *obj);
36010905d70SHans Verkuil 
36110905d70SHans Verkuil /**
36210905d70SHans Verkuil  * media_request_object_unbind - Unbind a media request object
36310905d70SHans Verkuil  *
36410905d70SHans Verkuil  * @obj: The object
36510905d70SHans Verkuil  *
36610905d70SHans Verkuil  * Unbind the media request object from the request.
36710905d70SHans Verkuil  */
36810905d70SHans Verkuil void media_request_object_unbind(struct media_request_object *obj);
36910905d70SHans Verkuil 
37010905d70SHans Verkuil /**
37110905d70SHans Verkuil  * media_request_object_complete - Mark the media request object as complete
37210905d70SHans Verkuil  *
37310905d70SHans Verkuil  * @obj: The object
37410905d70SHans Verkuil  *
37510905d70SHans Verkuil  * Mark the media request object as complete. Only bound objects can
37610905d70SHans Verkuil  * be completed.
37710905d70SHans Verkuil  */
37810905d70SHans Verkuil void media_request_object_complete(struct media_request_object *obj);
37910905d70SHans Verkuil 
38010905d70SHans Verkuil #else
38110905d70SHans Verkuil 
38210905d70SHans Verkuil static inline int __must_check
media_request_lock_for_access(struct media_request * req)3836736f4e9SHans Verkuil media_request_lock_for_access(struct media_request *req)
3846736f4e9SHans Verkuil {
3856736f4e9SHans Verkuil 	return -EINVAL;
3866736f4e9SHans Verkuil }
3876736f4e9SHans Verkuil 
media_request_unlock_for_access(struct media_request * req)3886736f4e9SHans Verkuil static inline void media_request_unlock_for_access(struct media_request *req)
3896736f4e9SHans Verkuil {
3906736f4e9SHans Verkuil }
3916736f4e9SHans Verkuil 
3926736f4e9SHans Verkuil static inline int __must_check
media_request_lock_for_update(struct media_request * req)39310905d70SHans Verkuil media_request_lock_for_update(struct media_request *req)
39410905d70SHans Verkuil {
39510905d70SHans Verkuil 	return -EINVAL;
39610905d70SHans Verkuil }
39710905d70SHans Verkuil 
media_request_unlock_for_update(struct media_request * req)39810905d70SHans Verkuil static inline void media_request_unlock_for_update(struct media_request *req)
39910905d70SHans Verkuil {
40010905d70SHans Verkuil }
40110905d70SHans Verkuil 
media_request_object_get(struct media_request_object * obj)40210905d70SHans Verkuil static inline void media_request_object_get(struct media_request_object *obj)
40310905d70SHans Verkuil {
40410905d70SHans Verkuil }
40510905d70SHans Verkuil 
media_request_object_put(struct media_request_object * obj)40610905d70SHans Verkuil static inline void media_request_object_put(struct media_request_object *obj)
40710905d70SHans Verkuil {
40810905d70SHans Verkuil }
40910905d70SHans Verkuil 
4100ca0e844SHans Verkuil static inline struct media_request_object *
media_request_object_find(struct media_request * req,const struct media_request_object_ops * ops,void * priv)4110ca0e844SHans Verkuil media_request_object_find(struct media_request *req,
4120ca0e844SHans Verkuil 			  const struct media_request_object_ops *ops,
4130ca0e844SHans Verkuil 			  void *priv)
4140ca0e844SHans Verkuil {
4150ca0e844SHans Verkuil 	return NULL;
4160ca0e844SHans Verkuil }
4170ca0e844SHans Verkuil 
media_request_object_init(struct media_request_object * obj)41810905d70SHans Verkuil static inline void media_request_object_init(struct media_request_object *obj)
41910905d70SHans Verkuil {
42010905d70SHans Verkuil 	obj->ops = NULL;
42110905d70SHans Verkuil 	obj->req = NULL;
42210905d70SHans Verkuil }
42310905d70SHans Verkuil 
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)42410905d70SHans Verkuil static inline int media_request_object_bind(struct media_request *req,
42510905d70SHans Verkuil 			       const struct media_request_object_ops *ops,
42610905d70SHans Verkuil 			       void *priv, bool is_buffer,
42710905d70SHans Verkuil 			       struct media_request_object *obj)
42810905d70SHans Verkuil {
42910905d70SHans Verkuil 	return 0;
43010905d70SHans Verkuil }
43110905d70SHans Verkuil 
media_request_object_unbind(struct media_request_object * obj)43210905d70SHans Verkuil static inline void media_request_object_unbind(struct media_request_object *obj)
43310905d70SHans Verkuil {
43410905d70SHans Verkuil }
43510905d70SHans Verkuil 
media_request_object_complete(struct media_request_object * obj)43610905d70SHans Verkuil static inline void media_request_object_complete(struct media_request_object *obj)
43710905d70SHans Verkuil {
43810905d70SHans Verkuil }
43910905d70SHans Verkuil 
44010905d70SHans Verkuil #endif
44110905d70SHans Verkuil 
44210905d70SHans Verkuil #endif
443