⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rmap.h

📁 Axis 221 camera embedded programing interface
💻 H
字号:
#ifndef _GENERIC_RMAP_H#define _GENERIC_RMAP_H/* * linux/include/asm-generic/rmap.h * * Architecture dependent parts of the reverse mapping code, * this version should work for most architectures with a * 'normal' page table layout. * * We use the struct page of the page table page to find out * the process and full address of a page table entry: * - page->mapping points to the process' mm_struct * - page->index has the high bits of the address * - the lower bits of the address are calculated from the *   offset of the page table entry within the page table page * * For CONFIG_HIGHPTE, we need to represent the address of a pte in a * scalar pte_addr_t.  The pfn of the pte's page is shifted left by PAGE_SIZE * bits and is then ORed with the byte offset of the pte within its page. * * For CONFIG_HIGHMEM4G, the pte_addr_t is 32 bits.  20 for the pfn, 12 for * the offset. * * For CONFIG_HIGHMEM64G, the pte_addr_t is 64 bits.  52 for the pfn, 12 for * the offset. */#include <linux/mm.h>static inline void pgtable_add_rmap(struct page * page, struct mm_struct * mm, unsigned long address){#ifdef BROKEN_PPC_PTE_ALLOC_ONE	/* OK, so PPC calls pte_alloc() before mem_map[] is setup ... ;( */	extern int mem_init_done;	if (!mem_init_done)		return;#endif	page->mapping = (void *)mm;	page->index = address & ~((PTRS_PER_PTE * PAGE_SIZE) - 1);	inc_page_state(nr_page_table_pages);}static inline void pgtable_remove_rmap(struct page * page){	page->mapping = NULL;	page->index = 0;	dec_page_state(nr_page_table_pages);}static inline struct mm_struct * ptep_to_mm(pte_t * ptep){	struct page * page = kmap_atomic_to_page(ptep);	return (struct mm_struct *) page->mapping;}static inline unsigned long ptep_to_address(pte_t * ptep){	struct page * page = kmap_atomic_to_page(ptep);	unsigned long low_bits;	low_bits = ((unsigned long)ptep & (PTRS_PER_PTE*sizeof(pte_t) - 1))			* (PAGE_SIZE/sizeof(pte_t));	return page->index + low_bits;}#ifdef CONFIG_HIGHPTEstatic inline pte_addr_t ptep_to_paddr(pte_t *ptep){	pte_addr_t paddr;	paddr = ((pte_addr_t)page_to_pfn(kmap_atomic_to_page(ptep))) << PAGE_SHIFT;	return paddr + (pte_addr_t)((unsigned long)ptep & ~PAGE_MASK);}#elsestatic inline pte_addr_t ptep_to_paddr(pte_t *ptep){	return (pte_addr_t)ptep;}#endif#ifndef CONFIG_HIGHPTEstatic inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr){	return (pte_t *)pte_paddr;}static inline void rmap_ptep_unmap(pte_t *pte){	return;}#endif#endif /* _GENERIC_RMAP_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -