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; }
/** * 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); } }
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; }
/** * 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); }