Lines Matching refs:dmabuf

789 	struct mbochs_dmabuf *dmabuf = vma->vm_private_data;
791 if (WARN_ON(vmf->pgoff >= dmabuf->pagecount))
794 vmf->page = dmabuf->pages[vmf->pgoff];
805 struct mbochs_dmabuf *dmabuf = buf->priv;
806 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
808 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
814 vma->vm_private_data = dmabuf;
818 static void mbochs_print_dmabuf(struct mbochs_dmabuf *dmabuf,
821 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
822 u32 fourcc = dmabuf->mode.drm_format;
825 prefix, dmabuf->id,
830 dmabuf->mode.width, dmabuf->mode.height, dmabuf->mode.stride,
831 dmabuf->mode.offset, dmabuf->mode.size, dmabuf->pagecount);
837 struct mbochs_dmabuf *dmabuf = at->dmabuf->priv;
838 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
841 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
846 if (sg_alloc_table_from_pages(sg, dmabuf->pages, dmabuf->pagecount,
847 0, dmabuf->mode.size, GFP_KERNEL) < 0)
866 struct mbochs_dmabuf *dmabuf = at->dmabuf->priv;
867 struct device *dev = mdev_dev(dmabuf->mdev_state->mdev);
869 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
878 struct mbochs_dmabuf *dmabuf = buf->priv;
879 struct mdev_state *mdev_state = dmabuf->mdev_state;
883 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
885 for (pg = 0; pg < dmabuf->pagecount; pg++)
886 put_page(dmabuf->pages[pg]);
889 dmabuf->buf = NULL;
890 if (dmabuf->unlinked)
891 kfree(dmabuf);
905 struct mbochs_dmabuf *dmabuf;
910 dmabuf = kzalloc(sizeof(struct mbochs_dmabuf), GFP_KERNEL);
911 if (!dmabuf)
914 dmabuf->mode = *mode;
915 dmabuf->id = mdev_state->next_id++;
916 dmabuf->pagecount = DIV_ROUND_UP(mode->size, PAGE_SIZE);
917 dmabuf->pages = kcalloc(dmabuf->pagecount, sizeof(struct page *),
919 if (!dmabuf->pages)
922 page_offset = dmabuf->mode.offset >> PAGE_SHIFT;
923 for (pg = 0; pg < dmabuf->pagecount; pg++) {
924 dmabuf->pages[pg] = __mbochs_get_page(mdev_state,
926 if (!dmabuf->pages[pg])
930 dmabuf->mdev_state = mdev_state;
931 list_add(&dmabuf->next, &mdev_state->dmabufs);
933 mbochs_print_dmabuf(dmabuf, __func__);
934 return dmabuf;
938 put_page(dmabuf->pages[--pg]);
939 kfree(dmabuf->pages);
941 kfree(dmabuf);
949 struct mbochs_dmabuf *dmabuf;
953 list_for_each_entry(dmabuf, &mdev_state->dmabufs, next)
954 if (mbochs_modes_equal(&dmabuf->mode, mode))
955 return dmabuf;
963 struct mbochs_dmabuf *dmabuf;
967 list_for_each_entry(dmabuf, &mdev_state->dmabufs, next)
968 if (dmabuf->id == id)
969 return dmabuf;
974 static int mbochs_dmabuf_export(struct mbochs_dmabuf *dmabuf)
976 struct mdev_state *mdev_state = dmabuf->mdev_state;
983 if (!IS_ALIGNED(dmabuf->mode.offset, PAGE_SIZE)) {
990 exp_info.size = dmabuf->mode.size;
991 exp_info.priv = dmabuf;
1000 dmabuf->buf = buf;
1001 dev_dbg(dev, "%s: %d\n", __func__, dmabuf->id);
1082 struct mbochs_dmabuf *dmabuf;
1117 dmabuf = mbochs_dmabuf_find_by_mode(mdev_state, &mode);
1118 if (!dmabuf)
1120 if (!dmabuf) {
1125 plane->drm_format = dmabuf->mode.drm_format;
1126 plane->width = dmabuf->mode.width;
1127 plane->height = dmabuf->mode.height;
1128 plane->stride = dmabuf->mode.stride;
1129 plane->size = dmabuf->mode.size;
1130 plane->dmabuf_id = dmabuf->id;
1147 struct mbochs_dmabuf *dmabuf;
1151 dmabuf = mbochs_dmabuf_find_by_id(mdev_state, id);
1152 if (!dmabuf) {
1157 if (!dmabuf->buf)
1158 mbochs_dmabuf_export(dmabuf);
1162 if (!dmabuf->buf)
1165 return dma_buf_fd(dmabuf->buf, 0);
1297 struct mbochs_dmabuf *dmabuf, *tmp;
1301 list_for_each_entry_safe(dmabuf, tmp, &mdev_state->dmabufs, next) {
1302 list_del(&dmabuf->next);
1303 if (dmabuf->buf) {
1305 dmabuf->unlinked = true;
1307 kfree(dmabuf);