Lines Matching defs:dmabuf
55 .fo_name = "dmabuf",
72 struct dma_buf *dmabuf;
75 dmabuf = kmem_zalloc(offsetof(struct dma_buf, db_resv_int[1]),
78 dmabuf = kmem_zalloc(sizeof(*dmabuf), KM_SLEEP);
81 dmabuf->priv = info->priv;
82 dmabuf->ops = info->ops;
83 dmabuf->size = info->size;
84 dmabuf->resv = info->resv;
86 mutex_init(&dmabuf->db_lock, MUTEX_DEFAULT, IPL_NONE);
87 dmabuf->db_refcnt = 1;
88 dma_resv_poll_init(&dmabuf->db_resv_poll);
90 if (dmabuf->resv == NULL) {
91 dmabuf->resv = &dmabuf->db_resv_int[0];
92 dma_resv_init(dmabuf->resv);
95 return dmabuf;
99 dma_buf_fd(struct dma_buf *dmabuf, int flags)
111 refcnt = atomic_inc_uint_nv(&dmabuf->db_refcnt);
117 file->f_data = dmabuf;
129 struct dma_buf *dmabuf;
142 dmabuf = file->f_data;
143 refcnt = atomic_inc_uint_nv(&dmabuf->db_refcnt);
146 return dmabuf;
154 get_dma_buf(struct dma_buf *dmabuf)
158 refcnt = atomic_inc_uint_nv(&dmabuf->db_refcnt);
163 dma_buf_put(struct dma_buf *dmabuf)
167 if (atomic_dec_uint_nv(&dmabuf->db_refcnt) != 0)
171 dma_resv_poll_fini(&dmabuf->db_resv_poll);
172 mutex_destroy(&dmabuf->db_lock);
173 if (dmabuf->resv == &dmabuf->db_resv_int[0]) {
174 dma_resv_fini(dmabuf->resv);
175 kmem_free(dmabuf, offsetof(struct dma_buf, db_resv_int[1]));
177 kmem_free(dmabuf, sizeof(*dmabuf));
182 dma_buf_dynamic_attach(struct dma_buf *dmabuf, bus_dma_tag_t dmat,
189 attach->dmabuf = dmabuf;
193 mutex_enter(&dmabuf->db_lock);
194 if (dmabuf->ops->attach)
195 ret = dmabuf->ops->attach(dmabuf, attach);
196 mutex_exit(&dmabuf->db_lock);
200 if (attach->dynamic_mapping != dmabuf->ops->dynamic_mapping)
210 dma_buf_attach(struct dma_buf *dmabuf, bus_dma_tag_t dmat)
213 return dma_buf_dynamic_attach(dmabuf, dmat, /*dynamic_mapping*/false);
217 dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach)
220 mutex_enter(&dmabuf->db_lock);
221 if (dmabuf->ops->detach)
222 dmabuf->ops->detach(dmabuf, attach);
223 mutex_exit(&dmabuf->db_lock);
234 if (attach->dmabuf->ops->dynamic_mapping)
235 dma_resv_lock(attach->dmabuf->resv, NULL);
236 sg = attach->dmabuf->ops->map_dma_buf(attach, dir);
237 if (attach->dmabuf->ops->dynamic_mapping)
238 dma_resv_unlock(attach->dmabuf->resv);
248 if (attach->dmabuf->ops->dynamic_mapping)
249 dma_resv_lock(attach->dmabuf->resv, NULL);
250 attach->dmabuf->ops->unmap_dma_buf(attach, sg, dir);
251 if (attach->dmabuf->ops->dynamic_mapping)
252 dma_resv_unlock(attach->dmabuf->resv);
258 struct dma_buf *dmabuf = file->f_data;
260 dma_buf_put(dmabuf);
267 struct dma_buf *dmabuf = file->f_data;
268 struct dma_resv_poll *rpoll = &dmabuf->db_resv_poll;
270 return dma_resv_do_poll(dmabuf->resv, events, rpoll);
276 struct dma_buf *dmabuf = file->f_data;
277 struct dma_resv_poll *rpoll = &dmabuf->db_resv_poll;
279 return dma_resv_kqfilter(dmabuf->resv, kn, rpoll);
286 struct dma_buf *dmabuf = file->f_data;
288 if (size > dmabuf->size || *offp < 0 || *offp > dmabuf->size - size)
291 return dmabuf->ops->mmap(dmabuf, offp, size, prot, flagsp, advicep,
305 struct dma_buf *dmabuf = fp->f_data;
316 base = dmabuf->size;