diff options
Diffstat (limited to 'drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h')
-rw-r--r-- | drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h | 582 |
1 files changed, 0 insertions, 582 deletions
diff --git a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h b/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h deleted file mode 100644 index ddefad330db7..000000000000 --- a/drivers/staging/media/atomisp/pci/atomisp2/css2400/ia_css_stream_public.h +++ /dev/null @@ -1,582 +0,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 __IA_CSS_STREAM_PUBLIC_H -#define __IA_CSS_STREAM_PUBLIC_H - -/* @file - * This file contains support for configuring and controlling streams - */ - -#include <type_support.h> -#include "ia_css_types.h" -#include "ia_css_pipe_public.h" -#include "ia_css_metadata.h" -#include "ia_css_tpg.h" -#include "ia_css_prbs.h" -#include "ia_css_input_port.h" - -/* Input modes, these enumerate all supported input modes. - * Note that not all ISP modes support all input modes. - */ -enum ia_css_input_mode { - IA_CSS_INPUT_MODE_SENSOR, /** data from sensor */ - IA_CSS_INPUT_MODE_FIFO, /** data from input-fifo */ - IA_CSS_INPUT_MODE_TPG, /** data from test-pattern generator */ - IA_CSS_INPUT_MODE_PRBS, /** data from pseudo-random bit stream */ - IA_CSS_INPUT_MODE_MEMORY, /** data from a frame in memory */ - IA_CSS_INPUT_MODE_BUFFERED_SENSOR /** data is sent through mipi buffer */ -}; - -/* Structure of the MIPI buffer configuration - */ -struct ia_css_mipi_buffer_config { - unsigned int size_mem_words; /** The frame size in the system memory - words (32B) */ - bool contiguous; /** Allocated memory physically - contiguously or not. \deprecated{Will be false always.}*/ - unsigned int nof_mipi_buffers; /** The number of MIPI buffers required for this - stream */ -}; - -enum { - IA_CSS_STREAM_ISYS_STREAM_0 = 0, - IA_CSS_STREAM_DEFAULT_ISYS_STREAM_IDX = IA_CSS_STREAM_ISYS_STREAM_0, - IA_CSS_STREAM_ISYS_STREAM_1, - IA_CSS_STREAM_MAX_ISYS_STREAM_PER_CH -}; - -/* This is input data configuration for one MIPI data type. We can have - * multiple of this in one virtual channel. - */ -struct ia_css_stream_isys_stream_config { - struct ia_css_resolution input_res; /** Resolution of input data */ - enum atomisp_input_format format; /** Format of input stream. This data - format will be mapped to MIPI data - type internally. */ - int linked_isys_stream_id; /** default value is -1, other value means - current isys_stream shares the same buffer with - indicated isys_stream*/ - bool valid; /** indicate whether other fields have valid value */ -}; - -struct ia_css_stream_input_config { - struct ia_css_resolution input_res; /** Resolution of input data */ - struct ia_css_resolution effective_res; /** Resolution of input data. - Used for CSS 2400/1 System and deprecated for other - systems (replaced by input_effective_res in - ia_css_pipe_config) */ - enum atomisp_input_format format; /** Format of input stream. This data - format will be mapped to MIPI data - type internally. */ - enum ia_css_bayer_order bayer_order; /** Bayer order for RAW streams */ -}; - - -/* Input stream description. This describes how input will flow into the - * CSS. This is used to program the CSS hardware. - */ -struct ia_css_stream_config { - enum ia_css_input_mode mode; /** Input mode */ - union { - struct ia_css_input_port port; /** Port, for sensor only. */ - struct ia_css_tpg_config tpg; /** TPG configuration */ - struct ia_css_prbs_config prbs; /** PRBS configuration */ - } source; /** Source of input data */ - unsigned int channel_id; /** Channel on which input data - will arrive. Use this field - to specify virtual channel id. - Valid values are: 0, 1, 2, 3 */ - struct ia_css_stream_isys_stream_config isys_config[IA_CSS_STREAM_MAX_ISYS_STREAM_PER_CH]; - struct ia_css_stream_input_config input_config; - -#ifdef ISP2401 - /* Currently, Android and Windows platforms interpret the binning_factor parameter - * differently. In Android, the binning factor is expressed in the form - * 2^N * 2^N, whereas in Windows platform, the binning factor is N*N - * To use the Windows method of specification, the caller has to define - * macro USE_WINDOWS_BINNING_FACTOR. This is for backward compatibility only - * and will be deprecated. In the future,all platforms will use the N*N method - */ -#endif - unsigned int sensor_binning_factor; /** Binning factor used by sensor - to produce image data. This is - used for shading correction. */ - unsigned int pixels_per_clock; /** Number of pixels per clock, which can be - 1, 2 or 4. */ - bool online; /** offline will activate RAW copy on SP, use this for - continuous capture. */ - /* ISYS2401 usage: ISP receives data directly from sensor, no copy. */ - unsigned init_num_cont_raw_buf; /** initial number of raw buffers to - allocate */ - unsigned target_num_cont_raw_buf; /** total number of raw buffers to - allocate */ - bool pack_raw_pixels; /** Pack pixels in the raw buffers */ - bool continuous; /** Use SP copy feature to continuously capture frames - to system memory and run pipes in offline mode */ - bool disable_cont_viewfinder; /** disable continous viewfinder for ZSL use case */ - int32_t flash_gpio_pin; /** pin on which the flash is connected, -1 for no flash */ - int left_padding; /** The number of input-formatter left-paddings, -1 for default from binary.*/ - struct ia_css_mipi_buffer_config mipi_buffer_config; /** mipi buffer configuration */ - struct ia_css_metadata_config metadata_config; /** Metadata configuration. */ - bool ia_css_enable_raw_buffer_locking; /** Enable Raw Buffer Locking for HALv3 Support */ - bool lock_all; - /** Lock all RAW buffers (true) or lock only buffers processed by - video or preview pipe (false). - This setting needs to be enabled to allow raw buffer locking - without continuous viewfinder. */ -}; - -struct ia_css_stream; - -/* Stream info, this struct describes properties of a stream after it has been - * created. - */ -struct ia_css_stream_info { - struct ia_css_metadata_info metadata_info; - /** Info about the metadata layout, this contains the stride. */ -}; - -/* @brief Load default stream configuration - * @param[in,out] stream_config The stream configuration. - * @return None - * - * This function will reset the stream configuration to the default state: -@code - memset(stream_config, 0, sizeof(*stream_config)); - stream_config->online = true; - stream_config->left_padding = -1; -@endcode - */ -void ia_css_stream_config_defaults(struct ia_css_stream_config *stream_config); - -/* - * create the internal structures and fill in the configuration data and pipes - */ - - /* @brief Creates a stream - * @param[in] stream_config The stream configuration. - * @param[in] num_pipes The number of pipes to incorporate in the stream. - * @param[in] pipes The pipes. - * @param[out] stream The stream. - * @return IA_CSS_SUCCESS or the error code. - * - * This function will create a stream with a given configuration and given pipes. - */ -enum ia_css_err -ia_css_stream_create(const struct ia_css_stream_config *stream_config, - int num_pipes, - struct ia_css_pipe *pipes[], - struct ia_css_stream **stream); - -/* @brief Destroys a stream - * @param[in] stream The stream. - * @return IA_CSS_SUCCESS or the error code. - * - * This function will destroy a given stream. - */ -enum ia_css_err -ia_css_stream_destroy(struct ia_css_stream *stream); - -/* @brief Provides information about a stream - * @param[in] stream The stream. - * @param[out] stream_info The information about the stream. - * @return IA_CSS_SUCCESS or the error code. - * - * This function will destroy a given stream. - */ -enum ia_css_err -ia_css_stream_get_info(const struct ia_css_stream *stream, - struct ia_css_stream_info *stream_info); - -/* @brief load (rebuild) a stream that was unloaded. - * @param[in] stream The stream - * @return IA_CSS_SUCCESS or the error code - * - * Rebuild a stream, including allocating structs, setting configuration and - * building the required pipes. - */ -enum ia_css_err -ia_css_stream_load(struct ia_css_stream *stream); - -/* @brief Starts the stream. - * @param[in] stream The stream. - * @return IA_CSS_SUCCESS or the error code. - * - * The dynamic data in - * the buffers are not used and need to be queued with a separate call - * to ia_css_pipe_enqueue_buffer. - * NOTE: this function will only send start event to corresponding - * thread and will not start SP any more. - */ -enum ia_css_err -ia_css_stream_start(struct ia_css_stream *stream); - -/* @brief Stop the stream. - * @param[in] stream The stream. - * @return IA_CSS_SUCCESS or the error code. - * - * NOTE: this function will send stop event to pipes belong to this - * stream but will not terminate threads. - */ -enum ia_css_err -ia_css_stream_stop(struct ia_css_stream *stream); - -/* @brief Check if a stream has stopped - * @param[in] stream The stream. - * @return boolean flag - * - * This function will check if the stream has stopped and return the correspondent boolean flag. - */ -bool -ia_css_stream_has_stopped(struct ia_css_stream *stream); - -/* @brief destroy a stream according to the stream seed previosly saved in the seed array. - * @param[in] stream The stream. - * @return IA_CSS_SUCCESS (no other errors are generated now) - * - * Destroy the stream and all the pipes related to it. - */ -enum ia_css_err -ia_css_stream_unload(struct ia_css_stream *stream); - -/* @brief Returns stream format - * @param[in] stream The stream. - * @return format of the string - * - * This function will return the stream format. - */ -enum atomisp_input_format -ia_css_stream_get_format(const struct ia_css_stream *stream); - -/* @brief Check if the stream is configured for 2 pixels per clock - * @param[in] stream The stream. - * @return boolean flag - * - * This function will check if the stream is configured for 2 pixels per clock and - * return the correspondent boolean flag. - */ -bool -ia_css_stream_get_two_pixels_per_clock(const struct ia_css_stream *stream); - -/* @brief Sets the output frame stride (at the last pipe) - * @param[in] stream The stream - * @param[in] output_padded_width - the output buffer stride. - * @return ia_css_err - * - * This function will Set the output frame stride (at the last pipe) - */ -enum ia_css_err -ia_css_stream_set_output_padded_width(struct ia_css_stream *stream, unsigned int output_padded_width); - -/* @brief Return max number of continuous RAW frames. - * @param[in] stream The stream. - * @param[out] buffer_depth The maximum number of continuous RAW frames. - * @return IA_CSS_SUCCESS or IA_CSS_ERR_INVALID_ARGUMENTS - * - * This function will return the maximum number of continuous RAW frames - * the system can support. - */ -enum ia_css_err -ia_css_stream_get_max_buffer_depth(struct ia_css_stream *stream, int *buffer_depth); - -/* @brief Set nr of continuous RAW frames to use. - * - * @param[in] stream The stream. - * @param[in] buffer_depth Number of frames to set. - * @return IA_CSS_SUCCESS or error code upon error. - * - * Set the number of continuous frames to use during continuous modes. - */ -enum ia_css_err -ia_css_stream_set_buffer_depth(struct ia_css_stream *stream, int buffer_depth); - -/* @brief Get number of continuous RAW frames to use. - * @param[in] stream The stream. - * @param[out] buffer_depth The number of frames to use - * @return IA_CSS_SUCCESS or IA_CSS_ERR_INVALID_ARGUMENTS - * - * Get the currently set number of continuous frames - * to use during continuous modes. - */ -enum ia_css_err -ia_css_stream_get_buffer_depth(struct ia_css_stream *stream, int *buffer_depth); - -/* ===== CAPTURE ===== */ - -/* @brief Configure the continuous capture - * - * @param[in] stream The stream. - * @param[in] num_captures The number of RAW frames to be processed to - * YUV. Setting this to -1 will make continuous - * capture run until it is stopped. - * This number will also be used to allocate RAW - * buffers. To allow the viewfinder to also - * keep operating, 2 extra buffers will always be - * allocated. - * If the offset is negative and the skip setting - * is greater than 0, additional buffers may be - * needed. - * @param[in] skip Skip N frames in between captures. This can be - * used to select a slower capture frame rate than - * the sensor output frame rate. - * @param[in] offset Start the RAW-to-YUV processing at RAW buffer - * with this offset. This allows the user to - * process RAW frames that were captured in the - * past or future. - * @return IA_CSS_SUCCESS or error code upon error. - * - * For example, to capture the current frame plus the 2 previous - * frames and 2 subsequent frames, you would call - * ia_css_stream_capture(5, 0, -2). - */ -enum ia_css_err -ia_css_stream_capture(struct ia_css_stream *stream, - int num_captures, - unsigned int skip, - int offset); - -/* @brief Specify which raw frame to tag based on exp_id found in frame info - * - * @param[in] stream The stream. - * @param[in] exp_id The exposure id of the raw frame to tag. - * - * @return IA_CSS_SUCCESS or error code upon error. - * - * This function allows the user to tag a raw frame based on the exposure id - * found in the viewfinder frames' frame info. - */ -enum ia_css_err -ia_css_stream_capture_frame(struct ia_css_stream *stream, - unsigned int exp_id); - -/* ===== VIDEO ===== */ - -/* @brief Send streaming data into the css input FIFO - * - * @param[in] stream The stream. - * @param[in] data Pointer to the pixels to be send. - * @param[in] width Width of the input frame. - * @param[in] height Height of the input frame. - * @return None - * - * Send streaming data into the css input FIFO. This is for testing purposes - * only. This uses the channel ID and input format as set by the user with - * the regular functions for this. - * This function blocks until the entire frame has been written into the - * input FIFO. - * - * Note: - * For higher flexibility the ia_css_stream_send_input_frame is replaced by - * three separate functions: - * 1) ia_css_stream_start_input_frame - * 2) ia_css_stream_send_input_line - * 3) ia_css_stream_end_input_frame - * In this way it is possible to stream multiple frames on different - * channel ID's on a line basis. It will be possible to simulate - * line-interleaved Stereo 3D muxed on 1 mipi port. - * These 3 functions are for testing purpose only and can be used in - * conjunction with ia_css_stream_send_input_frame - */ -void -ia_css_stream_send_input_frame(const struct ia_css_stream *stream, - const unsigned short *data, - unsigned int width, - unsigned int height); - -/* @brief Start an input frame on the CSS input FIFO. - * - * @param[in] stream The stream. - * @return None - * - * Starts the streaming to mipi frame by sending SoF for channel channel_id. - * It will use the input_format and two_pixels_per_clock as provided by - * the user. - * For the "correct" use-case, input_format and two_pixels_per_clock must match - * with the values as set by the user with the regular functions. - * To simulate an error, the user can provide "incorrect" values for - * input_format and/or two_pixels_per_clock. - */ -void -ia_css_stream_start_input_frame(const struct ia_css_stream *stream); - -/* @brief Send a line of input data into the CSS input FIFO. - * - * @param[in] stream The stream. - * @param[in] data Array of the first line of image data. - * @param width The width (in pixels) of the first line. - * @param[in] data2 Array of the second line of image data. - * @param width2 The width (in pixels) of the second line. - * @return None - * - * Sends 1 frame line. Start with SoL followed by width bytes of data, followed - * by width2 bytes of data2 and followed by and EoL - * It will use the input_format and two_pixels_per_clock settings as provided - * with the ia_css_stream_start_input_frame function call. - * - * This function blocks until the entire line has been written into the - * input FIFO. - */ -void -ia_css_stream_send_input_line(const struct ia_css_stream *stream, - const unsigned short *data, - unsigned int width, - const unsigned short *data2, - unsigned int width2); - -/* @brief Send a line of input embedded data into the CSS input FIFO. - * - * @param[in] stream Pointer of the stream. - * @param[in] format Format of the embedded data. - * @param[in] data Pointer of the embedded data line. - * @param[in] width The width (in pixels) of the line. - * @return None - * - * Sends one embedded data line to input fifo. Start with SoL followed by - * width bytes of data, and followed by and EoL. - * It will use the two_pixels_per_clock settings as provided with the - * ia_css_stream_start_input_frame function call. - * - * This function blocks until the entire line has been written into the - * input FIFO. - */ -void -ia_css_stream_send_input_embedded_line(const struct ia_css_stream *stream, - enum atomisp_input_format format, - const unsigned short *data, - unsigned int width); - -/* @brief End an input frame on the CSS input FIFO. - * - * @param[in] stream The stream. - * @return None - * - * Send the end-of-frame signal into the CSS input FIFO. - */ -void -ia_css_stream_end_input_frame(const struct ia_css_stream *stream); - -/* @brief send a request flash command to SP - * - * @param[in] stream The stream. - * @return None - * - * Driver needs to call this function to send a flash request command - * to SP, SP will be responsible for switching on/off the flash at proper - * time. Due to the SP multi-threading environment, this request may have - * one-frame delay, the driver needs to check the flashed flag in frame info - * to determine which frame is being flashed. - */ -void -ia_css_stream_request_flash(struct ia_css_stream *stream); - -/* @brief Configure a stream with filter coefficients. - * @deprecated {Replaced by - * ia_css_pipe_set_isp_config_on_pipe()} - * - * @param[in] stream The stream. - * @param[in] config The set of filter coefficients. - * @param[in] pipe Pipe to be updated when set isp config, NULL means to - * update all pipes in the stream. - * @return IA_CSS_SUCCESS or error code upon error. - * - * This function configures the filter coefficients for an image - * stream. For image pipes that do not execute any ISP filters, this - * function will have no effect. - * It is safe to call this function while the image stream is running, - * in fact this is the expected behavior most of the time. Proper - * resource locking and double buffering is in place to allow for this. - */ -enum ia_css_err -ia_css_stream_set_isp_config_on_pipe(struct ia_css_stream *stream, - const struct ia_css_isp_config *config, - struct ia_css_pipe *pipe); - -/* @brief Configure a stream with filter coefficients. - * @deprecated {Replaced by - * ia_css_pipe_set_isp_config()} - * @param[in] stream The stream. - * @param[in] config The set of filter coefficients. - * @return IA_CSS_SUCCESS or error code upon error. - * - * This function configures the filter coefficients for an image - * stream. For image pipes that do not execute any ISP filters, this - * function will have no effect. All pipes of a stream will be updated. - * See ::ia_css_stream_set_isp_config_on_pipe() for the per-pipe alternative. - * It is safe to call this function while the image stream is running, - * in fact this is the expected behaviour most of the time. Proper - * resource locking and double buffering is in place to allow for this. - */ -enum ia_css_err -ia_css_stream_set_isp_config( - struct ia_css_stream *stream, - const struct ia_css_isp_config *config); - -/* @brief Get selected configuration settings - * @param[in] stream The stream. - * @param[out] config Configuration settings. - * @return None - */ -void -ia_css_stream_get_isp_config(const struct ia_css_stream *stream, - struct ia_css_isp_config *config); - -/* @brief allocate continuous raw frames for continuous capture - * @param[in] stream The stream. - * @return IA_CSS_SUCCESS or error code. - * - * because this allocation takes a long time (around 120ms per frame), - * we separate the allocation part and update part to let driver call - * this function without locking. This function is the allocation part - * and next one is update part - */ -enum ia_css_err -ia_css_alloc_continuous_frame_remain(struct ia_css_stream *stream); - -/* @brief allocate continuous raw frames for continuous capture - * @param[in] stream The stream. - * @return IA_CSS_SUCCESS or error code. - * - * because this allocation takes a long time (around 120ms per frame), - * we separate the allocation part and update part to let driver call - * this function without locking. This function is the update part - */ -enum ia_css_err -ia_css_update_continuous_frames(struct ia_css_stream *stream); - -/* @brief ia_css_unlock_raw_frame . unlock a raw frame (HALv3 Support) - * @param[in] stream The stream. - * @param[in] exp_id exposure id that uniquely identifies the locked Raw Frame Buffer - * @return ia_css_err IA_CSS_SUCCESS or error code - * - * As part of HALv3 Feature requirement, SP locks raw buffer until the Application - * releases its reference to a raw buffer (which are managed by SP), this function allows - * application to explicitly unlock that buffer in SP. - */ -enum ia_css_err -ia_css_unlock_raw_frame(struct ia_css_stream *stream, uint32_t exp_id); - -/* @brief ia_css_en_dz_capt_pipe . Enable/Disable digital zoom for capture pipe - * @param[in] stream The stream. - * @param[in] enable - true, disable - false - * @return None - * - * Enables or disables digital zoom for capture pipe in provided stream, if capture pipe - * exists. This function sets enable_zoom flag in CAPTURE_PP stage of the capture pipe. - * In process_zoom_and_motion(), decision to enable or disable zoom for every stage depends - * on this flag. - */ -void -ia_css_en_dz_capt_pipe(struct ia_css_stream *stream, bool enable); -#endif /* __IA_CSS_STREAM_PUBLIC_H */ |