1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * (c) Copyright 2006 Benjamin Herrenschmidt, IBM Corp.
4  *                    <benh@kernel.crashing.org>
5  */
6 
7 #ifndef _ASM_POWERPC_DCR_MMIO_H
8 #define _ASM_POWERPC_DCR_MMIO_H
9 #ifdef __KERNEL__
10 
11 #include <asm/io.h>
12 
13 typedef struct {
14 	void __iomem *token;
15 	unsigned int stride;
16 	unsigned int base;
17 } dcr_host_mmio_t;
18 
19 static inline bool dcr_map_ok_mmio(dcr_host_mmio_t host)
20 {
21 	return host.token != NULL;
22 }
23 
24 extern dcr_host_mmio_t dcr_map_mmio(struct device_node *dev,
25 				    unsigned int dcr_n,
26 				    unsigned int dcr_c);
27 extern void dcr_unmap_mmio(dcr_host_mmio_t host, unsigned int dcr_c);
28 
29 static inline u32 dcr_read_mmio(dcr_host_mmio_t host, unsigned int dcr_n)
30 {
31 	return in_be32(host.token + ((host.base + dcr_n) * host.stride));
32 }
33 
34 static inline void dcr_write_mmio(dcr_host_mmio_t host,
35 				  unsigned int dcr_n,
36 				  u32 value)
37 {
38 	out_be32(host.token + ((host.base + dcr_n) * host.stride), value);
39 }
40 
41 #endif /* __KERNEL__ */
42 #endif /* _ASM_POWERPC_DCR_MMIO_H */
43 
44 
45