drivers/usb/gadget/function/uvc.h

Source file repositories/reference/linux-study-clean/drivers/usb/gadget/function/uvc.h

File Facts

System
Linux kernel
Corpus path
drivers/usb/gadget/function/uvc.h
Extension
.h
Size
5538 bytes
Lines
217
Domain
Driver Families
Bucket
drivers/usb
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct uvc_request {
	struct usb_request *req;
	u8 *req_buffer;
	struct uvc_video *video;
	struct sg_table sgt;
	u8 header[UVCG_REQUEST_HEADER_LEN];
	struct uvc_buffer *last_buf;
	struct list_head list;
};

struct uvc_video {
	struct uvc_device *uvc;
	struct usb_ep *ep;

	struct work_struct pump;
	struct workqueue_struct *async_wq;

	struct kthread_worker   *kworker;
	struct kthread_work     hw_submit;

	atomic_t queued;

	/* Frame parameters */
	u8 bpp;
	u32 fcc;
	unsigned int width;
	unsigned int height;
	unsigned int imagesize;
	unsigned int interval;	/* in 100ns units */
	struct mutex mutex;	/* protects frame parameters */

	unsigned int uvc_num_requests;

	unsigned int reqs_per_frame;

	/* Requests */
	bool is_enabled; /* tracks whether video stream is enabled */
	unsigned int req_size;
	unsigned int max_req_size;
	struct list_head ureqs; /* all uvc_requests allocated by uvc_video */

	/* USB requests that the video pump thread can encode into */
	struct list_head req_free;

	/*
	 * USB requests video pump thread has already encoded into. These are
	 * ready to be queued to the endpoint.
	 */
	struct list_head req_ready;
	spinlock_t req_lock;

	unsigned int req_int_count;

	void (*encode) (struct usb_request *req, struct uvc_video *video,
			struct uvc_buffer *buf);

	/* Context data used by the completion handler */
	__u32 payload_size;
	__u32 max_payload_size;

	struct uvc_video_queue queue;
	unsigned int fid;
};

enum uvc_state {
	UVC_STATE_DISCONNECTED,
	UVC_STATE_CONNECTED,
	UVC_STATE_STREAMING,
};

struct uvc_device {
	struct video_device vdev;
	struct v4l2_device v4l2_dev;
	enum uvc_state state;
	struct usb_function func;
	struct uvc_video video;
	struct completion *vdev_release_done;
	struct mutex lock;	/* protects func_unbound and func_connected */
	bool func_unbound;
	bool func_connected;
	wait_queue_head_t func_connected_queue;

	struct uvcg_streaming_header *header;

	/* Descriptors */
	struct {
		const struct uvc_descriptor_header * const *fs_control;
		const struct uvc_descriptor_header * const *ss_control;
		const struct uvc_descriptor_header * const *fs_streaming;
		const struct uvc_descriptor_header * const *hs_streaming;

Annotation

Implementation Notes