Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

missing file memide.c

  • Loading branch information...
commit 4fa8614db068e92c2628456df7a7d5483e4afe5b 1 parent 417c371
@rsc rsc authored
Showing with 58 additions and 0 deletions.
  1. +58 −0 memide.c
View
58 memide.c
@@ -0,0 +1,58 @@
+// Fake IDE disk; stores blocks in memory.
+// Useful for running kernel without scratch disk.
+
+#include "types.h"
+#include "defs.h"
+#include "param.h"
+#include "mmu.h"
+#include "proc.h"
+#include "x86.h"
+#include "traps.h"
+#include "spinlock.h"
+#include "buf.h"
+
+extern uchar _binary_fs_img_start[], _binary_fs_img_size[];
+
+static int disksize;
+static uchar *memdisk;
+
+void
+ideinit(void)
+{
+ memdisk = _binary_fs_img_start;
+ disksize = (uint)_binary_fs_img_size/512;
+}
+
+// Interrupt handler.
+void
+ideintr(void)
+{
+ // no-op
+}
+
+// Sync buf with disk.
+// If B_DIRTY is set, write buf to disk, clear B_DIRTY, set B_VALID.
+// Else if B_VALID is not set, read buf from disk, set B_VALID.
+void
+iderw(struct buf *b)
+{
+ uchar *p;
+
+ if(!(b->flags & B_BUSY))
+ panic("iderw: buf not busy");
+ if((b->flags & (B_VALID|B_DIRTY)) == B_VALID)
+ panic("iderw: nothing to do");
+ if(b->dev != 1)
+ panic("iderw: request not for disk 1");
+ if(b->sector >= disksize)
+ panic("iderw: sector out of range");
+
+ p = memdisk + b->sector*512;
+
+ if(b->flags & B_DIRTY){
+ b->flags &= ~B_DIRTY;
+ memmove(p, b->data, 512);
+ } else
+ memmove(b->data, p, 512);
+ b->flags |= B_VALID;
+}
Please sign in to comment.
Something went wrong with that request. Please try again.