1 | /*
|
---|
2 | * Copyright 2007 Nouveau Project
|
---|
3 | *
|
---|
4 | * Permission is hereby granted, free of charge, to any person obtaining a
|
---|
5 | * copy of this software and associated documentation files (the "Software"),
|
---|
6 | * to deal in the Software without restriction, including without limitation
|
---|
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
---|
8 | * and/or sell copies of the Software, and to permit persons to whom the
|
---|
9 | * Software is furnished to do so, subject to the following conditions:
|
---|
10 | *
|
---|
11 | * The above copyright notice and this permission notice shall be included in
|
---|
12 | * all copies or substantial portions of the Software.
|
---|
13 | *
|
---|
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
---|
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
---|
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
---|
17 | * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
---|
18 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
---|
19 | * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
---|
20 | * SOFTWARE.
|
---|
21 | */
|
---|
22 |
|
---|
23 | #ifndef __NOUVEAU_BO_H__
|
---|
24 | #define __NOUVEAU_BO_H__
|
---|
25 |
|
---|
26 | /* Relocation/Buffer type flags */
|
---|
27 | #define NOUVEAU_BO_VRAM (1 << 0)
|
---|
28 | #define NOUVEAU_BO_GART (1 << 1)
|
---|
29 | #define NOUVEAU_BO_RD (1 << 2)
|
---|
30 | #define NOUVEAU_BO_WR (1 << 3)
|
---|
31 | #define NOUVEAU_BO_RDWR (NOUVEAU_BO_RD | NOUVEAU_BO_WR)
|
---|
32 | #define NOUVEAU_BO_MAP (1 << 4)
|
---|
33 | #define NOUVEAU_BO_PIN (1 << 5)
|
---|
34 | #define NOUVEAU_BO_LOW (1 << 6)
|
---|
35 | #define NOUVEAU_BO_HIGH (1 << 7)
|
---|
36 | #define NOUVEAU_BO_OR (1 << 8)
|
---|
37 | #define NOUVEAU_BO_LOCAL (1 << 9)
|
---|
38 | #define NOUVEAU_BO_TILED (1 << 10)
|
---|
39 | #define NOUVEAU_BO_ZTILE (1 << 11)
|
---|
40 | #define NOUVEAU_BO_INVAL (1 << 12)
|
---|
41 | #define NOUVEAU_BO_NOSYNC (1 << 13)
|
---|
42 | #define NOUVEAU_BO_NOWAIT (1 << 14)
|
---|
43 | #define NOUVEAU_BO_IFLUSH (1 << 15)
|
---|
44 | #define NOUVEAU_BO_DUMMY (1 << 31)
|
---|
45 |
|
---|
46 | struct nouveau_bo {
|
---|
47 | struct nouveau_device *device;
|
---|
48 | uint32_t handle;
|
---|
49 |
|
---|
50 | uint64_t size;
|
---|
51 | void *map;
|
---|
52 |
|
---|
53 | uint32_t tile_mode;
|
---|
54 | uint32_t tile_flags;
|
---|
55 |
|
---|
56 | /* Available when buffer is pinned *only* */
|
---|
57 | uint32_t flags;
|
---|
58 | uint64_t offset;
|
---|
59 | };
|
---|
60 |
|
---|
61 | int
|
---|
62 | nouveau_bo_new(struct nouveau_device *, uint32_t flags, int align, int size,
|
---|
63 | struct nouveau_bo **);
|
---|
64 |
|
---|
65 | int
|
---|
66 | nouveau_bo_new_tile(struct nouveau_device *, uint32_t flags, int align,
|
---|
67 | int size, uint32_t tile_mode, uint32_t tile_flags,
|
---|
68 | struct nouveau_bo **);
|
---|
69 |
|
---|
70 | int
|
---|
71 | nouveau_bo_user(struct nouveau_device *, void *ptr, int size,
|
---|
72 | struct nouveau_bo **);
|
---|
73 |
|
---|
74 | int
|
---|
75 | nouveau_bo_wrap(struct nouveau_device *, uint32_t handle, struct nouveau_bo **);
|
---|
76 |
|
---|
77 | int
|
---|
78 | nouveau_bo_handle_get(struct nouveau_bo *, uint32_t *);
|
---|
79 |
|
---|
80 | int
|
---|
81 | nouveau_bo_handle_ref(struct nouveau_device *, uint32_t handle,
|
---|
82 | struct nouveau_bo **);
|
---|
83 |
|
---|
84 | int
|
---|
85 | nouveau_bo_ref(struct nouveau_bo *, struct nouveau_bo **);
|
---|
86 |
|
---|
87 | int
|
---|
88 | nouveau_bo_map_range(struct nouveau_bo *, uint32_t delta, uint32_t size,
|
---|
89 | uint32_t flags);
|
---|
90 |
|
---|
91 | void
|
---|
92 | nouveau_bo_map_flush(struct nouveau_bo *, uint32_t delta, uint32_t size);
|
---|
93 |
|
---|
94 | int
|
---|
95 | nouveau_bo_map(struct nouveau_bo *, uint32_t flags);
|
---|
96 |
|
---|
97 | void
|
---|
98 | nouveau_bo_unmap(struct nouveau_bo *);
|
---|
99 |
|
---|
100 | int
|
---|
101 | nouveau_bo_pin(struct nouveau_bo *, uint32_t flags);
|
---|
102 |
|
---|
103 | void
|
---|
104 | nouveau_bo_unpin(struct nouveau_bo *);
|
---|
105 |
|
---|
106 | int
|
---|
107 | nouveau_bo_busy(struct nouveau_bo *, uint32_t access);
|
---|
108 |
|
---|
109 | #endif
|
---|