Commit 82f42e4c authored by Benjamin Gaignard's avatar Benjamin Gaignard Committed by Daniel Vetter

fbmem: add a default get_fb_unmapped_area function

Allow generic frame-buffer to provide a default
get_fb_unmapped_area function if specific devices need it.

Usually this function is defined in architecture directories but
define it here may limit code duplication especially for all ARM
platforms without MMU.

version 5:
- set get_unmapped_area field if FB_PROVIDE_GET_FB_UNMAPPED_AREA is
  defined

version 4:
- introdude a configuration flag to be independent of architecture
Signed-off-by: default avatarBenjamin Gaignard <benjamin.gaignard@linaro.org>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1483521177-21794-2-git-send-email-benjamin.gaignard@linaro.org
parent e8fa5671
...@@ -138,6 +138,14 @@ config FB_SYS_IMAGEBLIT ...@@ -138,6 +138,14 @@ config FB_SYS_IMAGEBLIT
blitting. This is used by drivers that don't provide their own blitting. This is used by drivers that don't provide their own
(accelerated) version and the framebuffer is in system RAM. (accelerated) version and the framebuffer is in system RAM.
config FB_PROVIDE_GET_FB_UNMAPPED_AREA
bool
depends on FB
default n
---help---
Allow generic frame-buffer to provide get_fb_unmapped_area
function.
menuconfig FB_FOREIGN_ENDIAN menuconfig FB_FOREIGN_ENDIAN
bool "Framebuffer foreign endianness support" bool "Framebuffer foreign endianness support"
depends on FB depends on FB
......
...@@ -1492,6 +1492,21 @@ __releases(&info->lock) ...@@ -1492,6 +1492,21 @@ __releases(&info->lock)
return 0; return 0;
} }
#ifdef CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA
unsigned long get_fb_unmapped_area(struct file *filp,
unsigned long addr, unsigned long len,
unsigned long pgoff, unsigned long flags)
{
struct fb_info * const info = filp->private_data;
unsigned long fb_size = PAGE_ALIGN(info->fix.smem_len);
if (pgoff > fb_size || len > fb_size - pgoff)
return -EINVAL;
return (unsigned long)info->screen_base + pgoff;
}
#endif
static const struct file_operations fb_fops = { static const struct file_operations fb_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.read = fb_read, .read = fb_read,
...@@ -1503,7 +1518,8 @@ static const struct file_operations fb_fops = { ...@@ -1503,7 +1518,8 @@ static const struct file_operations fb_fops = {
.mmap = fb_mmap, .mmap = fb_mmap,
.open = fb_open, .open = fb_open,
.release = fb_release, .release = fb_release,
#ifdef HAVE_ARCH_FB_UNMAPPED_AREA #if defined(HAVE_ARCH_FB_UNMAPPED_AREA) || \
defined(CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA)
.get_unmapped_area = get_fb_unmapped_area, .get_unmapped_area = get_fb_unmapped_area,
#endif #endif
#ifdef CONFIG_FB_DEFERRED_IO #ifdef CONFIG_FB_DEFERRED_IO
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment