Subversion Repositories Kolibri OS

Rev

Rev 5270 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5270 serge 1
#ifndef _PGTABLE_NOPMD_H
2
#define _PGTABLE_NOPMD_H
3
 
4
#ifndef __ASSEMBLY__
5
 
6
#include 
7
 
8
struct mm_struct;
9
 
10
#define __PAGETABLE_PMD_FOLDED
11
 
12
/*
13
 * Having the pmd type consist of a pud gets the size right, and allows
14
 * us to conceptually access the pud entry that this pmd is folded into
15
 * without casting.
16
 */
17
typedef struct { pud_t pud; } pmd_t;
18
 
19
#define PMD_SHIFT	PUD_SHIFT
20
#define PTRS_PER_PMD	1
21
#define PMD_SIZE  	(1UL << PMD_SHIFT)
22
#define PMD_MASK  	(~(PMD_SIZE-1))
23
 
24
/*
25
 * The "pud_xxx()" functions here are trivial for a folded two-level
26
 * setup: the pmd is never bad, and a pmd always exists (as it's folded
27
 * into the pud entry)
28
 */
29
static inline int pud_none(pud_t pud)		{ return 0; }
30
static inline int pud_bad(pud_t pud)		{ return 0; }
31
static inline int pud_present(pud_t pud)	{ return 1; }
32
static inline void pud_clear(pud_t *pud)	{ }
33
#define pmd_ERROR(pmd)				(pud_ERROR((pmd).pud))
34
 
35
#define pud_populate(mm, pmd, pte)		do { } while (0)
36
 
37
/*
38
 * (pmds are folded into puds so this doesn't get actually called,
39
 * but the define is needed for a generic inline function.)
40
 */
41
#define set_pud(pudptr, pudval)			set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval })
42
 
43
static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
44
{
45
	return (pmd_t *)pud;
46
}
47
 
48
#define pmd_val(x)				(pud_val((x).pud))
49
#define __pmd(x)				((pmd_t) { __pud(x) } )
50
 
51
#define pud_page(pud)				(pmd_page((pmd_t){ pud }))
52
#define pud_page_vaddr(pud)			(pmd_page_vaddr((pmd_t){ pud }))
53
 
54
/*
55
 * allocating and freeing a pmd is trivial: the 1-entry pmd is
56
 * inside the pud, so has no extra memory associated with it.
57
 */
58
#define pmd_alloc_one(mm, address)		NULL
59
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
60
{
61
}
62
#define __pmd_free_tlb(tlb, x, a)		do { } while (0)
63
 
64
#undef  pmd_addr_end
65
#define pmd_addr_end(addr, end)			(end)
66
 
67
#endif /* __ASSEMBLY__ */
68
 
69
#endif /* _PGTABLE_NOPMD_H */