linux/drivers/staging/media/atomisp/pci/runtime/binary/interface/ia_css_binary.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/**
   3Support for Intel Camera Imaging ISP subsystem.
   4Copyright (c) 2010 - 2015, Intel Corporation.
   5
   6This program is free software; you can redistribute it and/or modify it
   7under the terms and conditions of the GNU General Public License,
   8version 2, as published by the Free Software Foundation.
   9
  10This program is distributed in the hope it will be useful, but WITHOUT
  11ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  13more details.
  14*/
  15
  16#ifndef _IA_CSS_BINARY_H_
  17#define _IA_CSS_BINARY_H_
  18
  19#include <type_support.h>
  20#include "ia_css_types.h"
  21#include "ia_css_err.h"
  22#include "ia_css_stream_format.h"
  23#include "ia_css_stream_public.h"
  24#include "ia_css_frame_public.h"
  25#include "sh_css_metrics.h"
  26#include "isp/kernels/fixedbds/fixedbds_1.0/ia_css_fixedbds_types.h"
  27
  28/* The binary mode is used in pre-processor expressions so we cannot
  29 * use an enum here. */
  30#define IA_CSS_BINARY_MODE_COPY       0
  31#define IA_CSS_BINARY_MODE_PREVIEW    1
  32#define IA_CSS_BINARY_MODE_PRIMARY    2
  33#define IA_CSS_BINARY_MODE_VIDEO      3
  34#define IA_CSS_BINARY_MODE_PRE_ISP    4
  35#define IA_CSS_BINARY_MODE_GDC        5
  36#define IA_CSS_BINARY_MODE_POST_ISP   6
  37#define IA_CSS_BINARY_MODE_ANR        7
  38#define IA_CSS_BINARY_MODE_CAPTURE_PP 8
  39#define IA_CSS_BINARY_MODE_VF_PP      9
  40#define IA_CSS_BINARY_MODE_PRE_DE     10
  41#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE0    11
  42#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE1    12
  43#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE2    13
  44#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE3    14
  45#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE4    15
  46#define IA_CSS_BINARY_MODE_PRIMARY_HQ_STAGE5    16
  47#define IA_CSS_BINARY_NUM_MODES       17
  48
  49#define MAX_NUM_PRIMARY_STAGES 6
  50#define NUM_PRIMARY_HQ_STAGES  6  /* number of primary stages for ISP2.6.1 high quality pipe */
  51#define NUM_PRIMARY_STAGES     1  /* number of primary satges for ISP1/ISP2.2 pipe */
  52
  53/* Indicate where binaries can read input from */
  54#define IA_CSS_BINARY_INPUT_SENSOR   0
  55#define IA_CSS_BINARY_INPUT_MEMORY   1
  56#define IA_CSS_BINARY_INPUT_VARIABLE 2
  57
  58/* Should be included without the path.
  59   However, that requires adding the path to numerous makefiles
  60   that have nothing to do with isp parameters.
  61 */
  62#include "runtime/isp_param/interface/ia_css_isp_param_types.h"
  63
  64/* now these ports only include output ports but not vf output ports */
  65enum {
  66        IA_CSS_BINARY_OUTPUT_PORT_0 = 0,
  67        IA_CSS_BINARY_OUTPUT_PORT_1 = 1,
  68        IA_CSS_BINARY_MAX_OUTPUT_PORTS = 2
  69};
  70
  71struct ia_css_cas_binary_descr {
  72        unsigned int num_stage;
  73        unsigned int num_output_stage;
  74        struct ia_css_frame_info *in_info;
  75        struct ia_css_frame_info *internal_out_info;
  76        struct ia_css_frame_info *out_info;
  77        struct ia_css_frame_info *vf_info;
  78        bool *is_output_stage;
  79};
  80
  81struct ia_css_binary_descr {
  82        int mode;
  83        bool online;
  84        bool continuous;
  85        bool striped;
  86        bool two_ppc;
  87        bool enable_yuv_ds;
  88        bool enable_high_speed;
  89        bool enable_dvs_6axis;
  90        bool enable_reduced_pipe;
  91        bool enable_dz;
  92        bool enable_xnr;
  93        bool enable_fractional_ds;
  94        bool enable_dpc;
  95
  96        /* ISP2401 */
  97        bool enable_luma_only;
  98        bool enable_tnr;
  99
 100        bool enable_capture_pp_bli;
 101        struct ia_css_resolution dvs_env;
 102        enum atomisp_input_format stream_format;
 103        struct ia_css_frame_info *in_info;              /* the info of the input-frame with the
 104                                                           ISP required resolution. */
 105        struct ia_css_frame_info *bds_out_info;
 106        struct ia_css_frame_info *out_info[IA_CSS_BINARY_MAX_OUTPUT_PORTS];
 107        struct ia_css_frame_info *vf_info;
 108        unsigned int isp_pipe_version;
 109        unsigned int required_bds_factor;
 110        int stream_config_left_padding;
 111};
 112
 113struct ia_css_binary {
 114        const struct ia_css_binary_xinfo *info;
 115        enum atomisp_input_format input_format;
 116        struct ia_css_frame_info in_frame_info;
 117        struct ia_css_frame_info internal_frame_info;
 118        struct ia_css_frame_info out_frame_info[IA_CSS_BINARY_MAX_OUTPUT_PORTS];
 119        struct ia_css_resolution effective_in_frame_res;
 120        struct ia_css_frame_info vf_frame_info;
 121        int                      input_buf_vectors;
 122        int                      deci_factor_log2;
 123        int                      vf_downscale_log2;
 124        int                      s3atbl_width;
 125        int                      s3atbl_height;
 126        int                      s3atbl_isp_width;
 127        int                      s3atbl_isp_height;
 128        unsigned int             morph_tbl_width;
 129        unsigned int             morph_tbl_aligned_width;
 130        unsigned int             morph_tbl_height;
 131        int                      sctbl_width_per_color;
 132        int                      sctbl_aligned_width_per_color;
 133        int                      sctbl_height;
 134        int                      sctbl_legacy_width_per_color;
 135        int                      sctbl_legacy_height;
 136        struct ia_css_sdis_info  dis;
 137        struct ia_css_resolution dvs_envelope;
 138        bool                     online;
 139        unsigned int             uds_xc;
 140        unsigned int             uds_yc;
 141        unsigned int             left_padding;
 142        struct sh_css_binary_metrics metrics;
 143        struct ia_css_isp_param_host_segments mem_params;
 144        struct ia_css_isp_param_css_segments  css_params;
 145};
 146
 147#define IA_CSS_BINARY_DEFAULT_SETTINGS { \
 148        .input_format           = ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY, \
 149        .in_frame_info          = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
 150        .internal_frame_info    = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
 151        .out_frame_info         = {IA_CSS_BINARY_DEFAULT_FRAME_INFO}, \
 152        .vf_frame_info          = IA_CSS_BINARY_DEFAULT_FRAME_INFO, \
 153}
 154
 155int
 156ia_css_binary_init_infos(void);
 157
 158int
 159ia_css_binary_uninit(void);
 160
 161int
 162ia_css_binary_fill_info(const struct ia_css_binary_xinfo *xinfo,
 163                        bool online,
 164                        bool two_ppc,
 165                        enum atomisp_input_format stream_format,
 166                        const struct ia_css_frame_info *in_info,
 167                        const struct ia_css_frame_info *bds_out_info,
 168                        const struct ia_css_frame_info *out_info[],
 169                        const struct ia_css_frame_info *vf_info,
 170                        struct ia_css_binary *binary,
 171                        struct ia_css_resolution *dvs_env,
 172                        int stream_config_left_padding,
 173                        bool accelerator);
 174
 175int
 176ia_css_binary_find(struct ia_css_binary_descr *descr,
 177                   struct ia_css_binary *binary);
 178
 179/* @brief Get the shading information of the specified shading correction type.
 180 *
 181 * @param[in] binary: The isp binary which has the shading correction.
 182 * @param[in] type: The shading correction type.
 183 * @param[in] required_bds_factor: The bayer downscaling factor required in the pipe.
 184 * @param[in] stream_config: The stream configuration.
 185 * @param[out] shading_info: The shading information.
 186 *              The shading information necessary as API is stored in the shading_info.
 187 *              The driver needs to get this information to generate
 188 *              the shading table directly required from ISP.
 189 * @param[out] pipe_config: The pipe configuration.
 190 *              The shading information related to ISP (but, not necessary as API) is stored in the pipe_config.
 191 * @return      0 or error code upon error.
 192 *
 193 */
 194int
 195ia_css_binary_get_shading_info(const struct ia_css_binary *binary,
 196                               enum ia_css_shading_correction_type type,
 197                               unsigned int required_bds_factor,
 198                               const struct ia_css_stream_config *stream_config,
 199                               struct ia_css_shading_info *shading_info,
 200                               struct ia_css_pipe_config *pipe_config);
 201
 202int
 203ia_css_binary_3a_grid_info(const struct ia_css_binary *binary,
 204                           struct ia_css_grid_info *info,
 205                           struct ia_css_pipe *pipe);
 206
 207void
 208ia_css_binary_dvs_grid_info(const struct ia_css_binary *binary,
 209                            struct ia_css_grid_info *info,
 210                            struct ia_css_pipe *pipe);
 211
 212void
 213ia_css_binary_dvs_stat_grid_info(
 214    const struct ia_css_binary *binary,
 215    struct ia_css_grid_info *info,
 216    struct ia_css_pipe *pipe);
 217
 218unsigned
 219ia_css_binary_max_vf_width(void);
 220
 221void
 222ia_css_binary_destroy_isp_parameters(struct ia_css_binary *binary);
 223
 224void
 225ia_css_binary_get_isp_binaries(struct ia_css_binary_xinfo **binaries,
 226                               uint32_t *num_isp_binaries);
 227
 228#endif /* _IA_CSS_BINARY_H_ */
 229