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

media.h (13226B)


      1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2/*
      3 * Multimedia device API
      4 *
      5 * Copyright (C) 2010 Nokia Corporation
      6 *
      7 * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
      8 *	     Sakari Ailus <sakari.ailus@iki.fi>
      9 *
     10 * This program is free software; you can redistribute it and/or modify
     11 * it under the terms of the GNU General Public License version 2 as
     12 * published by the Free Software Foundation.
     13 *
     14 * This program is distributed in the hope that it will be useful,
     15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17 * GNU General Public License for more details.
     18 */
     19
     20#ifndef __LINUX_MEDIA_H
     21#define __LINUX_MEDIA_H
     22
     23#include <linux/ioctl.h>
     24#include <linux/types.h>
     25
     26struct media_device_info {
     27	char driver[16];
     28	char model[32];
     29	char serial[40];
     30	char bus_info[32];
     31	__u32 media_version;
     32	__u32 hw_revision;
     33	__u32 driver_version;
     34	__u32 reserved[31];
     35};
     36
     37/*
     38 * Base number ranges for entity functions
     39 *
     40 * NOTE: Userspace should not rely on these ranges to identify a group
     41 * of function types, as newer functions can be added with any name within
     42 * the full u32 range.
     43 *
     44 * Some older functions use the MEDIA_ENT_F_OLD_*_BASE range. Do not
     45 * change this, this is for backwards compatibility. When adding new
     46 * functions always use MEDIA_ENT_F_BASE.
     47 */
     48#define MEDIA_ENT_F_BASE			0x00000000
     49#define MEDIA_ENT_F_OLD_BASE			0x00010000
     50#define MEDIA_ENT_F_OLD_SUBDEV_BASE		0x00020000
     51
     52/*
     53 * Initial value to be used when a new entity is created
     54 * Drivers should change it to something useful.
     55 */
     56#define MEDIA_ENT_F_UNKNOWN			MEDIA_ENT_F_BASE
     57
     58/*
     59 * Subdevs are initialized with MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN in order
     60 * to preserve backward compatibility. Drivers must change to the proper
     61 * subdev type before registering the entity.
     62 */
     63#define MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN		MEDIA_ENT_F_OLD_SUBDEV_BASE
     64
     65/*
     66 * DVB entity functions
     67 */
     68#define MEDIA_ENT_F_DTV_DEMOD			(MEDIA_ENT_F_BASE + 0x00001)
     69#define MEDIA_ENT_F_TS_DEMUX			(MEDIA_ENT_F_BASE + 0x00002)
     70#define MEDIA_ENT_F_DTV_CA			(MEDIA_ENT_F_BASE + 0x00003)
     71#define MEDIA_ENT_F_DTV_NET_DECAP		(MEDIA_ENT_F_BASE + 0x00004)
     72
     73/*
     74 * I/O entity functions
     75 */
     76#define MEDIA_ENT_F_IO_V4L			(MEDIA_ENT_F_OLD_BASE + 1)
     77#define MEDIA_ENT_F_IO_DTV			(MEDIA_ENT_F_BASE + 0x01001)
     78#define MEDIA_ENT_F_IO_VBI			(MEDIA_ENT_F_BASE + 0x01002)
     79#define MEDIA_ENT_F_IO_SWRADIO			(MEDIA_ENT_F_BASE + 0x01003)
     80
     81/*
     82 * Sensor functions
     83 */
     84#define MEDIA_ENT_F_CAM_SENSOR			(MEDIA_ENT_F_OLD_SUBDEV_BASE + 1)
     85#define MEDIA_ENT_F_FLASH			(MEDIA_ENT_F_OLD_SUBDEV_BASE + 2)
     86#define MEDIA_ENT_F_LENS			(MEDIA_ENT_F_OLD_SUBDEV_BASE + 3)
     87
     88/*
     89 * Digital TV, analog TV, radio and/or software defined radio tuner functions.
     90 *
     91 * It is a responsibility of the master/bridge drivers to add connectors
     92 * and links for MEDIA_ENT_F_TUNER. Please notice that some old tuners
     93 * may require the usage of separate I2C chips to decode analog TV signals,
     94 * when the master/bridge chipset doesn't have its own TV standard decoder.
     95 * On such cases, the IF-PLL staging is mapped via one or two entities:
     96 * MEDIA_ENT_F_IF_VID_DECODER and/or MEDIA_ENT_F_IF_AUD_DECODER.
     97 */
     98#define MEDIA_ENT_F_TUNER			(MEDIA_ENT_F_OLD_SUBDEV_BASE + 5)
     99
    100/*
    101 * Analog TV IF-PLL decoder functions
    102 *
    103 * It is a responsibility of the master/bridge drivers to create links
    104 * for MEDIA_ENT_F_IF_VID_DECODER and MEDIA_ENT_F_IF_AUD_DECODER.
    105 */
    106#define MEDIA_ENT_F_IF_VID_DECODER		(MEDIA_ENT_F_BASE + 0x02001)
    107#define MEDIA_ENT_F_IF_AUD_DECODER		(MEDIA_ENT_F_BASE + 0x02002)
    108
    109/*
    110 * Audio entity functions
    111 */
    112#define MEDIA_ENT_F_AUDIO_CAPTURE		(MEDIA_ENT_F_BASE + 0x03001)
    113#define MEDIA_ENT_F_AUDIO_PLAYBACK		(MEDIA_ENT_F_BASE + 0x03002)
    114#define MEDIA_ENT_F_AUDIO_MIXER			(MEDIA_ENT_F_BASE + 0x03003)
    115
    116/*
    117 * Processing entity functions
    118 */
    119#define MEDIA_ENT_F_PROC_VIDEO_COMPOSER		(MEDIA_ENT_F_BASE + 0x4001)
    120#define MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER	(MEDIA_ENT_F_BASE + 0x4002)
    121#define MEDIA_ENT_F_PROC_VIDEO_PIXEL_ENC_CONV	(MEDIA_ENT_F_BASE + 0x4003)
    122#define MEDIA_ENT_F_PROC_VIDEO_LUT		(MEDIA_ENT_F_BASE + 0x4004)
    123#define MEDIA_ENT_F_PROC_VIDEO_SCALER		(MEDIA_ENT_F_BASE + 0x4005)
    124#define MEDIA_ENT_F_PROC_VIDEO_STATISTICS	(MEDIA_ENT_F_BASE + 0x4006)
    125#define MEDIA_ENT_F_PROC_VIDEO_ENCODER		(MEDIA_ENT_F_BASE + 0x4007)
    126#define MEDIA_ENT_F_PROC_VIDEO_DECODER		(MEDIA_ENT_F_BASE + 0x4008)
    127#define MEDIA_ENT_F_PROC_VIDEO_ISP		(MEDIA_ENT_F_BASE + 0x4009)
    128
    129/*
    130 * Switch and bridge entity functions
    131 */
    132#define MEDIA_ENT_F_VID_MUX			(MEDIA_ENT_F_BASE + 0x5001)
    133#define MEDIA_ENT_F_VID_IF_BRIDGE		(MEDIA_ENT_F_BASE + 0x5002)
    134
    135/*
    136 * Video decoder/encoder functions
    137 */
    138#define MEDIA_ENT_F_ATV_DECODER			(MEDIA_ENT_F_OLD_SUBDEV_BASE + 4)
    139#define MEDIA_ENT_F_DV_DECODER			(MEDIA_ENT_F_BASE + 0x6001)
    140#define MEDIA_ENT_F_DV_ENCODER			(MEDIA_ENT_F_BASE + 0x6002)
    141
    142/* Entity flags */
    143#define MEDIA_ENT_FL_DEFAULT			(1 << 0)
    144#define MEDIA_ENT_FL_CONNECTOR			(1 << 1)
    145
    146/* OR with the entity id value to find the next entity */
    147#define MEDIA_ENT_ID_FLAG_NEXT			(1U << 31)
    148
    149struct media_entity_desc {
    150	__u32 id;
    151	char name[32];
    152	__u32 type;
    153	__u32 revision;
    154	__u32 flags;
    155	__u32 group_id;
    156	__u16 pads;
    157	__u16 links;
    158
    159	__u32 reserved[4];
    160
    161	union {
    162		/* Node specifications */
    163		struct {
    164			__u32 major;
    165			__u32 minor;
    166		} dev;
    167
    168#if !defined(__KERNEL__)
    169		/*
    170		 * TODO: this shouldn't have been added without
    171		 * actual drivers that use this. When the first real driver
    172		 * appears that sets this information, special attention
    173		 * should be given whether this information is 1) enough, and
    174		 * 2) can deal with udev rules that rename devices. The struct
    175		 * dev would not be sufficient for this since that does not
    176		 * contain the subdevice information. In addition, struct dev
    177		 * can only refer to a single device, and not to multiple (e.g.
    178		 * pcm and mixer devices).
    179		 */
    180		struct {
    181			__u32 card;
    182			__u32 device;
    183			__u32 subdevice;
    184		} alsa;
    185
    186		/*
    187		 * DEPRECATED: previous node specifications. Kept just to
    188		 * avoid breaking compilation. Use media_entity_desc.dev
    189		 * instead.
    190		 */
    191		struct {
    192			__u32 major;
    193			__u32 minor;
    194		} v4l;
    195		struct {
    196			__u32 major;
    197			__u32 minor;
    198		} fb;
    199		int dvb;
    200#endif
    201
    202		/* Sub-device specifications */
    203		/* Nothing needed yet */
    204		__u8 raw[184];
    205	};
    206};
    207
    208#define MEDIA_PAD_FL_SINK			(1 << 0)
    209#define MEDIA_PAD_FL_SOURCE			(1 << 1)
    210#define MEDIA_PAD_FL_MUST_CONNECT		(1 << 2)
    211
    212struct media_pad_desc {
    213	__u32 entity;		/* entity ID */
    214	__u16 index;		/* pad index */
    215	__u32 flags;		/* pad flags */
    216	__u32 reserved[2];
    217};
    218
    219#define MEDIA_LNK_FL_ENABLED			(1 << 0)
    220#define MEDIA_LNK_FL_IMMUTABLE			(1 << 1)
    221#define MEDIA_LNK_FL_DYNAMIC			(1 << 2)
    222
    223#define MEDIA_LNK_FL_LINK_TYPE			(0xf << 28)
    224#  define MEDIA_LNK_FL_DATA_LINK		(0 << 28)
    225#  define MEDIA_LNK_FL_INTERFACE_LINK		(1 << 28)
    226#  define MEDIA_LNK_FL_ANCILLARY_LINK		(2 << 28)
    227
    228struct media_link_desc {
    229	struct media_pad_desc source;
    230	struct media_pad_desc sink;
    231	__u32 flags;
    232	__u32 reserved[2];
    233};
    234
    235struct media_links_enum {
    236	__u32 entity;
    237	/* Should have enough room for pads elements */
    238	struct media_pad_desc __user *pads;
    239	/* Should have enough room for links elements */
    240	struct media_link_desc __user *links;
    241	__u32 reserved[4];
    242};
    243
    244/* Interface type ranges */
    245
    246#define MEDIA_INTF_T_DVB_BASE			0x00000100
    247#define MEDIA_INTF_T_V4L_BASE			0x00000200
    248
    249/* Interface types */
    250
    251#define MEDIA_INTF_T_DVB_FE			(MEDIA_INTF_T_DVB_BASE)
    252#define MEDIA_INTF_T_DVB_DEMUX			(MEDIA_INTF_T_DVB_BASE + 1)
    253#define MEDIA_INTF_T_DVB_DVR			(MEDIA_INTF_T_DVB_BASE + 2)
    254#define MEDIA_INTF_T_DVB_CA			(MEDIA_INTF_T_DVB_BASE + 3)
    255#define MEDIA_INTF_T_DVB_NET			(MEDIA_INTF_T_DVB_BASE + 4)
    256
    257#define MEDIA_INTF_T_V4L_VIDEO			(MEDIA_INTF_T_V4L_BASE)
    258#define MEDIA_INTF_T_V4L_VBI			(MEDIA_INTF_T_V4L_BASE + 1)
    259#define MEDIA_INTF_T_V4L_RADIO			(MEDIA_INTF_T_V4L_BASE + 2)
    260#define MEDIA_INTF_T_V4L_SUBDEV			(MEDIA_INTF_T_V4L_BASE + 3)
    261#define MEDIA_INTF_T_V4L_SWRADIO		(MEDIA_INTF_T_V4L_BASE + 4)
    262#define MEDIA_INTF_T_V4L_TOUCH			(MEDIA_INTF_T_V4L_BASE + 5)
    263
    264#define MEDIA_INTF_T_ALSA_BASE			0x00000300
    265#define MEDIA_INTF_T_ALSA_PCM_CAPTURE		(MEDIA_INTF_T_ALSA_BASE)
    266#define MEDIA_INTF_T_ALSA_PCM_PLAYBACK		(MEDIA_INTF_T_ALSA_BASE + 1)
    267#define MEDIA_INTF_T_ALSA_CONTROL		(MEDIA_INTF_T_ALSA_BASE + 2)
    268
    269#if defined(__KERNEL__)
    270
    271/*
    272 * Connector functions
    273 *
    274 * For now these should not be used in userspace, as some definitions may
    275 * change.
    276 *
    277 * It is the responsibility of the entity drivers to add connectors and links.
    278 */
    279#define MEDIA_ENT_F_CONN_RF			(MEDIA_ENT_F_BASE + 0x30001)
    280#define MEDIA_ENT_F_CONN_SVIDEO			(MEDIA_ENT_F_BASE + 0x30002)
    281#define MEDIA_ENT_F_CONN_COMPOSITE		(MEDIA_ENT_F_BASE + 0x30003)
    282
    283#endif
    284
    285/*
    286 * MC next gen API definitions
    287 */
    288
    289/*
    290 * Appeared in 4.19.0.
    291 *
    292 * The media_version argument comes from the media_version field in
    293 * struct media_device_info.
    294 */
    295#define MEDIA_V2_ENTITY_HAS_FLAGS(media_version) \
    296	((media_version) >= ((4 << 16) | (19 << 8) | 0))
    297
    298struct media_v2_entity {
    299	__u32 id;
    300	char name[64];
    301	__u32 function;		/* Main function of the entity */
    302	__u32 flags;
    303	__u32 reserved[5];
    304} __attribute__ ((packed));
    305
    306/* Should match the specific fields at media_intf_devnode */
    307struct media_v2_intf_devnode {
    308	__u32 major;
    309	__u32 minor;
    310} __attribute__ ((packed));
    311
    312struct media_v2_interface {
    313	__u32 id;
    314	__u32 intf_type;
    315	__u32 flags;
    316	__u32 reserved[9];
    317
    318	union {
    319		struct media_v2_intf_devnode devnode;
    320		__u32 raw[16];
    321	};
    322} __attribute__ ((packed));
    323
    324/*
    325 * Appeared in 4.19.0.
    326 *
    327 * The media_version argument comes from the media_version field in
    328 * struct media_device_info.
    329 */
    330#define MEDIA_V2_PAD_HAS_INDEX(media_version) \
    331	((media_version) >= ((4 << 16) | (19 << 8) | 0))
    332
    333struct media_v2_pad {
    334	__u32 id;
    335	__u32 entity_id;
    336	__u32 flags;
    337	__u32 index;
    338	__u32 reserved[4];
    339} __attribute__ ((packed));
    340
    341struct media_v2_link {
    342	__u32 id;
    343	__u32 source_id;
    344	__u32 sink_id;
    345	__u32 flags;
    346	__u32 reserved[6];
    347} __attribute__ ((packed));
    348
    349struct media_v2_topology {
    350	__u64 topology_version;
    351
    352	__u32 num_entities;
    353	__u32 reserved1;
    354	__u64 ptr_entities;
    355
    356	__u32 num_interfaces;
    357	__u32 reserved2;
    358	__u64 ptr_interfaces;
    359
    360	__u32 num_pads;
    361	__u32 reserved3;
    362	__u64 ptr_pads;
    363
    364	__u32 num_links;
    365	__u32 reserved4;
    366	__u64 ptr_links;
    367} __attribute__ ((packed));
    368
    369/* ioctls */
    370
    371#define MEDIA_IOC_DEVICE_INFO	_IOWR('|', 0x00, struct media_device_info)
    372#define MEDIA_IOC_ENUM_ENTITIES	_IOWR('|', 0x01, struct media_entity_desc)
    373#define MEDIA_IOC_ENUM_LINKS	_IOWR('|', 0x02, struct media_links_enum)
    374#define MEDIA_IOC_SETUP_LINK	_IOWR('|', 0x03, struct media_link_desc)
    375#define MEDIA_IOC_G_TOPOLOGY	_IOWR('|', 0x04, struct media_v2_topology)
    376#define MEDIA_IOC_REQUEST_ALLOC	_IOR ('|', 0x05, int)
    377
    378/*
    379 * These ioctls are called on the request file descriptor as returned
    380 * by MEDIA_IOC_REQUEST_ALLOC.
    381 */
    382#define MEDIA_REQUEST_IOC_QUEUE		_IO('|',  0x80)
    383#define MEDIA_REQUEST_IOC_REINIT	_IO('|',  0x81)
    384
    385#ifndef __KERNEL__
    386
    387/*
    388 * Legacy symbols used to avoid userspace compilation breakages.
    389 * Do not use any of this in new applications!
    390 *
    391 * Those symbols map the entity function into types and should be
    392 * used only on legacy programs for legacy hardware. Don't rely
    393 * on those for MEDIA_IOC_G_TOPOLOGY.
    394 */
    395#define MEDIA_ENT_TYPE_SHIFT			16
    396#define MEDIA_ENT_TYPE_MASK			0x00ff0000
    397#define MEDIA_ENT_SUBTYPE_MASK			0x0000ffff
    398
    399#define MEDIA_ENT_T_DEVNODE_UNKNOWN		(MEDIA_ENT_F_OLD_BASE | \
    400						 MEDIA_ENT_SUBTYPE_MASK)
    401
    402#define MEDIA_ENT_T_DEVNODE			MEDIA_ENT_F_OLD_BASE
    403#define MEDIA_ENT_T_DEVNODE_V4L			MEDIA_ENT_F_IO_V4L
    404#define MEDIA_ENT_T_DEVNODE_FB			(MEDIA_ENT_F_OLD_BASE + 2)
    405#define MEDIA_ENT_T_DEVNODE_ALSA		(MEDIA_ENT_F_OLD_BASE + 3)
    406#define MEDIA_ENT_T_DEVNODE_DVB			(MEDIA_ENT_F_OLD_BASE + 4)
    407
    408#define MEDIA_ENT_T_UNKNOWN			MEDIA_ENT_F_UNKNOWN
    409#define MEDIA_ENT_T_V4L2_VIDEO			MEDIA_ENT_F_IO_V4L
    410#define MEDIA_ENT_T_V4L2_SUBDEV			MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN
    411#define MEDIA_ENT_T_V4L2_SUBDEV_SENSOR		MEDIA_ENT_F_CAM_SENSOR
    412#define MEDIA_ENT_T_V4L2_SUBDEV_FLASH		MEDIA_ENT_F_FLASH
    413#define MEDIA_ENT_T_V4L2_SUBDEV_LENS		MEDIA_ENT_F_LENS
    414#define MEDIA_ENT_T_V4L2_SUBDEV_DECODER		MEDIA_ENT_F_ATV_DECODER
    415#define MEDIA_ENT_T_V4L2_SUBDEV_TUNER		MEDIA_ENT_F_TUNER
    416
    417#define MEDIA_ENT_F_DTV_DECODER			MEDIA_ENT_F_DV_DECODER
    418
    419/*
    420 * There is still no full ALSA support in the media controller. These
    421 * defines should not have been added and we leave them here only
    422 * in case some application tries to use these defines.
    423 *
    424 * The ALSA defines that are in use have been moved into __KERNEL__
    425 * scope. As support gets added to these interface types, they should
    426 * be moved into __KERNEL__ scope with the code that uses them.
    427 */
    428#define MEDIA_INTF_T_ALSA_COMPRESS             (MEDIA_INTF_T_ALSA_BASE + 3)
    429#define MEDIA_INTF_T_ALSA_RAWMIDI              (MEDIA_INTF_T_ALSA_BASE + 4)
    430#define MEDIA_INTF_T_ALSA_HWDEP                (MEDIA_INTF_T_ALSA_BASE + 5)
    431#define MEDIA_INTF_T_ALSA_SEQUENCER            (MEDIA_INTF_T_ALSA_BASE + 6)
    432#define MEDIA_INTF_T_ALSA_TIMER                (MEDIA_INTF_T_ALSA_BASE + 7)
    433
    434/* Obsolete symbol for media_version, no longer used in the kernel */
    435#define MEDIA_API_VERSION			((0 << 16) | (1 << 8) | 0)
    436
    437#endif
    438
    439#endif /* __LINUX_MEDIA_H */