patch-2.1.91 linux/include/linux/fb.h

Next file: linux/include/linux/file.h
Previous file: linux/include/asm-sparc64/unistd.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.90/linux/include/linux/fb.h linux/include/linux/fb.h
@@ -1,16 +1,31 @@
 #ifndef _LINUX_FB_H
 #define _LINUX_FB_H
 
+#include <asm/types.h>
+
 /* Definitions of frame buffers						*/
 
+#define FB_MAJOR	29
+
+#define FB_MODES_SHIFT		5	/* 32 modes per framebuffer */
+#define FB_NUM_MINORS		256	/* 256 Minors               */
+#define FB_MAX			(FB_NUM_MINORS / (1 << FB_MODES_SHIFT))
+#define GET_FB_IDX(node)	(MINOR(node) >> FB_MODES_SHIFT)
+
 /* ioctls
    0x46 is 'F'								*/
-#define FBIOGET_VSCREENINFO 	0x4600
-#define FBIOPUT_VSCREENINFO 	0x4601
-#define FBIOGET_FSCREENINFO 	0x4602
+#define FBIOGET_VSCREENINFO	0x4600
+#define FBIOPUT_VSCREENINFO	0x4601
+#define FBIOGET_FSCREENINFO	0x4602
 #define FBIOGETCMAP		0x4604
 #define FBIOPUTCMAP		0x4605
-#define FBIOPAN_DISPLAY         0x4606
+#define FBIOPAN_DISPLAY		0x4606
+/* 0x4607-0x460B are defined below */
+/* #define FBIOGET_MONITORSPEC	0x460C */
+/* #define FBIOPUT_MONITORSPEC	0x460D */
+/* #define FBIOSWITCH_MONIBIT	0x460E */
+#define FBIOGET_CON2FBMAP	0x460F
+#define FBIOPUT_CON2FBMAP	0x4610
 
 #define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
 #define FB_TYPE_PLANES			1	/* Non interleaved planes */
@@ -26,22 +41,25 @@
 
 struct fb_fix_screeninfo {
 	char id[16];			/* identification string eg "TT Builtin" */
-	unsigned long smem_start;	/* Start of frame buffer mem */
-	unsigned long smem_len;		/* Length of frame buffer mem */	
-	int type;			/* see FB_TYPE_* 		*/
-	int type_aux;			/* Interleave for interleaved Planes */
-	int visual;			/* see FB_VISUAL_*  		*/ 
-	u_short xpanstep;               /* zero if no hardware panning  */
-        u_short ypanstep;               /* zero if no hardware panning  */
-        u_short ywrapstep;              /* zero if no hardware ywrap    */
-        u_long line_length;             /* length of a line in bytes    */
-        short reserved[9];              /* Reserved for future compatibility */
+	char *smem_start;		/* Start of frame buffer mem */
+	__u32 smem_len;			/* Length of frame buffer mem */
+	__u32 type;			/* see FB_TYPE_*		*/
+	__u32 type_aux;			/* Interleave for interleaved Planes */
+	__u32 visual;			/* see FB_VISUAL_*		*/ 
+	__u16 xpanstep;			/* zero if no hardware panning  */
+	__u16 ypanstep;			/* zero if no hardware panning  */
+	__u16 ywrapstep;		/* zero if no hardware ywrap    */
+	__u32 line_length;		/* length of a line in bytes    */
+	unsigned char *mmio_start;	/* Start of Memory Mapped I/O   */
+	__u32 mmio_len;			/* Length of Memory Mapped I/O  */
+	__u32 accel;			/* Type of acceleration available */
+	__u16 reserved[3];		/* Reserved for future compatibility */
 };
 
 struct fb_bitfield {
-	int offset;			/* beginning of bitfield	*/
-	int length;			/* length of bitfield		*/
-	int msb_right;			/* != 0 : Most significant bit is */ 
+	__u32 offset;			/* beginning of bitfield	*/
+	__u32 length;			/* length of bitfield		*/
+	__u32 msb_right;		/* != 0 : Most significant bit is */ 
 					/* right */ 
 };
 
