Lines Matching refs:attach
849 dma_buf_attachment_is_dynamic(struct dma_buf_attachment *attach) in dma_buf_attachment_is_dynamic() argument
851 return !!attach->importer_ops; in dma_buf_attachment_is_dynamic()
855 dma_buf_pin_on_map(struct dma_buf_attachment *attach) in dma_buf_pin_on_map() argument
857 return attach->dmabuf->ops->pin && in dma_buf_pin_on_map()
858 (!dma_buf_attachment_is_dynamic(attach) || in dma_buf_pin_on_map()
953 struct dma_buf_attachment *attach; in dma_buf_dynamic_attach() local
962 attach = kzalloc(sizeof(*attach), GFP_KERNEL); in dma_buf_dynamic_attach()
963 if (!attach) in dma_buf_dynamic_attach()
966 attach->dev = dev; in dma_buf_dynamic_attach()
967 attach->dmabuf = dmabuf; in dma_buf_dynamic_attach()
969 attach->peer2peer = importer_ops->allow_peer2peer; in dma_buf_dynamic_attach()
970 attach->importer_ops = importer_ops; in dma_buf_dynamic_attach()
971 attach->importer_priv = importer_priv; in dma_buf_dynamic_attach()
973 if (dmabuf->ops->attach) { in dma_buf_dynamic_attach()
974 ret = dmabuf->ops->attach(dmabuf, attach); in dma_buf_dynamic_attach()
979 list_add(&attach->node, &dmabuf->attachments); in dma_buf_dynamic_attach()
982 return attach; in dma_buf_dynamic_attach()
985 kfree(attach); in dma_buf_dynamic_attach()
1014 void dma_buf_detach(struct dma_buf *dmabuf, struct dma_buf_attachment *attach) in dma_buf_detach() argument
1016 if (WARN_ON(!dmabuf || !attach || dmabuf != attach->dmabuf)) in dma_buf_detach()
1020 list_del(&attach->node); in dma_buf_detach()
1024 dmabuf->ops->detach(dmabuf, attach); in dma_buf_detach()
1026 kfree(attach); in dma_buf_detach()
1044 int dma_buf_pin(struct dma_buf_attachment *attach) in dma_buf_pin() argument
1046 struct dma_buf *dmabuf = attach->dmabuf; in dma_buf_pin()
1049 WARN_ON(!attach->importer_ops); in dma_buf_pin()
1054 ret = dmabuf->ops->pin(attach); in dma_buf_pin()
1068 void dma_buf_unpin(struct dma_buf_attachment *attach) in dma_buf_unpin() argument
1070 struct dma_buf *dmabuf = attach->dmabuf; in dma_buf_unpin()
1072 WARN_ON(!attach->importer_ops); in dma_buf_unpin()
1077 dmabuf->ops->unpin(attach); in dma_buf_unpin()
1102 struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach, in dma_buf_map_attachment() argument
1110 if (WARN_ON(!attach || !attach->dmabuf)) in dma_buf_map_attachment()
1113 dma_resv_assert_held(attach->dmabuf->resv); in dma_buf_map_attachment()
1115 if (dma_buf_pin_on_map(attach)) { in dma_buf_map_attachment()
1116 ret = attach->dmabuf->ops->pin(attach); in dma_buf_map_attachment()
1126 sg_table = attach->dmabuf->ops->map_dma_buf(attach, direction); in dma_buf_map_attachment()
1135 if (!dma_buf_attachment_is_dynamic(attach)) { in dma_buf_map_attachment()
1136 ret = dma_resv_wait_timeout(attach->dmabuf->resv, in dma_buf_map_attachment()
1164 attach->dmabuf->ops->unmap_dma_buf(attach, sg_table, direction); in dma_buf_map_attachment()
1168 if (dma_buf_pin_on_map(attach)) in dma_buf_map_attachment()
1169 attach->dmabuf->ops->unpin(attach); in dma_buf_map_attachment()
1185 dma_buf_map_attachment_unlocked(struct dma_buf_attachment *attach, in dma_buf_map_attachment_unlocked() argument
1192 if (WARN_ON(!attach || !attach->dmabuf)) in dma_buf_map_attachment_unlocked()
1195 dma_resv_lock(attach->dmabuf->resv, NULL); in dma_buf_map_attachment_unlocked()
1196 sg_table = dma_buf_map_attachment(attach, direction); in dma_buf_map_attachment_unlocked()
1197 dma_resv_unlock(attach->dmabuf->resv); in dma_buf_map_attachment_unlocked()
1213 void dma_buf_unmap_attachment(struct dma_buf_attachment *attach, in dma_buf_unmap_attachment() argument
1219 if (WARN_ON(!attach || !attach->dmabuf || !sg_table)) in dma_buf_unmap_attachment()
1222 dma_resv_assert_held(attach->dmabuf->resv); in dma_buf_unmap_attachment()
1225 attach->dmabuf->ops->unmap_dma_buf(attach, sg_table, direction); in dma_buf_unmap_attachment()
1227 if (dma_buf_pin_on_map(attach)) in dma_buf_unmap_attachment()
1228 attach->dmabuf->ops->unpin(attach); in dma_buf_unmap_attachment()
1242 void dma_buf_unmap_attachment_unlocked(struct dma_buf_attachment *attach, in dma_buf_unmap_attachment_unlocked() argument
1248 if (WARN_ON(!attach || !attach->dmabuf || !sg_table)) in dma_buf_unmap_attachment_unlocked()
1251 dma_resv_lock(attach->dmabuf->resv, NULL); in dma_buf_unmap_attachment_unlocked()
1252 dma_buf_unmap_attachment(attach, sg_table, direction); in dma_buf_unmap_attachment_unlocked()
1253 dma_resv_unlock(attach->dmabuf->resv); in dma_buf_unmap_attachment_unlocked()
1267 struct dma_buf_attachment *attach; in dma_buf_move_notify() local
1271 list_for_each_entry(attach, &dmabuf->attachments, node) in dma_buf_move_notify()
1272 if (attach->importer_ops) in dma_buf_move_notify()
1273 attach->importer_ops->move_notify(attach); in dma_buf_move_notify()