1ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse/*
2ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * Copyright © 2011 Red Hat
3ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse *
4ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * Permission is hereby granted, free of charge, to any person obtaining a
5ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * copy of this software and associated documentation files (the "Software"),
6ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * to deal in the Software without restriction, including without limitation
7ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * and/or sell copies of the Software, and to permit persons to whom the
9ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * Software is furnished to do so, subject to the following conditions:
10ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse *
11ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * The above copyright notice and this permission notice (including the next
12ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * paragraph) shall be included in all copies or substantial portions of the
13ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * Software.
14ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse *
15ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * IN THE SOFTWARE.
22ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse *
23ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse * Authors:
24ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse *    Jerome Glisse <j.glisse@gmail.com>
25ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse */
26ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse#ifndef RBO_H
27ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse#define RBO_H
28ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse
29ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse#include "list.h"
30ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse
31ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glissestruct rbo {
32ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse    struct list_head    list;
33ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse    int                 fd;
34ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse    unsigned            refcount;
35ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse    unsigned            mapcount;
36ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse    unsigned            handle;
37ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse    unsigned            size;
38ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse    unsigned            alignment;
39ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse    void                *data;
40ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse};
41ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse
42ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glissestruct rbo *rbo(int fd, unsigned handle, unsigned size,
43ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse                unsigned alignment, void *ptr);
44ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisseint rbo_map(struct rbo *bo);
45ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glissevoid rbo_unmap(struct rbo *bo);
46ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glissestruct rbo *rbo_incref(struct rbo *bo);
47ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glissestruct rbo *rbo_decref(struct rbo *bo);
48ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisseint rbo_wait(struct rbo *bo);
49ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse
50ca4971292cf99e0063416cd1c3467af94637bf2bJerome Glisse#endif
51