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

📄 mmu.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 2 页
字号:
*/
void MMU_FineLargePage(MMU_NAME_t mmu_name,
		       UWORD32 PA,
		       UWORD32 VA,
		       UWORD32 TTB,
		       UWORD32 page_table_base,
		       AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2, i;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000) | 3);
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFF0000) | (AP_bits << 4) | 1);

 *(UWORD32*)add_D1 = val_D1;
 for (i = 0; i < 64; i++)
   {
     *(UWORD32*)(add_D2 + 4*i) = val_D2;
   }
}

/*
-------------------------------------------------------------------------
        MMU_CoarseSmallPage                                             -
-------------------------------------------------------------------------
*/
void MMU_CoarseSmallPage(MMU_NAME_t mmu_name, 
			 UWORD32 PA, 
			 UWORD32 VA, 
			 UWORD32 TTB, 
			 UWORD32 page_table_base, 
			 AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFFC00) | 1);
 add_D2 = ((page_table_base & 0xFFFFFC00) | ((VA & 0x000FF000) >> 10));
 val_D2 = ((PA & 0xFFFFF000) | (AP_bits << 4) | 2);

 *(UWORD32*)add_D1 = val_D1;
 *(UWORD32*)add_D2 = val_D2;
}

/*
-------------------------------------------------------------------------
        MMU_FineSmallPage                                               -
-------------------------------------------------------------------------
*/
void MMU_FineSmallPage(MMU_NAME_t mmu_name, 
		       UWORD32 PA, 
		       UWORD32 VA, 
		       UWORD32 TTB, 
		       UWORD32 page_table_base, 
		       AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2, i;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000) | 3);
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFFF000) | (AP_bits << 4) | 2);

 *(UWORD32*)add_D1 = val_D1;
 for ( i = 0 ; i < 4; i++)
   {
     *(UWORD32*)(add_D2 + 4*i) = val_D2;
   }
}

/*
-------------------------------------------------------------------------
        MMU_FineTinyPage                                                -
-------------------------------------------------------------------------
*/
void MMU_FineTinyPage(MMU_NAME_t mmu_name,
		      UWORD32 PA,
		      UWORD32 VA,
		      UWORD32 TTB,
		      UWORD32 page_table_base,
		      AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000) | 3);
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFFFC00) | (AP_bits << 4) | 3);

 *(UWORD32*)add_D1 = val_D1;
 *(UWORD32*)add_D2 = val_D2;
}

/*
-------------------------------------------------------------------------
        MMU_SectionError                                                -
-------------------------------------------------------------------------
*/
void MMU_Section_Error (MMU_NAME_t mmu_name,
			UWORD32 PA,
			UWORD32 VA,
			UWORD32 TTB,
			AP_t AP_bits)
{
int add_D1, val_D1;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((PA & 0xFFF00000) | (AP_bits << 10));

 *(UWORD32*)add_D1 = val_D1;
}

/*
-------------------------------------------------------------------------
        MMU_CoarseLargePageError1                                      -
-------------------------------------------------------------------------
*/
void MMU_CoarseLargePageError1(MMU_NAME_t mmu_name,
				UWORD32 PA,
				UWORD32 VA,
				UWORD32 TTB,
				UWORD32 page_table_base,
				AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2, i;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFFC00));
 add_D2 = ((page_table_base & 0xFFFFFC00) | ((VA & 0x000FF000) >> 10));
 val_D2 = ((PA & 0xFFFF0000) | (AP_bits << 4) | 1);

 *(UWORD32*)add_D1 = val_D1;
 for (i = 0; i < 16; i++)
   {
     *(UWORD32*)(add_D2 + 4*i) = val_D2;
   }
}

/*
-------------------------------------------------------------------------
        MMU_CoarseLargePageError2                                      -
-------------------------------------------------------------------------
*/
void MMU_CoarseLargePageError2(MMU_NAME_t mmu_name,
				UWORD32 PA,
				UWORD32 VA,
				UWORD32 TTB,
				UWORD32 page_table_base,
				AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2, i;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFFC00) | 1);
 add_D2 = ((page_table_base & 0xFFFFFC00) | ((VA & 0x000FF000) >> 10));
 val_D2 = ((PA & 0xFFFF0000) | (AP_bits << 4));

 *(UWORD32*)add_D1 = val_D1;
 for (i = 0; i < 16; i++)
   {
     *(UWORD32*)(add_D2 + 4*i) = val_D2;
   }
}

/*
-------------------------------------------------------------------------
        MMU_FineLargePageError1                                        -
-------------------------------------------------------------------------
*/
void MMU_FineLargePageError1(MMU_NAME_t mmu_name,
			      UWORD32 PA,
			      UWORD32 VA,
			      UWORD32 TTB,
			      UWORD32 page_table_base,
			      AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2, i;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000));
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFF0000) | (AP_bits << 4) | 1);

 *(UWORD32*)add_D1 = val_D1;
  for (i = 0; i < 64; i++)
   {
     *(UWORD32*)(add_D2 + 4*i) = val_D2;
   }
}

