how-lix-os-pkgs/fbset/default/patch

1664 lines
54 KiB
Plaintext

this patch is a concatenation of all the patches from debian's fbset package as
of the "buster" release. fbset is a special package in that it has not had a
primary maintainer since 1999. the debian maintainers have provided some
improvements in their fork of it, so those have been brought in here.
---
fb.h | 545 +++++++++++++++++++++++++++----------------------------------------
1 file changed, 225 insertions(+), 320 deletions(-)
--- a/fb.h
+++ b/fb.h
@@ -1,16 +1,12 @@
-#ifndef _LINUX_FB_H
-#define _LINUX_FB_H
+#ifndef _UAPI_LINUX_FB_H
+#define _UAPI_LINUX_FB_H
-#include <asm/types.h>
+#include <linux/types.h>
+#include <linux/i2c.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)
+#define FB_MAX 32 /* sufficient for now */
/* ioctls
0x46 is 'F' */
@@ -20,24 +16,44 @@
#define FBIOGETCMAP 0x4604
#define FBIOPUTCMAP 0x4605
#define FBIOPAN_DISPLAY 0x4606
+#ifndef __KERNEL__
+#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor)
+#endif
/* 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 FBIOBLANK 0x4611 /* arg: 0 or vesa level + 1 */
+#define FBIOGET_VBLANK _IOR('F', 0x12, struct fb_vblank)
+#define FBIO_ALLOC 0x4613
+#define FBIO_FREE 0x4614
+#define FBIOGET_GLYPH 0x4615
+#define FBIOGET_HWCINFO 0x4616
+#define FBIOPUT_MODEINFO 0x4617
+#define FBIOGET_DISPINFO 0x4618
+#define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32)
#define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */
#define FB_TYPE_PLANES 1 /* Non interleaved planes */
#define FB_TYPE_INTERLEAVED_PLANES 2 /* Interleaved planes */
#define FB_TYPE_TEXT 3 /* Text/attributes */
#define FB_TYPE_VGA_PLANES 4 /* EGA/VGA planes */
+#define FB_TYPE_FOURCC 5 /* Type identified by a V4L2 FOURCC */
#define FB_AUX_TEXT_MDA 0 /* Monochrome text */
#define FB_AUX_TEXT_CGA 1 /* CGA/EGA/VGA Color text */
#define FB_AUX_TEXT_S3_MMIO 2 /* S3 MMIO fasttext */
#define FB_AUX_TEXT_MGA_STEP16 3 /* MGA Millenium I: text, attr, 14 reserved bytes */
#define FB_AUX_TEXT_MGA_STEP8 4 /* other MGAs: text, attr, 6 reserved bytes */
+#define FB_AUX_TEXT_SVGA_GROUP 8 /* 8-15: SVGA tileblit compatible modes */
+#define FB_AUX_TEXT_SVGA_MASK 7 /* lower three bits says step */
+#define FB_AUX_TEXT_SVGA_STEP2 8 /* SVGA text mode: text, attr */
+#define FB_AUX_TEXT_SVGA_STEP4 9 /* SVGA text mode: text, attr, 2 reserved bytes */
+#define FB_AUX_TEXT_SVGA_STEP8 10 /* SVGA text mode: text, attr, 6 reserved bytes */
+#define FB_AUX_TEXT_SVGA_STEP16 11 /* SVGA text mode: text, attr, 14 reserved bytes */
+#define FB_AUX_TEXT_SVGA_LAST 15 /* reserved up to 15 */
#define FB_AUX_VGA_PLANES_VGA4 0 /* 16 color planes (EGA/VGA) */
#define FB_AUX_VGA_PLANES_CFB4 1 /* CFB4 in planes (VGA) */
@@ -49,6 +65,7 @@
#define FB_VISUAL_PSEUDOCOLOR 3 /* Pseudo color (like atari) */
#define FB_VISUAL_DIRECTCOLOR 4 /* Direct color */
#define FB_VISUAL_STATIC_PSEUDOCOLOR 5 /* Pseudo color readonly */
+#define FB_VISUAL_FOURCC 6 /* Visual identified by a V4L2 FOURCC */
#define FB_ACCEL_NONE 0 /* no hardware accelerator */
#define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */
@@ -73,14 +90,72 @@
#define FB_ACCEL_MATROX_MGAG100 20 /* Matrox G100 (Productiva G100) */
#define FB_ACCEL_MATROX_MGAG200 21 /* Matrox G200 (Myst, Mill, ...) */
#define FB_ACCEL_SUN_CG14 22 /* Sun cgfourteen */
-#define FB_ACCEL_SUN_BWTWO 23 /* Sun bwtwo */
-#define FB_ACCEL_SUN_CGTHREE 24 /* Sun cgthree */
-#define FB_ACCEL_SUN_TCX 25 /* Sun tcx */
-#define FB_ACCEL_MATROX_MGAG400 26 /* Matrox G400 */
+#define FB_ACCEL_SUN_BWTWO 23 /* Sun bwtwo */
+#define FB_ACCEL_SUN_CGTHREE 24 /* Sun cgthree */
+#define FB_ACCEL_SUN_TCX 25 /* Sun tcx */
+#define FB_ACCEL_MATROX_MGAG400 26 /* Matrox G400 */
+#define FB_ACCEL_NV3 27 /* nVidia RIVA 128 */
+#define FB_ACCEL_NV4 28 /* nVidia RIVA TNT */
+#define FB_ACCEL_NV5 29 /* nVidia RIVA TNT2 */
+#define FB_ACCEL_CT_6555x 30 /* C&T 6555x */
+#define FB_ACCEL_3DFX_BANSHEE 31 /* 3Dfx Banshee */
+#define FB_ACCEL_ATI_RAGE128 32 /* ATI Rage128 family */
+#define FB_ACCEL_IGS_CYBER2000 33 /* CyberPro 2000 */
+#define FB_ACCEL_IGS_CYBER2010 34 /* CyberPro 2010 */
+#define FB_ACCEL_IGS_CYBER5000 35 /* CyberPro 5000 */
+#define FB_ACCEL_SIS_GLAMOUR 36 /* SiS 300/630/540 */
+#define FB_ACCEL_3DLABS_PERMEDIA3 37 /* 3Dlabs Permedia 3 */
+#define FB_ACCEL_ATI_RADEON 38 /* ATI Radeon family */
+#define FB_ACCEL_I810 39 /* Intel 810/815 */
+#define FB_ACCEL_SIS_GLAMOUR_2 40 /* SiS 315, 650, 740 */
+#define FB_ACCEL_SIS_XABRE 41 /* SiS 330 ("Xabre") */
+#define FB_ACCEL_I830 42 /* Intel 830M/845G/85x/865G */
+#define FB_ACCEL_NV_10 43 /* nVidia Arch 10 */
+#define FB_ACCEL_NV_20 44 /* nVidia Arch 20 */
+#define FB_ACCEL_NV_30 45 /* nVidia Arch 30 */
+#define FB_ACCEL_NV_40 46 /* nVidia Arch 40 */
+#define FB_ACCEL_XGI_VOLARI_V 47 /* XGI Volari V3XT, V5, V8 */
+#define FB_ACCEL_XGI_VOLARI_Z 48 /* XGI Volari Z7 */
+#define FB_ACCEL_OMAP1610 49 /* TI OMAP16xx */
+#define FB_ACCEL_TRIDENT_TGUI 50 /* Trident TGUI */
+#define FB_ACCEL_TRIDENT_3DIMAGE 51 /* Trident 3DImage */
+#define FB_ACCEL_TRIDENT_BLADE3D 52 /* Trident Blade3D */
+#define FB_ACCEL_TRIDENT_BLADEXP 53 /* Trident BladeXP */
+#define FB_ACCEL_CIRRUS_ALPINE 53 /* Cirrus Logic 543x/544x/5480 */
+#define FB_ACCEL_NEOMAGIC_NM2070 90 /* NeoMagic NM2070 */
+#define FB_ACCEL_NEOMAGIC_NM2090 91 /* NeoMagic NM2090 */
+#define FB_ACCEL_NEOMAGIC_NM2093 92 /* NeoMagic NM2093 */
+#define FB_ACCEL_NEOMAGIC_NM2097 93 /* NeoMagic NM2097 */
+#define FB_ACCEL_NEOMAGIC_NM2160 94 /* NeoMagic NM2160 */
+#define FB_ACCEL_NEOMAGIC_NM2200 95 /* NeoMagic NM2200 */
+#define FB_ACCEL_NEOMAGIC_NM2230 96 /* NeoMagic NM2230 */
+#define FB_ACCEL_NEOMAGIC_NM2360 97 /* NeoMagic NM2360 */
+#define FB_ACCEL_NEOMAGIC_NM2380 98 /* NeoMagic NM2380 */
+#define FB_ACCEL_PXA3XX 99 /* PXA3xx */
+
+#define FB_ACCEL_SAVAGE4 0x80 /* S3 Savage4 */
+#define FB_ACCEL_SAVAGE3D 0x81 /* S3 Savage3D */
+#define FB_ACCEL_SAVAGE3D_MV 0x82 /* S3 Savage3D-MV */
+#define FB_ACCEL_SAVAGE2000 0x83 /* S3 Savage2000 */
+#define FB_ACCEL_SAVAGE_MX_MV 0x84 /* S3 Savage/MX-MV */
+#define FB_ACCEL_SAVAGE_MX 0x85 /* S3 Savage/MX */
+#define FB_ACCEL_SAVAGE_IX_MV 0x86 /* S3 Savage/IX-MV */
+#define FB_ACCEL_SAVAGE_IX 0x87 /* S3 Savage/IX */
+#define FB_ACCEL_PROSAVAGE_PM 0x88 /* S3 ProSavage PM133 */
+#define FB_ACCEL_PROSAVAGE_KM 0x89 /* S3 ProSavage KM133 */
+#define FB_ACCEL_S3TWISTER_P 0x8a /* S3 Twister */
+#define FB_ACCEL_S3TWISTER_K 0x8b /* S3 TwisterK */
+#define FB_ACCEL_SUPERSAVAGE 0x8c /* S3 Supersavage */
+#define FB_ACCEL_PROSAVAGE_DDR 0x8d /* S3 ProSavage DDR */
+#define FB_ACCEL_PROSAVAGE_DDRK 0x8e /* S3 ProSavage DDR-K */
+
+#define FB_ACCEL_PUV3_UNIGFX 0xa0 /* PKUnity-v3 Unigfx */
+
+#define FB_CAP_FOURCC 1 /* Device supports FOURCC-based formats */
struct fb_fix_screeninfo {
char id[16]; /* identification string eg "TT Builtin" */
- char *smem_start; /* Start of frame buffer mem */
+ unsigned long smem_start; /* Start of frame buffer mem */
/* (physical address) */
__u32 smem_len; /* Length of frame buffer mem */
__u32 type; /* see FB_TYPE_* */
@@ -90,18 +165,24 @@ struct fb_fix_screeninfo {
__u16 ypanstep; /* zero if no hardware panning */
__u16 ywrapstep; /* zero if no hardware ywrap */
__u32 line_length; /* length of a line in bytes */
- char *mmio_start; /* Start of Memory Mapped I/O */
+ unsigned long mmio_start; /* Start of Memory Mapped I/O */
/* (physical address) */
__u32 mmio_len; /* Length of Memory Mapped I/O */
- __u32 accel; /* Type of acceleration available */
- __u16 reserved[3]; /* Reserved for future compatibility */
+ __u32 accel; /* Indicate to driver which */
+ /* specific chip/card we have */
+ __u16 capabilities; /* see FB_CAP_* */
+ __u16 reserved[2]; /* Reserved for future compatibility */
};
/* Interpretation of offset for color fields: All offsets are from the right,
* inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
* can use the offset as right argument to <<). A pixel afterwards is a bit
- * stream and is written to video memory as that unmodified. This implies
- * big-endian byte order if bits_per_pixel is greater than 8.
+ * stream and is written to video memory as that unmodified.
+ *
+ * For pseudocolor: offset and length should be the same for all color
+ * components. Offset specifies the position of the least significant bit
+ * of the pallette index in a pixel value. Length indicates the number
+ * of available palette entries (i.e. # of entries = 1 << length).
*/
struct fb_bitfield {
__u32 offset; /* beginning of bitfield */
@@ -111,6 +192,7 @@ struct fb_bitfield {
};
#define FB_NONSTD_HAM 1 /* Hold-And-Modify (HAM) */
+#define FB_NONSTD_REV_PIX_IN_B 2 /* order of pixels in each byte is reversed */
#define FB_ACTIVATE_NOW 0 /* set values immediately (or vbl)*/
#define FB_ACTIVATE_NXTOPEN 1 /* activate on next open */
@@ -120,8 +202,10 @@ struct fb_bitfield {
#define FB_ACTIVATE_VBL 16 /* activate values on next vbl */
#define FB_CHANGE_CMAP_VBL 32 /* change colormap on vbl */
#define FB_ACTIVATE_ALL 64 /* change all VCs on this fb */
+#define FB_ACTIVATE_FORCE 128 /* force apply even when no change*/
+#define FB_ACTIVATE_INV_MODE 256 /* invalidate videomode */
-#define FB_ACCELF_TEXT 1 /* text mode acceleration */
+#define FB_ACCELF_TEXT 1 /* (OBSOLETE) see fb_info.flags and vc_mode */
#define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */
#define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */
@@ -135,12 +219,24 @@ struct fb_bitfield {
#define FB_VMODE_NONINTERLACED 0 /* non interlaced */
#define FB_VMODE_INTERLACED 1 /* interlaced */
#define FB_VMODE_DOUBLE 2 /* double scan */
+#define FB_VMODE_ODD_FLD_FIRST 4 /* interlaced: top line first */
#define FB_VMODE_MASK 255
#define FB_VMODE_YWRAP 256 /* ywrap instead of panning */
#define FB_VMODE_SMOOTH_XPAN 512 /* smooth xpan possible (internally used) */
#define FB_VMODE_CONUPDATE 512 /* don't update x/yoffset */
+/*
+ * Display rotation support
+ */
+#define FB_ROTATE_UR 0
+#define FB_ROTATE_CW 1
+#define FB_ROTATE_UD 2
+#define FB_ROTATE_CCW 3
+
+#define PICOS2KHZ(a) (1000000000UL/(a))
+#define KHZ2PICOS(a) (1000000000UL/(a))
+
struct fb_var_screeninfo {
__u32 xres; /* visible resolution */
__u32 yres;
@@ -150,8 +246,8 @@ struct fb_var_screeninfo {
__u32 yoffset; /* resolution */
__u32 bits_per_pixel; /* guess what */
- __u32 grayscale; /* != 0 Graylevels instead of colors */
-
+ __u32 grayscale; /* 0 = color, 1 = grayscale, */
+ /* >1 = FOURCC */
struct fb_bitfield red; /* bitfield in fb mem if true color, */
struct fb_bitfield green; /* else only length is significant */
struct fb_bitfield blue;
@@ -164,7 +260,7 @@ struct fb_var_screeninfo {
__u32 height; /* height of picture in mm */
__u32 width; /* width of picture in mm */
- __u32 accel_flags; /* acceleration flags (hints) */
+ __u32 accel_flags; /* (OBSOLETE) see fb_info.flags */
/* Timing: All values in pixclocks, except pixclock (of course) */
__u32 pixclock; /* pixel clock in ps (pico seconds) */
@@ -176,7 +272,9 @@ struct fb_var_screeninfo {
__u32 vsync_len; /* length of vertical sync */
__u32 sync; /* see FB_SYNC_* */
__u32 vmode; /* see FB_VMODE_* */
- __u32 reserved[6]; /* Reserved for future compatibility */
+ __u32 rotate; /* angle we rotate counter clockwise */
+ __u32 colorspace; /* colorspace for FOURCC-based modes */
+ __u32 reserved[4]; /* Reserved for future compatibility */
};
struct fb_cmap {
@@ -193,305 +291,112 @@ struct fb_con2fbmap {
__u32 framebuffer;
};
-struct fb_monspecs {
- __u32 hfmin; /* hfreq lower limit (Hz) */
- __u32 hfmax; /* hfreq upper limit (Hz) */
- __u16 vfmin; /* vfreq lower limit (Hz) */
- __u16 vfmax; /* vfreq upper limit (Hz) */
- unsigned dpms : 1; /* supports DPMS */
-};
-
-#ifdef __KERNEL__
-
-#include <linux/fs.h>
-
-
-struct fb_info;
-struct fb_info_gen;
-struct vm_area_struct;
-struct file;
-
- /*
- * Frame buffer operations
- */
-
-struct fb_ops {
- /* open/release and usage marking */
- int (*fb_open)(struct fb_info *info, int user);
- int (*fb_release)(struct fb_info *info, int user);
- /* 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);
- /* 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);
- /* perform fb specific mmap */
- int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma);
- /* switch to/from raster image mode */
- int (*fb_rasterimg)(struct fb_info *info, int start);
-};
-
-
- /*
- * This is the interface between the low-level console driver and the
- * low-level frame buffer device
- */
-
-struct display {
- /* Filled in by the frame buffer device */
-
- struct fb_var_screeninfo var; /* variable infos. yoffset and vmode */
- /* are updated by fbcon.c */
- struct fb_cmap cmap; /* colormap */
- char *screen_base; /* pointer to top of virtual screen */
- /* (virtual address) */
- int visual;
- int type; /* see FB_TYPE_* */
- int type_aux; /* Interleave for interleaved Planes */
- u_short ypanstep; /* zero if no hardware ypan */
- u_short ywrapstep; /* zero if no hardware ywrap */
- u_long line_length; /* length of a line in bytes */
- u_short can_soft_blank; /* zero if no hardware blanking */
- u_short inverse; /* != 0 text black on white as default */
- struct display_switch *dispsw; /* low level operations */
- void *dispsw_data; /* optional dispsw helper data */
-
-#if 0
- struct fb_fix_cursorinfo fcrsr;
- struct fb_var_cursorinfo *vcrsr;
- struct fb_cursorstate crsrstate;
-#endif
-
- /* 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 */
- unsigned short cursor_x; /* current cursor position */
- unsigned short cursor_y;
- int fgcol; /* text colors */
- int bgcol;
- u_long next_line; /* offset to one line below */
- u_long next_plane; /* offset to next plane */
- u_char *fontdata; /* Font associated to this display */
- unsigned short _fontheightlog;
- unsigned short _fontwidthlog;
- unsigned short _fontheight;
- unsigned short _fontwidth;
- int userfont; /* != 0 if fontdata kmalloc()ed */
- u_short scrollmode; /* Scroll Method */
- short yscroll; /* Hardware scrolling */
- unsigned char fgshift, bgshift;
- unsigned short charmask; /* 0xff or 0x1ff */
-};
-
-
-struct fb_info {
- char modename[40]; /* default video mode */
- kdev_t node;
- int flags;
-#define FBINFO_FLAG_MODULE 1 /* Low-level driver is a module */
- struct fb_ops *fbops;
- struct fb_monspecs monspecs;
- struct display *disp; /* initial display variable */
- struct vc_data *display_fg; /* Console visible on this display */
- 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 */
- /* arg = 0: unblank */
- /* arg > 0: VESA level (arg-1) */
-
- /* From here on everything is device dependent */
-};
-
-#ifdef MODULE
-#define FBINFO_FLAG_DEFAULT FBINFO_FLAG_MODULE
-#else
-#define FBINFO_FLAG_DEFAULT 0
-#endif
-
- /*
- * 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);
- void (*set_disp)(const void *par, struct display *disp,
- 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 */
-};
-
- /*
- * `Generic' versions of the frame buffer device operations
- */
-
-extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con,
- struct fb_info *info);
-extern int fbgen_get_var(struct fb_var_screeninfo *var, int con,
- struct fb_info *info);
-extern int fbgen_set_var(struct fb_var_screeninfo *var, int con,
- struct fb_info *info);
-extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
- struct fb_info *info);
-extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
- struct fb_info *info);
-extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
- struct fb_info *info);
-extern int fbgen_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg, int con,
- struct fb_info *info);
-
- /*
- * Helper functions
- */
-
-extern int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive,
- struct fb_info_gen *info);
-extern void fbgen_set_disp(int con, struct fb_info_gen *info);
-extern void fbgen_install_cmap(int con, struct fb_info_gen *info);
-extern int fbgen_update_var(int con, struct fb_info *info);
-extern int fbgen_switch(int con, struct fb_info *info);
-extern void fbgen_blank(int blank, struct fb_info *info);
-
-
-struct fb_videomode {
- const char *name;
- struct fb_var_screeninfo var;
-};
-
-
-/* drivers/char/fbmem.c */
-extern int register_framebuffer(struct fb_info *fb_info);
-extern int unregister_framebuffer(const struct fb_info *fb_info);
-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, 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, 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);
-
/* VESA Blanking Levels */
-#define VESA_NO_BLANKING 0
-#define VESA_VSYNC_SUSPEND 1
-#define VESA_HSYNC_SUSPEND 2
-#define VESA_POWERDOWN 3
-
-#endif /* __KERNEL__ */
-
-#if 1
-
-#define FBCMD_GET_CURRENTPAR 0xDEAD0005
-#define FBCMD_SET_CURRENTPAR 0xDEAD8005
-
-#endif
-
-
-#if 1 /* Preliminary */
-
- /*
- * Hardware Cursor
- */
-
-#define FBIOGET_FCURSORINFO 0x4607
-#define FBIOGET_VCURSORINFO 0x4608
-#define FBIOPUT_VCURSORINFO 0x4609
-#define FBIOGET_CURSORSTATE 0x460A
-#define FBIOPUT_CURSORSTATE 0x460B
-
-
-struct fb_fix_cursorinfo {
- __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 {
- __u16 width;
- __u16 height;
- __u16 xspot;
- __u16 yspot;
- __u8 data[1]; /* field with [height][width] */
+#define VESA_NO_BLANKING 0
+#define VESA_VSYNC_SUSPEND 1
+#define VESA_HSYNC_SUSPEND 2
+#define VESA_POWERDOWN 3
+
+
+enum {
+ /* screen: unblanked, hsync: on, vsync: on */
+ FB_BLANK_UNBLANK = VESA_NO_BLANKING,
+
+ /* screen: blanked, hsync: on, vsync: on */
+ FB_BLANK_NORMAL = VESA_NO_BLANKING + 1,
+
+ /* screen: blanked, hsync: on, vsync: off */
+ FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
+
+ /* screen: blanked, hsync: off, vsync: on */
+ FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
+
+ /* screen: blanked, hsync: off, vsync: off */
+ FB_BLANK_POWERDOWN = VESA_POWERDOWN + 1
+};
+
+#define FB_VBLANK_VBLANKING 0x001 /* currently in a vertical blank */
+#define FB_VBLANK_HBLANKING 0x002 /* currently in a horizontal blank */
+#define FB_VBLANK_HAVE_VBLANK 0x004 /* vertical blanks can be detected */
+#define FB_VBLANK_HAVE_HBLANK 0x008 /* horizontal blanks can be detected */
+#define FB_VBLANK_HAVE_COUNT 0x010 /* global retrace counter is available */
+#define FB_VBLANK_HAVE_VCOUNT 0x020 /* the vcount field is valid */
+#define FB_VBLANK_HAVE_HCOUNT 0x040 /* the hcount field is valid */
+#define FB_VBLANK_VSYNCING 0x080 /* currently in a vsync */
+#define FB_VBLANK_HAVE_VSYNC 0x100 /* verical syncs can be detected */
+
+struct fb_vblank {
+ __u32 flags; /* FB_VBLANK flags */
+ __u32 count; /* counter of retraces since boot */
+ __u32 vcount; /* current scanline position */
+ __u32 hcount; /* current scandot position */
+ __u32 reserved[4]; /* reserved for future compatibility */
+};
+
+/* Internal HW accel */
+#define ROP_COPY 0
+#define ROP_XOR 1
+
+struct fb_copyarea {
+ __u32 dx;
+ __u32 dy;
+ __u32 width;
+ __u32 height;
+ __u32 sx;
+ __u32 sy;
+};
+
+struct fb_fillrect {
+ __u32 dx; /* screen-relative */
+ __u32 dy;
+ __u32 width;
+ __u32 height;
+ __u32 color;
+ __u32 rop;
+};
+
+struct fb_image {
+ __u32 dx; /* Where to place image */
+ __u32 dy;
+ __u32 width; /* Size of image */
+ __u32 height;
+ __u32 fg_color; /* Only used when a mono bitmap */
+ __u32 bg_color;
+ __u8 depth; /* Depth of the image */
+ const char *data; /* Pointer to image data */
+ struct fb_cmap cmap; /* color map info */
};
-struct fb_cursorstate {
- __s16 xoffset;
- __s16 yoffset;
- __u16 mode;
-};
+/*
+ * hardware cursor control
+ */
-#define FB_CURSOR_OFF 0
-#define FB_CURSOR_ON 1
-#define FB_CURSOR_FLASH 2
+#define FB_CUR_SETIMAGE 0x01
+#define FB_CUR_SETPOS 0x02
+#define FB_CUR_SETHOT 0x04
+#define FB_CUR_SETCMAP 0x08
+#define FB_CUR_SETSHAPE 0x10
+#define FB_CUR_SETSIZE 0x20
+#define FB_CUR_SETALL 0xFF
+
+struct fbcurpos {
+ __u16 x, y;
+};
+
+struct fb_cursor {
+ __u16 set; /* what to set */
+ __u16 enable; /* cursor on/off */
+ __u16 rop; /* bitop operation */
+ const char *mask; /* cursor mask bits */
+ struct fbcurpos hot; /* cursor hot spot */
+ struct fb_image image; /* Cursor image */
+};
+
+#ifdef CONFIG_FB_BACKLIGHT
+/* Settings for the generic backlight code */
+#define FB_BACKLIGHT_LEVELS 128
+#define FB_BACKLIGHT_MAX 0xFF
+#endif
-#endif /* Preliminary */
-#endif /* _LINUX_FB_H */
+#endif /* _UAPI_LINUX_FB_H */
---
etc/fb.modes.ATI | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 77 insertions(+), 7 deletions(-)
--- a/etc/fb.modes.ATI
+++ b/etc/fb.modes.ATI
@@ -6,6 +6,8 @@
# Mach64 Programmer's Guide, Appendix C
# (C) 1998 ATI Technologies Inc.
#
+# Kop: this are very generic modes and not only for ATI cards.
+#
#
# 640x480, 60 Hz, Non-Interlaced (25.175 MHz dotclock)
@@ -132,6 +134,36 @@ mode "640x480-100"
timings 22272 48 32 17 22 128 12
endmode
+
+#
+# 768x576, 75 Hz, Non-Interlaced (49.188 MHz dotclock)
+#
+# Horizontal Vertical
+# Resolution 768 576
+# Scan Frequency 46.580 kHz 75.008 Hz
+# Sync Width us ms
+# chars lines
+# Front Porch us ms
+# chars lines
+# Back Porch us ms
+# chars lines
+# Active Time us ms
+# chars lines
+# Blank Time us ms
+# chars lines
+# Polarity negative negative
+#
+# This is a mode often used, because fbtv suggests this, since
+# this is the mode for "normal" TVs.
+#
+
+mode "768x576-75"
+ # D: 49.188 MHz, H: 46.580 kHz, V: 75.008 Hz
+ geometry 768 576 768 576 32
+ timings 20330 128 32 32 8 128 5
+endmode
+
+
#
# 800x600, 48 Hz, Interlaced (36.00 MHz dotclock)
#
@@ -430,7 +462,7 @@ endmode
# 1024x768, 72 Hz, Non-Interlaced (75.00 MHz dotclock)
#
# Horizontal Vertical
-# Resolution 10224 768
+# Resolution 1024 768
# Scan Frequency 58.230 kHz 72.245 Hz
# Sync Width 1.813 us 0.103 ms
# 17 chars 6 lines
@@ -447,7 +479,7 @@ endmode
mode "1024x768-72"
# D: 75.00 MHz, H: 58.230 kHz, V: 72.245 Hz
- geometry 10224 768 10224 768 8
+ geometry 1024 768 1024 768 8
timings 13334 104 24 29 3 136 6
endmode
@@ -691,7 +723,45 @@ mode "1152x864-80"
hsync high
vsync high
endmode
-
+
+#
+# 1280x960, 75 Hz, Non-Interlaced (126.00 MHz dotclock)
+#
+# Horizontal Vertical
+# Resolution 1280 960
+# Scan Frequency 74.788 kHz 74.788 Hz
+# Sync Width 1.018 us 0.092 ms
+# 14 chars 7 lines
+# Front Porch 0.127 us 0.393 ms
+# 2 chars 30 lines
+# Back Porch 1.473 us 0.747 ms
+# 20 chars 57 lines
+# Active Time 10.473 us 11.311 ms
+# 144 chars 864 lines
+# Blank Time 2.618 us 1.231 ms
+# 36 chars 94 lines
+# Polarity positive positive
+#
+
+mode "1280x960-75-8"
+ # D: 125.644 MHz, H: 74.788 kHz, V: 74.788 Hz
+ geometry 1280 960 1280 960 8
+ timings 7959 224 32 36 1 144 3
+endmode
+
+mode "1280x960-75"
+ # D: 125.644 MHz, H: 74.788 kHz, V: 74.788 Hz
+ geometry 1280 960 1280 960 16
+ timings 7959 224 32 36 1 144 3
+endmode
+
+mode "1280x960-75-32"
+ # D: 125.644 MHz, H: 74.788 kHz, V: 74.788 Hz
+ geometry 1280 960 1280 960 32
+ timings 7959 224 32 36 1 144 3
+endmode
+
+
#
# 1280x1024, 43 Hz, Interlaced (80.00 MHz dotclock)
#
@@ -849,13 +919,13 @@ endmode
#
mode "1280x1024-75"
- # D: 135.00 MHz, H: 79.976 kHz, V: 75.02 Hz
- geometry 1280 1024 1280 1024 8
- timings 7408 248 16 38 1 144 3
+ # D: 134.880 MHz, H: 79.905 kHz, V: 74.958 Hz
+ geometry 1280 1024 1280 3264 8
+ timings 7414 232 64 38 1 112 3
hsync high
vsync high
endmode
-
+
#
# 1600x1200, 60 Hz, Non-Interlaced (156.00 MHz dotclock)
#
---
con2fbmap.1 | 29 ++++++++++++++++++++++++++
con2fbmap.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 95 insertions(+)
--- /dev/null
+++ b/con2fbmap.1
@@ -0,0 +1,29 @@
+.TH con2fbmap 1 2006-01-18 2.1 "Linux frame buffer utils"
+.SH NAME
+con2fbmap \- shows and sets mapping between consoles and framebuffer devices.
+.SH SYNOPSIS
+.B con2fbmap
+.RI console
+.RI [ framebuffer ]
+.SH DESCRIPTION
+.B This documentation is not finished
+.PP
+.B con2fbmap
+is a system utility to show or change the mapping of the consoles to the
+frame buffer device. The frame buffer device provides a simple and unique
+interface to access different kinds of graphic displays.
+.PP
+Frame buffer devices are accessed via special device nodes located in the
+/dev directory. The naming scheme for these nodes is always
+.IR \fBfb < n >,
+where
+.I n
+is the number of the used frame buffer device.
+.PP
+.SH OPTIONS
+The first option must be there, and identify the console on which to work.
+If the second option is not set, con2fbmap shows the current mapping of
+identified console. If the second argument is given (as a number) con2fbmap
+maps the identified console to said framebuffer device.
+.TP
+Sven LUTHER <luther@debian.org>
--- /dev/null
+++ b/con2fbmap.c
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <linux/fb.h>
+
+#define DEFAULT_FRAMEBUFFER "/dev/fb0"
+#define DEFAULT_FRAMEBUFFER_DEVFS "/dev/fb/0"
+
+const char *programname;
+
+void Usage(void)
+{
+ fprintf(stderr, "\nUsage: %s console [framebuffer]\n\n", programname);
+ exit(1);
+}
+
+int main(int argc, char *argv[])
+{
+ int do_write = 0;
+ char *fbpath; /* any frame buffer will do */
+ int fd;
+ struct fb_con2fbmap map;
+
+ programname = argv[0];
+ switch (argc) {
+ case 3:
+ do_write = 1;
+ map.framebuffer = atoi(argv[2]);
+ case 2:
+ map.console = atoi(argv[1]);
+ break;
+ default:
+ Usage();
+ }
+
+ if (access("/dev/.devfsd", F_OK) == 0) /* devfs detected */
+ fbpath = DEFAULT_FRAMEBUFFER_DEVFS;
+ else
+ fbpath = DEFAULT_FRAMEBUFFER;
+
+ if ((fd = open(fbpath, O_RDONLY)) == -1) {
+ fprintf(stderr, "open %s: %s\n", fbpath, strerror(errno));
+ exit(1);
+ }
+ if (do_write) {
+ if (ioctl(fd, FBIOPUT_CON2FBMAP, &map)) {
+ fprintf(stderr, "ioctl FBIOPUT_CON2FBMAP: %s\n", strerror(errno));
+ exit(1);
+ }
+ } else {
+ if (ioctl(fd, FBIOGET_CON2FBMAP, &map)) {
+ fprintf(stderr, "ioctl FBIOGET_CON2FBMAP: %s\n", strerror(errno));
+ exit(1);
+ }
+ printf("console %d is mapped to framebuffer %d\n", map.console,
+ map.framebuffer);
+ }
+ close(fd);
+ exit(0);
+}
---
fbset.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/fbset.c
+++ b/fbset.c
@@ -710,7 +710,7 @@ static void DisplayFBInfo(struct fb_fix_
puts("Frame buffer device information:");
printf(" Name : %s\n", fix->id);
- printf(" Address : %p\n", fix->smem_start);
+ printf(" Address : %#0lx\n", fix->smem_start);
printf(" Size : %d\n", fix->smem_len);
printf(" Type : ");
switch (fix->type) {
@@ -780,7 +780,7 @@ static void DisplayFBInfo(struct fb_fix_
printf(" YWrapStep : %d\n", fix->ywrapstep);
printf(" LineLength : %d\n", fix->line_length);
if (fix->mmio_len) {
- printf(" MMIO Address: %p\n", fix->mmio_start);
+ printf(" MMIO Address: %#0lx\n", fix->mmio_start);
printf(" MMIO Size : %d\n", fix->mmio_len);
}
printf(" Accelerator : ");
---
fbset.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/fbset.c
+++ b/fbset.c
@@ -832,7 +832,8 @@ static int FillScanRates(struct VideoMod
static void Usage(void)
{
puts(VERSION);
- Die("\nUsage: %s [options] [mode]\n\n"
+ printf(
+ "\nUsage: %s [options] [mode]\n\n"
"Valid options:\n"
" General options:\n"
" -h, --help : display this usage information\n"
@@ -887,6 +888,7 @@ static void Usage(void)
" -step <value> : step increment (in pixels or pixel lines)\n"
" (default is 8 horizontal, 2 vertical)\n",
ProgramName);
+ exit(0);
}
---
fbset.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
--- a/fbset.c
+++ b/fbset.c
@@ -199,6 +199,60 @@ static struct accelentry {
{ FB_ACCEL_SUN_CGTHREE, "Sun cg3" },
{ FB_ACCEL_SUN_TCX, "Sun tcx" },
{ FB_ACCEL_MATROX_MGAG400, "Matrox G400" },
+ { FB_ACCEL_NV3, "nVidia RIVA 128" },
+ { FB_ACCEL_NV4, "nVidia RIVA TNT" },
+ { FB_ACCEL_NV5, "nVidia RIVA TNT2" },
+ { FB_ACCEL_CT_6555x, "C&T 6555x" },
+ { FB_ACCEL_3DFX_BANSHEE, "3Dfx Banshee" },
+ { FB_ACCEL_ATI_RAGE128, "ATI Rage128 family" },
+ { FB_ACCEL_ATI_RADEON, "ATI Radeon family" },
+ { FB_ACCEL_IGS_CYBER2000, "CyberPro 2000" },
+ { FB_ACCEL_IGS_CYBER2010, "CyberPro 2010" },
+ { FB_ACCEL_IGS_CYBER5000, "CyberPro 5000" },
+ { FB_ACCEL_SIS_GLAMOUR, "SiS 300/630/540" },
+ { FB_ACCEL_SIS_GLAMOUR_2, "SiS 315/650/740" },
+ { FB_ACCEL_SIS_XABRE, "SiS 330 (Xabre)" },
+ { FB_ACCEL_3DLABS_PERMEDIA3, "3Dlabs Permedia 3" },
+ { FB_ACCEL_I810, "Intel 810/815" },
+ { FB_ACCEL_I830, "Intel 830M/845G/85x/865G" },
+ { FB_ACCEL_NEOMAGIC_NM2070, "NeoMagic NM2070" },
+ { FB_ACCEL_NEOMAGIC_NM2090, "NeoMagic NM2090" },
+ { FB_ACCEL_NEOMAGIC_NM2093, "NeoMagic NM2093" },
+ { FB_ACCEL_NEOMAGIC_NM2097, "NeoMagic NM2097" },
+ { FB_ACCEL_NEOMAGIC_NM2160, "NeoMagic NM2160" },
+ { FB_ACCEL_NEOMAGIC_NM2200, "NeoMagic NM2200" },
+ { FB_ACCEL_NEOMAGIC_NM2230, "NeoMagic NM2230" },
+ { FB_ACCEL_NEOMAGIC_NM2360, "NeoMagic NM2360" },
+ { FB_ACCEL_NEOMAGIC_NM2380, "NeoMagic NM2380" },
+ { FB_ACCEL_PXA3XX, "PXA3xx" },
+ { FB_ACCEL_SAVAGE4, "S3 Savage4" },
+ { FB_ACCEL_SAVAGE3D, "S3 Savage3D" },
+ { FB_ACCEL_SAVAGE3D_MV, "S3 Savage3D-MV" },
+ { FB_ACCEL_SAVAGE2000, "S3 Savage2000" },
+ { FB_ACCEL_SAVAGE_MX_MV, "S3 Savage/MX-MV" },
+ { FB_ACCEL_SAVAGE_MX, "S3 Savage/MX" },
+ { FB_ACCEL_SAVAGE_IX_MV, "S3 Savage/IX-MV" },
+ { FB_ACCEL_SAVAGE_IX, "S3 Savage/IX" },
+ { FB_ACCEL_PROSAVAGE_PM, "S3 ProSavage PM133" },
+ { FB_ACCEL_PROSAVAGE_KM, "S3 ProSavage KM133" },
+ { FB_ACCEL_S3TWISTER_P, "S3 Twister" },
+ { FB_ACCEL_S3TWISTER_K, "S3 TwisterK" },
+ { FB_ACCEL_SUPERSAVAGE, "S3 Supersavage" },
+ { FB_ACCEL_PROSAVAGE_DDR, "S3 ProSavage DDR" },
+ { FB_ACCEL_PROSAVAGE_DDRK, "S3 ProSavage DDR-K" },
+ { FB_ACCEL_PUV3_UNIGFX, "PKUnity-v3 Unigfx" },
+ { FB_ACCEL_NV_10, "nVidia Arch 10" },
+ { FB_ACCEL_NV_20, "nVidia Arch 20" },
+ { FB_ACCEL_NV_30, "nVidia Arch 30" },
+ { FB_ACCEL_NV_40, "nVidia Arch 40" },
+ { FB_ACCEL_XGI_VOLARI_V, "XGI Volari V3XT, V5, V8" },
+ { FB_ACCEL_XGI_VOLARI_Z, "XGI Volari Z7" },
+ { FB_ACCEL_OMAP1610, "TI OMAP16xx" },
+ { FB_ACCEL_TRIDENT_TGUI, "Trident TGUI" },
+ { FB_ACCEL_TRIDENT_3DIMAGE, "Trident 3DImage" },
+ { FB_ACCEL_TRIDENT_BLADE3D, "Trident Blade3D" },
+ { FB_ACCEL_TRIDENT_BLADEXP, "Trident BladeXP" },
+ { FB_ACCEL_CIRRUS_ALPINE, "Cirrus Logic 543x/544x/5480" },
};
---
modes.l | 6 ++++++
modes.y | 4 ++--
2 files changed, 8 insertions(+), 2 deletions(-)
--- a/modes.l
+++ b/modes.l
@@ -99,6 +99,7 @@ static const char *CopyString(const char
keyword [a-zA-Z][a-zA-Z0-9]*
number [0-9]*
+colors [0-9/,]*
string \"[^\"\n]*\"
comment \#([^\n]*)
space [ \t]+
@@ -115,6 +116,11 @@ junk .
return NUMBER;
}
+{colors} {
+ yylval = (unsigned long)CopyString(yytext);
+ return COLORS;
+ }
+
{string} {
yylval = (unsigned long)CopyString(yytext);
return STRING;
--- a/modes.y
+++ b/modes.y
@@ -42,7 +42,7 @@ static void ClearVideoMode(void)
%token MODE GEOMETRY TIMINGS HSYNC VSYNC CSYNC GSYNC EXTSYNC BCAST LACED DOUBLE
RGBA NONSTD ACCEL GRAYSCALE
- ENDMODE POLARITY BOOLEAN STRING NUMBER
+ ENDMODE POLARITY BOOLEAN STRING NUMBER COLORS
%%
@@ -148,7 +148,7 @@ double : DOUBLE BOOLEAN
}
;
-rgba : RGBA STRING
+rgba : RGBA COLORS
{
makeRGBA(&VideoMode, (const char*)$2);
}
---
Makefile | 88 +++++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 53 insertions(+), 35 deletions(-)
--- a/Makefile
+++ b/Makefile
@@ -2,40 +2,58 @@
# Linux Frame Buffer Device Configuration
#
-CC = gcc -Wall -O2 -I.
-BISON = bison -d
-FLEX = flex
-INSTALL = install
-RM = rm -f
-
-All: fbset
-
-
-fbset: fbset.o modes.tab.o lex.yy.o
-
-fbset.o: fbset.c fbset.h fb.h
-modes.tab.o: modes.tab.c fbset.h fb.h
-lex.yy.o: lex.yy.c fbset.h modes.tab.h
-
-lex.yy.c: modes.l
- $(FLEX) modes.l
-
-modes.tab.c: modes.y
- $(BISON) modes.y
-
-install: fbset
- if [ -f /sbin/fbset ]; then rm /sbin/fbset; fi
- $(INSTALL) fbset /usr/sbin
- $(INSTALL) fbset.8 /usr/man/man8
- $(INSTALL) fb.modes.5 /usr/man/man5
- if [ ! -c /dev/fb0 ]; then mknod /dev/fb0 c 29 0; fi
- if [ ! -c /dev/fb1 ]; then mknod /dev/fb1 c 29 32; fi
- if [ ! -c /dev/fb2 ]; then mknod /dev/fb2 c 29 64; fi
- if [ ! -c /dev/fb3 ]; then mknod /dev/fb3 c 29 96; fi
- if [ ! -c /dev/fb4 ]; then mknod /dev/fb4 c 29 128; fi
- if [ ! -c /dev/fb5 ]; then mknod /dev/fb5 c 29 160; fi
- if [ ! -c /dev/fb6 ]; then mknod /dev/fb6 c 29 192; fi
- if [ ! -c /dev/fb7 ]; then mknod /dev/fb7 c 29 224; fi
+srcdir = .
+
+CC = gcc
+CFLAGS = -Wall -O2 -static --static
+BISON = bison -d
+FLEX = flex
+INSTALL = install
+INSTALL_PROGRAM = $(INSTALL) -m 755
+INSTALL_DATA = $(INSTALL) -m 644
+RM = rm -f
+
+all: fbset con2fbmap
+
+fbset: fbset.o modes.tab.o lex.yy.o
+
+fbset.o: fbset.c fbset.h fb.h
+modes.tab.o: modes.tab.c fbset.h fb.h
+lex.yy.o: lex.yy.c fbset.h modes.tab.h
+
+lex.yy.c: modes.l
+ $(FLEX) $<
+
+modes.tab.c modes.tab.h: modes.y
+ $(BISON) $<
+
+con2fbmap: con2fbmap.o
+con2fbmap.o: con2fbmap.c
+
+install: fbset
+ $(INSTALL) -d $(DESTDIR)/etc
+ $(INSTALL) -d $(DESTDIR)/bin
+ $(INSTALL) -d $(DESTDIR)/usr/share/man/man1
+ $(INSTALL) -d $(DESTDIR)/usr/share/man/man5
+ $(INSTALL_DATA) $(srcdir)/etc/fb.modes.ATI $(DESTDIR)/etc/fb.modes
+ $(INSTALL_DATA) $(srcdir)/fb.modes.5 $(DESTDIR)/usr/share/man/man5
+ $(INSTALL_PROGRAM) fbset $(DESTDIR)/bin
+ $(INSTALL_DATA) $(srcdir)/fbset.8 $(DESTDIR)/usr/share/man/man1/fbset.1
+ $(INSTALL_PROGRAM) $(srcdir)/modeline2fb $(DESTDIR)/bin
+ $(INSTALL_DATA) $(srcdir)/modeline2fb.1 $(DESTDIR)/usr/share/man/man1
+ $(INSTALL_PROGRAM) con2fbmap $(DESTDIR)/bin
+ $(INSTALL_DATA) $(srcdir)/con2fbmap.1 $(DESTDIR)/usr/share/man/man1
+
+install-devices:
+ if [ ! -c /dev/fb0 ]; then mknod $(DESTDIR)/dev/fb0 c 29 0; fi
+ if [ ! -c /dev/fb1 ]; then mknod $(DESTDIR)/dev/fb1 c 29 32; fi
+ if [ ! -c /dev/fb2 ]; then mknod $(DESTDIR)/dev/fb2 c 29 64; fi
+ if [ ! -c /dev/fb3 ]; then mknod $(DESTDIR)/dev/fb3 c 29 96; fi
+ if [ ! -c /dev/fb4 ]; then mknod $(DESTDIR)/dev/fb4 c 29 128; fi
+ if [ ! -c /dev/fb5 ]; then mknod $(DESTDIR)/dev/fb5 c 29 160; fi
+ if [ ! -c /dev/fb6 ]; then mknod $(DESTDIR)/dev/fb6 c 29 192; fi
+ if [ ! -c /dev/fb7 ]; then mknod $(DESTDIR)/dev/fb7 c 29 224; fi
clean:
- $(RM) *.o fbset lex.yy.c modes.tab.c modes.tab.h
+ $(RM) *.o fbset con2fbmap lex.yy.c modes.tab.c modes.tab.h
+
---
fb.modes.5 | 38 +++++++++++++++++++++++++++++++++++++-
fbset.8 | 41 ++++++++++++++++++++++++++++++-----------
modeline2fb.1 | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 107 insertions(+), 12 deletions(-)
--- a/fb.modes.5
+++ b/fb.modes.5
@@ -1,4 +1,4 @@
-.TH fb.modes 8 "Aug 1996" local "Linux frame buffer utils"
+.TH fb.modes 5 2003-08-07 2.1 "Linux frame buffer utils"
.SH NAME
fb.modes \- frame buffer modes file
.SH DESCRIPTION
@@ -27,6 +27,9 @@ timings
.br
.B options
.RI < value >
+.br
+.B rgba
+.RI < red , green , blue , alpha >
.RE
endmode
.SH OPTIONS
@@ -74,6 +77,22 @@ horizontal sync length (in pixels)
vertical sync length (in pixel lines)
.RE
.PP
+rgba options (only valid with truecolor):
+.RS
+.TP
+.I red
+red color bitfields (in length or length/offset)
+.TP
+.I green
+green color bitfields (in length or length/offset)
+.TP
+.I blue
+blue color bitfields (in length or length/offset)
+.TP
+.I alpha
+alpha color bitfields (in length or length/offset)
+.RE
+.PP
other options:
.RS
the first value of this options is the default
@@ -87,6 +106,14 @@ the vertical sync polarity
.IR \fBcsync "\ {" low | high }
the composite sync polarity
.TP
+.IR \fBgsync "\ {" low | high }
+the sync on green polarity
+.TP
+.IR \fBbcast "\ {" false | true }
+enable or disable broadcast modes. If enabled the frame buffer generates
+the exact timings fot several broadcast modes (e.g. PAL or NTSC). Note that
+this option may not be supported by every frame buffer
+.TP
.IR \fBextsync "\ {" false | true }
enable or disable external resync. If enabled the sync timings are not
generated by the frame buffer device and must be provided externally
@@ -106,6 +133,15 @@ and this way the horizontal frequency ca
same resolution can be displayed on different monitors, even if the
horizontal frequency specification differs. Note that this option may not be
supported by every frame buffer device
+.TP
+.IR \fBnostd "\ <" number >
+select nonstandard video mode
+.TP
+.IR \fBaccel "\ {" false | true }
+enable or disable hardware text acceleration
+.TP
+.IR \fBgrayscale "\ {" false | true }
+enable or disable graylevels instead of colors
.RE
.SH INTERNALS
Generally a frame buffer display is organized as follows:
--- a/fbset.8
+++ b/fbset.8
@@ -1,4 +1,4 @@
-.TH fbset 8 "July 1998" local "Linux frame buffer utils"
+.TH fbset 1 2010-04-12 2.1 "Linux frame buffer utils"
.SH NAME
fbset \- show and modify frame buffer device settings
.SH SYNOPSIS
@@ -6,8 +6,6 @@ fbset \- show and modify frame buffer de
.RI [ options ]
.RI [ mode ]
.SH DESCRIPTION
-.B This documentation is out of date!!
-.PP
.B fbset
is a system utility to show or change the settings of the frame buffer
device. The frame buffer device provides a simple and unique interface to
@@ -36,10 +36,8 @@ General options:
.BR \-\-help ",\ " \-h
display an usage information
.TP
-.BR \-\-now ",\ " \-n
-change the video mode immediately. If no frame buffer device is given via
-.B \-fb
-, then this option is activated by default
+.BR \-\-test
+don't change, just test whether the mode is valid
.TP
.BR \-\-show ",\ " \-s
display the video mode settings. This is default if no further option or
@@ -66,14 +64,16 @@ display the timing information as it's n
Frame buffer device nodes:
.RS
.TP
+.BR \-\-all ",\ " \-a
+change all virtual consoles on this device
+.TP
.BR \-fb "\ <" \fIdevice >
.I device
gives the frame buffer device node. If no device via
.B \-fb
is given,
.I /dev/fb0
is used
-.TP
.RE
.PP
Video mode database:
@@ -86,6 +88,13 @@ see also
.BR fb.modes (5)
.RE
.PP
+Display bitfield colors:
+.RS
+.TP
+.BR \-rgba "\ <" \fIred , \fIgreen , \fIblue , \fIalpha >
+each in length or length/offset color format
+.RE
+.PP
Display geometry:
.RS
.TP
@@ -104,6 +113,10 @@ set virtual vertical resolution (in pixe
.BR \-depth "\ <" \fIvalue >
set display depth (in bits per pixel)
.TP
+.TP
+.BR \-nonstd "\ <" \fIvalue >
+select nonstandard video mode
+.TP
.BR \-\-geometry ",\ " \-g "\ ..."
set all geometry parameters at once in the order
.RI < xres >
@@ -154,13 +167,16 @@ set all timing parameters at once in the
.RI < hslen >
.RI < vslen >,
e.g.
-.B \-g
+.B \-t
.I 35242 64 96 35 12 112 2
.RE
.PP
Display flags:
.RS
.TP
+.IR \fB\-accel "\ {" false | true }
+set hardware text acceleration enable
+.TP
.IR \fB\-hsync "\ {" low | high }
set the horizontal sync polarity
.TP
@@ -170,6 +186,9 @@ set the vertical sync polarity
.IR \fB\-csync "\ {" low | high }
set the composite sync polarity
.TP
+.IR \fB\-gsync "\ {" false | true }
+set synch on green
+.TP
.IR \fB\-extsync "\ {" false | true }
enable or disable external resync. If enabled the sync timings are not
generated by the frame buffer device and must be provided externally
@@ -217,7 +236,7 @@ insert the following in rc.local:
.B fbset
-fb
.I /dev/fb0
-vga
+640x480\-60
.sp
.RE
and make the used frame buffer device known to
@@ -232,7 +251,7 @@ and make the used frame buffer device kn
.br
.I /etc/fb.modes
.SH SEE ALSO
-.BR fb.modes "(5), " fbdev (4)
+.BR fb.modes "(5), " fbdev "(4), " /usr/share/doc/fbset/FAQ.gz
.SH AUTHORS
.TP
Geert Uytterhoeven <Geert.Uytterhoeven@cs.kuleuven.ac.be>
--- /dev/null
+++ b/modeline2fb.1
@@ -0,0 +1,40 @@
+.TH modeline2fb 1 2006-01-18 2.1 "Linux frame buffer utils"
+.SH NAME
+modeline2fb \- simple modeline to fb.modes translator
+.SH SYNOPSIS
+.B modeline2fb
+[\fIOPTION\fR] [\fIFILES\fR]
+.SH DESCRIPTION
+.PP
+.I Modeline2fb
+is a simple Perl script that converts XF86Config-style modelines to options
+suitable for a fb.modes file.
+.PP
+Note that only one option can be successfully enabled at any particular time.
+.SH OPTIONS
+.TP
+\fB\-d\fR, \fB\-\-depth\fR \fIdepth\fR
+Use the given display depth (default is 8).
+.TP
+\fB\-h\fR \fB\-\-help\fR
+Print out a help screen and exit.
+.SH ADVANCED OPTIONS
+.TP
+\fB\-r\fR \fB\-\-rounding\fR \fIdiv\fR
+Sets the vxres divisor (default is 128).
+.TP
+\fB\-x\fR \fB\-\-vxres\fR \fIX,X,X,...\fR
+Sets extra vxres values.
+.PP
+[\fIFILES\fR] refers to one or more XF86Config files. Note that all modelines
+must be in single-line format. If no files are given on the command line,
+this program reads from standard in. This program will also write to
+standard out.
+.SH EXAMPLE
+modeline2fb \-d 16 /etc/X11/XF86Config
+.SH "SEE ALSO"
+.BR fb.modes(5),
+.BR XF86Config(5)
+.SH AUTHOR
+This manual page is a quick write-up for Debian done by Kevin Kreamer
+<kkreamer@etherhogz.org>.
>From cb00e6fade39afdb2adb0727647e9c97ce0fd02c Mon Sep 17 00:00:00 2001
From: David Kozub <zub@linux.fjfi.cvut.cz>
Date: Thu, 7 Jun 2012 15:46:16 +0200
Subject: [PATCH] add support for custom sync flags
---
fb.modes.5 | 3 +++
fbset.8 | 4 ++++
fbset.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
fbset.h | 3 +++
modes.l | 3 ++-
modes.y | 10 +++++++++-
6 files changed, 66 insertions(+), 2 deletions(-)
--- a/fb.modes.5
+++ b/fb.modes.5
@@ -120,6 +120,9 @@ generated by the frame buffer device and
instead. Note that this option may not be supported by every frame buffer
device
.TP
+.IR \fBsync "\ <" number >
+custom sync flags (frame buffer driver dependent)
+.TP
.IR \fBlaced "\ {" false | true }
enable or disable interlace. If enabled the display will be split in two
frames, each frame contains only even and odd lines respectively. These two
--- a/fbset.8
+++ b/fbset.8
@@ -191,6 +191,10 @@ generated by the frame buffer device and
instead. Note that this option may not be supported by every frame buffer
device
.TP
+.IR \fB\-sync "\ <" \fIvalue >
+set custom sync flags. If specified, this value is bitwise or-ed to the
+other sync flags. This is useful for drivers that use custom sync flags
+.TP
.IR \fB\-bcast "\ {" false | true }
enable or disable broadcast modes. If enabled the frame buffer generates the
exact timings for several broadcast modes (e.g. PAL or NTSC). Note that
--- a/fbset.c
+++ b/fbset.c
@@ -16,6 +16,9 @@
* Brad Midgley <brad@exodus.pht.com>:
* -match
*
+ * David Kozub <zub@linux.fjfi.cvut.cz>:
+ * -sync
+ *
*/
@@ -52,6 +55,12 @@ struct inode;
/*
+ * Mask to zero-out all known sync flags
+ */
+#define FB_CUSTOM_SYNC_MASK ~(FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT| \
+ FB_SYNC_COMP_HIGH_ACT|FB_SYNC_ON_GREEN|FB_SYNC_EXT|FB_SYNC_BROADCAST)
+
+ /*
* Command Line Options
*/
@@ -86,6 +95,7 @@ static const char *Opt_vsync = NULL;
static const char *Opt_csync = NULL;
static const char *Opt_gsync = NULL;
static const char *Opt_extsync = NULL;
+static const char *Opt_sync = NULL;
static const char *Opt_bcast = NULL;
static const char *Opt_laced = NULL;
static const char *Opt_double = NULL;
@@ -123,6 +133,7 @@ static struct {
{ "-csync", &Opt_csync, 1 },
{ "-gsync", &Opt_gsync, 1 },
{ "-extsync", &Opt_extsync, 1 },
+ { "-sync", &Opt_sync, 1 },
{ "-bcast", &Opt_bcast, 1 },
{ "-laced", &Opt_laced, 1 },
{ "-double", &Opt_double, 1 },
@@ -402,6 +413,7 @@ static void ConvertFromVideoMode(const s
var->sync |= FB_SYNC_EXT;
if (vmode->bcast == TRUE)
var->sync |= FB_SYNC_BROADCAST;
+ var->sync |= vmode->sync;
if (vmode->laced == TRUE)
var->vmode = FB_VMODE_INTERLACED;
else if (vmode->dblscan == TRUE)
@@ -445,6 +457,7 @@ static void ConvertToVideoMode(const str
vmode->gsync = var->sync & FB_SYNC_ON_GREEN ? TRUE : FALSE;
vmode->extsync = var->sync & FB_SYNC_EXT ? TRUE : FALSE;
vmode->bcast = var->sync & FB_SYNC_BROADCAST ? TRUE : FALSE;
+ vmode->sync = var->sync & FB_CUSTOM_SYNC_MASK;
vmode->grayscale = var->grayscale;
vmode->laced = FALSE;
vmode->dblscan = FALSE;
@@ -554,6 +567,27 @@ void makeRGBA(struct VideoMode *vmode, c
}
/*
+ * Take known bits from sync and set appropriate flags instead
+ */
+
+void fixCustomSync(struct VideoMode *vmode)
+{
+ if (vmode->sync & FB_SYNC_HOR_HIGH_ACT)
+ vmode->hsync = 1;
+ if (vmode->sync & FB_SYNC_VERT_HIGH_ACT)
+ vmode->vsync = 1;
+ if (vmode->sync & FB_SYNC_COMP_HIGH_ACT)
+ vmode->csync = 1;
+ if (vmode->sync & FB_SYNC_ON_GREEN)
+ vmode->gsync = 1;
+ if (vmode->sync & FB_SYNC_EXT)
+ vmode->extsync =1;
+ if (vmode->sync & FB_SYNC_BROADCAST)
+ vmode->bcast = 1;
+ vmode->sync &= FB_CUSTOM_SYNC_MASK;
+}
+
+ /*
* Find a Video Mode
*/
@@ -617,6 +651,12 @@ static void ModifyVideoMode(struct Video
vmode->extsync = atoboolean(Opt_extsync);
if (Opt_bcast)
vmode->bcast = atoboolean(Opt_bcast);
+ if (Opt_sync)
+ {
+ vmode->sync = strtoul(Opt_sync, NULL, 0);
+ // call this only once all the other sync fields are determined!
+ fixCustomSync(vmode);
+ }
if (Opt_laced)
vmode->laced = atoboolean(Opt_laced);
if (Opt_double)
@@ -693,6 +733,8 @@ static void DisplayVModeInfo(struct Vide
puts(" extsync true");
if (vmode->bcast)
puts(" bcast true");
+ if (vmode->sync)
+ printf(" sync 0x%x\n", vmode->sync);
if (vmode->laced)
puts(" laced true");
if (vmode->dblscan)
@@ -745,6 +787,8 @@ static void DisplayVModeInfo(struct Vide
puts(" # Warning: XFree86 doesn't support extsync\n");
if (vmode->bcast)
printf(" \"bcast\"");
+ if (vmode->sync)
+ puts(" # Warning: XFree86 doesn't support custom sync values\n");
if (vmode->accel_flags)
puts(" # Warning: XFree86 doesn't support accel\n");
if (vmode->grayscale)
@@ -931,6 +975,7 @@ static void Usage(void)
" -csync <value> : composite sync polarity (low or high)\n"
" -gsync <value> : synch on green (false or true)\n"
" -extsync <value> : external sync enable (false or true)\n"
+ " -sync <value> : custom (driver specific) sync value\n"
" -bcast <value> : broadcast enable (false or true)\n"
" -laced <value> : interlace enable (false or true)\n"
" -double <value> : doublescan enable (false or true)\n"
--- a/fbset.h
+++ b/fbset.h
@@ -64,6 +64,8 @@ struct VideoMode {
unsigned laced : 1;
unsigned dblscan : 1;
unsigned grayscale : 1;
+ /* extra (fb driver specific) sync bits */
+ __u32 sync;
/* scanrates */
double drate;
double hrate;
@@ -80,3 +82,4 @@ extern int yyparse(void);
extern void Die(const char *fmt, ...) __attribute__ ((noreturn));
extern void AddVideoMode(const struct VideoMode *vmode);
extern void makeRGBA(struct VideoMode *vmode, const char* opt);
+extern void fixCustomSync(struct VideoMode *vmode);
--- a/modes.l
+++ b/modes.l
@@ -38,6 +38,7 @@ static struct keyword keywords[] = {
{ "csync", CSYNC, 0 },
{ "gsync", GSYNC, 0 },
{ "extsync", EXTSYNC, 0 },
+ { "sync", SYNC, 0 },
{ "bcast", BCAST, 0 },
{ "laced", LACED, 0 },
{ "double", DOUBLE, 0 },
@@ -98,7 +99,7 @@ static const char *CopyString(const char
%}
keyword [a-zA-Z][a-zA-Z0-9]*
-number [0-9]*
+number (0x)?[0-9]*
colors [0-9/,]*
string \"[^\"\n]*\"
comment \#([^\n]*)
--- a/modes.y
+++ b/modes.y
@@ -40,7 +40,7 @@ static void ClearVideoMode(void)
%start file
-%token MODE GEOMETRY TIMINGS HSYNC VSYNC CSYNC GSYNC EXTSYNC BCAST LACED DOUBLE
+%token MODE GEOMETRY TIMINGS HSYNC VSYNC CSYNC GSYNC EXTSYNC SYNC BCAST LACED DOUBLE
RGBA NONSTD ACCEL GRAYSCALE
ENDMODE POLARITY BOOLEAN STRING NUMBER COLORS
@@ -91,6 +91,7 @@ options : /* empty */
| options csync
| options gsync
| options extsync
+ | options sync
| options bcast
| options laced
| options double
@@ -130,6 +131,13 @@ extsync : EXTSYNC BOOLEAN
}
;
+sync: SYNC NUMBER
+ {
+ VideoMode.sync = $2;
+ fixCustomSync(&VideoMode);
+ }
+ ;
+
bcast : BCAST BOOLEAN
{
VideoMode.bcast = $2;
--- a/fbset.h 1999-06-23 14:12:28.000000000 +0000
+++ b/fbset.h 2020-09-02 18:39:26.030000000 +0000
@@ -15,7 +15,7 @@
#include <stdio.h>
#include <sys/types.h>
-#ifdef __GLIBC__
+#ifdef __linux__
#include <asm/types.h>
#endif