summaryrefslogtreecommitdiff
path: root/src/drivers/emulation/qemu/fbcon.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/emulation/qemu/fbcon.h')
-rw-r--r--src/drivers/emulation/qemu/fbcon.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/src/drivers/emulation/qemu/fbcon.h b/src/drivers/emulation/qemu/fbcon.h
new file mode 100644
index 0000000000..56328323dc
--- /dev/null
+++ b/src/drivers/emulation/qemu/fbcon.h
@@ -0,0 +1,176 @@
+/*
+ * linux/drivers/video/fbcon.h -- Low level frame buffer based console driver
+ *
+ * Copyright (C) 1997 Geert Uytterhoeven
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive
+ * for more details.
+ */
+
+#ifndef _VIDEO_FBCON_H
+#define _VIDEO_FBCON_H
+
+
+
+struct display {
+ /* Filled in by the frame buffer device */
+
+ struct fb_var_screeninfo var; /* variable infos. yoffset and vmode */
+ /* are updated by fbcon.c */
+ struct fb_cmap cmap; /* colormap */
+ char *screen_base; /* pointer to top of virtual screen */
+ /* (virtual address) */
+ int visual;
+ int type; /* see FB_TYPE_* */
+ int type_aux; /* Interleave for interleaved Planes */
+ u16 ypanstep; /* zero if no hardware ypan */
+ u16 ywrapstep; /* zero if no hardware ywrap */
+ u32 line_length; /* length of a line in bytes */
+ u16 can_soft_blank; /* zero if no hardware blanking */
+ u16 inverse; /* != 0 text black on white as default */
+// struct display_switch *dispsw; /* low level operations */
+// void *dispsw_data; /* optional dispsw helper data */
+
+#if 0
+ struct fb_fix_cursorinfo fcrsr;
+ struct fb_var_cursorinfo *vcrsr;
+ struct fb_cursorstate crsrstate;
+#endif
+
+ /* Filled in by the low-level console driver */
+
+ struct vc_data *conp; /* pointer to console data */
+// struct fb_info *fb_info; /* frame buffer for this console */
+ int vrows; /* number of virtual rows */
+ unsigned short cursor_x; /* current cursor position */
+ unsigned short cursor_y;
+ int fgcol; /* text colors */
+ int bgcol;
+ u32 next_line; /* offset to one line below */
+ u32 next_plane; /* offset to next plane */
+ u8 *fontdata; /* Font associated to this display */
+ unsigned short _fontheightlog;
+ unsigned short _fontwidthlog;
+ unsigned short _fontheight;
+ unsigned short _fontwidth;
+ int userfont; /* != 0 if fontdata kmalloc()ed */
+ u16 scrollmode; /* Scroll Method */
+ short yscroll; /* Hardware scrolling */
+ unsigned char fgshift, bgshift;
+ unsigned short charmask; /* 0xff or 0x1ff */
+};
+
+
+#define fontheight(p) ((p)->_fontheight)
+#define fontheightlog(p) ((p)->_fontheightlog)
+
+#ifdef CONFIG_FBCON_FONTWIDTH8_ONLY
+
+/* fontwidth w is supported by dispsw */
+#define FONTWIDTH(w) (1 << ((8) - 1))
+/* fontwidths w1-w2 inclusive are supported by dispsw */
+#define FONTWIDTHRANGE(w1,w2) FONTWIDTH(8)
+
+#define fontwidth(p) (8)
+#define fontwidthlog(p) (0)
+
+#else
+
+/* fontwidth w is supported by dispsw */
+#define FONTWIDTH(w) (1 << ((w) - 1))
+/* fontwidths w1-w2 inclusive are supported by dispsw */
+#define FONTWIDTHRANGE(w1,w2) (FONTWIDTH(w2+1) - FONTWIDTH(w1))
+
+#define fontwidth(p) ((p)->_fontwidth)
+#define fontwidthlog(p) ((p)->_fontwidthlog)
+
+#endif
+
+ /*
+ * Attribute Decoding
+ */
+
+/* Color */
+#define attr_fgcol(p,s) \
+ (((s) >> ((p)->fgshift)) & 0x0f)
+#define attr_bgcol(p,s) \
+ (((s) >> ((p)->bgshift)) & 0x0f)
+#define attr_bgcol_ec(p,conp) \
+ ((conp) ? (((conp)->vc_video_erase_char >> ((p)->bgshift)) & 0x0f) : 0)
+
+/* Monochrome */
+#define attr_bold(p,s) \
+ ((s) & 0x200)
+#define attr_reverse(p,s) \
+ (((s) & 0x800) ^ ((p)->inverse ? 0x800 : 0))
+#define attr_underline(p,s) \
+ ((s) & 0x400)
+#define attr_blink(p,s) \
+ ((s) & 0x8000)
+
+ /*
+ * Scroll Method
+ */
+
+/* Internal flags */
+#define __SCROLL_YPAN 0x001
+#define __SCROLL_YWRAP 0x002
+#define __SCROLL_YMOVE 0x003
+#define __SCROLL_YREDRAW 0x004
+#define __SCROLL_YMASK 0x00f
+#define __SCROLL_YFIXED 0x010
+#define __SCROLL_YNOMOVE 0x020
+#define __SCROLL_YPANREDRAW 0x040
+#define __SCROLL_YNOPARTIAL 0x080
+
+/* Only these should be used by the drivers */
+/* Which one should you use? If you have a fast card and slow bus,
+ then probably just 0 to indicate fbcon should choose between
+ YWRAP/YPAN+MOVE/YMOVE. On the other side, if you have a fast bus
+ and even better if your card can do fonting (1->8/32bit painting),
+ you should consider either SCROLL_YREDRAW (if your card is
+ able to do neither YPAN/YWRAP), or SCROLL_YNOMOVE.
+ The best is to test it with some real life scrolling (usually, not
+ all lines on the screen are filled completely with non-space characters,
+ and REDRAW performs much better on such lines, so don't cat a file
+ with every line covering all screen columns, it would not be the right
+ benchmark).
+ */
+#define SCROLL_YREDRAW (__SCROLL_YFIXED|__SCROLL_YREDRAW)
+#define SCROLL_YNOMOVE (__SCROLL_YNOMOVE|__SCROLL_YPANREDRAW)
+
+/* SCROLL_YNOPARTIAL, used in combination with the above, is for video
+ cards which can not handle using panning to scroll a portion of the
+ screen without excessive flicker. Panning will only be used for
+ whole screens.
+ */
+/* Namespace consistency */
+#define SCROLL_YNOPARTIAL __SCROLL_YNOPARTIAL
+
+
+#if defined(__i386__) || defined(__alpha__) || \
+ defined(__x86_64__) || defined(__hppa__) || \
+ defined(__powerpc64__)
+
+#define fb_readb __raw_readb
+#define fb_readw __raw_readw
+#define fb_readl __raw_readl
+#define fb_writeb __raw_writeb
+#define fb_writew __raw_writew
+#define fb_writel __raw_writel
+#define fb_memset memset_io
+
+#else
+
+#define fb_readb(addr) (*(volatile u8 *) (addr))
+#define fb_readw(addr) (*(volatile u16 *) (addr))
+#define fb_readl(addr) (*(volatile u32 *) (addr))
+#define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b))
+#define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b))
+#define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b))
+#define fb_memset memset
+
+#endif
+
+#endif /* _VIDEO_FBCON_H */