summaryrefslogtreecommitdiff
path: root/ide.c
diff options
context:
space:
mode:
authorrtm <rtm>2006-07-21 13:18:04 +0000
committerrtm <rtm>2006-07-21 13:18:04 +0000
commit11a9947f1a68e23001690955d8d0975ad4d6cf0c (patch)
treeceb2f6bde6a8c88e3e9e4d022a23185d8cb6d37e /ide.c
parent29270816285978e44b317c6e5c7bfa7a89ec24dd (diff)
downloadxv6-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.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/ide.c b/ide.c
index 5b75053..291ab83 100644
--- a/ide.c
+++ b/ide.c
@@ -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");