1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
/* $Id: fb.h,v 1.33 1997/08/25 07:50:29 jj Exp $
* fb.h: contains the definitions of the structures that various sun
* frame buffer can use to do console driver stuff.
*
* (C) 1996 Dave Redman (djhr@tadpole.co.uk)
* (C) 1996 Miguel de Icaza (miguel@nuclecu.unam.mx)
* (C) 1996 David Miller (davem@rutgers.edu)
* (C) 1996 Peter Zaitcev (zaitcev@lab.ipmce.su)
* (C) 1996 Eddie C. Dost (ecd@skynet.be)
* (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
*/
#ifndef __SPARC_FB_H_
#define __SPARC_FB_H_
#include <linux/init.h>
#define FRAME_BUFFERS 8
#define CHAR_WIDTH 8
#define CHAR_HEIGHT 16
/* Change this if we run into problems if the kernel want's to free or
* use our frame buffer pages, never seen it though.
*/
#define FB_MMAP_VM_FLAGS (VM_SHM| VM_LOCKED)
#undef color
/* cursor status, kernel tracked copy */
struct cg_cursor {
short enable; /* cursor is enabled */
struct fbcurpos cpos; /* position */
struct fbcurpos chot; /* hot-spot */
struct fbcurpos size; /* size of mask & image fields */
struct fbcurpos hwsize; /* hw max size */
int bits[2][128]; /* space for mask & image bits */
char color [6]; /* cursor colors */
};
struct cg6_info {
struct bt_regs *bt; /* color control */
struct cg6_fbc *fbc;
unsigned int *fhc;
struct cg6_tec *tec;
struct cg6_thc *thc;
void *dhc;
unsigned char *rom;
};
struct tcx_info {
struct bt_regs *bt; /* color control */
struct tcx_tec *tec;
struct tcx_thc *thc;
void *tcx_cplane;
int tcx_sizes[13];
long tcx_offsets[13];
int lowdepth;
};
struct ffb_info {
unsigned long physbase;
struct ffb_fbc *fbc;
struct ffb_dac *dac;
int dac_rev;
u32 *clut;
};
struct leo_info {
struct leo_cursor *cursor;
struct leo_lc_ss0_krn *lc_ss0_krn;
struct leo_lc_ss0_usr *lc_ss0_usr;
struct leo_lc_ss1_krn *lc_ss1_krn;
struct leo_lc_ss1_usr *lc_ss1_usr;
struct leo_ld_ss0 *ld_ss0;
struct leo_ld_ss1 *ld_ss1;
struct leo_ld_gbl *ld_gbl;
struct leo_lx_krn *lx_krn;
u32 *cluts[3];
u8 *xlut;
unsigned long offset;
};
struct bwtwo_info {
struct bwtwo_regs *regs;
};
struct cg3_info {
struct cg3_regs *regs; /* brooktree (color) registers, and more */
int cgrdi; /* 1 if this is a cgRDI */
};
struct cg14_info {
struct cg14_regs *regs;
struct cg14_cursor *cursor_regs;
struct cg14_dac *dac;
struct cg14_xlut *xlut;
struct cg14_clut *clut;
int ramsize;
int video_mode;
};
typedef union
{
unsigned int bt[8];
unsigned char ibm[8];
} dacptr;
struct weitek_info
{
int p9000; /* p9000? or p9100 */
dacptr *dac; /* dac structures */
unsigned int fbsize; /* size of frame buffer */
};
/* Array holding the information for the frame buffers */
typedef struct fbinfo {
union {
struct bwtwo_info bwtwo;
struct cg3_info cg3;
struct cg6_info cg6;
struct cg14_info cg14;
struct tcx_info tcx;
struct leo_info leo;
struct ffb_info ffb;
void *private;
} info; /* per frame information */
int space; /* I/O space this card resides in */
int blanked; /* true if video blanked */
int open; /* is this fb open? */
int mmaped; /* has this fb been mmapped? */
int vtconsole; /* virtual console where it is opened */
long base; /* frame buffer base */
struct fbtype type; /* frame buffer type */
int real_type; /* real frame buffer FBTYPE* */
int emulations[4]; /* possible emulations (-1 N/A) */
int prom_node; /* node of the device in prom tree */
int base_depth; /* depth of fb->base piece */
int linebytes; /* number of bytes in a row */
struct cg_cursor cursor; /* kernel state of hw cursor */
int (*mmap)(struct inode *, struct file *, struct vm_area_struct *,
long fb_base, struct fbinfo *);
void (*loadcmap)(struct fbinfo *fb, int index, int count);
void (*blank)(struct fbinfo *fb);
void (*unblank)(struct fbinfo *fb);
int (*ioctl)(struct inode *, struct file *, uint, unsigned long,
struct fbinfo *);
void (*reset)(struct fbinfo *fb);
void (*switch_from_graph)(void);
void (*setcursor)(struct fbinfo *);
void (*setcurshape)(struct fbinfo *);
void (*setcursormap)(struct fbinfo *, unsigned char *,
unsigned char *, unsigned char *);
unsigned long (*postsetup)(struct fbinfo *, unsigned long);
void (*clear_fb)(int);
void (*set_other_palette)(int);
void (*blitc)(unsigned short, int, int);
void (*setw)(int, int, unsigned short, int);
void (*cpyw)(int, int, unsigned short *, int);
void (*fill)(int, int, int *);
void (*draw_penguin)(int,int,int);
unsigned char *color_map;
struct openpromfs_dev proc_entry;
} fbinfo_t;
#define CM(i, j) [3*(i)+(j)]
extern unsigned char sparc_color_table[];
extern unsigned char reverse_color_table[];
#define CHARATTR_TO_SUNCOLOR(attr) \
((reverse_color_table[(attr) >> 12] << 4) | \
reverse_color_table[((attr) >> 8) & 0x0f])
extern fbinfo_t *fbinfo;
extern int fbinfos;
struct {
char *name; /* prom name */
int width, height; /* prefered w,h match */
void (*fbtype)(fbinfo_t *); /* generic device type */
/* device specific init routine */
unsigned long (*fbinit)(fbinfo_t *fbinfo, unsigned int addr);
} fb_entry;
extern int fb_init(void);
extern void (*fb_restore_palette)(fbinfo_t *fbinfo);
extern void (*fb_hide_cursor)(int cursor_pos);
extern void (*fb_set_cursor)(int oldpos, int idx);
extern void (*fb_clear_screen)( void );
extern void (*fb_blitc)(unsigned char *, int, unsigned int *, unsigned int);
extern void (*fb_font_init)(unsigned char *font);
/* All framebuffers are likely to require this info */
/* Screen dimensions and color depth. */
extern int con_depth, con_width;
extern int con_height, con_linebytes;
extern int ints_per_line;
/* used in the mmap routines */
extern unsigned long get_phys (unsigned long addr);
extern int get_iospace (unsigned long addr);
extern void render_screen(void);
extern void sbus_hw_hide_cursor(void);
extern void sbus_hw_set_cursor(int, int);
extern int sbus_hw_scursor(struct fbcursor *,fbinfo_t *);
extern int sbus_hw_cursor_shown;
extern int sun_prom_console_id;
extern unsigned long cg_postsetup(fbinfo_t *, unsigned long);
#define FB_DEV(x) (MINOR(x) / 32)
extern void cg3_setup (fbinfo_t *, int, u32, int, struct linux_sbus_device *);
extern void cg6_setup (fbinfo_t *, int, u32, int);
extern void cg14_setup (fbinfo_t *, int, int, u32, int);
extern void bwtwo_setup (fbinfo_t *, int, u32, int,
struct linux_sbus_device *);
extern void leo_setup (fbinfo_t *, int, u32, int);
extern void tcx_setup (fbinfo_t *, int, int, u32, struct linux_sbus_device *);
extern void creator_setup (fbinfo_t *, int, int, unsigned long, int);
extern int io_remap_page_range(unsigned long from, unsigned long offset, unsigned long size, pgprot_t prot, int space);
extern unsigned char linux_logo_red[];
extern unsigned char linux_logo_green[];
extern unsigned char linux_logo_blue[];
extern unsigned char linux_logo[];
extern unsigned char linux_logo_bw[];
extern unsigned int linux_logo_colors;
extern char logo_banner[];
#endif __SPARC_FB_H_
|