int s3cfb_unmap_default_video_memory(struct s3cfb_global *fbdev,
					struct fb_info *fb)
{
	struct fb_fix_screeninfo *fix = &fb->fix;
	struct s3cfb_window *win = fb->par;
#ifdef CONFIG_VCM
	int i;
#endif

	if (fix->smem_start) {

#ifdef CONFIG_VCM
		vcm_unmap(win->s5p_vcm_res);
		cma_free(fix->smem_start);
		for (i = 0; i < CONFIG_FB_S3C_NR_BUFFERS; i++)
			kfree(win->s3cfb_vcm[i].dev_vcm_res);
#else
		iounmap(fb->screen_base);
#endif
		fix->smem_start = 0;
		fix->smem_len = 0;
		dev_info(fbdev->dev, "[fb%d] video memory released\n", win->id);
	}

	return 0;
}
int s3cfb_unmap_video_memory(struct s3cfb_global *fbdev, struct fb_info *fb)
{
	struct fb_fix_screeninfo *fix = &fb->fix;
	struct s3cfb_window *win = fb->par;
#ifdef CONFIG_VCM
	struct fb_var_screeninfo *var = &fb->var;
	int frame_num = var->yres_virtual / var->yres;
	int i;
#endif

	if (fix->smem_start) {

#ifdef CONFIG_VCM
		vcm_unmap(win->s5p_vcm_res);
		cma_free(fix->smem_start);
		for (i = 0; i < frame_num; i++)
			kfree(win->s3cfb_vcm[i].dev_vcm_res);
#endif

		fix->smem_start = 0;
		fix->smem_len = 0;
		dev_info(fbdev->dev, "[fb%d] video memory released\n", win->id);
	}
	return 0;
}
int s3cfb_unmap_video_memory(struct s3cfb_global *fbdev, struct fb_info *fb)
{
	struct fb_fix_screeninfo *fix = &fb->fix;
	struct s3cfb_window *win = fb->par;

#ifdef CONFIG_CMA
	struct cma_info mem_info;
	int err;
#endif

#if defined(CONFIG_CPU_EXYNOS4212) || defined(CONFIG_CPU_EXYNOS4412)
	return 0;
#endif

	if (fix->smem_start) {
#ifdef CONFIG_CMA
		err = cma_info(&mem_info, fbdev->dev, 0);
		if (ERR_PTR(err))
			return -ENOMEM;

		if (fix->smem_start >= mem_info.lower_bound &&
				fix->smem_start <= mem_info.upper_bound)
			cma_free(fix->smem_start);
#else
		dma_free_coherent(fbdev->dev, fix->smem_len, fb->screen_base, fix->smem_start);
#endif
		fix->smem_start = 0;
		fix->smem_len = 0;
		dev_info(fbdev->dev, "[fb%d] video memory released\n", win->id);
	}
	return 0;
}
Esempio n. 4
0
		/**
		 * frees a hardware buffer
		 * @param buffer buffer to free
		 */
		virtual void deallocAccelBuffer(void* buffer) {
			PhysMap::iterator iter = m_physmap.find(buffer);
			if (iter == m_physmap.end()) {
				throw std::runtime_error("Invalid pointer freed");
			}
			cma_free(iter->second);
			m_physmap.erase(iter);
		}
static void vb2_cma_phys_put(void *buf_priv)
{
	struct vb2_cma_phys_buf *buf = buf_priv;

	if (atomic_dec_and_test(&buf->refcount)) {
		cma_free(buf->paddr);
		kfree(buf);
	}
}
Esempio n. 6
0
int s3cfb_unmap_default_video_memory(struct s3cfb_global *fbdev,
					struct fb_info *fb)
{
	struct fb_fix_screeninfo *fix = &fb->fix;
	struct s3cfb_window *win = fb->par;

	if (fix->smem_start) {

#ifdef CONFIG_S5P_MEM_CMA
		cma_free(fix->smem_start);
#endif

		fix->smem_start = 0;
		fix->smem_len = 0;
		dev_info(fbdev->dev, "[fb%d] video memory released\n", win->id);
	}

	return 0;
}
Esempio n. 7
0
		/**
		 * frees up all cma buffers and unmaps the register
		 */
		virtual ~XlnkDriver() {
			for (PhysMap::iterator iter = m_physmap.begin(); iter != m_physmap.end(); ++iter) {
				cma_free(iter->second);
			}
			cma_munmap(const_cast<AccelReg*>(m_reg), m_regSize);
		}