1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Support for Intel Camera Imaging ISP subsystem.
4 * Copyright (c) 2010-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 __FIFO_MONITOR_LOCAL_H_INCLUDED__
17#define __FIFO_MONITOR_LOCAL_H_INCLUDED__
18
19#include <type_support.h>
20#include "fifo_monitor_global.h"
21
22#include "hive_isp_css_defs.h"	/* ISP_STR_MON_PORT_SND_SP, ... */
23
24#define _hive_str_mon_valid_offset   0
25#define _hive_str_mon_accept_offset  1
26
27#define	FIFO_CHANNEL_SP_VALID_MASK		0x55555555
28#define	FIFO_CHANNEL_SP_VALID_B_MASK	0x00000055
29#define	FIFO_CHANNEL_ISP_VALID_MASK		0x15555555
30#define	FIFO_CHANNEL_MOD_VALID_MASK		0x55555555
31
32typedef enum fifo_switch {
33	FIFO_SWITCH_IF,
34	FIFO_SWITCH_GDC0,
35	FIFO_SWITCH_GDC1,
36	N_FIFO_SWITCH
37} fifo_switch_t;
38
39typedef enum fifo_channel {
40	FIFO_CHANNEL_ISP0_TO_SP0,
41	FIFO_CHANNEL_SP0_TO_ISP0,
42	FIFO_CHANNEL_ISP0_TO_IF0,
43	FIFO_CHANNEL_IF0_TO_ISP0,
44	FIFO_CHANNEL_ISP0_TO_IF1,
45	FIFO_CHANNEL_IF1_TO_ISP0,
46	FIFO_CHANNEL_ISP0_TO_DMA0,
47	FIFO_CHANNEL_DMA0_TO_ISP0,
48	FIFO_CHANNEL_ISP0_TO_GDC0,
49	FIFO_CHANNEL_GDC0_TO_ISP0,
50	FIFO_CHANNEL_ISP0_TO_GDC1,
51	FIFO_CHANNEL_GDC1_TO_ISP0,
52	FIFO_CHANNEL_ISP0_TO_HOST0,
53	FIFO_CHANNEL_HOST0_TO_ISP0,
54	FIFO_CHANNEL_SP0_TO_IF0,
55	FIFO_CHANNEL_IF0_TO_SP0,
56	FIFO_CHANNEL_SP0_TO_IF1,
57	FIFO_CHANNEL_IF1_TO_SP0,
58	FIFO_CHANNEL_SP0_TO_IF2,
59	FIFO_CHANNEL_IF2_TO_SP0,
60	FIFO_CHANNEL_SP0_TO_DMA0,
61	FIFO_CHANNEL_DMA0_TO_SP0,
62	FIFO_CHANNEL_SP0_TO_GDC0,
63	FIFO_CHANNEL_GDC0_TO_SP0,
64	FIFO_CHANNEL_SP0_TO_GDC1,
65	FIFO_CHANNEL_GDC1_TO_SP0,
66	FIFO_CHANNEL_SP0_TO_HOST0,
67	FIFO_CHANNEL_HOST0_TO_SP0,
68	FIFO_CHANNEL_SP0_TO_STREAM2MEM0,
69	FIFO_CHANNEL_STREAM2MEM0_TO_SP0,
70	FIFO_CHANNEL_SP0_TO_INPUT_SYSTEM0,
71	FIFO_CHANNEL_INPUT_SYSTEM0_TO_SP0,
72	/*
73	 * No clue what this is
74	 *
75		FIFO_CHANNEL_SP0_TO_IRQ0,
76		FIFO_CHANNEL_IRQ0_TO_SP0,
77	 */
78	N_FIFO_CHANNEL
79} fifo_channel_t;
80
81struct fifo_channel_state_s {
82	bool	src_valid;
83	bool	fifo_accept;
84	bool	fifo_valid;
85	bool	sink_accept;
86};
87
88/* The switch is tri-state */
89struct fifo_switch_state_s {
90	bool	is_none;
91	bool	is_isp;
92	bool	is_sp;
93};
94
95struct fifo_monitor_state_s {
96	struct fifo_channel_state_s	fifo_channels[N_FIFO_CHANNEL];
97	struct fifo_switch_state_s	fifo_switches[N_FIFO_SWITCH];
98};
99
100#endif /* __FIFO_MONITOR_LOCAL_H_INCLUDED__ */
101