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 __FIFO_MONITOR_PUBLIC_H_INCLUDED__
17 #define __FIFO_MONITOR_PUBLIC_H_INCLUDED__
18 
19 #include "system_local.h"
20 
21 typedef struct fifo_channel_state_s		fifo_channel_state_t;
22 typedef struct fifo_switch_state_s		fifo_switch_state_t;
23 typedef struct fifo_monitor_state_s		fifo_monitor_state_t;
24 
25 /*! Set a fifo switch multiplex
26 
27  \param	ID[in]				FIFO_MONITOR identifier
28  \param	switch_id[in]		fifo switch identifier
29  \param	sel[in]				fifo switch selector
30 
31  \return none, fifo_switch[switch_id].sel = sel
32  */
33 STORAGE_CLASS_FIFO_MONITOR_H void fifo_switch_set(
34     const fifo_monitor_ID_t		ID,
35     const fifo_switch_t			switch_id,
36     const hrt_data				sel);
37 
38 /*! Get a fifo switch multiplex
39 
40  \param	ID[in]				FIFO_MONITOR identifier
41  \param	switch_id[in]		fifo switch identifier
42 
43  \return fifo_switch[switch_id].sel
44  */
45 STORAGE_CLASS_FIFO_MONITOR_H hrt_data fifo_switch_get(
46     const fifo_monitor_ID_t		ID,
47     const fifo_switch_t			switch_id);
48 
49 /*! Read the state of FIFO_MONITOR[ID]
50 
51  \param	ID[in]				FIFO_MONITOR identifier
52  \param	state[out]			fifo monitor state structure
53 
54  \return none, state = FIFO_MONITOR[ID].state
55  */
56 void fifo_monitor_get_state(
57     const fifo_monitor_ID_t		ID,
58     fifo_monitor_state_t		*state);
59 
60 /*! Read the state of a fifo channel
61 
62  \param	ID[in]				FIFO_MONITOR identifier
63  \param	channel_id[in]		fifo channel identifier
64  \param	state[out]			fifo channel state structure
65 
66  \return none, state = fifo_channel[channel_id].state
67  */
68 void fifo_channel_get_state(
69     const fifo_monitor_ID_t		ID,
70     const fifo_channel_t		channel_id,
71     fifo_channel_state_t		*state);
72 
73 /*! Read the state of a fifo switch
74 
75  \param	ID[in]				FIFO_MONITOR identifier
76  \param	switch_id[in]		fifo switch identifier
77  \param	state[out]			fifo switch state structure
78 
79  \return none, state = fifo_switch[switch_id].state
80  */
81 void fifo_switch_get_state(
82     const fifo_monitor_ID_t		ID,
83     const fifo_switch_t			switch_id,
84     fifo_switch_state_t			*state);
85 
86 /*! Write to a control register of FIFO_MONITOR[ID]
87 
88  \param	ID[in]				FIFO_MONITOR identifier
89  \param	reg[in]				register index
90  \param value[in]			The data to be written
91 
92  \return none, FIFO_MONITOR[ID].ctrl[reg] = value
93  */
94 STORAGE_CLASS_FIFO_MONITOR_H void fifo_monitor_reg_store(
95     const fifo_monitor_ID_t		ID,
96     const unsigned int			reg,
97     const hrt_data				value);
98 
99 /*! Read from a control register of FIFO_MONITOR[ID]
100 
101  \param	ID[in]				FIFO_MONITOR identifier
102  \param	reg[in]				register index
103  \param value[in]			The data to be written
104 
105  \return FIFO_MONITOR[ID].ctrl[reg]
106  */
107 STORAGE_CLASS_FIFO_MONITOR_H hrt_data fifo_monitor_reg_load(
108     const fifo_monitor_ID_t		ID,
109     const unsigned int			reg);
110 
111 #endif /* __FIFO_MONITOR_PUBLIC_H_INCLUDED__ */
112