LCOV - code coverage report
Current view: top level - drivers/video/console - fbcon.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 19 15.8 %
Date: 2015-04-12 14:34:49 Functions: 0 0 -

          Line data    Source code
       1             : /*
       2             :  *  linux/drivers/video/console/fbcon.h -- Low level frame buffer based console driver
       3             :  *
       4             :  *      Copyright (C) 1997 Geert Uytterhoeven
       5             :  *
       6             :  *  This file is subject to the terms and conditions of the GNU General Public
       7             :  *  License.  See the file COPYING in the main directory of this archive
       8             :  *  for more details.
       9             :  */
      10             : 
      11             : #ifndef _VIDEO_FBCON_H
      12             : #define _VIDEO_FBCON_H
      13             : 
      14             : #include <linux/types.h>
      15             : #include <linux/vt_buffer.h>
      16             : #include <linux/vt_kern.h>
      17             : 
      18             : #include <asm/io.h>
      19             : 
      20             : #define FBCON_FLAGS_INIT         1
      21             : #define FBCON_FLAGS_CURSOR_TIMER 2
      22             : 
      23             :    /*
      24             :     *    This is the interface between the low-level console driver and the
      25             :     *    low-level frame buffer device
      26             :     */
      27             : 
      28             : struct display {
      29             :     /* Filled in by the low-level console driver */
      30             :     const u_char *fontdata;
      31             :     int userfont;                   /* != 0 if fontdata kmalloc()ed */
      32             :     u_short scrollmode;             /* Scroll Method */
      33             :     u_short inverse;                /* != 0 text black on white as default */
      34             :     short yscroll;                  /* Hardware scrolling */
      35             :     int vrows;                      /* number of virtual rows */
      36             :     int cursor_shape;
      37             :     int con_rotate;
      38             :     u32 xres_virtual;
      39             :     u32 yres_virtual;
      40             :     u32 height;
      41             :     u32 width;
      42             :     u32 bits_per_pixel;
      43             :     u32 grayscale;
      44             :     u32 nonstd;
      45             :     u32 accel_flags;
      46             :     u32 rotate;
      47             :     struct fb_bitfield red;
      48             :     struct fb_bitfield green;
      49             :     struct fb_bitfield blue;
      50             :     struct fb_bitfield transp;
      51             :     const struct fb_videomode *mode;
      52             : };
      53             : 
      54             : struct fbcon_ops {
      55             :         void (*bmove)(struct vc_data *vc, struct fb_info *info, int sy,
      56             :                       int sx, int dy, int dx, int height, int width);
      57             :         void (*clear)(struct vc_data *vc, struct fb_info *info, int sy,
      58             :                       int sx, int height, int width);
      59             :         void (*putcs)(struct vc_data *vc, struct fb_info *info,
      60             :                       const unsigned short *s, int count, int yy, int xx,
      61             :                       int fg, int bg);
      62             :         void (*clear_margins)(struct vc_data *vc, struct fb_info *info,
      63             :                               int bottom_only);
      64             :         void (*cursor)(struct vc_data *vc, struct fb_info *info, int mode,
      65             :                        int softback_lines, int fg, int bg);
      66             :         int  (*update_start)(struct fb_info *info);
      67             :         int  (*rotate_font)(struct fb_info *info, struct vc_data *vc);
      68             :         struct fb_var_screeninfo var;  /* copy of the current fb_var_screeninfo */
      69             :         struct timer_list cursor_timer; /* Cursor timer */
      70             :         struct fb_cursor cursor_state;
      71             :         struct display *p;
      72             :         int    currcon;                 /* Current VC. */
      73             :         int    cursor_flash;
      74             :         int    cursor_reset;
      75             :         int    blank_state;
      76             :         int    graphics;
      77             :         int    save_graphics; /* for debug enter/leave */
      78             :         int    flags;
      79             :         int    rotate;
      80             :         int    cur_rotate;
      81             :         char  *cursor_data;
      82             :         u8    *fontbuffer;
      83             :         u8    *fontdata;
      84             :         u8    *cursor_src;
      85             :         u32    cursor_size;
      86             :         u32    fd_size;
      87             : };
      88             :     /*
      89             :      *  Attribute Decoding
      90             :      */
      91             : 
      92             : /* Color */
      93             : #define attr_fgcol(fgshift,s)    \
      94             :         (((s) >> (fgshift)) & 0x0f)
      95             : #define attr_bgcol(bgshift,s)    \
      96             :         (((s) >> (bgshift)) & 0x0f)
      97             : 
      98             : /* Monochrome */
      99             : #define attr_bold(s) \
     100             :         ((s) & 0x200)
     101             : #define attr_reverse(s) \
     102             :         ((s) & 0x800)
     103             : #define attr_underline(s) \
     104             :         ((s) & 0x400)
     105             : #define attr_blink(s) \
     106             :         ((s) & 0x8000)
     107             :         
     108             : 
     109             : static inline int mono_col(const struct fb_info *info)
     110             : {
     111             :         __u32 max_len;
     112           0 :         max_len = max(info->var.green.length, info->var.red.length);
     113           0 :         max_len = max(info->var.blue.length, max_len);
     114           0 :         return (~(0xfff << max_len)) & 0xff;
     115             : }
     116             : 
     117             : static inline int attr_col_ec(int shift, struct vc_data *vc,
     118             :                               struct fb_info *info, int is_fg)
     119             : {
     120             :         int is_mono01;
     121             :         int col;
     122             :         int fg;
     123             :         int bg;
     124             : 
     125           0 :         if (!vc)
     126             :                 return 0;
     127             : 
     128           0 :         if (vc->vc_can_do_color)
     129           0 :                 return is_fg ? attr_fgcol(shift,vc->vc_video_erase_char)
     130             :                         : attr_bgcol(shift,vc->vc_video_erase_char);
     131             : 
     132           0 :         if (!info)
     133             :                 return 0;
     134             : 
     135             :         col = mono_col(info);
     136           0 :         is_mono01 = info->fix.visual == FB_VISUAL_MONO01;
     137             : 
     138           0 :         if (attr_reverse(vc->vc_video_erase_char)) {
     139             :                 fg = is_mono01 ? col : 0;
     140           0 :                 bg = is_mono01 ? 0 : col;
     141             :         }
     142             :         else {
     143             :                 fg = is_mono01 ? 0 : col;
     144           0 :                 bg = is_mono01 ? col : 0;
     145             :         }
     146             : 
     147             :         return is_fg ? fg : bg;
     148             : }
     149             : 
     150             : #define attr_bgcol_ec(bgshift, vc, info) attr_col_ec(bgshift, vc, info, 0)
     151             : #define attr_fgcol_ec(fgshift, vc, info) attr_col_ec(fgshift, vc, info, 1)
     152             : 
     153             : /* Font */
     154             : #define REFCOUNT(fd)    (((int *)(fd))[-1])
     155             : #define FNTSIZE(fd)     (((int *)(fd))[-2])
     156             : #define FNTCHARCNT(fd)  (((int *)(fd))[-3])
     157             : #define FNTSUM(fd)      (((int *)(fd))[-4])
     158             : #define FONT_EXTRA_WORDS 4
     159             : 
     160             :     /*
     161             :      *  Scroll Method
     162             :      */
     163             :      
     164             : /* There are several methods fbcon can use to move text around the screen:
     165             :  *
     166             :  *                     Operation   Pan    Wrap
     167             :  *---------------------------------------------
     168             :  * SCROLL_MOVE         copyarea    No     No
     169             :  * SCROLL_PAN_MOVE     copyarea    Yes    No
     170             :  * SCROLL_WRAP_MOVE    copyarea    No     Yes
     171             :  * SCROLL_REDRAW       imageblit   No     No
     172             :  * SCROLL_PAN_REDRAW   imageblit   Yes    No
     173             :  * SCROLL_WRAP_REDRAW  imageblit   No     Yes
     174             :  *
     175             :  * (SCROLL_WRAP_REDRAW is not implemented yet)
     176             :  *
     177             :  * In general, fbcon will choose the best scrolling
     178             :  * method based on the rule below:
     179             :  *
     180             :  * Pan/Wrap > accel imageblit > accel copyarea >
     181             :  * soft imageblit > (soft copyarea)
     182             :  *
     183             :  * Exception to the rule: Pan + accel copyarea is
     184             :  * preferred over Pan + accel imageblit.
     185             :  *
     186             :  * The above is typical for PCI/AGP cards. Unless
     187             :  * overridden, fbcon will never use soft copyarea.
     188             :  *
     189             :  * If you need to override the above rule, set the
     190             :  * appropriate flags in fb_info->flags.  For example,
     191             :  * to prefer copyarea over imageblit, set
     192             :  * FBINFO_READS_FAST.
     193             :  *
     194             :  * Other notes:
     195             :  * + use the hardware engine to move the text
     196             :  *    (hw-accelerated copyarea() and fillrect())
     197             :  * + use hardware-supported panning on a large virtual screen
     198             :  * + amifb can not only pan, but also wrap the display by N lines
     199             :  *    (i.e. visible line i = physical line (i+N) % yres).
     200             :  * + read what's already rendered on the screen and
     201             :  *     write it in a different place (this is cfb_copyarea())
     202             :  * + re-render the text to the screen
     203             :  *
     204             :  * Whether to use wrapping or panning can only be figured out at
     205             :  * runtime (when we know whether our font height is a multiple
     206             :  * of the pan/wrap step)
     207             :  *
     208             :  */
     209             : 
     210             : #define SCROLL_MOVE        0x001
     211             : #define SCROLL_PAN_MOVE    0x002
     212             : #define SCROLL_WRAP_MOVE   0x003
     213             : #define SCROLL_REDRAW      0x004
     214             : #define SCROLL_PAN_REDRAW  0x005
     215             : 
     216             : #ifdef CONFIG_FB_TILEBLITTING
     217             : extern void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info);
     218             : #endif
     219             : extern void fbcon_set_bitops(struct fbcon_ops *ops);
     220             : extern int  soft_cursor(struct fb_info *info, struct fb_cursor *cursor);
     221             : 
     222             : #define FBCON_ATTRIBUTE_UNDERLINE 1
     223             : #define FBCON_ATTRIBUTE_REVERSE   2
     224             : #define FBCON_ATTRIBUTE_BOLD      4
     225             : 
     226             : static inline int real_y(struct display *p, int ypos)
     227             : {
     228             :         int rows = p->vrows;
     229             : 
     230       10151 :         ypos += p->yscroll;
     231       10151 :         return ypos < rows ? ypos : ypos - rows;
     232             : }
     233             : 
     234             : 
     235             : static inline int get_attribute(struct fb_info *info, u16 c)
     236             : {
     237             :         int attribute = 0;
     238             : 
     239       10151 :         if (fb_get_color_depth(&info->var, &info->fix) == 1) {
     240           0 :                 if (attr_underline(c))
     241             :                         attribute |= FBCON_ATTRIBUTE_UNDERLINE;
     242           0 :                 if (attr_reverse(c))
     243           0 :                         attribute |= FBCON_ATTRIBUTE_REVERSE;
     244           0 :                 if (attr_bold(c))
     245           0 :                         attribute |= FBCON_ATTRIBUTE_BOLD;
     246             :         }
     247             : 
     248             :         return attribute;
     249             : }
     250             : 
     251             : #define FBCON_SWAP(i,r,v) ({ \
     252             :         typeof(r) _r = (r);  \
     253             :         typeof(v) _v = (v);  \
     254             :         (void) (&_r == &_v); \
     255             :         (i == FB_ROTATE_UR || i == FB_ROTATE_UD) ? _r : _v; })
     256             : 
     257             : #ifdef CONFIG_FRAMEBUFFER_CONSOLE_ROTATION
     258             : extern void fbcon_set_rotate(struct fbcon_ops *ops);
     259             : #else
     260             : #define fbcon_set_rotate(x) do {} while(0)
     261             : #endif /* CONFIG_FRAMEBUFFER_CONSOLE_ROTATION */
     262             : 
     263             : #endif /* _VIDEO_FBCON_H */
     264             : 

Generated by: LCOV version 1.11