@@ -58,8 +76,12 @@
 #define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
 #define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/
 #define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */
-#define FB_ACCEL_CYBERVISION	3	/* Cybervision64 (S3 Trio64)    */
-#define FB_ACCEL_RETINAZ3	4	/* RetinaZ3 (NCR77C32BLT)       */
+#define FB_ACCEL_S3TRIO64	3	/* Cybervision64 (S3 Trio64)    */
+#define FB_ACCEL_NCR77C32BLT	4	/* RetinaZ3 (NCR77C32BLT)       */
+#define FB_ACCEL_S3VIRGE	5	/* Cybervision64/3D (S3 ViRGE)	*/
+#define FB_ACCEL_MACH64		6	/* ATI Mach 64			*/
+#define FB_ACCEL_TGA		7	/* DEC 21030 TGA		*/
+#define FB_ACCEL_ATY		8	/* atyfb (ATI Mach64)		*/
 
 #define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
 #define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
@@ -68,9 +90,10 @@
 #define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
 					/* vtotal = 144d/288n/576i => PAL  */
 					/* vtotal = 121d/242n/484i => NTSC */
+#define FB_SYNC_ON_GREEN	32	/* sync on green */
 
 #define FB_VMODE_NONINTERLACED  0	/* non interlaced */
-#define FB_VMODE_INTERLACED 	1	/* interlaced	*/
+#define FB_VMODE_INTERLACED	1	/* interlaced	*/
 #define FB_VMODE_DOUBLE		2	/* double scan */
 #define FB_VMODE_MASK		255
 
@@ -79,77 +102,107 @@
 #define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
 
 struct fb_var_screeninfo {
-	int xres;			/* visible resolution		*/
-	int yres;
-	int xres_virtual;		/* virtual resolution		*/
-	int yres_virtual;
-	int xoffset;			/* offset from virtual to visible */
-	int yoffset;			/* resolution			*/
+	__u32 xres;			/* visible resolution		*/
+	__u32 yres;
+	__u32 xres_virtual;		/* virtual resolution		*/
+	__u32 yres_virtual;
+	__u32 xoffset;			/* offset from virtual to visible */
+	__u32 yoffset;			/* resolution			*/
 
-	int bits_per_pixel;		/* guess what 			*/
-	int grayscale;			/* != 0 Graylevels instead of colors */
+	__u32 bits_per_pixel;		/* guess what			*/
+	__u32 grayscale;		/* != 0 Graylevels instead of colors */
 
 	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
 	struct fb_bitfield green;	/* else only length is significant */
 	struct fb_bitfield blue;
 	struct fb_bitfield transp;	/* transparency			*/	
 
-	int nonstd;			/* != 0 Non standard pixel format */
+	__u32 nonstd;			/* != 0 Non standard pixel format */
 
-	int activate;			/* see FB_ACTIVATE_* 		*/
+	__u32 activate;			/* see FB_ACTIVATE_*		*/
 
-	int height;			/* height of picture in mm    */
-	int width;			/* width of picture in mm     */
+	__u32 height;			/* height of picture in mm    */
+	__u32 width;			/* width of picture in mm     */
 
-	int accel;			/* see FB_ACCEL_*		*/
+	__u32 accel;			/* see FB_ACCEL_*		*/
 
 	/* Timing: All values in pixclocks, except pixclock (of course) */
-	unsigned long pixclock;		/* pixel clock in ps (pico seconds) */
-	unsigned long left_margin;	/* time from sync to picture	*/
-	unsigned long right_margin;	/* time from picture to sync	*/
-	unsigned long upper_margin;	/* time from sync to picture	*/
-	unsigned long lower_margin;
-	unsigned long hsync_len;	/* length of horizontal sync	*/
-	unsigned long vsync_len;	/* length of vertical sync	*/
-	int sync;			/* see FB_SYNC_*		*/
-	int vmode;			/* see FB_VMODE_*		*/
-	int reserved[6];		/* Reserved for future compatibility */
+	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
+	__u32 left_margin;		/* time from sync to picture	*/
+	__u32 right_margin;		/* time from picture to sync	*/
+	__u32 upper_margin;		/* time from sync to picture	*/
+	__u32 lower_margin;
+	__u32 hsync_len;		/* length of horizontal sync	*/
+	__u32 vsync_len;		/* length of vertical sync	*/
+	__u32 sync;			/* see FB_SYNC_*		*/
+	__u32 vmode;			/* see FB_VMODE_*		*/
+	__u32 reserved[6];		/* Reserved for future compatibility */
 };
 
 struct fb_cmap {
-	int start;			/* First entry	*/
-	int len;			/* Number of entries */
-	unsigned short *red;		/* Red values	*/
-	unsigned short *green;
-	unsigned short *blue;
-	unsigned short *transp;		/* transparency, can be NULL */
+	__u32 start;			/* First entry	*/
+	__u32 len;			/* Number of entries */
+	__u16 *red;			/* Red values	*/
+	__u16 *green;
+	__u16 *blue;
+	__u16 *transp;			/* transparency, can be NULL */
+};
+
+struct fb_con2fbmap {
+	__u32 console;
+	__u32 framebuffer;
+};
+
+struct fb_monspecs {
+	unsigned hfmin : 20;		/* hfreq lower limit (Hz) */
+	unsigned hfmax : 20; 		/* hfreq upper limit (Hz) */
+	unsigned vfmin : 10;		/* vfreq lower limit (Hz) */
+	unsigned vfmax : 10;		/* vfreq upper limit (Hz) */
+	unsigned dpms : 1;		/* supports DPMS */
 };
 
 #ifdef __KERNEL__
 
 #include <linux/fs.h>
 
