cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

uvc_configfs.h (3155B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * uvc_configfs.h
      4 *
      5 * Configfs support for the uvc function.
      6 *
      7 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
      8 *		http://www.samsung.com
      9 *
     10 * Author: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>
     11 */
     12#ifndef UVC_CONFIGFS_H
     13#define UVC_CONFIGFS_H
     14
     15#include <linux/configfs.h>
     16
     17#include "u_uvc.h"
     18
     19static inline struct f_uvc_opts *to_f_uvc_opts(struct config_item *item)
     20{
     21	return container_of(to_config_group(item), struct f_uvc_opts,
     22			    func_inst.group);
     23}
     24
     25#define UVCG_STREAMING_CONTROL_SIZE	1
     26
     27DECLARE_UVC_HEADER_DESCRIPTOR(1);
     28
     29struct uvcg_control_header {
     30	struct config_item		item;
     31	struct UVC_HEADER_DESCRIPTOR(1)	desc;
     32	unsigned			linked;
     33};
     34
     35static inline struct uvcg_control_header *to_uvcg_control_header(struct config_item *item)
     36{
     37	return container_of(item, struct uvcg_control_header, item);
     38}
     39
     40enum uvcg_format_type {
     41	UVCG_UNCOMPRESSED = 0,
     42	UVCG_MJPEG,
     43};
     44
     45struct uvcg_format {
     46	struct config_group	group;
     47	enum uvcg_format_type	type;
     48	unsigned		linked;
     49	struct list_head	frames;
     50	unsigned		num_frames;
     51	__u8			bmaControls[UVCG_STREAMING_CONTROL_SIZE];
     52};
     53
     54struct uvcg_format_ptr {
     55	struct uvcg_format	*fmt;
     56	struct list_head	entry;
     57};
     58
     59static inline struct uvcg_format *to_uvcg_format(struct config_item *item)
     60{
     61	return container_of(to_config_group(item), struct uvcg_format, group);
     62}
     63
     64struct uvcg_streaming_header {
     65	struct config_item				item;
     66	struct uvc_input_header_descriptor		desc;
     67	unsigned					linked;
     68	struct list_head				formats;
     69	unsigned					num_fmt;
     70};
     71
     72static inline struct uvcg_streaming_header *to_uvcg_streaming_header(struct config_item *item)
     73{
     74	return container_of(item, struct uvcg_streaming_header, item);
     75}
     76
     77struct uvcg_frame_ptr {
     78	struct uvcg_frame	*frm;
     79	struct list_head	entry;
     80};
     81
     82struct uvcg_frame {
     83	struct config_item	item;
     84	enum uvcg_format_type	fmt_type;
     85	struct {
     86		u8	b_length;
     87		u8	b_descriptor_type;
     88		u8	b_descriptor_subtype;
     89		u8	b_frame_index;
     90		u8	bm_capabilities;
     91		u16	w_width;
     92		u16	w_height;
     93		u32	dw_min_bit_rate;
     94		u32	dw_max_bit_rate;
     95		u32	dw_max_video_frame_buffer_size;
     96		u32	dw_default_frame_interval;
     97		u8	b_frame_interval_type;
     98	} __attribute__((packed)) frame;
     99	u32 *dw_frame_interval;
    100};
    101
    102static inline struct uvcg_frame *to_uvcg_frame(struct config_item *item)
    103{
    104	return container_of(item, struct uvcg_frame, item);
    105}
    106
    107/* -----------------------------------------------------------------------------
    108 * streaming/uncompressed/<NAME>
    109 */
    110
    111struct uvcg_uncompressed {
    112	struct uvcg_format		fmt;
    113	struct uvc_format_uncompressed	desc;
    114};
    115
    116static inline struct uvcg_uncompressed *to_uvcg_uncompressed(struct config_item *item)
    117{
    118	return container_of(to_uvcg_format(item), struct uvcg_uncompressed, fmt);
    119}
    120
    121/* -----------------------------------------------------------------------------
    122 * streaming/mjpeg/<NAME>
    123 */
    124
    125struct uvcg_mjpeg {
    126	struct uvcg_format		fmt;
    127	struct uvc_format_mjpeg		desc;
    128};
    129
    130static inline struct uvcg_mjpeg *to_uvcg_mjpeg(struct config_item *item)
    131{
    132	return container_of(to_uvcg_format(item), struct uvcg_mjpeg, fmt);
    133}
    134
    135int uvcg_attach_configfs(struct f_uvc_opts *opts);
    136
    137#endif /* UVC_CONFIGFS_H */