📄 mmu.c
字号:
*/
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 + -