devif: changed rest of the queues to library destroy
authorRoni Häcki <roni.haecki@inf.ethz.ch>
Mon, 28 Aug 2017 14:24:34 +0000 (16:24 +0200)
committerRoni Häcki <roni.haecki@inf.ethz.ch>
Mon, 28 Aug 2017 14:24:34 +0000 (16:24 +0200)
Signed-off-by: Roni Häcki <roni.haecki@inf.ethz.ch>

include/devif/backends/blk/ahci_devq.h
include/devif/backends/debug.h
include/devif/backends/loopback_devif.h
include/devif/backends/null.h
lib/blk/blk_ahci/device_impl.c
lib/devif/backends/debug/devif_backend_debug.c
lib/devif/backends/loopback/loopback_queue.c
lib/devif/backends/null/devif_backend_null.c

index a7001cc..2cf69a8 100644 (file)
@@ -17,7 +17,6 @@
 struct ahci_queue;
 
 errval_t ahci_create(struct ahci_queue** q, void* st, uint64_t flags);
-errval_t ahci_destroy(struct ahci_queue* q);
 void ahci_interrupt_handler(void* q);
 
 
index 19f7eb3..e139ed9 100644 (file)
@@ -20,10 +20,6 @@ struct debug_q;
 errval_t debug_create(struct debug_q** q,
                       struct devq* other_q);
 
-/**
- */
-errval_t debug_destroy(struct debug_q* q, struct devq* other_q);
-
 errval_t debug_dump_region(struct debug_q* que, regionid_t rid);
 
 void debug_dump_history(struct debug_q* q);
index 0a2a001..045152e 100644 (file)
@@ -13,7 +13,6 @@
 struct loopback_queue;
 
 errval_t loopback_queue_create(struct loopback_queue** q);
-errval_t loopback_queue_destroy(struct loopback_queue* q);
 
 
 #endif // _LOOPBACK_DEVQ_H_
index 75d1f45..12567ca 100644 (file)
@@ -22,10 +22,4 @@ struct null_q;
  */
 errval_t null_create(struct null_q** q,
                      struct devq* other_q);
-
-/**
- */
-errval_t null_destroy(struct null_q* q, struct devq* other_q);
-
-
 #endif /* NULL_H_ */
index 204d6ca..41051fd 100644 (file)
@@ -98,10 +98,11 @@ void ahci_interrupt_handler(void* q)
     port->interrupt(port, queue->requests, port->ncs);
 }
 
-errval_t ahci_destroy(struct ahci_queue *q)
+static errval_t ahci_destroy(struct devq *queue)
 {
     // TODO: Wait for stuff to finish...!
 
+    struct ahci_queue *q = (struct ahci_queue*) queue;
     // Clean-up memory:
     for (size_t i = 0; i< MAX_BUFFERS; i++) {
         dma_mem_free(&q->buffers[i]);
@@ -263,6 +264,7 @@ errval_t ahci_create(struct ahci_queue** q, void* st, uint64_t flags)
     dq->q.f.dereg = ahci_deregister;
     dq->q.f.ctrl = ahci_control;
     dq->q.f.notify = ahci_notify;
+    dq->q.f.destroy = ahci_destroy;
 
     err = devq_init(&dq->q, false);
     if (err_is_fail(err)) {
index 442f09e..7d3b747 100644 (file)
@@ -829,6 +829,12 @@ static errval_t debug_dequeue(struct devq* q, regionid_t* rid, genoffset_t* offs
     return DEVQ_ERR_BUFFER_NOT_IN_USE;
 }
 
+static errval_t debug_destroy(struct devq* devq)
+{
+    // TODO cleanup
+    return SYS_ERR_OK;
+}
+
 /**
  * Public functions
  *
@@ -856,19 +862,11 @@ errval_t debug_create(struct debug_q** q, struct devq* other_q)
     que->my_q.f.notify = debug_notify;
     que->my_q.f.enq = debug_enqueue;
     que->my_q.f.deq = debug_dequeue;
+    que->my_q.f.destroy = debug_destroy;
     *q = que;
     return SYS_ERR_OK;
 }
 
-errval_t debug_destroy(struct debug_q* q, struct devq* devq)
-{
-    devq = q->q;
-    free(q);    
-
-    return SYS_ERR_OK;
-}
-
-
 errval_t debug_dump_region(struct debug_q* que, regionid_t rid) 
 {
     errval_t err;
index 4953c6e..fd6ab84 100644 (file)
@@ -140,8 +140,9 @@ static errval_t loopback_control(struct devq *q,
 }
 
 
-errval_t loopback_queue_destroy(struct loopback_queue* q)
+static errval_t loopback_destroy(struct devq* q)
 {
+    free((struct loopback_queue*)q);
     return SYS_ERR_OK;
 }
 
@@ -169,6 +170,7 @@ errval_t loopback_queue_create(struct loopback_queue** q)
     lq->q.f.dereg = loopback_deregister;
     lq->q.f.ctrl = loopback_control;
     lq->q.f.notify = loopback_notify;
+    lq->q.f.destroy = loopback_destroy;
 
     *q = lq;
 
index 39262cb..3819c85 100644 (file)
@@ -64,6 +64,14 @@ static errval_t null_dequeue(struct devq* q, regionid_t* rid, genoffset_t* offse
     return que->q->f.deq(que->q, rid, offset, len, valid_data, valid_length, flags);
 }
 
+static errval_t null_destroy(struct devq* devq)
+{
+    free(devq);    
+
+    // TODO cleanup
+    return SYS_ERR_OK;
+}
+
 /**
  * Public functions
  *
@@ -87,14 +95,7 @@ errval_t null_create(struct null_q** q, struct devq* other_q)
     (*q)->my_q.f.notify = null_notify;
     (*q)->my_q.f.enq = null_enqueue;
     (*q)->my_q.f.deq = null_dequeue;
-    return SYS_ERR_OK;
-}
-
-errval_t null_destroy(struct null_q* q, struct devq* devq)
-{
-    devq = q->q;
-    free(q);    
-
+    (*q)->my_q.f.destroy = null_destroy;
     return SYS_ERR_OK;
 }