+
+struct fb_info;
+struct fb_info_gen;
+
+
+    /*
+     *  Frame buffer operations
+     */
+
 struct fb_ops {
-	/* get non settable parameters	*/
-	int (*fb_get_fix) (struct fb_fix_screeninfo *, int); 
-	/* get settable parameters	*/
-	int (*fb_get_var) (struct fb_var_screeninfo *, int);		
-	/* set settable parameters	*/
-	int (*fb_set_var) (struct fb_var_screeninfo *, int);		
-	/* get colormap			*/
-	int (*fb_get_cmap) (struct fb_cmap *, int, int);
-	/* set colormap			*/
-	int (*fb_set_cmap) (struct fb_cmap *, int, int);
-	/* pan display                   */
-        int (*fb_pan_display) (struct fb_var_screeninfo *, int);
-        /* perform fb specific ioctl	*/
-	int (*fb_ioctl)(struct inode *, struct file *, unsigned int,
-			unsigned long, int);
-};
-
-int register_framebuffer(char *, int *, struct fb_ops *, int, 
-			 struct fb_var_screeninfo *);
-int unregister_framebuffer(int);
+    /* open/release and usage marking */
+    int (*fb_open)(struct fb_info *info);
+    int (*fb_release)(struct fb_info *info);
+    /* get non settable parameters */
+    int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con,
+		      struct fb_info *info); 
+    /* get settable parameters */
+    int (*fb_get_var)(struct fb_var_screeninfo *var, int con,
+		      struct fb_info *info);		
+    /* set settable parameters */
+    int (*fb_set_var)(struct fb_var_screeninfo *var, int con,
+		      struct fb_info *info);		
+    /* get colormap */
+    int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con,
+		       struct fb_info *info);
+    /* set colormap */
+    int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con,
+		       struct fb_info *info);
+    /* pan display */
+    int (*fb_pan_display)(struct fb_var_screeninfo *var, int con,
+			  struct fb_info *info);
+    /* switch between text and graphics mode */
+    int (*fb_set_mode)(int mode, struct fb_info *info);
+    /* perform fb specific ioctl */
+    int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd,
+		    unsigned long arg, int con, struct fb_info *info);
+};
+
 
    /*
     *    This is the interface between the low-level console driver and the
@@ -162,7 +215,7 @@
    struct fb_var_screeninfo var;    /* variable infos. yoffset and vmode */
                                     /* are updated by fbcon.c */
    struct fb_cmap cmap;             /* colormap */
