OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [video/] [console/] [fbcon.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
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    flags;
78
        int    rotate;
79
        int    cur_rotate;
80
        char  *cursor_data;
81
        u8    *fontbuffer;
82
        u8    *fontdata;
83
        u8    *cursor_src;
84
        u32    cursor_size;
85
        u32    fd_size;
86
};
87
    /*
88
     *  Attribute Decoding
89
     */
90
 
91
/* Color */
92
#define attr_fgcol(fgshift,s)    \
93
        (((s) >> (fgshift)) & 0x0f)
94
#define attr_bgcol(bgshift,s)    \
95
        (((s) >> (bgshift)) & 0x0f)
96
#define attr_bgcol_ec(bgshift,vc) \
97
        ((vc) ? (((vc)->vc_video_erase_char >> (bgshift)) & 0x0f) : 0)
98
#define attr_fgcol_ec(fgshift,vc) \
99
        ((vc) ? (((vc)->vc_video_erase_char >> (fgshift)) & 0x0f) : 0)
100
 
101
/* Monochrome */
102
#define attr_bold(s) \
103
        ((s) & 0x200)
104
#define attr_reverse(s) \
105
        ((s) & 0x800)
106
#define attr_underline(s) \
107
        ((s) & 0x400)
108
#define attr_blink(s) \
109
        ((s) & 0x8000)
110
 
111
/* Font */
112
#define REFCOUNT(fd)    (((int *)(fd))[-1])
113
#define FNTSIZE(fd)     (((int *)(fd))[-2])
114
#define FNTCHARCNT(fd)  (((int *)(fd))[-3])
115
#define FNTSUM(fd)      (((int *)(fd))[-4])
116
#define FONT_EXTRA_WORDS 4
117
 
118
    /*
119
     *  Scroll Method
120
     */
121
 
122
/* There are several methods fbcon can use to move text around the screen:
123
 *
124
 *                     Operation   Pan    Wrap
125
 *---------------------------------------------
126
 * SCROLL_MOVE         copyarea    No     No
127
 * SCROLL_PAN_MOVE     copyarea    Yes    No
128
 * SCROLL_WRAP_MOVE    copyarea    No     Yes
129
 * SCROLL_REDRAW       imageblit   No     No
130
 * SCROLL_PAN_REDRAW   imageblit   Yes    No
131
 * SCROLL_WRAP_REDRAW  imageblit   No     Yes
132
 *
133
 * (SCROLL_WRAP_REDRAW is not implemented yet)
134
 *
135
 * In general, fbcon will choose the best scrolling
136
 * method based on the rule below:
137
 *
138
 * Pan/Wrap > accel imageblit > accel copyarea >
139
 * soft imageblit > (soft copyarea)
140
 *
141
 * Exception to the rule: Pan + accel copyarea is
142
 * preferred over Pan + accel imageblit.
143
 *
144
 * The above is typical for PCI/AGP cards. Unless
145
 * overridden, fbcon will never use soft copyarea.
146
 *
147
 * If you need to override the above rule, set the
148
 * appropriate flags in fb_info->flags.  For example,
149
 * to prefer copyarea over imageblit, set
150
 * FBINFO_READS_FAST.
151
 *
152
 * Other notes:
153
 * + use the hardware engine to move the text
154
 *    (hw-accelerated copyarea() and fillrect())
155
 * + use hardware-supported panning on a large virtual screen
156
 * + amifb can not only pan, but also wrap the display by N lines
157
 *    (i.e. visible line i = physical line (i+N) % yres).
158
 * + read what's already rendered on the screen and
159
 *     write it in a different place (this is cfb_copyarea())
160
 * + re-render the text to the screen
161
 *
162
 * Whether to use wrapping or panning can only be figured out at
163
 * runtime (when we know whether our font height is a multiple
164
 * of the pan/wrap step)
165
 *
166
 */
167
 
168
#define SCROLL_MOVE        0x001
169
#define SCROLL_PAN_MOVE    0x002
170
#define SCROLL_WRAP_MOVE   0x003
171
#define SCROLL_REDRAW      0x004
172
#define SCROLL_PAN_REDRAW  0x005
173
 
174
#ifdef CONFIG_FB_TILEBLITTING
175
extern void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info);
176
#endif
177
extern void fbcon_set_bitops(struct fbcon_ops *ops);
178
extern int  soft_cursor(struct fb_info *info, struct fb_cursor *cursor);
179
 
180
#define FBCON_ATTRIBUTE_UNDERLINE 1
181
#define FBCON_ATTRIBUTE_REVERSE   2
182
#define FBCON_ATTRIBUTE_BOLD      4
183
 
184
static inline int real_y(struct display *p, int ypos)
185
{
186
        int rows = p->vrows;
187
 
188
        ypos += p->yscroll;
189
        return ypos < rows ? ypos : ypos - rows;
190
}
191
 
192
 
193
static inline int get_attribute(struct fb_info *info, u16 c)
194
{
195
        int attribute = 0;
196
 
197
        if (fb_get_color_depth(&info->var, &info->fix) == 1) {
198
                if (attr_underline(c))
199
                        attribute |= FBCON_ATTRIBUTE_UNDERLINE;
200
                if (attr_reverse(c))
201
                        attribute |= FBCON_ATTRIBUTE_REVERSE;
202
                if (attr_bold(c))
203
                        attribute |= FBCON_ATTRIBUTE_BOLD;
204
        }
205
 
206
        return attribute;
207
}
208
 
209
#define FBCON_SWAP(i,r,v) ({ \
210
        typeof(r) _r = (r);  \
211
        typeof(v) _v = (v);  \
212
        (void) (&_r == &_v); \
213
        (i == FB_ROTATE_UR || i == FB_ROTATE_UD) ? _r : _v; })
214
 
215
#ifdef CONFIG_FRAMEBUFFER_CONSOLE_ROTATION
216
extern void fbcon_set_rotate(struct fbcon_ops *ops);
217
#else
218
#define fbcon_set_rotate(x) do {} while(0)
219
#endif /* CONFIG_FRAMEBUFFER_CONSOLE_ROTATION */
220
 
221
#endif /* _VIDEO_FBCON_H */
222
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.