OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [include/] [asm-or32/] [pgalloc.h] - Rev 7

Compare with Previous | Blame | View Log

#ifndef _OR32_PGALLOC_H
#define _OR32_PGALLOC_H
 
#include <asm/page.h>
#include <linux/threads.h>
#include <linux/mm.h>
 
#if 1
#define pmd_populate_kernel(mm, pmd, pte) \
                 set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)))
 
static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte)
{
	set_pmd(pmd, __pmd(_KERNPG_TABLE +
			   ((unsigned long)page_to_pfn(pte) <<
			    (unsigned long) PAGE_SHIFT)));
}
#endif
 
#if 0
#define pmd_populate_kernel(mm, pmd, pte) \
                 set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)))
#define pmd_populate(mm, pmd, pte) \
                set_pmd(pmd, __pmd(__pa(pte)))
 
#endif
 
#if 0
/* __PHX__ check */
#define pmd_populate_kernel(mm, pmd, pte) pmd_set(pmd, pte)
#define pmd_populate(mm, pmd, pte) pmd_set(pmd, page_address(pte))
#endif 
 
 
#if 1
/*
 * Allocate and free page tables.
 */
 
extern inline pgd_t *pgd_alloc(struct mm_struct *mm)
{  
	pgd_t *ret = (pgd_t *)__get_free_page(GFP_KERNEL);
 
	if (ret) {
		memset(ret, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
		memcpy(ret + USER_PTRS_PER_PGD, swapper_pg_dir + USER_PTRS_PER_PGD,
		       (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
	}
	return ret;
}
#endif
 
#if 0
/* __PHX__ check, this is supposed to be 2.6 style, but 
 * we use current_pgd (from mm->pgd) to load kernel pages
 * so we need it initialized.
 */
extern inline pgd_t *pgd_alloc (struct mm_struct *mm)
{
	return (pgd_t *)get_zeroed_page(GFP_KERNEL);
}
#endif
 
extern inline void pgd_free (pgd_t *pgd)
{
	free_page((unsigned long)pgd);
}
 
extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
{
  	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
	if (pte)
		clear_page(pte);
 	return pte;
}
 
extern inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
{
	struct page *pte;
	pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0);
	if (pte)
		clear_page(page_address(pte));
	return pte;
}
 
extern inline void pte_free_kernel(pte_t *pte)
{
	free_page((unsigned long)pte);
}
 
extern inline void pte_free(struct page *pte)
{
	__free_page(pte);
}
 
 
#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
 
/*
 * We don't have any real pmd's, and this code never triggers because
 * the pgd will always be present..
 */
 
#define pmd_alloc_one(mm, addr)    ({ BUG(); ((pmd_t *)2); })
#define pmd_free(x)                do { } while (0)
#define __pmd_free_tlb(tlb,x)      do { } while (0)
#define pgd_populate(mm, pmd, pte) BUG()
 
#define check_pgt_cache()          do { } while (0)
 
#endif
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.