diff options
author | rtm <rtm> | 2006-07-21 13:18:04 +0000 |
---|---|---|
committer | rtm <rtm> | 2006-07-21 13:18:04 +0000 |
commit | 11a9947f1a68e23001690955d8d0975ad4d6cf0c (patch) | |
tree | ceb2f6bde6a8c88e3e9e4d022a23185d8cb6d37e /ide.c | |
parent | 29270816285978e44b317c6e5c7bfa7a89ec24dd (diff) | |
download | xv6-labs-11a9947f1a68e23001690955d8d0975ad4d6cf0c.tar.gz xv6-labs-11a9947f1a68e23001690955d8d0975ad4d6cf0c.tar.bz2 xv6-labs-11a9947f1a68e23001690955d8d0975ad4d6cf0c.zip |
bread
iget
mkfs makes a file system image
put this in your .bochsrc:
ata0-slave: type=disk, mode=flat, path="fs.img", cylinders=1024, heads=1, spt=1
Diffstat (limited to 'ide.c')
-rw-r--r-- | ide.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -84,7 +84,7 @@ ide_start_request (void) { struct ide_request *r; - if (head == tail) { + if (head != tail) { r = &request[tail]; ide_wait_ready(0); outb(0x3f6, 0); @@ -98,7 +98,7 @@ ide_start_request (void) } void * -ide_start_read(uint secno, void *dst, uint nsecs) +ide_start_read(int diskno, uint secno, void *dst, uint nsecs) { struct ide_request *r; if(!holding(&ide_lock)) @@ -114,12 +114,12 @@ ide_start_read(uint secno, void *dst, uint nsecs) r->secno = secno; r->dst = dst; r->nsecs = nsecs; - r->diskno = 0; - - ide_start_request(); + r->diskno = diskno; head = (head + 1) % NREQUEST; + ide_start_request(); + return r; } @@ -129,6 +129,9 @@ ide_finish_read(void *c) int r = 0; struct ide_request *req = (struct ide_request *) c; + if(c != &request[tail]) + panic("ide_finish_read"); + if(!holding(&ide_lock)) panic("ide_start_read: not holding ide_lock"); for (; req->nsecs > 0; req->nsecs--, req->dst += 512) { @@ -148,10 +151,9 @@ ide_finish_read(void *c) } int -ide_write(uint secno, const void *src, uint nsecs) +ide_write(int diskno, uint secno, const void *src, uint nsecs) { int r; - int diskno = 0; if(nsecs > 256) panic("ide_write"); |