linux/drivers/video
Antonino A. Daplas 50ec42edd9 [PATCH] Detaching fbcon: fix vgacon to allow retaking of the console
One of the limitations of the framebuffer console system is its inablity to
unload or detach itself from the console layer.  And once it loads, it also
locks in framebuffer drivers preventing their unload. Although the con2fbmap
utility does provide a means to unload individual drivers, it requires that at
least one framebuffer driver is loaded for use by fbcon.

With this change, it is possible to detach fbcon from the console layer. If it
is detached, it will reattach the boot console driver (which is permanently
loaded) back to the console layer so the system can continue to work.  As a
consequence, fbcon will also decrement its reference count of individual
framebuffer drivers, allowing all of these drivers to be unloaded even if
fbcon is still loaded.

Unless you use drivers that restores the display to text mode (rivafb and
i810fb, for example), detaching fbcon does require assistance from userspace
tools (ie, vbetools) for text mode to be restored completely.  Without the
help of these tools, fbcon will leave the VGA console corrupted. The methods
that can be used will be described in Documentation/fb/fbcon.txt.

Because the vt layer also increments the module reference count for each
console driver, fbcon cannot be directly unloaded.  It must be detached first
prior to unload.

Similarly, fbcon can be reattached to the console layer without having to
reload the module.  A nice feature if fbcon is compiled statically.

Attaching and detaching fbcon is done via sysfs attributes. A class device
entry for fbcon is created in /sys/class/graphics. The two attributes that
controls this feature are detach and attach. Two other attributes that are
piggybacked under /sys/class/graphics/fb[n] that are fbcon-specific,
'con_rotate' and 'con_rotate_all' are moved to fbcon.  They are renamed as
'rotate' and 'rotate_all' respectively.

Overall, this feature is a great help for developers working in the
framebuffer or console layer.  There is not need to continually reboot the
kernel for every small change. It is also useful for regular users who wants
to choose between a graphical console or a text console without having to
reboot.

Example usage for x86:

/* start in text mode */
modprobe xxxfb
modprobe fbcon
/* graphical mode with fbcon using xxxfb */
echo 1 > /sys/class/graphics/fbcon/detach
/* back to text mode, will produce corrupt display unless vbetool is used */
rmmod xxxfb
modprobe yyyfb
/* back to graphical mode with fbcon using yyyfb */

Before trying out this feature, please read Documentation/fb/fbcon.txt.

This patch:

In order for fbcon to detach itself from the console layer, vgacon, which is a
boot console driver, must be fixed so it can retake the console multiple
times, not just during init.  The following needs to be done:

- remove __init from the vgacon_startup, this is called again by
  take_over_console().

- vc->rows and vc->cols are set manually by vgacon during init. After init,
  vc_resize() can be used

