参照元

説明

引数

返り値

参考

実装

static int vb2_dc_mmap(void *buf_priv, struct vm_area_struct *vma)
{
        struct vb2_dc_buf *buf = buf_priv;
        int ret;
        if (!buf) {
                printk(KERN_ERR "No buffer to map\n");
                return -EINVAL;
        }
        /*
         * dma_mmap_* uses vm_pgoff as in-buffer offset, but we want to
         * map whole buffer
         */
        vma->vm_pgoff = 0;

        ret = dma_mmap_coherent(buf->dev, vma, buf->vaddr,
                buf->dma_addr, buf->size);

        if (ret) {
                pr_err("Remapping memory failed, error: %d\n", ret);
                return ret;
        }
        vma->vm_flags           |= VM_DONTEXPAND | VM_DONTDUMP;
        vma->vm_private_data    = &buf->handler;
        vma->vm_ops             = &vb2_common_vm_ops;
        vma->vm_ops->open(vma);
        pr_debug("%s: mapped dma addr 0x%08lx at 0x%08lx, size %ld\n",
                __func__, (unsigned long)buf->dma_addr, vma->vm_start,
                buf->size);
        return 0;
}

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-08 (月) 15:32:44