-   u_char *screen_base;             /* pointer to top of virtual screen */    
+   char *screen_base;               /* pointer to top of virtual screen */    
    int visual;
    int type;                        /* see FB_TYPE_* */
    int type_aux;                    /* Interleave for interleaved Planes */
@@ -181,6 +234,7 @@
    /* 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 */
    int cursor_x;                    /* current cursor position */
    int cursor_y;
@@ -199,22 +253,109 @@
 
 
 struct fb_info {
-   char modename[40];               /* at boottime detected video mode */
-   struct display *disp;            /* pointer to display variables */
-   char fontname[40];               /* default font name */
-   int (*changevar)(int);           /* tell console var has changed */
-   int (*switch_con)(int);          /* tell fb to switch consoles */
-   int (*updatevar)(int);           /* tell fb to update the vars */
-   void (*blank)(int);              /* tell fb to (un)blank the screen */
-   int (*setcmap)(struct fb_cmap *, int); /* tell fb to set the colormap */
-};
+   char modename[40];			/* default video mode */
+   int node;
+   struct fb_ops *fbops;
+   struct fb_monspecs monspecs;
+   struct display *disp;		/* initial display variable */
+   char fontname[40];			/* default font name */
+   int (*changevar)(int);		/* tell console var has changed */
+   int (*switch_con)(int, struct fb_info*);
+					/* tell fb to switch consoles */
+   int (*updatevar)(int, struct fb_info*);
+					/* tell fb to update the vars */
+   void (*blank)(int, struct fb_info*);	/* tell fb to (un)blank the screen */
+
+   /* From here on everything is device dependent */
+};
+
+
+    /*
+     *  This structure abstracts from the underlying hardware. It is not
+     *  mandatory but used by the `generic' frame buffer operations.
+     *  Read drivers/video/skeletonfb.c for more information.
+     */
+
+struct fbgen_hwswitch {
+    void (*detect)(void);
+    int (*encode_fix)(struct fb_fix_screeninfo *fix, const void *par,
+		      struct fb_info_gen *info);
+    int (*decode_var)(const struct fb_var_screeninfo *var, void *par,
+		      struct fb_info_gen *info);
+    int (*encode_var)(struct fb_var_screeninfo *var, const void *par,
+		      struct fb_info_gen *info);
+    void (*get_par)(void *par, struct fb_info_gen *info);
+    void (*set_par)(const void *par, struct fb_info_gen *info);
+    int (*getcolreg)(unsigned regno, unsigned *red, unsigned *green,
+		     unsigned *blue, unsigned *transp, struct fb_info *info);
+    int (*setcolreg)(unsigned regno, unsigned red, unsigned green,
+		     unsigned blue, unsigned transp, struct fb_info *info);
+    int (*pan_display)(const struct fb_var_screeninfo *var,
+		       struct fb_info_gen *info);
+    int (*blank)(int blank_mode, struct fb_info_gen *info);
+    struct display_switch *(*get_dispsw)(const void *par,
+					 struct fb_info_gen *info);
+};
+
+struct fb_info_gen {
+    struct fb_info info;
+
+    /* Entries for a generic frame buffer device */
+    /* Yes, this starts looking like C++ */
+    u_int parsize;
+    struct fbgen_hwswitch *fbhw;
+
+   /* From here on everything is device dependent */
+};
+
+
+struct fb_videomode {
+    const char *name;
+    struct fb_var_screeninfo var;
+};
+
+
+/* prototypes */
+typedef unsigned long fb_init_func(unsigned long);
+
+/* drivers/char/fbmem.c */
+extern int register_framebuffer(struct fb_info *fb_info);
+extern int unregister_framebuffer(const struct fb_info *fb_info);
+extern unsigned long probe_framebuffers(unsigned long kmem_start);
+extern int fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal,
+			       const struct fb_info *fb_info);
+extern int fbmon_dpms(const struct fb_info *fb_info);
+
+
+extern int num_registered_fb;
+extern struct fb_info *registered_fb[FB_MAX];
+extern char con2fb_map[MAX_NR_CONSOLES];
+
+/* drivers/video/fbcon.c */
+extern struct display fb_display[MAX_NR_CONSOLES];
+
+/* drivers/video/fbcmap.c */
+extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
+extern void fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to,
+			 int fsfromto);
+extern int fb_get_cmap(struct fb_cmap *cmap, struct fb_var_screeninfo *var,
+		       int kspc, int (*getcolreg)(u_int, u_int *, u_int *,
+						  u_int *, u_int *,
+						  struct fb_info *),
+		       struct fb_info *fb_info);
+extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_var_screeninfo *var,
+		       int kspc, int (*setcolreg)(u_int, u_int, u_int, u_int,
+						  u_int, struct fb_info *),
+		       struct fb_info *fb_info);
+extern struct fb_cmap *fb_default_cmap(int len);
+extern void fb_invert_cmaps(void);
 
 #endif /* __KERNEL__ */
 
 #if 1
 
