Lines Matching refs:dmabuf

819 	struct mbochs_dmabuf *dmabuf = vma->vm_private_data;
821 if (WARN_ON(vmf->pgoff >= dmabuf->pagecount))
824 vmf->page = dmabuf->pages[vmf->pgoff];
835 struct mbochs_dmabuf *dmabuf = buf->priv;
836 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
838 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
844 vma->vm_private_data = dmabuf;
848 static void mbochs_print_dmabuf(struct mbochs_dmabuf *dmabuf,
851 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
852 u32 fourcc = dmabuf->mode.drm_format;
855 prefix, dmabuf->id,
860 dmabuf->mode.width, dmabuf->mode.height, dmabuf->mode.stride,
861 dmabuf->mode.offset, dmabuf->mode.size, dmabuf->pagecount);
867 struct mbochs_dmabuf *dmabuf = at->dmabuf->priv;
868 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
871 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
876 if (sg_alloc_table_from_pages(sg, dmabuf->pages, dmabuf->pagecount,
877 0, dmabuf->mode.size, GFP_KERNEL) < 0)
896 struct mbochs_dmabuf *dmabuf = at->dmabuf->priv;
897 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
899 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
908 struct mbochs_dmabuf *dmabuf = buf->priv;
909 struct mdev_state *mdev_state = dmabuf->mdev_state;
913 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
915 for (pg = 0; pg < dmabuf->pagecount; pg++)
916 put_page(dmabuf->pages[pg]);
919 dmabuf->buf = NULL;
920 if (dmabuf->unlinked)
921 kfree(dmabuf);
935 struct mbochs_dmabuf *dmabuf;
940 dmabuf = kzalloc(sizeof(struct mbochs_dmabuf), GFP_KERNEL);
941 if (!dmabuf)
944 dmabuf->mode = *mode;
945 dmabuf->id = mdev_state->next_id++;
946 dmabuf->pagecount = DIV_ROUND_UP(mode->size, PAGE_SIZE);
947 dmabuf->pages = kcalloc(dmabuf->pagecount, sizeof(struct page *),
949 if (!dmabuf->pages)
952 page_offset = dmabuf->mode.offset >> PAGE_SHIFT;
953 for (pg = 0; pg < dmabuf->pagecount; pg++) {
954 dmabuf->pages[pg] = __mbochs_get_page(mdev_state,
956 if (!dmabuf->pages[pg])
960 dmabuf->mdev_state = mdev_state;
961 list_add(&dmabuf->next, &mdev_state->dmabufs);
963 mbochs_print_dmabuf(dmabuf, __func__);
964 return dmabuf;
968 put_page(dmabuf->pages[--pg]);
969 kfree(dmabuf->pages);
971 kfree(dmabuf);
979 struct mbochs_dmabuf *dmabuf;
983 list_for_each_entry(dmabuf, &mdev_state->dmabufs, next)
984 if (mbochs_modes_equal(&dmabuf->mode, mode))
985 return dmabuf;
993 struct mbochs_dmabuf *dmabuf;
997 list_for_each_entry(dmabuf, &mdev_state->dmabufs, next)
998 if (dmabuf->id == id)
999 return dmabuf;
1004 static int mbochs_dmabuf_export(struct mbochs_dmabuf *dmabuf)
1006 struct mdev_state *mdev_state = dmabuf->mdev_state;
1013 if (!IS_ALIGNED(dmabuf->mode.offset, PAGE_SIZE)) {
1020 exp_info.size = dmabuf->mode.size;
1021 exp_info.priv = dmabuf;
1030 dmabuf->buf = buf;
1031 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
1103 struct mbochs_dmabuf *dmabuf;
1138 dmabuf = mbochs_dmabuf_find_by_mode(mdev_state, &mode);
1139 if (!dmabuf)
1141 if (!dmabuf) {
1146 plane->drm_format = dmabuf->mode.drm_format;
1147 plane->width = dmabuf->mode.width;
1148 plane->height = dmabuf->mode.height;
1149 plane->stride = dmabuf->mode.stride;
1150 plane->size = dmabuf->mode.size;
1151 plane->dmabuf_id = dmabuf->id;
1166 struct mbochs_dmabuf *dmabuf;
1170 dmabuf = mbochs_dmabuf_find_by_id(mdev_state, id);
1171 if (!dmabuf) {
1176 if (!dmabuf->buf)
1177 mbochs_dmabuf_export(dmabuf);
1181 if (!dmabuf->buf)
1184 return dma_buf_fd(dmabuf->buf, 0);
1311 struct mbochs_dmabuf *dmabuf, *tmp;
1315 list_for_each_entry_safe(dmabuf, tmp, &mdev_state->dmabufs, next) {
1316 list_del(&dmabuf->next);
1317 if (dmabuf->buf) {
1319 dmabuf->unlinked = true;
1321 kfree(dmabuf);