~kris/9p

9hist

e08c0f98f0ce491b65857608fe565bdb376dbe70 — David du Colombier 26 years ago f3b8248
Plan 9 from Bell Labs 2000-09-09
1 files changed, 11 insertions(+), 8 deletions(-)

M bitsy/mmu.c
M bitsy/mmu.c => bitsy/mmu.c +11 -8
@@ 94,30 94,33 @@ mmuinit(void)
 *  map special use space 
 */
ulong*
mapspecial(ulong addr, int len)
mapspecial(ulong physaddr, int len)
{
	ulong *t;
	ulong a, i;
	ulong virtaddr, i;

	/* first see if we've mapped it somewhere, the first hole means we're done */
	for(a = REGZERO; a < REGTOP; a += OneMeg){
		if((l1table[a>>20] & L1TypeMask) != L1PageTable){
	for(virtaddr = REGZERO; virtaddr < REGTOP; virtaddr += OneMeg){
		if((l1table[virtaddr>>20] & L1TypeMask) != L1PageTable){
			/* create a page table and break */
			t = xspanalloc(BY2PG, 1024, 0);
			memzero(t, BY2PG, 0);
			l1table[a>>20] = L1PageTable | L1Domain0 | (((ulong)t) & L1PTBaseMask);
			l1table[virtaddr>>20] = L1PageTable | L1Domain0 | (((ulong)t) & L1PTBaseMask);
			break;
		}
		t = (ulong*)(l1table[a>>20] & L1PTBaseMask);
		t = (ulong*)(l1table[virtaddr>>20] & L1PTBaseMask);
		for(i = 0; i < OneMeg; i += BY2PG){
			if((t[a>>20] & L2TypeMask) != L2SmallPage)
			if((t[virtaddr>>20] & L2TypeMask) != L2SmallPage)
				break;
		}
		if(i < OneMeg){
			a += i;
			virtaddr += i;
			break;
		}
	}

	/* we get here if no entry was found mapping this physical address */
	
}

void