diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 776f7fc..14d5586 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c @@ -1023,6 +1023,9 @@ fb_ioctl(struct inode *inode, struct fil struct fb_con2fbmap con2fb; struct fb_cmap_user cmap; struct fb_event event; + struct fb_copyarea area; + struct fb_fillrect rect; + struct fb_image image; void __user *argp = (void __user *)arg; int i; @@ -1103,6 +1106,27 @@ #endif /* CONFIG_KMOD */ info->flags &= ~FBINFO_MISC_USEREVENT; release_console_sem(); return i; + case FBIOFILLRECT: + if (copy_from_user(&rect, argp, sizeof(rect))) + return -EFAULT; + acquire_console_sem(); + fb->fb_fillrect(info, &rect); + release_console_sem(); + return 0; + case FBIOCOPYAREA: + if (copy_from_user(&area, argp, sizeof(area))) + return -EFAULT; + acquire_console_sem(); + fb->fb_copyarea(info, &area); + release_console_sem(); + return 0; + case FBIOIMAGEBLIT: + if (copy_from_user(&image, argp, sizeof(image))) + return -EFAULT; + acquire_console_sem(); + fb->fb_imageblit(info, &image); + release_console_sem(); + return 0; default: if (fb->fb_ioctl == NULL) return -EINVAL; diff --git a/include/linux/fb.h b/include/linux/fb.h index 72295b0..a369d0f 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -38,6 +38,9 @@ #define FBIOGET_GLYPH 0x4615 #define FBIOGET_HWCINFO 0x4616 #define FBIOPUT_MODEINFO 0x4617 #define FBIOGET_DISPINFO 0x4618 +#define FBIOFILLRECT 0x4619 +#define FBIOCOPYAREA 0x461A +#define FBIOIMAGEBLIT 0x461B #define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */