]>
Commit | Line | Data |
---|---|---|
d4150ca6 PB |
1 | /* |
2 | * Generic I/O functions. | |
3 | * | |
4 | * Copyright (c) 2016 Imagination Technologies Ltd. | |
5 | * | |
6 | * SPDX-License-Identifier: GPL-2.0+ | |
7 | */ | |
8 | ||
9 | #ifndef __ASM_GENERIC_IO_H__ | |
10 | #define __ASM_GENERIC_IO_H__ | |
11 | ||
12 | /* | |
13 | * This file should be included at the end of each architecture-specific | |
14 | * asm/io.h such that we may provide generic implementations without | |
15 | * conflicting with architecture-specific code. | |
16 | */ | |
17 | ||
18 | #ifndef __ASSEMBLY__ | |
19 | ||
20 | /** | |
21 | * phys_to_virt() - Return a virtual address mapped to a given physical address | |
22 | * @paddr: the physical address | |
23 | * | |
24 | * Returns a virtual address which the CPU can access that maps to the physical | |
25 | * address @paddr. This should only be used where it is known that no dynamic | |
26 | * mapping is required. In general, map_physmem should be used instead. | |
27 | * | |
28 | * Returns: a virtual address which maps to @paddr | |
29 | */ | |
30 | #ifndef phys_to_virt | |
31 | static inline void *phys_to_virt(phys_addr_t paddr) | |
32 | { | |
33 | return (void *)(unsigned long)paddr; | |
34 | } | |
35 | #endif | |
36 | ||
37 | /** | |
38 | * virt_to_phys() - Return the physical address that a virtual address maps to | |
39 | * @vaddr: the virtual address | |
40 | * | |
41 | * Returns the physical address which the CPU-accessible virtual address @vaddr | |
42 | * maps to. | |
43 | * | |
44 | * Returns: the physical address which @vaddr maps to | |
45 | */ | |
46 | #ifndef virt_to_phys | |
47 | static inline phys_addr_t virt_to_phys(void *vaddr) | |
48 | { | |
49 | return (phys_addr_t)((unsigned long)vaddr); | |
50 | } | |
51 | #endif | |
52 | ||
53 | /* | |
54 | * Flags for use with map_physmem() & unmap_physmem(). Architectures need not | |
55 | * support all of these, in which case they will be defined as zero here & | |
56 | * ignored. Callers that may run on multiple architectures should therefore | |
57 | * treat them as hints rather than requirements. | |
58 | */ | |
59 | #ifndef MAP_NOCACHE | |
60 | # define MAP_NOCACHE 0 /* Produce an uncached mapping */ | |
61 | #endif | |
62 | #ifndef MAP_WRCOMBINE | |
63 | # define MAP_WRCOMBINE 0 /* Allow write-combining on the mapping */ | |
64 | #endif | |
65 | #ifndef MAP_WRBACK | |
66 | # define MAP_WRBACK 0 /* Map using write-back caching */ | |
67 | #endif | |
68 | #ifndef MAP_WRTHROUGH | |
69 | # define MAP_WRTHROUGH 0 /* Map using write-through caching */ | |
70 | #endif | |
71 | ||
72 | /** | |
73 | * map_physmem() - Return a virtual address mapped to a given physical address | |
74 | * @paddr: the physical address | |
75 | * @len: the length of the required mapping | |
76 | * @flags: flags affecting the type of mapping | |
77 | * | |
78 | * Return a virtual address through which the CPU may access the memory at | |
79 | * physical address @paddr. The mapping will be valid for at least @len bytes, | |
80 | * and may be affected by flags passed to the @flags argument. This function | |
81 | * may create new mappings, so should generally be paired with a matching call | |
82 | * to unmap_physmem once the caller is finished with the memory in question. | |
83 | * | |
84 | * Returns: a virtual address suitably mapped to @paddr | |
85 | */ | |
86 | #ifndef map_physmem | |
87 | static inline void *map_physmem(phys_addr_t paddr, unsigned long len, | |
88 | unsigned long flags) | |
89 | { | |
90 | return phys_to_virt(paddr); | |
91 | } | |
92 | #endif | |
93 | ||
94 | /** | |
95 | * unmap_physmem() - Remove mappings created by a prior call to map_physmem() | |
96 | * @vaddr: the virtual address which map_physmem() previously returned | |
97 | * @flags: flags matching those originally passed to map_physmem() | |
98 | * | |
99 | * Unmap memory which was previously mapped by a call to map_physmem(). If | |
100 | * map_physmem() dynamically created a mapping for the memory in question then | |
101 | * unmap_physmem() will remove that mapping. | |
102 | */ | |
103 | #ifndef unmap_physmem | |
104 | static inline void unmap_physmem(void *vaddr, unsigned long flags) | |
105 | { | |
106 | } | |
107 | #endif | |
108 | ||
109 | #endif /* !__ASSEMBLY__ */ | |
110 | #endif /* __ASM_GENERIC_IO_H__ */ |