root/drivers/media/platform/vsp1/vsp1_entity.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. to_vsp1_entity

   1 /* SPDX-License-Identifier: GPL-2.0+ */
   2 /*
   3  * vsp1_entity.h  --  R-Car VSP1 Base Entity
   4  *
   5  * Copyright (C) 2013-2014 Renesas Electronics Corporation
   6  *
   7  * Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
   8  */
   9 #ifndef __VSP1_ENTITY_H__
  10 #define __VSP1_ENTITY_H__
  11 
  12 #include <linux/list.h>
  13 #include <linux/mutex.h>
  14 
  15 #include <media/v4l2-subdev.h>
  16 
  17 struct vsp1_device;
  18 struct vsp1_dl_body;
  19 struct vsp1_dl_list;
  20 struct vsp1_pipeline;
  21 struct vsp1_partition;
  22 struct vsp1_partition_window;
  23 
  24 enum vsp1_entity_type {
  25         VSP1_ENTITY_BRS,
  26         VSP1_ENTITY_BRU,
  27         VSP1_ENTITY_CLU,
  28         VSP1_ENTITY_HGO,
  29         VSP1_ENTITY_HGT,
  30         VSP1_ENTITY_HSI,
  31         VSP1_ENTITY_HST,
  32         VSP1_ENTITY_LIF,
  33         VSP1_ENTITY_LUT,
  34         VSP1_ENTITY_RPF,
  35         VSP1_ENTITY_SRU,
  36         VSP1_ENTITY_UDS,
  37         VSP1_ENTITY_UIF,
  38         VSP1_ENTITY_WPF,
  39 };
  40 
  41 #define VSP1_ENTITY_MAX_INPUTS          5       /* For the BRU */
  42 
  43 /*
  44  * struct vsp1_route - Entity routing configuration
  45  * @type: Entity type this routing entry is associated with
  46  * @index: Entity index this routing entry is associated with
  47  * @reg: Output routing configuration register
  48  * @inputs: Target node value for each input
  49  * @output: Target node value for entity output
  50  *
  51  * Each $vsp1_route entry describes routing configuration for the entity
  52  * specified by the entry's @type and @index. @reg indicates the register that
  53  * holds output routing configuration for the entity, and the @inputs array
  54  * store the target node value for each input of the entity. The @output field
  55  * stores the target node value of the entity output when used as a source for
  56  * histogram generation.
  57  */
  58 struct vsp1_route {
  59         enum vsp1_entity_type type;
  60         unsigned int index;
  61         unsigned int reg;
  62         unsigned int inputs[VSP1_ENTITY_MAX_INPUTS];
  63         unsigned int output;
  64 };
  65 
  66 /**
  67  * struct vsp1_entity_operations - Entity operations
  68  * @destroy:    Destroy the entity.
  69  * @configure_stream:   Setup the hardware parameters for the stream which do
  70  *                      not vary between frames (pipeline, formats). Note that
  71  *                      the vsp1_dl_list argument is only valid for display
  72  *                      pipeline and will be NULL for mem-to-mem pipelines.
  73  * @configure_frame:    Configure the runtime parameters for each frame.
  74  * @configure_partition: Configure partition specific parameters.
  75  * @max_width:  Return the max supported width of data that the entity can
  76  *              process in a single operation.
  77  * @partition:  Process the partition construction based on this entity's
  78  *              configuration.
  79  */
  80 struct vsp1_entity_operations {
  81         void (*destroy)(struct vsp1_entity *);
  82         void (*configure_stream)(struct vsp1_entity *, struct vsp1_pipeline *,
  83                                  struct vsp1_dl_list *, struct vsp1_dl_body *);
  84         void (*configure_frame)(struct vsp1_entity *, struct vsp1_pipeline *,
  85                                 struct vsp1_dl_list *, struct vsp1_dl_body *);
  86         void (*configure_partition)(struct vsp1_entity *,
  87                                     struct vsp1_pipeline *,
  88                                     struct vsp1_dl_list *,
  89                                     struct vsp1_dl_body *);
  90         unsigned int (*max_width)(struct vsp1_entity *, struct vsp1_pipeline *);
  91         void (*partition)(struct vsp1_entity *, struct vsp1_pipeline *,
  92                           struct vsp1_partition *, unsigned int,
  93                           struct vsp1_partition_window *);
  94 };
  95 
  96 struct vsp1_entity {
  97         struct vsp1_device *vsp1;
  98 
  99         const struct vsp1_entity_operations *ops;
 100 
 101         enum vsp1_entity_type type;
 102         unsigned int index;
 103         const struct vsp1_route *route;
 104 
 105         struct vsp1_pipeline *pipe;
 106 
 107         struct list_head list_dev;
 108         struct list_head list_pipe;
 109 
 110         struct media_pad *pads;
 111         unsigned int source_pad;
 112 
 113         struct vsp1_entity **sources;
 114         struct vsp1_entity *sink;
 115         unsigned int sink_pad;
 116 
 117         struct v4l2_subdev subdev;
 118         struct v4l2_subdev_pad_config *config;
 119 
 120         struct mutex lock;      /* Protects the pad config */
 121 };
 122 
 123 static inline struct vsp1_entity *to_vsp1_entity(struct v4l2_subdev *subdev)
 124 {
 125         return container_of(subdev, struct vsp1_entity, subdev);
 126 }
 127 
 128 int vsp1_entity_init(struct vsp1_device *vsp1, struct vsp1_entity *entity,
 129                      const char *name, unsigned int num_pads,
 130                      const struct v4l2_subdev_ops *ops, u32 function);
 131 void vsp1_entity_destroy(struct vsp1_entity *entity);
 132 
 133 extern const struct v4l2_subdev_internal_ops vsp1_subdev_internal_ops;
 134 
 135 int vsp1_entity_link_setup(struct media_entity *entity,
 136                            const struct media_pad *local,
 137                            const struct media_pad *remote, u32 flags);
 138 
 139 struct v4l2_subdev_pad_config *
 140 vsp1_entity_get_pad_config(struct vsp1_entity *entity,
 141                            struct v4l2_subdev_pad_config *cfg,
 142                            enum v4l2_subdev_format_whence which);
 143 struct v4l2_mbus_framefmt *
 144 vsp1_entity_get_pad_format(struct vsp1_entity *entity,
 145                            struct v4l2_subdev_pad_config *cfg,
 146                            unsigned int pad);
 147 struct v4l2_rect *
 148 vsp1_entity_get_pad_selection(struct vsp1_entity *entity,
 149                               struct v4l2_subdev_pad_config *cfg,
 150                               unsigned int pad, unsigned int target);
 151 int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
 152                          struct v4l2_subdev_pad_config *cfg);
 153 
 154 void vsp1_entity_route_setup(struct vsp1_entity *entity,
 155                              struct vsp1_pipeline *pipe,
 156                              struct vsp1_dl_body *dlb);
 157 
 158 void vsp1_entity_configure_stream(struct vsp1_entity *entity,
 159                                   struct vsp1_pipeline *pipe,
 160                                   struct vsp1_dl_list *dl,
 161                                   struct vsp1_dl_body *dlb);
 162 
 163 void vsp1_entity_configure_frame(struct vsp1_entity *entity,
 164                                  struct vsp1_pipeline *pipe,
 165                                  struct vsp1_dl_list *dl,
 166                                  struct vsp1_dl_body *dlb);
 167 
 168 void vsp1_entity_configure_partition(struct vsp1_entity *entity,
 169                                      struct vsp1_pipeline *pipe,
 170                                      struct vsp1_dl_list *dl,
 171                                      struct vsp1_dl_body *dlb);
 172 
 173 struct media_pad *vsp1_entity_remote_pad(struct media_pad *pad);
 174 
 175 int vsp1_subdev_get_pad_format(struct v4l2_subdev *subdev,
 176                                struct v4l2_subdev_pad_config *cfg,
 177                                struct v4l2_subdev_format *fmt);
 178 int vsp1_subdev_set_pad_format(struct v4l2_subdev *subdev,
 179                                struct v4l2_subdev_pad_config *cfg,
 180                                struct v4l2_subdev_format *fmt,
 181                                const unsigned int *codes, unsigned int ncodes,
 182                                unsigned int min_width, unsigned int min_height,
 183                                unsigned int max_width, unsigned int max_height);
 184 int vsp1_subdev_enum_mbus_code(struct v4l2_subdev *subdev,
 185                                struct v4l2_subdev_pad_config *cfg,
 186                                struct v4l2_subdev_mbus_code_enum *code,
 187                                const unsigned int *codes, unsigned int ncodes);
 188 int vsp1_subdev_enum_frame_size(struct v4l2_subdev *subdev,
 189                                 struct v4l2_subdev_pad_config *cfg,
 190                                 struct v4l2_subdev_frame_size_enum *fse,
 191                                 unsigned int min_w, unsigned int min_h,
 192                                 unsigned int max_w, unsigned int max_h);
 193 
 194 #endif /* __VSP1_ENTITY_H__ */

/* [<][>][^][v][top][bottom][index][help] */