blob: 8b83a3682bb36219b282a49f2e24214a46361d60 [file] [log] [blame]
Stefan Reinauer234454d2004-04-24 23:10:51 +00001/*
2 * linux/drivers/video/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
15
16struct display {
17 /* Filled in by the frame buffer device */
18
19 struct fb_var_screeninfo var; /* variable infos. yoffset and vmode */
20 /* are updated by fbcon.c */
21 struct fb_cmap cmap; /* colormap */
22 char *screen_base; /* pointer to top of virtual screen */
23 /* (virtual address) */
24 int visual;
25 int type; /* see FB_TYPE_* */
26 int type_aux; /* Interleave for interleaved Planes */
27 u16 ypanstep; /* zero if no hardware ypan */
28 u16 ywrapstep; /* zero if no hardware ywrap */
29 u32 line_length; /* length of a line in bytes */
30 u16 can_soft_blank; /* zero if no hardware blanking */
31 u16 inverse; /* != 0 text black on white as default */
32// struct display_switch *dispsw; /* low level operations */
33// void *dispsw_data; /* optional dispsw helper data */
34
35#if 0
36 struct fb_fix_cursorinfo fcrsr;
37 struct fb_var_cursorinfo *vcrsr;
38 struct fb_cursorstate crsrstate;
39#endif
40
41 /* Filled in by the low-level console driver */
42
43 struct vc_data *conp; /* pointer to console data */
44// struct fb_info *fb_info; /* frame buffer for this console */
45 int vrows; /* number of virtual rows */
46 unsigned short cursor_x; /* current cursor position */
47 unsigned short cursor_y;
48 int fgcol; /* text colors */
49 int bgcol;
50 u32 next_line; /* offset to one line below */
51 u32 next_plane; /* offset to next plane */
52 u8 *fontdata; /* Font associated to this display */
53 unsigned short _fontheightlog;
54 unsigned short _fontwidthlog;
55 unsigned short _fontheight;
56 unsigned short _fontwidth;
57 int userfont; /* != 0 if fontdata kmalloc()ed */
58 u16 scrollmode; /* Scroll Method */
59 short yscroll; /* Hardware scrolling */
60 unsigned char fgshift, bgshift;
61 unsigned short charmask; /* 0xff or 0x1ff */
62};
63
64
65#define fontheight(p) ((p)->_fontheight)
66#define fontheightlog(p) ((p)->_fontheightlog)
67
Myles Watson0bc61542009-10-17 13:25:07 +000068#ifdef FBCON_FONTWIDTH8_ONLY
Stefan Reinauer234454d2004-04-24 23:10:51 +000069
70/* fontwidth w is supported by dispsw */
71#define FONTWIDTH(w) (1 << ((8) - 1))
72/* fontwidths w1-w2 inclusive are supported by dispsw */
73#define FONTWIDTHRANGE(w1,w2) FONTWIDTH(8)
74
75#define fontwidth(p) (8)
76#define fontwidthlog(p) (0)
77
78#else
79
80/* fontwidth w is supported by dispsw */
81#define FONTWIDTH(w) (1 << ((w) - 1))
82/* fontwidths w1-w2 inclusive are supported by dispsw */
83#define FONTWIDTHRANGE(w1,w2) (FONTWIDTH(w2+1) - FONTWIDTH(w1))
84
85#define fontwidth(p) ((p)->_fontwidth)
86#define fontwidthlog(p) ((p)->_fontwidthlog)
87
88#endif
89
90 /*
91 * Attribute Decoding
92 */
93
94/* Color */
95#define attr_fgcol(p,s) \
96 (((s) >> ((p)->fgshift)) & 0x0f)
97#define attr_bgcol(p,s) \
98 (((s) >> ((p)->bgshift)) & 0x0f)
99#define attr_bgcol_ec(p,conp) \
100 ((conp) ? (((conp)->vc_video_erase_char >> ((p)->bgshift)) & 0x0f) : 0)
101
102/* Monochrome */
103#define attr_bold(p,s) \
104 ((s) & 0x200)
105#define attr_reverse(p,s) \
106 (((s) & 0x800) ^ ((p)->inverse ? 0x800 : 0))
107#define attr_underline(p,s) \
108 ((s) & 0x400)
109#define attr_blink(p,s) \
110 ((s) & 0x8000)
111
112 /*
113 * Scroll Method
114 */
115
116/* Internal flags */
117#define __SCROLL_YPAN 0x001
118#define __SCROLL_YWRAP 0x002
119#define __SCROLL_YMOVE 0x003
120#define __SCROLL_YREDRAW 0x004
121#define __SCROLL_YMASK 0x00f
122#define __SCROLL_YFIXED 0x010
123#define __SCROLL_YNOMOVE 0x020
124#define __SCROLL_YPANREDRAW 0x040
125#define __SCROLL_YNOPARTIAL 0x080
126
127/* Only these should be used by the drivers */
128/* Which one should you use? If you have a fast card and slow bus,
129 then probably just 0 to indicate fbcon should choose between
130 YWRAP/YPAN+MOVE/YMOVE. On the other side, if you have a fast bus
131 and even better if your card can do fonting (1->8/32bit painting),
132 you should consider either SCROLL_YREDRAW (if your card is
133 able to do neither YPAN/YWRAP), or SCROLL_YNOMOVE.
134 The best is to test it with some real life scrolling (usually, not
135 all lines on the screen are filled completely with non-space characters,
136 and REDRAW performs much better on such lines, so don't cat a file
137 with every line covering all screen columns, it would not be the right
138 benchmark).
139 */
140#define SCROLL_YREDRAW (__SCROLL_YFIXED|__SCROLL_YREDRAW)
141#define SCROLL_YNOMOVE (__SCROLL_YNOMOVE|__SCROLL_YPANREDRAW)
142
143/* SCROLL_YNOPARTIAL, used in combination with the above, is for video
144 cards which can not handle using panning to scroll a portion of the
145 screen without excessive flicker. Panning will only be used for
146 whole screens.
147 */
148/* Namespace consistency */
149#define SCROLL_YNOPARTIAL __SCROLL_YNOPARTIAL
150
151
152#if defined(__i386__) || defined(__alpha__) || \
153 defined(__x86_64__) || defined(__hppa__) || \
154 defined(__powerpc64__)
155
156#define fb_readb __raw_readb
157#define fb_readw __raw_readw
158#define fb_readl __raw_readl
159#define fb_writeb __raw_writeb
160#define fb_writew __raw_writew
161#define fb_writel __raw_writel
162#define fb_memset memset_io
163
164#else
165
166#define fb_readb(addr) (*(volatile u8 *) (addr))
167#define fb_readw(addr) (*(volatile u16 *) (addr))
168#define fb_readl(addr) (*(volatile u32 *) (addr))
169#define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b))
170#define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b))
171#define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b))
172#define fb_memset memset
173
174#endif
175
176#endif /* _VIDEO_FBCON_H */