blob: 98444a3cc3e47595097bfd6ea5b257a35b821fad [file] [log] [blame]
/*
* 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(HAS_NO_INPUT_FORMATTER)
#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 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 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,
uint8_t 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,
#if !defined(HAS_NO_INPUT_SYSTEM)
const mipi_port_ID_t port_id
#endif
#ifdef ISP2401
,
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
#endif
);
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 frame_num,
struct ia_css_frame *frame,
struct ia_css_metadata *metadata);
#if defined(USE_INPUT_SYSTEM_VERSION_2) || defined(USE_INPUT_SYSTEM_VERSION_2401)
/**
* @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 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 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 num_frames);
#endif
/**
* @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 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(HAS_NO_INPUT_FORMATTER)
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_ */