DeviceQueues: interface changes and renaming
authorRoni Häcki <roni.haecki@inf.ethz.ch>
Fri, 15 Jul 2016 14:14:23 +0000 (16:14 +0200)
committerRoni Häcki <roni.haecki@inf.ethz.ch>
Fri, 15 Jul 2016 14:14:23 +0000 (16:14 +0200)
Signed-off-by: Roni Häcki <roni.haecki@inf.ethz.ch>

include/device_interfaces/device_queue_interface.h [deleted file]
include/devif/queue_interface.h [new file with mode: 0644]
lib/devif/Hakefile [moved from lib/device_interfaces/Hakefile with 86% similarity]
lib/devif/dqi_debug.h [moved from lib/device_interfaces/dqi_debug.h with 100% similarity]
lib/devif/queue_interface.c [moved from lib/device_interfaces/device_queue_interface.c with 54% similarity]
lib/devif/region.c [moved from lib/device_interfaces/region.c with 100% similarity]
lib/devif/region.h [moved from lib/device_interfaces/region.h with 100% similarity]
lib/devif/region_pool.c [moved from lib/device_interfaces/region_pool.c with 100% similarity]
lib/devif/region_pool.h [moved from lib/device_interfaces/region_pool.h with 100% similarity]

diff --git a/include/device_interfaces/device_queue_interface.h b/include/device_interfaces/device_queue_interface.h
deleted file mode 100644 (file)
index 59d259d..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (c) 2016 ETH Zurich.
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached LICENSE file.
- * If you do not find this file, copies can be found by writing to:
- * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
- */
-#ifndef DEVICE_QUEUE_INTERFACE_H_
-#define DEVICE_QUEUE_INTERFACE_H_ 1
-
-
-#include <barrelfish/barrelfish.h>
-
-#define MAX_DEVICE_NAME 256
-
-typedef uint32_t regionid_t;
-typedef uint32_t bufferid_t;
-
-struct region_pool;
-
-/**
- * Represent the device queue itself
- */
-struct device_queue {
-
-    uint32_t queue_id;
-
-    // device type
-    uint8_t device_type;
-
-    // name of the device
-    char device_name[MAX_DEVICE_NAME];
-    // pointer to device queue state
-    void* q_state;
-    // Region management
-    struct region_pool* pool;
-    //TODO Other state needed ...
-};
-
-
-struct device_queue_buffer {
-    // region id to which the buffer belongs
-    regionid_t region_id;
-    // id within the region
-    bufferid_t buffer_id;
-    // physical base address of the buffer
-    lpaddr_t base;
-    // length of the buffer
-    size_t len;
-    // READ/WRITE permissions
-    uint8_t flags;
-    // buffer chaining for dst, result etc.
-    struct device_queue_buffer* next;
-};
-
-/*
- * ===========================================================================
- * Device queue creation and destruction
- * ===========================================================================
- */
-
-
- /**
-  * @brief creates a queue 
-  *
-  * @param q             Return pointer to the device_queue (handle)
-  * @param device_name   Device name of the device to which this queue belongs
-  *                      (Driver itself is running in a separate process)
-  * @param misc          Anything you can think of that makes sense for the device
-  *                      and its driver?
-  *
-  * @returns error on failure or SYS_ERR_OK on success
-  */
-
-errval_t device_queue_create(struct device_queue **q,
-                             char* device_name,
-                             char* misc);
-
-
- /**
-  * @brief destroys the device queue
-  *
-  * @param q           The queue state to free (and the device queue to be 
-                       shut down in the driver)
-  *
-  * @returns error on failure or SYS_ERR_OK on success
-  */
-errval_t device_queue_destroy(struct device_queue *qp);
-
-
-/*
- * ===========================================================================
- * Datapath functions
- * ===========================================================================
- */
-/*
- *
- * @brief enqueue a buffer into the device queue
- *
- * @param q             The device queue to call the operation on
- * @param region_id     Id of the memory region the buffer belongs to
- * @param base          Physical address of the start of the enqueued buffer
- * @param lenght        Lenght of the enqueued buffer
- * @param buffer_id     The buffer id of the enqueue buffer (TODO only for 
- *                      fixed size buffers?)
- * @param misc_flags    Any other argument that makes sense to the device queue
- *
- * @returns error on failure or SYS_ERR_OK on success
- *
- */
-/*
-errval_t device_queue_enqueue(struct device_queue *q,
-                              regionid_t region_id,
-                              lpaddr_t base,
-                              size_t length,
-                              bufferid_t buffer_id,
-                              char* misc_flags);
-*/
-/**
- * @brief enqueue some memory into the device queue
- *
- * @param q             The device queue to call the operation on
- * @param buf           Buffer to enqueue (includes physical address, lenght, 
- *                      region id and buffer id)
- * @param misc_flags    Any other argument that makes sense to the device queue
- *
- * @returns error on failure or SYS_ERR_OK on success
- *
- */
-errval_t device_queue_enqueue(struct device_queue *q,
-                              struct device_queue_buffer* buf,
-                              char* misc_flags);
-
-
-/**
- * @brief dequeue a buffer from the device queue
- *
- * @param q             The device queue to call the operation on
- * @param region_id     Return pointer to the id of the memory 
- *                      region the buffer belongs to
- * @param base          Return pointer to the physical address of 
- *                      the of the buffer
- * @param lenght        Return pointer to the lenght of the dequeue buffer
- * @param buffer_id     Return pointer to thehe buffer id of the dequeued buffer
- *
- * @returns error on failure or SYS_ERR_OK on success
- *
- */
-/*
-errval_t device_queue_dequeue(struct device_queue *q,
-                              regionid_t* region_id,
-                              lpaddr_t* base,
-                              size_t* length,
-                              bufferid_t* buffer_id);
-*/
-/**
- * @brief dequeue a buffer from the device queue
- *
- * @param q             The device queue to call the operation on
- * @param buf           Return pointer to the dequeued buffer
- *
- * @returns error on failure or SYS_ERR_OK on success
- *
- */
-errval_t device_queue_dequeue(struct device_queue *q,
-                              struct device_queue_buffer** buf);
-/*
- * ===========================================================================
- * Control Path
- * ===========================================================================
- */
-
-/**
-* @brief Add a memory region that can be used as buffers to 
-*        the device queue
-*
-* @param q              The device queue to call the operation on
-* @param cap            A Capability for some memory
-* @param region_id      Return pointer to a region id that is assigned
-*                       to the memory
-*
-* @returns error on failure or SYS_ERR_OK on success
-*
-*/
-errval_t device_queue_register(struct device_queue *q,
-                               struct capref cap,
-                               regionid_t* region_id);
-
-/**
-* @brief Remove a memory region 
-*
-* @param q              The device queue to call the operation on
-* @param region_id      The region id to remove from the device 
-*                       queues memory
-* @param cap            The capability to the removed memory
-*
-* @returns error on failure or SYS_ERR_OK on success
-*
-*/
-errval_t device_queue_deregister(struct device_queue *q,
-                                 regionid_t region_id,
-                                 struct capref* cap);
-
-/**
-* @brief Send a notification about new buffers on the queue
-*
-* @param q      The device queue to call the operation on
-*
-* @returns error on failure or SYS_ERR_OK on success
-*
-*/
-errval_t device_queue_sync(struct device_queue *q);
-
-/**
-* @brief Send a control message to the device queue
-*
-* @param q      The device queue to call the operation on
-* @param ctrl   A sting encoding the control message
-*
-* @returns error on failure or SYS_ERR_OK on success
-*
-*/
-errval_t device_queue_control(struct device_queue *q,
-                              char* ctrl);
-
-#endif /* DEVICE_QUEUE_INTERFACE_H_ */
diff --git a/include/devif/queue_interface.h b/include/devif/queue_interface.h
new file mode 100644 (file)
index 0000000..16d2968
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * Copyright (c) 2016 ETH Zurich.
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached LICENSE file.
+ * If you do not find this file, copies can be found by writing to:
+ * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
+ */
+#ifndef QUEUE_INTERFACE_H_
+#define QUEUE_INTERFACE_H_ 1
+
+
+#include <barrelfish/barrelfish.h>
+
+#define MAX_DEVICE_NAME 256
+
+typedef uint32_t regionid_t;
+typedef uint32_t bufferid_t;
+
+struct region_pool;
+
+/**
+ * Represent the device queue itself
+ */
+struct devq {
+
+    uint32_t queue_id;
+
+    // device type
+    uint8_t device_type;
+
+    // name of the device
+    char device_name[MAX_DEVICE_NAME];
+    // pointer to device queue state
+    void* q;
+    // Region management
+    struct region_pool* pool;
+    //TODO Other state needed ...
+};
+
+/*
+ * ===========================================================================
+ * Device queue creation and destruction
+ * ===========================================================================
+ */
+
+
+ /**
+  * @brief creates a queue 
+  *
+  * @param q             Return pointer to the devq (handle)
+  * @param device_name   Device name of the device to which this queue belongs
+  *                      (Driver itself is running in a separate process)
+  * @param misc          Anything you can think of that makes sense for the device
+  *                      and its driver?
+  *
+  * @returns error on failure or SYS_ERR_OK on success
+  */
+
+errval_t devq_create(struct devq **q,
+                     char* device_name,
+                     uint64_t flags);
+
+
+ /**
+  * @brief destroys the device queue
+  *
+  * @param q           The queue state to free (and the device queue to be 
+                       shut down in the driver)
+  *
+  * @returns error on failure or SYS_ERR_OK on success
+  */
+errval_t devq_destroy(struct devq *q);
+
+
+/*
+ * ===========================================================================
+ * Datapath functions
+ * ===========================================================================
+ */
+/*
+ *
+ * @brief enqueue a buffer into the device queue
+ *
+ * @param q             The device queue to call the operation on
+ * @param region_id     Id of the memory region the buffer belongs to
+ * @param base          Physical address of the start of the enqueued buffer
+ * @param lenght        Lenght of the enqueued buffer
+ * @param buffer_id     The buffer id of the enqueue buffer (TODO only for 
+ *                      fixed size buffers?)
+ * @param misc_flags    Any other argument that makes sense to the device queue
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_enqueue(struct devq *q,
+                      regionid_t region_id,
+                      lpaddr_t base,
+                      size_t length,
+                      bufferid_t buffer_id,
+                      uint64_t misc_flags);
+
+/**
+ * @brief dequeue a buffer from the device queue
+ *
+ * @param q             The device queue to call the operation on
+ * @param region_id     Return pointer to the id of the memory 
+ *                      region the buffer belongs to
+ * @param base          Return pointer to the physical address of 
+ *                      the of the buffer
+ * @param lenght        Return pointer to the lenght of the dequeue buffer
+ * @param buffer_id     Return pointer to thehe buffer id of the dequeued buffer
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+
+errval_t devq_dequeue(struct devq *q,
+                      regionid_t* region_id,
+                      lpaddr_t* base,
+                      size_t* length,
+                      bufferid_t* buffer_id);
+
+/*
+ * ===========================================================================
+ * Control Path
+ * ===========================================================================
+ */
+
+/**
+ * @brief Add a memory region that can be used as buffers to 
+ *        the device queue
+ *
+ * @param q              The device queue to call the operation on
+ * @param cap            A Capability for some memory
+ * @param region_id      Return pointer to a region id that is assigned
+ *                       to the memory
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_register(struct devq *q,
+                       struct capref cap,
+                       regionid_t* region_id);
+
+/**
+ * @brief Remove a memory region 
+ *
+ * @param q              The device queue to call the operation on
+ * @param region_id      The region id to remove from the device 
+ *                       queues memory
+ * @param cap            The capability to the removed memory
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_deregister(struct devq *q,
+                         regionid_t region_id,
+                         struct capref* cap);
+
+/**
+ * @brief Send a notification about new buffers on the queue
+ *
+ * @param q      The device queue to call the operation on
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_sync(struct devq *q);
+
+/**
+ * @brief Send a control message to the device queue
+ *
+ * @param q          The device queue to call the operation on
+ * @param request    The type of the control message*
+ * @param value      The value for the request
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_control(struct devq *q,
+                      uint64_t request,
+                      uint64_t value);
+
+#endif /* QUEUE_INTERFACE_H_ */
similarity index 86%
rename from lib/device_interfaces/Hakefile
rename to lib/devif/Hakefile
index 96114c9..5715d8a 100644 (file)
@@ -14,8 +14,8 @@
 
 [
     build library { 
-        target = "device_interface",
-        cFiles = ["device_queue_interface.c", "region_pool.c", 
+        target = "devif",
+        cFiles = ["queue_interface.c", "region_pool.c", 
                   "region.c"],
         addCFlags = [ "-DLIBRARY" ]
     }
similarity index 54%
rename from lib/device_interfaces/device_queue_interface.c
rename to lib/devif/queue_interface.c
index 2221c2c..ca0c958 100644 (file)
@@ -8,7 +8,7 @@
  */
 
 #include <barrelfish/barrelfish.h>
-#include <device_interfaces/device_queue_interface.h>
+#include <devif/queue_interface.h>
 #include "region_pool.h"
 #include "dqi_debug.h"
  /*
  /**
   * @brief creates a queue 
   *
-  * @param q             Return pointer to the device_queue (handle)
+  * @param q             Return pointer to the devq (handle)
   * @param device_name   Device name of the device to which this queue belongs
   *                      (Driver itself is running in a separate process)
-  * @param misc          Anything you can think of that makes sense for the device
+  * @param flags          Anything you can think of that makes sense for the device
   *                      and its driver?
   *
   * @returns error on failure or SYS_ERR_OK on success
   */
 
-errval_t device_queue_create(struct device_queue **q,
-                             char* device_name,
-                             char* misc)
+errval_t devq_create(struct devq **q,
+                     char* device_name,
+                     uint64_t flags)
 {
     /*
     struct region_pool* pool;
@@ -70,7 +70,7 @@ errval_t device_queue_create(struct device_queue **q,
         }
     }
 
-    for (int i = 0; i < 2; i++) {
+    for (int i = 0; i < 100; i++) {
         lpaddr_t addr;
         uint32_t buffer_id;
         for (int j = 0; j < 32; j++) {
@@ -85,8 +85,8 @@ errval_t device_queue_create(struct device_queue **q,
                 region_pool_get_buffer_from_region(pool, region_ids[i], &index, &addr);
             }
         }
-    }   
-    */
+    }
+    */   
     USER_PANIC("NIY\n");
     return SYS_ERR_OK;
 }
@@ -100,7 +100,7 @@ errval_t device_queue_create(struct device_queue **q,
   *
   * @returns error on failure or SYS_ERR_OK on success
   */
-errval_t device_queue_destroy(struct device_queue *qp)
+errval_t devq_destroy(struct devq *qp)
 {
     USER_PANIC("NIY\n");
     return SYS_ERR_OK;
@@ -111,41 +111,56 @@ errval_t device_queue_destroy(struct device_queue *qp)
  * Datapath functions
  * ===========================================================================
  */
-/**
- * @brief enqueue some memory into the device queue
+
+/*
+ *
+ * @brief enqueue a buffer into the device queue
  *
  * @param q             The device queue to call the operation on
- * @param buf           Buffer to enqueue (includes physical address, lenght, 
- *                      region id and buffer id)
+ * @param region_id     Id of the memory region the buffer belongs to
+ * @param base          Physical address of the start of the enqueued buffer
+ * @param lenght        Lenght of the enqueued buffer
+ * @param buffer_id     The buffer id of the enqueue buffer (TODO only for 
+ *                      fixed size buffers?)
  * @param misc_flags    Any other argument that makes sense to the device queue
  *
  * @returns error on failure or SYS_ERR_OK on success
  *
  */
-errval_t device_queue_enqueue(struct device_queue *q,
-                              struct device_queue_buffer* buf,
-                              char* misc_flags)
+errval_t devq_enqueue(struct devq *q,
+                      regionid_t region_id,
+                      lpaddr_t base,
+                      size_t length,
+                      bufferid_t buffer_id,
+                      uint64_t misc_flags) 
 {
     USER_PANIC("NIY\n");
     return SYS_ERR_OK;
 }
-
 /**
  * @brief dequeue a buffer from the device queue
  *
  * @param q             The device queue to call the operation on
- * @param buf           Return pointer to the dequeued buffer
+ * @param region_id     Return pointer to the id of the memory 
+ *                      region the buffer belongs to
+ * @param base          Return pointer to the physical address of 
+ *                      the of the buffer
+ * @param lenght        Return pointer to the lenght of the dequeue buffer
+ * @param buffer_id     Return pointer to thehe buffer id of the dequeued buffer
  *
  * @returns error on failure or SYS_ERR_OK on success
  *
  */
-errval_t device_queue_dequeue(struct device_queue *q,
-                              struct device_queue_buffer** buf)
+
+errval_t devq_dequeue(struct devq *q,
+                      regionid_t* region_id,
+                      lpaddr_t* base,
+                      size_t* length,
+                      bufferid_t* buffer_id)
 {
     USER_PANIC("NIY\n");
     return SYS_ERR_OK;
 }
-
 /*
  * ===========================================================================
  * Control Path
@@ -153,67 +168,71 @@ errval_t device_queue_dequeue(struct device_queue *q,
 */
 
 /**
-* @brief Add a memory region that can be used as buffers to 
-*        the device queue
-*
-* @param q              The device queue to call the operation on
-* @param cap            A Capability for some memory
-* @param region_id      Return pointer to a region id that is assigned
-*                       to the memory
-*
-* @returns error on failure or SYS_ERR_OK on success
-*
-*/
-errval_t device_queue_register(struct device_queue *q,
-                               struct capref cap,
-                               regionid_t* region_id)
+ * @brief Add a memory region that can be used as buffers to 
+ *        the device queue
+ *
+ * @param q              The device queue to call the operation on
+ * @param cap            A Capability for some memory
+ * @param region_id      Return pointer to a region id that is assigned
+ *                       to the memory
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_register(struct devq *q,
+                       struct capref cap,
+                       regionid_t* region_id)
 {
     USER_PANIC("NIY\n");
     return SYS_ERR_OK;
 }
 
 /**
-* @brief Remove a memory region 
-*
-* @param q              The device queue to call the operation on
-* @param region_id      The region id to remove from the device 
-*                       queues memory
-* @param cap            The capability to the removed memory
-*
-* @returns error on failure or SYS_ERR_OK on success
-*
-*/
-errval_t device_queue_deregister(struct device_queue *q,
-                                 regionid_t region_id,
-                                 struct capref* cap)
+ * @brief Remove a memory region 
+ *
+ * @param q              The device queue to call the operation on
+ * @param region_id      The region id to remove from the device 
+ *                       queues memory
+ * @param cap            The capability to the removed memory
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_deregister(struct devq *q,
+                         regionid_t region_id,
+                         struct capref* cap)
 {
     USER_PANIC("NIY\n");
     return SYS_ERR_OK;
 }
+
 /**
-* @brief Send a notification about new buffers on the queue
-*
-* @param q      The device queue to call the operation on
-*
-* @returns error on failure or SYS_ERR_OK on success
-*
-*/
-errval_t device_queue_sync(struct device_queue *q)
+ * @brief Send a notification about new buffers on the queue
+ *
+ * @param q      The device queue to call the operation on
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_sync(struct devq *q)
 {
     USER_PANIC("NIY\n");
     return SYS_ERR_OK;
 }
+
 /**
-* @brief Send a control message to the device queue
-*
-* @param q      The device queue to call the operation on
-* @param ctrl   A sting encoding the control message
-*
-* @returns error on failure or SYS_ERR_OK on success
-*
-*/
-errval_t device_queue_control(struct device_queue *q,
-                              char* ctrl)
+ * @brief Send a control message to the device queue
+ *
+ * @param q          The device queue to call the operation on
+ * @param request    The type of the control message*
+ * @param value      The value for the request
+ *
+ * @returns error on failure or SYS_ERR_OK on success
+ *
+ */
+errval_t devq_control(struct devq *q,
+                      uint64_t request,
+                      uint64_t value)
 {
     USER_PANIC("NIY\n");
     return SYS_ERR_OK;