1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Support for Intel Camera Imaging ISP subsystem.
4 * Copyright (c) 2015, Intel Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms and conditions of the GNU General Public License,
8 * version 2, as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13 * more details.
14 */
15
16#ifndef __GDC_GLOBAL_H_INCLUDED__
17#define __GDC_GLOBAL_H_INCLUDED__
18
19#define IS_GDC_VERSION_2
20
21#include <type_support.h>
22#include "gdc_v2_defs.h"
23
24/*
25 * Storage addresses for packed data transfer
26 */
27#define GDC_PARAM_ICX_LEFT_ROUNDED_IDX            0
28#define GDC_PARAM_OXDIM_FLOORED_IDX               1
29#define GDC_PARAM_OXDIM_LAST_IDX                  2
30#define GDC_PARAM_WOIX_LAST_IDX                   3
31#define GDC_PARAM_IY_TOPLEFT_IDX                  4
32#define GDC_PARAM_CHUNK_CNT_IDX                   5
33/*#define GDC_PARAM_ELEMENTS_PER_XMEM_ADDR_IDX    6 */		/* Derived from bpp */
34#define GDC_PARAM_BPP_IDX                         6
35#define GDC_PARAM_BLOCK_HEIGHT_IDX                7
36/*#define GDC_PARAM_DMA_CHANNEL_STRIDE_A_IDX      8*/		/* The DMA stride == the GDC buffer stride */
37#define GDC_PARAM_WOIX_IDX                        8
38#define GDC_PARAM_DMA_CHANNEL_STRIDE_B_IDX        9
39#define GDC_PARAM_DMA_CHANNEL_WIDTH_A_IDX        10
40#define GDC_PARAM_DMA_CHANNEL_WIDTH_B_IDX        11
41#define GDC_PARAM_VECTORS_PER_LINE_IN_IDX        12
42#define GDC_PARAM_VECTORS_PER_LINE_OUT_IDX       13
43#define GDC_PARAM_VMEM_IN_DIMY_IDX               14
44#define GDC_PARAM_COMMAND_IDX                    15
45#define N_GDC_PARAM                              16
46
47/* Because of the packed parameter transfer max(params) == max(fragments) */
48#define	N_GDC_FRAGMENTS		N_GDC_PARAM
49
50/* The GDC is capable of higher internal precision than the parameter data structures */
51#define HRT_GDC_COORD_SCALE_BITS	6
52#define HRT_GDC_COORD_SCALE			BIT(HRT_GDC_COORD_SCALE_BITS)
53
54typedef enum {
55	GDC_CH0_ID = 0,
56	N_GDC_CHANNEL_ID
57} gdc_channel_ID_t;
58
59typedef enum {
60	gdc_8_bpp  = 8,
61	gdc_10_bpp = 10,
62	gdc_12_bpp = 12,
63	gdc_14_bpp = 14
64} gdc_bits_per_pixel_t;
65
66typedef struct gdc_scale_param_mem_s {
67	u16  params[N_GDC_PARAM];
68	u16  ipx_start_array[N_GDC_PARAM];
69	u16  ibuf_offset[N_GDC_PARAM];
70	u16  obuf_offset[N_GDC_PARAM];
71} gdc_scale_param_mem_t;
72
73typedef struct gdc_warp_param_mem_s {
74	u32      origin_x;
75	u32      origin_y;
76	u32      in_addr_offset;
77	u32      in_block_width;
78	u32      in_block_height;
79	u32      p0_x;
80	u32      p0_y;
81	u32      p1_x;
82	u32      p1_y;
83	u32      p2_x;
84	u32      p2_y;
85	u32      p3_x;
86	u32      p3_y;
87	u32      padding[3];
88} gdc_warp_param_mem_t;
89
90#endif /* __GDC_GLOBAL_H_INCLUDED__ */
91