Various changes made while offline. + bwrite sector argument is redundant; use b->sector. + reformatting of files for nicer PDF page breaks + distinguish between locked, unlocked inodes in type signatures + change FD_FILE to FD_INODE + move userinit (nee proc0init) to proc.c + move ROOTDEV to param.h + always parenthesize sizeof argument
This commit is contained in:
		
							parent
							
								
									3dcf889c1b
								
							
						
					
					
						commit
						eaea18cb9c
					
				
					 25 changed files with 637 additions and 669 deletions
				
			
		
							
								
								
									
										61
									
								
								bootmain.c
									
										
									
									
									
								
							
							
						
						
									
										61
									
								
								bootmain.c
									
										
									
									
									
								
							|  | @ -25,6 +25,7 @@ | |||
| //  * cmain() in this file takes over, 
 | ||||
| //    reads in the kernel and jumps to it.
 | ||||
| 
 | ||||
| //PAGEBREAK!
 | ||||
| #include "types.h" | ||||
| #include "elf.h" | ||||
| #include "x86.h" | ||||
|  | @ -32,7 +33,6 @@ | |||
| #define SECTSIZE  512 | ||||
| #define ELFHDR    ((struct elfhdr*) 0x10000) // scratch space
 | ||||
| 
 | ||||
| void readsect(void*, uint); | ||||
| void readseg(uint, uint, uint); | ||||
| 
 | ||||
| void | ||||
|  | @ -64,8 +64,37 @@ bad: | |||
|     ; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| waitdisk(void) | ||||
| { | ||||
|   // wait for disk reaady
 | ||||
|   while((inb(0x1F7) & 0xC0) != 0x40) | ||||
|     ; | ||||
| } | ||||
| 
 | ||||
| // Read a single sector at offset into dst.
 | ||||
| void | ||||
| readsect(void *dst, uint offset) | ||||
| { | ||||
|   // wait for disk to be ready
 | ||||
|   waitdisk(); | ||||
| 
 | ||||
|   outb(0x1F2, 1);   // count = 1
 | ||||
|   outb(0x1F3, offset); | ||||
|   outb(0x1F4, offset >> 8); | ||||
|   outb(0x1F5, offset >> 16); | ||||
|   outb(0x1F6, (offset >> 24) | 0xE0); | ||||
|   outb(0x1F7, 0x20);  // cmd 0x20 - read sectors
 | ||||
| 
 | ||||
|   // wait for disk to be ready
 | ||||
|   waitdisk(); | ||||
| 
 | ||||
|   // read a sector
 | ||||
|   insl(0x1F0, dst, SECTSIZE/4); | ||||
| } | ||||
| 
 | ||||
| // Read 'count' bytes at 'offset' from kernel into virtual address 'va'.
 | ||||
| // Might copy more than asked
 | ||||
| // Might copy more than asked.
 | ||||
| void | ||||
| readseg(uint va, uint count, uint offset) | ||||
| { | ||||
|  | @ -90,31 +119,3 @@ readseg(uint va, uint count, uint offset) | |||
|   } | ||||
| } | ||||
| 
 | ||||
| void | ||||
| waitdisk(void) | ||||
| { | ||||
|   // wait for disk reaady
 | ||||
|   while((inb(0x1F7) & 0xC0) != 0x40) | ||||
|     ; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| readsect(void *dst, uint offset) | ||||
| { | ||||
|   // wait for disk to be ready
 | ||||
|   waitdisk(); | ||||
| 
 | ||||
|   outb(0x1F2, 1);   // count = 1
 | ||||
|   outb(0x1F3, offset); | ||||
|   outb(0x1F4, offset >> 8); | ||||
|   outb(0x1F5, offset >> 16); | ||||
|   outb(0x1F6, (offset >> 24) | 0xE0); | ||||
|   outb(0x1F7, 0x20);  // cmd 0x20 - read sectors
 | ||||
| 
 | ||||
|   // wait for disk to be ready
 | ||||
|   waitdisk(); | ||||
| 
 | ||||
|   // read a sector
 | ||||
|   insl(0x1F0, dst, SECTSIZE/4); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 rsc
						rsc