/* 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 __IA_CSS_DVS_H
|
#define __IA_CSS_DVS_H
|
|
/* @file
|
* This file contains types for DVS statistics
|
*/
|
|
#include <type_support.h>
|
#include "ia_css_types.h"
|
#include "ia_css_err.h"
|
#include "ia_css_stream_public.h"
|
|
enum dvs_statistics_type {
|
DVS_STATISTICS,
|
DVS2_STATISTICS,
|
SKC_DVS_STATISTICS
|
};
|
|
/* Structure that holds DVS statistics in the ISP internal
|
* format. Use ia_css_get_dvs_statistics() to translate
|
* this to the format used on the host (DVS engine).
|
* */
|
struct ia_css_isp_dvs_statistics {
|
ia_css_ptr hor_proj;
|
ia_css_ptr ver_proj;
|
u32 hor_size;
|
u32 ver_size;
|
u32 exp_id; /** see ia_css_event_public.h for more detail */
|
ia_css_ptr data_ptr; /* base pointer containing all memory */
|
u32 size; /* size of allocated memory in data_ptr */
|
};
|
|
/* Structure that holds SKC DVS statistics in the ISP internal
|
* format. Use ia_css_dvs_statistics_get() to translate this to
|
* the format used on the host.
|
* */
|
struct ia_css_isp_skc_dvs_statistics;
|
|
#define SIZE_OF_IA_CSS_ISP_DVS_STATISTICS_STRUCT \
|
((3 * SIZE_OF_IA_CSS_PTR) + \
|
(4 * sizeof(uint32_t)))
|
|
/* Map with host-side pointers to ISP-format statistics.
|
* These pointers can either be copies of ISP data or memory mapped
|
* ISP pointers.
|
* All of the data behind these pointers is allocatd contiguously, the
|
* allocated pointer is stored in the data_ptr field. The other fields
|
* point into this one block of data.
|
*/
|
struct ia_css_isp_dvs_statistics_map {
|
void *data_ptr;
|
s32 *hor_proj;
|
s32 *ver_proj;
|
u32 size; /* total size in bytes */
|
u32 data_allocated; /* indicate whether data was allocated */
|
};
|
|
union ia_css_dvs_statistics_isp {
|
struct ia_css_isp_dvs_statistics *p_dvs_statistics_isp;
|
struct ia_css_isp_skc_dvs_statistics *p_skc_dvs_statistics_isp;
|
};
|
|
union ia_css_dvs_statistics_host {
|
struct ia_css_dvs_statistics *p_dvs_statistics_host;
|
struct ia_css_dvs2_statistics *p_dvs2_statistics_host;
|
struct ia_css_skc_dvs_statistics *p_skc_dvs_statistics_host;
|
};
|
|
/* @brief Copy DVS statistics from an ISP buffer to a host buffer.
|
* @param[in] host_stats Host buffer
|
* @param[in] isp_stats ISP buffer
|
* @return error value if temporary memory cannot be allocated
|
*
|
* This may include a translation step as well depending
|
* on the ISP version.
|
* Always use this function, never copy the buffer directly.
|
* Note that this function uses the mem_load function from the CSS
|
* environment struct.
|
* In certain environments this may be slow. In those cases it is
|
* advised to map the ISP memory into a host-side pointer and use
|
* the ia_css_translate_dvs_statistics() function instead.
|
*/
|
int
|
ia_css_get_dvs_statistics(struct ia_css_dvs_statistics *host_stats,
|
const struct ia_css_isp_dvs_statistics *isp_stats);
|
|
/* @brief Translate DVS statistics from ISP format to host format
|
* @param[in] host_stats Host buffer
|
* @param[in] isp_stats ISP buffer
|
* @return None
|
*
|
* This function translates the dvs statistics from the ISP-internal
|
* format to the format used by the DVS library on the CPU.
|
* This function takes a host-side pointer as input. This can either
|
* point to a copy of the data or be a memory mapped pointer to the
|
* ISP memory pages.
|
*/
|
void
|
ia_css_translate_dvs_statistics(
|
struct ia_css_dvs_statistics *host_stats,
|
const struct ia_css_isp_dvs_statistics_map *isp_stats);
|
|
/* @brief Copy DVS 2.0 statistics from an ISP buffer to a host buffer.
|
* @param[in] host_stats Host buffer
|
* @param[in] isp_stats ISP buffer
|
* @return error value if temporary memory cannot be allocated
|
*
|
* This may include a translation step as well depending
|
* on the ISP version.
|
* Always use this function, never copy the buffer directly.
|
* Note that this function uses the mem_load function from the CSS
|
* environment struct.
|
* In certain environments this may be slow. In those cases it is
|
* advised to map the ISP memory into a host-side pointer and use
|
* the ia_css_translate_dvs2_statistics() function instead.
|
*/
|
int
|
ia_css_get_dvs2_statistics(struct ia_css_dvs2_statistics *host_stats,
|
const struct ia_css_isp_dvs_statistics *isp_stats);
|
|
/* @brief Translate DVS2 statistics from ISP format to host format
|
* @param[in] host_stats Host buffer
|
* @param[in] isp_stats ISP buffer
|
* @return None
|
*
|
* This function translates the dvs2 statistics from the ISP-internal
|
* format to the format used by the DVS2 library on the CPU.
|
* This function takes a host-side pointer as input. This can either
|
* point to a copy of the data or be a memory mapped pointer to the
|
* ISP memory pages.
|
*/
|
void
|
ia_css_translate_dvs2_statistics(
|
struct ia_css_dvs2_statistics *host_stats,
|
const struct ia_css_isp_dvs_statistics_map *isp_stats);
|
|
/* @brief Copy DVS statistics from an ISP buffer to a host buffer.
|
* @param[in] type - DVS statistics type
|
* @param[in] host_stats Host buffer
|
* @param[in] isp_stats ISP buffer
|
* @return None
|
*/
|
void
|
ia_css_dvs_statistics_get(enum dvs_statistics_type type,
|
union ia_css_dvs_statistics_host *host_stats,
|
const union ia_css_dvs_statistics_isp *isp_stats);
|
|
/* @brief Allocate the DVS statistics memory on the ISP
|
* @param[in] grid The grid.
|
* @return Pointer to the allocated DVS statistics buffer on the ISP
|
*/
|
struct ia_css_isp_dvs_statistics *
|
ia_css_isp_dvs_statistics_allocate(const struct ia_css_dvs_grid_info *grid);
|
|
/* @brief Free the DVS statistics memory on the ISP
|
* @param[in] me Pointer to the DVS statistics buffer on the ISP.
|
* @return None
|
*/
|
void
|
ia_css_isp_dvs_statistics_free(struct ia_css_isp_dvs_statistics *me);
|
|
/* @brief Allocate the DVS 2.0 statistics memory
|
* @param[in] grid The grid.
|
* @return Pointer to the allocated DVS statistics buffer on the ISP
|
*/
|
struct ia_css_isp_dvs_statistics *
|
ia_css_isp_dvs2_statistics_allocate(const struct ia_css_dvs_grid_info *grid);
|
|
/* @brief Free the DVS 2.0 statistics memory
|
* @param[in] me Pointer to the DVS statistics buffer on the ISP.
|
* @return None
|
*/
|
void
|
ia_css_isp_dvs2_statistics_free(struct ia_css_isp_dvs_statistics *me);
|
|
/* @brief Allocate the DVS statistics memory on the host
|
* @param[in] grid The grid.
|
* @return Pointer to the allocated DVS statistics buffer on the host
|
*/
|
struct ia_css_dvs_statistics *
|
ia_css_dvs_statistics_allocate(const struct ia_css_dvs_grid_info *grid);
|
|
/* @brief Free the DVS statistics memory on the host
|
* @param[in] me Pointer to the DVS statistics buffer on the host.
|
* @return None
|
*/
|
void
|
ia_css_dvs_statistics_free(struct ia_css_dvs_statistics *me);
|
|
/* @brief Allocate the DVS coefficients memory
|
* @param[in] grid The grid.
|
* @return Pointer to the allocated DVS coefficients buffer
|
*/
|
struct ia_css_dvs_coefficients *
|
ia_css_dvs_coefficients_allocate(const struct ia_css_dvs_grid_info *grid);
|
|
/* @brief Free the DVS coefficients memory
|
* @param[in] me Pointer to the DVS coefficients buffer.
|
* @return None
|
*/
|
void
|
ia_css_dvs_coefficients_free(struct ia_css_dvs_coefficients *me);
|
|
/* @brief Allocate the DVS 2.0 statistics memory on the host
|
* @param[in] grid The grid.
|
* @return Pointer to the allocated DVS 2.0 statistics buffer on the host
|
*/
|
struct ia_css_dvs2_statistics *
|
ia_css_dvs2_statistics_allocate(const struct ia_css_dvs_grid_info *grid);
|
|
/* @brief Free the DVS 2.0 statistics memory
|
* @param[in] me Pointer to the DVS 2.0 statistics buffer on the host.
|
* @return None
|
*/
|
void
|
ia_css_dvs2_statistics_free(struct ia_css_dvs2_statistics *me);
|
|
/* @brief Allocate the DVS 2.0 coefficients memory
|
* @param[in] grid The grid.
|
* @return Pointer to the allocated DVS 2.0 coefficients buffer
|
*/
|
struct ia_css_dvs2_coefficients *
|
ia_css_dvs2_coefficients_allocate(const struct ia_css_dvs_grid_info *grid);
|
|
/* @brief Free the DVS 2.0 coefficients memory
|
* @param[in] me Pointer to the DVS 2.0 coefficients buffer.
|
* @return None
|
*/
|
void
|
ia_css_dvs2_coefficients_free(struct ia_css_dvs2_coefficients *me);
|
|
/* @brief Allocate the DVS 2.0 6-axis config memory
|
* @param[in] stream The stream.
|
* @return Pointer to the allocated DVS 6axis configuration buffer
|
*/
|
struct ia_css_dvs_6axis_config *
|
ia_css_dvs2_6axis_config_allocate(const struct ia_css_stream *stream);
|
|
/* @brief Free the DVS 2.0 6-axis config memory
|
* @param[in] dvs_6axis_config Pointer to the DVS 6axis configuration buffer
|
* @return None
|
*/
|
void
|
ia_css_dvs2_6axis_config_free(struct ia_css_dvs_6axis_config *dvs_6axis_config);
|
|
/* @brief Allocate a dvs statistics map structure
|
* @param[in] isp_stats pointer to ISP dvs statistis struct
|
* @param[in] data_ptr host-side pointer to ISP dvs statistics.
|
* @return Pointer to the allocated dvs statistics map
|
*
|
* This function allocates the ISP dvs statistics map structure
|
* and uses the data_ptr as base pointer to set the appropriate
|
* pointers to all relevant subsets of the dvs statistics (dmem,
|
* vmem, hmem).
|
* If the data_ptr is NULL, this function will allocate the host-side
|
* memory. This information is stored in the struct and used in the
|
* ia_css_isp_dvs_statistics_map_free() function to determine whether
|
* the memory should be freed or not.
|
* Note that this function does not allocate or map any ISP
|
* memory.
|
*/
|
struct ia_css_isp_dvs_statistics_map *
|
ia_css_isp_dvs_statistics_map_allocate(
|
const struct ia_css_isp_dvs_statistics *isp_stats,
|
void *data_ptr);
|
|
/* @brief Free the dvs statistics map
|
* @param[in] me Pointer to the dvs statistics map
|
* @return None
|
*
|
* This function frees the map struct. If the data_ptr inside it
|
* was allocated inside ia_css_isp_dvs_statistics_map_allocate(), it
|
* will be freed in this function. Otherwise it will not be freed.
|
*/
|
void
|
ia_css_isp_dvs_statistics_map_free(struct ia_css_isp_dvs_statistics_map *me);
|
|
/* @brief Allocate memory for the SKC DVS statistics on the ISP
|
* @return Pointer to the allocated ACC DVS statistics buffer on the ISP
|
*/
|
struct ia_css_isp_skc_dvs_statistics *ia_css_skc_dvs_statistics_allocate(void);
|
|
#endif /* __IA_CSS_DVS_H */
|