svn commit: r263817 - in stable/9: sys/conf sys/dev/drm2 sys/dev/drm2/i915 sys/dev/drm2/radeon sys/dev/fb sys/dev/syscons sys/dev/vt sys/dev/vt/font sys/dev/vt/hw/fb sys/dev/vt/hw/ofwfb sys/dev/vt/...
Aleksandr Rybalko
ray at FreeBSD.org
Thu Mar 27 15:58:24 UTC 2014
Author: ray
Date: Thu Mar 27 15:58:18 2014
New Revision: 263817
URL: http://svnweb.freebsd.org/changeset/base/263817
Log:
MFC 219886, 226100, 226111, 226341, 242529, 259015, 259016, 259019, 259049,
259071, 259102, 259110, 259129, 259130, 259178, 259179, 259203, 259221,
259261, 259532, 259615, 259650, 259651, 259667, 259680, 259727, 259761,
259772, 259776, 259777, 259830, 259882, 259915, 260160, 260449, 260450,
260688, 260888, 260953, 261269, 261547, 261551, 261552, 261553, 261585
o Merge vt(4) virtual terminal (a.k.a. newcons) to stable/9.
o Merge teken updates.
o Add few more tty methods required by vt(4).
o Update syscons(4) to work with fresh teken.
Sponsored by: The FreeBSD Foundation
Added:
stable/9/sys/dev/fb/fb_if.m
- copied unchanged from r259016, head/sys/dev/fb/fb_if.m
stable/9/sys/dev/fb/fbd.c
- copied, changed from r259016, head/sys/dev/fb/fbd.c
stable/9/sys/dev/vt/
- copied from r259016, head/sys/dev/vt/
stable/9/sys/kern/subr_terminal.c
- copied, changed from r259016, head/sys/kern/subr_terminal.c
stable/9/sys/sys/terminal.h
- copied, changed from r259016, head/sys/sys/terminal.h
stable/9/tools/tools/vt/
- copied from r259019, head/tools/tools/vt/
Modified:
stable/9/sys/conf/files
stable/9/sys/conf/files.amd64
stable/9/sys/conf/files.arm
stable/9/sys/conf/files.i386
stable/9/sys/conf/files.powerpc
stable/9/sys/conf/files.sparc64
stable/9/sys/conf/kmod.mk
stable/9/sys/conf/options
stable/9/sys/dev/drm2/drmP.h
stable/9/sys/dev/drm2/drm_fb_helper.c
stable/9/sys/dev/drm2/drm_os_freebsd.h
stable/9/sys/dev/drm2/i915/i915_drv.c
stable/9/sys/dev/drm2/i915/intel_fb.c
stable/9/sys/dev/drm2/radeon/radeon.h
stable/9/sys/dev/drm2/radeon/radeon_drv.c
stable/9/sys/dev/drm2/radeon/radeon_fb.c
stable/9/sys/dev/drm2/radeon/radeon_pm.c
stable/9/sys/dev/syscons/scterm-teken.c
stable/9/sys/dev/syscons/scvidctl.c
stable/9/sys/dev/vt/font/vt_font_default.c
stable/9/sys/dev/vt/font/vt_mouse_cursor.c
stable/9/sys/dev/vt/hw/fb/vt_fb.c
stable/9/sys/dev/vt/hw/ofwfb/ofwfb.c (contents, props changed)
stable/9/sys/dev/vt/hw/vga/vga.c
stable/9/sys/dev/vt/hw/xboxfb/xboxfb.c
stable/9/sys/dev/vt/vt.h
stable/9/sys/dev/vt/vt_buf.c
stable/9/sys/dev/vt/vt_consolectl.c
stable/9/sys/dev/vt/vt_core.c
stable/9/sys/dev/vt/vt_font.c
stable/9/sys/dev/vt/vt_sysmouse.c
stable/9/sys/kern/tty.c
stable/9/sys/modules/drm2/drm2/Makefile
stable/9/sys/modules/drm2/i915kms/Makefile
stable/9/sys/modules/drm2/radeonkms/Makefile
stable/9/sys/sparc64/sparc64/machdep.c
stable/9/sys/sys/consio.h
stable/9/sys/sys/eventhandler.h
stable/9/sys/sys/fbio.h
stable/9/sys/sys/tty.h
stable/9/sys/teken/demo/Makefile
stable/9/sys/teken/demo/teken_demo.c
stable/9/sys/teken/libteken/Symbol.map
stable/9/sys/teken/stress/teken_stress.c
stable/9/sys/teken/teken.c
stable/9/sys/teken/teken.h
stable/9/sys/teken/teken_subr.h
stable/9/tools/tools/vt/mkkfont/mkkfont.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/conf/ (props changed)
stable/9/sys/dev/ (props changed)
stable/9/sys/modules/ (props changed)
stable/9/sys/sys/ (props changed)
stable/9/tools/tools/ (props changed)
Modified: stable/9/sys/conf/files
==============================================================================
--- stable/9/sys/conf/files Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/conf/files Thu Mar 27 15:58:18 2014 (r263817)
@@ -87,7 +87,7 @@ pccarddevs.h standard \
compile-with "${AWK} -f $S/tools/pccarddevs2h.awk $S/dev/pccard/pccarddevs" \
no-obj no-implicit-rule before-depend \
clean "pccarddevs.h"
-teken_state.h optional sc \
+teken_state.h optional sc | vt \
dependency "$S/teken/gensequences $S/teken/sequences" \
compile-with "${AWK} -f $S/teken/gensequences $S/teken/sequences > teken_state.h" \
no-obj no-implicit-rule before-depend \
@@ -1143,7 +1143,9 @@ dev/ex/if_ex_isa.c optional ex isa
dev/ex/if_ex_pccard.c optional ex pccard
dev/exca/exca.c optional cbb
dev/fatm/if_fatm.c optional fatm pci
-dev/fb/splash.c optional splash
+dev/fb/fbd.c optional fbd | vt
+dev/fb/fb_if.m standard
+dev/fb/splash.c optional sc splash
dev/fdt/fdt_common.c optional fdt
dev/fdt/fdt_pci.c optional fdt pci
dev/fdt/fdt_static_dtb.S optional fdt fdt_dtb_static
@@ -2122,6 +2124,17 @@ dev/utopia/utopia.c optional utopia
dev/vge/if_vge.c optional vge
dev/vkbd/vkbd.c optional vkbd
dev/vr/if_vr.c optional vr pci
+dev/vt/colors/vt_termcolors.c optional vt
+dev/vt/font/vt_font_default.c optional vt
+dev/vt/font/vt_mouse_cursor.c optional vt
+dev/vt/hw/fb/vt_fb.c optional vt
+dev/vt/hw/vga/vga.c optional vt vt_vga
+dev/vt/logo/logo_freebsd.c optional vt splash
+dev/vt/vt_buf.c optional vt
+dev/vt/vt_consolectl.c optional vt
+dev/vt/vt_core.c optional vt
+dev/vt/vt_font.c optional vt
+dev/vt/vt_sysmouse.c optional vt
dev/vte/if_vte.c optional vte pci
dev/vx/if_vx.c optional vx
dev/vx/if_vx_eisa.c optional vx eisa
@@ -2543,6 +2556,7 @@ kern/subr_sleepqueue.c standard
kern/subr_smp.c standard
kern/subr_stack.c optional ddb | stack | ktr
kern/subr_taskqueue.c standard
+kern/subr_terminal.c optional vt
kern/subr_trap.c standard
kern/subr_turnstile.c standard
kern/subr_uio.c standard
@@ -3431,7 +3445,7 @@ security/mac_portacl/mac_portacl.c optio
security/mac_seeotheruids/mac_seeotheruids.c optional mac_seeotheruids
security/mac_stub/mac_stub.c optional mac_stub
security/mac_test/mac_test.c optional mac_test
-teken/teken.c optional sc
+teken/teken.c optional sc | vt
ufs/ffs/ffs_alloc.c optional ffs
ufs/ffs/ffs_balloc.c optional ffs
ufs/ffs/ffs_inode.c optional ffs
Modified: stable/9/sys/conf/files.amd64
==============================================================================
--- stable/9/sys/conf/files.amd64 Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/conf/files.amd64 Thu Mar 27 15:58:18 2014 (r263817)
@@ -227,7 +227,7 @@ dev/hwpmc/hwpmc_uncore.c optional hwpmc
dev/hwpmc/hwpmc_piv.c optional hwpmc
dev/hwpmc/hwpmc_tsc.c optional hwpmc
dev/hwpmc/hwpmc_x86.c optional hwpmc
-dev/kbd/kbd.c optional atkbd | sc | ukbd
+dev/kbd/kbd.c optional atkbd | sc | ukbd | vt
dev/lindev/full.c optional lindev
dev/lindev/lindev.c optional lindev
dev/nfe/if_nfe.c optional nfe pci
Modified: stable/9/sys/conf/files.arm
==============================================================================
--- stable/9/sys/conf/files.arm Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/conf/files.arm Thu Mar 27 15:58:18 2014 (r263817)
@@ -58,6 +58,7 @@ geom/geom_bsd.c optional geom_bsd
geom/geom_bsd_enc.c optional geom_bsd
geom/geom_mbr.c optional geom_mbr
geom/geom_mbr_enc.c optional geom_mbr
+dev/kbd/kbd.c optional sc | vt
libkern/arm/divsi3.S standard
libkern/arm/ffs.S standard
libkern/arm/muldi3.c standard
Modified: stable/9/sys/conf/files.i386
==============================================================================
--- stable/9/sys/conf/files.i386 Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/conf/files.i386 Thu Mar 27 15:58:18 2014 (r263817)
@@ -232,7 +232,7 @@ dev/ipmi/ipmi_smbios.c optional ipmi
dev/ipmi/ipmi_ssif.c optional ipmi smbus
dev/ipmi/ipmi_pci.c optional ipmi pci
dev/ipmi/ipmi_linux.c optional ipmi compat_linux
-dev/kbd/kbd.c optional atkbd | sc | ukbd
+dev/kbd/kbd.c optional atkbd | sc | ukbd | vt
dev/le/if_le_isa.c optional le isa
dev/lindev/full.c optional lindev
dev/lindev/lindev.c optional lindev
@@ -275,6 +275,7 @@ dev/uart/uart_cpu_i386.c optional uart
dev/viawd/viawd.c optional viawd
dev/acpica/acpi_if.m standard
dev/acpi_support/acpi_wmi_if.m standard
+dev/vt/hw/xboxfb/xboxfb.c optional vt_xboxfb
dev/wbwd/wbwd.c optional wbwd
dev/wpi/if_wpi.c optional wpi
dev/isci/isci.c optional isci
Modified: stable/9/sys/conf/files.powerpc
==============================================================================
--- stable/9/sys/conf/files.powerpc Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/conf/files.powerpc Thu Mar 27 15:58:18 2014 (r263817)
@@ -31,7 +31,7 @@ dev/hwpmc/hwpmc_powerpc.c optional hwpmc
dev/iicbus/ad7417.c optional ad7417 powermac
dev/iicbus/ds1775.c optional ds1775 powermac
dev/iicbus/max6690.c optional max6690 powermac
-dev/kbd/kbd.c optional sc
+dev/kbd/kbd.c optional sc | vt
dev/ofw/openfirm.c optional aim | fdt
dev/ofw/openfirmio.c optional aim | fdt
dev/ofw/ofw_bus_if.m optional aim | fdt
@@ -57,6 +57,7 @@ dev/syscons/scvtb.c optional sc
dev/tsec/if_tsec.c optional tsec
dev/tsec/if_tsec_fdt.c optional tsec fdt
dev/uart/uart_cpu_powerpc.c optional uart aim
+dev/vt/hw/ofwfb/ofwfb.c optional vt aim
kern/kern_clocksource.c standard
kern/subr_dummy_vdso_tc.c standard
kern/syscalls.c optional ktr
Modified: stable/9/sys/conf/files.sparc64
==============================================================================
--- stable/9/sys/conf/files.sparc64 Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/conf/files.sparc64 Thu Mar 27 15:58:18 2014 (r263817)
@@ -38,7 +38,7 @@ dev/fb/fb.c optional sc
dev/fb/gallant12x22.c optional sc
dev/fb/machfb.c optional machfb sc
dev/hwpmc/hwpmc_sparc64.c optional hwpmc
-dev/kbd/kbd.c optional atkbd | sc | ukbd
+dev/kbd/kbd.c optional atkbd | sc | ukbd | vt
dev/le/if_le_lebuffer.c optional le sbus
dev/le/if_le_ledma.c optional le sbus
dev/le/lebuffer_sbus.c optional le sbus
@@ -58,7 +58,8 @@ dev/syscons/scgfbrndr.c optional sc
dev/syscons/scterm-teken.c optional sc
dev/syscons/scvtb.c optional sc
dev/uart/uart_cpu_sparc64.c optional uart
-dev/uart/uart_kbd_sun.c optional uart sc
+dev/uart/uart_kbd_sun.c optional uart sc | vt
+dev/vt/hw/ofwfb/ofwfb.c optional vt
kern/kern_clocksource.c standard
kern/subr_dummy_vdso_tc.c standard
kern/syscalls.c optional ktr
Modified: stable/9/sys/conf/kmod.mk
==============================================================================
--- stable/9/sys/conf/kmod.mk Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/conf/kmod.mk Thu Mar 27 15:58:18 2014 (r263817)
@@ -346,6 +346,7 @@ CFLAGS+= ${CONF_CFLAGS}
MFILES?= dev/acpica/acpi_if.m dev/acpi_support/acpi_wmi_if.m \
dev/agp/agp_if.m dev/ata/ata_if.m dev/eisa/eisa_if.m \
+ dev/fb/fb_if.m \
dev/iicbus/iicbb_if.m dev/iicbus/iicbus_if.m \
dev/mmc/mmcbr_if.m dev/mmc/mmcbus_if.m \
dev/mii/miibus_if.m dev/mvs/mvs_if.m dev/ofw/ofw_bus_if.m \
Modified: stable/9/sys/conf/options
==============================================================================
--- stable/9/sys/conf/options Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/conf/options Thu Mar 27 15:58:18 2014 (r263817)
@@ -730,8 +730,10 @@ SAFE_DEBUG opt_safe.h
SAFE_NO_RNG opt_safe.h
SAFE_RNDTEST opt_safe.h
-# syscons options
+# syscons/vt options
MAXCONS opt_syscons.h
+VT_FB_DEFAULT_WIDTH opt_syscons.h
+VT_FB_DEFAULT_HEIGHT opt_syscons.h
SC_ALT_MOUSE_IMAGE opt_syscons.h
SC_CUT_SPACES2TABS opt_syscons.h
SC_CUT_SEPCHARS opt_syscons.h
@@ -754,6 +756,9 @@ SC_NORM_REV_ATTR opt_syscons.h
SC_PIXEL_MODE opt_syscons.h
SC_RENDER_DEBUG opt_syscons.h
SC_TWOBUTTON_MOUSE opt_syscons.h
+DEV_SC opt_syscons.h
+DEV_VT opt_syscons.h
+
# teken terminal emulator options
TEKEN_CONS25 opt_teken.h
Modified: stable/9/sys/dev/drm2/drmP.h
==============================================================================
--- stable/9/sys/dev/drm2/drmP.h Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/drmP.h Thu Mar 27 15:58:18 2014 (r263817)
@@ -112,6 +112,7 @@ struct drm_device;
#include "opt_compat.h"
#include "opt_drm.h"
+#include "opt_syscons.h"
#ifdef DRM_DEBUG
#undef DRM_DEBUG
#define DRM_DEBUG_DEFAULT_ON 1
Modified: stable/9/sys/dev/drm2/drm_fb_helper.c
==============================================================================
--- stable/9/sys/dev/drm2/drm_fb_helper.c Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/drm_fb_helper.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -36,6 +36,41 @@ __FBSDID("$FreeBSD$");
#include <dev/drm2/drm_fb_helper.h>
#include <dev/drm2/drm_crtc_helper.h>
+#if defined(__FreeBSD__)
+struct vt_kms_softc {
+ struct drm_fb_helper *fb_helper;
+ struct task fb_mode_task;
+};
+
+static fb_enter_t vt_kms_postswitch;
+static void vt_restore_fbdev_mode(void *, int);
+
+/* Call restore out of vt(9) locks. */
+static void
+vt_restore_fbdev_mode(void *arg, int pending)
+{
+ struct drm_fb_helper *fb_helper;
+ struct vt_kms_softc *sc;
+
+ sc = (struct vt_kms_softc *)arg;
+ fb_helper = sc->fb_helper;
+ sx_xlock(&fb_helper->dev->mode_config.mutex);
+ drm_fb_helper_restore_fbdev_mode(fb_helper);
+ sx_xunlock(&fb_helper->dev->mode_config.mutex);
+}
+
+static int
+vt_kms_postswitch(void *arg)
+{
+ struct vt_kms_softc *sc;
+
+ sc = (struct vt_kms_softc *)arg;
+ taskqueue_enqueue_fast(taskqueue_thread, &sc->fb_mode_task);
+
+ return (0);
+}
+#endif
+
static DRM_LIST_HEAD(kernel_fb_helper_list);
/* simple single crtc case helper function */
@@ -216,6 +251,10 @@ static int
fb_get_options(const char *connector_name, char **option)
{
+ /*
+ * TODO: store mode options pointer in ${option} for connector with
+ * name ${connector_name}
+ */
return (1);
}
@@ -892,11 +931,13 @@ int drm_fb_helper_single_fb_probe(struct
int new_fb = 0;
int crtc_count = 0;
int i;
-#if 0
struct fb_info *info;
-#endif
struct drm_fb_helper_surface_size sizes;
int gamma_size = 0;
+#if defined(__FreeBSD__)
+ struct vt_kms_softc *sc;
+ device_t kdev;
+#endif
memset(&sizes, 0, sizeof(struct drm_fb_helper_surface_size));
sizes.surface_depth = 24;
@@ -973,8 +1014,21 @@ int drm_fb_helper_single_fb_probe(struct
if (new_fb < 0)
return new_fb;
-#if 0
+#if defined(__FreeBSD__)
+ sc = malloc(sizeof(struct vt_kms_softc), DRM_MEM_KMS,
+ M_WAITOK | M_ZERO);
+ sc->fb_helper = fb_helper;
+ TASK_INIT(&sc->fb_mode_task, 0, vt_restore_fbdev_mode, sc);
+
info = fb_helper->fbdev;
+
+ info->fb_name = device_get_nameunit(fb_helper->dev->device);
+ info->fb_depth = fb_helper->fb->bits_per_pixel;
+ info->fb_height = fb_helper->fb->height;
+ info->fb_width = fb_helper->fb->width;
+ info->fb_stride = fb_helper->fb->pitches[0];
+ info->fb_priv = sc;
+ info->enter = &vt_kms_postswitch;
#endif
/* set the fb pointer */
@@ -982,7 +1036,23 @@ int drm_fb_helper_single_fb_probe(struct
fb_helper->crtc_info[i].mode_set.fb = fb_helper->fb;
}
-#if 0
+#if defined(__FreeBSD__)
+ if (new_fb) {
+ device_t fbd;
+ int ret;
+
+ kdev = fb_helper->dev->device;
+ fbd = device_add_child(kdev, "fbd", device_get_unit(kdev));
+ if (fbd != NULL)
+ ret = device_probe_and_attach(fbd);
+ else
+ ret = ENODEV;
+#ifdef DEV_VT
+ if (ret != 0)
+ DRM_ERROR("Failed to attach fbd device: %d\n", ret);
+#endif
+ }
+#else
if (new_fb) {
info->var.pixclock = 0;
if (register_framebuffer(info) < 0) {
@@ -1006,7 +1076,6 @@ int drm_fb_helper_single_fb_probe(struct
if (new_fb)
list_add(&fb_helper->kernel_fb_list, &kernel_fb_helper_list);
#endif
-
return 0;
}
Modified: stable/9/sys/dev/drm2/drm_os_freebsd.h
==============================================================================
--- stable/9/sys/dev/drm2/drm_os_freebsd.h Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/drm_os_freebsd.h Thu Mar 27 15:58:18 2014 (r263817)
@@ -6,6 +6,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/fbio.h>
+
#if _BYTE_ORDER == _BIG_ENDIAN
#define __BIG_ENDIAN 4321
#else
Modified: stable/9/sys/dev/drm2/i915/i915_drv.c
==============================================================================
--- stable/9/sys/dev/drm2/i915/i915_drv.c Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/i915/i915_drv.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -40,6 +40,8 @@ __FBSDID("$FreeBSD$");
#include <dev/drm2/drm_pciids.h>
#include <dev/drm2/i915/intel_drv.h>
+#include "fb_if.h"
+
/* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */
static drm_pci_id_list_t i915_pciidlist[] = {
i915_PCI_IDS
@@ -380,6 +382,25 @@ i915_attach(device_t kdev)
return (drm_attach(kdev, i915_pciidlist));
}
+static struct fb_info *
+i915_fb_helper_getinfo(device_t kdev)
+{
+ struct intel_fbdev *ifbdev;
+ drm_i915_private_t *dev_priv;
+ struct drm_device *dev;
+ struct fb_info *info;
+
+ dev = device_get_softc(kdev);
+ dev_priv = dev->dev_private;
+ ifbdev = dev_priv->fbdev;
+ if (ifbdev == NULL)
+ return (NULL);
+
+ info = ifbdev->helper.fbdev;
+
+ return (info);
+}
+
const struct intel_device_info *
i915_get_device_id(int device)
{
@@ -400,6 +421,10 @@ static device_method_t i915_methods[] =
DEVMETHOD(device_suspend, i915_suspend),
DEVMETHOD(device_resume, i915_resume),
DEVMETHOD(device_detach, drm_detach),
+
+ /* Framebuffer service methods */
+ DEVMETHOD(fb_getinfo, i915_fb_helper_getinfo),
+
DEVMETHOD_END
};
Modified: stable/9/sys/dev/drm2/i915/intel_fb.c
==============================================================================
--- stable/9/sys/dev/drm2/i915/intel_fb.c Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/i915/intel_fb.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -41,8 +41,8 @@ static int intelfb_create(struct intel_f
struct drm_device *dev = ifbdev->helper.dev;
#if 0
struct drm_i915_private *dev_priv = dev->dev_private;
- struct fb_info *info;
#endif
+ struct fb_info *info;
struct drm_framebuffer *fb;
struct drm_mode_fb_cmd2 mode_cmd;
struct drm_i915_gem_object *obj;
@@ -86,6 +86,16 @@ static int intelfb_create(struct intel_f
}
info->par = ifbdev;
+#else
+ info = malloc(sizeof(struct fb_info), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+ info->fb_size = size;
+ info->fb_bpp = sizes->surface_bpp;
+ info->fb_width = sizes->fb_width;
+ info->fb_height = sizes->fb_height;
+ info->fb_pbase = dev->agp->base + obj->gtt_offset;
+ info->fb_vbase = (vm_offset_t)pmap_mapdev_attr(info->fb_pbase, size,
+ PAT_WRITE_COMBINING);
+
#endif
ret = intel_framebuffer_init(dev, &ifbdev->ifb, &mode_cmd, obj);
@@ -95,8 +105,8 @@ static int intelfb_create(struct intel_f
fb = &ifbdev->ifb.base;
ifbdev->helper.fb = fb;
-#if 0
ifbdev->helper.fbdev = info;
+#if 0
strcpy(info->fix.id, "inteldrmfb");
@@ -135,9 +145,8 @@ static int intelfb_create(struct intel_f
/* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */
#endif
-
- DRM_DEBUG_KMS("allocated %dx%d fb: 0x%08x, bo %p\n",
- fb->width, fb->height,
+ DRM_DEBUG_KMS("allocated %dx%d (s %dbits) fb: 0x%08x, bo %p\n",
+ fb->width, fb->height, fb->depth,
obj->gtt_offset, obj);
DRM_UNLOCK(dev);
Modified: stable/9/sys/dev/drm2/radeon/radeon.h
==============================================================================
--- stable/9/sys/dev/drm2/radeon/radeon.h Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/radeon/radeon.h Thu Mar 27 15:58:18 2014 (r263817)
@@ -2041,6 +2041,9 @@ void radeon_pm_acpi_event_handler(struct
int radeon_ttm_init(struct radeon_device *rdev);
void radeon_ttm_fini(struct radeon_device *rdev);
+/* radeon_fb.c */
+struct fb_info * radeon_fb_helper_getinfo(device_t kdev);
+
/* r600.c */
int r600_ih_ring_alloc(struct radeon_device *rdev);
void r600_ih_ring_fini(struct radeon_device *rdev);
Modified: stable/9/sys/dev/drm2/radeon/radeon_drv.c
==============================================================================
--- stable/9/sys/dev/drm2/radeon/radeon_drv.c Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/radeon/radeon_drv.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
#include <dev/drm2/drm_pciids.h>
+#include "fb_if.h"
/*
* KMS wrapper.
@@ -495,6 +496,8 @@ radeon_resume(device_t kdev)
return (-ret);
}
+extern struct fb_info * radeon_fb_helper_getinfo(device_t kdev);
+
static device_method_t radeon_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, radeon_probe),
@@ -502,6 +505,10 @@ static device_method_t radeon_methods[]
DEVMETHOD(device_suspend, radeon_suspend),
DEVMETHOD(device_resume, radeon_resume),
DEVMETHOD(device_detach, drm_detach),
+
+ /* Framebuffer service methods */
+ DEVMETHOD(fb_getinfo, radeon_fb_helper_getinfo),
+
DEVMETHOD_END
};
Modified: stable/9/sys/dev/drm2/radeon/radeon_fb.c
==============================================================================
--- stable/9/sys/dev/drm2/radeon/radeon_fb.c Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/radeon/radeon_fb.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -27,6 +27,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <machine/_inttypes.h>
+
#include <dev/drm2/drmP.h>
#include <dev/drm2/drm_crtc.h>
#include <dev/drm2/drm_crtc_helper.h>
@@ -46,7 +48,7 @@ struct radeon_fbdev {
struct radeon_device *rdev;
};
-#ifdef DUMBBELL_WIP
+#if defined(__linux__)
static struct fb_ops radeonfb_ops = {
.owner = THIS_MODULE,
.fb_check_var = drm_fb_helper_check_var,
@@ -60,7 +62,7 @@ static struct fb_ops radeonfb_ops = {
.fb_debug_enter = drm_fb_helper_debug_enter,
.fb_debug_leave = drm_fb_helper_debug_leave,
};
-#endif /* DUMBBELL_WIP */
+#endif
int radeon_align_pitch(struct radeon_device *rdev, int width, int bpp, bool tiled)
@@ -191,20 +193,13 @@ static int radeonfb_create(struct radeon
struct drm_fb_helper_surface_size *sizes)
{
struct radeon_device *rdev = rfbdev->rdev;
-#ifdef DUMBBELL_WIP
struct fb_info *info;
-#endif /* DUMBBELL_WIP */
struct drm_framebuffer *fb = NULL;
struct drm_mode_fb_cmd2 mode_cmd;
struct drm_gem_object *gobj = NULL;
struct radeon_bo *rbo = NULL;
-#ifdef DUMBBELL_WIP
- device_t device = rdev->dev;
-#endif /* DUMBBELL_WIP */
int ret;
-#ifdef DUMBBELL_WIP
unsigned long tmp;
-#endif /* DUMBBELL_WIP */
mode_cmd.width = sizes->surface_width;
mode_cmd.height = sizes->surface_height;
@@ -224,16 +219,7 @@ static int radeonfb_create(struct radeon
rbo = gem_to_radeon_bo(gobj);
-#ifdef DUMBBELL_WIP
- /* okay we have an object now allocate the framebuffer */
- info = framebuffer_alloc(0, device);
- if (info == NULL) {
- ret = -ENOMEM;
- goto out_unref;
- }
-
- info->par = rfbdev;
-#endif /* DUMBBELL_WIP */
+ info = malloc(sizeof(*info), DRM_MEM_KMS, M_WAITOK | M_ZERO);
ret = radeon_framebuffer_init(rdev->ddev, &rfbdev->rfb, &mode_cmd, gobj);
if (ret) {
@@ -245,61 +231,29 @@ static int radeonfb_create(struct radeon
/* setup helper */
rfbdev->helper.fb = fb;
-#ifdef DUMBBELL_WIP
rfbdev->helper.fbdev = info;
- memset_io(rbo->kptr, 0x0, radeon_bo_size(rbo));
-
- strcpy(info->fix.id, "radeondrmfb");
-
- drm_fb_helper_fill_fix(info, fb->pitches[0], fb->depth);
-
- info->flags = FBINFO_DEFAULT | FBINFO_CAN_FORCE_OUTPUT;
- info->fbops = &radeonfb_ops;
+ memset(rbo->kptr, 0x0, radeon_bo_size(rbo));
tmp = radeon_bo_gpu_offset(rbo) - rdev->mc.vram_start;
- info->fix.smem_start = rdev->mc.aper_base + tmp;
- info->fix.smem_len = radeon_bo_size(rbo);
- info->screen_base = rbo->kptr;
- info->screen_size = radeon_bo_size(rbo);
-
- drm_fb_helper_fill_var(info, &rfbdev->helper, sizes->fb_width, sizes->fb_height);
-
- /* setup aperture base/size for vesafb takeover */
- info->apertures = alloc_apertures(1);
- if (!info->apertures) {
- ret = -ENOMEM;
- goto out_unref;
- }
- info->apertures->ranges[0].base = rdev->ddev->mode_config.fb_base;
- info->apertures->ranges[0].size = rdev->mc.aper_size;
+ info->fb_size = radeon_bo_size(rbo);
+ info->fb_bpp = sizes->surface_bpp;
+ info->fb_width = sizes->surface_width;
+ info->fb_height = sizes->surface_height;
+ info->fb_pbase = rdev->mc.aper_base + tmp;
+ info->fb_vbase = (vm_offset_t)rbo->kptr;
- /* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */
-
- if (info->screen_base == NULL) {
- ret = -ENOSPC;
- goto out_unref;
- }
-
- ret = fb_alloc_cmap(&info->cmap, 256, 0);
- if (ret) {
- ret = -ENOMEM;
- goto out_unref;
- }
-
- DRM_INFO("fb mappable at 0x%lX\n", info->fix.smem_start);
+ DRM_INFO("fb mappable at 0x%" PRIXPTR "\n", info->fb_pbase);
DRM_INFO("vram apper at 0x%lX\n", (unsigned long)rdev->mc.aper_base);
DRM_INFO("size %lu\n", (unsigned long)radeon_bo_size(rbo));
DRM_INFO("fb depth is %d\n", fb->depth);
DRM_INFO(" pitch is %d\n", fb->pitches[0]);
- vga_switcheroo_client_fb_set(rdev->ddev->pdev, info);
-#endif /* DUMBBELL_WIP */
return 0;
out_unref:
if (rbo) {
-
+ /* TODO? dumbbell@ */
}
if (fb && ret) {
drm_gem_object_unreference(gobj);
@@ -332,21 +286,13 @@ void radeon_fb_output_poll_changed(struc
static int radeon_fbdev_destroy(struct drm_device *dev, struct radeon_fbdev *rfbdev)
{
-#ifdef DUMBBELL_WIP
struct fb_info *info;
-#endif /* DUMBBELL_WIP */
struct radeon_framebuffer *rfb = &rfbdev->rfb;
-#ifdef DUMBBELL_WIP
if (rfbdev->helper.fbdev) {
info = rfbdev->helper.fbdev;
-
- unregister_framebuffer(info);
- if (info->cmap.len)
- fb_dealloc_cmap(&info->cmap);
- framebuffer_release(info);
+ free(info, DRM_MEM_KMS);
}
-#endif /* DUMBBELL_WIP */
if (rfb->obj) {
DRM_UNLOCK(dev); /* Work around lock recursion. dumbbell@ */
@@ -431,3 +377,22 @@ bool radeon_fbdev_robj_is_fb(struct rade
return true;
return false;
}
+
+struct fb_info *
+radeon_fb_helper_getinfo(device_t kdev)
+{
+ struct drm_device *dev;
+ struct radeon_device *rdev;
+ struct radeon_fbdev *rfbdev;
+ struct fb_info *info;
+
+ dev = device_get_softc(kdev);
+ rdev = dev->dev_private;
+ rfbdev = rdev->mode_info.rfbdev;
+ if (rfbdev == NULL)
+ return (NULL);
+
+ info = rfbdev->helper.fbdev;
+
+ return (info);
+}
Modified: stable/9/sys/dev/drm2/radeon/radeon_pm.c
==============================================================================
--- stable/9/sys/dev/drm2/radeon/radeon_pm.c Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/drm2/radeon/radeon_pm.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -248,7 +248,7 @@ static void radeon_pm_set_clocks(struct
(rdev->pm.requested_power_state_index == rdev->pm.current_power_state_index))
return;
- DRM_LOCK(rdev->ddev);
+ //DRM_LOCK(rdev->ddev); XXX Recursion, already locked in drm_attach/drm_load -- dumbbell@
sx_xlock(&rdev->pm.mclk_lock);
sx_xlock(&rdev->ring_lock);
@@ -263,7 +263,7 @@ static void radeon_pm_set_clocks(struct
/* needs a GPU reset dont reset here */
sx_xunlock(&rdev->ring_lock);
sx_xunlock(&rdev->pm.mclk_lock);
- DRM_UNLOCK(rdev->ddev);
+ //DRM_UNLOCK(rdev->ddev); XXX Recursion, already locked in drm_attach/drm_load -- dumbbell@
return;
}
}
@@ -299,7 +299,7 @@ static void radeon_pm_set_clocks(struct
sx_xunlock(&rdev->ring_lock);
sx_xunlock(&rdev->pm.mclk_lock);
- DRM_UNLOCK(rdev->ddev);
+ //DRM_UNLOCK(rdev->ddev); XXX Recursion, already locked in drm_attach/drm_load -- dumbbell@
}
static void radeon_pm_print_states(struct radeon_device *rdev)
Copied: stable/9/sys/dev/fb/fb_if.m (from r259016, head/sys/dev/fb/fb_if.m)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ stable/9/sys/dev/fb/fb_if.m Thu Mar 27 15:58:18 2014 (r263817, copy of r259016, head/sys/dev/fb/fb_if.m)
@@ -0,0 +1,13 @@
+#include <sys/bus.h>
+#include <sys/fbio.h>
+
+INTERFACE fb;
+
+METHOD int pin_max {
+ device_t dev;
+ int *npins;
+};
+
+METHOD struct fb_info * getinfo {
+ device_t dev;
+};
Copied and modified: stable/9/sys/dev/fb/fbd.c (from r259016, head/sys/dev/fb/fbd.c)
==============================================================================
--- head/sys/dev/fb/fbd.c Thu Dec 5 22:38:53 2013 (r259016, copy source)
+++ stable/9/sys/dev/fb/fbd.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -255,8 +255,12 @@ fb_probe(struct fb_info *info)
info->wr4 = &vt_fb_indir_wr4;
info->copy = &vt_fb_indir_copy;
} else if (info->fb_vbase != 0) {
- if (info->fb_pbase == 0)
+ if (info->fb_pbase == 0) {
info->fb_flags |= FB_FLAG_NOMMAP;
+ } else {
+ if (info->fb_mmap == NULL)
+ info->fb_mmap = &fb_mmap;
+ }
info->wr1 = &vt_fb_mem_wr1;
info->wr2 = &vt_fb_mem_wr2;
info->wr4 = &vt_fb_mem_wr4;
@@ -264,6 +268,10 @@ fb_probe(struct fb_info *info)
} else
return (ENXIO);
+ if (info->fb_ioctl == NULL)
+ info->fb_ioctl = &fb_ioctl;
+
+
return (0);
}
@@ -277,6 +285,7 @@ fb_init(struct fb_list_entry *entry, int
entry->fb_si = make_dev(&fb_cdevsw, unit, UID_ROOT, GID_WHEEL,
0600, "fb%d", unit);
entry->fb_si->si_drv1 = info;
+ info->fb_cdev = entry->fb_si;
return (0);
}
Modified: stable/9/sys/dev/syscons/scterm-teken.c
==============================================================================
--- stable/9/sys/dev/syscons/scterm-teken.c Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/syscons/scterm-teken.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -542,7 +542,14 @@ scteken_putchar(void *arg, const teken_p
vm_offset_t p;
int cursor, attr;
+ /*
+ * No support for printing right hand sides for CJK fullwidth
+ * characters. Simply print a space and assume that the left
+ * hand side describes the entire character.
+ */
attr = scteken_attr(a) << 8;
+ if (a->ta_format & TF_CJK_RIGHT)
+ c = ' ';
#ifdef TEKEN_UTF8
scteken_get_cp437(&c, &attr);
#endif /* TEKEN_UTF8 */
Modified: stable/9/sys/dev/syscons/scvidctl.c
==============================================================================
--- stable/9/sys/dev/syscons/scvidctl.c Thu Mar 27 14:07:36 2014 (r263816)
+++ stable/9/sys/dev/syscons/scvidctl.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -137,6 +137,7 @@ sc_set_text_mode(scr_stat *scp, struct t
int fontsize, int fontwidth)
{
video_info_t info;
+ struct winsize wsz;
u_char *font;
int prev_ysize;
int error;
@@ -234,16 +235,9 @@ sc_set_text_mode(scr_stat *scp, struct t
if (tp == NULL)
return 0;
- DPRINTF(5, ("ws_*size (%d,%d), size (%d,%d)\n",
- tp->t_winsize.ws_col, tp->t_winsize.ws_row, scp->xsize, scp->ysize));
- if (tp->t_winsize.ws_col != scp->xsize
- || tp->t_winsize.ws_row != scp->ysize) {
- tp->t_winsize.ws_col = scp->xsize;
- tp->t_winsize.ws_row = scp->ysize;
-
- tty_signal_pgrp(tp, SIGWINCH);
- }
-
+ wsz.ws_col = scp->xsize;
+ wsz.ws_row = scp->ysize;
+ tty_set_winsize(tp, &wsz);
return 0;
}
@@ -254,6 +248,7 @@ sc_set_graphics_mode(scr_stat *scp, stru
return ENODEV;
#else
video_info_t info;
+ struct winsize wsz;
int error;
int s;
@@ -300,14 +295,9 @@ sc_set_graphics_mode(scr_stat *scp, stru
if (tp == NULL)
return 0;
- if (tp->t_winsize.ws_xpixel != scp->xpixel
- || tp->t_winsize.ws_ypixel != scp->ypixel) {
- tp->t_winsize.ws_xpixel = scp->xpixel;
- tp->t_winsize.ws_ypixel = scp->ypixel;
-
- tty_signal_pgrp(tp, SIGWINCH);
- }
-
+ wsz.ws_col = scp->xsize;
+ wsz.ws_row = scp->ysize;
+ tty_set_winsize(tp, &wsz);
return 0;
#endif /* SC_NO_MODE_CHANGE */
}
@@ -320,7 +310,7 @@ sc_set_pixel_mode(scr_stat *scp, struct
return ENODEV;
#else
video_info_t info;
- ksiginfo_t ksi;
+ struct winsize wsz;
u_char *font;
int prev_ysize;
int error;
@@ -425,20 +415,9 @@ sc_set_pixel_mode(scr_stat *scp, struct
if (tp == NULL)
return 0;
- if (tp->t_winsize.ws_col != scp->xsize
- || tp->t_winsize.ws_row != scp->ysize) {
- tp->t_winsize.ws_col = scp->xsize;
- tp->t_winsize.ws_row = scp->ysize;
- if (tp->t_pgrp != NULL) {
- ksiginfo_init(&ksi);
- ksi.ksi_signo = SIGWINCH;
- ksi.ksi_code = SI_KERNEL;
- PGRP_LOCK(tp->t_pgrp);
- pgsignal(tp->t_pgrp, SIGWINCH, 1, &ksi);
- PGRP_UNLOCK(tp->t_pgrp);
- }
- }
-
+ wsz.ws_col = scp->xsize;
+ wsz.ws_row = scp->ysize;
+ tty_set_winsize(tp, &wsz);
return 0;
#endif /* SC_PIXEL_MODE */
}
Modified: stable/9/sys/dev/vt/font/vt_font_default.c
==============================================================================
--- head/sys/dev/vt/font/vt_font_default.c Thu Dec 5 22:38:53 2013 (r259016)
+++ stable/9/sys/dev/vt/font/vt_font_default.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -2194,9 +2194,12 @@ struct vt_font vt_font_default = {
.vf_width = 8,
.vf_height = 16,
.vf_bytes = font_bytes,
- .vf_normal = font_mapping_normal,
- .vf_normal_length = 248,
- .vf_bold = font_mapping_bold,
- .vf_bold_length = 260,
+ .vf_map = {
+ font_mapping_normal,
+ NULL,
+ font_mapping_bold,
+ NULL,
+ },
+ .vf_map_count = { 248, 0, 260, 0 },
.vf_refcount = 1,
};
Modified: stable/9/sys/dev/vt/font/vt_mouse_cursor.c
==============================================================================
--- head/sys/dev/vt/font/vt_mouse_cursor.c Thu Dec 5 22:38:53 2013 (r259016)
+++ stable/9/sys/dev/vt/font/vt_mouse_cursor.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
#include <dev/vt/vt.h>
+#ifndef SC_NO_CUTPASTE
struct mouse_cursor vt_default_mouse_pointer = {
.map = {
0x00, /* "__ " */
@@ -66,3 +67,4 @@ struct mouse_cursor vt_default_mouse_poi
.w = 8,
.h = 13,
};
+#endif
Modified: stable/9/sys/dev/vt/hw/fb/vt_fb.c
==============================================================================
--- head/sys/dev/vt/hw/fb/vt_fb.c Thu Dec 5 22:38:53 2013 (r259016)
+++ stable/9/sys/dev/vt/hw/fb/vt_fb.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -41,14 +41,103 @@ __FBSDID("$FreeBSD$");
#include <dev/vt/hw/fb/vt_fb.h>
#include <dev/vt/colors/vt_termcolors.h>
+static int vt_fb_ioctl(struct vt_device *vd, u_long cmd, caddr_t data,
+ struct thread *td);
+static int vt_fb_mmap(struct vt_device *vd, vm_ooffset_t offset,
+ vm_paddr_t *paddr, int prot, vm_memattr_t *memattr);
+void vt_fb_drawrect(struct vt_device *vd, int x1, int y1, int x2, int y2,
+ int fill, term_color_t color);
+void vt_fb_setpixel(struct vt_device *vd, int x, int y, term_color_t color);
+
static struct vt_driver vt_fb_driver = {
.vd_init = vt_fb_init,
.vd_blank = vt_fb_blank,
.vd_bitbltchr = vt_fb_bitbltchr,
+ .vd_drawrect = vt_fb_drawrect,
+ .vd_setpixel = vt_fb_setpixel,
.vd_postswitch = vt_fb_postswitch,
.vd_priority = VD_PRIORITY_GENERIC+10,
+ .vd_fb_ioctl = vt_fb_ioctl,
+ .vd_fb_mmap = vt_fb_mmap,
};
+static int
+vt_fb_ioctl(struct vt_device *vd, u_long cmd, caddr_t data, struct thread *td)
+{
+ struct fb_info *info;
+
+ info = vd->vd_softc;
+
+ if (info->fb_ioctl == NULL)
+ return (-1);
+
+ return (info->fb_ioctl(info->fb_cdev, cmd, data, 0, td));
+}
+
+static int
+vt_fb_mmap(struct vt_device *vd, vm_ooffset_t offset, vm_paddr_t *paddr,
+ int prot, vm_memattr_t *memattr)
+{
+ struct fb_info *info;
+
+ info = vd->vd_softc;
+
+ if (info->fb_ioctl == NULL)
+ return (ENXIO);
+
+ return (info->fb_mmap(info->fb_cdev, offset, paddr, prot, memattr));
+}
+
+void
+vt_fb_setpixel(struct vt_device *vd, int x, int y, term_color_t color)
+{
+ struct fb_info *info;
+ uint32_t c;
+ u_int o;
+
+ info = vd->vd_softc;
+ c = info->fb_cmap[color];
+ o = info->fb_stride * y + x * FBTYPE_GET_BYTESPP(info);
+
+ switch (FBTYPE_GET_BYTESPP(info)) {
+ case 1:
+ info->wr1(info, o, c);
+ break;
+ case 2:
+ info->wr2(info, o, c);
+ break;
+ case 3:
+ info->wr1(info, o, (c >> 16) & 0xff);
+ info->wr1(info, o + 1, (c >> 8) & 0xff);
+ info->wr1(info, o + 2, c & 0xff);
+ break;
+ case 4:
+ info->wr4(info, o, c);
+ break;
+ default:
+ /* panic? */
+ return;
+ }
+
+}
+
+void
+vt_fb_drawrect(struct vt_device *vd, int x1, int y1, int x2, int y2, int fill,
+ term_color_t color)
+{
+ int x, y;
+
+ for (y = y1; y <= y2; y++) {
+ if (fill || (y == y1) || (y == y2)) {
+ for (x = x1; x <= x2; x++)
+ vt_fb_setpixel(vd, x, y, color);
+ } else {
+ vt_fb_setpixel(vd, x1, y, color);
+ vt_fb_setpixel(vd, x2, y, color);
+ }
+ }
+}
+
void
vt_fb_blank(struct vt_device *vd, term_color_t color)
{
Modified: stable/9/sys/dev/vt/hw/ofwfb/ofwfb.c
==============================================================================
--- head/sys/dev/vt/hw/ofwfb/ofwfb.c Thu Dec 5 22:38:53 2013 (r259016)
+++ stable/9/sys/dev/vt/hw/ofwfb/ofwfb.c Thu Mar 27 15:58:18 2014 (r263817)
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: user/ed/newcons/sys/dev/vt/hw/ofwfb/ofwfb.c 219888 2011-03-22 21:31:31Z ed $");
+__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -78,17 +78,19 @@ static void
ofwfb_blank(struct vt_device *vd, term_color_t color)
{
struct ofwfb_softc *sc = vd->vd_softc;
- u_int ofs;
+ u_int ofs, size;
uint32_t c;
+ size = sc->sc_stride * vd->vd_height;
switch (sc->sc_depth) {
case 8:
- for (ofs = 0; ofs < sc->sc_stride*vd->vd_height; ofs++)
- *(uint8_t *)(sc->sc_addr + ofs) = color;
+ c = (color << 24) | (color << 16) | (color << 8) | color;
+ for (ofs = 0; ofs < size/4; ofs++)
+ *(uint32_t *)(sc->sc_addr + 4*ofs) = c;
break;
case 32:
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-stable-9
mailing list