summaryrefslogtreecommitdiffstats
path: root/sys/dev/fb
Commit message (Collapse)AuthorAgeFilesLines
* On sparc64 also use the fillw() this header provides for ia64 somarius2007-01-181-2/+4
| | | | | the sparc64 MD code doesn't need to provide a memsetw() along with the ISA compat cruft.
* - Merge sys/sparc64/creator/creator_upa.c into sys/dev/fb/creator.c.marius2007-01-162-87/+452
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The separate bus front-end was inherited from the OpenBSD creator(4), which at that time had a mainbus(4) (for USI/II machines, which use an UPA interconnection bus as the nexus) and an upa(4) (for USIII machines, which use a subordinate/slave UPA bus hanging off from the Fireplane/Safari interconnection bus) front-end. With FreeBSD and newbus there is/will be no need to have two separate bus front-ends for these busses, so we can easily coallapse the shared front-end and the back-end into a single source file (note that the FreeBSD creator_upa.c was misnomer anyway; based on what it actually attached to that should have been creator_nexus.c), actually OpenBSD meanwhile also has moved to a shared front-end and a single source file. Due to the low-level console support creator.c also wasn't free from bus related things before. While at it, also split sys/sparc64/creator/creator.h into a sys/dev/fb/creatorreg.h that only contains register macros and move the structures to the top of sys/dev/fb/creator.c as suggested by style(9) so creator(4) is no longer scattered over two directories. - Use OF_decode_addr()/sparc64_fake_bustag() to obtain the bus tags and handles for the low-level console support instead of hardcoding support for AFB/FFB hanging off from nexus(4) only. This is part 2/4 of allowing creator(4) to work in USIII machines (which have a UPA bus hanging off from the Fireplane/Safari bus reflected by the nexus), which already makes it work as the low-level console there. - Allocate resources in the bus attach routine regardless of whether creator(4) is used as for the low-level console and thus the required bus tags and handles have been already obtained or not so the resources are marked as taken in the respective RMAN. - For both obtaining the bus tags and handles for the low-level console support as well as allocating the corresponding resources in the regular bus attach routine don't bother to get all for the maximum of 24 register banks but only (for) the two tag/handle pairs required for providing the video interface for syscons(4) support. If we can't allocate the rest of them just limit the memory range accessible via creator_fb_mmap() accordingly. - Sanity check the memory range spanned by the first and last resources and the resources in between as far as possible, as the XFree86/Xorg sunffb(4) expects to be able to access the whole region, even though the backing resources are actually non-continuous. Limit and check the memory range accessible via creator_fb_mmap() accordingly. - Reduce the size of buffers for OFW properties to what they actually need to hold. - Rename some tables to creator_<foo> for consistency. - Also for the sizes in the creator_fb_mmap() mapping table entries use macros for consistency, add macros for the remaining register banks for completeness.
* - Garbage collect more alpha remnants.marius2007-01-083-1102/+2
| | | | - Fix a typo in a comment in boot_font.c.
* Remove the DPMS code in creator_blank_display(), as it causes somemarius2006-08-241-9/+0
| | | | | | | | | | | | | | | | | LCDs to blink in the V_DISPLAY_ON case, at least in combination with some 13W3-VGA-adaptors (what's exactly going on is unclear though, as it happens when all of H-sync, V-sync and video output are enabled and not touching the sync bits from the preset fixes it). Thus creator_blank_display() now is reduced to turning the video output on/off. Although that DPMS code did what the XFree86/Xorg sunffb(4x) does, it was questionable in the first place, as both implementations also turn(ed) off the video output on standby and suspend, thus most likely causing the monitor to turn off instead of entering standby or suspend as intended (at least my monitors don't). Reported and tested by: Patrick Reich MFC after: 3 days
* Since DELAY() was moved, most <machine/clock.h> #includes have beenphk2006-05-162-2/+0
| | | | unnecessary.
* Remove some tga bits I missed.jhb2006-05-122-2602/+0
|
* Fix -Wundef warnings from compiling GENERIC and LINT kernels ofru2005-12-061-3/+3
| | | | all architectures.
* Fix -Wundef from compiling the amd64 LINT.ru2005-12-041-3/+3
|
* Fix -Wundef.ru2005-12-041-5/+8
|
* Remove unecessary include file. machine/rpb.h is very alpha specificimp2005-11-071-1/+0
| | | | and is not needed for this font, which isn't alpha speciifc.
* Add a font width argument to vi_load_font_t, vi_save_font_t and vi_putm_tmarius2005-09-287-35/+37
| | | | | | | | | | | | | | | | and do some preparations for handling 12x22 fonts (currently lots of code implies and/or hardcodes a font width of 8 pixels). This will be required on sparc64 which uses a default font size of 12x22 in order to add font loading and saving support as well as to use a syscons(4)-supplied mouse pointer image. This API breakage is committed now so it can be MFC'ed in time for 6.0 and later on upcoming framebuffer drivers destined for use on sparc64 and which are expected to rely on using font loading internally and on a syscons(4)-supplied mouse pointer image can be easily MFC'ed to RELENG_6 rather than requiring a backport. Tested on: i386, sparc64, make universe MFC after: 1 week
* - Declare lookup tables etc. const. [1]marius2005-07-101-68/+148
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Add a missing "ATI" in one of the device descriptions. - In machfb_init_engine() adjust a wait_for_fifo() call to the actual number of operations. - As a speed optimization cache setting the foreground and back- ground colors. - I got the meaning of V_DISPLAY_BLANK wrong, it's blank like turn off and not blank like turn on and clear the screen. So move clearing the screen to machfb_clear() were it hopefully belongs. - Properly implement V_DISPLAY_BLANK, V_DISPLAY_STAND_BY and V_DISPLAY_SUSPEND. This makes blank_saver.ko and green_saver.ko work. [1] - Implement machfb_load_palette() and machfb_save_palette() and set the V_ADP_PALETTE flag. This makes fade_saver.ko work. [2] - Install our 16-color color map only once and with an offset of 16 as the OBP driver expects white to be at index 0 and black at 255. This fixes the inversion of the colors back at the boot prompt after shutting down FreeBSD. This will also be handy if we ever want to implement breaking into OFW. Unfortunately there doesn't seem to be a better way to achieve this as e.g. bypassing the color map isn't supported by all Mach64 chips. - Move invalidating the cache variables to machfb_set_mode() and set the V_ADP_MODECHANGE flag. This causes machfb_set_mode() to be called when the X server shuts down. This hopefully will fix the screen corruption happening occasionally when shutting down the X server and which is present until switching to another VTY. Inspired by: NetBSD [1] Based on: Xorg [2] Approved by: re (scottl)
* - Declare lookup tables etc. const.marius2005-07-102-91/+170
| | | | | | | | | | | | | | | | | | | | | | | | | | - Let creator_bitblt() return ENODEV as it's not implemented (missed in sys/dev/fb/creator.c rev. 1.6). - As a speed optimization inline the creator_ras_wait() etc. helper functions and also cache setting the font increment, font width and plane mask. [1] - I got the meaning of V_DISPLAY_BLANK wrong, it's blank like turn off and not blank like turn on and clear the screen. So move clearing the screen to creator_clear() were it hopefully belongs. - Properly implement V_DISPLAY_BLANK, V_DISPLAY_STAND_BY and V_DISPLAY_SUSPEND. This makes blank_saver.ko and green_saver.ko work. [1] - Change the order of operations in creator_fill_rect(), i.e. write y before x and cy before cx. This fixes drawing the top part of the border with Elite3D cards when switching from Xorg to a VTY. - Move setting the chip configuration we use and invalidating the cache variables to creator_set_mode() and set the V_ADP_MODECHANGE flag. This causes creator_set_mode() to be called when the X server shuts down which fixes the screen corruption caused most of the time by Xorg not restoring the original configuration present at startup. Inspired by/based on: Xorg [1] Approved by: re (scottl)
* - In machfb_configure() when probed for the high-level console returnmarius2005-06-041-22/+36
| | | | | | | | | | | | | | the number of registered adapters instead of determining again whether stdout is a supported card (and which might have failed to attach and register). - Fix a bug in the handling of the FBIOSCURSOR IOCTL; the code was meant to return ENODEV for all invocations expect when used to disable the cursor and not just when used for enabling the cursor. - In case the adapter is the OFW stdout move its OFW cursor to the start of the last line on halt so OFW output doesn't get intermixed with what FreeBSD left on the screen. - Drop variable names in the prototypes of some functions in order to match the style of majority of the prototypes in this file.
* - In creator_configure() when probed for the high-level console returnmarius2005-06-042-41/+33
| | | | | | | | | | | | | | | | | | | | | | | | the number of registered adapters instead of determining again whether stdout is a supported card (and which might have failed to attach and register). - Drop creator_set_mode() and move the relevant parts to creator_fill_rect() and creator_putc() respectively. This is a bit cleaner than having to make sure that creator_set_mode() was called before creator_fill_rect() or creator_putc() are used and matches better what Xorg does. - Fix a bug in the handling of the FBIOSCURSOR IOCTL; the code was meant to return ENODEV for all invocations expect when used to disable the cursor and not just when used for enabling the cursor. - In case the adapter is the OFW stdout move its OFW cursor to the start of the last line on halt so OFW output doesn't get intermixed with what FreeBSD left on the screen. With hindsight this is what the faking of a hardware cursor which was removed in the last revision really was about, i.e. to keep the OFW updated about the current cursor position. The new approach however is simpler while producing the same result and doesn't cause the first letter of the OFW output to be turned into a blank and a newline. - Add variable names to the prototypes of creator_cursor_*() which were added in the last revision and list them alphabetically in order to match the style of this file.
* Remove bus_{mem,p}io.h and related code for a micro-optimization on i386nyan2005-05-294-5/+0
| | | | | | and amd64. The optimization is a trivial on recent machines. Reviewed by: -arch (imp, marcel, dfr)
* Add machfb(4), a driver for ATI Mach64 graphics chips intended formarius2005-05-212-0/+1948
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | use with syscons(4) on sparc64. It's based on the respective NetBSD driver with some additional info (initialisation/hardware cursor) obtained from the Xorg 'ati' driver and some ideas taken from creator(4). ATI Mach64 chips ("ATI Rage") are quite common as low- end graphics chips in PCI-based sun4u machines and are used on-board in e.g. Blade 100 and a couple of OEM products. Most if not all of the Sun PGX add-on cards family (descriptions of the PGX32 are conflicting but most say it's a Rage Pro) are also based on these chips. Depending on the version of the OBP Mach64 cards destined for use in i386 machines also work in sun4u machines. The driver uses pixel mode with hardware acceleration as far as syscons(4) currently permits on sparc64 so text mode is already quite fast. The hardware cursor is used for the mouse pointer; for one because this is a "restriction" induced in syscons(4) on sparc64 by creator(4) and also because of issues with mapping the aperture when used as a low-level early during boot. Due to insufficiencies in the available documentation I didn't manage to get mode switch work properly (sync problems), yet. So for now this driver relies on the OBP having initialised a mode (as does creator(4)). On all of the tested machines is even true when using a serial console (and also not only when the OBP switched to a serial console because no keyboard is present). In general however the states the Mach64 chips are left in by the OBP vary a lot depending on the version of the OBP. This e.g. includes the aperture not being mapped in even when used as the console and the OBP just barfing when asked to map it. The latter is also the reason for the existence of this native driver in FreeBSD rather than taking an OFW frambuffer approach. Xorg is also happy to talk to these chips by mmap'ing them through this driver. For some hardware configs like on the Blade 100 a fix for the Xorg sparc64 MD bus code is however needed (added in version 6.8.2_2 of the xorg-server port). The video driver font loading and saving methods are not implemented, yet, as syscons(4) needs more work in that area to work viable on sparc64. With minor modifications machfb(4) would most likely also work on powerpc, when #ifdef'ing the OFW and possibly implementing mode setting probably also on the other archs. The latter is however not very practible at the moment as it would conflict with vga(4). Tested/developed with: Rage II+ add-on card on AX1105 and AXi board, AXe board (on-board Rage Pro) Additional testing by: marcel (Ultra 5 w/ on-board Rage Pro), scottl (Naturetech GENIALstation 777S w/ on-board Rage Mobility M1), Michiel Boland and Ilmar S. Habibulin (Blade 100 w/ on-board Rage XL)
* o creator(4):marius2005-05-212-166/+316
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Use register macros instead of magic values in the code. [1] - Check the return values of OF_getprop() and other stuff that actually can fail. - Let the unimplemented video driver methods return ENODEV rather than 0 so other code isn't tricked into thinking a certain operation was successfull. In case of e.g. the video driver creator_ioctl() this caused vidcontrol(1) to return random garbage information. Remove the TODO macros in the unimplemented video driver methods which did a printf("%s: unimplemented\n", __func__). Under certain circumstances these managed to invoke a printf() when a low-level console device wasn't attached, yet, causing a Fast Data Access MMU Miss. These macros were only really usefull for development anyway. - Set the struct video_adapter and struct video_info va_flags and vi_flags etc. as appropriate. - In creator_configure() don't rely on hitting the node which is the chosen console device first when searching the OFW tree for adapters compatible with this driver. Instead just check whether the chosen console device is a viable target for this driver. Targets that are not the console (including additional cards in multi-head configs) will be attached through creator_upa_attach(). I think this how the code in creator_configure() was actually meant to work. Honour the VIO_PROBE_ONLY flag and don't initialise and register the console device twice when creator_configure() is called a second time during sc_probe_unit(). Let creator_configure() return the number of the found adapters, i.e. 1 in case probing succeeds, as it's expected. The return values of video adapter configure functions however currently aren't checked so this doesn't make a difference at the moment. - In creator_upa_attach() don't rely on probing and attaching the adapter which is the console first, in case there are multiple adpaters and one of them is the console this could lead into using the video adapter unit 0 twice. - Make the check for DACs with inverted cursor control a bit more precise and actually honour that information when turning the cursor on or off. Add a helper function creator_cursor_enable() for this in order to keep code duplication low. [1] - Don't bother with faking a hardware cursor in case a device is the console. Apparently this was meant to start kernel output right after where the firmware left. In general this isn't worth the fuzz and also had no real effect as creator_set_mode() did clear the screen in any case, not just in case a device was not the console. - Implement creator_fill_rect() and use it to actually blank the display in creator_blank_display() when the mode is V_DISPLAY_BLANK, moving blanking the display out of creator_set_mode(). Use it also to implement creator_set_border() so the border can be re-drawn when switching to a VTY from X, exiting X, etc. (which leaves us with a black border most of the time). - Implement the video driver creator_ioctl(), moving the implementation of the IOCTL interface from the fbN CDEV version of creator_ioctl() into the video driver version and use the latter to implement the former. Use fb_commonioctl() to handle most of the FBIO IOCTLs. This gives programs like vidcontrol(1) which use the video driver creator_ioctl() a chance of working. Implement turning off the cursor via the FBIOSCURSOR IOCTL, which Xorg uses to in order to inform the OS that it's taking over the cursor. In creator_putm() check whether the cursor is enabled and (re-)install it if necessary, moving installing the cursor out of creator_init() and into a helper function creator_cursor_install(). This fixes the missing mouse pointer when switching to a VTY from X, exiting X, etc. - Some clean-up (remove unused/useless code, etc.). o sparc64/creator/creator_upa.c / sparc64/sparc64/sc_machdep.c: - Attach syscons(4) as an own pseudo-device on the nexus rather than directly in creator_upa_attach(), similiar to attaching syscons(4) as a pseudo-device on isa(4) on other archs. This makes it a whole lot easier to do the right thing in multi-head configs, especially with different types of graphics adapters. [2] - Set SC_AUTODETECT_KBD by default so USB keyboards work out of the box. [2] Based on/obtained from: Xorg 'ffb' driver [1] Based on/obtained from: FreeBSD/powerpc [2]
* - Remove duplicate FBSDID.marius2005-05-213-13/+3
| | | | - Start copyright comments with /*- where missing.
* check copyin return values when loading palletesam2005-03-261-4/+7
| | | | Noticed by: Coverity Prevent analysis tool
* Use BUS_PROBE_DEFAULT for pci probe return valueimp2005-03-051-1/+1
|
* Save and restore the VGA state across a suspend-resume cycle. Thisiedowse2005-02-281-0/+1
| | | | | | | | is particularly useful when VESA is available (either `options VESA' or load the vesa module), as BIOSes in some notebooks may correctly save and restore LCD panel settings using VESA in cases where calling the video BIOS POST is not effective. On some systems it may also be necessary to set the hw.acpi.reset_video sysctl to 0.
* Start each of the license/copyright comments with /*-, minor shuffle of linesimp2005-01-064-4/+4
|
* Fixed compilation warnings with option VGA_NO_MODE_CHANGE.ru2004-12-151-1/+3
| | | | PR: kern/71130
* Converge towards i386. I originally resisted creating <machine/pc/bios.h>peter2004-09-241-5/+1
| | | | | | | | | | | | because it was mostly irrelevant - except for the silly BIOS_PADDRTOVADDR etc macros. Along the way of working around this, I missed a few things. * Make syscons properly inherit the bios capslock/shiftlock/etc state like i386 does. Note that we cannot inherit the bios key repeat rate because that requires a bios call (which is impossible for us). * Give syscons the ability to beep on amd64. Oops. While here, make bios.c compile and add it to files.amd64.
* While we're revisiting old sins, try to clean up the code a little anddes2004-08-061-168/+176
| | | | make it more style(9)ish.
* Do a pass over all modules in the kernel and make them return EOPNOTSUPPphk2004-07-152-0/+4
| | | | | | | | for unknown events. A number of modules return EINVAL in this instance, and I have left those alone for now and instead taught MOD_QUIESCE to accept this as "didn't do anything".
* - Add missing <sys/module.h>. [1]marius2004-07-091-6/+2
| | | | | | | - Remove unused includes. - Sort includes. Reported by: Pyun YongHyeon <yongari@kt-is.co.kr> [1]
* Do the dreaded s/dev_t/struct cdev */phk2004-06-164-14/+14
| | | | Bump __FreeBSD_version accordingly.
* Remove atdevbase and replace it's remaining uses with direct references tojhb2004-06-101-1/+1
| | | | KERNBASE instead.
* Add missing <sys/module.h> includes currently relying on nested includephk2004-06-031-0/+1
| | | | in <sys/kernel.h>
* add missing #include <sys/module.h>phk2004-05-302-0/+2
|
* Add missing <sys/module.h> includesphk2004-05-301-0/+1
|
* Remove advertising clause from University of California Regent'simp2004-04-072-8/+0
| | | | | | | license, per letter dated July 22, 1999 and email from Peter Wemm, Alan Cox and Robert Watson. Approved by: core, peter, alc, rwatson
* - Use an ihandle_t to store the stdout instance handle instead of atmm2004-04-041-2/+2
| | | | | | | | | | | | phandle_t. Since both are typedefed to unsigned int, this is more or less cosmetic. - Fix the code that determines whether a creator instance was used for firmware output (and should not be blanked on initialization). Since r1.2 of dev/fb/creator.c, this consisted comparing a handle of an instance of a package with a handle of the package itself. Use the test from r1.1, which utilizes OF_instance_to_package(). Submitted by: Marius Strobl <marius@alchemy.franken.de>
* Correct a potential panic condition that could be caused when getting ornectar2004-04-031-2/+4
| | | | | | | setting the VGA palette. Reported by: Christer Öberg <christer.oberg@texonet.com> Reviewed by: bde
* Convert callers to the new bus_alloc_resource_any(9) API.njl2004-03-171-2/+2
| | | | | Submitted by: Mark Santcroos <marks@ripe.net> Reviewed by: imp, dfr, bde
* Device megapatch 4/6:phk2004-02-211-0/+2
| | | | | | | | Introduce d_version field in struct cdevsw, this must always be initialized to D_VERSION. Flip sense of D_NOGIANT flag to D_NEEDGIANT, this involves removing four D_NOGIANT flags and adding 145 D_NEEDGIANT flags.
* Device megapatch 1/6:phk2004-02-211-2/+0
| | | | | | | Free approx 86 major numbers with a mostly automatically generated patch. A number of strategic drivers have been left behind by caution, and a few because they still (ab)use their major number.
* __powerpc__ conditional code for the syscons OpenFirmware/PPC framebuffer.grehan2004-01-211-1/+17
| | | | | | | | | | | | Took the opportunity to reduce __i386__ || __ia64__ || __amd64__ || __sparc64__ || __powerpc__ to !__alpha__ reviewed by: gallatin
* Don't confuse NULL with 0.obrien2004-01-021-3/+3
|
* Fix a typo. Allow for the creator not being stdout.jake2003-11-111-9/+8
|
* Change fb_attach() and fb_detach() to take a integer unit number ratherphk2003-09-262-83/+5
| | | | | | than a dev_t. All of the dev_t's passed were bogusly created with makedev()
* Use __FBSDID().obrien2003-08-247-7/+21
| | | | Also some minor style cleanups.
* Changed ??? to foo in dead code since ??? screws up my editor.jake2003-08-241-1/+1
|
* Add a driver for creator upa frame buffers found in many sparc64 machines.jake2003-08-244-0/+13197
| | | | | | | | | | These are fixed resolution and operate only in pixel mode so they present a challenge to syscons (square peg, round hole, etc, etc). The driver provides a video driver interface for syscons and a separate character device for X to mmap. Wherever possible the creator's accelarated graphics functions are used so text mode is very fast. Based roughly on the openbsd driver.
* o Explicitly cast the second argument to bus_space_set_region_#()marcel2003-08-231-9/+8
| | | | | | | | | | | to intptr_t. This fixes a compiler warning (integer from pointer without cast) in scvgarndr.c when SC_PIXEL_MODE is defined. o Define readb() and writeb(). Both are used in scvgarndr.c when, guess what, SC_PIXEL_MODE is defined. Both changes are ia64 specific. Found by: LINT
* Prefer new location of pci include files (which have only been in theimp2003-08-224-8/+8
| | | | | tree for two or more years now), except in a few places where there's code to be compatible with older versions of FreeBSD.
* Low risk amd64 fix. Use a vm_offset_t for the virtual location of thepeter2003-05-231-2/+2
| | | | | | | buffer space instead of a u_int32_t. Otherwise the upper 32 bits of the address space get truncated and syscons blows up. Approved by: re (safe, low risk amd64 fixes)
* Unbreak alpha and ia64 builds. The previous change made the inclusionmarcel2003-05-021-1/+6
| | | | | | | | | | of <machine/pc/bios.h> specific to i386 and added a conditional define for BIOS_PADDRTOVADDR that depends on ISA_HOLE_START. The latter is undefined on alpha and ia64. Since the former is defined the same on both alpha and ia64, assume the ISA_HOLE_START dependent definition is specific to amd64 and use the identity-mapping in all other cases. This of course is getting uglier every day...
OpenPOWER on IntegriCloud