Loading...
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 | /* $Id: fb.h,v 1.26 1997/04/17 02:29:33 miguel 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][32]; /* 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 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; } 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 */ 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 (*blitc)(unsigned short, int, int); void (*setw)(int, int, unsigned short, int); void (*cpyw)(int, int, unsigned short *, int); void (*fill)(int, int, int *); unsigned char *color_map; struct openpromfs_dev proc_entry; } fbinfo_t; #define CM(i, j) [3*(i)+(j)] 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 int get_phys (unsigned long addr); extern int get_iospace (unsigned long addr); extern void render_screen(void); extern void sun_hw_hide_cursor(void); extern void sun_hw_set_cursor(int, int); extern int sun_hw_scursor(struct fbcursor *,fbinfo_t *); extern int sun_hw_cursor_shown; extern int sun_prom_console_id; extern unsigned long sun_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); #endif __SPARC_FB_H_ |