示例#1
0
void PageTable2 (TPageTable *This, uint32 MemSize)
{
	This->TableAllocated = true;
	This->Table = (TARMV6MMU_LEVEL1_SECTION_DESCRIPTOR *) PageAlloc();

	for (unsigned EntryIndex = 0; EntryIndex < SDRAM_SIZE_MBYTE; EntryIndex++)
	{
		uint32 BaseAddress = MEGABYTE * EntryIndex;

		TARMV6MMU_LEVEL1_SECTION_DESCRIPTOR* Entry = &This->Table[EntryIndex];

		Entry->Value10	= 2;
		Entry->BBit	= 1;
		Entry->CBit	= 1;
		Entry->XNBit = 0;
		Entry->Domain = 0;
		Entry->IMPBit = 0;
		Entry->AP = AP_SYSTEM_ACCESS;
		Entry->TEX = 0;
		Entry->APXBit = APX_RW_ACCESS;
		Entry->SBit	= 0;
		Entry->NGBit = 0;
		Entry->Value0 = 0;
		Entry->SBZ = 0;
		Entry->Base	= ARMV6MMUL1SECTIONBASE(BaseAddress);
	}

	CleanDataCache ();
	DataSyncBarrier ();
}
示例#2
0
void PageTable(TPageTable* This)
{
	This->TableAllocated = false;
	This->Table = (TARMV6MMU_LEVEL1_SECTION_DESCRIPTOR*) MEM_PAGE_TABLE1;

	for (unsigned EntryIndex = 0; EntryIndex < 4096; EntryIndex++)
	{
		uint32 nBaseAddress = MEGABYTE * EntryIndex;
		
		TARMV6MMU_LEVEL1_SECTION_DESCRIPTOR* Entry = &This->Table[EntryIndex];

		Entry->Value10	= 2;
		Entry->BBit = 1;
		Entry->CBit = 0;
		Entry->XNBit = 0;
		Entry->Domain = 0;
		Entry->IMPBit = 0;
		Entry->AP = AP_SYSTEM_ACCESS;
		Entry->TEX = 0;
		Entry->APXBit = APX_RW_ACCESS;
		Entry->SBit = 0;
		Entry->NGBit = 0;
		Entry->Value0 = 0;
		Entry->SBZ = 0;
		Entry->Base	= ARMV6MMUL1SECTIONBASE(nBaseAddress);
	}

	CleanDataCache ();
	DataSyncBarrier ();
}
示例#3
0
void PageTable2 (TPageTable *pThis, u32 nMemSize)
{
	assert (pThis != 0);

	pThis->m_bTableAllocated = TRUE;
	pThis->m_pTable = (TARMV6MMU_LEVEL1_SECTION_DESCRIPTOR *) palloc ();

	assert (pThis->m_pTable != 0);
	assert (((u32) pThis->m_pTable & 0xFFF) == 0);

	for (unsigned nEntry = 0; nEntry < SDRAM_SIZE_MBYTE; nEntry++)
	{
		u32 nBaseAddress = MEGABYTE * nEntry;

		TARMV6MMU_LEVEL1_SECTION_DESCRIPTOR *pEntry = &pThis->m_pTable[nEntry];

		// outer and inner write back, no write allocate
		pEntry->Value10	= 2;
		pEntry->BBit	= 1;
		pEntry->CBit	= 1;
		pEntry->XNBit	= 0;
		pEntry->Domain	= 0;
		pEntry->IMPBit	= 0;
		pEntry->AP	= AP_SYSTEM_ACCESS;
		pEntry->TEX	= 0;
		pEntry->APXBit	= APX_RW_ACCESS;
		pEntry->SBit	= 0;
		pEntry->NGBit	= 0;
		pEntry->Value0	= 0;
		pEntry->SBZ	= 0;
		pEntry->Base	= ARMV6MMUL1SECTIONBASE (nBaseAddress);

		extern u8 _etext;
		if (nBaseAddress >= (u32) &_etext)
		{
			pEntry->XNBit = 1;

			if (nBaseAddress >= nMemSize)
			{
				// shared device
				pEntry->BBit  = 1;
				pEntry->CBit  = 0;
				pEntry->TEX   = 0;
				pEntry->SBit  = 1;
			}
		}
	}

	CleanDataCache ();
	DataSyncBarrier ();
}
示例#4
0
void PageTable (TPageTable *pThis)
{
	assert (pThis != 0);

	pThis->m_bTableAllocated = FALSE;
	pThis->m_pTable = (TARMV6MMU_LEVEL1_SECTION_DESCRIPTOR *) MEM_PAGE_TABLE1;

	assert (((u32) pThis->m_pTable & 0x3FFF) == 0);

	for (unsigned nEntry = 0; nEntry < 4096; nEntry++)
	{
		u32 nBaseAddress = MEGABYTE * nEntry;
		
		TARMV6MMU_LEVEL1_SECTION_DESCRIPTOR *pEntry = &pThis->m_pTable[nEntry];

		// shared device
		pEntry->Value10	= 2;
		pEntry->BBit    = 1;
		pEntry->CBit    = 0;
		pEntry->XNBit   = 0;
		pEntry->Domain	= 0;
		pEntry->IMPBit	= 0;
		pEntry->AP	= AP_SYSTEM_ACCESS;
		pEntry->TEX     = 0;
		pEntry->APXBit	= APX_RW_ACCESS;
		pEntry->SBit    = 1;
		pEntry->NGBit	= 0;
		pEntry->Value0	= 0;
		pEntry->SBZ	= 0;
		pEntry->Base	= ARMV6MMUL1SECTIONBASE (nBaseAddress);

		if (nEntry >= SDRAM_SIZE_MBYTE)
		{
			pEntry->XNBit = 1;
		}
	}

	CleanDataCache ();
	DataSyncBarrier ();
}