const unsigned short *s, int count, int yy, int xx,
                      int fg, int bg)
 {
-       void (*move_unaligned)(struct fb_info *info, struct fb_pixmap *buf,
-                              u8 *dst, u32 d_pitch, u8 *src, u32 idx,
-                              u32 height, u32 shift_high, u32 shift_low,
-                              u32 mod);
-       void (*move_aligned)(struct fb_info *info, struct fb_pixmap *buf,
-                            u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch,
-                            u32 height);
        unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
        unsigned int width = (vc->vc_font.width + 7) >> 3;
        unsigned int cellsize = vc->vc_font.height * width;
        image.height = vc->vc_font.height;
        image.depth = 1;
 
-       if (info->pixmap.outbuf && info->pixmap.inbuf) {
-               move_aligned = fb_iomove_buf_aligned;
-               move_unaligned = fb_iomove_buf_unaligned;
-       } else {
-               move_aligned = fb_sysmove_buf_aligned;
-               move_unaligned = fb_sysmove_buf_unaligned;
-       }
        while (count) {
                if (count > maxcnt)
                        cnt = k = maxcnt;
                                        src = buf;
                                }
 
-                               move_unaligned(info, &info->pixmap, dst, pitch,
+                               fb_sysmove_buf_unaligned(info, &info->pixmap, dst, pitch,
                                               src, idx, image.height,
                                               shift_high, shift_low, mod);
                                shift_low += mod;
                                        src = buf;
                                }
 
-                               move_aligned(info, &info->pixmap, dst, pitch,
+                               fb_sysmove_buf_aligned(info, &info->pixmap, dst, pitch,
                                             src, idx, image.height);
                                dst += width;
                        }
 
 EXPORT_SYMBOL(fb_get_color_depth);
 
 /*
- * Drawing helpers.
+ * Data padding functions.
  */
-void fb_iomove_buf_aligned(struct fb_info *info, struct fb_pixmap *buf,
-                          u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch,
-                          u32 height)
-{
-       int i;
-
-       for (i = height; i--; ) {
-               buf->outbuf(info, dst, src, s_pitch);
-               src += s_pitch;
-               dst += d_pitch;
-       }
-}
-
 void fb_sysmove_buf_aligned(struct fb_info *info, struct fb_pixmap *buf,
                            u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch,
                            u32 height)
 {
-       int i, j;
+       int i;
 
        for (i = height; i--; ) {
-               for (j = 0; j < s_pitch; j++)
-                       dst[j] = src[j];
+               memcpy(dst, src, s_pitch);
                src += s_pitch;
                dst += d_pitch;
        }
 }
-
-void fb_iomove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
-                            u8 *dst, u32 d_pitch, u8 *src, u32 idx,
-                            u32 height, u32 shift_high, u32 shift_low,
-                            u32 mod)
-{
-       u8 mask = (u8) (0xfff << shift_high), tmp;
-       int i, j;
-
-       for (i = height; i--; ) {
-               for (j = 0; j < idx; j++) {
-                       tmp = buf->inbuf(info, dst+j);
-                       tmp &= mask;
-                       tmp |= *src >> shift_low;
-                       buf->outbuf(info, dst+j, &tmp, 1);
-                       tmp = *src << shift_high;
-                       buf->outbuf(info, dst+j+1, &tmp, 1);
-                       src++;
-               }
-               tmp = buf->inbuf(info, dst+idx);
-               tmp &= mask;
-               tmp |= *src >> shift_low;
-               buf->outbuf(info, dst+idx, &tmp, 1);
-               if (shift_high < mod) {
-                       tmp = *src << shift_high;
-                       buf->outbuf(info, dst+idx+1, &tmp, 1);
-               }       
-               src++;
-               dst += d_pitch;
-       }
-}
+EXPORT_SYMBOL(fb_sysmove_buf_aligned);
 
 void fb_sysmove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
                              u8 *dst, u32 d_pitch, u8 *src, u32 idx,
                dst += d_pitch;
        }
 }
+EXPORT_SYMBOL(fb_sysmove_buf_unaligned);
 
 /*
  * we need to lock this section since fb_cursor
 EXPORT_SYMBOL(fb_blank);
 EXPORT_SYMBOL(fb_pan_display);
 EXPORT_SYMBOL(fb_get_buffer_offset);
-EXPORT_SYMBOL(fb_iomove_buf_unaligned);
-EXPORT_SYMBOL(fb_iomove_buf_aligned);
-EXPORT_SYMBOL(fb_sysmove_buf_unaligned);
-EXPORT_SYMBOL(fb_sysmove_buf_aligned);
 EXPORT_SYMBOL(fb_set_suspend);
 EXPORT_SYMBOL(fb_register_client);
 EXPORT_SYMBOL(fb_unregister_client);
 
        } else 
                memcpy(src, image->data, dsize);
        
-       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->pixmap, dst, d_pitch, src,
-                                  s_pitch, image->height);
+       fb_sysmove_buf_aligned(info, &info->pixmap, dst, d_pitch, src,
+                               s_pitch, image->height);
 
        image->data = dst;
        info->fbops->fb_imageblit(info, image);
 
        u32 offset;             /* current offset to buffer             */
        u32 buf_align;          /* byte alignment of each bitmap        */
        u32 scan_align;         /* alignment per scanline               */
-       u32 access_align;       /* alignment per read/write             */
+       u32 access_align;       /* alignment per read/write (bits)      */
        u32 flags;              /* see FB_PIXMAP_*                      */
        /* access methods */
-       void (*outbuf)(struct fb_info *info, u8 *addr, u8 *src, unsigned int size);
-       u8   (*inbuf) (struct fb_info *info, u8 *addr);
+       void (*writeio)(struct fb_info *info, void __iomem *dst, void *src, unsigned int size);
+       void (*readio) (struct fb_info *info, void *dst, void __iomem *src, unsigned int size);
 };
 
 
 extern int fb_prepare_logo(struct fb_info *fb_info);
 extern int fb_show_logo(struct fb_info *fb_info);
 extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
-extern void fb_iomove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
-                               u8 *dst, u32 d_pitch, u8 *src, u32 idx,
-                               u32 height, u32 shift_high, u32 shift_low, u32 mod);
-extern void fb_iomove_buf_aligned(struct fb_info *info, struct fb_pixmap *buf,
-                               u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch,
-                               u32 height);
 extern void fb_sysmove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
                                u8 *dst, u32 d_pitch, u8 *src, u32 idx,
                                u32 height, u32 shift_high, u32 shift_low, u32 mod);