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

v4l2-mc.h (7669B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * v4l2-mc.h - Media Controller V4L2 types and prototypes
      4 *
      5 * Copyright (C) 2016 Mauro Carvalho Chehab <mchehab@kernel.org>
      6 * Copyright (C) 2006-2010 Nokia Corporation
      7 * Copyright (c) 2016 Intel Corporation.
      8 */
      9
     10#ifndef _V4L2_MC_H
     11#define _V4L2_MC_H
     12
     13#include <media/media-device.h>
     14#include <media/v4l2-dev.h>
     15#include <media/v4l2-subdev.h>
     16#include <linux/types.h>
     17
     18/* We don't need to include pci.h or usb.h here */
     19struct pci_dev;
     20struct usb_device;
     21
     22#ifdef CONFIG_MEDIA_CONTROLLER
     23/**
     24 * v4l2_mc_create_media_graph() - create Media Controller links at the graph.
     25 *
     26 * @mdev:	pointer to the &media_device struct.
     27 *
     28 * Add links between the entities commonly found on PC customer's hardware at
     29 * the V4L2 side: camera sensors, audio and video PLL-IF decoders, tuners,
     30 * analog TV decoder and I/O entities (video, VBI and Software Defined Radio).
     31 *
     32 * .. note::
     33 *
     34 *    Webcams are modelled on a very simple way: the sensor is
     35 *    connected directly to the I/O entity. All dirty details, like
     36 *    scaler and crop HW are hidden. While such mapping is enough for v4l2
     37 *    interface centric PC-consumer's hardware, V4L2 subdev centric camera
     38 *    hardware should not use this routine, as it will not build the right graph.
     39 */
     40int v4l2_mc_create_media_graph(struct media_device *mdev);
     41
     42/**
     43 * v4l_enable_media_source() -	Hold media source for exclusive use
     44 *				if free
     45 *
     46 * @vdev:	pointer to struct video_device
     47 *
     48 * This interface calls enable_source handler to determine if
     49 * media source is free for use. The enable_source handler is
     50 * responsible for checking is the media source is free and
     51 * start a pipeline between the media source and the media
     52 * entity associated with the video device. This interface
     53 * should be called from v4l2-core and dvb-core interfaces
     54 * that change the source configuration.
     55 *
     56 * Return: returns zero on success or a negative error code.
     57 */
     58int v4l_enable_media_source(struct video_device *vdev);
     59
     60/**
     61 * v4l_disable_media_source() -	Release media source
     62 *
     63 * @vdev:	pointer to struct video_device
     64 *
     65 * This interface calls disable_source handler to release
     66 * the media source. The disable_source handler stops the
     67 * active media pipeline between the media source and the
     68 * media entity associated with the video device.
     69 *
     70 * Return: returns zero on success or a negative error code.
     71 */
     72void v4l_disable_media_source(struct video_device *vdev);
     73
     74/*
     75 * v4l_vb2q_enable_media_tuner -  Hold media source for exclusive use
     76 *				  if free.
     77 * @q - pointer to struct vb2_queue
     78 *
     79 * Wrapper for v4l_enable_media_source(). This function should
     80 * be called from v4l2-core to enable the media source with
     81 * pointer to struct vb2_queue as the input argument. Some
     82 * v4l2-core interfaces don't have access to video device and
     83 * this interface finds the struct video_device for the q and
     84 * calls v4l_enable_media_source().
     85 */
     86int v4l_vb2q_enable_media_source(struct vb2_queue *q);
     87
     88/**
     89 * v4l2_create_fwnode_links_to_pad - Create fwnode-based links from a
     90 *                                   source subdev to a sink subdev pad.
     91 *
     92 * @src_sd: pointer to a source subdev
     93 * @sink:  pointer to a subdev sink pad
     94 * @flags: the link flags
     95 *
     96 * This function searches for fwnode endpoint connections from a source
     97 * subdevice to a single sink pad, and if suitable connections are found,
     98 * translates them into media links to that pad. The function can be
     99 * called by the sink subdevice, in its v4l2-async notifier subdev bound
    100 * callback, to create links from a bound source subdevice.
    101 *
    102 * The @flags argument specifies the link flags. The caller shall ensure that
    103 * the flags are valid regardless of the number of links that may be created.
    104 * For instance, setting the MEDIA_LNK_FL_ENABLED flag will cause all created
    105 * links to be enabled, which isn't valid if more than one link is created.
    106 *
    107 * .. note::
    108 *
    109 *    Any sink subdevice that calls this function must implement the
    110 *    .get_fwnode_pad media operation in order to verify endpoints passed
    111 *    to the sink are owned by the sink.
    112 *
    113 * Return 0 on success or a negative error code on failure.
    114 */
    115int v4l2_create_fwnode_links_to_pad(struct v4l2_subdev *src_sd,
    116				    struct media_pad *sink, u32 flags);
    117
    118/**
    119 * v4l2_create_fwnode_links - Create fwnode-based links from a source
    120 *                            subdev to a sink subdev.
    121 *
    122 * @src_sd: pointer to a source subdevice
    123 * @sink_sd: pointer to a sink subdevice
    124 *
    125 * This function searches for any and all fwnode endpoint connections
    126 * between source and sink subdevices, and translates them into media
    127 * links. The function can be called by the sink subdevice, in its
    128 * v4l2-async notifier subdev bound callback, to create all links from
    129 * a bound source subdevice.
    130 *
    131 * .. note::
    132 *
    133 *    Any sink subdevice that calls this function must implement the
    134 *    .get_fwnode_pad media operation in order to verify endpoints passed
    135 *    to the sink are owned by the sink.
    136 *
    137 * Return 0 on success or a negative error code on failure.
    138 */
    139int v4l2_create_fwnode_links(struct v4l2_subdev *src_sd,
    140			     struct v4l2_subdev *sink_sd);
    141
    142/**
    143 * v4l2_pipeline_pm_get - Increase the use count of a pipeline
    144 * @entity: The root entity of a pipeline
    145 *
    146 * Update the use count of all entities in the pipeline and power entities on.
    147 *
    148 * This function is intended to be called in video node open. It uses
    149 * struct media_entity.use_count to track the power status. The use
    150 * of this function should be paired with v4l2_pipeline_link_notify().
    151 *
    152 * Return 0 on success or a negative error code on failure.
    153 */
    154int v4l2_pipeline_pm_get(struct media_entity *entity);
    155
    156/**
    157 * v4l2_pipeline_pm_put - Decrease the use count of a pipeline
    158 * @entity: The root entity of a pipeline
    159 *
    160 * Update the use count of all entities in the pipeline and power entities off.
    161 *
    162 * This function is intended to be called in video node release. It uses
    163 * struct media_entity.use_count to track the power status. The use
    164 * of this function should be paired with v4l2_pipeline_link_notify().
    165 */
    166void v4l2_pipeline_pm_put(struct media_entity *entity);
    167
    168
    169/**
    170 * v4l2_pipeline_link_notify - Link management notification callback
    171 * @link: The link
    172 * @flags: New link flags that will be applied
    173 * @notification: The link's state change notification type (MEDIA_DEV_NOTIFY_*)
    174 *
    175 * React to link management on powered pipelines by updating the use count of
    176 * all entities in the source and sink sides of the link. Entities are powered
    177 * on or off accordingly. The use of this function should be paired
    178 * with v4l2_pipeline_pm_{get,put}().
    179 *
    180 * Return 0 on success or a negative error code on failure. Powering entities
    181 * off is assumed to never fail. This function will not fail for disconnection
    182 * events.
    183 */
    184int v4l2_pipeline_link_notify(struct media_link *link, u32 flags,
    185			      unsigned int notification);
    186
    187#else /* CONFIG_MEDIA_CONTROLLER */
    188
    189static inline int v4l2_mc_create_media_graph(struct media_device *mdev)
    190{
    191	return 0;
    192}
    193
    194static inline int v4l_enable_media_source(struct video_device *vdev)
    195{
    196	return 0;
    197}
    198
    199static inline void v4l_disable_media_source(struct video_device *vdev)
    200{
    201}
    202
    203static inline int v4l_vb2q_enable_media_source(struct vb2_queue *q)
    204{
    205	return 0;
    206}
    207
    208static inline int v4l2_pipeline_pm_get(struct media_entity *entity)
    209{
    210	return 0;
    211}
    212
    213static inline void v4l2_pipeline_pm_put(struct media_entity *entity)
    214{}
    215
    216static inline int v4l2_pipeline_link_notify(struct media_link *link, u32 flags,
    217					    unsigned int notification)
    218{
    219	return 0;
    220}
    221
    222#endif /* CONFIG_MEDIA_CONTROLLER */
    223#endif /* _V4L2_MC_H */