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_PRIVATE_H_INCLUDED__
17 #define __FIFO_MONITOR_PRIVATE_H_INCLUDED__
18 
19 #include "fifo_monitor_public.h"
20 
21 #define __INLINE_GP_DEVICE__
22 #include "gp_device.h"
23 
24 #include "device_access.h"
25 
26 #include "assert_support.h"
27 
28 #ifdef __INLINE_FIFO_MONITOR__
29 extern const unsigned int FIFO_SWITCH_ADDR[N_FIFO_SWITCH];
30 #endif
31 
32 STORAGE_CLASS_FIFO_MONITOR_C void fifo_switch_set(
33     const fifo_monitor_ID_t		ID,
34     const fifo_switch_t			switch_id,
35     const hrt_data				sel)
36 {
37 	assert(ID == FIFO_MONITOR0_ID);
38 	assert(FIFO_MONITOR_BASE[ID] != (hrt_address) - 1);
39 	assert(switch_id < N_FIFO_SWITCH);
40 	(void)ID;
41 
42 	gp_device_reg_store(GP_DEVICE0_ID, FIFO_SWITCH_ADDR[switch_id], sel);
43 
44 	return;
45 }
46 
47 STORAGE_CLASS_FIFO_MONITOR_C hrt_data fifo_switch_get(
48     const fifo_monitor_ID_t		ID,
49     const fifo_switch_t			switch_id)
50 {
51 	assert(ID == FIFO_MONITOR0_ID);
52 	assert(FIFO_MONITOR_BASE[ID] != (hrt_address) - 1);
53 	assert(switch_id < N_FIFO_SWITCH);
54 	(void)ID;
55 
56 	return gp_device_reg_load(GP_DEVICE0_ID, FIFO_SWITCH_ADDR[switch_id]);
57 }
58 
59 STORAGE_CLASS_FIFO_MONITOR_C void fifo_monitor_reg_store(
60     const fifo_monitor_ID_t		ID,
61     const unsigned int			reg,
62     const hrt_data				value)
63 {
64 	assert(ID < N_FIFO_MONITOR_ID);
65 	assert(FIFO_MONITOR_BASE[ID] != (hrt_address) - 1);
66 	ia_css_device_store_uint32(FIFO_MONITOR_BASE[ID] + reg * sizeof(hrt_data),
67 				   value);
68 	return;
69 }
70 
71 STORAGE_CLASS_FIFO_MONITOR_C hrt_data fifo_monitor_reg_load(
72     const fifo_monitor_ID_t		ID,
73     const unsigned int			reg)
74 {
75 	assert(ID < N_FIFO_MONITOR_ID);
76 	assert(FIFO_MONITOR_BASE[ID] != (hrt_address) - 1);
77 	return ia_css_device_load_uint32(FIFO_MONITOR_BASE[ID] + reg * sizeof(
78 					     hrt_data));
79 }
80 
81 #endif /* __FIFO_MONITOR_PRIVATE_H_INCLUDED__ */
82