1664 lines
54 KiB
Plaintext
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
|