summaryrefslogtreecommitdiffstats
path: root/drivers/sbus/char/fb.h
blob: ea58a63464ad63ec28f8ff116b0a335aa761f424 (plain)
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_