Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | /* SPDX-License-Identifier: GPL-2.0 */
/*
* Support for Intel Camera Imaging ISP subsystem.
* Copyright (c) 2015, Intel Corporation.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*/
#ifndef _SH_CSS_SP_H_
#define _SH_CSS_SP_H_
#include <system_global.h>
#include <type_support.h>
#if !defined(ISP2401)
#include "input_formatter.h"
#endif
#include "ia_css_binary.h"
#include "ia_css_types.h"
#include "ia_css_pipeline.h"
/* Function to initialize the data and bss section descr of the binary */
void
sh_css_sp_store_init_dmem(const struct ia_css_fw_info *fw);
void
store_sp_stage_data(enum ia_css_pipe_id id, unsigned int pipe_num,
unsigned int stage);
void
sh_css_stage_write_binary_info(struct ia_css_binary_info *info);
void
store_sp_group_data(void);
/* Start binary (jpeg) copy on the SP */
void
sh_css_sp_start_binary_copy(unsigned int pipe_num,
struct ia_css_frame *out_frame,
unsigned int two_ppc);
unsigned int
sh_css_sp_get_binary_copy_size(void);
/* Return the value of a SW interrupt */
unsigned int
sh_css_sp_get_sw_interrupt_value(unsigned int irq);
void
sh_css_sp_init_pipeline(struct ia_css_pipeline *me,
enum ia_css_pipe_id id,
u8 pipe_num,
bool xnr,
bool two_ppc,
bool continuous,
bool offline,
unsigned int required_bds_factor,
enum sh_css_pipe_config_override copy_ovrd,
enum ia_css_input_mode input_mode,
const struct ia_css_metadata_config *md_config,
const struct ia_css_metadata_info *md_info,
const enum mipi_port_id port_id,
const struct ia_css_coordinate
*internal_frame_origin_bqs_on_sctbl, /* Origin of internal frame
positioned on shading table at shading correction in ISP. */
const struct ia_css_isp_parameters *params
);
void
sh_css_sp_uninit_pipeline(unsigned int pipe_num);
bool sh_css_write_host2sp_command(enum host2sp_commands host2sp_command);
enum host2sp_commands
sh_css_read_host2sp_command(void);
void
sh_css_init_host2sp_frame_data(void);
/**
* @brief Update the offline frame information in host_sp_communication.
*
* @param[in] frame_num The offline frame number.
* @param[in] frame The pointer to the offline frame.
*/
void
sh_css_update_host2sp_offline_frame(
unsigned int frame_num,
struct ia_css_frame *frame,
struct ia_css_metadata *metadata);
/**
* @brief Update the mipi frame information in host_sp_communication.
*
* @param[in] frame_num The mipi frame number.
* @param[in] frame The pointer to the mipi frame.
*/
void
sh_css_update_host2sp_mipi_frame(
unsigned int frame_num,
struct ia_css_frame *frame);
/**
* @brief Update the mipi metadata information in host_sp_communication.
*
* @param[in] frame_num The mipi frame number.
* @param[in] metadata The pointer to the mipi metadata.
*/
void
sh_css_update_host2sp_mipi_metadata(
unsigned int frame_num,
struct ia_css_metadata *metadata);
/**
* @brief Update the nr of mipi frames to use in host_sp_communication.
*
* @param[in] num_frames The number of mipi frames to use.
*/
void
sh_css_update_host2sp_num_mipi_frames(unsigned int num_frames);
/**
* @brief Update the nr of offline frames to use in host_sp_communication.
*
* @param[in] num_frames The number of raw frames to use.
*/
void
sh_css_update_host2sp_cont_num_raw_frames(unsigned int num_frames,
bool set_avail);
void
sh_css_event_init_irq_mask(void);
void
sh_css_sp_start_isp(void);
void
sh_css_sp_set_sp_running(bool flag);
bool
sh_css_sp_is_running(void);
#if SP_DEBUG != SP_DEBUG_NONE
void
sh_css_sp_get_debug_state(struct sh_css_sp_debug_state *state);
#endif
#if !defined(ISP2401)
void
sh_css_sp_set_if_configs(
const input_formatter_cfg_t *config_a,
const input_formatter_cfg_t *config_b,
const uint8_t if_config_index);
#endif
void
sh_css_sp_program_input_circuit(int fmt_type,
int ch_id,
enum ia_css_input_mode input_mode);
void
sh_css_sp_configure_sync_gen(int width,
int height,
int hblank_cycles,
int vblank_cycles);
void
sh_css_sp_configure_tpg(int x_mask,
int y_mask,
int x_delta,
int y_delta,
int xy_mask);
void
sh_css_sp_configure_prbs(int seed);
void
sh_css_sp_configure_enable_raw_pool_locking(bool lock_all);
void
sh_css_sp_enable_isys_event_queue(bool enable);
void
sh_css_sp_set_disable_continuous_viewfinder(bool flag);
void
sh_css_sp_reset_global_vars(void);
/**
* @brief Initialize the DMA software-mask in the debug mode.
* This API should be ONLY called in the debugging mode.
* And it should be always called before the first call of
* "sh_css_set_dma_sw_reg(...)".
*
* @param[in] dma_id The ID of the target DMA.
*
* @return
* - true, if it is successful.
* - false, otherwise.
*/
bool
sh_css_sp_init_dma_sw_reg(int dma_id);
/**
* @brief Set the DMA software-mask in the debug mode.
* This API should be ONLYL called in the debugging mode. Must
* call "sh_css_set_dma_sw_reg(...)" before this
* API is called for the first time.
*
* @param[in] dma_id The ID of the target DMA.
* @param[in] channel_id The ID of the target DMA channel.
* @param[in] request_type The type of the DMA request.
* For example:
* - "0" indicates the writing request.
* - "1" indicates the reading request.
*
* @param[in] enable If it is "true", the target DMA
* channel is enabled in the software.
* Otherwise, the target DMA channel
* is disabled in the software.
*
* @return
* - true, if it is successful.
* - false, otherwise.
*/
bool
sh_css_sp_set_dma_sw_reg(int dma_id,
int channel_id,
int request_type,
bool enable);
extern struct sh_css_sp_group sh_css_sp_group;
extern struct sh_css_sp_stage sh_css_sp_stage;
extern struct sh_css_isp_stage sh_css_isp_stage;
#endif /* _SH_CSS_SP_H_ */
|