blob: c5bb32e18d95cc2c6cc0b02ebe00ff43854db9b3 [file] [log] [blame]
Jens Axboef93c84e2019-01-08 06:51:07 -07001#ifndef LIB_URING_H
2#define LIB_URING_H
3
4#include <sys/uio.h>
5#include "io_uring.h"
6
7/*
8 * Library interface to io_uring
9 */
10struct io_uring_sq {
11 unsigned *khead;
12 unsigned *ktail;
13 unsigned *kring_mask;
14 unsigned *kring_entries;
15 unsigned *kflags;
16 unsigned *kdropped;
17 unsigned *array;
18 struct io_uring_iocb *iocbs;
19
20 unsigned iocb_head;
21 unsigned iocb_tail;
22
23 size_t ring_sz;
24};
25
26struct io_uring_cq {
27 unsigned *khead;
28 unsigned *ktail;
29 unsigned *kring_mask;
30 unsigned *kring_entries;
31 unsigned *koverflow;
32 struct io_uring_event *events;
33
34 size_t ring_sz;
35};
36
Jens Axboe7f7a66e2019-01-08 15:31:35 -070037struct io_uring {
38 struct io_uring_sq sq;
39 struct io_uring_cq cq;
40};
41
Jens Axboef93c84e2019-01-08 06:51:07 -070042/*
43 * System calls
44 */
45extern int io_uring_setup(unsigned entries, struct iovec *iovecs,
46 struct io_uring_params *p);
47extern int io_uring_enter(unsigned fd, unsigned to_submit,
48 unsigned min_complete, unsigned flags);
49
50/*
51 * Library interface
52 */
53extern int io_uring_queue_init(unsigned entries, struct io_uring_params *p,
Jens Axboe7f7a66e2019-01-08 15:31:35 -070054 struct iovec *iovecs, struct io_uring *ring);
55extern void io_uring_queue_exit(int fd, struct io_uring *ring);
56extern int io_uring_get_completion(int fd, struct io_uring *ring,
Jens Axboef93c84e2019-01-08 06:51:07 -070057 struct io_uring_event **ev_ptr);
Jens Axboe7f7a66e2019-01-08 15:31:35 -070058extern int io_uring_wait_completion(int fd, struct io_uring *ring,
Jens Axboe6a44c6e2019-01-08 15:14:07 -070059 struct io_uring_event **ev_ptr);
Jens Axboe7f7a66e2019-01-08 15:31:35 -070060extern int io_uring_submit(int fd, struct io_uring *ring);
61extern struct io_uring_iocb *io_uring_get_iocb(struct io_uring *ring);
Jens Axboef93c84e2019-01-08 06:51:07 -070062
Jens Axboef47f24c2019-01-08 15:16:55 -070063static inline struct io_uring_iocb *
Jens Axboe7f7a66e2019-01-08 15:31:35 -070064io_uring_iocb_from_ev(struct io_uring *ring, struct io_uring_event *ev)
Jens Axboef47f24c2019-01-08 15:16:55 -070065{
Jens Axboe7f7a66e2019-01-08 15:31:35 -070066 return &ring->sq.iocbs[ev->index];
Jens Axboef47f24c2019-01-08 15:16:55 -070067}
68
Jens Axboef93c84e2019-01-08 06:51:07 -070069#endif