cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

isif.h (14245B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Copyright (C) 2008-2009 Texas Instruments Inc
      4 *
      5 * isif header file
      6 */
      7#ifndef _ISIF_H
      8#define _ISIF_H
      9
     10#include <media/davinci/ccdc_types.h>
     11#include <media/davinci/vpfe_types.h>
     12
     13/* isif float type S8Q8/U8Q8 */
     14struct isif_float_8 {
     15	/* 8 bit integer part */
     16	__u8 integer;
     17	/* 8 bit decimal part */
     18	__u8 decimal;
     19};
     20
     21/* isif float type U16Q16/S16Q16 */
     22struct isif_float_16 {
     23	/* 16 bit integer part */
     24	__u16 integer;
     25	/* 16 bit decimal part */
     26	__u16 decimal;
     27};
     28
     29/************************************************************************
     30 *   Vertical Defect Correction parameters
     31 ***********************************************************************/
     32/* Defect Correction (DFC) table entry */
     33struct isif_vdfc_entry {
     34	/* vertical position of defect */
     35	__u16 pos_vert;
     36	/* horizontal position of defect */
     37	__u16 pos_horz;
     38	/*
     39	 * Defect level of Vertical line defect position. This is subtracted
     40	 * from the data at the defect position
     41	 */
     42	__u8 level_at_pos;
     43	/*
     44	 * Defect level of the pixels upper than the vertical line defect.
     45	 * This is subtracted from the data
     46	 */
     47	__u8 level_up_pixels;
     48	/*
     49	 * Defect level of the pixels lower than the vertical line defect.
     50	 * This is subtracted from the data
     51	 */
     52	__u8 level_low_pixels;
     53};
     54
     55#define ISIF_VDFC_TABLE_SIZE		8
     56struct isif_dfc {
     57	/* enable vertical defect correction */
     58	__u8 en;
     59	/* Defect level subtraction. Just fed through if saturating */
     60#define	ISIF_VDFC_NORMAL		0
     61	/*
     62	 * Defect level subtraction. Horizontal interpolation ((i-2)+(i+2))/2
     63	 * if data saturating
     64	 */
     65#define ISIF_VDFC_HORZ_INTERPOL_IF_SAT	1
     66	/* Horizontal interpolation (((i-2)+(i+2))/2) */
     67#define	ISIF_VDFC_HORZ_INTERPOL		2
     68	/* one of the vertical defect correction modes above */
     69	__u8 corr_mode;
     70	/* 0 - whole line corrected, 1 - not pixels upper than the defect */
     71	__u8 corr_whole_line;
     72#define ISIF_VDFC_NO_SHIFT		0
     73#define ISIF_VDFC_SHIFT_1		1
     74#define ISIF_VDFC_SHIFT_2		2
     75#define ISIF_VDFC_SHIFT_3		3
     76#define ISIF_VDFC_SHIFT_4		4
     77	/*
     78	 * defect level shift value. level_at_pos, level_upper_pos,
     79	 * and level_lower_pos can be shifted up by this value. Choose
     80	 * one of the values above
     81	 */
     82	__u8 def_level_shift;
     83	/* defect saturation level */
     84	__u16 def_sat_level;
     85	/* number of vertical defects. Max is ISIF_VDFC_TABLE_SIZE */
     86	__u16 num_vdefects;
     87	/* VDFC table ptr */
     88	struct isif_vdfc_entry table[ISIF_VDFC_TABLE_SIZE];
     89};
     90
     91struct isif_horz_bclamp {
     92
     93	/* Horizontal clamp disabled. Only vertical clamp value is subtracted */
     94#define	ISIF_HORZ_BC_DISABLE		0
     95	/*
     96	 * Horizontal clamp value is calculated and subtracted from image data
     97	 * along with vertical clamp value
     98	 */
     99#define ISIF_HORZ_BC_CLAMP_CALC_ENABLED	1
    100	/*
    101	 * Horizontal clamp value calculated from previous image is subtracted
    102	 * from image data along with vertical clamp value.
    103	 */
    104#define ISIF_HORZ_BC_CLAMP_NOT_UPDATED	2
    105	/* horizontal clamp mode. One of the values above */
    106	__u8 mode;
    107	/*
    108	 * pixel value limit enable.
    109	 *  0 - limit disabled
    110	 *  1 - pixel value limited to 1023
    111	 */
    112	__u8 clamp_pix_limit;
    113	/* Select Most left window for bc calculation */
    114#define	ISIF_SEL_MOST_LEFT_WIN		0
    115	/* Select Most right window for bc calculation */
    116#define ISIF_SEL_MOST_RIGHT_WIN		1
    117	/* Select most left or right window for clamp val calculation */
    118	__u8 base_win_sel_calc;
    119	/* Window count per color for calculation. range 1-32 */
    120	__u8 win_count_calc;
    121	/* Window start position - horizontal for calculation. 0 - 8191 */
    122	__u16 win_start_h_calc;
    123	/* Window start position - vertical for calculation 0 - 8191 */
    124	__u16 win_start_v_calc;
    125#define ISIF_HORZ_BC_SZ_H_2PIXELS	0
    126#define ISIF_HORZ_BC_SZ_H_4PIXELS	1
    127#define ISIF_HORZ_BC_SZ_H_8PIXELS	2
    128#define ISIF_HORZ_BC_SZ_H_16PIXELS	3
    129	/* Width of the sample window in pixels for calculation */
    130	__u8 win_h_sz_calc;
    131#define ISIF_HORZ_BC_SZ_V_32PIXELS	0
    132#define ISIF_HORZ_BC_SZ_V_64PIXELS	1
    133#define	ISIF_HORZ_BC_SZ_V_128PIXELS	2
    134#define ISIF_HORZ_BC_SZ_V_256PIXELS	3
    135	/* Height of the sample window in pixels for calculation */
    136	__u8 win_v_sz_calc;
    137};
    138
    139/************************************************************************
    140 *  Black Clamp parameters
    141 ***********************************************************************/
    142struct isif_vert_bclamp {
    143	/* Reset value used is the clamp value calculated */
    144#define	ISIF_VERT_BC_USE_HORZ_CLAMP_VAL		0
    145	/* Reset value used is reset_clamp_val configured */
    146#define	ISIF_VERT_BC_USE_CONFIG_CLAMP_VAL	1
    147	/* No update, previous image value is used */
    148#define	ISIF_VERT_BC_NO_UPDATE			2
    149	/*
    150	 * Reset value selector for vertical clamp calculation. Use one of
    151	 * the above values
    152	 */
    153	__u8 reset_val_sel;
    154	/* U8Q8. Line average coefficient used in vertical clamp calculation */
    155	__u8 line_ave_coef;
    156	/* Height of the optical black region for calculation */
    157	__u16 ob_v_sz_calc;
    158	/* Optical black region start position - horizontal. 0 - 8191 */
    159	__u16 ob_start_h;
    160	/* Optical black region start position - vertical 0 - 8191 */
    161	__u16 ob_start_v;
    162};
    163
    164struct isif_black_clamp {
    165	/*
    166	 * This offset value is added irrespective of the clamp enable status.
    167	 * S13
    168	 */
    169	__u16 dc_offset;
    170	/*
    171	 * Enable black/digital clamp value to be subtracted from the image data
    172	 */
    173	__u8 en;
    174	/*
    175	 * black clamp mode. same/separate clamp for 4 colors
    176	 * 0 - disable - same clamp value for all colors
    177	 * 1 - clamp value calculated separately for all colors
    178	 */
    179	__u8 bc_mode_color;
    180	/* Vertical start position for bc subtraction */
    181	__u16 vert_start_sub;
    182	/* Black clamp for horizontal direction */
    183	struct isif_horz_bclamp horz;
    184	/* Black clamp for vertical direction */
    185	struct isif_vert_bclamp vert;
    186};
    187
    188/*************************************************************************
    189** Color Space Conversion (CSC)
    190*************************************************************************/
    191#define ISIF_CSC_NUM_COEFF	16
    192struct isif_color_space_conv {
    193	/* Enable color space conversion */
    194	__u8 en;
    195	/*
    196	 * csc coefficient table. S8Q5, M00 at index 0, M01 at index 1, and
    197	 * so forth
    198	 */
    199	struct isif_float_8 coeff[ISIF_CSC_NUM_COEFF];
    200};
    201
    202
    203/*************************************************************************
    204**  Black  Compensation parameters
    205*************************************************************************/
    206struct isif_black_comp {
    207	/* Comp for Red */
    208	__s8 r_comp;
    209	/* Comp for Gr */
    210	__s8 gr_comp;
    211	/* Comp for Blue */
    212	__s8 b_comp;
    213	/* Comp for Gb */
    214	__s8 gb_comp;
    215};
    216
    217/*************************************************************************
    218**  Gain parameters
    219*************************************************************************/
    220struct isif_gain {
    221	/* Gain for Red or ye */
    222	struct isif_float_16 r_ye;
    223	/* Gain for Gr or cy */
    224	struct isif_float_16 gr_cy;
    225	/* Gain for Gb or g */
    226	struct isif_float_16 gb_g;
    227	/* Gain for Blue or mg */
    228	struct isif_float_16 b_mg;
    229};
    230
    231#define ISIF_LINEAR_TAB_SIZE	192
    232/*************************************************************************
    233**  Linearization parameters
    234*************************************************************************/
    235struct isif_linearize {
    236	/* Enable or Disable linearization of data */
    237	__u8 en;
    238	/* Shift value applied */
    239	__u8 corr_shft;
    240	/* scale factor applied U11Q10 */
    241	struct isif_float_16 scale_fact;
    242	/* Size of the linear table */
    243	__u16 table[ISIF_LINEAR_TAB_SIZE];
    244};
    245
    246/* Color patterns */
    247#define ISIF_RED	0
    248#define	ISIF_GREEN_RED	1
    249#define ISIF_GREEN_BLUE	2
    250#define ISIF_BLUE	3
    251struct isif_col_pat {
    252	__u8 olop;
    253	__u8 olep;
    254	__u8 elop;
    255	__u8 elep;
    256};
    257
    258/*************************************************************************
    259**  Data formatter parameters
    260*************************************************************************/
    261struct isif_fmtplen {
    262	/*
    263	 * number of program entries for SET0, range 1 - 16
    264	 * when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is
    265	 * ISIF_COMBINE
    266	 */
    267	__u16 plen0;
    268	/*
    269	 * number of program entries for SET1, range 1 - 16
    270	 * when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is
    271	 * ISIF_COMBINE
    272	 */
    273	__u16 plen1;
    274	/**
    275	 * number of program entries for SET2, range 1 - 16
    276	 * when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is
    277	 * ISIF_COMBINE
    278	 */
    279	__u16 plen2;
    280	/**
    281	 * number of program entries for SET3, range 1 - 16
    282	 * when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is
    283	 * ISIF_COMBINE
    284	 */
    285	__u16 plen3;
    286};
    287
    288struct isif_fmt_cfg {
    289#define ISIF_SPLIT		0
    290#define ISIF_COMBINE		1
    291	/* Split or combine or line alternate */
    292	__u8 fmtmode;
    293	/* enable or disable line alternating mode */
    294	__u8 ln_alter_en;
    295#define ISIF_1LINE		0
    296#define	ISIF_2LINES		1
    297#define	ISIF_3LINES		2
    298#define	ISIF_4LINES		3
    299	/* Split/combine line number */
    300	__u8 lnum;
    301	/* Address increment Range 1 - 16 */
    302	__u8 addrinc;
    303};
    304
    305struct isif_fmt_addr_ptr {
    306	/* Initial address */
    307	__u32 init_addr;
    308	/* output line number */
    309#define ISIF_1STLINE		0
    310#define	ISIF_2NDLINE		1
    311#define	ISIF_3RDLINE		2
    312#define	ISIF_4THLINE		3
    313	__u8 out_line;
    314};
    315
    316struct isif_fmtpgm_ap {
    317	/* program address pointer */
    318	__u8 pgm_aptr;
    319	/* program address increment or decrement */
    320	__u8 pgmupdt;
    321};
    322
    323struct isif_data_formatter {
    324	/* Enable/Disable data formatter */
    325	__u8 en;
    326	/* data formatter configuration */
    327	struct isif_fmt_cfg cfg;
    328	/* Formatter program entries length */
    329	struct isif_fmtplen plen;
    330	/* first pixel in a line fed to formatter */
    331	__u16 fmtrlen;
    332	/* HD interval for output line. Only valid when split line */
    333	__u16 fmthcnt;
    334	/* formatter address pointers */
    335	struct isif_fmt_addr_ptr fmtaddr_ptr[16];
    336	/* program enable/disable */
    337	__u8 pgm_en[32];
    338	/* program address pointers */
    339	struct isif_fmtpgm_ap fmtpgm_ap[32];
    340};
    341
    342struct isif_df_csc {
    343	/* Color Space Conversion configuration, 0 - csc, 1 - df */
    344	__u8 df_or_csc;
    345	/* csc configuration valid if df_or_csc is 0 */
    346	struct isif_color_space_conv csc;
    347	/* data formatter configuration valid if df_or_csc is 1 */
    348	struct isif_data_formatter df;
    349	/* start pixel in a line at the input */
    350	__u32 start_pix;
    351	/* number of pixels in input line */
    352	__u32 num_pixels;
    353	/* start line at the input */
    354	__u32 start_line;
    355	/* number of lines at the input */
    356	__u32 num_lines;
    357};
    358
    359struct isif_gain_offsets_adj {
    360	/* Gain adjustment per color */
    361	struct isif_gain gain;
    362	/* Offset adjustment */
    363	__u16 offset;
    364	/* Enable or Disable Gain adjustment for SDRAM data */
    365	__u8 gain_sdram_en;
    366	/* Enable or Disable Gain adjustment for IPIPE data */
    367	__u8 gain_ipipe_en;
    368	/* Enable or Disable Gain adjustment for H3A data */
    369	__u8 gain_h3a_en;
    370	/* Enable or Disable Gain adjustment for SDRAM data */
    371	__u8 offset_sdram_en;
    372	/* Enable or Disable Gain adjustment for IPIPE data */
    373	__u8 offset_ipipe_en;
    374	/* Enable or Disable Gain adjustment for H3A data */
    375	__u8 offset_h3a_en;
    376};
    377
    378struct isif_cul {
    379	/* Horizontal Cull pattern for odd lines */
    380	__u8 hcpat_odd;
    381	/* Horizontal Cull pattern for even lines */
    382	__u8 hcpat_even;
    383	/* Vertical Cull pattern */
    384	__u8 vcpat;
    385	/* Enable or disable lpf. Apply when cull is enabled */
    386	__u8 en_lpf;
    387};
    388
    389struct isif_compress {
    390#define ISIF_ALAW		0
    391#define ISIF_DPCM		1
    392#define ISIF_NO_COMPRESSION	2
    393	/* Compression Algorithm used */
    394	__u8 alg;
    395	/* Choose Predictor1 for DPCM compression */
    396#define ISIF_DPCM_PRED1		0
    397	/* Choose Predictor2 for DPCM compression */
    398#define ISIF_DPCM_PRED2		1
    399	/* Predictor for DPCM compression */
    400	__u8 pred;
    401};
    402
    403/* all the stuff in this struct will be provided by userland */
    404struct isif_config_params_raw {
    405	/* Linearization parameters for image sensor data input */
    406	struct isif_linearize linearize;
    407	/* Data formatter or CSC */
    408	struct isif_df_csc df_csc;
    409	/* Defect Pixel Correction (DFC) configuration */
    410	struct isif_dfc dfc;
    411	/* Black/Digital Clamp configuration */
    412	struct isif_black_clamp bclamp;
    413	/* Gain, offset adjustments */
    414	struct isif_gain_offsets_adj gain_offset;
    415	/* Culling */
    416	struct isif_cul culling;
    417	/* A-Law and DPCM compression options */
    418	struct isif_compress compress;
    419	/* horizontal offset for Gain/LSC/DFC */
    420	__u16 horz_offset;
    421	/* vertical offset for Gain/LSC/DFC */
    422	__u16 vert_offset;
    423	/* color pattern for field 0 */
    424	struct isif_col_pat col_pat_field0;
    425	/* color pattern for field 1 */
    426	struct isif_col_pat col_pat_field1;
    427#define ISIF_NO_SHIFT		0
    428#define	ISIF_1BIT_SHIFT		1
    429#define	ISIF_2BIT_SHIFT		2
    430#define	ISIF_3BIT_SHIFT		3
    431#define	ISIF_4BIT_SHIFT		4
    432#define ISIF_5BIT_SHIFT		5
    433#define ISIF_6BIT_SHIFT		6
    434	/* Data shift applied before storing to SDRAM */
    435	__u8 data_shift;
    436	/* enable input test pattern generation */
    437	__u8 test_pat_gen;
    438};
    439
    440#ifdef __KERNEL__
    441struct isif_ycbcr_config {
    442	/* isif pixel format */
    443	enum ccdc_pixfmt pix_fmt;
    444	/* isif frame format */
    445	enum ccdc_frmfmt frm_fmt;
    446	/* ISIF crop window */
    447	struct v4l2_rect win;
    448	/* field polarity */
    449	enum vpfe_pin_pol fid_pol;
    450	/* interface VD polarity */
    451	enum vpfe_pin_pol vd_pol;
    452	/* interface HD polarity */
    453	enum vpfe_pin_pol hd_pol;
    454	/* isif pix order. Only used for ycbcr capture */
    455	enum ccdc_pixorder pix_order;
    456	/* isif buffer type. Only used for ycbcr capture */
    457	enum ccdc_buftype buf_type;
    458};
    459
    460/* MSB of image data connected to sensor port */
    461enum isif_data_msb {
    462	ISIF_BIT_MSB_15,
    463	ISIF_BIT_MSB_14,
    464	ISIF_BIT_MSB_13,
    465	ISIF_BIT_MSB_12,
    466	ISIF_BIT_MSB_11,
    467	ISIF_BIT_MSB_10,
    468	ISIF_BIT_MSB_9,
    469	ISIF_BIT_MSB_8,
    470	ISIF_BIT_MSB_7
    471};
    472
    473enum isif_cfa_pattern {
    474	ISIF_CFA_PAT_MOSAIC,
    475	ISIF_CFA_PAT_STRIPE
    476};
    477
    478struct isif_params_raw {
    479	/* isif pixel format */
    480	enum ccdc_pixfmt pix_fmt;
    481	/* isif frame format */
    482	enum ccdc_frmfmt frm_fmt;
    483	/* video window */
    484	struct v4l2_rect win;
    485	/* field polarity */
    486	enum vpfe_pin_pol fid_pol;
    487	/* interface VD polarity */
    488	enum vpfe_pin_pol vd_pol;
    489	/* interface HD polarity */
    490	enum vpfe_pin_pol hd_pol;
    491	/* buffer type. Applicable for interlaced mode */
    492	enum ccdc_buftype buf_type;
    493	/* Gain values */
    494	struct isif_gain gain;
    495	/* cfa pattern */
    496	enum isif_cfa_pattern cfa_pat;
    497	/* Data MSB position */
    498	enum isif_data_msb data_msb;
    499	/* Enable horizontal flip */
    500	unsigned char horz_flip_en;
    501	/* Enable image invert vertically */
    502	unsigned char image_invert_en;
    503
    504	/* all the userland defined stuff*/
    505	struct isif_config_params_raw config_params;
    506};
    507
    508enum isif_data_pack {
    509	ISIF_PACK_16BIT,
    510	ISIF_PACK_12BIT,
    511	ISIF_PACK_8BIT
    512};
    513
    514#define ISIF_WIN_NTSC				{0, 0, 720, 480}
    515#define ISIF_WIN_VGA				{0, 0, 640, 480}
    516
    517#endif
    518#endif