From: "Antonino A. Daplas" - use struct fb_pixmap pixmap instead of struct fb_pixmap sprite. The softcursor uses fb_imageblit which also uses pixmap. - remove/change all references to info->cursor Signed-off-by: Antonino Daplas Signed-off-by: Andrew Morton --- 25-akpm/drivers/video/softcursor.c | 72 +++++++++++-------------------------- 1 files changed, 23 insertions(+), 49 deletions(-) diff -puN drivers/video/softcursor.c~fbdev-clean-up-softcursor-implementation drivers/video/softcursor.c --- 25/drivers/video/softcursor.c~fbdev-clean-up-softcursor-implementation Wed Oct 20 15:45:02 2004 +++ 25-akpm/drivers/video/softcursor.c Wed Oct 20 15:45:02 2004 @@ -19,79 +19,53 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor) { - unsigned int scan_align = info->sprite.scan_align - 1; - unsigned int buf_align = info->sprite.buf_align - 1; + unsigned int scan_align = info->pixmap.scan_align - 1; + unsigned int buf_align = info->pixmap.buf_align - 1; unsigned int i, size, dsize, s_pitch, d_pitch; - struct fb_cursor *cur; + struct fb_image *image; u8 *dst, *src; - if (cursor->set & FB_CUR_SETSIZE) { - info->cursor.image.height = cursor->image.height; - info->cursor.image.width = cursor->image.width; - } - - if (cursor->set & FB_CUR_SETPOS) { - info->cursor.image.dx = cursor->image.dx; - info->cursor.image.dy = cursor->image.dy; - } - - if (cursor->set & FB_CUR_SETHOT) - info->cursor.hot = cursor->hot; - - if (cursor->set & FB_CUR_SETCMAP) { - if (cursor->image.depth == 1) { - info->cursor.image.bg_color = cursor->image.bg_color; - info->cursor.image.fg_color = cursor->image.fg_color; - } else { - if (cursor->image.cmap.len) - fb_copy_cmap(&cursor->image.cmap, &info->cursor.image.cmap); - } - info->cursor.image.depth = cursor->image.depth; - } - - info->cursor.image.data = cursor->image.data; - if (info->state != FBINFO_STATE_RUNNING) return 0; - src = kmalloc(64 + sizeof(struct fb_cursor), GFP_ATOMIC); + src = kmalloc(64 + sizeof(struct fb_image), GFP_ATOMIC); + if (!src) return -ENOMEM; - cur = (struct fb_cursor *) (src + 64); - *cur = info->cursor; - s_pitch = (info->cursor.image.width + 7) >> 3; - dsize = s_pitch * info->cursor.image.height; + image = (struct fb_image *) (src + 64); + *image = cursor->image; + s_pitch = (image->width + 7) >> 3; + dsize = s_pitch * image->height; d_pitch = (s_pitch + scan_align) & ~scan_align; - size = d_pitch * info->cursor.image.height + buf_align; + size = d_pitch * image->height + buf_align; size &= ~buf_align; - dst = fb_get_buffer_offset(info, &info->sprite, size); + dst = fb_get_buffer_offset(info, &info->pixmap, size); - if (info->cursor.enable) { - switch (info->cursor.rop) { + if (cursor->enable) { + switch (cursor->rop) { case ROP_XOR: for (i = 0; i < dsize; i++) - src[i] = cursor->image.data[i] ^ info->cursor.mask[i]; + src[i] = image->data[i] ^ cursor->mask[i]; break; case ROP_COPY: default: for (i = 0; i < dsize; i++) - src[i] = cursor->image.data[i] & info->cursor.mask[i]; + src[i] = image->data[i] & cursor->mask[i]; break; } } else - memcpy(src, cursor->image.data, dsize); + memcpy(src, image->data, dsize); - if (info->sprite.outbuf) - fb_iomove_buf_aligned(info, &info->sprite, dst, d_pitch, src, - s_pitch, info->cursor.image.height); + if (info->pixmap.outbuf) + fb_iomove_buf_aligned(info, &info->pixmap, dst, d_pitch, src, + s_pitch, image->height); else - fb_sysmove_buf_aligned(info, &info->sprite, dst, d_pitch, src, - s_pitch, info->cursor.image.height); - cur->image.data = dst; - - info->fbops->fb_imageblit(info, &cur->image); + fb_sysmove_buf_aligned(info, &info->pixmap, dst, d_pitch, src, + s_pitch, image->height); + image->data = dst; + info->fbops->fb_imageblit(info, image); kfree(src); return 0; _