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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Frans Kaashoek
						Frans Kaashoek