DeviceQueue: moved networking related flags to include/net_interfaces/flags.h
[barrelfish] / include / devif / queue_interface.h
1 /*
2  * Copyright (c) 2016 ETH Zurich.
3  * All rights reserved.
4  *
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, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
8  */
9 #ifndef QUEUE_INTERFACE_H_
10 #define QUEUE_INTERFACE_H_ 1
11
12
13 #include <barrelfish/barrelfish.h>
14
15 typedef uint32_t regionid_t;
16 typedef uint32_t bufferid_t;
17
18
19 struct devq;
20 struct region_pool;
21
22 // For convinience reason buffer descritpion in one struct
23 struct devq_buf{
24     regionid_t rid; // 4
25     bufferid_t bid; // 8
26     lpaddr_t addr; // 16
27     size_t len; // 24
28     uint64_t flags; // 32
29 };
30
31 /*
32  * ===========================================================================
33  * Datapath functions
34  * ===========================================================================
35  */
36 /*
37  *
38  * @brief enqueue a buffer into the device queue
39  *
40  * @param q             The device queue to call the operation on
41  * @param region_id     Id of the memory region the buffer belongs to
42  * @param base          Physical address of the start of the enqueued buffer
43  * @param lenght        Lenght of the enqueued buffer
44  * @param misc_flags    Any other argument that makes sense to the device queue
45  * @param buffer_id     Return pointer to buffer id of the enqueued buffer 
46  *                      buffer_id is assigned by the interface
47  *
48  * @returns error on failure or SYS_ERR_OK on success
49  *
50  */
51 errval_t devq_enqueue(struct devq *q,
52                       regionid_t region_id,
53                       lpaddr_t base,
54                       size_t length,
55                       uint64_t misc_flags,
56                       bufferid_t* buffer_id);
57
58 /**
59  * @brief dequeue a buffer from the device queue
60  *
61  * @param q             The device queue to call the operation on
62  * @param region_id     Return pointer to the id of the memory 
63  *                      region the buffer belongs to
64  * @param base          Return pointer to the physical address of 
65  *                      the of the buffer
66  * @param lenght        Return pointer to the lenght of the dequeue buffer
67  * @param buffer_id     Reutrn pointer to the buffer id of the dequeued buffer 
68  * @param misc_flags    Return value from other endpoint
69  *
70  * @returns error on failure or SYS_ERR_OK on success
71  *
72  */
73
74 errval_t devq_dequeue(struct devq *q,
75                       regionid_t* region_id,
76                       lpaddr_t* base,
77                       size_t* length,
78                       bufferid_t* buffer_id,
79                       uint64_t* misc_flags);
80
81 /*
82  * ===========================================================================
83  * Control Path
84  * ===========================================================================
85  */
86
87 /**
88  * @brief Add a memory region that can be used as buffers to 
89  *        the device queue
90  *
91  * @param q              The device queue to call the operation on
92  * @param cap            A Capability for some memory
93  * @param region_id      Return pointer to a region id that is assigned
94  *                       to the memory
95  *
96  * @returns error on failure or SYS_ERR_OK on success
97  *
98  */
99 errval_t devq_register(struct devq *q,
100                        struct capref cap,
101                        regionid_t* region_id);
102
103 /**
104  * @brief Remove a memory region 
105  *
106  * @param q              The device queue to call the operation on
107  * @param region_id      The region id to remove from the device 
108  *                       queues memory
109  * @param cap            The capability to the removed memory
110  *
111  * @returns error on failure or SYS_ERR_OK on success
112  *
113  */
114 errval_t devq_deregister(struct devq *q,
115                          regionid_t region_id,
116                          struct capref* cap);
117
118 /**
119  * @brief Send a notification about new buffers on the queue
120  *
121  * @param q      The device queue to call the operation on
122  *
123  * @returns error on failure or SYS_ERR_OK on success
124  *
125  */
126 errval_t devq_notify(struct devq *q);
127
128 /**
129  * @brief Enforce coherency between of the buffers in the queue
130  *        by either flushing the cache or invalidating it
131  *
132  * @param q      The device queue to call the operation on
133  *
134  * @returns error on failure or SYS_ERR_OK on success
135  *
136  */
137 errval_t devq_prepare(struct devq *q);
138
139 /**
140  * @brief Send a control message to the device queue
141  *
142  * @param q          The device queue to call the operation on
143  * @param request    The type of the control message*
144  * @param value      The value for the request
145  *
146  * @returns error on failure or SYS_ERR_OK on success
147  *
148  */
149 errval_t devq_control(struct devq *q,
150                       uint64_t request,
151                       uint64_t value);
152
153 #endif /* QUEUE_INTERFACE_H_ */