Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / video / cfbcopyarea.c
index 67711f7..7441532 100644 (file)
@@ -64,8 +64,8 @@ bitcpy(unsigned long __iomem *dst, int dst_idx, const unsigned long __iomem *src
        int const shift = dst_idx-src_idx;
        int left, right;
 
-       first = ~0UL >> dst_idx;
-       last = ~(~0UL >> ((dst_idx+n) % bits));
+       first = FB_SHIFT_HIGH(~0UL, dst_idx);
+       last = ~(FB_SHIFT_HIGH(~0UL, (dst_idx+n) % bits));
 
        if (!shift) {
                // Same alignment for source and dest
@@ -216,8 +216,8 @@ bitcpy_rev(unsigned long __iomem *dst, int dst_idx, const unsigned long __iomem
 
        shift = dst_idx-src_idx;
 
-       first = ~0UL << (bits - 1 - dst_idx);
-       last = ~(~0UL << (bits - 1 - ((dst_idx-n) % bits)));
+       first = FB_SHIFT_LOW(~0UL, bits - 1 - dst_idx);
+       last = ~(FB_SHIFT_LOW(~0UL, bits - 1 - ((dst_idx-n) % bits)));
 
        if (!shift) {
                // Same alignment for source and dest
@@ -349,46 +349,10 @@ void cfb_copyarea(struct fb_info *p, const struct fb_copyarea *area)
        unsigned long __iomem *dst = NULL, *src = NULL;
        int bits = BITS_PER_LONG, bytes = bits >> 3;
        int dst_idx = 0, src_idx = 0, rev_copy = 0;
-       int x2, y2, vxres, vyres;
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
-       /* We want rotation but lack hardware to do it for us. */
-       if (!p->fbops->fb_rotate && p->var.rotate) {
-       }
-
-       vxres = p->var.xres_virtual;
-       vyres = p->var.yres_virtual;
-
-       if (area->dx > vxres || area->sx > vxres ||
-           area->dy > vyres || area->sy > vyres)
-               return;
-
-       /* clip the destination
-        * We could use hardware clipping but on many cards you get around
-        * hardware clipping by writing to framebuffer directly.
-        */
-       x2 = area->dx + area->width;
-       y2 = area->dy + area->height;
-       dx = area->dx > 0 ? area->dx : 0;
-       dy = area->dy > 0 ? area->dy : 0;
-       x2 = x2 < vxres ? x2 : vxres;
-       y2 = y2 < vyres ? y2 : vyres;
-       width = x2 - dx;
-       height = y2 - dy;
-
-       if ((width==0) ||(height==0))
-               return;
-
-       /* update sx1,sy1 */
-       sx += (dx - area->dx);
-       sy += (dy - area->dy);
-
-       /* the source must be completely inside the virtual screen */
-       if (sx < 0 || sy < 0 || (sx + width) > vxres || (sy + height) > vyres)
-               return;
-
        /* if the beginning of the target area might overlap with the end of
        the source area, be have to copy the area reverse. */
        if ((dy == sy && dx > sx) || (dy > sy)) {