blob: c2ec30b4abd41dbdd0319d6c245befe0c5c82894 [file] [log] [blame]
/* 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_SDIS_COMMON_TYPES_H
#define __IA_CSS_SDIS_COMMON_TYPES_H
/* @file
* CSS-API header file for DVS statistics parameters.
*/
#include <type_support.h>
/* DVS statistics grid dimensions in number of cells.
*/
struct ia_css_dvs_grid_dim {
u32 width; /** Width of DVS grid table in cells */
u32 height; /** Height of DVS grid table in cells */
};
/* DVS statistics dimensions in number of cells for
* grid, coeffieicient and projection.
*/
struct ia_css_sdis_info {
struct {
struct ia_css_dvs_grid_dim dim; /* Dimensions */
struct ia_css_dvs_grid_dim pad; /* Padded dimensions */
} grid, coef, proj;
u32 deci_factor_log2;
};
/* DVS statistics grid
*
* ISP block: SDVS1 (DIS/DVS Support for DIS/DVS ver.1 (2-axes))
* SDVS2 (DVS Support for DVS ver.2 (6-axes))
* ISP1: SDVS1 is used.
* ISP2: SDVS2 is used.
*/
struct ia_css_dvs_grid_res {
u32 width; /** Width of DVS grid table.
(= Horizontal number of grid cells
in table, which cells have effective
statistics.)
For DVS1, this is equal to
the number of vertical statistics. */
u32 aligned_width; /** Stride of each grid line.
(= Horizontal number of grid cells
in table, which means
the allocated width.) */
u32 height; /** Height of DVS grid table.
(= Vertical number of grid cells
in table, which cells have effective
statistics.)
For DVS1, This is equal to
the number of horizontal statistics. */
u32 aligned_height;/** Stride of each grid column.
(= Vertical number of grid cells
in table, which means
the allocated height.) */
};
/* TODO: use ia_css_dvs_grid_res in here.
* However, that implies driver I/F changes
*/
struct ia_css_dvs_grid_info {
u32 enable; /** DVS statistics enabled.
0:disabled, 1:enabled */
u32 width; /** Width of DVS grid table.
(= Horizontal number of grid cells
in table, which cells have effective
statistics.)
For DVS1, this is equal to
the number of vertical statistics. */
u32 aligned_width; /** Stride of each grid line.
(= Horizontal number of grid cells
in table, which means
the allocated width.) */
u32 height; /** Height of DVS grid table.
(= Vertical number of grid cells
in table, which cells have effective
statistics.)
For DVS1, This is equal to
the number of horizontal statistics. */
u32 aligned_height;/** Stride of each grid column.
(= Vertical number of grid cells
in table, which means
the allocated height.) */
u32 bqs_per_grid_cell; /** Grid cell size in BQ(Bayer Quad) unit.
(1BQ means {Gr,R,B,Gb}(2x2 pixels).)
For DVS1, valid value is 64.
For DVS2, valid value is only 64,
currently. */
u32 num_hor_coefs; /** Number of horizontal coefficients. */
u32 num_ver_coefs; /** Number of vertical coefficients. */
};
/* Number of DVS statistics levels
*/
#define IA_CSS_DVS_STAT_NUM_OF_LEVELS 3
/* DVS statistics generated by accelerator global configuration
*/
struct dvs_stat_public_dvs_global_cfg {
unsigned char kappa;
/** DVS statistics global configuration - kappa */
unsigned char match_shift;
/** DVS statistics global configuration - match_shift */
unsigned char ybin_mode;
/** DVS statistics global configuration - y binning mode */
};
/* DVS statistics generated by accelerator level grid
* configuration
*/
struct dvs_stat_public_dvs_level_grid_cfg {
unsigned char grid_width;
/** DVS statistics grid width */
unsigned char grid_height;
/** DVS statistics grid height */
unsigned char block_width;
/** DVS statistics block width */
unsigned char block_height;
/** DVS statistics block height */
};
/* DVS statistics generated by accelerator level grid start
* configuration
*/
struct dvs_stat_public_dvs_level_grid_start {
unsigned short x_start;
/** DVS statistics level x start */
unsigned short y_start;
/** DVS statistics level y start */
unsigned char enable;
/** DVS statistics level enable */
};
/* DVS statistics generated by accelerator level grid end
* configuration
*/
struct dvs_stat_public_dvs_level_grid_end {
unsigned short x_end;
/** DVS statistics level x end */
unsigned short y_end;
/** DVS statistics level y end */
};
/* DVS statistics generated by accelerator Feature Extraction
* Region Of Interest (FE-ROI) configuration
*/
struct dvs_stat_public_dvs_level_fe_roi_cfg {
unsigned char x_start;
/** DVS statistics fe-roi level x start */
unsigned char y_start;
/** DVS statistics fe-roi level y start */
unsigned char x_end;
/** DVS statistics fe-roi level x end */
unsigned char y_end;
/** DVS statistics fe-roi level y end */
};
/* DVS statistics generated by accelerator public configuration
*/
struct dvs_stat_public_dvs_grd_cfg {
struct dvs_stat_public_dvs_level_grid_cfg grd_cfg;
/** DVS statistics level grid configuration */
struct dvs_stat_public_dvs_level_grid_start grd_start;
/** DVS statistics level grid start configuration */
struct dvs_stat_public_dvs_level_grid_end grd_end;
/** DVS statistics level grid end configuration */
};
/* DVS statistics grid generated by accelerator
*/
struct ia_css_dvs_stat_grid_info {
struct dvs_stat_public_dvs_global_cfg dvs_gbl_cfg;
/** DVS statistics global configuration (kappa, match, binning) */
struct dvs_stat_public_dvs_grd_cfg grd_cfg[IA_CSS_DVS_STAT_NUM_OF_LEVELS];
/** DVS statistics grid configuration (blocks and grids) */
struct dvs_stat_public_dvs_level_fe_roi_cfg
fe_roi_cfg[IA_CSS_DVS_STAT_NUM_OF_LEVELS];
/** DVS statistics FE ROI (region of interest) configuration */
};
/* DVS statistics generated by accelerator default grid info
*/
#define DEFAULT_DVS_GRID_INFO { \
.dvs_stat_grid_info = { \
.fe_roi_cfg = { \
[1] = { \
.x_start = 4 \
} \
} \
} \
}
/* Union that holds all types of DVS statistics grid info in
* CSS format
* */
union ia_css_dvs_grid_u {
struct ia_css_dvs_stat_grid_info dvs_stat_grid_info;
/** DVS statistics produced by accelerator grid info */
struct ia_css_dvs_grid_info dvs_grid_info;
/** DVS (DVS1/DVS2) grid info */
};
#endif /* __IA_CSS_SDIS_COMMON_TYPES_H */