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
- Lines: 475
- Date:
Sat Mar 21 11:12:49 1998
- Orig file:
v2.1.90/linux/include/linux/fb.h
- Orig date:
Tue May 13 22:41:18 1997
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