aboutsummaryrefslogtreecommitdiff
path: root/kernel/drivers/memdevs.c
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2024-03-02 23:05:26 +0000
committersotech117 <michael_foiani@brown.edu>2024-03-02 23:05:26 +0000
commit8c2e0ce946012a4275e8dfa9d8dfd1d5a68d6e3e (patch)
tree1877a33c6488a5b16fb7962e1ffb0f72f13a5052 /kernel/drivers/memdevs.c
parent9c90e73fda0d5df2e1f11b32d459d3bb07a63192 (diff)
decent coding session
Diffstat (limited to 'kernel/drivers/memdevs.c')
-rw-r--r--kernel/drivers/memdevs.c60
1 files changed, 53 insertions, 7 deletions
diff --git a/kernel/drivers/memdevs.c b/kernel/drivers/memdevs.c
index 50815d3..815143a 100644
--- a/kernel/drivers/memdevs.c
+++ b/kernel/drivers/memdevs.c
@@ -43,7 +43,31 @@ chardev_ops_t zero_dev_ops = {.read = zero_read,
*/
void memdevs_init()
{
- NOT_YET_IMPLEMENTED("DRIVERS: memdevs_init");
+ // NOT_YET_IMPLEMENTED("DRIVERS: memdevs_init");
+
+ // create chardev_t's for null and zero
+ chardev_t *null_dev = kmalloc(sizeof(chardev_t));
+ if (null_dev == NULL)
+ {
+ dbg(DBG_DISK, "ERROR: kmalloc failed on null_dev in memdevs_init\n");
+ return;
+ }
+ chardev_t *zero_dev = kmalloc(sizeof(chardev_t));
+ if (zero_dev == NULL)
+ {
+ dbg(DBG_DISK, "ERROR: kmalloc failed on zero_dev in memdevs_init\n");
+ return;
+ }
+
+ // fill them in
+ null_dev->cd_id = MEM_NULL_DEVID;
+ null_dev->cd_ops = &null_dev_ops;
+ zero_dev->cd_id = MEM_ZERO_DEVID;
+ zero_dev->cd_ops = &zero_dev_ops;
+
+ // register them
+ chardev_register(null_dev);
+ chardev_register(zero_dev);
}
/**
@@ -58,8 +82,9 @@ void memdevs_init()
*/
static ssize_t null_read(chardev_t *dev, size_t pos, void *buf, size_t count)
{
- NOT_YET_IMPLEMENTED("DRIVERS: null_read");
- return -ENOMEM;
+ // NOT_YET_IMPLEMENTED("DRIVERS: null_read");
+ // TODO: ask about buffer checking
+ return 0; // return reading no bytes
}
/**
@@ -76,8 +101,18 @@ static ssize_t null_read(chardev_t *dev, size_t pos, void *buf, size_t count)
static ssize_t null_write(chardev_t *dev, size_t pos, const void *buf,
size_t count)
{
- NOT_YET_IMPLEMENTED("DRIVERS: null_write");
- return -ENOMEM;
+ // NOT_YET_IMPLEMENTED("DRIVERS: null_write");
+
+ // check if the buffer is NULL
+ if (buf == NULL)
+ {
+ return -EINVAL;
+ }
+
+ // there is no true writing, so just do nothing here
+
+ // return the number of bytes written
+ return count;
}
/**
@@ -93,8 +128,19 @@ static ssize_t null_write(chardev_t *dev, size_t pos, const void *buf,
*/
static ssize_t zero_read(chardev_t *dev, size_t pos, void *buf, size_t count)
{
- NOT_YET_IMPLEMENTED("DRIVERS: zero_read");
- return 0;
+ // NOT_YET_IMPLEMENTED("DRIVERS: zero_read");
+
+ // check if the buffer is NULL
+ if (buf == NULL)
+ {
+ return -EINVAL;
+ }
+
+ // fill the buffer with zeros
+ memset(buf, 0, count);
+
+ // return the number of bytes read
+ return count;
}
/**