bootloader reads into a physical address (not a virtual address)
This commit is contained in:
parent
fa81545f1c
commit
cd3d739e6f
1 changed files with 7 additions and 7 deletions
14
bootmain.c
14
bootmain.c
|
@ -73,17 +73,17 @@ readsect(void *dst, uint offset)
|
||||||
insl(0x1F0, dst, SECTSIZE/4);
|
insl(0x1F0, dst, SECTSIZE/4);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read 'count' bytes at 'offset' from kernel into virtual address 'va'.
|
// Read 'count' bytes at 'offset' from kernel into physical address 'pa'.
|
||||||
// Might copy more than asked.
|
// Might copy more than asked.
|
||||||
void
|
void
|
||||||
readseg(uchar* va, uint count, uint offset)
|
readseg(uchar* pa, uint count, uint offset)
|
||||||
{
|
{
|
||||||
uchar* eva;
|
uchar* epa;
|
||||||
|
|
||||||
eva = va + count;
|
epa = pa + count;
|
||||||
|
|
||||||
// Round down to sector boundary.
|
// Round down to sector boundary.
|
||||||
va -= offset % SECTSIZE;
|
pa -= offset % SECTSIZE;
|
||||||
|
|
||||||
// Translate from bytes to sectors; kernel starts at sector 1.
|
// Translate from bytes to sectors; kernel starts at sector 1.
|
||||||
offset = (offset / SECTSIZE) + 1;
|
offset = (offset / SECTSIZE) + 1;
|
||||||
|
@ -91,6 +91,6 @@ readseg(uchar* va, uint count, uint offset)
|
||||||
// If this is too slow, we could read lots of sectors at a time.
|
// If this is too slow, we could read lots of sectors at a time.
|
||||||
// We'd write more to memory than asked, but it doesn't matter --
|
// We'd write more to memory than asked, but it doesn't matter --
|
||||||
// we load in increasing order.
|
// we load in increasing order.
|
||||||
for(; va < eva; va += SECTSIZE, offset++)
|
for(; pa < epa; pa += SECTSIZE, offset++)
|
||||||
readsect(va, offset);
|
readsect(pa, offset);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue