summaryrefslogtreecommitdiff
path: root/device/ramdisk.h
diff options
context:
space:
mode:
Diffstat (limited to 'device/ramdisk.h')
-rw-r--r--device/ramdisk.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/device/ramdisk.h b/device/ramdisk.h
new file mode 100644
index 00000000..3a232460
--- /dev/null
+++ b/device/ramdisk.h
@@ -0,0 +1,47 @@
+#ifndef _KERN_RAMDISK_H_
+#define _KERN_RAMDISK_H_
+
+#include <vm/pmap.h>
+#include <device/io_req.h>
+#include <device/conf.h>
+
+/* Maximum number of ramdisk devices */
+#define RAMDISK_MAX 4
+
+/* The block size used (userspace requires 512) */
+#define RAMDISK_BLOCKSZ 512
+
+/* Name associated to the ramdisk major */
+#define RAMDISK_NAME "rd"
+#define RAMDISK_NAMESZ (sizeof RAMDISK_NAME + sizeof (int) * 3 + 1)
+
+/* Create a new ramdisk of the given size. On success, if out_no and/or out_ptr
+ * are not NULL, the device number and pointer to the ramdisk's data are stored
+ * there. Returns D_SUCCESS or D_NO_MEMORY. */
+int ramdisk_create(vm_size_t size, const void *initdata, int *out_no);
+
+/* Device operations */
+int ramdisk_open(dev_t, int, io_req_t);
+int ramdisk_getstat(dev_t, dev_flavor_t, dev_status_t, mach_msg_type_number_t *);
+int ramdisk_read(dev_t, io_req_t);
+int ramdisk_write(dev_t, io_req_t);
+vm_offset_t ramdisk_mmap(dev_t, vm_offset_t, vm_prot_t);
+
+/* dev_ops initializer to be used from <machine>/conf.c */
+#define RAMDISK_DEV_OPS { \
+ .d_name = RAMDISK_NAME, \
+ .d_open = ramdisk_open, \
+ .d_close = nulldev_close, \
+ .d_read = ramdisk_read, \
+ .d_write = ramdisk_write, \
+ .d_getstat = ramdisk_getstat, \
+ .d_setstat = nulldev_setstat, \
+ .d_mmap = ramdisk_mmap, \
+ .d_async_in = nodev, \
+ .d_reset = nulldev, \
+ .d_port_death = nulldev_portdeath, \
+ .d_subdev = 0, \
+ .d_dev_info = nodev, \
+ }
+
+#endif