xref: /openbsd-src/sys/dev/pci/drm/include/linux/iosys-map.h (revision 3374c67d44f9b75b98444cbf63020f777792342e)
1 /* Public domain. */
2 
3 #ifndef _LINUX_IOSYS_MAP_H
4 #define _LINUX_IOSYS_MAP_H
5 
6 #include <linux/io.h>
7 #include <linux/string.h>
8 
9 struct iosys_map {
10 	union {
11 		void *vaddr_iomem;
12 		void *vaddr;
13 	};
14 	bool is_iomem;
15 	bus_space_handle_t bsh;
16 	bus_size_t size;
17 };
18 
19 static inline void
20 iosys_map_incr(struct iosys_map *ism, size_t n)
21 {
22 	if (ism->is_iomem)
23 		ism->vaddr_iomem += n;
24 	else
25 		ism->vaddr += n;
26 }
27 
28 static inline void
29 iosys_map_memcpy_to(struct iosys_map *ism, size_t off, const void *src,
30     size_t len)
31 {
32 	if (ism->is_iomem)
33 		memcpy_toio(ism->vaddr_iomem + off, src, len);
34 	else
35 		memcpy(ism->vaddr + off, src, len);
36 }
37 
38 static inline bool
39 iosys_map_is_null(const struct iosys_map *ism)
40 {
41 	if (ism->is_iomem)
42 		return (ism->vaddr_iomem == NULL);
43 	else
44 		return (ism->vaddr == NULL);
45 }
46 
47 static inline bool
48 iosys_map_is_set(const struct iosys_map *ism)
49 {
50 	if (ism->is_iomem)
51 		return (ism->vaddr_iomem != NULL);
52 	else
53 		return (ism->vaddr != NULL);
54 }
55 
56 static inline void
57 iosys_map_clear(struct iosys_map *ism)
58 {
59 	if (ism->is_iomem) {
60 		ism->vaddr_iomem = NULL;
61 		ism->is_iomem = false;
62 	} else {
63 		ism->vaddr = NULL;
64 	}
65 }
66 
67 static inline void
68 iosys_map_set_vaddr_iomem(struct iosys_map *ism, void *addr)
69 {
70 	ism->vaddr_iomem = addr;
71 	ism->is_iomem = true;
72 }
73 
74 static inline void
75 iosys_map_set_vaddr(struct iosys_map *ism, void *addr)
76 {
77 	ism->vaddr = addr;
78 	ism->is_iomem = false;
79 }
80 
81 #endif
82