2 * Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012, ETH Zurich.
5 * This file is distributed under the terms in the attached LICENSE file.
6 * If you do not find this file, copies can be found by writing to:
7 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13 #include <barrelfish/barrelfish.h>
14 #include <barrelfish/waitset.h>
15 #include <barrelfish/deferred.h>
16 #include <devif/queue_interface.h>
17 #include <devif/sfn5122f_devif_direct.h>
19 #include "sfn5122f_queue.h"
21 errval_t sfn5122f_create_direct(struct devq* q, uint64_t flags)
23 struct capref tx_frame, rx_frame, ev_frame;
24 size_t tx_size, rx_size, ev_size;
25 void *tx_virt, *rx_virt, *ev_virt;
26 struct sfn5122f_queue* queue;
28 struct sfn5122f_queue_ops ops = {
29 .update_txtail = NULL,
33 /* Allocate memory for descriptor rings
34 No difference for userspace networking*/
35 tx_size = sfn5122f_q_tx_ker_desc_size * TX_ENTRIES;
36 tx_virt = alloc_map_frame(VREGION_FLAGS_READ_WRITE, tx_size, &tx_frame);
37 if (tx_virt == NULL) {
38 return SFN_ERR_ALLOC_QUEUE;
41 rx_size = sfn5122f_q_rx_user_desc_size * RX_ENTRIES;
42 rx_virt = alloc_map_frame(VREGION_FLAGS_READ_WRITE, rx_size, &rx_frame);
43 if (rx_virt == NULL) {
44 return SFN_ERR_ALLOC_QUEUE;
47 ev_size = sfn5122f_q_event_entry_size * EV_ENTRIES;
48 ev_virt = alloc_map_frame(VREGION_FLAGS_READ_WRITE, ev_size, &ev_frame);
49 if (ev_virt == NULL) {
50 return SFN_ERR_ALLOC_QUEUE;
53 queue = sfn5122f_queue_init(tx_virt, TX_ENTRIES, rx_virt, RX_ENTRIES,
54 ev_virt, EV_ENTRIES, &ops, NULL, true);
57 // TODO set queue state
61 errval_t sfn5122f_register_direct(struct devq* q, struct capref cap,
67 errval_t sfn5122f_deregister_direct(struct devq* q, regionid_t rid)
73 errval_t sfn5122f_control_direct(struct devq* q, uint64_t cmd, uint64_t value)
79 errval_t sfn5122f_notify_direct(struct devq* q, uint8_t num_slots)
84 errval_t sfn5122f_destroy_direct(struct devq* q)
90 errval_t sfn5122f_enqueue_direct(struct devq* q, regionid_t rid, bufferid_t bid,
91 lpaddr_t base, size_t len, uint64_t flags)
96 errval_t sfn5122f_dequeue_direct(struct devq* q, regionid_t* rid, bufferid_t* bid,
97 lpaddr_t* base, size_t* len, uint64_t* flags)