- make sure the scrollback_buffer is not reallocated

Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-06-26 09:58:32 -07:00
..
aty [PATCH] atyfb: Fix section warnings 2006-06-26 09:58:31 -07:00
backlight [PATCH] backlight: Fix Kconfig dependency 2006-06-26 09:58:31 -07:00
console [PATCH] Detaching fbcon: fix vgacon to allow retaking of the console 2006-06-26 09:58:32 -07:00
geode [PATCH] fbdev: framebuffer driver for Geode GX 2006-03-27 08:44:55 -08:00
i810 [PATCH] i810 section fix 2006-05-21 12:59:22 -07:00
intelfb intelfb delousing 2006-06-24 17:22:17 +10:00
kyro [PATCH] kyrofb: Fix uninitialized value 2006-03-11 09:19:35 -08:00
logo kbuild: drivers/video/logo/ - fix ident glitch 2006-04-30 23:59:16 +02:00
matrox V4L/DVB (4210a): git-dvb versus matroxfb 2006-06-25 02:05:25 -03:00
nvidia [PATCH] nvidiafb: Add support for Geforce 6100 and related chipsets 2006-06-26 09:58:30 -07:00
riva [PATCH] Rewritten backlight infrastructure for portable Apple computers 2006-06-25 10:00:59 -07:00
savage [PATCH] savagefb: Whitespace cleanup 2006-06-26 09:58:30 -07:00
sis [PATCH] fbdev: cleanup the CONFIG_VIDEO_SELECT mess 2006-06-26 09:58:28 -07:00
68328fb.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
acornfb.c [PATCH] drivers/video: Use ARRAY_SIZE macro 2006-03-27 08:44:58 -08:00
acornfb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
amba-clcd.c [ARM] amba-clcd: Allow RGB555 and RGB565 with 16bpp 2006-01-26 14:12:06 +00:00
amifb.c [PATCH] fbdev: Sanitize ->fb_ioctl prototype 2006-01-14 18:27:14 -08:00
arcfb.c [PATCH] arcfb: Fix dereference before NULL check 2006-03-11 09:19:35 -08:00
asiliantfb.c [PATCH] drivers/video: Use ARRAY_SIZE macro 2006-03-27 08:44:58 -08:00
atafb.c [PATCH] fbdev: Sanitize ->fb_ioctl prototype 2006-01-14 18:27:14 -08:00
au1100fb.c [PATCH] au1100fb: add power management support 2006-06-26 09:58:31 -07:00
au1100fb.h Au1100 FB driver uplift for 2.6. 2005-10-29 19:31:01 +01:00
au1200fb.c [PATCH] au1200fb: Remove accidentally duplicated content of au1200fb.c 2006-04-29 17:05:11 -07:00
au1200fb.h [PATCH] au1200fb: Alchemy Au1200 framebuffer driver 2006-03-27 08:44:55 -08:00
bt431.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bt455.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bw2.c BUG_ON() Conversion in drivers/video/ 2006-03-24 18:53:18 +01:00
c2p.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
c2p.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cfbcopyarea.c [PATCH] fbdev: Fix incorrect unaligned access in little-endian machines 2005-12-12 22:31:17 -08:00
cfbfillrect.c [PATCH] fbdev: Fix incorrect unaligned access in little-endian machines 2005-12-12 22:31:17 -08:00
cfbimgblt.c [PATCH] fbdev: Coverity Bug 85 2006-06-26 09:58:30 -07:00
cg3.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
cg6.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
cg14.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
chipsfb.c [PATCH] Rewritten backlight infrastructure for portable Apple computers 2006-06-25 10:00:59 -07:00
cirrusfb.c [PATCH] powerpc: Kill _machine and hard-coded platform numbers 2006-03-28 23:15:54 +11:00
clps711xfb.c [PATCH] fbcon/fbdev: Move softcursor out of fbdev to fbcon 2005-11-07 07:53:50 -08:00
controlfb.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
controlfb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cyber2000fb.c [ARM] Remove asm/irq.h includes from ARM drivers 2006-01-09 13:56:42 +00:00
cyber2000fb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cyberfb.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cyberfb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cyblafb.c [PATCH] PCI: cyblafb: remove pci_module_init() return, really. 2006-01-31 18:00:13 -08:00
dnfb.c [DRIVER MODEL] Convert platform drivers to use struct platform_driver 2005-11-09 22:32:44 +00:00
edid.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
epson1355fb.c [PATCH] epson1355fb: Update platform code 2006-06-26 09:58:29 -07:00
fbcmap.c [PATCH] framebuffer: cmap-setting return values 2006-03-27 08:44:56 -08:00
fbcvt.c [PATCH] fbdev: Remove unused exports 2006-06-26 09:58:31 -07:00
fbmem.c [PATCH] fbdev: Fix logo rotation if width != height 2006-06-26 09:58:31 -07:00
fbmon.c [PATCH] fbdev: Firmware EDID fixes 2006-06-26 09:58:30 -07:00
fbsysfs.c [PATCH] fbdev: tag by scantype in sysfs 2006-06-26 09:58:32 -07:00
ffb.c BUG_ON() Conversion in drivers/video/ 2006-03-24 18:53:18 +01:00
fm2fb.c [PATCH] fbcon/fbdev: Move softcursor out of fbdev to fbcon 2005-11-07 07:53:50 -08:00
g364fb.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
gbefb.c [PATCH] gbefb: IP32 gbefb depth change fix 2006-02-24 14:31:38 -08:00
hgafb.c [PATCH] fbdev: hgafb: Convert to platform device 2006-01-10 08:01:45 -08:00
hitfb.c [PATCH] fbcon/fbdev: Move softcursor out of fbdev to fbcon 2005-11-07 07:53:50 -08:00
hpfb.c [PATCH] hp300: fix driver_register() return handling, remove dio_module_init() 2006-03-25 08:22:53 -08:00
igafb.c [PATCH] mm: remove VM_LOCKED before remap_pfn_range and drop VM_SHM 2006-06-25 10:00:55 -07:00
imacfb.c [PATCH] imacfb: Add Intel-based Macintosh Framebuffer Support 2006-06-26 09:58:32 -07:00
imsttfb.c [PATCH] drivers/video: Use ARRAY_SIZE macro 2006-03-27 08:44:58 -08:00
imxfb.c [ARM] 3232/1: i.MX Frame Buffer undeclared "dev" variable fix 2006-01-07 10:44:32 +00:00
imxfb.h [PATCH] ARM: 2687/1: i.MX framebuffer: make dmacr register platform configurable 2005-07-17 20:15:36 +01:00
Kconfig [PATCH] imacfb: Add Intel-based Macintosh Framebuffer Support 2006-06-26 09:58:32 -07:00
leo.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
macfb.c [PATCH] m68k: fix macfb init 2006-01-12 09:09:05 -08:00
macmodes.c [PATCH] macmodes: Fix section warning 2006-06-26 09:58:31 -07:00
macmodes.h [PATCH] macmodes: Fix section warning 2006-06-26 09:58:31 -07:00
Makefile [PATCH] imacfb: Add Intel-based Macintosh Framebuffer Support 2006-06-26 09:58:32 -07:00
maxinefb.c [PATCH] maxinefb: Fix compilation error 2006-05-31 16:27:11 -07:00
modedb.c [PATCH] fbdev: Remove unused exports 2006-06-26 09:58:31 -07:00
neofb.c [PATCH] neofb: fix unblank logic interfering with lid toggled backlight 2006-06-26 09:58:31 -07:00
offb.c [PATCH] powerpc: Remove device_node addrs/n_addr 2006-01-09 14:53:55 +11:00
p9100.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
platinumfb.c [PATCH] powerpc: Remove device_node addrs/n_addr 2006-01-09 14:53:55 +11:00
platinumfb.h [PATCH] powerpc: Fix platinumfb for some modes 2006-01-09 14:53:51 +11:00
pm2fb.c [PATCH] fix section mismatch in pm2fb.o 2006-04-20 07:54:03 -07:00
pm3fb.c [PATCH] Remove MODULE_PARM 2006-03-25 08:22:52 -08:00
pmag-aa-fb.c [PATCH] fbdev: Sanitize ->fb_ioctl prototype 2006-01-14 18:27:14 -08:00
pmag-ba-fb.c [PATCH] remove bogus asm/bug.h includes. 2006-02-07 20:56:35 -05:00
pmagb-b-fb.c [PATCH] drivers/video: Use ARRAY_SIZE macro 2006-03-27 08:44:58 -08:00
pvr2fb.c [PATCH] fbcon/fbdev: Move softcursor out of fbdev to fbcon 2005-11-07 07:53:50 -08:00
pxafb.c [PATCH] pxafb: Minor driver fixes 2006-03-31 12:19:00 -08:00
pxafb.h [ARM] pxafb: Remove #if DEBUG, convert DPRINTK to pr_debug 2005-09-29 09:44:54 +01:00
q40fb.c [DRIVER MODEL] Convert platform drivers to use struct platform_driver 2005-11-09 22:32:44 +00:00
retz3fb.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
retz3fb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
s1d13xxxfb.c [PATCH] s1d13xxxfb: Fix resource leak 2006-03-11 09:19:35 -08:00
s3c2410fb.c [PATCH] s3c2410fb: Fix resume 2006-06-26 09:58:31 -07:00
s3c2410fb.h [PATCH] s3c2410fb: ARM S3C2410 framebuffer driver 2005-09-09 14:03:42 -07:00
S3triofb.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sa1100fb.c [PATCH] handle errors returned by platform_get_irq*() 2006-03-20 13:42:57 -08:00
sa1100fb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sbuslib.c [SPARC]: Respect vm_page_prot in io_remap_page_range(). 2006-03-22 01:15:13 -08:00
sbuslib.h [SPARC]: Fix sbusfb build. 2006-01-17 15:53:11 -08:00
sgivwfb.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
skeletonfb.c [PATCH] skeletonfb: remove duplicate module init, exit, license lines 2006-06-26 09:58:31 -07:00
sstfb.c [PATCH] drivers/video: Use ARRAY_SIZE macro 2006-03-27 08:44:58 -08:00
sticore.h [PARISC] Fix stifb with IOREMAP and a 64-bit kernel 2006-03-30 17:48:47 +00:00
stifb.c [PATCH] Don't pass boot parameters to argv_init[] 2006-03-31 12:18:53 -08:00
sun3fb.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
tcx.c [PATCH] fbdev: Sanitize ->fb_mmap prototype 2006-01-14 18:27:15 -08:00
tdfxfb.c [PATCH] tdfxfb: Fix buffer overrun 2006-03-11 09:19:36 -08:00
tgafb.c [PATCH] fbdev: Remove duplicate #include's 2006-06-26 09:58:28 -07:00
tridentfb.c [PATCH] trident fb section fixes 2006-06-25 10:01:15 -07:00
tx3912fb.c [PATCH] fbcon/fbdev: Move softcursor out of fbdev to fbcon 2005-11-07 07:53:50 -08:00
valkyriefb.c [PATCH] powerpc: Remove device_node addrs/n_addr 2006-01-09 14:53:55 +11:00
valkyriefb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
vesafb.c [PATCH] vesafb: Prefer VGA registers over PMI 2006-06-26 09:58:30 -07:00
vfb.c [PATCH] vfb: Update platform code 2006-06-26 09:58:29 -07:00
vga16fb.c [PATCH] vga16fb: Update platform code 2006-06-26 09:58:29 -07:00
vgastate.c [PATCH] fbdev: Replace kmalloc with kzalloc 2006-01-10 08:01:51 -08:00
virgefb.c [PATCH] drivers/video: Use ARRAY_SIZE macro 2006-03-27 08:44:58 -08:00
virgefb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
w100fb.c [PATCH] w100fb: Add acceleration support to ATI Imageon 2006-03-31 12:19:00 -08:00
w100fb.h [PATCH] w100fb: Add acceleration support to ATI Imageon 2006-03-31 12:19:00 -08:00