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

📄 pgtbl_setup.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* $Id: pgtbl_setup.c,v 1.1.2.2 2003/03/18 19:21:14 joel Exp $ */#include <rtems.h>#include <libcpu/mmu.h>#include <libcpu/page.h>#include <rtems/bspIo.h>#include <libcpu/pte121.h>/* Default setup of the page tables. This is a weak * alias, so applications may easily override this * default setup. * * NOTE: while it is possible to change the individual *       mappings, the page table itself MUST be *       allocated at the top of the physical memory! *       bspstart.c RELIES on this. *       Also, the 'setup' routine must reduce *       *pmemsize by the size of the page table. *//* Author: Till Straumann, <strauman@slac.stanford.edu>, 4/2002 */Triv121PgTblBSP_pgtbl_setup(unsigned long) __attribute__ (( weak, alias("__BSP_default_pgtbl_setup") ));Triv121PgTbl__BSP_default_pgtbl_setup(unsigned int *pmemsize){Triv121PgTbl	pt;unsigned		ldPtSize,tmp;  /* Allocate a page table large enough to map   * the entire physical memory. We put the page   * table at the top of the physical memory.   */  /* get minimal size (log base 2) of PT for   * this board's memory   */  ldPtSize = triv121PgTblLdMinSize(*pmemsize);  ldPtSize++; /* double this amount -- then why? */  /* allocate the page table at the top of the physical   * memory - THIS IS NOT AN OPTION - bspstart.c RELIES   * ON THIS LAYOUT! (the size, however may be changed)   */  if ( (pt = triv121PgTblInit(*pmemsize - (1<<ldPtSize), ldPtSize)) ) {	/* get those from the linker script.	 * NOTE THAT THE CORRECTNESS OF THE LINKER SCRIPT IS CRUCIAL	 */	extern unsigned long __DATA_START__[], _etext[];	/* map text and RO data read-only */	tmp = triv121PgTblMap(						pt,						TRIV121_121_VSID,						0,						(PAGE_ALIGN((unsigned long)_etext) - 0) >> PG_SHIFT,						0, /* WIMG */						TRIV121_PP_RO_PAGE);	if (TRIV121_MAP_SUCCESS != tmp) {		printk("Unable to map page index %i; reverting to BAT0\n", 				tmp);		pt = 0;	} else {		/* map the rest (without the page table itself) RW */		tmp = triv121PgTblMap(						pt,						TRIV121_121_VSID,						(unsigned long)__DATA_START__,						(*pmemsize - (1<<ldPtSize) -  (unsigned long)__DATA_START__ )>> PG_SHIFT,						0, /* WIMG */						TRIV121_PP_RW_PAGE);		if (TRIV121_MAP_SUCCESS != tmp) {			printk("Unable to map page index %i; reverting to BAT0\n", 					tmp);			pt = 0;		}	}  } else {	printk("WARNING: unable to allocate page table, keeping DBAT0\n");  }  if (pt) {#ifdef SHOW_MORE_INIT_SETTINGS	printk("Setting up page table mappings; protecting text/read-only data from write access\n");#endif	/* SUCCESS; reduce available memory by size of the page table */	*pmemsize -= (1<<ldPtSize);  }  return pt;}

⌨️ 快捷键说明

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