root/drivers/video/fbdev/atafb_mfb.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. atafb_mfb_copyarea
  2. atafb_mfb_fillrect
  3. atafb_mfb_linefill

   1 /*
   2  *  linux/drivers/video/mfb.c -- Low level frame buffer operations for
   3  *                               monochrome
   4  *
   5  *      Created 5 Apr 1997 by Geert Uytterhoeven
   6  *
   7  *  This file is subject to the terms and conditions of the GNU General Public
   8  *  License.  See the file COPYING in the main directory of this archive for
   9  *  more details.
  10  */
  11 
  12 #include <linux/string.h>
  13 #include <linux/fb.h>
  14 
  15 #include "atafb.h"
  16 #include "atafb_utils.h"
  17 
  18 
  19     /*
  20      *  Monochrome
  21      */
  22 
  23 void atafb_mfb_copyarea(struct fb_info *info, u_long next_line,
  24                         int sy, int sx, int dy, int dx,
  25                         int height, int width)
  26 {
  27         u8 *src, *dest;
  28         u_int rows;
  29 
  30         if (sx == 0 && dx == 0 && width == next_line) {
  31                 src = (u8 *)info->screen_base + sy * (width >> 3);
  32                 dest = (u8 *)info->screen_base + dy * (width >> 3);
  33                 fb_memmove(dest, src, height * (width >> 3));
  34         } else if (dy <= sy) {
  35                 src = (u8 *)info->screen_base + sy * next_line + (sx >> 3);
  36                 dest = (u8 *)info->screen_base + dy * next_line + (dx >> 3);
  37                 for (rows = height; rows--;) {
  38                         fb_memmove(dest, src, width >> 3);
  39                         src += next_line;
  40                         dest += next_line;
  41                 }
  42         } else {
  43                 src = (u8 *)info->screen_base + (sy + height - 1) * next_line + (sx >> 3);
  44                 dest = (u8 *)info->screen_base + (dy + height - 1) * next_line + (dx >> 3);
  45                 for (rows = height; rows--;) {
  46                         fb_memmove(dest, src, width >> 3);
  47                         src -= next_line;
  48                         dest -= next_line;
  49                 }
  50         }
  51 }
  52 
  53 void atafb_mfb_fillrect(struct fb_info *info, u_long next_line, u32 color,
  54                         int sy, int sx, int height, int width)
  55 {
  56         u8 *dest;
  57         u_int rows;
  58 
  59         dest = (u8 *)info->screen_base + sy * next_line + (sx >> 3);
  60 
  61         if (sx == 0 && width == next_line) {
  62                 if (color)
  63                         fb_memset255(dest, height * (width >> 3));
  64                 else
  65                         fb_memclear(dest, height * (width >> 3));
  66         } else {
  67                 for (rows = height; rows--; dest += next_line) {
  68                         if (color)
  69                                 fb_memset255(dest, width >> 3);
  70                         else
  71                                 fb_memclear_small(dest, width >> 3);
  72                 }
  73         }
  74 }
  75 
  76 void atafb_mfb_linefill(struct fb_info *info, u_long next_line,
  77                         int dy, int dx, u32 width,
  78                         const u8 *data, u32 bgcolor, u32 fgcolor)
  79 {
  80         u8 *dest;
  81         u_int rows;
  82 
  83         dest = (u8 *)info->screen_base + dy * next_line + (dx >> 3);
  84 
  85         for (rows = width / 8; rows--; /* check margins */ ) {
  86                 // use fast_memmove or fb_memmove
  87                 *dest++ = *data++;
  88         }
  89 }

/* [<][>][^][v][top][bottom][index][help] */