/*
-------------------------------------------------------------------------
        MMU_FineLargePage_Error2                                        -
-------------------------------------------------------------------------
*/
void MMU_FineLargePage_Error2(MMU_NAME_t mmu_name,
			      UWORD32 PA,
			      UWORD32 VA,
			      UWORD32 TTB,
			      UWORD32 page_table_base,
			      AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2, i;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000) | 3);
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFF0000) | (AP_bits << 4));

 *(UWORD32*)add_D1 = val_D1;
  for (i = 0; i < 64; i++)
   {
     *(UWORD32*)(add_D2 + 4*i) = val_D2;
   }
}

/*
-------------------------------------------------------------------------
        MMU_CoarseSmallPageError1                                      -
-------------------------------------------------------------------------
*/
void MMU_CoarseSmallPageError1(MMU_NAME_t mmu_name,
				UWORD32 PA,
				UWORD32 VA,
				UWORD32 TTB,
				UWORD32 page_table_base,
				AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFFC00));
 add_D2 = ((page_table_base & 0xFFFFFC00) | ((VA & 0x000FF000) >> 10));
 val_D2 = ((PA & 0xFFFFF000) | (AP_bits << 4) | 2);

 *(UWORD32*)add_D1 = val_D1;
 *(UWORD32*)add_D2 = val_D2;
}

/*
-------------------------------------------------------------------------
        MMU_CoarseSmallPageError2                                      -
-------------------------------------------------------------------------
*/
void MMU_CoarseSmallPageError2(MMU_NAME_t mmu_name,
				UWORD32 PA,
				UWORD32 VA,
				UWORD32 TTB,
				UWORD32 page_table_base,
				AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFFC00) | 1);
 add_D2 = ((page_table_base & 0xFFFFFC00) | ((VA & 0x000FF000) >> 10));
 val_D2 = ((PA & 0xFFFFF000) | (AP_bits << 4));

 *(UWORD32*)add_D1 = val_D1;
 *(UWORD32*)add_D2 = val_D2;
}

/*
-------------------------------------------------------------------------
        MMU_FineSmallPageError1                                        -
-------------------------------------------------------------------------
*/
void MMU_FineSmallPageError1(MMU_NAME_t mmu_name,
			      UWORD32 PA,
			      UWORD32 VA,
			      UWORD32 TTB,
			      UWORD32 page_table_base,
			      AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2, i;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000));
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFFF000) | (AP_bits << 4) | 2);

 *(UWORD32*)add_D1 = val_D1;
  for (i = 0; i < 4; i++)
   {
     *(UWORD32*)(add_D2 + 4*i) = val_D2;
   }
}

/*
-------------------------------------------------------------------------
        MMU_FineSmallPageError2                                        -
-------------------------------------------------------------------------
*/
void MMU_FineSmallPageError2(MMU_NAME_t mmu_name,
			      UWORD32 PA,
			      UWORD32 VA,
			      UWORD32 TTB,
			      UWORD32 page_table_base,
			      AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2, i;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000) | 3);
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFFF000) | (AP_bits << 4));

 *(UWORD32*)add_D1 = val_D1;
  for (i = 0; i < 4; i++)
   {
     *(UWORD32*)(add_D2 + 4*i) = val_D2;
   }
}

/*
-------------------------------------------------------------------------
        MMU_FineTinyPageError1                                         -
-------------------------------------------------------------------------
*/
void MMU_FineTinyPageError1(MMU_NAME_t mmu_name,
			     UWORD32 PA,
			     UWORD32 VA,
			     UWORD32 TTB,
			     UWORD32 page_table_base,
			     AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000));
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFFFC00) | (AP_bits << 4) | 3);

 *(UWORD32*)add_D1 = val_D1;
 *(UWORD32*)add_D2 = val_D2;
}

/*
-------------------------------------------------------------------------
        MMU_FineTinyPageError2                                         -
-------------------------------------------------------------------------
*/
void MMU_FineTinyPageError2(MMU_NAME_t mmu_name,
			     UWORD32 PA,
			     UWORD32 VA,
			     UWORD32 TTB,
			     UWORD32 page_table_base,
			     AP_t AP_bits)
{
UWORD32 add_D1, val_D1, add_D2, val_D2;

 if (mmu_name == HSAB_MMU)
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 else if (mmu_name == LB_MMU)
   add_D1 = ((TTB & 0xFFFFFC00) | (((VA >> 20) << 2) & 0x3FF));
 else
   add_D1 = ((TTB & 0xFFFFF000) | (((VA >> 20) << 2) & 0xFFF));
 val_D1 = ((page_table_base & 0xFFFFF000) | 3);
 add_D2 = ((page_table_base & 0xFFFFF000) | ((VA & 0x000FFC00) >> 8));
 val_D2 = ((PA & 0xFFFFFC00) | (AP_bits << 4));

 *(UWORD32*)add_D1 = val_D1;
 *(UWORD32*)add_D2 = val_D2;
}

⌨️ 快捷键说明

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