// On-disk file system format.
-// This header is shared between kernel and user space.
+// Both the kernel and user programs use this header file.
// Block 0 is unused.
// Block 1 is super block.
uint dev; // Device number
uint inum; // Inode number
int ref; // Reference count
- int flags; // I_BUSY, I_VALID
+ int flags; // I_BUSY, I_VALID
short type; // copy of disk inode
short major;
#define IDE_CMD_READ 0x20
#define IDE_CMD_WRITE 0x30
-// IDE request queue.
// ide_queue points to the buf now being read/written to the disk.
// ide_queue->qnext points to the next buf to be processed.
-// Must hold ide_lock while manipulating queue.
+// You must hold ide_lock while manipulating queue.
static struct spinlock ide_lock;
static struct buf *ide_queue;
{
acquire(&ide_lock);
if(ide_queue){
- //cprintf("intr %x\n", ide_queue);
if((ide_queue->flags & B_WRITE) == 0)
if(ide_wait_ready(1) >= 0)
insl(0x1F0, ide_queue->data, 512/4);
{
if(ide_queue){
ide_wait_ready(0);
- //cprintf("start %x\n", ide_queue);
outb(0x3f6, 0); // generate interrupt
outb(0x1F2, 1); // number of sectors
outb(0x1F3, ide_queue->sector & 0xFF);
b->done = 0;
b->qnext = 0;
- // cprintf("enqueue %x %x\n", b, ide_queue);
-
// append b to ide_queue
pp = &ide_queue;
while(*pp)