-#define FBCMD_GET_CURRENTPAR	    0xDEAD0005
-#define FBCMD_SET_CURRENTPAR        0xDEAD8005
+#define FBCMD_GET_CURRENTPAR	0xDEAD0005
+#define FBCMD_SET_CURRENTPAR	0xDEAD8005
 
 #endif
 
@@ -233,26 +374,26 @@
 
 
 struct fb_fix_cursorinfo {
-	u_short crsr_width;		/* width and height of the cursor in */
-	u_short crsr_height;		/* pixels (zero if no cursor)	*/
-	u_short crsr_xsize;		/* cursor size in display pixels */
-	u_short crsr_ysize;
-	u_short crsr_color1;		/* colormap entry for cursor color1 */
-	u_short crsr_color2;		/* colormap entry for cursor color2 */
+	__u16 crsr_width;		/* width and height of the cursor in */
+	__u16 crsr_height;		/* pixels (zero if no cursor)	*/
+	__u16 crsr_xsize;		/* cursor size in display pixels */
+	__u16 crsr_ysize;
+	__u16 crsr_color1;		/* colormap entry for cursor color1 */
+	__u16 crsr_color2;		/* colormap entry for cursor color2 */
 };
 
 struct fb_var_cursorinfo {
-        u_short width;
-        u_short height;
-        u_short xspot;
-        u_short yspot;
-        u_char data[1];                 /* field with [height][width]        */
+	__u16 width;
+	__u16 height;
+	__u16 xspot;
+	__u16 yspot;
+	__u8 data[1];			/* field with [height][width]        */
 };
 
 struct fb_cursorstate {
-	short xoffset;
-	short yoffset;
-	u_short mode;
+	__s16 xoffset;
+	__s16 yoffset;
+	__u16 mode;
 };
 
 #define FB_CURSOR_OFF		0
@@ -267,24 +408,23 @@
 #define FB_LINE_FILLED	4
 
 struct fb_line {
-	int start_x;
-	int start_y;
-	int end_x;
-	int end_y;
-	int color;
-	int option;
+	__s32 start_x;
+	__s32 start_y;
+	__s32 end_x;
+	__s32 end_y;
+	__u32 color;
+	__u32 option;
 };
 
 struct fb_move {
-	int src_x;
-	int src_y;
-	int dest_x;
-	int dest_y;
-	int height;
-	int width;
+	__s32 src_x;
+	__s32 src_y;
+	__s32 dest_x;
+	__s32 dest_y;
+	__u32 height;
+	__u32 width;
 };
 
 #endif /* Preliminary */
-
 
 #endif /* _LINUX_FB_H */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov