FAQ | 508 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 71 +++++--- con2fbmap.1 | 29 +++ con2fbmap.c | 62 +++++++ etc/CVS/Entries | 5 - etc/CVS/Repository | 1 - etc/CVS/Root | 1 - etc/fb.modes.ATI | 84 ++++++++- fb.h | 497 -------------------------------------------------- fb.modes.5 | 38 ++++- fbset.8 | 39 +++- fbset.c | 67 ++++++- modeline2fb.1 | 40 ++++ modes.l | 6 + modes.y | 7 +- 15 files changed, 893 insertions(+), 562 deletions(-) diff --git a/FAQ b/FAQ new file mode 100644 index 0000000..e3eb6bc --- /dev/null +++ b/FAQ @@ -0,0 +1,508 @@ + Frequently Asked Questions about the usage of fbset + +This document tries to answer questions a user might have when installing +and using fbset. Please make sure you read this before sending questions +or bug reports to the maintainers. + +If you have any questions you think should be answered in this document, +please let me know. + + Hartmut Koptein + +============================================================================== + +1.1. How to set my matrox graphicboard for the framebuffer and with lilo? +1.2. How to do this with other graphic cards? +1.3. How to switch modes with vesafb? +1.4. Is fbset usable with the linux kernel 2.6? +1.5. What are the driver names on the different linux kernel versions? + +2.1. I have an valid XF86Config file, but no /etc/fb.modes file. Any hints? +2.2. The XF86Config-4 file doesn't have any ModeLine lines. What to do? +2.3. What is the difference between the old XF86Config and the one for FB? +2.4. Is a /etc/X11/XF86Config file for framebuffer available? + + +============================================================================== + + +1.1. How to set my matrox graphicboard for the framebuffer and with lilo? + + {HK} Put this line into the /etc/lilo.conf: (some examples) + + append="video=matrox:xres:1152,yres:864,pixclock:10869,left:56,right:106,upper:20,lower:1,hslen:160,vslen:10,depth:8" + append="video=matrox:vesa:279,fv:85" + append="video=matrox:xres:1280,yres:1024,pixclock:7124,left:184,right:12,upper:30,lower:3,hslen:160,vslen:3,sync:3,depth:8" + + +1.2. How to do this with other graphic cards? + + {HK} Look at /usr/share/doc/fbset-2.1/examples/fb.modes.ATI for say 1024x768 + This gives: + + mode "1024x768-75" + # D: 78.75 MHz, H: 60.023 kHz, V: 75.03 Hz + geometry 1024 768 1024 768 8 + timings 12699 176 16 28 1 96 3 + hsync high + vsync high + endmode + + To compare this for the lilo append line we have + + append="video=XXXXXX:xres:1024,yres:768,pixclock:12699,left:176,right:16,upper:28,lower:1,hslen:96,vslen:3,sync:3,depth:8" + + The frame buffer device uses the following fields: + + - screen resolution is xres:1024 yres:768 + - pixclock: pixel clock in ps (pico seconds) 12699 + - left_margin: time from sync to picture 176 + - right_margin: time from picture to sync 16 + - upper_margin: time from sync to picture 28 + - lower_margin: time from picture to sync 1 + - hsync_len: length of horizontal sync 96 + - vsync_len: length of vertical sync 3 + + +1.3. How to switch modes with vesafb? + + {GJ} You can only switch modes at boot time. More info at: + + /usr/share/doc/kernel-doc-std-*/fb/vesafb.txt + + +1.4. Is fbset usable with the linux kernel 2.6? + + + {GJ} Yes, you will need the apropriate FB devices drivers for your + hardware as well as the fbcon support (CONFIG_FRAMEBUFFER_CONSOLE). + + +1.5. What are the driver names on the different linux kernel versions? + + + {GJ} Some framebuffer driver names used on the linux kernel argument + "video=" have changed. All new driver names on linux kernel 2.6 have + the string "fb" appended. Old ones that don't have that postfix on + linux kernel 2.4 are: + + retz3, cyber, cyber2000, clgen, matrox, neo, virge, riva, radeon, + s3trio, trident, sst, vesa, tdfx, sgivw, acorn, hga, apollo, tga, + g364, sa1100, sun3, tx3912, pvr2, vga16 + + So when reading /usr/share/doc/fbset-2.1/FAQ, take this into account and + use the apropriate driver name depending on your running kernel. + + +2.1. I have an valid XF86Config file, but no /etc/fb.modes file. Any hints? + + {HK} Sure. :-) + With an available and correct /etc/X11/XF86Config file (an old setup) you + can use the modeline2fb to convert the modelines into + /etc/fb.modes to to use it with fbset. + + Or you put the fb.modes.ATI (/usr/share/doc/fbset-2.1/examples) into /etc/ as + fb.modes (perms root.root 644). The timings are very compatible with other + graphicboards then ATI. + + +2.2. The XF86Config-4 file doesn't have any ModeLine lines. What to do? + + + {ibr} Use xvidtune's "Show" function to obtain mode parameters, then + use modeline2fb as described above, or cvtmode.m script from + Framebuffer-HOWTO (in this case, don't forget about [hvc]sync lines). + + Some examples: + + echo ModeLine \"640x400\" 31.5 640 672 736 832 400 401 404 445 \ + -hsync +vsync | modeline2fb + + ./cvtmode.m 31.5 640 672 736 832 400 401 404 445 + + +2.3. What is the difference between the old XF86Config and the one for FB? + + + {HK} There aren't many differences, all fonts, kbd, mice and monitor + settings are the same. + But you have choices. For fbdev you don't need a modeline, you can use the + same resolution as on the consoles, setable with fbset (Modes "default"). + + + # ********************************************************************** + # Server for the Linux Frame Buffer Device + # ********************************************************************** + + Section "Device" + Identifier "Linux Frame Buffer Device" + # Option "no_accel" + EndSection + + # ********************************************************************** + # Screen/Display section + # ********************************************************************** + + Section "Screen" + Driver "fbdev" + Device "Linux Frame Buffer Device" + Monitor "Panasonic PanaSync/Pro5" + DefaultColorDepth 16 + SubSection "Display" + Modes "default" + EndSubsection + EndSection + + + With modelines, it is the same as without fbdev. But then you should + check your modeline with fbset --xfree86. This shows you the 'xf86' + modeline from the fbdev settings. Here some examples (don't use it + without checking your setup first): + + + ModeLine "640x480" 30.438 640 704 768 832 480 512 514 546 -HSync -VSync + ModeLine "800x600" 49.553 800 864 928 992 600 632 634 666 -HSync -VSync + ModeLine "832x624" 52.995 832 896 960 1024 624 656 658 690 -HSync -VSync + # ModeLine "1024x768" 76.064 1024 1088 1152 1216 768 800 802 834 -HSync -VSync + ModeLine "1024x768" 99.801 1024 1024 1120 1312 768 789 804 845 -HSync -VSync + ModeLine "1152x870" 94.358 1152 1216 1280 1344 870 902 904 936 -HSync -VSync + ModeLine "1152x900" 130.000 1152 1320 1360 1620 900 901 905 943 +HSync +VSync + ModeLine "1280x960" 125.645 1280 1312 1456 1680 960 961 964 1000 -HSync -VSync + ModeLine "1280x1024" 144.551 1280 1352 1496 1632 1024 1025 1028 1059 +HSync +VSync + ModeLine "1280x1024" 155.000 1280 1384 1528 1688 1024 1025 1028 1066 +HSync +VSync + + +2.4. Is a /etc/X11/XF86Config file for framebuffer available? + + + {HK} Use this as an example: + + + # $XFree86: xc/programs/Xserver/hw/xfree86/XF86Conf.cpp,v 3.21 1996/01/31 11:46:37 dawes Exp $ + # + # Copyright (c) 1994 by The XFree86 Project, Inc. + # + # Permission is hereby granted, free of charge, to any person obtaining a + # copy of this software and associated documentation files (the "Software"), + # to deal in the Software without restriction, including without limitation + # the rights to use, copy, modify, merge, publish, distribute, sublicense, + # and/or sell copies of the Software, and to permit persons to whom the + # Software is furnished to do so, subject to the following conditions: + # + # The above copyright notice and this permission notice shall be included in + # all copies or substantial portions of the Software. + # + # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + # THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + # OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # SOFTWARE. + # + # Except as contained in this notice, the name of the XFree86 Project shall + # not be used in advertising or otherwise to promote the sale, use or other + # dealings in this Software without prior written authorization from the + # XFree86 Project. + # + # $XConsortium: XF86Conf.cpp /main/16 1996/01/31 10:03:57 kaleb $ + + # ********************************************************************** + # Refer to the XF86Config(4/5) man page for details about the format of + # this file. This man page is installed as /usr/X11R6/man/man5/XF86Config.5x + # ********************************************************************** + + # ********************************************************************** + # Files section. This allows default font and rgb paths to be set + # ********************************************************************** + + Section "Files" + # The location of the RGB database. Note, this is the name of the + # file minus the extension (like ".txt" or ".db"). There is normally + # no need to change the default. + + RgbPath "/usr/X11R6/lib/X11/rgb" + + # Multiple FontPath entries are allowed (which are concatenated together), + # as well as specifying multiple comma-separated entries in one FontPath + # command (or a combination of both methods) + + FontPath "/usr/X11R6/lib/X11/fonts/misc/" + # FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" + # FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" + FontPath "/usr/lib/ghostscript/fonts/" + FontPath "/usr/X11R6/lib/X11/fonts/Type1/" + FontPath "/usr/X11R6/lib/X11/fonts/Speedo/" + FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" + FontPath "/usr/X11R6/lib/X11/fonts/100dpi/" + + FontPath "/usr/X11R6/lib/X11/fonts/sharefont/" + EndSection + + # ********************************************************************** + # Server flags section. + # ********************************************************************** + + Section "ServerFlags" + # Uncomment this to cause a core dump at the spot where a signal is + # received. This may leave the console in an unusable state, but may + # provide a better stack trace in the core dump to aid in debugging + + # NoTrapSignals + + # Uncomment this to disable the server abort sequence + # This allows clients to receive this key event. + + # DontZap + + # Uncomment this to disable the / mode switching + # sequences. This allows clients to receive these key events. + + # DontZoom + + # Uncomment this to disable tuning with the xvidtune client. With + # it the client can still run and fetch card and monitor attributes, + # but it will not be allowed to change them. If it tries it will + # receive a protocol error. + + # DisableVidModeExtension + + # Uncomment this to enable the use of a non-local xvidtune client. + + # AllowNonLocalXvidtune + EndSection + + # ********************************************************************** + # Input devices + # ********************************************************************** + + # ********************************************************************** + # Keyboard section + # ********************************************************************** + + Section "Keyboard" + Protocol "Standard" + + # when using XQUEUE, comment out the above line, and uncomment the + # following line + + # Protocol "Xqueue" + + AutoRepeat 500 5 + + # Let the server do the NumLock processing. This should only be required + # when using pre-R6 clients + # ServerNumLock + + # Specifiy which keyboard LEDs can be user-controlled (eg, with xset(1)) + # Xleds 1 2 3 + + # To set the LeftAlt to Meta, RightAlt key to ModeShift, + # RightCtl key to Compose, and ScrollLock key to ModeLock: + + # LeftAlt Meta + # RightAlt ModeShift + # RightCtl Compose + # ScrollLock ModeLock + + # To disable the XKEYBOARD extension, uncomment XkbDisable. + + XkbDisable + + # To use the default map in ProjectRoot keymap/xfree86, uncomment + # XkbKeymap. To use one of the alternate maps in keymap/xfree86 + # uncomment and modify the XkbKeymap line, e.g.: + # XkbKeymap "keymap/xfree86(us_microsoft)" + # To tailor a combination not already in keymap/xfree86 modify + # keymap/xfree86 or uncomment and modify the other lines as + # desired. One way to get a german layout on a 101 key keyboard + # is to modify the XkbSymbols line, e.g.: + # XkbSymbols "symbols/us(pc101)+de" + + XkbKeymap "keymap/xfree86" + Xkbkeycodes "keycodes/xfree86" + XkbTypes "types/default" + XkbCompat "compat/default" + XkbSymbols "symbols/de(pc102)" + XkbGeometry "geometry/pc" + EndSection + + + # ********************************************************************** + # Pointer section + # ********************************************************************** + + Section "Pointer" + Protocol "PS/2" + Device "/dev/mouse" + + # When using XQUEUE, comment out the above two lines, and uncomment + # the following line. + + # Protocol "Xqueue" + + # Baudrate and SampleRate are only for some Logitech mice + + # BaudRate 9600 + # SampleRate 150 + + # Emulate3Buttons is an option for 2-button Microsoft mice + # Emulate3Timeout is the timeout in milliseconds (default is 50ms) + + # Emulate3Buttons + # Emulate3Timeout 50 + + # ChordMiddle is an option for some 3-button Logitech mice + + # ChordMiddle + EndSection + + + # ********************************************************************** + # Xinput section -- this is optional and is required only if you + # are using extended input devices. This is for example only. Refer + # to the XF86Config man page for a description of the options. + # ********************************************************************** + # + # Section "Xinput" + # SubSection "WacomStylus" + # Port "/dev/ttyS1" + # DeviceName "Wacom" + # EndSubSection + # SubSection "WacomCursor" + # EndSubSection + # SubSection "WacomEraser" + # EndSubSection + # + # SubSection "Elographics" + # Port "/dev/ttyS1" + # DeviceName "Elo" + # MinimumXPosition 300 + # MaximumXPosition 3500 + # MinimumYPosition 300 + # MaximumYPosition 3500 + # Screen 0 + # UntouchDelay 10 + # ReportDelay 10 + # EndSubSection + # + # SubSection "Joystick" + # Port "/dev/joy0" + # DeviceName "Joystick" + # TimeOut 10 + # MinimumXPosition 100 + # MaximumXPosition 1300 + # MinimumYPosition 100 + # MaximumYPosition 1100 + # # CenterX 700 + # # CenterY 600 + # Delta 20 + # EndSubSection + # EndSection + + + # ********************************************************************** + # Monitor section + # ********************************************************************** + + # Any number of monitor sections may be present + + Section "Monitor" + Identifier "Panasonic PanaSync/Pro5" + VendorName "Panasonic" + ModelName "PanaSync/Pro5" + + # HorizSync is in kHz unless units are specified. + # HorizSync may be a comma separated list of discrete values, or a + # comma separated list of ranges of values. + # NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S + # USER MANUAL FOR THE CORRECT NUMBERS. + + # HorizSync 31.5 # typical for a single frequency fixed-sync monitor + + # HorizSync 15-40 # multisync + # HorizSync 30-64 # multisync + # HorizSync 31.5, 35.2 # multiple fixed sync frequencies + # HorizSync 15-25, 30-50 # multiple ranges of sync frequencies + + HorizSync 31-84 + + # VertRefresh is in Hz unless units are specified. + # VertRefresh may be a comma separated list of discrete values, or a + # comma separated list of ranges of values. + # NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S + # USER MANUAL FOR THE CORRECT NUMBERS. + + # VertRefresh 60 # typical for a single frequency fixed-sync monitor + + # VertRefresh 50-100 # multisync + # VertRefresh 60, 65 # multiple fixed sync frequencies + # VertRefresh 40-50, 80-100 # multiple ranges of sync frequencies + + VertRefresh 50-90 + + # Modes can be specified in two formats. A compact one-line format, or + # a multi-line format. + + ModeLine "640x480" 30.438 640 704 768 832 480 512 514 546 -HSync -VSync + ModeLine "800x600" 49.553 800 864 928 992 600 632 634 666 -HSync -VSync + ModeLine "832x624" 52.995 832 896 960 1024 624 656 658 690 -HSync -VSync + # ModeLine "1024x768" 76.064 1024 1088 1152 1216 768 800 802 834 -HSync -VSync + ModeLine "1024x768" 99.801 1024 1024 1120 1312 768 789 804 845 -HSync -VSync + ModeLine "1152x870" 94.358 1152 1216 1280 1344 870 902 904 936 -HSync -VSync + ModeLine "1152x900" 130.000 1152 1320 1360 1620 900 901 905 943 +HSync +VSync + ModeLine "1280x960" 125.645 1280 1312 1456 1680 960 961 964 1000 -HSync -VSync + ModeLine "1280x1024" 144.551 1280 1352 1496 1632 1024 1025 1028 1059 +HSync +VSync + ModeLine "1280x1024" 155.000 1280 1384 1528 1688 1024 1025 1028 1066 +HSync +VSync + EndSection + + # ********************************************************************** + # Server for the Linux Frame Buffer Device + # ********************************************************************** + + Section "Device" + Identifier "Linux Frame Buffer Device" + # Option "no_accel" + EndSection + + Section "Screen" + Driver "fbdev" + Device "Linux Frame Buffer Device" + Monitor "Panasonic PanaSync/Pro5" + DefaultColorDepth 16 + SubSection "Display" + Modes "1280x960" "1152x900" "1024x768" "800x600" "640x480" + Depth 8 + Virtual 1280 960 + EndSubSection + SubSection "Display" + Depth 15 + Modes "1280x960" "1152x900" "1024x768" "800x600" "640x480" + Virtual 1280 960 + EndSubSection + SubSection "Display" + Depth 16 + Modes "1280x960" "1152x900" "1024x768" "800x600" "640x480" + Virtual 1280 960 + EndSubSection + SubSection "Display" + Depth 24 + Modes "1280x960" "1152x900" "1024x768" "800x600" "640x480" + Virtual 1280 960 + EndSubSection + SubSection "Display" + Depth 32 + Modes "1152x900" "1024x768" "800x600" "640x480" + Virtual 1152 900 + EndSubSection + EndSection + + + +============================================================================== + +Answers were given by: +{HK} Hartmut Koptein, +{ibr} Baurjan Ismagulov, +{GJ} Guillem Jover, + diff --git a/Makefile b/Makefile index 3a71024..58cb1d7 100644 --- a/Makefile +++ b/Makefile @@ -2,40 +2,53 @@ # Linux Frame Buffer Device Configuration # -CC = gcc -Wall -O2 -I. -BISON = bison -d -FLEX = flex -INSTALL = install -RM = rm -f +CC = gcc +CFLAGS = -Wall -O2 +BISON = bison -d +FLEX = flex +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) -m 755 +INSTALL_DATA = $(INSTALL) -m 644 +RM = rm -f -All: fbset +all: fbset con2fbmap +fbset: fbset.o modes.tab.o lex.yy.o -fbset: fbset.o modes.tab.o lex.yy.o +fbset.o: fbset.c fbset.h +modes.tab.o: modes.tab.c fbset.h +lex.yy.o: lex.yy.c fbset.h modes.tab.h -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 +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 + $(BISON) modes.y + +con2fbmap: con2fbmap.o +con2fbmap.o: con2fbmap.c + +install: fbset + $(INSTALL) -d $(DESTDIR)/{etc,usr/{bin,share/man/man{1,5}}} + $(INSTALL_DATA) etc/fb.modes.ATI $(DESTDIR)/etc/fb.modes + $(INSTALL_DATA) fb.modes.5 $(DESTDIR)/usr/share/man/man5/ + $(INSTALL_PROGRAM) fbset $(DESTDIR)/usr/bin/ + $(INSTALL_DATA) fbset.8 $(DESTDIR)/usr/share/man/man1/fbset.1 + $(INSTALL_PROGRAM) modeline2fb $(DESTDIR)/usr/bin/ + $(INSTALL_DATA) modeline2fb.1 $(DESTDIR)/usr/share/man/man1/ + $(INSTALL_PROGRAM) con2fbmap $(DESTDIR)/usr/bin/ + $(INSTALL_DATA) 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 + diff --git a/con2fbmap.1 b/con2fbmap.1 new file mode 100644 index 0000000..e0b9416 --- /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 diff --git a/con2fbmap.c b/con2fbmap.c new file mode 100644 index 0000000..816f249 --- /dev/null +++ b/con2fbmap.c @@ -0,0 +1,62 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEFAULT_FRAMEBUFFER "/dev/fb0" +#define DEFAULT_FRAMEBUFFER_DEVFS "/dev/fb/0" + +static void +Usage(void) +{ + fprintf(stderr, "\nUsage: %s console [framebuffer]\n\n", + program_invocation_short_name); + exit(1); +} + +int +main(int argc, const char *argv[]) +{ + int do_write = 0; + int fd; + struct fb_con2fbmap map; + + switch (argc) + { + case 3: + do_write = 1; + map.framebuffer = atoi(argv[2]); + case 2: + map.console = atoi(argv[1]); + break; + default: + Usage(); + } + + if (((fd = open(DEFAULT_FRAMEBUFFER_DEVFS, O_RDONLY)) < 0) && + ((fd = open(DEFAULT_FRAMEBUFFER, O_RDONLY)) < 0)) + error(EXIT_FAILURE, errno, "open %s", DEFAULT_FRAMEBUFFER); + + if (do_write) + { + if (ioctl(fd, FBIOPUT_CON2FBMAP, &map)) + error(EXIT_FAILURE, errno, "ioctl FBIOPUT_CON2FBMAP"); + } else + { + if (ioctl(fd, FBIOGET_CON2FBMAP, &map)) + error(EXIT_FAILURE, errno, "ioctl FBIOGET_CON2FBMAP"); + printf("console %d is mapped to framebuffer %d\n", + map.console, map.framebuffer); + } + + close(fd); + return EXIT_SUCCESS; +} diff --git a/etc/CVS/Entries b/etc/CVS/Entries deleted file mode 100644 index 66218a5..0000000 --- a/etc/CVS/Entries +++ /dev/null @@ -1,5 +0,0 @@ -/fb.modes.ATI/1.1.1.1/Sun Jan 17 19:15:47 1999// -/fb.modes.Falcon/1.1.1.1/Sun Jan 17 19:15:47 1999// -/fb.modes.NTSC/1.1.1.1/Sun Jan 17 19:15:47 1999// -/fb.modes.PAL/1.1.1.1/Sun Jan 17 19:15:47 1999// -D diff --git a/etc/CVS/Repository b/etc/CVS/Repository deleted file mode 100644 index 169d0a7..0000000 --- a/etc/CVS/Repository +++ /dev/null @@ -1 +0,0 @@ -/CVS/fbset/etc diff --git a/etc/CVS/Root b/etc/CVS/Root deleted file mode 100644 index 35786e2..0000000 --- a/etc/CVS/Root +++ /dev/null @@ -1 +0,0 @@ -:pserver:geert@cvs.linux-m68k.org:/CVS diff --git a/etc/fb.modes.ATI b/etc/fb.modes.ATI index d69a84b..e6a4fb7 100644 --- 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) # diff --git a/fb.h b/fb.h deleted file mode 100644 index b901d9e..0000000 --- a/fb.h +++ /dev/null @@ -1,497 +0,0 @@ -#ifndef _LINUX_FB_H -#define _LINUX_FB_H - -#include - -/* Definitions of frame buffers */ - -#define FB_MAJOR 29 - -#define FB_MODES_SHIFT 5 /* 32 modes per framebuffer */ -#define FB_NUM_MINORS 256 /* 256 Minors */ -#define FB_MAX (FB_NUM_MINORS / (1 << FB_MODES_SHIFT)) -#define GET_FB_IDX(node) (MINOR(node) >> FB_MODES_SHIFT) - -/* ioctls - 0x46 is 'F' */ -#define FBIOGET_VSCREENINFO 0x4600 -#define FBIOPUT_VSCREENINFO 0x4601 -#define FBIOGET_FSCREENINFO 0x4602 -#define FBIOGETCMAP 0x4604 -#define FBIOPUTCMAP 0x4605 -#define FBIOPAN_DISPLAY 0x4606 -/* 0x4607-0x460B are defined below */ -/* #define FBIOGET_MONITORSPEC 0x460C */ -/* #define FBIOPUT_MONITORSPEC 0x460D */ -/* #define FBIOSWITCH_MONIBIT 0x460E */ -#define FBIOGET_CON2FBMAP 0x460F -#define FBIOPUT_CON2FBMAP 0x4610 - -#define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */ -#define FB_TYPE_PLANES 1 /* Non interleaved planes */ -#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_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_VGA_PLANES_VGA4 0 /* 16 color planes (EGA/VGA) */ -#define FB_AUX_VGA_PLANES_CFB4 1 /* CFB4 in planes (VGA) */ -#define FB_AUX_VGA_PLANES_CFB8 2 /* CFB8 in planes (VGA) */ - -#define FB_VISUAL_MONO01 0 /* Monochr. 1=Black 0=White */ -#define FB_VISUAL_MONO10 1 /* Monochr. 1=White 0=Black */ -#define FB_VISUAL_TRUECOLOR 2 /* True color */ -#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_ACCEL_NONE 0 /* no hardware accelerator */ -#define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */ -#define FB_ACCEL_AMIGABLITT 2 /* Amiga Blitter */ -#define FB_ACCEL_S3_TRIO64 3 /* Cybervision64 (S3 Trio64) */ -#define FB_ACCEL_NCR_77C32BLT 4 /* RetinaZ3 (NCR 77C32BLT) */ -#define FB_ACCEL_S3_VIRGE 5 /* Cybervision64/3D (S3 ViRGE) */ -#define FB_ACCEL_ATI_MACH64GX 6 /* ATI Mach 64GX family */ -#define FB_ACCEL_DEC_TGA 7 /* DEC 21030 TGA */ -#define FB_ACCEL_ATI_MACH64CT 8 /* ATI Mach 64CT family */ -#define FB_ACCEL_ATI_MACH64VT 9 /* ATI Mach 64CT family VT class */ -#define FB_ACCEL_ATI_MACH64GT 10 /* ATI Mach 64CT family GT class */ -#define FB_ACCEL_SUN_CREATOR 11 /* Sun Creator/Creator3D */ -#define FB_ACCEL_SUN_CGSIX 12 /* Sun cg6 */ -#define FB_ACCEL_SUN_LEO 13 /* Sun leo/zx */ -#define FB_ACCEL_IMS_TWINTURBO 14 /* IMS Twin Turbo */ -#define FB_ACCEL_3DLABS_PERMEDIA2 15 /* 3Dlabs Permedia 2 */ -#define FB_ACCEL_MATROX_MGA2064W 16 /* Matrox MGA2064W (Millenium) */ -#define FB_ACCEL_MATROX_MGA1064SG 17 /* Matrox MGA1064SG (Mystique) */ -#define FB_ACCEL_MATROX_MGA2164W 18 /* Matrox MGA2164W (Millenium II) */ -#define FB_ACCEL_MATROX_MGA2164W_AGP 19 /* Matrox MGA2164W (Millenium II) */ -#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 */ - -struct fb_fix_screeninfo { - char id[16]; /* identification string eg "TT Builtin" */ - char *smem_start; /* Start of frame buffer mem */ - /* (physical address) */ - __u32 smem_len; /* Length of frame buffer mem */ - __u32 type; /* see FB_TYPE_* */ - __u32 type_aux; /* Interleave for interleaved Planes */ - __u32 visual; /* see FB_VISUAL_* */ - __u16 xpanstep; /* zero if no hardware panning */ - __u16 ypanstep; /* zero if no hardware panning */ - __u16 ywrapstep; /* zero if no hardware ywrap */ - __u32 line_length; /* length of a line in bytes */ - char *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 */ -}; - -/* 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. - */ -struct fb_bitfield { - __u32 offset; /* beginning of bitfield */ - __u32 length; /* length of bitfield */ - __u32 msb_right; /* != 0 : Most significant bit is */ - /* right */ -}; - -#define FB_NONSTD_HAM 1 /* Hold-And-Modify (HAM) */ - -#define FB_ACTIVATE_NOW 0 /* set values immediately (or vbl)*/ -#define FB_ACTIVATE_NXTOPEN 1 /* activate on next open */ -#define FB_ACTIVATE_TEST 2 /* don't set, round up impossible */ -#define FB_ACTIVATE_MASK 15 - /* values */ -#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_ACCELF_TEXT 1 /* text mode acceleration */ - -#define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */ -#define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */ -#define FB_SYNC_EXT 4 /* external sync */ -#define FB_SYNC_COMP_HIGH_ACT 8 /* composite sync high active */ -#define FB_SYNC_BROADCAST 16 /* broadcast video timings */ - /* vtotal = 144d/288n/576i => PAL */ - /* vtotal = 121d/242n/484i => NTSC */ -#define FB_SYNC_ON_GREEN 32 /* sync on green */ - -#define FB_VMODE_NONINTERLACED 0 /* non interlaced */ -#define FB_VMODE_INTERLACED 1 /* interlaced */ -#define FB_VMODE_DOUBLE 2 /* double scan */ -#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 */ - -struct fb_var_screeninfo { - __u32 xres; /* visible resolution */ - __u32 yres; - __u32 xres_virtual; /* virtual resolution */ - __u32 yres_virtual; - __u32 xoffset; /* offset from virtual to visible */ - __u32 yoffset; /* resolution */ - - __u32 bits_per_pixel; /* guess what */ - __u32 grayscale; /* != 0 Graylevels instead of colors */ - - struct fb_bitfield red; /* bitfield in fb mem if true color, */ - struct fb_bitfield green; /* else only length is significant */ - struct fb_bitfield blue; - struct fb_bitfield transp; /* transparency */ - - __u32 nonstd; /* != 0 Non standard pixel format */ - - __u32 activate; /* see FB_ACTIVATE_* */ - - __u32 height; /* height of picture in mm */ - __u32 width; /* width of picture in mm */ - - __u32 accel_flags; /* acceleration flags (hints) */ - - /* Timing: All values in pixclocks, except pixclock (of course) */ - __u32 pixclock; /* pixel clock in ps (pico seconds) */ - __u32 left_margin; /* time from sync to picture */ - __u32 right_margin; /* time from picture to sync */ - __u32 upper_margin; /* time from sync to picture */ - __u32 lower_margin; - __u32 hsync_len; /* length of horizontal sync */ - __u32 vsync_len; /* length of vertical sync */ - __u32 sync; /* see FB_SYNC_* */ - __u32 vmode; /* see FB_VMODE_* */ - __u32 reserved[6]; /* Reserved for future compatibility */ -}; - -struct fb_cmap { - __u32 start; /* First entry */ - __u32 len; /* Number of entries */ - __u16 *red; /* Red values */ - __u16 *green; - __u16 *blue; - __u16 *transp; /* transparency, can be NULL */ -}; - -struct fb_con2fbmap { - __u32 console; - __u32 framebuffer; -}; - -struct fb_monspecs { - __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 - - -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] */ -}; - -struct fb_cursorstate { - __s16 xoffset; - __s16 yoffset; - __u16 mode; -}; - -#define FB_CURSOR_OFF 0 -#define FB_CURSOR_ON 1 -#define FB_CURSOR_FLASH 2 - -#endif /* Preliminary */ - -#endif /* _LINUX_FB_H */ diff --git a/fb.modes.5 b/fb.modes.5 index 0918f08..4258683 100644 --- 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 can easily be doubled, so that the 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: diff --git a/fbset.8 b/fbset.8 index 74e7d3c..04fee41 100644 --- a/fbset.8 +++ b/fbset.8 @@ -1,4 +1,4 @@ -.TH fbset 8 "July 1998" local "Linux frame buffer utils" +.TH fbset 1 2006-01-18 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 device settings .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 @@ -15,6 +13,8 @@ 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 > +or .IR \fBfb < n >, where .I n @@ -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,18 @@ display the timing information as it's needed by XFree86 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/fb/0 +or .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 pixels) .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 order .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 @@ -232,7 +251,7 @@ and make the used frame buffer device known to .br .I /etc/fb.modes .SH SEE ALSO -.BR fb.modes "(5), " fbdev (4) +.BR fb.modes "(5), " fbdev "(4), " /usr/share/doc/fbset-2.1/FAQ .SH AUTHORS .TP Geert Uytterhoeven diff --git a/fbset.c b/fbset.c index a9da078..d7cb0fa 100644 --- a/fbset.c +++ b/fbset.c @@ -32,7 +32,7 @@ struct file; struct inode; -#include "fb.h" +#include #include "fbset.h" @@ -42,6 +42,7 @@ struct inode; */ #define DEFAULT_FRAMEBUFFER "/dev/fb0" +#define DEFAULT_FRAMEBUFFER_DEVFS "/dev/fb/0" /* @@ -199,6 +200,52 @@ 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_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_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" }, }; @@ -710,7 +757,7 @@ static void DisplayFBInfo(struct fb_fix_screeninfo *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 +827,7 @@ static void DisplayFBInfo(struct fb_fix_screeninfo *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 : "); @@ -832,7 +879,8 @@ static int FillScanRates(struct VideoMode *vmode) 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" @@ -846,7 +894,7 @@ static void Usage(void) " -a, --all : change all virtual consoles on this device\n" " Frame buffer special device nodes:\n" " -fb : processed frame buffer device\n" - " (default is " DEFAULT_FRAMEBUFFER ")\n" + " (default is " DEFAULT_FRAMEBUFFER_DEVFS " and " DEFAULT_FRAMEBUFFER ")\n" " Video mode database:\n" " -db : video mode database file\n" " (default is " DEFAULT_MODEDBFILE ")\n" @@ -887,6 +935,7 @@ static void Usage(void) " -step : step increment (in pixels or pixel lines)\n" " (default is 8 horizontal, 2 vertical)\n", ProgramName); + exit(0); } @@ -977,8 +1026,12 @@ int main(int argc, char *argv[]) if (Opt_version || Opt_verbose) puts(VERSION); - if (!Opt_fb) - Opt_fb = DEFAULT_FRAMEBUFFER; + if (!Opt_fb) { + if (access(DEFAULT_FRAMEBUFFER_DEVFS,F_OK)==0) + Opt_fb = DEFAULT_FRAMEBUFFER_DEVFS; + else + Opt_fb = DEFAULT_FRAMEBUFFER; + } /* * Open the Frame Buffer Device diff --git a/modeline2fb.1 b/modeline2fb.1 new file mode 100644 index 0000000..5fccf69 --- /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 +. diff --git a/modes.l b/modes.l index 426eb5c..a0dd8be 100644 --- a/modes.l +++ b/modes.l @@ -99,6 +99,7 @@ static const char *CopyString(const char *s) 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; diff --git a/modes.y b/modes.y index 27b497a..d3b38f0 100644 --- a/modes.y +++ b/modes.y @@ -19,8 +19,7 @@ #include #include #include - -#include "fb.h" +#include #include "fbset.h" extern int yylex(void); @@ -42,7 +41,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 +147,7 @@ double : DOUBLE BOOLEAN } ; -rgba : RGBA STRING +rgba : RGBA COLORS { makeRGBA(&VideoMode, (const char*)$2); }