Commit | Line | Data |
---|---|---|
c8afe684 RC |
1 | /* |
2 | * Copyright (C) 2013 Red Hat | |
3 | * Author: Rob Clark <robdclark@gmail.com> | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify it | |
6 | * under the terms of the GNU General Public License version 2 as published by | |
7 | * the Free Software Foundation. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, but WITHOUT | |
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
12 | * more details. | |
13 | * | |
14 | * You should have received a copy of the GNU General Public License along with | |
15 | * this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | */ | |
17 | ||
18 | #ifndef __MSM_GEM_H__ | |
19 | #define __MSM_GEM_H__ | |
20 | ||
7198e6b0 | 21 | #include <linux/reservation.h> |
c8afe684 RC |
22 | #include "msm_drv.h" |
23 | ||
24 | struct msm_gem_object { | |
25 | struct drm_gem_object base; | |
26 | ||
27 | uint32_t flags; | |
28 | ||
7198e6b0 RC |
29 | /* And object is either: |
30 | * inactive - on priv->inactive_list | |
31 | * active - on one one of the gpu's active_list.. well, at | |
32 | * least for now we don't have (I don't think) hw sync between | |
33 | * 2d and 3d one devices which have both, meaning we need to | |
34 | * block on submit if a bo is already on other ring | |
35 | * | |
36 | */ | |
c8afe684 | 37 | struct list_head mm_list; |
7198e6b0 RC |
38 | struct msm_gpu *gpu; /* non-null if active */ |
39 | uint32_t fence; | |
40 | ||
41 | /* Transiently in the process of submit ioctl, objects associated | |
42 | * with the submit are on submit->bo_list.. this only lasts for | |
43 | * the duration of the ioctl, so one bo can never be on multiple | |
44 | * submit lists. | |
45 | */ | |
46 | struct list_head submit_entry; | |
47 | ||
48 | /* work defered until bo is inactive: */ | |
49 | struct list_head inactive_work; | |
c8afe684 RC |
50 | |
51 | struct page **pages; | |
52 | struct sg_table *sgt; | |
53 | void *vaddr; | |
54 | ||
55 | struct { | |
56 | // XXX | |
57 | uint32_t iova; | |
58 | } domain[NUM_DOMAINS]; | |
7198e6b0 RC |
59 | |
60 | /* normally (resv == &_resv) except for imported bo's */ | |
61 | struct reservation_object *resv; | |
62 | struct reservation_object _resv; | |
c8afe684 RC |
63 | }; |
64 | #define to_msm_bo(x) container_of(x, struct msm_gem_object, base) | |
65 | ||
7198e6b0 RC |
66 | static inline bool is_active(struct msm_gem_object *msm_obj) |
67 | { | |
68 | return msm_obj->gpu != NULL; | |
69 | } | |
70 | ||
71 | #define MAX_CMDS 4 | |
72 | ||
73 | /* Created per submit-ioctl, to track bo's and cmdstream bufs, etc, | |
74 | * associated with the cmdstream submission for synchronization (and | |
75 | * make it easier to unwind when things go wrong, etc). This only | |
76 | * lasts for the duration of the submit-ioctl. | |
77 | */ | |
78 | struct msm_gem_submit { | |
79 | struct drm_device *dev; | |
80 | struct msm_gpu *gpu; | |
81 | struct list_head bo_list; | |
82 | struct ww_acquire_ctx ticket; | |
83 | uint32_t fence; | |
84 | bool valid; | |
85 | unsigned int nr_cmds; | |
86 | unsigned int nr_bos; | |
87 | struct { | |
88 | uint32_t type; | |
89 | uint32_t size; /* in dwords */ | |
90 | uint32_t iova; | |
91 | } cmd[MAX_CMDS]; | |
92 | struct { | |
93 | uint32_t flags; | |
94 | struct msm_gem_object *obj; | |
95 | uint32_t iova; | |
96 | } bos[0]; | |
97 | }; | |
98 | ||
c8afe684 | 99 | #endif /* __MSM_GEM_H__ */ |