| plan 9 kernel history: overview | file list | diff list |
1997/0329/pc/memory.c (diff list | history)
| 1997/0328/sys/src/9/pc/memory.c:67,73 – 1997/0329/sys/src/9/pc/memory.c:67,105 (short | long | prev | next) | ||
| 1997/0327 | &mapumb[63], }; | |
| 1997/0329 | static Map mapumbr[8]; static RMap rmapumbr = { "UMB device memory", mapumbr, &mapumbr[7], }; #define notdef #ifdef notdef | |
| 1997/0327 | void | |
| 1997/0329 | dumpmembank(void) { Map *mp; ulong maxpa, maxpa1, maxpa2; maxpa = (nvramread(0x18)<<8)|nvramread(0x17); maxpa1 = (nvramread(0x31)<<8)|nvramread(0x30); maxpa2 = (nvramread(0x16)<<8)|nvramread(0x15); print("maxpa = %uX -> %uX, maxpa1 = %uXm maxpa2 = %uX\n", maxpa, MB+maxpa*KB, maxpa1, maxpa2); for(mp = rmapram.map; mp->size; mp++) print("%8.8uX %8.8uX %8.8uX\n", mp->addr, mp->size, mp->addr+mp->size); for(mp = rmapumb.map; mp->size; mp++) print("%8.8uX %8.8uX %8.8uX\n", mp->addr, mp->size, mp->addr+mp->size); for(mp = rmapumbr.map; mp->size; mp++) print("%8.8uX %8.8uX %8.8uX\n", mp->addr, mp->size, mp->addr+mp->size); for(mp = rmapupa.map; mp->size; mp++) print("%8.8uX %8.8uX %8.8uX\n", mp->addr, mp->size, mp->addr+mp->size); } #endif /* notdef */ void | |
| 1997/0327 | mapfree(RMap* rmap, ulong addr, int size) { Map *mp; | |
| 1997/0328/sys/src/9/pc/memory.c:98,104 – 1997/0329/sys/src/9/pc/memory.c:130,137 | ||
| 1997/0327 | } else do{ if(mp >= rmap->mapend){ | |
| 1997/0329 | print("mapfree: %s: losing 0x%uX, %d\n", rmap->name, addr, size); | |
| 1997/0327 | break; } t = mp->addr; | |
| 1997/0328/sys/src/9/pc/memory.c:177,193 – 1997/0329/sys/src/9/pc/memory.c:210,229 | ||
| 1997/0327 | */ p = KADDR(0xC8000); while(p < (uchar*)KADDR(0xE0000)){ | |
| 1997/0329 | if(p[0] != 0xCC && p[2*KB-1] != 0xCC){ p[0] = 0x55; p[1] = 0xAA; p[2] = 4; if(p[0] == 0x55 && p[1] == 0xAA){ p += p[2]*512; continue; } | |
| 1997/0327 | mapfree(&rmapumb, PADDR(p), 2*KB); | |
| 1997/0329 | } else mapfree(&rmapumbr, PADDR(p), 2*KB); | |
| 1997/0327 | p += 2*KB; } | |
| 1997/0328/sys/src/9/pc/memory.c:201,207 – 1997/0329/sys/src/9/pc/memory.c:237,243 | ||
| 1997/0327 | } static void | |
| 1997/0329 | ramscan(ulong maxmem) | |
| 1997/0327 | { ulong *k0, kzero, map, maxpa, pa, *pte, *table, *va, x; int nvalid[NMemType]; | |
| 1997/0328/sys/src/9/pc/memory.c:220,226 – 1997/0329/sys/src/9/pc/memory.c:256,261 | ||
| 1997/0327 | * the BIOS data area. */ x = PADDR(CPU0MACH+BY2PG); | |
| 1997/0328/sys/src/9/pc/memory.c:230,243 – 1997/0329/sys/src/9/pc/memory.c:265,284 | ||
| 1997/0327 | * at least 24MB in case there's a memory gap (up to 8MB) below 16MB; * in this case the memory from the gap is remapped to the top of * memory. | |
| 1997/0329 | * The value in CMOS is supposed to be the number of KB above 1MB. | |
| 1997/0327 | */ | |
| 1997/0329 | if(maxmem == 0){ x = (nvramread(0x18)<<8)|nvramread(0x17); if(x == 0 || x >= (63*KB)) maxpa = MemMaxMB*MB; else maxpa = MB+x*KB; if(maxpa < 24*MB) maxpa = 24*MB; maxmem = MemMaxMB*MB; } else maxpa = maxmem; | |
| 1997/0327 | /* * March up memory from the end of the loaded kernel to maxpa | |
| 1997/0328/sys/src/9/pc/memory.c:331,338 – 1997/0329/sys/src/9/pc/memory.c:372,379 | ||
| 1997/0327 | } if(map) mapfree(&rmapram, map, BY2PG); | |
| 1997/0329 | if(pa < maxmem) mapfree(&rmapupa, pa, maxmem-pa); | |
| 1997/0327 | *k0 = kzero; } | |
| 1997/0328/sys/src/9/pc/memory.c:373,381 – 1997/0329/sys/src/9/pc/memory.c:414,424 | ||
| 1997/0327 | mapfree(&xrmapupa, addr, pa-addr); } | |
| 1997/0329 | ||
| 1997/0327 | void | |
| 1997/0329 | meminit(ulong maxmem) | |
| 1997/0327 | { | |
| 1997/0329 | Map *mp, *xmp; | |
| 1997/0327 | ulong pa, *pte; /* | |
| 1997/0328/sys/src/9/pc/memory.c:395,429 – 1997/0329/sys/src/9/pc/memory.c:438,447 | ||
| 1997/0327 | mmuflushtlb(PADDR(m->pdb)); umbscan(); | |
| 1997/0329 | dumpmembank(); ramscan(maxmem); | |
| 1997/0327 | upainit(); | |
| 1997/0328/sys/src/9/pc/memory.c:460,465 – 1997/0329/sys/src/9/pc/memory.c:478,494 | ||
| 1997/0327 | umbfree(ulong addr, int size) { mapfree(&rmapumb, addr & ~KZERO, size); | |
| 1997/0329 | } ulong umbrmalloc(ulong addr, int size, int align) { ulong a; if(a = mapalloc(&rmapumbr, addr, size, align)) return KZERO|a; return 0; | |
| 1997/0327 | } ulong | |