summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/sys/dms/dms_engine.c10
-rw-r--r--src/sys/include/dms/dms.h7
-rw-r--r--src/sys/include/sys/dms.h20
3 files changed, 31 insertions, 6 deletions
diff --git a/src/sys/dms/dms_engine.c b/src/sys/dms/dms_engine.c
index 35388cc..d2506a3 100644
--- a/src/sys/dms/dms_engine.c
+++ b/src/sys/dms/dms_engine.c
@@ -34,11 +34,13 @@
#include <os/systm.h>
#include <os/kalloc.h>
#include <dms/dms.h>
+#include <string.h>
static ssize_t
dms_io(struct dms_frame *dfp)
{
struct dms_disk *dp;
+ struct dms_diskinfo info;
size_t len;
ssize_t retval = -ENXIO;
int error;
@@ -81,6 +83,14 @@ dms_io(struct dms_frame *dfp)
retval = dms_write(dp, kbuf, dfp->offset, dfp->len);
break;
+ case DMS_OPC_QUERY:
+ memcpy(info.name, dp->name, sizeof(info.name));
+ info.bsize = dp->bsize;
+ info.id = dp->id;
+ if (dfp->len > sizeof(info))
+ dfp->len = sizeof(info);
+ retval = copyout(&info, dfp->buf, dfp->len);
+ break;
}
kfree(kbuf);
diff --git a/src/sys/include/dms/dms.h b/src/sys/include/dms/dms.h
index 8453723..835f667 100644
--- a/src/sys/include/dms/dms.h
+++ b/src/sys/include/dms/dms.h
@@ -34,6 +34,7 @@
#include <sys/queue.h>
#include <sys/cdefs.h>
#include <sys/types.h>
+#include <sys/dms.h>
/*
* Maximum attached disks, from kconf
@@ -49,12 +50,6 @@ __static_assert(
"maxiumum disks cannot be zro!"
);
-/* Parameters */
-#define DISKNAME_MAX 128 /* Disk name maxlen */
-
-/* ID of the disk */
-typedef uint16_t disk_id_t;
-
/* Forward declarations */
struct dms_disk;
diff --git a/src/sys/include/sys/dms.h b/src/sys/include/sys/dms.h
index b4d291d..fdc290a 100644
--- a/src/sys/include/sys/dms.h
+++ b/src/sys/include/sys/dms.h
@@ -36,8 +36,28 @@
#include <stddef.h>
#endif /* !_KERNEL */
+#define DISKNAME_MAX 128 /* Disk name maxlen */
+
#define DMS_OPC_READ 0x00 /* Read from drive */
#define DMS_OPC_WRITE 0x01 /* Write to drive */
+#define DMS_OPC_QUERY 0x02 /* Query a drive */
+
+/* ID of the disk */
+typedef uint16_t disk_id_t;
+
+/*
+ * Represents disk information that can be requested
+ * from a device with a query
+ *
+ * @name: Name of disk
+ * @bsize: Block size
+ * @id: ID of disk
+ */
+struct dms_diskinfo {
+ char name[DISKNAME_MAX];
+ uint16_t bsize;
+ disk_id_t id;
+};
/*
* Represents data that can be sent between the