1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | |
3 | #ifndef __ASM_GENERIC_FB_H_ |
4 | #define __ASM_GENERIC_FB_H_ |
5 | |
6 | /* |
7 | * Only include this header file from your architecture's <asm/fb.h>. |
8 | */ |
9 | |
10 | #include <linux/io.h> |
11 | #include <linux/mm_types.h> |
12 | #include <linux/pgtable.h> |
13 | |
14 | struct fb_info; |
15 | |
16 | #ifndef pgprot_framebuffer |
17 | #define pgprot_framebuffer pgprot_framebuffer |
18 | static inline pgprot_t pgprot_framebuffer(pgprot_t prot, |
19 | unsigned long vm_start, unsigned long vm_end, |
20 | unsigned long offset) |
21 | { |
22 | return pgprot_writecombine(prot); |
23 | } |
24 | #endif |
25 | |
26 | #ifndef fb_is_primary_device |
27 | #define fb_is_primary_device fb_is_primary_device |
28 | static inline int fb_is_primary_device(struct fb_info *info) |
29 | { |
30 | return 0; |
31 | } |
32 | #endif |
33 | |
34 | /* |
35 | * I/O helpers for the framebuffer. Prefer these functions over their |
36 | * regular counterparts. The regular I/O functions provide in-order |
37 | * access and swap bytes to/from little-endian ordering. Neither is |
38 | * required for framebuffers. Instead, the helpers read and write |
39 | * raw framebuffer data. Independent operations can be reordered for |
40 | * improved performance. |
41 | */ |
42 | |
43 | #ifndef fb_readb |
44 | static inline u8 fb_readb(const volatile void __iomem *addr) |
45 | { |
46 | return __raw_readb(addr); |
47 | } |
48 | #define fb_readb fb_readb |
49 | #endif |
50 | |
51 | #ifndef fb_readw |
52 | static inline u16 fb_readw(const volatile void __iomem *addr) |
53 | { |
54 | return __raw_readw(addr); |
55 | } |
56 | #define fb_readw fb_readw |
57 | #endif |
58 | |
59 | #ifndef fb_readl |
60 | static inline u32 fb_readl(const volatile void __iomem *addr) |
61 | { |
62 | return __raw_readl(addr); |
63 | } |
64 | #define fb_readl fb_readl |
65 | #endif |
66 | |
67 | #ifndef fb_readq |
68 | #if defined(__raw_readq) |
69 | static inline u64 fb_readq(const volatile void __iomem *addr) |
70 | { |
71 | return __raw_readq(addr); |
72 | } |
73 | #define fb_readq fb_readq |
74 | #endif |
75 | #endif |
76 | |
77 | #ifndef fb_writeb |
78 | static inline void fb_writeb(u8 b, volatile void __iomem *addr) |
79 | { |
80 | __raw_writeb(val: b, addr); |
81 | } |
82 | #define fb_writeb fb_writeb |
83 | #endif |
84 | |
85 | #ifndef fb_writew |
86 | static inline void fb_writew(u16 b, volatile void __iomem *addr) |
87 | { |
88 | __raw_writew(val: b, addr); |
89 | } |
90 | #define fb_writew fb_writew |
91 | #endif |
92 | |
93 | #ifndef fb_writel |
94 | static inline void fb_writel(u32 b, volatile void __iomem *addr) |
95 | { |
96 | __raw_writel(val: b, addr); |
97 | } |
98 | #define fb_writel fb_writel |
99 | #endif |
100 | |
101 | #ifndef fb_writeq |
102 | #if defined(__raw_writeq) |
103 | static inline void fb_writeq(u64 b, volatile void __iomem *addr) |
104 | { |
105 | __raw_writeq(val: b, addr); |
106 | } |
107 | #define fb_writeq fb_writeq |
108 | #endif |
109 | #endif |
110 | |
111 | #ifndef fb_memcpy_fromio |
112 | static inline void fb_memcpy_fromio(void *to, const volatile void __iomem *from, size_t n) |
113 | { |
114 | memcpy_fromio(to, from, n); |
115 | } |
116 | #define fb_memcpy_fromio fb_memcpy_fromio |
117 | #endif |
118 | |
119 | #ifndef fb_memcpy_toio |
120 | static inline void fb_memcpy_toio(volatile void __iomem *to, const void *from, size_t n) |
121 | { |
122 | memcpy_toio(to, from, n); |
123 | } |
124 | #define fb_memcpy_toio fb_memcpy_toio |
125 | #endif |
126 | |
127 | #ifndef fb_memset |
128 | static inline void fb_memset_io(volatile void __iomem *addr, int c, size_t n) |
129 | { |
130 | memset_io(addr, c, n); |
131 | } |
132 | #define fb_memset fb_memset_io |
133 | #endif |
134 | |
135 | #endif /* __ASM_GENERIC_FB_H_ */ |
136 | |