Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/include/asm/fixmap.h
17302 views
1
#ifndef _ASM_FIXMAP_H
2
#define _ASM_FIXMAP_H
3
4
/*
5
* Nothing too fancy for now.
6
*
7
* On ARM we already have well known fixed virtual addresses imposed by
8
* the architecture such as the vector page which is located at 0xffff0000,
9
* therefore a second level page table is already allocated covering
10
* 0xfff00000 upwards.
11
*
12
* The cache flushing code in proc-xscale.S uses the virtual area between
13
* 0xfffe0000 and 0xfffeffff.
14
*/
15
16
#define FIXADDR_START 0xfff00000UL
17
#define FIXADDR_TOP 0xfffe0000UL
18
#define FIXADDR_SIZE (FIXADDR_TOP - FIXADDR_START)
19
20
#define FIX_KMAP_BEGIN 0
21
#define FIX_KMAP_END (FIXADDR_SIZE >> PAGE_SHIFT)
22
23
#define __fix_to_virt(x) (FIXADDR_START + ((x) << PAGE_SHIFT))
24
#define __virt_to_fix(x) (((x) - FIXADDR_START) >> PAGE_SHIFT)
25
26
extern void __this_fixmap_does_not_exist(void);
27
28
static inline unsigned long fix_to_virt(const unsigned int idx)
29
{
30
if (idx >= FIX_KMAP_END)
31
__this_fixmap_does_not_exist();
32
return __fix_to_virt(idx);
33
}
34
35
static inline unsigned int virt_to_fix(const unsigned long vaddr)
36
{
37
BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START);
38
return __virt_to_fix(vaddr);
39
}
40
41
#endif
42
43