Skip to content

Commit

Permalink
Small change to support RWMUL and WRMUL. Now xv6 truly works with a b…
Browse files Browse the repository at this point in the history
…lock size

that is a multiple of the sector size.
  • Loading branch information
kaashoek committed Aug 18, 2016
1 parent 19f6541 commit 4a3576b
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions ide.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

#define IDE_CMD_READ 0x20
#define IDE_CMD_WRITE 0x30
#define IDE_CMD_RDMUL 0xc4
#define IDE_CMD_WRMUL 0xc5

// idequeue points to the buf now being read/written to the disk.
// idequeue->qnext points to the next buf to be processed.
Expand Down Expand Up @@ -77,7 +79,9 @@ idestart(struct buf *b)
panic("incorrect blockno");
int sector_per_block = BSIZE/SECTOR_SIZE;
int sector = b->blockno * sector_per_block;

int read_cmd = (sector_per_block == 1) ? IDE_CMD_READ : IDE_CMD_RDMUL;
int write_cmd = (sector_per_block == 1) ? IDE_CMD_WRITE : IDE_CMD_WRMUL;

if (sector_per_block > 7) panic("idestart");

idewait(0);
Expand All @@ -88,10 +92,10 @@ idestart(struct buf *b)
outb(0x1f5, (sector >> 16) & 0xff);
outb(0x1f6, 0xe0 | ((b->dev&1)<<4) | ((sector>>24)&0x0f));
if(b->flags & B_DIRTY){
outb(0x1f7, IDE_CMD_WRITE);
outb(0x1f7, write_cmd);
outsl(0x1f0, b->data, BSIZE/4);
} else {
outb(0x1f7, IDE_CMD_READ);
outb(0x1f7, read_cmd);
}
}

Expand Down

0 comments on commit 4a3576b

Please sign in to comment.