e10k: enabling requesting default queue
authorRoni Häcki <roni.haecki@inf.ethz.ch>
Thu, 20 Apr 2017 11:44:47 +0000 (13:44 +0200)
committerRoni Häcki <roni.haecki@inf.ethz.ch>
Thu, 20 Apr 2017 11:44:47 +0000 (13:44 +0200)
Signed-off-by: Roni Häcki <roni.haecki@inf.ethz.ch>

if/e10k_vf.if
include/devif/backends/net/e10k_devif.h
lib/devif/backends/net/e10k/devif_backend_e10k.c
lib/net/net.c
lib/net_interfaces/interface_raw.c

index 84bd919..4de9cbb 100644 (file)
@@ -26,6 +26,7 @@ interface e10k_vf "e10k VF/PF interface" {
                        in uint8  msix_intdest,
                        in bool   use_irq,
                        in bool   use_rsc,
+                       in bool   qzero,
                        out uint64 mac,
                        out int qid,
                        out cap regs,
index fd228e9..3119d2f 100644 (file)
 struct e10k_queue;
 typedef void (*e10k_event_cb_t)(void* q);
 
+
+/**
+* @brief create a handle to a queue of an e10k card. Assumes the driver is
+*        running
+*
+* @param q             Return pointer to the device queue
+* @param cb            Callback function when an interrupt is raised
+* @param use_vf        Start virtual functions, otherwise the physical function
+*                      will be used
+* @param interrupts    Use interrupts, otherwise polling
+* @param default_q     Request a handle to the default queue where
+*                      all the not filtered packes go to. Mostly use when
+*                      a queue is request from the driver itself.
+*
+* @returns error on NIC_ERR_ALLOC or SYS_ERR_OK on success
+*
+*/
 errval_t e10k_queue_create(struct e10k_queue** q, e10k_event_cb_t cb, 
-                           bool use_vf, bool interrupts);
+                           bool use_vf, bool interrupts, bool default_q);
 errval_t e10k_queue_destroy(struct e10k_queue* q);
 
+
+/**
+* @brief get the queue id of this queue handle. The returned id corresponds
+*        to the real id used on the card
+*
+* @param q             handl to the device queue
+*
+* @returns the queues id
+*
+*/
 uint64_t e10k_queue_get_id(struct e10k_queue* q);
 #endif
index 02f9d6e..dc29569 100644 (file)
@@ -377,7 +377,8 @@ static errval_t e10k_dequeue(struct devq* q, regionid_t* rid,
                               valid_length, flags)) {
         err = DEVQ_ERR_QUEUE_EMPTY;
     }  else {
-        DEBUG_QUEUE("Sent offset=%lu valid_data=%lu \n", *offset, *valid_data);
+        DEBUG_QUEUE("Queue %d sent offset=%lu valid_length=%lu \n", 
+               que->id, *offset, *valid_length);
         return SYS_ERR_OK;
     }
 
@@ -385,7 +386,8 @@ static errval_t e10k_dequeue(struct devq* q, regionid_t* rid,
                              valid_length, flags, &last)) {
         err = DEVQ_ERR_QUEUE_EMPTY;
     } else {
-        DEBUG_QUEUE("Received offset=%lu valid_data=%lu \n", *offset, *valid_data);
+        DEBUG_QUEUE("Queue %d received offset=%lu valid_length=%lu \n", 
+               que->id, *offset, *valid_length);
         return SYS_ERR_OK;
     }
      
@@ -551,9 +553,10 @@ static errval_t map_device_memory(struct e10k_queue* q,
     d = q->d;
     return SYS_ERR_OK;
 }
+
 // TODO mostly cleanup when fail
 errval_t e10k_queue_create(struct e10k_queue** queue, e10k_event_cb_t cb,
-                           bool use_vf, bool interrupts)
+                           bool use_vf, bool interrupts, bool qzero)
 {
 
     errval_t err;
@@ -675,7 +678,7 @@ errval_t e10k_queue_create(struct e10k_queue** queue, e10k_event_cb_t cb,
 
         err = q->binding->rpc_tx_vtbl.create_queue(q->binding, tx_frame, txhwb_frame,
                                             rx_frame, 2048, q->msix_intvec,
-                                            q->msix_intdest, false, false, 
+                                            q->msix_intdest, false, false, qzero,
                                             &q->mac, &qid,
                                             &regs, &err2);
         if (err_is_fail(err) || err_is_fail(err2)) {
index b01d3ce..ce3729a 100644 (file)
@@ -93,7 +93,8 @@ static errval_t create_e10k_queue (struct net_state *st, uint64_t* queueid,
     errval_t err;
     err = e10k_queue_create((struct e10k_queue**)retqueue, int_handler,
                             false /*virtual functions*/,
-                            !(st->flags & NET_FLAGS_POLLING) /* user interrupts*/);
+                            !(st->flags & NET_FLAGS_POLLING), /* user interrupts*/
+                            (st->flags & NET_FLAGS_DEFAULT_QUEUE));
     *queueid = e10k_queue_get_id((struct e10k_queue*)*retqueue);
     return err;
 }
index bb8f00a..0736791 100644 (file)
@@ -222,7 +222,7 @@ void net_if_init(const char* cardname, uint64_t qid)
     } else if ((strcmp(cardname, "e10k") == 0) && (qid != 0)) {
         USER_PANIC("e10k queue NIY \n"); 
         struct e10k_queue* e10k;
-        err = e10k_queue_create(&e10k, int_handler, false, true);
+        err = e10k_queue_create(&e10k, int_handler, false, true, false);
         assert(err_is_ok(err));
 
         devq = (struct devq*) e10k;