Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'fbdev-for-7.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev

Pull fbdev updates from Helge Deller:
"It's now easily possible to replace the framebuffer penguin boot logo
with an own logo at compile time (Vincent Mailhol)

The hyperv framebuffer driver has been removed, since the hyperv DRM
driver now seems to provide equal functionality.

Various console_conditional_schedule() calls across the console
drivers (fbcon, printk, vt) have been removed since they are no longer
necessary.

All other patches are either fixes in au1100fb, au1200fb, ffb, rivafb,
vt8500lcdfb and of_display_timing, or minor cleanups in the fbcon and
omapfb drivers"

* tag 'fbdev-for-7.0-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev: (32 commits)
fbcon: Declare struct fb_info.fbcon_par as of type struct fbcon_par
fbcon: Remove struct fbcon_display.inverse
fbdev: au1200fb: Fix a memory leak in au1200fb_drv_probe()
fbdev: ffb: fix corrupted video output on Sun FFB1
fbdev: of_display_timing: Fix device node reference leak in of_get_display_timings()
staging: fbtft: Make framebuffer registration message debug-only
staging: fbtft: Fix build failure when CONFIG_FB_DEVICE=n
fbdev: au1100fb: Check return value of clk_enable() in .resume()
printk, vt, fbcon: Remove console_conditional_schedule()
fbdev: fix fb_pad_unaligned_buffer mask
fbdev: of: display_timing: fix refcount leak in of_get_display_timings()
fbdev: vt8500lcdfb: fix missing dma_free_coherent()
video/logo: don't select LOGO_LINUX_MONO and LOGO_LINUX_VGA16 by default
video/logo: move logo selection logic to Kconfig
video/logo: remove logo_mac_clut224
sh: defconfig: remove CONFIG_LOGO_SUPERH_*
newport_con: depend on LOGO_LINUX_CLUT224 instead of LOGO_SGI_CLUT224
video/logo: allow custom logo
video/logo: add a type parameter to the logo makefile function
video/logo: remove orphan .pgm Makefile rule
...

+325 -3257
-10
MAINTAINERS
··· 11859 11859 F: net/vmw_vsock/hyperv_transport.c 11860 11860 F: tools/hv/ 11861 11861 11862 - HYPER-V FRAMEBUFFER DRIVER 11863 - M: "K. Y. Srinivasan" <kys@microsoft.com> 11864 - M: Haiyang Zhang <haiyangz@microsoft.com> 11865 - M: Wei Liu <wei.liu@kernel.org> 11866 - M: Dexuan Cui <decui@microsoft.com> 11867 - L: linux-hyperv@vger.kernel.org 11868 - S: Obsolete 11869 - T: git git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git 11870 - F: drivers/video/fbdev/hyperv_fb.c 11871 - 11872 11862 HYPERBUS SUPPORT 11873 11863 M: Vignesh Raghavendra <vigneshr@ti.com> 11874 11864 R: Tudor Ambarus <tudor.ambarus@linaro.org>
-2
arch/sh/configs/dreamcast_defconfig
··· 60 60 # CONFIG_LOGO_LINUX_MONO is not set 61 61 # CONFIG_LOGO_LINUX_VGA16 is not set 62 62 # CONFIG_LOGO_LINUX_CLUT224 is not set 63 - # CONFIG_LOGO_SUPERH_MONO is not set 64 - # CONFIG_LOGO_SUPERH_VGA16 is not set 65 63 # CONFIG_DNOTIFY is not set 66 64 CONFIG_PROC_KCORE=y 67 65 CONFIG_TMPFS=y
-2
arch/sh/configs/ecovec24_defconfig
··· 78 78 # CONFIG_LOGO_LINUX_MONO is not set 79 79 # CONFIG_LOGO_LINUX_VGA16 is not set 80 80 # CONFIG_LOGO_LINUX_CLUT224 is not set 81 - # CONFIG_LOGO_SUPERH_MONO is not set 82 - # CONFIG_LOGO_SUPERH_VGA16 is not set 83 81 CONFIG_SOUND=y 84 82 CONFIG_SND=y 85 83 CONFIG_SND_SEQUENCER=y
-2
arch/sh/configs/kfr2r09_defconfig
··· 66 66 # CONFIG_LOGO_LINUX_MONO is not set 67 67 # CONFIG_LOGO_LINUX_VGA16 is not set 68 68 # CONFIG_LOGO_LINUX_CLUT224 is not set 69 - # CONFIG_LOGO_SUPERH_MONO is not set 70 - # CONFIG_LOGO_SUPERH_CLUT224 is not set 71 69 CONFIG_USB_GADGET=y 72 70 CONFIG_USB_CDC_COMPOSITE=m 73 71 CONFIG_MMC=y
-2
arch/sh/configs/migor_defconfig
··· 71 71 # CONFIG_LOGO_LINUX_MONO is not set 72 72 # CONFIG_LOGO_LINUX_VGA16 is not set 73 73 # CONFIG_LOGO_LINUX_CLUT224 is not set 74 - # CONFIG_LOGO_SUPERH_MONO is not set 75 - # CONFIG_LOGO_SUPERH_CLUT224 is not set 76 74 CONFIG_USB_GADGET=y 77 75 CONFIG_USB_GADGET_M66592=y 78 76 CONFIG_USB_G_SERIAL=m
-2
arch/sh/configs/rts7751r2d1_defconfig
··· 50 50 # CONFIG_LOGO_LINUX_MONO is not set 51 51 # CONFIG_LOGO_LINUX_VGA16 is not set 52 52 # CONFIG_LOGO_LINUX_CLUT224 is not set 53 - # CONFIG_LOGO_SUPERH_MONO is not set 54 - # CONFIG_LOGO_SUPERH_VGA16 is not set 55 53 CONFIG_SOUND=y 56 54 CONFIG_SND=m 57 55 CONFIG_SND_YMFPCI=m
-2
arch/sh/configs/rts7751r2dplus_defconfig
··· 55 55 # CONFIG_LOGO_LINUX_MONO is not set 56 56 # CONFIG_LOGO_LINUX_VGA16 is not set 57 57 # CONFIG_LOGO_LINUX_CLUT224 is not set 58 - # CONFIG_LOGO_SUPERH_MONO is not set 59 - # CONFIG_LOGO_SUPERH_VGA16 is not set 60 58 CONFIG_SOUND=y 61 59 CONFIG_SND=m 62 60 CONFIG_SND_YMFPCI=m
-2
arch/sh/configs/se7724_defconfig
··· 79 79 # CONFIG_LOGO_LINUX_MONO is not set 80 80 # CONFIG_LOGO_LINUX_VGA16 is not set 81 81 # CONFIG_LOGO_LINUX_CLUT224 is not set 82 - # CONFIG_LOGO_SUPERH_MONO is not set 83 - # CONFIG_LOGO_SUPERH_VGA16 is not set 84 82 CONFIG_SOUND=y 85 83 CONFIG_SND=m 86 84 # CONFIG_SND_DRIVERS is not set
-2
arch/sh/configs/se7780_defconfig
··· 66 66 CONFIG_LOGO=y 67 67 # CONFIG_LOGO_LINUX_MONO is not set 68 68 # CONFIG_LOGO_LINUX_VGA16 is not set 69 - # CONFIG_LOGO_SUPERH_MONO is not set 70 - # CONFIG_LOGO_SUPERH_VGA16 is not set 71 69 CONFIG_SOUND=y 72 70 CONFIG_SOUND_PRIME=y 73 71 CONFIG_HID_A4TECH=y
-3
arch/sh/configs/sh7785lcr_defconfig
··· 60 60 CONFIG_LOGO=y 61 61 # CONFIG_LOGO_LINUX_MONO is not set 62 62 # CONFIG_LOGO_LINUX_VGA16 is not set 63 - # CONFIG_LOGO_SUPERH_MONO is not set 64 - # CONFIG_LOGO_SUPERH_VGA16 is not set 65 - # CONFIG_LOGO_SUPERH_CLUT224 is not set 66 63 CONFIG_HID_A4TECH=y 67 64 CONFIG_HID_APPLE=y 68 65 CONFIG_HID_BELKIN=y
-3
arch/sh/configs/urquell_defconfig
··· 86 86 CONFIG_LOGO=y 87 87 # CONFIG_LOGO_LINUX_MONO is not set 88 88 # CONFIG_LOGO_LINUX_VGA16 is not set 89 - # CONFIG_LOGO_SUPERH_MONO is not set 90 - # CONFIG_LOGO_SUPERH_VGA16 is not set 91 - # CONFIG_LOGO_SUPERH_CLUT224 is not set 92 89 CONFIG_HID_A4TECH=y 93 90 CONFIG_HID_APPLE=y 94 91 CONFIG_HID_BELKIN=y
+146
drivers/gpu/drm/Kconfig
··· 265 265 tristate 266 266 depends on DRM 267 267 268 + source "drivers/gpu/drm/sysfb/Kconfig" 269 + 270 + source "drivers/gpu/drm/arm/Kconfig" 271 + 272 + source "drivers/gpu/drm/radeon/Kconfig" 273 + 274 + source "drivers/gpu/drm/amd/amdgpu/Kconfig" 275 + 276 + source "drivers/gpu/drm/nouveau/Kconfig" 277 + 278 + source "drivers/gpu/drm/nova/Kconfig" 279 + 280 + source "drivers/gpu/drm/i915/Kconfig" 281 + 282 + source "drivers/gpu/drm/xe/Kconfig" 283 + 284 + source "drivers/gpu/drm/kmb/Kconfig" 285 + 286 + config DRM_VGEM 287 + tristate "Virtual GEM provider" 288 + depends on DRM && MMU 289 + select DRM_GEM_SHMEM_HELPER 290 + help 291 + Choose this option to get a virtual graphics memory manager, 292 + as used by Mesa's software renderer for enhanced performance. 293 + If M is selected the module will be called vgem. 294 + 295 + source "drivers/gpu/drm/vkms/Kconfig" 296 + 297 + source "drivers/gpu/drm/exynos/Kconfig" 298 + 299 + source "drivers/gpu/drm/rockchip/Kconfig" 300 + 301 + source "drivers/gpu/drm/vmwgfx/Kconfig" 302 + 303 + source "drivers/gpu/drm/gma500/Kconfig" 304 + 305 + source "drivers/gpu/drm/udl/Kconfig" 306 + 307 + source "drivers/gpu/drm/ast/Kconfig" 308 + 309 + source "drivers/gpu/drm/mgag200/Kconfig" 310 + 311 + source "drivers/gpu/drm/armada/Kconfig" 312 + 313 + source "drivers/gpu/drm/atmel-hlcdc/Kconfig" 314 + 315 + source "drivers/gpu/drm/renesas/Kconfig" 316 + 317 + source "drivers/gpu/drm/sun4i/Kconfig" 318 + 319 + source "drivers/gpu/drm/omapdrm/Kconfig" 320 + 321 + source "drivers/gpu/drm/tilcdc/Kconfig" 322 + 323 + source "drivers/gpu/drm/qxl/Kconfig" 324 + 325 + source "drivers/gpu/drm/virtio/Kconfig" 326 + 327 + source "drivers/gpu/drm/msm/Kconfig" 328 + 329 + source "drivers/gpu/drm/fsl-dcu/Kconfig" 330 + 331 + source "drivers/gpu/drm/tegra/Kconfig" 332 + 333 + source "drivers/gpu/drm/stm/Kconfig" 334 + 335 + source "drivers/gpu/drm/panel/Kconfig" 336 + 337 + source "drivers/gpu/drm/bridge/Kconfig" 338 + 339 + source "drivers/gpu/drm/sti/Kconfig" 340 + 341 + source "drivers/gpu/drm/imx/Kconfig" 342 + 343 + source "drivers/gpu/drm/ingenic/Kconfig" 344 + 345 + source "drivers/gpu/drm/v3d/Kconfig" 346 + 347 + source "drivers/gpu/drm/vc4/Kconfig" 348 + 349 + source "drivers/gpu/drm/loongson/Kconfig" 350 + 351 + source "drivers/gpu/drm/etnaviv/Kconfig" 352 + 353 + source "drivers/gpu/drm/hisilicon/Kconfig" 354 + 355 + source "drivers/gpu/drm/logicvc/Kconfig" 356 + 357 + source "drivers/gpu/drm/mediatek/Kconfig" 358 + 359 + source "drivers/gpu/drm/mxsfb/Kconfig" 360 + 361 + source "drivers/gpu/drm/meson/Kconfig" 362 + 363 + source "drivers/gpu/drm/tiny/Kconfig" 364 + 365 + source "drivers/gpu/drm/pl111/Kconfig" 366 + 367 + source "drivers/gpu/drm/tve200/Kconfig" 368 + 369 + source "drivers/gpu/drm/xen/Kconfig" 370 + 371 + source "drivers/gpu/drm/vboxvideo/Kconfig" 372 + 373 + source "drivers/gpu/drm/lima/Kconfig" 374 + 375 + source "drivers/gpu/drm/panfrost/Kconfig" 376 + 377 + source "drivers/gpu/drm/panthor/Kconfig" 378 + 379 + source "drivers/gpu/drm/aspeed/Kconfig" 380 + 381 + source "drivers/gpu/drm/mcde/Kconfig" 382 + 383 + source "drivers/gpu/drm/tidss/Kconfig" 384 + 385 + source "drivers/gpu/drm/adp/Kconfig" 386 + 387 + source "drivers/gpu/drm/xlnx/Kconfig" 388 + 389 + source "drivers/gpu/drm/gud/Kconfig" 390 + 391 + source "drivers/gpu/drm/sitronix/Kconfig" 392 + 393 + source "drivers/gpu/drm/solomon/Kconfig" 394 + 395 + source "drivers/gpu/drm/sprd/Kconfig" 396 + 397 + source "drivers/gpu/drm/imagination/Kconfig" 398 + 399 + source "drivers/gpu/drm/tyr/Kconfig" 400 + 401 + config DRM_HYPERV 402 + tristate "DRM Support for Hyper-V synthetic video device" 403 + depends on DRM && PCI && HYPERV_VMBUS 404 + select DRM_CLIENT_SELECTION 405 + select DRM_KMS_HELPER 406 + select DRM_GEM_SHMEM_HELPER 407 + help 408 + This is a KMS driver for Hyper-V synthetic video device. Choose this 409 + option if you would like to enable drm driver for Hyper-V virtual 410 + machine. 411 + 412 + If M is selected the module will be called hyperv_drm. 413 + 268 414 # Separate option as not all DRM drivers use it 269 415 config DRM_PANEL_BACKLIGHT_QUIRKS 270 416 tristate
+5 -10
drivers/gpu/drm/hyperv/hyperv_drm_proto.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-only 2 2 /* 3 3 * Copyright 2021 Microsoft 4 - * 5 - * Portions of this code is derived from hyperv_fb.c 6 4 */ 7 5 8 6 #include <linux/hyperv.h> ··· 302 304 * but the Hyper-V host still draws a point as an extra mouse pointer, 303 305 * which is unwanted, especially when Xorg is running. 304 306 * 305 - * The hyperv_fb driver uses synthvid_send_ptr() to hide the unwanted 306 - * pointer, by setting msg.ptr_pos.is_visible = 1 and setting the 307 - * msg.ptr_shape.data. Note: setting msg.ptr_pos.is_visible to 0 doesn't 307 + * Hide the unwanted pointer, by setting msg.ptr_pos.is_visible = 1 and setting 308 + * the msg.ptr_shape.data. Note: setting msg.ptr_pos.is_visible to 0 doesn't 308 309 * work in tests. 309 310 * 310 - * Copy synthvid_send_ptr() to hyperv_drm and rename it to 311 - * hyperv_hide_hw_ptr(). Note: hyperv_hide_hw_ptr() is also called in the 312 - * handler of the SYNTHVID_FEATURE_CHANGE event, otherwise the host still 313 - * draws an extra unwanted mouse pointer after the VM Connection window is 314 - * closed and reopened. 311 + * The hyperv_hide_hw_ptr() is also called in the handler of the 312 + * SYNTHVID_FEATURE_CHANGE event, otherwise the host still draws an extra 313 + * unwanted mouse pointer after the VM Connection window is closed and reopened. 315 314 */ 316 315 int hyperv_hide_hw_ptr(struct hv_device *hdev) 317 316 {
+2 -2
drivers/hv/vmbus_drv.c
··· 2356 2356 } 2357 2357 2358 2358 /* 2359 - * Release the PCI device so hyperv_drm or hyperv_fb driver can 2360 - * grab it later. 2359 + * Release the PCI device so hyperv_drm driver can grab it 2360 + * later. 2361 2361 */ 2362 2362 pci_dev_put(pdev); 2363 2363 }
+4 -1
drivers/staging/fbtft/Kconfig
··· 2 2 menuconfig FB_TFT 3 3 tristate "Support for small TFT LCD display modules" 4 4 depends on FB && SPI 5 - depends on FB_DEVICE 6 5 depends on BACKLIGHT_CLASS_DEVICE 7 6 depends on GPIOLIB || COMPILE_TEST 8 7 select FB_BACKLIGHT 9 8 select FB_SYSMEM_HELPERS_DEFERRED 9 + help 10 + Support for small TFT LCD display modules over SPI bus. FB_DEVICE 11 + is not required, but if enabled, provides sysfs interface for debugging 12 + and gamma curve configuration. 10 13 11 14 if FB_TFT 12 15
+9 -10
drivers/staging/fbtft/fbtft-core.c
··· 365 365 unsigned int val; 366 366 int ret = 1; 367 367 368 - dev_dbg(info->dev, 369 - "%s(regno=%u, red=0x%X, green=0x%X, blue=0x%X, trans=0x%X)\n", 370 - __func__, regno, red, green, blue, transp); 368 + fb_dbg(info, 369 + "regno=%u, red=0x%X, green=0x%X, blue=0x%X, trans=0x%X\n", 370 + regno, red, green, blue, transp); 371 371 372 372 switch (info->fix.visual) { 373 373 case FB_VISUAL_TRUECOLOR: ··· 391 391 struct fbtft_par *par = info->par; 392 392 int ret = -EINVAL; 393 393 394 - dev_dbg(info->dev, "%s(blank=%d)\n", 395 - __func__, blank); 394 + fb_dbg(info, "blank=%d\n", blank); 396 395 397 396 if (!par->fbtftops.blank) 398 397 return ret; ··· 792 793 if (spi) 793 794 sprintf(text2, ", spi%d.%d at %d MHz", spi->controller->bus_num, 794 795 spi_get_chipselect(spi, 0), spi->max_speed_hz / 1000000); 795 - dev_info(fb_info->dev, 796 - "%s frame buffer, %dx%d, %d KiB video memory%s, fps=%lu%s\n", 797 - fb_info->fix.id, fb_info->var.xres, fb_info->var.yres, 798 - fb_info->fix.smem_len >> 10, text1, 799 - HZ / fb_info->fbdefio->delay, text2); 796 + fb_dbg(fb_info, 797 + "%s frame buffer, %dx%d, %d KiB video memory%s, fps=%lu%s\n", 798 + fb_info->fix.id, fb_info->var.xres, fb_info->var.yres, 799 + fb_info->fix.smem_len >> 10, text1, 800 + HZ / fb_info->fbdefio->delay, text2); 800 801 801 802 /* Turn on backlight if available */ 802 803 if (fb_info->bl_dev) {
+16 -4
drivers/staging/fbtft/fbtft-sysfs.c
··· 203 203 204 204 void fbtft_sysfs_init(struct fbtft_par *par) 205 205 { 206 - device_create_file(par->info->dev, &debug_device_attr); 206 + struct device *dev; 207 + 208 + dev = dev_of_fbinfo(par->info); 209 + if (!dev) 210 + return; 211 + 212 + device_create_file(dev, &debug_device_attr); 207 213 if (par->gamma.curves && par->fbtftops.set_gamma) 208 - device_create_file(par->info->dev, &gamma_device_attrs[0]); 214 + device_create_file(dev, &gamma_device_attrs[0]); 209 215 } 210 216 211 217 void fbtft_sysfs_exit(struct fbtft_par *par) 212 218 { 213 - device_remove_file(par->info->dev, &debug_device_attr); 219 + struct device *dev; 220 + 221 + dev = dev_of_fbinfo(par->info); 222 + if (!dev) 223 + return; 224 + 225 + device_remove_file(dev, &debug_device_attr); 214 226 if (par->gamma.curves && par->fbtftops.set_gamma) 215 - device_remove_file(par->info->dev, &gamma_device_attrs[0]); 227 + device_remove_file(dev, &gamma_device_attrs[0]); 216 228 }
-1
drivers/tty/vt/vt.c
··· 3230 3230 goto rescan_last_byte; 3231 3231 } 3232 3232 con_flush(vc, &draw); 3233 - console_conditional_schedule(); 3234 3233 notify_update(vc); 3235 3234 3236 3235 return n;
+2 -2
drivers/video/console/newport_con.c
··· 95 95 96 96 static const struct linux_logo *newport_show_logo(void) 97 97 { 98 - #ifdef CONFIG_LOGO_SGI_CLUT224 98 + #ifdef CONFIG_LOGO_LINUX_CLUT224 99 99 const struct linux_logo *logo = fb_find_logo(8); 100 100 const unsigned char *clut; 101 101 const unsigned char *data; ··· 127 127 return logo; 128 128 #else 129 129 return NULL; 130 - #endif /* CONFIG_LOGO_SGI_CLUT224 */ 130 + #endif /* CONFIG_LOGO_LINUX_CLUT224 */ 131 131 } 132 132 133 133 static inline void newport_clear_screen(int xstart, int ystart, int xend,
-11
drivers/video/fbdev/Kconfig
··· 1770 1770 and could also have been called by other names when coupled with 1771 1771 a bridge adapter. 1772 1772 1773 - config FB_HYPERV 1774 - tristate "Microsoft Hyper-V Synthetic Video support (DEPRECATED)" 1775 - depends on FB && HYPERV_VMBUS 1776 - select DMA_CMA if HAVE_DMA_CONTIGUOUS && CMA 1777 - select FB_IOMEM_HELPERS_DEFERRED 1778 - help 1779 - This framebuffer driver supports Microsoft Hyper-V Synthetic Video. 1780 - 1781 - This driver is deprecated, please use the Hyper-V DRM driver at 1782 - drivers/gpu/drm/hyperv (CONFIG_DRM_HYPERV) instead. 1783 - 1784 1773 config FB_SIMPLE 1785 1774 tristate "Simple framebuffer support" 1786 1775 depends on FB
-1
drivers/video/fbdev/Makefile
··· 111 111 obj-$(CONFIG_XEN_FBDEV_FRONTEND) += xen-fbfront.o 112 112 obj-$(CONFIG_FB_CARMINE) += carminefb.o 113 113 obj-$(CONFIG_FB_MB862XX) += mb862xx/ 114 - obj-$(CONFIG_FB_HYPERV) += hyperv_fb.o 115 114 obj-$(CONFIG_FB_OPENCORES) += ocfb.o 116 115 obj-$(CONFIG_FB_SM712) += sm712fb.o 117 116
+4 -1
drivers/video/fbdev/au1100fb.c
··· 567 567 int au1100fb_drv_resume(struct platform_device *dev) 568 568 { 569 569 struct au1100fb_device *fbdev = platform_get_drvdata(dev); 570 + int ret; 570 571 571 572 if (!fbdev) 572 573 return 0; 573 574 574 575 memcpy(fbdev->regs, &fbregs, sizeof(struct au1100fb_regs)); 575 576 576 - clk_enable(fbdev->lcdclk); 577 + ret = clk_enable(fbdev->lcdclk); 578 + if (ret) 579 + return ret; 577 580 578 581 /* Unblank the LCD */ 579 582 au1100fb_fb_blank(VESA_NO_BLANKING, &fbdev->info);
+4 -2
drivers/video/fbdev/au1200fb.c
··· 1724 1724 1725 1725 /* Now hook interrupt too */ 1726 1726 irq = platform_get_irq(dev, 0); 1727 - if (irq < 0) 1728 - return irq; 1727 + if (irq < 0) { 1728 + ret = irq; 1729 + goto failed; 1730 + } 1729 1731 1730 1732 ret = request_irq(irq, au1200fb_handle_irq, 1731 1733 IRQF_SHARED, "lcd", (void *)dev);
+2 -7
drivers/video/fbdev/core/fbcon.c
··· 1068 1068 return; 1069 1069 1070 1070 if (!info->fbcon_par) 1071 - con2fb_acquire_newinfo(vc, info, vc->vc_num); 1071 + if (con2fb_acquire_newinfo(vc, info, vc->vc_num)) 1072 + return; 1072 1073 1073 1074 /* If we are not the first console on this 1074 1075 fb, copy the font from that console */ ··· 1608 1607 start = s; 1609 1608 } 1610 1609 } 1611 - console_conditional_schedule(); 1612 1610 s++; 1613 1611 } while (s < le); 1614 1612 if (s > start) 1615 1613 fbcon_putcs(vc, start, s - start, dy, x); 1616 - console_conditional_schedule(); 1617 1614 dy++; 1618 1615 } 1619 1616 } ··· 1647 1648 } 1648 1649 1649 1650 scr_writew(c, d); 1650 - console_conditional_schedule(); 1651 1651 s++; 1652 1652 d++; 1653 1653 } while (s < le); 1654 1654 if (s > start) 1655 1655 par->bitops->bmove(vc, info, line + ycount, x, line, x, 1, 1656 1656 s - start); 1657 - console_conditional_schedule(); 1658 1657 if (ycount > 0) 1659 1658 line++; 1660 1659 else { ··· 1700 1703 } 1701 1704 } 1702 1705 scr_writew(c, d); 1703 - console_conditional_schedule(); 1704 1706 s++; 1705 1707 d++; 1706 1708 } while (s < le); 1707 1709 if (s > start) 1708 1710 fbcon_putcs(vc, start, s - start, line, x); 1709 - console_conditional_schedule(); 1710 1711 if (offset > 0) 1711 1712 line++; 1712 1713 else {
-1
drivers/video/fbdev/core/fbcon.h
··· 30 30 #ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION 31 31 u_short scrollmode; /* Scroll Method, use fb_scrollmode() */ 32 32 #endif 33 - u_short inverse; /* != 0 text black on white as default */ 34 33 short yscroll; /* Hardware scrolling */ 35 34 int vrows; /* number of virtual rows */ 36 35 int cursor_shape;
+1 -1
drivers/video/fbdev/core/fbmem.c
··· 100 100 void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 idx, u32 height, 101 101 u32 shift_high, u32 shift_low, u32 mod) 102 102 { 103 - u8 mask = (u8) (0xfff << shift_high), tmp; 103 + u8 mask = (u8) (0xff << shift_high), tmp; 104 104 int i, j; 105 105 106 106 for (i = height; i--; ) {
+3 -33
drivers/video/fbdev/core/fbsysfs.c
··· 12 12 13 13 #include "fb_internal.h" 14 14 15 - #define FB_SYSFS_FLAG_ATTR 1 16 - 17 15 static int activate(struct fb_info *fb_info, struct fb_var_screeninfo *var) 18 16 { 19 17 int err; ··· 449 451 NULL, 450 452 }; 451 453 452 - static const struct attribute_group fb_device_attr_group = { 453 - .attrs = fb_device_attrs, 454 - }; 455 - 456 - static int fb_init_device(struct fb_info *fb_info) 457 - { 458 - int ret; 459 - 460 - dev_set_drvdata(fb_info->dev, fb_info); 461 - 462 - fb_info->class_flag |= FB_SYSFS_FLAG_ATTR; 463 - 464 - ret = device_add_group(fb_info->dev, &fb_device_attr_group); 465 - if (ret) 466 - fb_info->class_flag &= ~FB_SYSFS_FLAG_ATTR; 467 - 468 - return 0; 469 - } 470 - 471 - static void fb_cleanup_device(struct fb_info *fb_info) 472 - { 473 - if (fb_info->class_flag & FB_SYSFS_FLAG_ATTR) { 474 - device_remove_group(fb_info->dev, &fb_device_attr_group); 475 - 476 - fb_info->class_flag &= ~FB_SYSFS_FLAG_ATTR; 477 - } 478 - } 454 + ATTRIBUTE_GROUPS(fb_device); 479 455 480 456 int fb_device_create(struct fb_info *fb_info) 481 457 { ··· 457 485 dev_t devt = MKDEV(FB_MAJOR, node); 458 486 int ret; 459 487 460 - fb_info->dev = device_create(fb_class, fb_info->device, devt, NULL, "fb%d", node); 488 + fb_info->dev = device_create_with_groups(fb_class, fb_info->device, devt, fb_info, 489 + fb_device_groups, "fb%d", node); 461 490 if (IS_ERR(fb_info->dev)) { 462 491 /* Not fatal */ 463 492 ret = PTR_ERR(fb_info->dev); 464 493 pr_warn("Unable to create device for framebuffer %d; error %d\n", node, ret); 465 494 fb_info->dev = NULL; 466 - } else { 467 - fb_init_device(fb_info); 468 495 } 469 496 470 497 return 0; ··· 476 505 if (!fb_info->dev) 477 506 return; 478 507 479 - fb_cleanup_device(fb_info); 480 508 device_destroy(fb_class, devt); 481 509 fb_info->dev = NULL; 482 510 }
+13 -1
drivers/video/fbdev/ffb.c
··· 335 335 }; 336 336 337 337 #define FFB_DAC_UCTRL 0x1001 /* User Control */ 338 + #define FFB_DAC_UCTRL_OVENAB 0x00000008 /* Overlay Enable */ 339 + #define FFB_DAC_UCTRL_WMODE 0x00000030 /* Window Mode */ 340 + #define FFB_DAC_UCTRL_WM_COMB 0x00000000 /* Window Mode = Combined */ 338 341 #define FFB_DAC_UCTRL_MANREV 0x00000f00 /* 4-bit Manufacturing Revision */ 339 342 #define FFB_DAC_UCTRL_MANREV_SHIFT 8 340 343 #define FFB_DAC_TGEN 0x6000 /* Timing Generator */ ··· 428 425 { 429 426 struct ffb_fbc __iomem *fbc = par->fbc; 430 427 struct ffb_dac __iomem *dac = par->dac; 431 - unsigned long flags; 428 + unsigned long flags, uctrl; 432 429 433 430 spin_lock_irqsave(&par->lock, flags); 434 431 FFBWait(par); ··· 452 449 else 453 450 upa_writel((FFB_DAC_CUR_CTRL_P0 | 454 451 FFB_DAC_CUR_CTRL_P1), &dac->value2); 452 + 453 + /* Disable overlay and window modes. */ 454 + upa_writel(FFB_DAC_UCTRL, &dac->type); 455 + uctrl = upa_readl(&dac->value); 456 + uctrl &= ~FFB_DAC_UCTRL_WMODE; 457 + uctrl |= FFB_DAC_UCTRL_WM_COMB; 458 + uctrl &= ~FFB_DAC_UCTRL_OVENAB; 459 + upa_writel(FFB_DAC_UCTRL, &dac->type); 460 + upa_writel(uctrl, &dac->value); 455 461 456 462 spin_unlock_irqrestore(&par->lock, flags); 457 463 }
-1388
drivers/video/fbdev/hyperv_fb.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * Copyright (c) 2012, Microsoft Corporation. 4 - * 5 - * Author: 6 - * Haiyang Zhang <haiyangz@microsoft.com> 7 - */ 8 - 9 - /* 10 - * Hyper-V Synthetic Video Frame Buffer Driver 11 - * 12 - * This is the driver for the Hyper-V Synthetic Video, which supports 13 - * screen resolution up to Full HD 1920x1080 with 32 bit color on Windows 14 - * Server 2012, and 1600x1200 with 16 bit color on Windows Server 2008 R2 15 - * or earlier. 16 - * 17 - * It also solves the double mouse cursor issue of the emulated video mode. 18 - * 19 - * The default screen resolution is 1152x864, which may be changed by a 20 - * kernel parameter: 21 - * video=hyperv_fb:<width>x<height> 22 - * For example: video=hyperv_fb:1280x1024 23 - * 24 - * Portrait orientation is also supported: 25 - * For example: video=hyperv_fb:864x1152 26 - * 27 - * When a Windows 10 RS5+ host is used, the virtual machine screen 28 - * resolution is obtained from the host. The "video=hyperv_fb" option is 29 - * not needed, but still can be used to overwrite what the host specifies. 30 - * The VM resolution on the host could be set by executing the powershell 31 - * "set-vmvideo" command. For example 32 - * set-vmvideo -vmname name -horizontalresolution:1920 \ 33 - * -verticalresolution:1200 -resolutiontype single 34 - * 35 - * Gen 1 VMs also support direct using VM's physical memory for framebuffer. 36 - * It could improve the efficiency and performance for framebuffer and VM. 37 - * This requires to allocate contiguous physical memory from Linux kernel's 38 - * CMA memory allocator. To enable this, supply a kernel parameter to give 39 - * enough memory space to CMA allocator for framebuffer. For example: 40 - * cma=130m 41 - * This gives 130MB memory to CMA allocator that can be allocated to 42 - * framebuffer. For reference, 8K resolution (7680x4320) takes about 43 - * 127MB memory. 44 - */ 45 - 46 - #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 47 - 48 - #include <linux/aperture.h> 49 - #include <linux/module.h> 50 - #include <linux/kernel.h> 51 - #include <linux/vmalloc.h> 52 - #include <linux/init.h> 53 - #include <linux/completion.h> 54 - #include <linux/fb.h> 55 - #include <linux/pci.h> 56 - #include <linux/panic_notifier.h> 57 - #include <linux/efi.h> 58 - #include <linux/console.h> 59 - 60 - #include <linux/hyperv.h> 61 - 62 - /* Hyper-V Synthetic Video Protocol definitions and structures */ 63 - #define MAX_VMBUS_PKT_SIZE 0x4000 64 - 65 - #define SYNTHVID_VERSION(major, minor) ((minor) << 16 | (major)) 66 - /* Support for VERSION_WIN7 is removed. #define is retained for reference. */ 67 - #define SYNTHVID_VERSION_WIN7 SYNTHVID_VERSION(3, 0) 68 - #define SYNTHVID_VERSION_WIN8 SYNTHVID_VERSION(3, 2) 69 - #define SYNTHVID_VERSION_WIN10 SYNTHVID_VERSION(3, 5) 70 - 71 - #define SYNTHVID_VER_GET_MAJOR(ver) (ver & 0x0000ffff) 72 - #define SYNTHVID_VER_GET_MINOR(ver) ((ver & 0xffff0000) >> 16) 73 - 74 - #define SYNTHVID_DEPTH_WIN8 32 75 - #define SYNTHVID_FB_SIZE_WIN8 (8 * 1024 * 1024) 76 - 77 - enum pipe_msg_type { 78 - PIPE_MSG_INVALID, 79 - PIPE_MSG_DATA, 80 - PIPE_MSG_MAX 81 - }; 82 - 83 - struct pipe_msg_hdr { 84 - u32 type; 85 - u32 size; /* size of message after this field */ 86 - } __packed; 87 - 88 - 89 - enum synthvid_msg_type { 90 - SYNTHVID_ERROR = 0, 91 - SYNTHVID_VERSION_REQUEST = 1, 92 - SYNTHVID_VERSION_RESPONSE = 2, 93 - SYNTHVID_VRAM_LOCATION = 3, 94 - SYNTHVID_VRAM_LOCATION_ACK = 4, 95 - SYNTHVID_SITUATION_UPDATE = 5, 96 - SYNTHVID_SITUATION_UPDATE_ACK = 6, 97 - SYNTHVID_POINTER_POSITION = 7, 98 - SYNTHVID_POINTER_SHAPE = 8, 99 - SYNTHVID_FEATURE_CHANGE = 9, 100 - SYNTHVID_DIRT = 10, 101 - SYNTHVID_RESOLUTION_REQUEST = 13, 102 - SYNTHVID_RESOLUTION_RESPONSE = 14, 103 - 104 - SYNTHVID_MAX = 15 105 - }; 106 - 107 - #define SYNTHVID_EDID_BLOCK_SIZE 128 108 - #define SYNTHVID_MAX_RESOLUTION_COUNT 64 109 - 110 - struct hvd_screen_info { 111 - u16 width; 112 - u16 height; 113 - } __packed; 114 - 115 - struct synthvid_msg_hdr { 116 - u32 type; 117 - u32 size; /* size of this header + payload after this field*/ 118 - } __packed; 119 - 120 - struct synthvid_version_req { 121 - u32 version; 122 - } __packed; 123 - 124 - struct synthvid_version_resp { 125 - u32 version; 126 - u8 is_accepted; 127 - u8 max_video_outputs; 128 - } __packed; 129 - 130 - struct synthvid_supported_resolution_req { 131 - u8 maximum_resolution_count; 132 - } __packed; 133 - 134 - struct synthvid_supported_resolution_resp { 135 - u8 edid_block[SYNTHVID_EDID_BLOCK_SIZE]; 136 - u8 resolution_count; 137 - u8 default_resolution_index; 138 - u8 is_standard; 139 - struct hvd_screen_info 140 - supported_resolution[SYNTHVID_MAX_RESOLUTION_COUNT]; 141 - } __packed; 142 - 143 - struct synthvid_vram_location { 144 - u64 user_ctx; 145 - u8 is_vram_gpa_specified; 146 - u64 vram_gpa; 147 - } __packed; 148 - 149 - struct synthvid_vram_location_ack { 150 - u64 user_ctx; 151 - } __packed; 152 - 153 - struct video_output_situation { 154 - u8 active; 155 - u32 vram_offset; 156 - u8 depth_bits; 157 - u32 width_pixels; 158 - u32 height_pixels; 159 - u32 pitch_bytes; 160 - } __packed; 161 - 162 - struct synthvid_situation_update { 163 - u64 user_ctx; 164 - u8 video_output_count; 165 - struct video_output_situation video_output[1]; 166 - } __packed; 167 - 168 - struct synthvid_situation_update_ack { 169 - u64 user_ctx; 170 - } __packed; 171 - 172 - struct synthvid_pointer_position { 173 - u8 is_visible; 174 - u8 video_output; 175 - s32 image_x; 176 - s32 image_y; 177 - } __packed; 178 - 179 - 180 - #define CURSOR_MAX_X 96 181 - #define CURSOR_MAX_Y 96 182 - #define CURSOR_ARGB_PIXEL_SIZE 4 183 - #define CURSOR_MAX_SIZE (CURSOR_MAX_X * CURSOR_MAX_Y * CURSOR_ARGB_PIXEL_SIZE) 184 - #define CURSOR_COMPLETE (-1) 185 - 186 - struct synthvid_pointer_shape { 187 - u8 part_idx; 188 - u8 is_argb; 189 - u32 width; /* CURSOR_MAX_X at most */ 190 - u32 height; /* CURSOR_MAX_Y at most */ 191 - u32 hot_x; /* hotspot relative to upper-left of pointer image */ 192 - u32 hot_y; 193 - u8 data[4]; 194 - } __packed; 195 - 196 - struct synthvid_feature_change { 197 - u8 is_dirt_needed; 198 - u8 is_ptr_pos_needed; 199 - u8 is_ptr_shape_needed; 200 - u8 is_situ_needed; 201 - } __packed; 202 - 203 - struct rect { 204 - s32 x1, y1; /* top left corner */ 205 - s32 x2, y2; /* bottom right corner, exclusive */ 206 - } __packed; 207 - 208 - struct synthvid_dirt { 209 - u8 video_output; 210 - u8 dirt_count; 211 - struct rect rect[1]; 212 - } __packed; 213 - 214 - struct synthvid_msg { 215 - struct pipe_msg_hdr pipe_hdr; 216 - struct synthvid_msg_hdr vid_hdr; 217 - union { 218 - struct synthvid_version_req ver_req; 219 - struct synthvid_version_resp ver_resp; 220 - struct synthvid_vram_location vram; 221 - struct synthvid_vram_location_ack vram_ack; 222 - struct synthvid_situation_update situ; 223 - struct synthvid_situation_update_ack situ_ack; 224 - struct synthvid_pointer_position ptr_pos; 225 - struct synthvid_pointer_shape ptr_shape; 226 - struct synthvid_feature_change feature_chg; 227 - struct synthvid_dirt dirt; 228 - struct synthvid_supported_resolution_req resolution_req; 229 - struct synthvid_supported_resolution_resp resolution_resp; 230 - }; 231 - } __packed; 232 - 233 - 234 - /* FB driver definitions and structures */ 235 - #define HVFB_WIDTH 1152 /* default screen width */ 236 - #define HVFB_HEIGHT 864 /* default screen height */ 237 - #define HVFB_WIDTH_MIN 640 238 - #define HVFB_HEIGHT_MIN 480 239 - 240 - #define RING_BUFSIZE (256 * 1024) 241 - #define VSP_TIMEOUT (10 * HZ) 242 - #define HVFB_UPDATE_DELAY (HZ / 20) 243 - #define HVFB_ONDEMAND_THROTTLE (HZ / 20) 244 - 245 - struct hvfb_par { 246 - struct fb_info *info; 247 - struct resource *mem; 248 - bool fb_ready; /* fb device is ready */ 249 - struct completion wait; 250 - u32 synthvid_version; 251 - 252 - struct delayed_work dwork; 253 - bool update; 254 - bool update_saved; /* The value of 'update' before hibernation */ 255 - 256 - u32 pseudo_palette[16]; 257 - u8 init_buf[MAX_VMBUS_PKT_SIZE]; 258 - u8 recv_buf[MAX_VMBUS_PKT_SIZE]; 259 - 260 - /* If true, the VSC notifies the VSP on every framebuffer change */ 261 - bool synchronous_fb; 262 - 263 - /* If true, need to copy from deferred IO mem to framebuffer mem */ 264 - bool need_docopy; 265 - 266 - struct notifier_block hvfb_panic_nb; 267 - 268 - /* Memory for deferred IO and frame buffer itself */ 269 - unsigned char *dio_vp; 270 - unsigned char *mmio_vp; 271 - phys_addr_t mmio_pp; 272 - 273 - /* Dirty rectangle, protected by delayed_refresh_lock */ 274 - int x1, y1, x2, y2; 275 - bool delayed_refresh; 276 - spinlock_t delayed_refresh_lock; 277 - }; 278 - 279 - static uint screen_width = HVFB_WIDTH; 280 - static uint screen_height = HVFB_HEIGHT; 281 - static uint screen_depth; 282 - static uint screen_fb_size; 283 - static uint dio_fb_size; /* FB size for deferred IO */ 284 - 285 - static void hvfb_putmem(struct fb_info *info); 286 - 287 - /* Send message to Hyper-V host */ 288 - static inline int synthvid_send(struct hv_device *hdev, 289 - struct synthvid_msg *msg) 290 - { 291 - static atomic64_t request_id = ATOMIC64_INIT(0); 292 - int ret; 293 - 294 - msg->pipe_hdr.type = PIPE_MSG_DATA; 295 - msg->pipe_hdr.size = msg->vid_hdr.size; 296 - 297 - ret = vmbus_sendpacket(hdev->channel, msg, 298 - msg->vid_hdr.size + sizeof(struct pipe_msg_hdr), 299 - atomic64_inc_return(&request_id), 300 - VM_PKT_DATA_INBAND, 0); 301 - 302 - if (ret) 303 - pr_err_ratelimited("Unable to send packet via vmbus; error %d\n", ret); 304 - 305 - return ret; 306 - } 307 - 308 - 309 - /* Send screen resolution info to host */ 310 - static int synthvid_send_situ(struct hv_device *hdev) 311 - { 312 - struct fb_info *info = hv_get_drvdata(hdev); 313 - struct synthvid_msg msg; 314 - 315 - if (!info) 316 - return -ENODEV; 317 - 318 - memset(&msg, 0, sizeof(struct synthvid_msg)); 319 - 320 - msg.vid_hdr.type = SYNTHVID_SITUATION_UPDATE; 321 - msg.vid_hdr.size = sizeof(struct synthvid_msg_hdr) + 322 - sizeof(struct synthvid_situation_update); 323 - msg.situ.user_ctx = 0; 324 - msg.situ.video_output_count = 1; 325 - msg.situ.video_output[0].active = 1; 326 - msg.situ.video_output[0].vram_offset = 0; 327 - msg.situ.video_output[0].depth_bits = info->var.bits_per_pixel; 328 - msg.situ.video_output[0].width_pixels = info->var.xres; 329 - msg.situ.video_output[0].height_pixels = info->var.yres; 330 - msg.situ.video_output[0].pitch_bytes = info->fix.line_length; 331 - 332 - synthvid_send(hdev, &msg); 333 - 334 - return 0; 335 - } 336 - 337 - /* Send mouse pointer info to host */ 338 - static int synthvid_send_ptr(struct hv_device *hdev) 339 - { 340 - struct synthvid_msg msg; 341 - 342 - memset(&msg, 0, sizeof(struct synthvid_msg)); 343 - msg.vid_hdr.type = SYNTHVID_POINTER_POSITION; 344 - msg.vid_hdr.size = sizeof(struct synthvid_msg_hdr) + 345 - sizeof(struct synthvid_pointer_position); 346 - msg.ptr_pos.is_visible = 1; 347 - msg.ptr_pos.video_output = 0; 348 - msg.ptr_pos.image_x = 0; 349 - msg.ptr_pos.image_y = 0; 350 - synthvid_send(hdev, &msg); 351 - 352 - memset(&msg, 0, sizeof(struct synthvid_msg)); 353 - msg.vid_hdr.type = SYNTHVID_POINTER_SHAPE; 354 - msg.vid_hdr.size = sizeof(struct synthvid_msg_hdr) + 355 - sizeof(struct synthvid_pointer_shape); 356 - msg.ptr_shape.part_idx = CURSOR_COMPLETE; 357 - msg.ptr_shape.is_argb = 1; 358 - msg.ptr_shape.width = 1; 359 - msg.ptr_shape.height = 1; 360 - msg.ptr_shape.hot_x = 0; 361 - msg.ptr_shape.hot_y = 0; 362 - msg.ptr_shape.data[0] = 0; 363 - msg.ptr_shape.data[1] = 1; 364 - msg.ptr_shape.data[2] = 1; 365 - msg.ptr_shape.data[3] = 1; 366 - synthvid_send(hdev, &msg); 367 - 368 - return 0; 369 - } 370 - 371 - /* Send updated screen area (dirty rectangle) location to host */ 372 - static int 373 - synthvid_update(struct fb_info *info, int x1, int y1, int x2, int y2) 374 - { 375 - struct hv_device *hdev = device_to_hv_device(info->device); 376 - struct synthvid_msg msg; 377 - 378 - memset(&msg, 0, sizeof(struct synthvid_msg)); 379 - if (x2 == INT_MAX) 380 - x2 = info->var.xres; 381 - if (y2 == INT_MAX) 382 - y2 = info->var.yres; 383 - 384 - msg.vid_hdr.type = SYNTHVID_DIRT; 385 - msg.vid_hdr.size = sizeof(struct synthvid_msg_hdr) + 386 - sizeof(struct synthvid_dirt); 387 - msg.dirt.video_output = 0; 388 - msg.dirt.dirt_count = 1; 389 - msg.dirt.rect[0].x1 = (x1 > x2) ? 0 : x1; 390 - msg.dirt.rect[0].y1 = (y1 > y2) ? 0 : y1; 391 - msg.dirt.rect[0].x2 = 392 - (x2 < x1 || x2 > info->var.xres) ? info->var.xres : x2; 393 - msg.dirt.rect[0].y2 = 394 - (y2 < y1 || y2 > info->var.yres) ? info->var.yres : y2; 395 - 396 - synthvid_send(hdev, &msg); 397 - 398 - return 0; 399 - } 400 - 401 - static void hvfb_docopy(struct hvfb_par *par, 402 - unsigned long offset, 403 - unsigned long size) 404 - { 405 - if (!par || !par->mmio_vp || !par->dio_vp || !par->fb_ready || 406 - size == 0 || offset >= dio_fb_size) 407 - return; 408 - 409 - if (offset + size > dio_fb_size) 410 - size = dio_fb_size - offset; 411 - 412 - memcpy(par->mmio_vp + offset, par->dio_vp + offset, size); 413 - } 414 - 415 - /* Deferred IO callback */ 416 - static void synthvid_deferred_io(struct fb_info *p, struct list_head *pagereflist) 417 - { 418 - struct hvfb_par *par = p->par; 419 - struct fb_deferred_io_pageref *pageref; 420 - unsigned long start, end; 421 - int y1, y2, miny, maxy; 422 - 423 - miny = INT_MAX; 424 - maxy = 0; 425 - 426 - /* 427 - * Merge dirty pages. It is possible that last page cross 428 - * over the end of frame buffer row yres. This is taken care of 429 - * in synthvid_update function by clamping the y2 430 - * value to yres. 431 - */ 432 - list_for_each_entry(pageref, pagereflist, list) { 433 - start = pageref->offset; 434 - end = start + PAGE_SIZE - 1; 435 - y1 = start / p->fix.line_length; 436 - y2 = end / p->fix.line_length; 437 - miny = min_t(int, miny, y1); 438 - maxy = max_t(int, maxy, y2); 439 - 440 - /* Copy from dio space to mmio address */ 441 - if (par->fb_ready && par->need_docopy) 442 - hvfb_docopy(par, start, PAGE_SIZE); 443 - } 444 - 445 - if (par->fb_ready && par->update) 446 - synthvid_update(p, 0, miny, p->var.xres, maxy + 1); 447 - } 448 - 449 - static struct fb_deferred_io synthvid_defio = { 450 - .delay = HZ / 20, 451 - .deferred_io = synthvid_deferred_io, 452 - }; 453 - 454 - /* 455 - * Actions on received messages from host: 456 - * Complete the wait event. 457 - * Or, reply with screen and cursor info. 458 - */ 459 - static void synthvid_recv_sub(struct hv_device *hdev) 460 - { 461 - struct fb_info *info = hv_get_drvdata(hdev); 462 - struct hvfb_par *par; 463 - struct synthvid_msg *msg; 464 - 465 - if (!info) 466 - return; 467 - 468 - par = info->par; 469 - msg = (struct synthvid_msg *)par->recv_buf; 470 - 471 - /* Complete the wait event */ 472 - if (msg->vid_hdr.type == SYNTHVID_VERSION_RESPONSE || 473 - msg->vid_hdr.type == SYNTHVID_RESOLUTION_RESPONSE || 474 - msg->vid_hdr.type == SYNTHVID_VRAM_LOCATION_ACK) { 475 - memcpy(par->init_buf, msg, MAX_VMBUS_PKT_SIZE); 476 - complete(&par->wait); 477 - return; 478 - } 479 - 480 - /* Reply with screen and cursor info */ 481 - if (msg->vid_hdr.type == SYNTHVID_FEATURE_CHANGE) { 482 - if (par->fb_ready) { 483 - synthvid_send_ptr(hdev); 484 - synthvid_send_situ(hdev); 485 - } 486 - 487 - par->update = msg->feature_chg.is_dirt_needed; 488 - if (par->update) 489 - schedule_delayed_work(&par->dwork, HVFB_UPDATE_DELAY); 490 - } 491 - } 492 - 493 - /* Receive callback for messages from the host */ 494 - static void synthvid_receive(void *ctx) 495 - { 496 - struct hv_device *hdev = ctx; 497 - struct fb_info *info = hv_get_drvdata(hdev); 498 - struct hvfb_par *par; 499 - struct synthvid_msg *recv_buf; 500 - u32 bytes_recvd; 501 - u64 req_id; 502 - int ret; 503 - 504 - if (!info) 505 - return; 506 - 507 - par = info->par; 508 - recv_buf = (struct synthvid_msg *)par->recv_buf; 509 - 510 - do { 511 - ret = vmbus_recvpacket(hdev->channel, recv_buf, 512 - MAX_VMBUS_PKT_SIZE, 513 - &bytes_recvd, &req_id); 514 - if (bytes_recvd > 0 && 515 - recv_buf->pipe_hdr.type == PIPE_MSG_DATA) 516 - synthvid_recv_sub(hdev); 517 - } while (bytes_recvd > 0 && ret == 0); 518 - } 519 - 520 - /* Check if the ver1 version is equal or greater than ver2 */ 521 - static inline bool synthvid_ver_ge(u32 ver1, u32 ver2) 522 - { 523 - if (SYNTHVID_VER_GET_MAJOR(ver1) > SYNTHVID_VER_GET_MAJOR(ver2) || 524 - (SYNTHVID_VER_GET_MAJOR(ver1) == SYNTHVID_VER_GET_MAJOR(ver2) && 525 - SYNTHVID_VER_GET_MINOR(ver1) >= SYNTHVID_VER_GET_MINOR(ver2))) 526 - return true; 527 - 528 - return false; 529 - } 530 - 531 - /* Check synthetic video protocol version with the host */ 532 - static int synthvid_negotiate_ver(struct hv_device *hdev, u32 ver) 533 - { 534 - struct fb_info *info = hv_get_drvdata(hdev); 535 - struct hvfb_par *par = info->par; 536 - struct synthvid_msg *msg = (struct synthvid_msg *)par->init_buf; 537 - int ret = 0; 538 - unsigned long t; 539 - 540 - memset(msg, 0, sizeof(struct synthvid_msg)); 541 - msg->vid_hdr.type = SYNTHVID_VERSION_REQUEST; 542 - msg->vid_hdr.size = sizeof(struct synthvid_msg_hdr) + 543 - sizeof(struct synthvid_version_req); 544 - msg->ver_req.version = ver; 545 - synthvid_send(hdev, msg); 546 - 547 - t = wait_for_completion_timeout(&par->wait, VSP_TIMEOUT); 548 - if (!t) { 549 - pr_err("Time out on waiting version response\n"); 550 - ret = -ETIMEDOUT; 551 - goto out; 552 - } 553 - if (!msg->ver_resp.is_accepted) { 554 - ret = -ENODEV; 555 - goto out; 556 - } 557 - 558 - par->synthvid_version = ver; 559 - pr_info("Synthvid Version major %d, minor %d\n", 560 - SYNTHVID_VER_GET_MAJOR(ver), SYNTHVID_VER_GET_MINOR(ver)); 561 - 562 - out: 563 - return ret; 564 - } 565 - 566 - /* Get current resolution from the host */ 567 - static int synthvid_get_supported_resolution(struct hv_device *hdev) 568 - { 569 - struct fb_info *info = hv_get_drvdata(hdev); 570 - struct hvfb_par *par = info->par; 571 - struct synthvid_msg *msg = (struct synthvid_msg *)par->init_buf; 572 - int ret = 0; 573 - unsigned long t; 574 - u8 index; 575 - 576 - memset(msg, 0, sizeof(struct synthvid_msg)); 577 - msg->vid_hdr.type = SYNTHVID_RESOLUTION_REQUEST; 578 - msg->vid_hdr.size = sizeof(struct synthvid_msg_hdr) + 579 - sizeof(struct synthvid_supported_resolution_req); 580 - 581 - msg->resolution_req.maximum_resolution_count = 582 - SYNTHVID_MAX_RESOLUTION_COUNT; 583 - synthvid_send(hdev, msg); 584 - 585 - t = wait_for_completion_timeout(&par->wait, VSP_TIMEOUT); 586 - if (!t) { 587 - pr_err("Time out on waiting resolution response\n"); 588 - ret = -ETIMEDOUT; 589 - goto out; 590 - } 591 - 592 - if (msg->resolution_resp.resolution_count == 0) { 593 - pr_err("No supported resolutions\n"); 594 - ret = -ENODEV; 595 - goto out; 596 - } 597 - 598 - index = msg->resolution_resp.default_resolution_index; 599 - if (index >= msg->resolution_resp.resolution_count) { 600 - pr_err("Invalid resolution index: %d\n", index); 601 - ret = -ENODEV; 602 - goto out; 603 - } 604 - 605 - screen_width = 606 - msg->resolution_resp.supported_resolution[index].width; 607 - screen_height = 608 - msg->resolution_resp.supported_resolution[index].height; 609 - 610 - out: 611 - return ret; 612 - } 613 - 614 - /* Connect to VSP (Virtual Service Provider) on host */ 615 - static int synthvid_connect_vsp(struct hv_device *hdev) 616 - { 617 - struct fb_info *info = hv_get_drvdata(hdev); 618 - struct hvfb_par *par = info->par; 619 - int ret; 620 - 621 - ret = vmbus_open(hdev->channel, RING_BUFSIZE, RING_BUFSIZE, 622 - NULL, 0, synthvid_receive, hdev); 623 - if (ret) { 624 - pr_err("Unable to open vmbus channel\n"); 625 - return ret; 626 - } 627 - 628 - /* Negotiate the protocol version with host */ 629 - switch (vmbus_proto_version) { 630 - case VERSION_WIN10: 631 - case VERSION_WIN10_V5: 632 - ret = synthvid_negotiate_ver(hdev, SYNTHVID_VERSION_WIN10); 633 - if (!ret) 634 - break; 635 - fallthrough; 636 - case VERSION_WIN8: 637 - case VERSION_WIN8_1: 638 - ret = synthvid_negotiate_ver(hdev, SYNTHVID_VERSION_WIN8); 639 - break; 640 - default: 641 - ret = synthvid_negotiate_ver(hdev, SYNTHVID_VERSION_WIN10); 642 - break; 643 - } 644 - 645 - if (ret) { 646 - pr_err("Synthetic video device version not accepted\n"); 647 - goto error; 648 - } 649 - 650 - screen_depth = SYNTHVID_DEPTH_WIN8; 651 - if (synthvid_ver_ge(par->synthvid_version, SYNTHVID_VERSION_WIN10)) { 652 - ret = synthvid_get_supported_resolution(hdev); 653 - if (ret) 654 - pr_info("Failed to get supported resolution from host, use default\n"); 655 - } 656 - 657 - screen_fb_size = hdev->channel->offermsg.offer. 658 - mmio_megabytes * 1024 * 1024; 659 - 660 - return 0; 661 - 662 - error: 663 - vmbus_close(hdev->channel); 664 - return ret; 665 - } 666 - 667 - /* Send VRAM and Situation messages to the host */ 668 - static int synthvid_send_config(struct hv_device *hdev) 669 - { 670 - struct fb_info *info = hv_get_drvdata(hdev); 671 - struct hvfb_par *par = info->par; 672 - struct synthvid_msg *msg = (struct synthvid_msg *)par->init_buf; 673 - int ret = 0; 674 - unsigned long t; 675 - 676 - /* Send VRAM location */ 677 - memset(msg, 0, sizeof(struct synthvid_msg)); 678 - msg->vid_hdr.type = SYNTHVID_VRAM_LOCATION; 679 - msg->vid_hdr.size = sizeof(struct synthvid_msg_hdr) + 680 - sizeof(struct synthvid_vram_location); 681 - msg->vram.user_ctx = msg->vram.vram_gpa = par->mmio_pp; 682 - msg->vram.is_vram_gpa_specified = 1; 683 - synthvid_send(hdev, msg); 684 - 685 - t = wait_for_completion_timeout(&par->wait, VSP_TIMEOUT); 686 - if (!t) { 687 - pr_err("Time out on waiting vram location ack\n"); 688 - ret = -ETIMEDOUT; 689 - goto out; 690 - } 691 - if (msg->vram_ack.user_ctx != par->mmio_pp) { 692 - pr_err("Unable to set VRAM location\n"); 693 - ret = -ENODEV; 694 - goto out; 695 - } 696 - 697 - /* Send pointer and situation update */ 698 - synthvid_send_ptr(hdev); 699 - synthvid_send_situ(hdev); 700 - 701 - out: 702 - return ret; 703 - } 704 - 705 - 706 - /* 707 - * Delayed work callback: 708 - * It is scheduled to call whenever update request is received and it has 709 - * not been called in last HVFB_ONDEMAND_THROTTLE time interval. 710 - */ 711 - static void hvfb_update_work(struct work_struct *w) 712 - { 713 - struct hvfb_par *par = container_of(w, struct hvfb_par, dwork.work); 714 - struct fb_info *info = par->info; 715 - unsigned long flags; 716 - int x1, x2, y1, y2; 717 - int j; 718 - 719 - spin_lock_irqsave(&par->delayed_refresh_lock, flags); 720 - /* Reset the request flag */ 721 - par->delayed_refresh = false; 722 - 723 - /* Store the dirty rectangle to local variables */ 724 - x1 = par->x1; 725 - x2 = par->x2; 726 - y1 = par->y1; 727 - y2 = par->y2; 728 - 729 - /* Clear dirty rectangle */ 730 - par->x1 = par->y1 = INT_MAX; 731 - par->x2 = par->y2 = 0; 732 - 733 - spin_unlock_irqrestore(&par->delayed_refresh_lock, flags); 734 - 735 - if (x1 > info->var.xres || x2 > info->var.xres || 736 - y1 > info->var.yres || y2 > info->var.yres || x2 <= x1) 737 - return; 738 - 739 - /* Copy the dirty rectangle to frame buffer memory */ 740 - if (par->need_docopy) 741 - for (j = y1; j < y2; j++) 742 - hvfb_docopy(par, 743 - j * info->fix.line_length + 744 - (x1 * screen_depth / 8), 745 - (x2 - x1) * screen_depth / 8); 746 - 747 - /* Refresh */ 748 - if (par->fb_ready && par->update) 749 - synthvid_update(info, x1, y1, x2, y2); 750 - } 751 - 752 - /* 753 - * Control the on-demand refresh frequency. It schedules a delayed 754 - * screen update if it has not yet. 755 - */ 756 - static void hvfb_ondemand_refresh_throttle(struct hvfb_par *par, 757 - int x1, int y1, int w, int h) 758 - { 759 - unsigned long flags; 760 - int x2 = x1 + w; 761 - int y2 = y1 + h; 762 - 763 - spin_lock_irqsave(&par->delayed_refresh_lock, flags); 764 - 765 - /* Merge dirty rectangle */ 766 - par->x1 = min_t(int, par->x1, x1); 767 - par->y1 = min_t(int, par->y1, y1); 768 - par->x2 = max_t(int, par->x2, x2); 769 - par->y2 = max_t(int, par->y2, y2); 770 - 771 - /* Schedule a delayed screen update if not yet */ 772 - if (par->delayed_refresh == false) { 773 - schedule_delayed_work(&par->dwork, 774 - HVFB_ONDEMAND_THROTTLE); 775 - par->delayed_refresh = true; 776 - } 777 - 778 - spin_unlock_irqrestore(&par->delayed_refresh_lock, flags); 779 - } 780 - 781 - static int hvfb_on_panic(struct notifier_block *nb, 782 - unsigned long e, void *p) 783 - { 784 - struct hv_device *hdev; 785 - struct hvfb_par *par; 786 - struct fb_info *info; 787 - 788 - par = container_of(nb, struct hvfb_par, hvfb_panic_nb); 789 - info = par->info; 790 - hdev = device_to_hv_device(info->device); 791 - 792 - if (hv_ringbuffer_spinlock_busy(hdev->channel)) 793 - return NOTIFY_DONE; 794 - 795 - par->synchronous_fb = true; 796 - if (par->need_docopy) 797 - hvfb_docopy(par, 0, dio_fb_size); 798 - synthvid_update(info, 0, 0, INT_MAX, INT_MAX); 799 - 800 - return NOTIFY_DONE; 801 - } 802 - 803 - /* Framebuffer operation handlers */ 804 - 805 - static int hvfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) 806 - { 807 - if (var->xres < HVFB_WIDTH_MIN || var->yres < HVFB_HEIGHT_MIN || 808 - var->xres > screen_width || var->yres > screen_height || 809 - var->bits_per_pixel != screen_depth) 810 - return -EINVAL; 811 - 812 - var->xres_virtual = var->xres; 813 - var->yres_virtual = var->yres; 814 - 815 - return 0; 816 - } 817 - 818 - static int hvfb_set_par(struct fb_info *info) 819 - { 820 - struct hv_device *hdev = device_to_hv_device(info->device); 821 - 822 - return synthvid_send_situ(hdev); 823 - } 824 - 825 - 826 - static inline u32 chan_to_field(u32 chan, struct fb_bitfield *bf) 827 - { 828 - return ((chan & 0xffff) >> (16 - bf->length)) << bf->offset; 829 - } 830 - 831 - static int hvfb_setcolreg(unsigned regno, unsigned red, unsigned green, 832 - unsigned blue, unsigned transp, struct fb_info *info) 833 - { 834 - u32 *pal = info->pseudo_palette; 835 - 836 - if (regno > 15) 837 - return -EINVAL; 838 - 839 - pal[regno] = chan_to_field(red, &info->var.red) 840 - | chan_to_field(green, &info->var.green) 841 - | chan_to_field(blue, &info->var.blue) 842 - | chan_to_field(transp, &info->var.transp); 843 - 844 - return 0; 845 - } 846 - 847 - static int hvfb_blank(int blank, struct fb_info *info) 848 - { 849 - return 1; /* get fb_blank to set the colormap to all black */ 850 - } 851 - 852 - static void hvfb_ops_damage_range(struct fb_info *info, off_t off, size_t len) 853 - { 854 - /* TODO: implement damage handling */ 855 - } 856 - 857 - static void hvfb_ops_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height) 858 - { 859 - struct hvfb_par *par = info->par; 860 - 861 - if (par->synchronous_fb) 862 - synthvid_update(info, 0, 0, INT_MAX, INT_MAX); 863 - else 864 - hvfb_ondemand_refresh_throttle(par, x, y, width, height); 865 - } 866 - 867 - /* 868 - * fb_ops.fb_destroy is called by the last put_fb_info() call at the end 869 - * of unregister_framebuffer() or fb_release(). Do any cleanup related to 870 - * framebuffer here. 871 - */ 872 - static void hvfb_destroy(struct fb_info *info) 873 - { 874 - hvfb_putmem(info); 875 - framebuffer_release(info); 876 - } 877 - 878 - /* 879 - * TODO: GEN1 codepaths allocate from system or DMA-able memory. Fix the 880 - * driver to use the _SYSMEM_ or _DMAMEM_ helpers in these cases. 881 - */ 882 - FB_GEN_DEFAULT_DEFERRED_IOMEM_OPS(hvfb_ops, 883 - hvfb_ops_damage_range, 884 - hvfb_ops_damage_area) 885 - 886 - static const struct fb_ops hvfb_ops = { 887 - .owner = THIS_MODULE, 888 - FB_DEFAULT_DEFERRED_OPS(hvfb_ops), 889 - .fb_check_var = hvfb_check_var, 890 - .fb_set_par = hvfb_set_par, 891 - .fb_setcolreg = hvfb_setcolreg, 892 - .fb_blank = hvfb_blank, 893 - .fb_destroy = hvfb_destroy, 894 - }; 895 - 896 - /* Get options from kernel paramenter "video=" */ 897 - static void hvfb_get_option(struct fb_info *info) 898 - { 899 - struct hvfb_par *par = info->par; 900 - char *opt = NULL, *p; 901 - uint x = 0, y = 0; 902 - 903 - if (fb_get_options(KBUILD_MODNAME, &opt) || !opt || !*opt) 904 - return; 905 - 906 - p = strsep(&opt, "x"); 907 - if (!*p || kstrtouint(p, 0, &x) || 908 - !opt || !*opt || kstrtouint(opt, 0, &y)) { 909 - pr_err("Screen option is invalid: skipped\n"); 910 - return; 911 - } 912 - 913 - if (x < HVFB_WIDTH_MIN || y < HVFB_HEIGHT_MIN || 914 - (synthvid_ver_ge(par->synthvid_version, SYNTHVID_VERSION_WIN10) && 915 - (x * y * screen_depth / 8 > screen_fb_size)) || 916 - (par->synthvid_version == SYNTHVID_VERSION_WIN8 && 917 - x * y * screen_depth / 8 > SYNTHVID_FB_SIZE_WIN8)) { 918 - pr_err("Screen resolution option is out of range: skipped\n"); 919 - return; 920 - } 921 - 922 - screen_width = x; 923 - screen_height = y; 924 - return; 925 - } 926 - 927 - /* 928 - * Allocate enough contiguous physical memory. 929 - * Return physical address if succeeded or -1 if failed. 930 - */ 931 - static phys_addr_t hvfb_get_phymem(struct hv_device *hdev, 932 - unsigned int request_size) 933 - { 934 - struct page *page = NULL; 935 - dma_addr_t dma_handle; 936 - void *vmem; 937 - phys_addr_t paddr = 0; 938 - unsigned int order = get_order(request_size); 939 - 940 - if (request_size == 0) 941 - return -1; 942 - 943 - if (order <= MAX_PAGE_ORDER) { 944 - /* Call alloc_pages if the size is less than 2^MAX_PAGE_ORDER */ 945 - page = alloc_pages(GFP_KERNEL | __GFP_ZERO, order); 946 - if (!page) 947 - return -1; 948 - 949 - paddr = (page_to_pfn(page) << PAGE_SHIFT); 950 - } else { 951 - /* Allocate from CMA */ 952 - hdev->device.coherent_dma_mask = DMA_BIT_MASK(64); 953 - 954 - vmem = dma_alloc_coherent(&hdev->device, 955 - round_up(request_size, PAGE_SIZE), 956 - &dma_handle, 957 - GFP_KERNEL | __GFP_NOWARN); 958 - 959 - if (!vmem) 960 - return -1; 961 - 962 - paddr = virt_to_phys(vmem); 963 - } 964 - 965 - return paddr; 966 - } 967 - 968 - /* Release contiguous physical memory */ 969 - static void hvfb_release_phymem(struct device *device, 970 - phys_addr_t paddr, unsigned int size) 971 - { 972 - unsigned int order = get_order(size); 973 - 974 - if (order <= MAX_PAGE_ORDER) 975 - __free_pages(pfn_to_page(paddr >> PAGE_SHIFT), order); 976 - else 977 - dma_free_coherent(device, 978 - round_up(size, PAGE_SIZE), 979 - phys_to_virt(paddr), 980 - paddr); 981 - } 982 - 983 - 984 - /* Get framebuffer memory from Hyper-V video pci space */ 985 - static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) 986 - { 987 - struct hvfb_par *par = info->par; 988 - struct pci_dev *pdev = NULL; 989 - void __iomem *fb_virt; 990 - int gen2vm = efi_enabled(EFI_BOOT); 991 - resource_size_t base = 0; 992 - resource_size_t size = 0; 993 - phys_addr_t paddr; 994 - int ret; 995 - 996 - if (!gen2vm) { 997 - pdev = pci_get_device(PCI_VENDOR_ID_MICROSOFT, 998 - PCI_DEVICE_ID_HYPERV_VIDEO, NULL); 999 - if (!pdev) { 1000 - pr_err("Unable to find PCI Hyper-V video\n"); 1001 - return -ENODEV; 1002 - } 1003 - 1004 - base = pci_resource_start(pdev, 0); 1005 - size = pci_resource_len(pdev, 0); 1006 - aperture_remove_conflicting_devices(base, size, KBUILD_MODNAME); 1007 - 1008 - /* 1009 - * For Gen 1 VM, we can directly use the contiguous memory 1010 - * from VM. If we succeed, deferred IO happens directly 1011 - * on this allocated framebuffer memory, avoiding extra 1012 - * memory copy. 1013 - */ 1014 - paddr = hvfb_get_phymem(hdev, screen_fb_size); 1015 - if (paddr != (phys_addr_t) -1) { 1016 - par->mmio_pp = paddr; 1017 - par->mmio_vp = par->dio_vp = __va(paddr); 1018 - 1019 - info->fix.smem_start = paddr; 1020 - info->fix.smem_len = screen_fb_size; 1021 - info->screen_base = par->mmio_vp; 1022 - info->screen_size = screen_fb_size; 1023 - 1024 - par->need_docopy = false; 1025 - goto getmem_done; 1026 - } 1027 - pr_info("Unable to allocate enough contiguous physical memory on Gen 1 VM. Using MMIO instead.\n"); 1028 - } else { 1029 - aperture_remove_all_conflicting_devices(KBUILD_MODNAME); 1030 - } 1031 - 1032 - /* 1033 - * Cannot use contiguous physical memory, so allocate MMIO space for 1034 - * the framebuffer. At this point in the function, conflicting devices 1035 - * that might have claimed the framebuffer MMIO space based on 1036 - * screen_info.lfb_base must have already been removed so that 1037 - * vmbus_allocate_mmio() does not allocate different MMIO space. If the 1038 - * kdump image were to be loaded using kexec_file_load(), the 1039 - * framebuffer location in the kdump image would be set from 1040 - * screen_info.lfb_base at the time that kdump is enabled. If the 1041 - * framebuffer has moved elsewhere, this could be the wrong location, 1042 - * causing kdump to hang when efifb (for example) loads. 1043 - */ 1044 - dio_fb_size = 1045 - screen_width * screen_height * screen_depth / 8; 1046 - 1047 - ret = vmbus_allocate_mmio(&par->mem, hdev, 0, -1, 1048 - screen_fb_size, 0x100000, true); 1049 - if (ret != 0) { 1050 - pr_err("Unable to allocate framebuffer memory\n"); 1051 - goto err1; 1052 - } 1053 - 1054 - /* 1055 - * Map the VRAM cacheable for performance. This is also required for 1056 - * VM Connect to display properly for ARM64 Linux VM, as the host also 1057 - * maps the VRAM cacheable. 1058 - */ 1059 - fb_virt = ioremap_cache(par->mem->start, screen_fb_size); 1060 - if (!fb_virt) 1061 - goto err2; 1062 - 1063 - /* Allocate memory for deferred IO */ 1064 - par->dio_vp = vzalloc(round_up(dio_fb_size, PAGE_SIZE)); 1065 - if (par->dio_vp == NULL) 1066 - goto err3; 1067 - 1068 - /* Physical address of FB device */ 1069 - par->mmio_pp = par->mem->start; 1070 - /* Virtual address of FB device */ 1071 - par->mmio_vp = (unsigned char *) fb_virt; 1072 - 1073 - info->fix.smem_start = par->mem->start; 1074 - info->fix.smem_len = dio_fb_size; 1075 - info->screen_base = par->dio_vp; 1076 - info->screen_size = dio_fb_size; 1077 - 1078 - getmem_done: 1079 - if (!gen2vm) 1080 - pci_dev_put(pdev); 1081 - 1082 - return 0; 1083 - 1084 - err3: 1085 - iounmap(fb_virt); 1086 - err2: 1087 - vmbus_free_mmio(par->mem->start, screen_fb_size); 1088 - par->mem = NULL; 1089 - err1: 1090 - if (!gen2vm) 1091 - pci_dev_put(pdev); 1092 - 1093 - return -ENOMEM; 1094 - } 1095 - 1096 - /* Release the framebuffer */ 1097 - static void hvfb_putmem(struct fb_info *info) 1098 - { 1099 - struct hvfb_par *par = info->par; 1100 - 1101 - if (par->need_docopy) { 1102 - vfree(par->dio_vp); 1103 - iounmap(par->mmio_vp); 1104 - vmbus_free_mmio(par->mem->start, screen_fb_size); 1105 - } else { 1106 - hvfb_release_phymem(info->device, info->fix.smem_start, 1107 - screen_fb_size); 1108 - } 1109 - 1110 - par->mem = NULL; 1111 - } 1112 - 1113 - 1114 - static int hvfb_probe(struct hv_device *hdev, 1115 - const struct hv_vmbus_device_id *dev_id) 1116 - { 1117 - struct fb_info *info; 1118 - struct hvfb_par *par; 1119 - int ret; 1120 - 1121 - info = framebuffer_alloc(sizeof(struct hvfb_par), &hdev->device); 1122 - if (!info) 1123 - return -ENOMEM; 1124 - 1125 - par = info->par; 1126 - par->info = info; 1127 - par->fb_ready = false; 1128 - par->need_docopy = true; 1129 - init_completion(&par->wait); 1130 - INIT_DELAYED_WORK(&par->dwork, hvfb_update_work); 1131 - 1132 - par->delayed_refresh = false; 1133 - spin_lock_init(&par->delayed_refresh_lock); 1134 - par->x1 = par->y1 = INT_MAX; 1135 - par->x2 = par->y2 = 0; 1136 - 1137 - /* Connect to VSP */ 1138 - hv_set_drvdata(hdev, info); 1139 - ret = synthvid_connect_vsp(hdev); 1140 - if (ret) { 1141 - pr_err("Unable to connect to VSP\n"); 1142 - goto error1; 1143 - } 1144 - 1145 - hvfb_get_option(info); 1146 - pr_info("Screen resolution: %dx%d, Color depth: %d, Frame buffer size: %d\n", 1147 - screen_width, screen_height, screen_depth, screen_fb_size); 1148 - 1149 - ret = hvfb_getmem(hdev, info); 1150 - if (ret) { 1151 - pr_err("No memory for framebuffer\n"); 1152 - goto error2; 1153 - } 1154 - 1155 - /* Set up fb_info */ 1156 - info->var.xres_virtual = info->var.xres = screen_width; 1157 - info->var.yres_virtual = info->var.yres = screen_height; 1158 - info->var.bits_per_pixel = screen_depth; 1159 - 1160 - if (info->var.bits_per_pixel == 16) { 1161 - info->var.red = (struct fb_bitfield){11, 5, 0}; 1162 - info->var.green = (struct fb_bitfield){5, 6, 0}; 1163 - info->var.blue = (struct fb_bitfield){0, 5, 0}; 1164 - info->var.transp = (struct fb_bitfield){0, 0, 0}; 1165 - } else { 1166 - info->var.red = (struct fb_bitfield){16, 8, 0}; 1167 - info->var.green = (struct fb_bitfield){8, 8, 0}; 1168 - info->var.blue = (struct fb_bitfield){0, 8, 0}; 1169 - info->var.transp = (struct fb_bitfield){24, 8, 0}; 1170 - } 1171 - 1172 - info->var.activate = FB_ACTIVATE_NOW; 1173 - info->var.height = -1; 1174 - info->var.width = -1; 1175 - info->var.vmode = FB_VMODE_NONINTERLACED; 1176 - 1177 - strcpy(info->fix.id, KBUILD_MODNAME); 1178 - info->fix.type = FB_TYPE_PACKED_PIXELS; 1179 - info->fix.visual = FB_VISUAL_TRUECOLOR; 1180 - info->fix.line_length = screen_width * screen_depth / 8; 1181 - info->fix.accel = FB_ACCEL_NONE; 1182 - 1183 - info->fbops = &hvfb_ops; 1184 - info->pseudo_palette = par->pseudo_palette; 1185 - 1186 - /* Initialize deferred IO */ 1187 - info->fbdefio = &synthvid_defio; 1188 - fb_deferred_io_init(info); 1189 - 1190 - /* Send config to host */ 1191 - ret = synthvid_send_config(hdev); 1192 - if (ret) 1193 - goto error; 1194 - 1195 - ret = devm_register_framebuffer(&hdev->device, info); 1196 - if (ret) { 1197 - pr_err("Unable to register framebuffer\n"); 1198 - goto error; 1199 - } 1200 - 1201 - par->fb_ready = true; 1202 - 1203 - par->synchronous_fb = false; 1204 - 1205 - /* 1206 - * We need to be sure this panic notifier runs _before_ the 1207 - * vmbus disconnect, so order it by priority. It must execute 1208 - * before the function hv_panic_vmbus_unload() [drivers/hv/vmbus_drv.c], 1209 - * which is almost at the end of list, with priority = INT_MIN + 1. 1210 - */ 1211 - par->hvfb_panic_nb.notifier_call = hvfb_on_panic; 1212 - par->hvfb_panic_nb.priority = INT_MIN + 10; 1213 - atomic_notifier_chain_register(&panic_notifier_list, 1214 - &par->hvfb_panic_nb); 1215 - 1216 - return 0; 1217 - 1218 - error: 1219 - fb_deferred_io_cleanup(info); 1220 - hvfb_putmem(info); 1221 - error2: 1222 - vmbus_close(hdev->channel); 1223 - error1: 1224 - cancel_delayed_work_sync(&par->dwork); 1225 - hv_set_drvdata(hdev, NULL); 1226 - framebuffer_release(info); 1227 - return ret; 1228 - } 1229 - 1230 - static void hvfb_remove(struct hv_device *hdev) 1231 - { 1232 - struct fb_info *info = hv_get_drvdata(hdev); 1233 - struct hvfb_par *par = info->par; 1234 - 1235 - atomic_notifier_chain_unregister(&panic_notifier_list, 1236 - &par->hvfb_panic_nb); 1237 - 1238 - par->update = false; 1239 - par->fb_ready = false; 1240 - 1241 - fb_deferred_io_cleanup(info); 1242 - 1243 - cancel_delayed_work_sync(&par->dwork); 1244 - 1245 - vmbus_close(hdev->channel); 1246 - hv_set_drvdata(hdev, NULL); 1247 - } 1248 - 1249 - static int hvfb_suspend(struct hv_device *hdev) 1250 - { 1251 - struct fb_info *info = hv_get_drvdata(hdev); 1252 - struct hvfb_par *par = info->par; 1253 - 1254 - console_lock(); 1255 - 1256 - /* 1 means do suspend */ 1257 - fb_set_suspend(info, 1); 1258 - 1259 - cancel_delayed_work_sync(&par->dwork); 1260 - cancel_delayed_work_sync(&info->deferred_work); 1261 - 1262 - par->update_saved = par->update; 1263 - par->update = false; 1264 - par->fb_ready = false; 1265 - 1266 - vmbus_close(hdev->channel); 1267 - 1268 - console_unlock(); 1269 - 1270 - return 0; 1271 - } 1272 - 1273 - static int hvfb_resume(struct hv_device *hdev) 1274 - { 1275 - struct fb_info *info = hv_get_drvdata(hdev); 1276 - struct hvfb_par *par = info->par; 1277 - int ret; 1278 - 1279 - console_lock(); 1280 - 1281 - ret = synthvid_connect_vsp(hdev); 1282 - if (ret != 0) 1283 - goto out; 1284 - 1285 - ret = synthvid_send_config(hdev); 1286 - if (ret != 0) { 1287 - vmbus_close(hdev->channel); 1288 - goto out; 1289 - } 1290 - 1291 - par->fb_ready = true; 1292 - par->update = par->update_saved; 1293 - 1294 - schedule_delayed_work(&info->deferred_work, info->fbdefio->delay); 1295 - schedule_delayed_work(&par->dwork, HVFB_UPDATE_DELAY); 1296 - 1297 - /* 0 means do resume */ 1298 - fb_set_suspend(info, 0); 1299 - 1300 - out: 1301 - console_unlock(); 1302 - 1303 - return ret; 1304 - } 1305 - 1306 - 1307 - static const struct pci_device_id pci_stub_id_table[] = { 1308 - { 1309 - .vendor = PCI_VENDOR_ID_MICROSOFT, 1310 - .device = PCI_DEVICE_ID_HYPERV_VIDEO, 1311 - }, 1312 - { /* end of list */ } 1313 - }; 1314 - 1315 - static const struct hv_vmbus_device_id id_table[] = { 1316 - /* Synthetic Video Device GUID */ 1317 - {HV_SYNTHVID_GUID}, 1318 - {} 1319 - }; 1320 - 1321 - MODULE_DEVICE_TABLE(pci, pci_stub_id_table); 1322 - MODULE_DEVICE_TABLE(vmbus, id_table); 1323 - 1324 - static struct hv_driver hvfb_drv = { 1325 - .name = KBUILD_MODNAME, 1326 - .id_table = id_table, 1327 - .probe = hvfb_probe, 1328 - .remove = hvfb_remove, 1329 - .suspend = hvfb_suspend, 1330 - .resume = hvfb_resume, 1331 - .driver = { 1332 - .probe_type = PROBE_PREFER_ASYNCHRONOUS, 1333 - }, 1334 - }; 1335 - 1336 - static int hvfb_pci_stub_probe(struct pci_dev *pdev, 1337 - const struct pci_device_id *ent) 1338 - { 1339 - return 0; 1340 - } 1341 - 1342 - static void hvfb_pci_stub_remove(struct pci_dev *pdev) 1343 - { 1344 - } 1345 - 1346 - static struct pci_driver hvfb_pci_stub_driver = { 1347 - .name = KBUILD_MODNAME, 1348 - .id_table = pci_stub_id_table, 1349 - .probe = hvfb_pci_stub_probe, 1350 - .remove = hvfb_pci_stub_remove, 1351 - .driver = { 1352 - .probe_type = PROBE_PREFER_ASYNCHRONOUS, 1353 - } 1354 - }; 1355 - 1356 - static int __init hvfb_drv_init(void) 1357 - { 1358 - int ret; 1359 - 1360 - pr_warn("Deprecated: use Hyper-V DRM driver instead\n"); 1361 - 1362 - if (fb_modesetting_disabled("hyper_fb")) 1363 - return -ENODEV; 1364 - 1365 - ret = vmbus_driver_register(&hvfb_drv); 1366 - if (ret != 0) 1367 - return ret; 1368 - 1369 - ret = pci_register_driver(&hvfb_pci_stub_driver); 1370 - if (ret != 0) { 1371 - vmbus_driver_unregister(&hvfb_drv); 1372 - return ret; 1373 - } 1374 - 1375 - return 0; 1376 - } 1377 - 1378 - static void __exit hvfb_drv_exit(void) 1379 - { 1380 - pci_unregister_driver(&hvfb_pci_stub_driver); 1381 - vmbus_driver_unregister(&hvfb_drv); 1382 - } 1383 - 1384 - module_init(hvfb_drv_init); 1385 - module_exit(hvfb_drv_exit); 1386 - 1387 - MODULE_LICENSE("GPL"); 1388 - MODULE_DESCRIPTION("Microsoft Hyper-V Synthetic Video Frame Buffer Driver");
+4 -6
drivers/video/fbdev/omap/omapfb_main.c
··· 846 846 * be reenabled unless its size is > 0. 847 847 */ 848 848 if (old_size != size && size) { 849 - if (size) { 850 - memcpy(new_var, &fbi->var, sizeof(*new_var)); 851 - r = set_fb_var(fbi, new_var); 852 - if (r < 0) 853 - goto out; 854 - } 849 + memcpy(new_var, &fbi->var, sizeof(*new_var)); 850 + r = set_fb_var(fbi, new_var); 851 + if (r < 0) 852 + goto out; 855 853 } 856 854 857 855 if (fbdev->ctrl->sync)
+2 -1
drivers/video/fbdev/omap2/omapfb/Kconfig
··· 5 5 menuconfig FB_OMAP2 6 6 tristate "OMAP2+ frame buffer support" 7 7 depends on FB 8 - depends on FB_DEVICE 9 8 depends on DRM_OMAP = n 10 9 depends on GPIOLIB 11 10 select FB_OMAP2_DSS ··· 12 13 select FB_IOMEM_HELPERS 13 14 help 14 15 Frame buffer driver for OMAP2+ based boards. 16 + FB_DEVICE is not required, but if enabled, provides sysfs interface 17 + for framebuffer configuration and debugging. 15 18 16 19 if FB_OMAP2 17 20
+14 -4
drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c
··· 558 558 559 559 DBG("create sysfs for fbs\n"); 560 560 for (i = 0; i < fbdev->num_fbs; i++) { 561 + struct device *dev; 561 562 int t; 563 + 564 + dev = dev_of_fbinfo(fbdev->fbs[i]); 565 + if (!dev) 566 + continue; 567 + 562 568 for (t = 0; t < ARRAY_SIZE(omapfb_attrs); t++) { 563 - r = device_create_file(fbdev->fbs[i]->dev, 564 - &omapfb_attrs[t]); 569 + r = device_create_file(dev, &omapfb_attrs[t]); 565 570 566 571 if (r) { 567 572 dev_err(fbdev->dev, "failed to create sysfs " ··· 585 580 586 581 DBG("remove sysfs for fbs\n"); 587 582 for (i = 0; i < fbdev->num_fbs; i++) { 583 + struct device *dev; 584 + 585 + dev = dev_of_fbinfo(fbdev->fbs[i]); 586 + if (!dev) 587 + continue; 588 + 588 589 for (t = 0; t < ARRAY_SIZE(omapfb_attrs); t++) 589 - device_remove_file(fbdev->fbs[i]->dev, 590 - &omapfb_attrs[t]); 590 + device_remove_file(dev, &omapfb_attrs[t]); 591 591 } 592 592 } 593 593
+3
drivers/video/fbdev/riva/riva_hw.c
··· 436 436 vmisses = 2; 437 437 eburst_size = state->memory_width * 1; 438 438 mburst_size = 32; 439 + if (!state->mclk_khz) 440 + return (0); 441 + 439 442 gns = 1000000 * (gmisses*state->mem_page_miss + state->mem_latency)/state->mclk_khz; 440 443 ainfo->by_gfacc = gns*ainfo->gdrain_rate/1000000; 441 444 ainfo->wcmocc = 0;
+4 -1
drivers/video/fbdev/sh_mobile_lcdcfb.c
··· 1343 1343 static DEVICE_ATTR_RW(overlay_position); 1344 1344 static DEVICE_ATTR_RW(overlay_rop3); 1345 1345 1346 - static struct attribute *overlay_sysfs_attrs[] = { 1346 + static struct attribute *overlay_sysfs_attrs[] __maybe_unused = { 1347 1347 &dev_attr_overlay_alpha.attr, 1348 1348 &dev_attr_overlay_mode.attr, 1349 1349 &dev_attr_overlay_position.attr, 1350 1350 &dev_attr_overlay_rop3.attr, 1351 1351 NULL, 1352 1352 }; 1353 + 1354 + #ifdef CONFIG_FB_DEVICE 1353 1355 ATTRIBUTE_GROUPS(overlay_sysfs); 1356 + #endif 1354 1357 1355 1358 static const struct fb_fix_screeninfo sh_mobile_lcdc_overlay_fix = { 1356 1359 .id = "SH Mobile LCDC",
+6 -2
drivers/video/fbdev/smscufx.c
··· 932 932 unsigned long arg) 933 933 { 934 934 struct ufx_data *dev = info->par; 935 - struct dloarea *area = NULL; 936 935 937 936 if (!atomic_read(&dev->usb_active)) 938 937 return 0; ··· 946 947 947 948 /* TODO: Help propose a standard fb.h ioctl to report mmap damage */ 948 949 if (cmd == UFX_IOCTL_REPORT_DAMAGE) { 950 + struct dloarea *area __free(kfree) = kmalloc(sizeof(*area), GFP_KERNEL); 951 + if (!area) 952 + return -ENOMEM; 953 + 949 954 /* If we have a damage-aware client, turn fb_defio "off" 950 955 * To avoid perf imact of unnecessary page fault handling. 951 956 * Done by resetting the delay for this fb_info to a very ··· 959 956 if (info->fbdefio) 960 957 info->fbdefio->delay = UFX_DEFIO_WRITE_DISABLE; 961 958 962 - area = (struct dloarea *)arg; 959 + if (copy_from_user(area, (u8 __user *)arg, sizeof(*area))) 960 + return -EFAULT; 963 961 964 962 if (area->x < 0) 965 963 area->x = 0;
+4 -1
drivers/video/fbdev/vt8500lcdfb.c
··· 369 369 if (fbi->palette_cpu == NULL) { 370 370 dev_err(&pdev->dev, "Failed to allocate palette buffer\n"); 371 371 ret = -ENOMEM; 372 - goto failed_free_io; 372 + goto failed_free_mem_virt; 373 373 } 374 374 375 375 irq = platform_get_irq(pdev, 0); ··· 432 432 failed_free_palette: 433 433 dma_free_coherent(&pdev->dev, fbi->palette_size, 434 434 fbi->palette_cpu, fbi->palette_phys); 435 + failed_free_mem_virt: 436 + dma_free_coherent(&pdev->dev, fbi->fb.fix.smem_len, 437 + fbi->fb.screen_buffer, fbi->fb.fix.smem_start); 435 438 failed_free_io: 436 439 iounmap(fbi->regbase); 437 440 failed_free_res:
+45 -39
drivers/video/logo/Kconfig
··· 20 20 21 21 config LOGO_LINUX_MONO 22 22 bool "Standard black and white Linux logo" 23 - default y 23 + 24 + config LOGO_LINUX_MONO_FILE 25 + string "Monochrome logo .pbm file" 26 + depends on LOGO_LINUX_MONO 27 + default "drivers/video/logo/logo_superh_mono.pbm" if SUPERH 28 + default "drivers/video/logo/logo_linux_mono.pbm" 29 + help 30 + Takes a path to a monochromatic logo in the portable pixmap file 31 + format (.pbm). This defaults to the Tux penguin. 32 + 33 + For example, the below ImageMagick command can be used to reduce 34 + an image to black and white and convert it into a pbm file: 35 + 36 + magick source_image -compress none destination.pbm 24 37 25 38 config LOGO_LINUX_VGA16 26 39 bool "Standard 16-color Linux logo" 27 - default y 40 + 41 + config LOGO_LINUX_VGA16_FILE 42 + string "16-color logo .ppm file" 43 + depends on LOGO_LINUX_VGA16 44 + default "drivers/video/logo/logo_superh_vga16.ppm" if SUPERH 45 + default "drivers/video/logo/logo_linux_vga16.ppm" 46 + help 47 + Takes a path to a logo in the portable pixmap file format (.ppm), 48 + using the 16 colors from the drivers/video/logo/clut_vga16.ppm 49 + palette. This defaults to the Tux penguin. 50 + 51 + For example, the below ImageMagick command can be used to reduce an 52 + image to the VGA 16 colors palette and convert into a ppm file: 53 + 54 + magick source_image -compress none \ 55 + -remap drivers/video/logo/clut_vga16.ppm destination.ppm 28 56 29 57 config LOGO_LINUX_CLUT224 30 58 bool "Standard 224-color Linux logo" 31 59 default y 32 60 33 - config LOGO_DEC_CLUT224 34 - bool "224-color Digital Equipment Corporation Linux logo" 35 - depends on MACH_DECSTATION || ALPHA 36 - default y 61 + config LOGO_LINUX_CLUT224_FILE 62 + string "224-color logo .ppm file" 63 + depends on LOGO_LINUX_CLUT224 64 + default "drivers/video/logo/logo_dec_clut224.ppm" if MACH_DECSTATION || ALPHA 65 + default "drivers/video/logo/logo_parisc_clut224.ppm" if PARISC 66 + default "drivers/video/logo/logo_sgi_clut224.ppm" if SGI_IP22 || SGI_IP27 || SGI_IP32 67 + default "drivers/video/logo/logo_sun_clut224.ppm" if SPARC 68 + default "drivers/video/logo/logo_superh_clut224.ppm" if SUPERH 69 + default "drivers/video/logo/logo_linux_clut224.ppm" 70 + help 71 + Takes a path to a 224-color logo in the portable pixmap file 72 + format (.ppm). This defaults to the Tux penguin. 37 73 38 - config LOGO_MAC_CLUT224 39 - bool "224-color Macintosh Linux logo" 40 - depends on MAC 41 - default y 74 + For example, the below ImageMagick command can be used to reduce 75 + an image palette to 224 colors and convert it into a ppm file: 42 76 43 - config LOGO_PARISC_CLUT224 44 - bool "224-color PA-RISC Linux logo" 45 - depends on PARISC 46 - default y 47 - 48 - config LOGO_SGI_CLUT224 49 - bool "224-color SGI Linux logo" 50 - depends on SGI_IP22 || SGI_IP27 || SGI_IP32 51 - default y 52 - 53 - config LOGO_SUN_CLUT224 54 - bool "224-color Sun Linux logo" 55 - depends on SPARC 56 - default y 57 - 58 - config LOGO_SUPERH_MONO 59 - bool "Black and white SuperH Linux logo" 60 - depends on SUPERH 61 - default y 62 - 63 - config LOGO_SUPERH_VGA16 64 - bool "16-color SuperH Linux logo" 65 - depends on SUPERH 66 - default y 67 - 68 - config LOGO_SUPERH_CLUT224 69 - bool "224-color SuperH Linux logo" 70 - depends on SUPERH 71 - default y 77 + magick source_image -compress none -colors 224 destination.ppm 72 78 73 79 endif # LOGO
+12 -17
drivers/video/logo/Makefile
··· 5 5 obj-$(CONFIG_LOGO_LINUX_MONO) += logo_linux_mono.o 6 6 obj-$(CONFIG_LOGO_LINUX_VGA16) += logo_linux_vga16.o 7 7 obj-$(CONFIG_LOGO_LINUX_CLUT224) += logo_linux_clut224.o 8 - obj-$(CONFIG_LOGO_DEC_CLUT224) += logo_dec_clut224.o 9 - obj-$(CONFIG_LOGO_MAC_CLUT224) += logo_mac_clut224.o 10 - obj-$(CONFIG_LOGO_PARISC_CLUT224) += logo_parisc_clut224.o 11 - obj-$(CONFIG_LOGO_SGI_CLUT224) += logo_sgi_clut224.o 12 - obj-$(CONFIG_LOGO_SUN_CLUT224) += logo_sun_clut224.o 13 - obj-$(CONFIG_LOGO_SUPERH_MONO) += logo_superh_mono.o 14 - obj-$(CONFIG_LOGO_SUPERH_VGA16) += logo_superh_vga16.o 15 - obj-$(CONFIG_LOGO_SUPERH_CLUT224) += logo_superh_clut224.o 16 8 17 9 obj-$(CONFIG_SPU_BASE) += logo_spe_clut224.o 18 10 ··· 12 20 13 21 hostprogs := pnmtologo 14 22 15 - # Create commands like "pnmtologo -t mono -n logo_mac_mono -o ..." 23 + # Create commands like "pnmtologo -t mono -n logo_linux_mono -o ..." 16 24 quiet_cmd_logo = LOGO $@ 17 - cmd_logo = $(obj)/pnmtologo -t $(lastword $(subst _, ,$*)) -n $* -o $@ $< 25 + cmd_logo = $(obj)/pnmtologo -t $2 -n $(basename $(notdir $@)) -o $@ $< 18 26 19 - $(obj)/%.c: $(src)/%.pbm $(obj)/pnmtologo FORCE 20 - $(call if_changed,logo) 27 + $(obj)/logo_linux_mono.c: $(CONFIG_LOGO_LINUX_MONO_FILE) $(obj)/pnmtologo FORCE 28 + $(call if_changed,logo,mono) 21 29 22 - $(obj)/%.c: $(src)/%.ppm $(obj)/pnmtologo FORCE 23 - $(call if_changed,logo) 30 + $(obj)/logo_linux_vga16.c: $(CONFIG_LOGO_LINUX_VGA16_FILE) $(obj)/pnmtologo FORCE 31 + $(call if_changed,logo,vga16) 24 32 25 - $(obj)/%.c: $(src)/%.pgm $(obj)/pnmtologo FORCE 26 - $(call if_changed,logo) 33 + $(obj)/logo_linux_clut224.c: $(CONFIG_LOGO_LINUX_CLUT224_FILE) $(obj)/pnmtologo FORCE 34 + $(call if_changed,logo,clut224) 35 + 36 + $(obj)/%_clut224.c: $(src)/%_clut224.ppm $(obj)/pnmtologo FORCE 37 + $(call if_changed,logo,clut224) 27 38 28 39 # generated C files 29 - targets += *_mono.c *_vga16.c *_clut224.c *_gray256.c 40 + targets += *_mono.c *_vga16.c *_clut224.c
+4 -42
drivers/video/logo/logo.c
··· 48 48 if (nologo || logos_freed) 49 49 return NULL; 50 50 51 - if (depth >= 1) { 52 51 #ifdef CONFIG_LOGO_LINUX_MONO 53 - /* Generic Linux logo */ 52 + if (depth >= 1) 54 53 logo = &logo_linux_mono; 55 54 #endif 56 - #ifdef CONFIG_LOGO_SUPERH_MONO 57 - /* SuperH Linux logo */ 58 - logo = &logo_superh_mono; 59 - #endif 60 - } 61 55 62 - if (depth >= 4) { 63 56 #ifdef CONFIG_LOGO_LINUX_VGA16 64 - /* Generic Linux logo */ 57 + if (depth >= 4) 65 58 logo = &logo_linux_vga16; 66 59 #endif 67 - #ifdef CONFIG_LOGO_SUPERH_VGA16 68 - /* SuperH Linux logo */ 69 - logo = &logo_superh_vga16; 70 - #endif 71 - } 72 60 73 - if (depth >= 8) { 74 61 #ifdef CONFIG_LOGO_LINUX_CLUT224 75 - /* Generic Linux logo */ 62 + if (depth >= 8) 76 63 logo = &logo_linux_clut224; 77 64 #endif 78 - #ifdef CONFIG_LOGO_DEC_CLUT224 79 - /* DEC Linux logo on MIPS/MIPS64 or ALPHA */ 80 - logo = &logo_dec_clut224; 81 - #endif 82 - #ifdef CONFIG_LOGO_MAC_CLUT224 83 - /* Macintosh Linux logo on m68k */ 84 - if (MACH_IS_MAC) 85 - logo = &logo_mac_clut224; 86 - #endif 87 - #ifdef CONFIG_LOGO_PARISC_CLUT224 88 - /* PA-RISC Linux logo */ 89 - logo = &logo_parisc_clut224; 90 - #endif 91 - #ifdef CONFIG_LOGO_SGI_CLUT224 92 - /* SGI Linux logo on MIPS/MIPS64 */ 93 - logo = &logo_sgi_clut224; 94 - #endif 95 - #ifdef CONFIG_LOGO_SUN_CLUT224 96 - /* Sun Linux logo */ 97 - logo = &logo_sun_clut224; 98 - #endif 99 - #ifdef CONFIG_LOGO_SUPERH_CLUT224 100 - /* SuperH Linux logo */ 101 - logo = &logo_superh_clut224; 102 - #endif 103 - } 65 + 104 66 return logo; 105 67 } 106 68 EXPORT_SYMBOL_GPL(fb_find_logo);
-1604
drivers/video/logo/logo_mac_clut224.ppm
··· 1 - P3 2 - # 224-color Macintosh Linux logo 3 - 80 80 4 - 255 5 - 0 0 0 0 0 0 0 0 0 0 0 0 6 - 0 0 0 0 0 0 0 0 0 0 0 0 7 - 0 0 0 0 0 0 0 0 0 0 0 0 8 - 0 0 0 0 0 0 0 0 0 0 0 0 9 - 0 0 0 0 0 0 0 0 0 0 0 0 10 - 0 0 0 0 0 0 0 0 0 0 0 0 11 - 0 0 0 0 0 0 0 0 0 0 0 0 12 - 0 0 0 0 0 0 0 0 0 0 0 0 13 - 0 0 0 0 0 0 0 0 0 0 0 0 14 - 6 6 6 6 6 6 10 10 10 10 10 10 15 - 10 10 10 6 6 6 6 6 6 6 6 6 16 - 0 0 0 0 0 0 0 0 0 0 0 0 17 - 0 0 0 0 0 0 0 0 0 0 0 0 18 - 0 0 0 0 0 0 0 0 0 0 0 0 19 - 0 0 0 0 0 0 0 0 0 0 0 0 20 - 0 0 0 0 0 0 0 0 0 0 0 0 21 - 0 0 0 0 0 0 0 0 0 0 0 0 22 - 0 0 0 0 0 0 0 0 0 0 0 0 23 - 0 0 0 0 0 0 0 0 0 0 0 0 24 - 0 0 0 0 0 0 0 0 0 0 0 0 25 - 0 0 0 0 0 0 0 0 0 0 0 0 26 - 0 0 0 0 0 0 0 0 0 0 0 0 27 - 0 0 0 0 0 0 0 0 0 0 0 0 28 - 0 0 0 0 0 0 0 0 0 0 0 0 29 - 0 0 0 0 0 0 0 0 0 0 0 0 30 - 0 0 0 0 0 0 0 0 0 0 0 0 31 - 0 0 0 0 0 0 0 0 0 0 0 0 32 - 0 0 0 0 0 0 0 0 0 0 0 0 33 - 0 0 0 6 6 6 10 10 10 14 14 14 34 - 22 22 22 26 26 26 30 30 30 34 34 34 35 - 30 30 30 30 30 30 26 26 26 18 18 18 36 - 14 14 14 10 10 10 6 6 6 0 0 0 37 - 0 0 0 0 0 0 0 0 0 0 0 0 38 - 0 0 0 0 0 0 0 0 0 0 0 0 39 - 0 0 0 0 0 0 0 0 0 0 0 0 40 - 0 0 0 0 0 0 0 0 0 0 0 0 41 - 0 0 0 0 0 0 0 0 0 0 0 0 42 - 0 0 0 0 0 0 0 0 0 0 0 0 43 - 0 0 0 0 0 0 0 0 0 0 0 0 44 - 0 0 0 0 0 0 0 0 0 0 0 0 45 - 0 0 0 0 0 0 0 0 0 0 0 0 46 - 0 0 0 0 0 1 0 0 1 0 0 0 47 - 0 0 0 0 0 0 0 0 0 0 0 0 48 - 0 0 0 0 0 0 0 0 0 0 0 0 49 - 0 0 0 0 0 0 0 0 0 0 0 0 50 - 0 0 0 0 0 0 0 0 0 0 0 0 51 - 0 0 0 0 0 0 0 0 0 0 0 0 52 - 0 0 0 0 0 0 0 0 0 0 0 0 53 - 6 6 6 14 14 14 26 26 26 42 42 42 54 - 54 54 54 66 66 66 78 78 78 78 78 78 55 - 78 78 78 74 74 74 66 66 66 54 54 54 56 - 42 42 42 26 26 26 18 18 18 10 10 10 57 - 6 6 6 0 0 0 0 0 0 0 0 0 58 - 0 0 0 0 0 0 0 0 0 0 0 0 59 - 0 0 0 0 0 0 0 0 0 0 0 0 60 - 0 0 0 0 0 0 0 0 0 0 0 0 61 - 0 0 0 0 0 0 0 0 0 0 0 0 62 - 0 0 0 0 0 0 0 0 0 0 0 0 63 - 0 0 0 0 0 0 0 0 0 0 0 0 64 - 0 0 0 0 0 0 0 0 0 0 0 0 65 - 0 0 0 0 0 0 0 0 0 0 0 0 66 - 0 0 1 0 0 0 0 0 0 0 0 0 67 - 0 0 0 0 0 0 0 0 0 0 0 0 68 - 0 0 0 0 0 0 0 0 0 0 0 0 69 - 0 0 0 0 0 0 0 0 0 0 0 0 70 - 0 0 0 0 0 0 0 0 0 0 0 0 71 - 0 0 0 0 0 0 0 0 0 0 0 0 72 - 0 0 0 0 0 0 0 0 0 10 10 10 73 - 22 22 22 42 42 42 66 66 66 86 86 86 74 - 66 66 66 38 38 38 38 38 38 22 22 22 75 - 26 26 26 34 34 34 54 54 54 66 66 66 76 - 86 86 86 70 70 70 46 46 46 26 26 26 77 - 14 14 14 6 6 6 0 0 0 0 0 0 78 - 0 0 0 0 0 0 0 0 0 0 0 0 79 - 0 0 0 0 0 0 0 0 0 0 0 0 80 - 0 0 0 0 0 0 0 0 0 0 0 0 81 - 0 0 0 0 0 0 0 0 0 0 0 0 82 - 0 0 0 0 0 0 0 0 0 0 0 0 83 - 0 0 0 0 0 0 0 0 0 0 0 0 84 - 0 0 0 0 0 0 0 0 0 0 0 0 85 - 0 0 0 0 0 0 0 0 0 0 0 0 86 - 0 0 1 0 0 1 0 0 1 0 0 0 87 - 0 0 0 0 0 0 0 0 0 0 0 0 88 - 0 0 0 0 0 0 0 0 0 0 0 0 89 - 0 0 0 0 0 0 0 0 0 0 0 0 90 - 0 0 0 0 0 0 0 0 0 0 0 0 91 - 0 0 0 0 0 0 0 0 0 0 0 0 92 - 0 0 0 0 0 0 10 10 10 26 26 26 93 - 50 50 50 82 82 82 58 58 58 6 6 6 94 - 2 2 6 2 2 6 2 2 6 2 2 6 95 - 2 2 6 2 2 6 2 2 6 2 2 6 96 - 6 6 6 54 54 54 86 86 86 66 66 66 97 - 38 38 38 18 18 18 6 6 6 0 0 0 98 - 0 0 0 0 0 0 0 0 0 0 0 0 99 - 0 0 0 0 0 0 0 0 0 0 0 0 100 - 0 0 0 0 0 0 0 0 0 0 0 0 101 - 0 0 0 0 0 0 0 0 0 0 0 0 102 - 0 0 0 0 0 0 0 0 0 0 0 0 103 - 0 0 0 0 0 0 0 0 0 0 0 0 104 - 0 0 0 0 0 0 0 0 0 0 0 0 105 - 0 0 0 0 0 0 0 0 0 0 0 0 106 - 0 0 0 0 0 0 0 0 0 0 0 0 107 - 0 0 0 0 0 0 0 0 0 0 0 0 108 - 0 0 0 0 0 0 0 0 0 0 0 0 109 - 0 0 0 0 0 0 0 0 0 0 0 0 110 - 0 0 0 0 0 0 0 0 0 0 0 0 111 - 0 0 0 0 0 0 0 0 0 0 0 0 112 - 0 0 0 6 6 6 22 22 22 50 50 50 113 - 78 78 78 34 34 34 2 2 6 2 2 6 114 - 2 2 6 2 2 6 2 2 6 2 2 6 115 - 2 2 6 2 2 6 2 2 6 2 2 6 116 - 2 2 6 2 2 6 6 6 6 70 70 70 117 - 78 78 78 46 46 46 22 22 22 6 6 6 118 - 0 0 0 0 0 0 0 0 0 0 0 0 119 - 0 0 0 0 0 0 0 0 0 0 0 0 120 - 0 0 0 0 0 0 0 0 0 0 0 0 121 - 0 0 0 0 0 0 0 0 0 0 0 0 122 - 0 0 0 0 0 0 0 0 0 0 0 0 123 - 0 0 0 0 0 0 0 0 0 0 0 0 124 - 0 0 0 0 0 0 0 0 0 0 0 0 125 - 0 0 0 0 0 0 0 0 0 0 0 0 126 - 0 0 1 0 0 1 0 0 1 0 0 0 127 - 0 0 0 0 0 0 0 0 0 0 0 0 128 - 0 0 0 0 0 0 0 0 0 0 0 0 129 - 0 0 0 0 0 0 0 0 0 250 250 250 130 - 250 250 250 250 250 250 250 250 250 242 242 242 131 - 250 250 250 250 250 250 246 246 246 250 250 250 132 - 246 246 246 242 242 242 246 246 246 231 231 231 133 - 46 46 46 2 2 6 2 2 6 2 2 6 134 - 2 2 6 2 2 6 2 2 6 2 2 6 135 - 2 2 6 2 2 6 2 2 6 14 14 14 136 - 46 46 46 34 34 34 6 6 6 2 2 6 137 - 82 82 82 242 242 242 242 242 242 246 246 246 138 - 242 242 242 250 250 250 242 242 242 246 246 246 139 - 242 242 242 250 250 250 242 242 242 250 250 250 140 - 250 250 250 250 250 250 250 250 250 250 250 250 141 - 0 0 0 0 0 0 0 0 0 0 0 0 142 - 0 0 0 0 0 0 0 0 0 0 0 0 143 - 0 0 0 0 0 0 0 0 0 0 0 0 144 - 0 0 0 0 0 0 0 0 0 0 0 0 145 - 0 0 0 0 0 0 0 0 0 0 0 0 146 - 0 0 1 0 0 0 0 0 1 0 0 0 147 - 0 0 0 0 0 0 0 0 0 0 0 0 148 - 0 0 0 0 0 0 0 0 0 0 0 0 149 - 0 0 0 0 0 0 0 0 0 242 242 242 150 - 250 250 250 250 250 250 250 250 250 250 250 250 151 - 242 242 242 246 246 246 250 250 250 250 250 250 152 - 250 250 250 250 250 250 242 242 242 116 116 116 153 - 2 2 6 2 2 6 2 2 6 2 2 6 154 - 2 2 6 2 2 6 2 2 6 2 2 6 155 - 2 2 6 2 2 6 2 2 6 26 26 26 156 - 86 86 86 101 101 101 46 46 46 10 10 10 157 - 2 2 6 123 123 123 242 242 242 250 250 250 158 - 246 246 246 250 250 250 242 242 242 250 250 250 159 - 246 246 246 250 250 250 242 242 242 250 250 250 160 - 242 242 242 250 250 250 250 250 250 250 250 250 161 - 0 0 0 0 0 0 0 0 0 0 0 0 162 - 0 0 0 0 0 0 0 0 0 0 0 0 163 - 0 0 0 0 0 0 0 0 0 0 0 0 164 - 0 0 0 0 0 0 0 0 0 0 0 0 165 - 0 0 0 0 0 0 0 0 0 0 0 0 166 - 0 0 1 0 0 1 0 0 1 0 0 0 167 - 0 0 0 0 0 0 0 0 0 0 0 0 168 - 0 0 0 0 0 0 0 0 0 0 0 0 169 - 0 0 0 0 0 0 0 0 0 123 123 123 170 - 234 234 234 231 231 231 234 234 234 234 234 234 171 - 234 234 234 221 221 221 234 234 234 231 231 231 172 - 234 234 234 234 234 234 214 214 214 10 10 10 173 - 2 2 6 2 2 6 2 2 6 2 2 6 174 - 2 2 6 2 2 6 2 2 6 2 2 6 175 - 2 2 6 2 2 6 2 2 6 30 30 30 176 - 94 94 94 94 94 94 58 58 58 26 26 26 177 - 2 2 6 10 10 10 190 190 190 242 242 242 178 - 242 242 242 250 250 250 250 250 250 242 242 242 179 - 246 246 246 250 250 250 250 250 250 242 242 242 180 - 250 250 250 242 242 242 242 242 242 231 231 231 181 - 0 0 0 0 0 0 0 0 0 0 0 0 182 - 0 0 0 0 0 0 0 0 0 0 0 0 183 - 0 0 0 0 0 0 0 0 0 0 0 0 184 - 0 0 0 0 0 0 0 0 0 0 0 0 185 - 0 0 0 0 0 0 0 0 0 0 0 0 186 - 0 0 0 0 0 0 0 0 0 0 0 0 187 - 0 0 0 0 0 0 0 0 0 0 0 0 188 - 0 0 0 0 0 0 0 0 0 0 0 0 189 - 0 0 0 0 0 0 0 0 0 90 90 90 190 - 234 234 234 226 226 226 226 226 226 218 218 218 191 - 226 226 226 214 214 214 231 231 231 221 221 221 192 - 231 231 231 221 221 221 116 116 116 2 2 6 193 - 2 2 6 2 2 6 2 2 6 2 2 6 194 - 2 2 6 2 2 6 2 2 6 2 2 6 195 - 2 2 6 2 2 6 2 2 6 26 26 26 196 - 54 54 54 38 38 38 18 18 18 10 10 10 197 - 2 2 6 2 2 6 58 58 58 242 242 242 198 - 242 242 242 242 242 242 242 242 242 242 242 242 199 - 242 242 242 242 242 242 242 242 242 242 242 242 200 - 242 242 242 242 242 242 250 250 250 226 226 226 201 - 0 0 0 0 0 0 0 0 0 0 0 0 202 - 0 0 0 0 0 0 0 0 0 0 0 0 203 - 0 0 0 0 0 0 0 0 0 0 0 0 204 - 0 0 0 0 0 0 0 0 0 0 0 0 205 - 0 0 0 0 0 0 0 0 0 0 0 0 206 - 0 0 0 0 0 1 0 0 1 0 0 0 207 - 0 0 0 0 0 0 0 0 0 0 0 0 208 - 0 0 0 0 0 0 0 0 0 0 0 0 209 - 0 0 0 0 0 0 0 0 0 82 82 82 210 - 234 234 234 231 231 231 242 242 242 242 242 242 211 - 234 234 234 234 234 234 238 238 238 234 234 234 212 - 238 238 238 238 238 238 50 50 50 2 2 6 213 - 2 2 6 2 2 6 2 2 6 2 2 6 214 - 2 2 6 2 2 6 2 2 6 2 2 6 215 - 2 2 6 2 2 6 2 2 6 10 10 10 216 - 10 10 10 2 2 6 2 2 6 2 2 6 217 - 2 2 6 2 2 6 2 2 6 182 182 182 218 - 242 242 242 250 250 250 250 250 250 250 250 250 219 - 242 242 242 250 250 250 250 250 250 250 250 250 220 - 242 242 242 242 242 242 250 250 250 206 206 206 221 - 0 0 0 0 0 0 0 0 0 0 0 0 222 - 0 0 0 0 0 0 0 0 0 0 0 0 223 - 0 0 0 0 0 0 0 0 0 0 0 0 224 - 0 0 0 0 0 0 0 0 0 0 0 0 225 - 0 0 0 0 0 0 0 0 0 0 0 0 226 - 0 0 1 0 0 0 0 0 0 0 0 0 227 - 0 0 0 0 0 0 0 0 0 0 0 0 228 - 0 0 0 0 0 0 0 0 0 0 0 0 229 - 0 0 0 0 0 0 0 0 0 50 50 50 230 - 250 250 250 226 226 226 234 234 234 10 10 10 231 - 78 78 78 66 66 66 101 98 89 90 90 90 232 - 110 110 110 106 106 106 10 10 10 2 2 6 233 - 2 2 6 2 2 6 2 2 6 2 2 6 234 - 2 2 6 2 2 6 2 2 6 2 2 6 235 - 2 2 6 2 2 6 2 2 6 2 2 6 236 - 2 2 6 2 2 6 2 2 6 2 2 6 237 - 2 2 6 2 2 6 2 2 6 101 98 89 238 - 210 210 210 238 238 238 226 226 226 238 238 238 239 - 210 210 210 242 242 242 226 226 226 242 242 242 240 - 242 242 242 234 234 234 250 250 250 198 198 198 241 - 0 0 0 0 0 0 0 0 0 0 0 0 242 - 0 0 0 0 0 0 0 0 0 0 0 0 243 - 0 0 0 0 0 0 0 0 0 0 0 0 244 - 0 0 0 0 0 0 0 0 0 0 0 0 245 - 0 0 0 0 0 0 0 0 0 0 0 0 246 - 0 0 0 0 0 1 0 0 1 0 0 0 247 - 0 0 0 0 0 0 0 0 0 0 0 0 248 - 0 0 0 0 0 0 0 0 0 0 0 0 249 - 0 0 0 0 0 0 0 0 0 82 82 82 250 - 234 234 234 234 234 234 231 231 231 2 2 6 251 - 0 0 0 0 0 0 0 0 0 14 14 14 252 - 42 42 42 82 82 82 2 2 6 2 2 6 253 - 2 2 6 6 6 6 10 10 10 2 2 6 254 - 2 2 6 2 2 6 2 2 6 2 2 6 255 - 2 2 6 2 2 6 2 2 6 6 6 6 256 - 14 14 14 10 10 10 2 2 6 2 2 6 257 - 2 2 6 2 2 6 2 2 6 18 18 18 258 - 82 82 82 34 34 34 10 10 10 0 0 0 259 - 6 6 6 0 0 0 0 0 0 0 0 0 260 - 144 144 144 250 250 250 242 242 242 202 202 202 261 - 0 0 0 0 0 0 0 0 0 0 0 0 262 - 0 0 0 0 0 0 0 0 0 0 0 0 263 - 0 0 0 0 0 0 0 0 0 0 0 0 264 - 0 0 0 0 0 0 0 0 0 0 0 0 265 - 0 0 0 0 0 0 0 0 0 0 0 0 266 - 0 0 1 0 0 0 0 0 0 0 0 0 267 - 0 0 0 0 0 0 0 0 0 0 0 0 268 - 0 0 0 0 0 0 0 0 0 0 0 0 269 - 0 0 0 0 0 0 0 0 0 82 82 82 270 - 226 226 226 231 231 231 234 234 234 90 90 90 271 - 0 0 0 0 0 0 0 0 0 14 14 14 272 - 46 46 46 86 86 86 2 2 6 2 2 6 273 - 6 6 6 6 6 6 22 22 22 34 34 34 274 - 6 6 6 2 2 6 2 2 6 2 2 6 275 - 2 2 6 2 2 6 18 18 18 34 34 34 276 - 10 10 10 50 50 50 22 22 22 2 2 6 277 - 2 2 6 2 2 6 2 2 6 10 10 10 278 - 86 86 86 42 42 42 14 14 14 0 0 0 279 - 0 0 0 0 0 0 0 0 0 0 0 0 280 - 158 158 158 242 242 242 234 234 234 187 187 187 281 - 0 0 0 0 0 0 0 0 0 0 0 0 282 - 0 0 0 0 0 0 0 0 0 0 0 0 283 - 0 0 0 0 0 0 0 0 0 0 0 0 284 - 0 0 0 0 0 0 0 0 0 0 0 0 285 - 0 0 0 0 0 0 0 0 0 0 0 0 286 - 0 0 1 0 0 1 0 0 1 0 0 0 287 - 0 0 0 0 0 0 0 0 0 0 0 0 288 - 0 0 0 0 0 0 0 0 0 0 0 0 289 - 0 0 0 0 0 0 0 0 0 66 66 66 290 - 231 231 231 226 226 226 226 226 226 178 178 178 291 - 0 0 0 0 0 0 0 0 0 14 14 14 292 - 46 46 46 86 86 86 2 2 6 2 2 6 293 - 38 38 38 116 116 116 94 94 94 22 22 22 294 - 22 22 22 2 2 6 2 2 6 2 2 6 295 - 14 14 14 86 86 86 138 138 138 162 162 162 296 - 154 154 154 38 38 38 26 26 26 6 6 6 297 - 2 2 6 2 2 6 2 2 6 2 2 6 298 - 86 86 86 46 46 46 14 14 14 0 0 0 299 - 0 0 0 0 0 0 0 0 0 0 0 0 300 - 187 187 187 234 234 234 250 250 250 190 190 190 301 - 0 0 0 0 0 0 0 0 0 0 0 0 302 - 0 0 0 0 0 0 0 0 0 0 0 0 303 - 0 0 0 0 0 0 0 0 0 0 0 0 304 - 0 0 0 0 0 0 0 0 0 0 0 0 305 - 0 0 0 0 0 0 0 0 0 0 0 0 306 - 0 0 0 0 0 0 0 0 0 0 0 0 307 - 0 0 0 0 0 0 0 0 0 0 0 0 308 - 0 0 0 0 0 0 0 0 0 0 0 0 309 - 0 0 0 0 0 0 0 0 0 82 82 82 310 - 226 226 226 218 218 218 234 234 234 218 218 218 311 - 0 0 0 0 0 0 0 0 0 14 14 14 312 - 46 46 46 86 86 86 2 2 6 14 14 14 313 - 134 134 134 198 198 198 195 195 195 116 116 116 314 - 10 10 10 2 2 6 2 2 6 6 6 6 315 - 101 98 89 187 187 187 210 210 210 218 218 218 316 - 214 214 214 134 134 134 14 14 14 6 6 6 317 - 2 2 6 2 2 6 2 2 6 2 2 6 318 - 86 86 86 50 50 50 18 18 18 6 6 6 319 - 0 0 0 0 0 0 0 0 0 0 0 0 320 - 214 214 214 226 226 226 242 242 242 187 187 187 321 - 0 0 0 0 0 0 0 0 0 0 0 0 322 - 0 0 0 0 0 0 0 0 0 0 0 0 323 - 0 0 0 0 0 0 0 0 0 0 0 0 324 - 0 0 0 0 0 0 0 0 0 0 0 0 325 - 0 0 0 0 0 0 0 0 1 0 0 0 326 - 0 0 1 0 0 1 0 0 1 0 0 0 327 - 0 0 0 0 0 0 0 0 0 0 0 0 328 - 0 0 0 0 0 0 0 0 0 0 0 0 329 - 0 0 0 0 0 0 0 0 0 74 74 74 330 - 226 226 226 214 214 214 226 226 226 190 190 190 331 - 0 0 0 0 0 0 0 0 0 14 14 14 332 - 46 46 46 86 86 86 2 2 6 54 54 54 333 - 218 218 218 195 195 195 226 226 226 246 246 246 334 - 58 58 58 2 2 6 2 2 6 30 30 30 335 - 210 210 210 253 253 253 174 174 174 123 123 123 336 - 221 221 221 234 234 234 74 74 74 2 2 6 337 - 2 2 6 2 2 6 2 2 6 2 2 6 338 - 70 70 70 58 58 58 22 22 22 6 6 6 339 - 0 0 0 0 0 0 0 0 0 0 0 0 340 - 195 195 195 226 226 226 234 234 234 206 206 206 341 - 0 0 0 0 0 0 0 0 0 0 0 0 342 - 0 0 0 0 0 0 0 0 0 0 0 0 343 - 0 0 0 0 0 0 0 0 0 0 0 0 344 - 0 0 0 0 0 0 0 0 0 0 0 0 345 - 0 0 0 0 0 0 0 0 0 0 0 0 346 - 0 0 0 0 0 0 0 0 0 0 0 0 347 - 0 0 0 0 0 0 0 0 0 0 0 0 348 - 0 0 0 0 0 0 0 0 0 0 0 0 349 - 0 0 0 0 0 0 0 0 0 62 62 62 350 - 226 226 226 218 218 218 234 234 234 226 226 226 351 - 0 0 0 0 0 0 0 0 0 14 14 14 352 - 46 46 46 82 82 82 2 2 6 106 106 106 353 - 170 170 170 26 26 26 86 86 86 226 226 226 354 - 123 123 123 10 10 10 14 14 14 46 46 46 355 - 231 231 231 190 190 190 6 6 6 70 70 70 356 - 90 90 90 238 238 238 158 158 158 2 2 6 357 - 2 2 6 2 2 6 2 2 6 2 2 6 358 - 70 70 70 58 58 58 22 22 22 6 6 6 359 - 0 0 0 0 0 0 0 0 0 0 0 0 360 - 182 182 182 234 234 234 242 242 242 158 158 158 361 - 0 0 0 0 0 0 0 0 0 0 0 0 362 - 0 0 0 0 0 0 0 0 0 0 0 0 363 - 0 0 0 0 0 0 0 0 0 0 0 0 364 - 0 0 0 0 0 0 0 0 0 0 0 0 365 - 0 0 0 0 0 0 0 0 1 0 0 0 366 - 0 0 1 0 0 1 0 0 1 0 0 0 367 - 0 0 0 0 0 0 0 0 0 0 0 0 368 - 0 0 0 0 0 0 0 0 0 0 0 0 369 - 0 0 0 0 0 0 0 0 0 101 98 89 370 - 214 214 214 214 214 214 226 226 226 242 242 242 371 - 0 0 0 0 0 0 0 0 0 14 14 14 372 - 42 42 42 86 86 86 6 6 6 116 116 116 373 - 106 106 106 6 6 6 70 70 70 149 149 149 374 - 128 128 128 18 18 18 38 38 38 54 54 54 375 - 221 221 221 106 106 106 2 2 6 14 14 14 376 - 46 46 46 190 190 190 198 198 198 2 2 6 377 - 2 2 6 2 2 6 2 2 6 2 2 6 378 - 74 74 74 62 62 62 22 22 22 6 6 6 379 - 0 0 0 0 0 0 0 0 0 0 0 0 380 - 190 190 190 226 226 226 226 226 226 178 178 178 381 - 0 0 0 0 0 0 0 0 0 0 0 0 382 - 0 0 0 0 0 0 0 0 0 0 0 0 383 - 0 0 0 0 0 0 0 0 0 0 0 0 384 - 0 0 0 0 0 0 0 0 0 0 0 0 385 - 0 0 0 0 0 0 0 0 1 0 0 0 386 - 0 0 1 0 0 0 0 0 1 0 0 0 387 - 0 0 0 0 0 0 0 0 0 0 0 0 388 - 0 0 0 0 0 0 0 0 0 0 0 0 389 - 0 0 0 0 0 0 0 0 0 66 66 66 390 - 210 210 210 214 214 214 210 210 210 250 250 250 391 - 0 0 0 0 0 0 0 0 0 14 14 14 392 - 42 42 42 94 94 94 14 14 14 101 101 101 393 - 128 128 128 2 2 6 18 18 18 116 116 116 394 - 118 98 46 121 92 8 121 92 8 98 78 10 395 - 162 162 162 106 106 106 2 2 6 2 2 6 396 - 2 2 6 195 195 195 195 195 195 6 6 6 397 - 2 2 6 2 2 6 2 2 6 2 2 6 398 - 74 74 74 62 62 62 22 22 22 6 6 6 399 - 0 0 0 0 0 0 0 0 0 0 0 0 400 - 214 214 214 226 226 226 231 231 231 149 149 149 401 - 0 0 0 0 0 0 0 0 0 0 0 0 402 - 0 0 0 0 0 0 0 0 0 0 0 0 403 - 0 0 0 0 0 0 0 0 0 0 0 0 404 - 0 0 0 0 0 0 0 0 0 0 0 0 405 - 0 0 0 0 0 0 0 0 1 0 0 1 406 - 0 0 1 0 0 0 0 0 1 0 0 0 407 - 0 0 0 0 0 0 0 0 0 0 0 0 408 - 0 0 0 0 0 0 0 0 0 0 0 0 409 - 0 0 0 0 0 0 0 0 0 42 42 42 410 - 226 226 226 218 218 218 210 210 210 231 231 231 411 - 0 0 0 0 0 0 0 0 0 10 10 10 412 - 38 38 38 90 90 90 14 14 14 58 58 58 413 - 210 210 210 26 26 26 54 38 6 154 114 10 414 - 226 170 11 236 186 11 225 175 15 184 144 12 415 - 215 174 15 175 146 61 37 26 9 2 2 6 416 - 70 70 70 246 246 246 138 138 138 2 2 6 417 - 2 2 6 2 2 6 2 2 6 2 2 6 418 - 70 70 70 66 66 66 26 26 26 6 6 6 419 - 0 0 0 0 0 0 0 0 0 0 0 0 420 - 178 178 178 218 218 218 226 226 226 162 162 162 421 - 0 0 0 0 0 0 0 0 0 0 0 0 422 - 0 0 0 0 0 0 0 0 0 0 0 0 423 - 0 0 0 0 0 0 0 0 0 0 0 0 424 - 0 0 0 0 0 0 0 0 0 0 0 0 425 - 0 0 0 0 0 0 0 0 0 0 0 0 426 - 0 0 0 0 0 0 0 0 0 0 0 0 427 - 0 0 0 0 0 0 0 0 0 0 0 0 428 - 0 0 0 0 0 0 0 0 0 0 0 0 429 - 0 0 0 0 0 0 0 0 0 42 42 42 430 - 214 214 214 198 198 198 210 210 210 242 242 242 431 - 0 0 0 0 0 0 0 0 0 10 10 10 432 - 38 38 38 86 86 86 14 14 14 10 10 10 433 - 195 195 195 188 164 115 192 133 9 225 175 15 434 - 239 182 13 234 190 10 232 195 16 232 200 30 435 - 245 207 45 241 208 19 232 195 16 184 144 12 436 - 218 194 134 211 206 186 42 42 42 2 2 6 437 - 2 2 6 2 2 6 2 2 6 2 2 6 438 - 50 50 50 74 74 74 30 30 30 6 6 6 439 - 0 0 0 0 0 0 0 0 0 0 0 0 440 - 187 187 187 231 231 231 226 226 226 182 182 182 441 - 0 0 0 0 0 0 0 0 0 0 0 0 442 - 0 0 0 0 0 0 0 0 0 0 0 0 443 - 0 0 0 0 0 0 0 0 0 0 0 0 444 - 0 0 0 0 0 0 0 0 0 0 0 0 445 - 0 0 0 0 0 0 0 0 0 0 0 0 446 - 0 0 0 0 0 0 0 0 0 0 0 0 447 - 0 0 0 0 0 0 0 0 0 0 0 0 448 - 0 0 0 0 0 0 0 0 0 0 0 0 449 - 0 0 0 0 0 0 0 0 0 66 66 66 450 - 218 218 218 210 210 210 210 210 210 242 242 242 451 - 0 0 0 0 0 0 0 0 0 10 10 10 452 - 34 34 34 86 86 86 14 14 14 2 2 6 453 - 121 87 25 192 133 9 219 162 10 239 182 13 454 - 236 186 11 232 195 16 241 208 19 244 214 54 455 - 246 218 60 246 218 38 246 215 20 241 208 19 456 - 241 208 19 226 184 13 121 87 25 2 2 6 457 - 2 2 6 2 2 6 2 2 6 2 2 6 458 - 50 50 50 82 82 82 34 34 34 10 10 10 459 - 0 0 0 0 0 0 0 0 0 0 0 0 460 - 162 162 162 226 226 226 226 226 226 162 162 162 461 - 0 0 0 0 0 0 0 0 0 0 0 0 462 - 0 0 0 0 0 0 0 0 0 0 0 0 463 - 0 0 0 0 0 0 0 0 0 0 0 0 464 - 0 0 0 0 0 0 0 0 0 0 0 0 465 - 0 0 0 0 0 0 0 0 0 0 0 0 466 - 0 0 0 0 0 0 0 0 0 0 0 0 467 - 0 0 0 0 0 0 0 0 0 0 0 0 468 - 0 0 0 0 0 0 0 0 0 0 0 0 469 - 0 0 0 0 0 0 0 0 0 62 62 62 470 - 206 206 206 206 206 206 202 202 202 250 250 250 471 - 0 0 0 0 0 0 0 0 0 10 10 10 472 - 34 34 34 82 82 82 30 30 30 61 42 6 473 - 180 123 7 206 145 10 230 174 11 239 182 13 474 - 234 190 10 238 202 15 241 208 19 246 218 74 475 - 246 218 38 246 215 20 246 215 20 246 215 20 476 - 226 184 13 215 174 15 184 144 12 6 6 6 477 - 2 2 6 2 2 6 2 2 6 2 2 6 478 - 26 26 26 94 94 94 42 42 42 14 14 14 479 - 0 0 0 0 0 0 0 0 0 0 0 0 480 - 166 166 166 226 226 226 214 214 214 170 170 170 481 - 0 0 0 0 0 0 0 0 0 0 0 0 482 - 0 0 0 0 0 0 0 0 0 0 0 0 483 - 0 0 0 0 0 0 0 0 0 0 0 0 484 - 0 0 0 0 0 0 0 0 0 0 0 0 485 - 0 0 0 0 0 0 0 0 0 0 0 0 486 - 0 0 0 0 0 0 0 0 0 0 0 0 487 - 0 0 0 0 0 0 0 0 0 0 0 0 488 - 0 0 0 0 0 0 0 0 0 0 0 0 489 - 0 0 0 0 0 0 0 0 0 66 66 66 490 - 226 226 226 218 218 218 202 202 202 242 242 242 491 - 0 0 0 0 0 0 0 0 0 10 10 10 492 - 30 30 30 78 78 78 50 50 50 104 69 6 493 - 192 133 9 216 158 10 236 178 12 236 186 11 494 - 232 195 16 241 208 19 244 214 54 245 215 43 495 - 246 215 20 246 215 20 241 208 19 198 155 10 496 - 200 144 11 216 158 10 156 118 10 2 2 6 497 - 2 2 6 2 2 6 2 2 6 2 2 6 498 - 6 6 6 90 90 90 54 54 54 18 18 18 499 - 6 6 6 0 0 0 0 0 0 0 0 0 500 - 178 178 178 226 226 226 226 226 226 158 158 158 501 - 0 0 0 0 0 0 0 0 0 0 0 0 502 - 0 0 0 0 0 0 0 0 0 0 0 0 503 - 0 0 0 0 0 0 0 0 0 0 0 0 504 - 0 0 0 0 0 0 0 0 0 0 0 0 505 - 0 0 0 0 0 0 0 0 0 0 0 0 506 - 0 0 0 0 0 0 0 0 0 0 0 0 507 - 0 0 0 0 0 0 0 0 0 0 0 0 508 - 0 0 0 0 0 0 0 0 0 0 0 0 509 - 0 0 0 0 0 0 0 0 0 62 62 62 510 - 214 214 214 198 198 198 202 202 202 242 242 242 511 - 0 0 0 0 0 0 0 0 0 10 10 10 512 - 30 30 30 78 78 78 46 46 46 22 22 22 513 - 137 92 6 210 162 10 239 182 13 238 190 10 514 - 238 202 15 241 208 19 246 215 20 246 215 20 515 - 241 208 19 203 166 17 185 133 11 210 150 10 516 - 216 158 10 210 150 10 102 78 10 2 2 6 517 - 6 6 6 54 54 54 14 14 14 2 2 6 518 - 2 2 6 62 62 62 74 74 74 30 30 30 519 - 10 10 10 0 0 0 0 0 0 0 0 0 520 - 190 190 190 214 214 214 242 242 242 158 158 158 521 - 0 0 0 0 0 0 0 0 0 0 0 0 522 - 0 0 0 0 0 0 0 0 0 0 0 0 523 - 0 0 0 0 0 0 0 0 0 0 0 0 524 - 0 0 0 0 0 0 0 0 0 0 0 0 525 - 0 0 0 0 0 0 0 0 0 0 0 0 526 - 0 0 0 0 0 0 0 0 0 0 0 0 527 - 0 0 0 0 0 0 0 0 0 0 0 0 528 - 0 0 0 0 0 0 0 0 0 0 0 0 529 - 0 0 0 0 0 0 0 0 0 66 66 66 530 - 210 210 210 202 202 202 202 202 202 242 242 242 531 - 0 0 0 0 0 0 0 0 0 10 10 10 532 - 34 34 34 78 78 78 50 50 50 6 6 6 533 - 94 70 30 139 102 15 190 146 13 226 184 13 534 - 232 200 30 232 195 16 215 174 15 190 146 13 535 - 168 122 10 192 133 9 210 150 10 213 154 11 536 - 202 150 34 182 157 106 101 98 89 2 2 6 537 - 2 2 6 78 78 78 116 116 116 58 58 58 538 - 2 2 6 22 22 22 90 90 90 46 46 46 539 - 18 18 18 6 6 6 0 0 0 0 0 0 540 - 195 195 195 214 214 214 226 226 226 162 162 162 541 - 0 0 0 0 0 0 0 0 0 0 0 0 542 - 0 0 0 0 0 0 0 0 0 0 0 0 543 - 0 0 0 0 0 0 0 0 0 0 0 0 544 - 0 0 0 0 0 0 0 0 0 0 0 0 545 - 0 0 0 0 0 0 0 0 0 0 0 0 546 - 0 0 0 0 0 0 0 0 0 0 0 0 547 - 0 0 0 0 0 0 0 0 0 0 0 0 548 - 0 0 0 0 0 0 0 0 0 0 0 0 549 - 0 0 0 0 0 0 0 0 0 82 82 82 550 - 198 198 198 190 190 190 187 187 187 242 242 242 551 - 0 0 0 0 0 0 0 0 0 10 10 10 552 - 38 38 38 86 86 86 50 50 50 6 6 6 553 - 128 128 128 174 154 114 156 107 11 168 122 10 554 - 198 155 10 184 144 12 197 138 11 200 144 11 555 - 206 145 10 206 145 10 197 138 11 188 164 115 556 - 195 195 195 198 198 198 174 174 174 14 14 14 557 - 2 2 6 22 22 22 116 116 116 116 116 116 558 - 22 22 22 2 2 6 74 74 74 70 70 70 559 - 30 30 30 10 10 10 0 0 0 0 0 0 560 - 178 178 178 226 226 226 226 226 226 141 141 141 561 - 0 0 0 0 0 0 0 0 0 0 0 0 562 - 0 0 0 0 0 0 0 0 0 0 0 0 563 - 0 0 0 0 0 0 0 0 0 0 0 0 564 - 0 0 0 0 0 0 0 0 0 0 0 0 565 - 0 0 0 0 0 0 0 0 0 0 0 0 566 - 0 0 0 0 0 0 0 0 0 0 0 0 567 - 0 0 0 0 0 0 0 0 0 0 0 0 568 - 0 0 0 0 0 0 0 0 0 0 0 0 569 - 0 0 0 0 0 0 0 0 0 62 62 62 570 - 195 195 195 195 195 195 195 195 195 250 250 250 571 - 0 0 0 0 0 0 6 6 6 18 18 18 572 - 50 50 50 101 101 101 26 26 26 10 10 10 573 - 138 138 138 190 190 190 174 154 114 156 107 11 574 - 197 138 11 200 144 11 197 138 11 192 133 9 575 - 180 123 7 190 142 34 190 178 144 187 187 187 576 - 202 202 202 221 221 221 214 214 214 66 66 66 577 - 2 2 6 2 2 6 50 50 50 62 62 62 578 - 6 6 6 2 2 6 10 10 10 90 90 90 579 - 50 50 50 18 18 18 6 6 6 0 0 0 580 - 190 190 190 226 226 226 250 250 250 202 202 202 581 - 0 0 0 0 0 0 0 0 0 0 0 0 582 - 0 0 0 0 0 0 0 0 0 0 0 0 583 - 0 0 0 0 0 0 0 0 0 0 0 0 584 - 0 0 0 0 0 0 0 0 0 0 0 0 585 - 0 0 0 0 0 0 0 0 0 0 0 0 586 - 0 0 0 0 0 0 0 0 0 0 0 0 587 - 0 0 0 0 0 0 0 0 0 0 0 0 588 - 0 0 0 0 0 0 0 0 0 0 0 0 589 - 0 0 0 0 0 0 0 0 0 42 42 42 590 - 187 187 187 190 190 190 187 187 187 250 250 250 591 - 0 0 0 0 0 0 10 10 10 34 34 34 592 - 74 74 74 74 74 74 2 2 6 6 6 6 593 - 144 144 144 198 198 198 190 190 190 178 166 146 594 - 154 121 60 156 107 11 156 107 11 168 124 44 595 - 174 154 114 187 187 187 190 190 190 210 210 210 596 - 246 246 246 253 253 253 253 253 253 182 182 182 597 - 6 6 6 2 2 6 2 2 6 2 2 6 598 - 2 2 6 2 2 6 2 2 6 62 62 62 599 - 74 74 74 34 34 34 14 14 14 0 0 0 600 - 174 174 174 206 206 206 242 242 242 158 158 158 601 - 0 0 0 0 0 0 0 0 0 0 0 0 602 - 0 0 0 0 0 0 0 0 0 0 0 0 603 - 0 0 0 0 0 0 0 0 0 0 0 0 604 - 0 0 0 0 0 0 0 0 0 0 0 0 605 - 0 0 0 0 0 0 0 0 0 0 0 0 606 - 0 0 0 0 0 0 0 0 0 0 0 0 607 - 0 0 0 0 0 0 0 0 0 0 0 0 608 - 0 0 0 0 0 0 0 0 0 0 0 0 609 - 0 0 0 0 0 0 0 0 0 42 42 42 610 - 190 190 190 187 187 187 190 190 190 234 234 234 611 - 0 0 0 10 10 10 22 22 22 54 54 54 612 - 94 94 94 18 18 18 2 2 6 46 46 46 613 - 234 234 234 221 221 221 190 190 190 190 190 190 614 - 190 190 190 187 187 187 187 187 187 190 190 190 615 - 190 190 190 195 195 195 214 214 214 242 242 242 616 - 253 253 253 253 253 253 253 253 253 253 253 253 617 - 82 82 82 2 2 6 2 2 6 2 2 6 618 - 2 2 6 2 2 6 2 2 6 14 14 14 619 - 86 86 86 54 54 54 22 22 22 6 6 6 620 - 195 195 195 202 202 202 234 234 234 138 138 138 621 - 0 0 0 0 0 0 0 0 0 0 0 0 622 - 0 0 0 0 0 0 0 0 0 0 0 0 623 - 0 0 0 0 0 0 0 0 0 0 0 0 624 - 0 0 0 0 0 0 0 0 0 0 0 0 625 - 0 0 0 0 0 0 0 0 0 0 0 0 626 - 0 0 0 0 0 0 0 0 0 0 0 0 627 - 0 0 0 0 0 0 0 0 0 0 0 0 628 - 0 0 0 0 0 0 0 0 0 0 0 0 629 - 0 0 0 0 0 0 0 0 0 50 50 50 630 - 182 182 182 187 187 187 178 178 178 242 242 242 631 - 6 6 6 18 18 18 46 46 46 90 90 90 632 - 46 46 46 18 18 18 6 6 6 182 182 182 633 - 253 253 253 246 246 246 206 206 206 190 190 190 634 - 190 190 190 190 190 190 190 190 190 190 190 190 635 - 206 206 206 231 231 231 250 250 250 253 253 253 636 - 253 253 253 253 253 253 253 253 253 253 253 253 637 - 202 202 202 14 14 14 2 2 6 2 2 6 638 - 2 2 6 2 2 6 2 2 6 2 2 6 639 - 42 42 42 86 86 86 42 42 42 18 18 18 640 - 190 190 190 202 202 202 226 226 226 178 178 178 641 - 0 0 0 0 0 0 0 0 0 0 0 0 642 - 0 0 0 0 0 0 0 0 0 0 0 0 643 - 0 0 0 0 0 0 0 0 0 0 0 0 644 - 0 0 0 0 0 0 0 0 0 0 0 0 645 - 0 0 0 0 0 0 0 0 0 0 0 0 646 - 0 0 0 0 0 0 0 0 0 0 0 0 647 - 0 0 0 0 0 0 0 0 0 0 0 0 648 - 0 0 0 0 0 0 0 0 0 0 0 0 649 - 0 0 0 0 0 0 0 0 0 62 62 62 650 - 195 195 195 182 182 182 187 187 187 250 250 250 651 - 14 14 14 38 38 38 74 74 74 66 66 66 652 - 2 2 6 6 6 6 90 90 90 250 250 250 653 - 253 253 253 253 253 253 238 238 238 198 198 198 654 - 190 190 190 190 190 190 195 195 195 221 221 221 655 - 246 246 246 253 253 253 253 253 253 253 253 253 656 - 253 253 253 253 253 253 253 253 253 253 253 253 657 - 253 253 253 82 82 82 2 2 6 2 2 6 658 - 2 2 6 2 2 6 2 2 6 2 2 6 659 - 2 2 6 78 78 78 70 70 70 34 34 34 660 - 202 202 202 182 182 182 242 242 242 158 158 158 661 - 0 0 0 0 0 0 0 0 0 0 0 0 662 - 0 0 0 0 0 0 0 0 0 0 0 0 663 - 0 0 0 0 0 0 0 0 0 0 0 0 664 - 0 0 0 0 0 0 0 0 0 0 0 0 665 - 0 0 0 0 0 0 0 0 0 0 0 0 666 - 0 0 0 0 0 0 0 0 0 0 0 0 667 - 0 0 0 0 0 0 0 0 0 0 0 0 668 - 0 0 0 0 0 0 0 0 0 0 0 0 669 - 0 0 0 0 0 0 0 0 0 26 26 26 670 - 195 195 195 182 182 182 178 178 178 242 242 242 671 - 34 34 34 66 66 66 78 78 78 6 6 6 672 - 2 2 6 18 18 18 218 218 218 253 253 253 673 - 253 253 253 253 253 253 253 253 253 246 246 246 674 - 226 226 226 231 231 231 246 246 246 253 253 253 675 - 253 253 253 253 253 253 253 253 253 253 253 253 676 - 253 253 253 253 253 253 253 253 253 253 253 253 677 - 253 253 253 178 178 178 2 2 6 2 2 6 678 - 2 2 6 2 2 6 2 2 6 2 2 6 679 - 2 2 6 18 18 18 90 90 90 62 62 62 680 - 218 218 218 198 198 198 250 250 250 141 141 141 681 - 0 0 0 0 0 0 0 0 0 0 0 0 682 - 0 0 0 0 0 0 0 0 0 0 0 0 683 - 0 0 0 0 0 0 0 0 0 0 0 0 684 - 0 0 0 0 0 0 0 0 0 0 0 0 685 - 0 0 0 0 0 0 0 0 0 0 0 0 686 - 0 0 0 0 0 0 0 0 0 0 0 0 687 - 0 0 0 0 0 0 0 0 0 0 0 0 688 - 0 0 0 0 0 0 0 0 0 0 0 0 689 - 0 0 0 0 0 0 0 0 0 42 42 42 690 - 182 182 182 178 178 178 174 174 174 250 250 250 691 - 58 58 58 90 90 90 18 18 18 2 2 6 692 - 2 2 6 110 110 110 253 253 253 253 253 253 693 - 253 253 253 253 253 253 253 253 253 253 253 253 694 - 250 250 250 253 253 253 253 253 253 253 253 253 695 - 253 253 253 253 253 253 253 253 253 253 253 253 696 - 253 253 253 253 253 253 253 253 253 253 253 253 697 - 253 253 253 231 231 231 18 18 18 2 2 6 698 - 2 2 6 2 2 6 2 2 6 2 2 6 699 - 2 2 6 2 2 6 18 18 18 94 94 94 700 - 206 206 206 198 198 198 242 242 242 162 162 162 701 - 0 0 0 0 0 0 0 0 0 0 0 0 702 - 0 0 0 0 0 0 0 0 0 0 0 0 703 - 0 0 0 0 0 0 0 0 0 0 0 0 704 - 0 0 0 0 0 0 0 0 0 0 0 0 705 - 0 0 0 0 0 0 0 0 0 0 0 0 706 - 0 0 0 0 0 0 0 0 0 0 0 0 707 - 0 0 0 0 0 0 0 0 0 0 0 0 708 - 0 0 0 0 0 0 0 0 0 0 0 0 709 - 0 0 0 0 0 0 0 0 0 42 42 42 710 - 166 166 166 170 170 170 187 187 187 242 242 242 711 - 90 90 90 26 26 26 2 2 6 2 2 6 712 - 14 14 14 195 195 195 250 250 250 253 253 253 713 - 253 253 253 253 253 253 253 253 253 253 253 253 714 - 253 253 253 253 253 253 253 253 253 253 253 253 715 - 253 253 253 253 253 253 253 253 253 253 253 253 716 - 253 253 253 253 253 253 253 253 253 253 253 253 717 - 250 250 250 242 242 242 54 54 54 2 2 6 718 - 2 2 6 2 2 6 2 2 6 2 2 6 719 - 2 2 6 2 2 6 2 2 6 38 38 38 720 - 187 187 187 214 214 214 231 231 231 134 134 134 721 - 0 0 0 0 0 0 0 0 0 0 0 0 722 - 0 0 0 0 0 0 0 0 0 0 0 0 723 - 0 0 0 0 0 0 0 0 0 0 0 0 724 - 0 0 0 0 0 0 0 0 0 0 0 0 725 - 0 0 0 0 0 0 0 0 0 0 0 0 726 - 0 0 0 0 0 0 0 0 0 0 0 0 727 - 0 0 0 0 0 0 0 0 0 0 0 0 728 - 0 0 0 0 0 0 0 0 0 0 0 0 729 - 0 0 0 0 0 0 0 0 0 50 50 50 730 - 187 187 187 182 182 182 166 166 166 234 234 234 731 - 34 34 34 2 2 6 2 2 6 2 2 6 732 - 42 42 42 195 195 195 246 246 246 253 253 253 733 - 253 253 253 253 253 253 253 253 253 250 250 250 734 - 242 242 242 242 242 242 250 250 250 253 253 253 735 - 253 253 253 253 253 253 253 253 253 253 253 253 736 - 253 253 253 250 250 250 246 246 246 238 238 238 737 - 226 226 226 231 231 231 101 101 101 6 6 6 738 - 2 2 6 2 2 6 2 2 6 2 2 6 739 - 2 2 6 2 2 6 2 2 6 2 2 6 740 - 206 206 206 174 174 174 250 250 250 128 128 128 741 - 6 6 6 0 0 0 0 0 0 0 0 0 742 - 0 0 0 0 0 0 0 0 0 0 0 0 743 - 0 0 0 0 0 0 0 0 0 0 0 0 744 - 0 0 0 0 0 0 0 0 0 0 0 0 745 - 0 0 0 0 0 0 0 0 0 0 0 0 746 - 0 0 0 0 0 0 0 0 0 0 0 0 747 - 0 0 0 0 0 0 0 0 0 0 0 0 748 - 0 0 0 0 0 0 0 0 0 0 0 0 749 - 0 0 0 0 0 0 0 0 0 34 34 34 750 - 178 178 178 144 144 144 170 170 170 226 226 226 751 - 2 2 6 2 2 6 2 2 6 6 6 6 752 - 70 70 70 170 170 170 206 206 206 234 234 234 753 - 246 246 246 250 250 250 250 250 250 238 238 238 754 - 226 226 226 231 231 231 238 238 238 250 250 250 755 - 250 250 250 250 250 250 246 246 246 231 231 231 756 - 214 214 214 206 206 206 202 202 202 202 202 202 757 - 198 198 198 202 202 202 182 182 182 18 18 18 758 - 2 2 6 2 2 6 2 2 6 2 2 6 759 - 2 2 6 2 2 6 2 2 6 2 2 6 760 - 202 202 202 166 166 166 214 214 214 128 128 128 761 - 10 10 10 0 0 0 0 0 0 0 0 0 762 - 0 0 0 0 0 0 0 0 0 0 0 0 763 - 0 0 0 0 0 0 0 0 0 0 0 0 764 - 0 0 0 0 0 0 0 0 0 0 0 0 765 - 0 0 0 0 0 0 0 0 0 0 0 0 766 - 0 0 0 0 0 0 0 0 0 0 0 0 767 - 0 0 0 0 0 0 0 0 0 0 0 0 768 - 0 0 0 0 0 0 0 0 0 0 0 0 769 - 0 0 0 0 0 0 0 0 0 50 50 50 770 - 178 178 178 158 158 158 134 134 134 242 242 242 771 - 2 2 6 2 2 6 2 2 6 10 10 10 772 - 94 94 94 182 182 182 218 218 218 242 242 242 773 - 250 250 250 253 253 253 253 253 253 250 250 250 774 - 234 234 234 253 253 253 253 253 253 253 253 253 775 - 253 253 253 253 253 253 253 253 253 246 246 246 776 - 238 238 238 226 226 226 210 210 210 202 202 202 777 - 195 195 195 195 195 195 210 210 210 158 158 158 778 - 6 6 6 14 14 14 50 50 50 14 14 14 779 - 2 2 6 2 2 6 2 2 6 2 2 6 780 - 198 198 198 187 187 187 246 246 246 116 116 116 781 - 18 18 18 6 6 6 0 0 0 0 0 0 782 - 0 0 0 0 0 0 0 0 0 0 0 0 783 - 0 0 0 0 0 0 0 0 0 0 0 0 784 - 0 0 0 0 0 0 0 0 0 0 0 0 785 - 0 0 0 0 0 0 0 0 0 0 0 0 786 - 0 0 0 0 0 0 0 0 0 0 0 0 787 - 0 0 0 0 0 0 0 0 0 0 0 0 788 - 0 0 0 0 0 0 0 0 0 0 0 0 789 - 0 0 0 0 0 0 0 0 0 50 50 50 790 - 195 195 195 154 154 154 154 154 154 250 250 250 791 - 250 250 250 250 250 250 242 242 242 242 242 242 792 - 242 242 242 250 250 250 250 250 250 250 250 250 793 - 250 250 250 250 250 250 242 242 242 250 250 250 794 - 250 250 250 250 250 250 242 242 242 250 250 250 795 - 250 250 250 250 250 250 250 250 250 246 246 246 796 - 234 234 234 250 250 250 242 242 242 242 242 242 797 - 242 242 242 250 250 250 242 242 242 242 242 242 798 - 242 242 242 250 250 250 242 242 242 242 242 242 799 - 250 250 250 242 242 242 242 242 242 250 250 250 800 - 182 182 182 190 190 190 206 206 206 141 141 141 801 - 26 26 26 10 10 10 0 0 0 0 0 0 802 - 0 0 0 0 0 0 0 0 0 0 0 0 803 - 0 0 0 0 0 0 0 0 0 0 0 0 804 - 0 0 0 0 0 0 0 0 0 0 0 0 805 - 0 0 0 0 0 0 0 0 0 0 0 0 806 - 0 0 0 0 0 0 0 0 0 0 0 0 807 - 0 0 0 0 0 0 0 0 0 0 0 0 808 - 0 0 0 0 0 0 0 0 0 0 0 0 809 - 0 0 0 0 0 0 0 0 0 50 50 50 810 - 170 170 170 166 166 166 128 128 128 250 250 250 811 - 242 242 242 250 250 250 250 250 250 242 242 242 812 - 250 250 250 242 242 242 242 242 242 250 250 250 813 - 242 242 242 250 250 250 250 250 250 250 250 250 814 - 250 250 250 250 250 250 242 242 242 250 250 250 815 - 242 242 242 250 250 250 242 242 242 250 250 250 816 - 250 250 250 242 242 242 250 250 250 250 250 250 817 - 242 242 242 250 250 250 250 250 250 250 250 250 818 - 242 242 242 242 242 242 250 250 250 234 234 234 819 - 250 250 250 242 242 242 242 242 242 250 250 250 820 - 195 195 195 195 195 195 206 206 206 128 128 128 821 - 42 42 42 14 14 14 0 0 0 0 0 0 822 - 0 0 0 0 0 0 0 0 0 0 0 0 823 - 0 0 0 0 0 0 0 0 0 0 0 0 824 - 0 0 0 0 0 0 0 0 0 0 0 0 825 - 0 0 0 0 0 0 0 0 0 0 0 0 826 - 0 0 0 0 0 0 0 0 0 0 0 0 827 - 0 0 0 0 0 0 0 0 0 0 0 0 828 - 0 0 0 0 0 0 0 0 0 0 0 0 829 - 0 0 0 0 0 0 0 0 0 50 50 50 830 - 178 178 178 174 174 174 158 158 158 170 170 170 831 - 162 162 162 170 170 170 170 170 170 162 162 162 832 - 166 166 166 170 170 170 154 154 154 154 154 154 833 - 178 178 178 162 162 162 166 166 166 166 166 166 834 - 166 166 166 158 158 158 178 178 178 162 162 162 835 - 170 170 170 174 174 174 178 178 178 178 178 178 836 - 170 170 170 178 178 178 170 170 170 166 166 166 837 - 170 170 170 182 182 182 187 187 187 178 178 178 838 - 195 195 195 195 195 195 195 195 195 195 195 195 839 - 187 187 187 195 195 195 178 178 178 195 195 195 840 - 206 206 206 195 195 195 210 210 210 116 116 116 841 - 58 58 58 22 22 22 6 6 6 0 0 0 842 - 0 0 0 0 0 0 0 0 0 0 0 0 843 - 0 0 0 0 0 0 0 0 0 0 0 0 844 - 0 0 0 0 0 0 0 0 0 0 0 0 845 - 0 0 0 0 0 0 0 0 0 0 0 0 846 - 0 0 0 0 0 0 0 0 0 0 0 0 847 - 0 0 0 0 0 0 0 0 0 0 0 0 848 - 0 0 0 0 0 0 0 0 0 0 0 0 849 - 0 0 0 0 0 0 6 6 6 50 50 50 850 - 162 162 162 162 162 162 170 170 170 158 158 158 851 - 162 162 162 158 158 158 162 162 162 166 166 166 852 - 158 158 158 174 174 174 162 162 162 158 158 158 853 - 170 170 170 166 166 166 166 166 166 174 174 174 854 - 166 166 166 174 174 174 174 174 174 174 174 174 855 - 174 174 174 182 182 182 166 166 166 187 187 187 856 - 182 182 182 187 187 187 174 174 174 166 166 166 857 - 166 166 166 187 187 187 182 182 182 158 158 158 858 - 174 174 174 174 174 174 174 174 174 182 182 182 859 - 182 182 182 182 182 182 178 178 178 195 195 195 860 - 178 178 178 182 182 182 174 174 174 30 30 30 861 - 78 78 78 30 30 30 10 10 10 0 0 0 862 - 0 0 0 0 0 0 0 0 0 0 0 0 863 - 0 0 0 0 0 0 0 0 0 0 0 0 864 - 0 0 0 0 0 0 0 0 0 0 0 0 865 - 0 0 0 0 0 0 0 0 0 0 0 0 866 - 0 0 0 0 0 0 0 0 0 0 0 0 867 - 0 0 0 0 0 0 0 0 0 0 0 0 868 - 0 0 0 0 0 0 0 0 0 0 0 0 869 - 0 0 0 0 0 0 10 10 10 34 34 34 870 - 154 154 154 158 158 158 154 154 154 158 158 158 871 - 154 154 154 166 166 166 162 162 162 178 178 178 872 - 178 178 178 166 166 166 170 170 170 158 158 158 873 - 170 170 170 178 178 178 178 178 178 187 187 187 874 - 195 195 195 178 178 178 178 178 178 178 178 178 875 - 162 162 162 187 187 187 166 166 166 178 178 178 876 - 174 174 174 178 178 178 170 170 170 170 170 170 877 - 174 174 174 170 170 170 187 187 187 178 178 178 878 - 178 178 178 202 202 202 170 170 170 187 187 187 879 - 178 178 178 182 182 182 174 174 174 190 190 190 880 - 182 182 182 166 166 166 149 149 149 6 6 6 881 - 86 86 86 46 46 46 14 14 14 0 0 0 882 - 0 0 0 0 0 0 0 0 0 0 0 0 883 - 0 0 0 0 0 0 0 0 0 0 0 0 884 - 0 0 0 0 0 0 0 0 0 0 0 0 885 - 0 0 0 0 0 0 0 0 0 0 0 0 886 - 0 0 0 0 0 0 0 0 0 0 0 0 887 - 0 0 0 0 0 0 0 0 0 0 0 0 888 - 0 0 0 0 0 0 0 0 0 0 0 0 889 - 0 0 0 6 6 6 14 14 14 50 50 50 890 - 166 166 166 162 162 162 149 149 149 162 162 162 891 - 158 158 158 170 170 170 158 158 158 158 158 158 892 - 166 166 166 170 170 170 149 149 149 170 170 170 893 - 158 158 158 174 174 174 166 166 166 166 166 166 894 - 166 166 166 166 166 166 182 182 182 158 158 158 895 - 158 158 158 174 174 174 170 170 170 158 158 158 896 - 178 178 178 166 166 166 158 158 158 174 174 174 897 - 170 170 170 166 166 166 174 174 174 166 166 166 898 - 174 174 174 182 182 182 174 174 174 182 182 182 899 - 174 174 174 178 178 178 187 187 187 206 206 206 900 - 187 187 187 178 178 178 128 128 128 2 2 6 901 - 74 74 74 58 58 58 22 22 22 6 6 6 902 - 0 0 0 0 0 0 0 0 0 0 0 0 903 - 0 0 0 0 0 0 0 0 0 0 0 0 904 - 0 0 0 0 0 0 0 0 0 0 0 0 905 - 0 0 0 0 0 0 0 0 0 0 0 0 906 - 0 0 0 0 0 0 0 0 0 0 0 0 907 - 0 0 0 0 0 0 0 0 0 0 0 0 908 - 0 0 0 0 0 0 0 0 0 0 0 0 909 - 0 0 0 10 10 10 26 26 26 42 42 42 910 - 158 158 158 144 144 144 149 149 149 162 162 162 911 - 149 149 149 170 170 170 170 170 170 170 170 170 912 - 174 174 174 170 170 170 158 158 158 162 162 162 913 - 170 170 170 162 162 162 170 170 170 170 170 170 914 - 162 162 162 162 162 162 170 170 170 170 170 170 915 - 170 170 170 166 166 166 154 154 154 166 166 166 916 - 154 154 154 162 162 162 170 170 170 149 149 149 917 - 170 170 170 144 144 144 187 187 187 170 170 170 918 - 170 170 170 195 195 195 187 187 187 202 202 202 919 - 198 198 198 182 182 182 202 202 202 210 210 210 920 - 187 187 187 178 178 178 106 106 106 2 2 6 921 - 42 42 42 74 74 74 30 30 30 10 10 10 922 - 0 0 0 0 0 0 0 0 0 0 0 0 923 - 0 0 0 0 0 0 0 0 0 0 0 0 924 - 0 0 0 0 0 0 0 0 0 0 0 0 925 - 0 0 0 0 0 0 0 0 0 0 0 0 926 - 0 0 0 0 0 0 0 0 0 0 0 0 927 - 0 0 0 0 0 0 0 0 0 0 0 0 928 - 0 0 0 0 0 0 0 0 0 0 0 0 929 - 6 6 6 14 14 14 42 42 42 42 42 42 930 - 158 158 158 141 141 141 162 162 162 149 149 149 931 - 154 154 154 158 158 158 166 166 166 174 174 174 932 - 162 162 162 158 158 158 162 162 162 158 158 158 933 - 158 158 158 158 158 158 166 166 166 166 166 166 934 - 158 158 158 158 158 158 158 158 158 166 166 166 935 - 166 166 166 170 170 170 182 182 182 187 187 187 936 - 166 166 166 174 174 174 166 166 166 154 154 154 937 - 174 174 174 174 174 174 166 166 166 190 190 190 938 - 34 34 34 2 2 6 18 18 18 2 2 6 939 - 34 34 34 2 2 6 18 18 18 78 78 78 940 - 182 182 182 178 178 178 78 78 78 2 2 6 941 - 10 10 10 86 86 86 38 38 38 10 10 10 942 - 0 0 0 0 0 0 0 0 0 0 0 0 943 - 0 0 0 0 0 0 0 0 0 0 0 0 944 - 0 0 0 0 0 0 0 0 0 0 0 0 945 - 0 0 0 0 0 0 0 0 0 0 0 0 946 - 0 0 0 0 0 0 0 0 0 0 0 0 947 - 0 0 0 0 0 0 0 0 0 0 0 0 948 - 0 0 0 0 0 0 0 0 0 0 0 0 949 - 10 10 10 26 26 26 66 66 66 30 30 30 950 - 138 138 138 144 144 144 154 154 154 149 149 149 951 - 154 154 154 154 154 154 154 154 154 166 166 166 952 - 162 162 162 158 158 158 162 162 162 154 154 154 953 - 170 170 170 154 154 154 178 178 178 162 162 162 954 - 162 162 162 170 170 170 162 162 162 154 154 154 955 - 2 2 6 2 2 6 34 34 34 42 42 42 956 - 42 42 42 34 34 34 22 18 6 34 34 34 957 - 42 42 42 42 42 42 66 66 66 34 34 34 958 - 128 128 128 10 10 10 10 10 10 18 18 18 959 - 18 18 18 10 10 10 26 26 26 174 174 174 960 - 187 187 187 138 138 138 34 34 34 2 2 6 961 - 6 6 6 86 86 86 46 46 46 14 14 14 962 - 0 0 0 0 0 0 0 0 0 0 0 0 963 - 0 0 0 0 0 0 0 0 0 0 0 0 964 - 0 0 0 0 0 0 0 0 0 0 0 0 965 - 0 0 0 0 0 0 0 0 0 0 0 0 966 - 0 0 0 0 0 0 0 0 0 0 0 0 967 - 0 0 0 0 0 0 0 0 0 0 0 0 968 - 0 0 0 0 0 0 0 0 0 6 6 6 969 - 18 18 18 46 46 46 86 86 86 6 6 6 970 - 110 110 110 162 162 162 149 149 149 144 144 144 971 - 149 149 149 166 166 166 149 149 149 162 162 162 972 - 149 149 149 162 162 162 149 149 149 158 158 158 973 - 166 166 166 158 158 158 158 158 158 166 166 166 974 - 166 166 166 149 149 149 158 158 158 166 166 166 975 - 128 128 128 18 18 18 2 2 6 2 2 6 976 - 2 2 6 2 2 6 2 2 6 2 2 6 977 - 2 2 6 2 2 6 2 2 6 2 2 6 978 - 2 2 6 2 2 6 22 18 6 26 26 26 979 - 18 18 18 6 6 6 18 18 18 166 166 166 980 - 174 174 174 110 110 110 18 18 18 2 2 6 981 - 2 2 6 82 82 82 54 54 54 18 18 18 982 - 6 6 6 0 0 0 0 0 0 0 0 0 983 - 0 0 0 0 0 0 0 0 0 0 0 0 984 - 0 0 0 0 0 0 0 0 0 0 0 0 985 - 0 0 0 0 0 0 0 0 0 0 0 0 986 - 0 0 0 0 0 0 0 0 0 0 0 0 987 - 0 0 0 0 0 0 0 0 0 0 0 0 988 - 0 0 0 0 0 0 0 0 0 10 10 10 989 - 26 26 26 66 66 66 62 62 62 2 2 6 990 - 46 46 46 141 141 141 166 166 166 144 144 144 991 - 154 154 154 170 170 170 158 158 158 162 162 162 992 - 149 149 149 162 162 162 154 154 154 154 154 154 993 - 162 162 162 144 144 144 162 162 162 154 154 154 994 - 170 170 170 144 144 144 154 154 154 170 170 170 995 - 116 116 116 144 144 144 110 110 110 116 116 116 996 - 110 110 110 144 144 144 116 116 116 128 128 128 997 - 134 134 134 116 116 116 134 134 134 149 149 149 998 - 158 158 158 231 231 231 234 234 234 214 214 214 999 - 202 202 202 195 195 195 166 166 166 144 144 144 1000 - 144 144 144 34 34 34 2 2 6 2 2 6 1001 - 2 2 6 66 66 66 58 58 58 22 22 22 1002 - 6 6 6 0 0 0 0 0 0 0 0 0 1003 - 0 0 0 0 0 0 0 0 0 0 0 0 1004 - 0 0 0 0 0 0 0 0 0 0 0 0 1005 - 0 0 0 0 0 0 0 0 0 0 0 0 1006 - 0 0 0 0 0 0 0 0 0 0 0 0 1007 - 0 0 0 0 0 0 0 0 0 0 0 0 1008 - 0 0 0 0 0 0 0 0 0 10 10 10 1009 - 38 38 38 78 78 78 6 6 6 2 2 6 1010 - 14 14 14 123 123 123 138 138 138 90 90 90 1011 - 110 110 110 128 128 128 154 154 154 149 149 149 1012 - 144 144 144 149 149 149 158 158 158 149 149 149 1013 - 166 166 166 158 158 158 158 158 158 166 166 166 1014 - 158 158 158 158 158 158 158 158 158 158 158 158 1015 - 144 144 144 170 170 170 162 162 162 170 170 170 1016 - 187 187 187 174 174 174 170 170 170 170 170 170 1017 - 162 162 162 170 170 170 170 170 170 178 178 178 1018 - 187 187 187 190 190 190 170 170 170 149 149 149 1019 - 149 149 149 138 138 138 170 170 170 116 116 116 1020 - 18 18 18 2 2 6 2 2 6 2 2 6 1021 - 2 2 6 66 66 66 62 62 62 22 22 22 1022 - 6 6 6 0 0 0 0 0 0 0 0 0 1023 - 0 0 0 0 0 0 0 0 0 0 0 0 1024 - 0 0 0 0 0 0 0 0 0 0 0 0 1025 - 0 0 0 0 0 0 0 0 0 0 0 0 1026 - 0 0 0 0 0 0 0 0 0 0 0 0 1027 - 0 0 0 0 0 0 0 0 0 0 0 0 1028 - 0 0 0 0 0 0 6 6 6 18 18 18 1029 - 50 50 50 74 74 74 2 2 6 2 2 6 1030 - 14 14 14 94 94 94 134 134 134 74 74 74 1031 - 50 50 50 158 158 158 154 154 154 166 166 166 1032 - 162 162 162 170 170 170 162 162 162 178 178 178 1033 - 170 170 170 154 154 154 162 162 162 154 154 154 1034 - 154 154 154 154 154 154 170 170 170 141 141 141 1035 - 149 149 149 166 166 166 166 166 166 166 166 166 1036 - 178 178 178 174 174 174 158 158 158 174 174 174 1037 - 174 174 174 174 174 174 174 174 174 158 158 158 1038 - 166 166 166 166 166 166 170 170 170 170 170 170 1039 - 170 170 170 162 162 162 82 82 82 10 10 10 1040 - 2 2 6 2 2 6 2 2 6 2 2 6 1041 - 2 2 6 66 66 66 62 62 62 22 22 22 1042 - 6 6 6 0 0 0 0 0 0 0 0 0 1043 - 0 0 0 0 0 0 0 0 0 0 0 0 1044 - 0 0 0 0 0 0 0 0 0 0 0 0 1045 - 0 0 0 0 0 0 0 0 0 0 0 0 1046 - 0 0 0 0 0 0 0 0 0 0 0 0 1047 - 0 0 0 0 0 0 0 0 0 0 0 0 1048 - 0 0 0 0 0 0 6 6 6 18 18 18 1049 - 54 54 54 62 62 62 2 2 6 2 2 6 1050 - 2 2 6 34 34 34 123 123 123 18 18 18 1051 - 22 18 6 128 128 128 149 149 149 154 154 154 1052 - 158 158 158 158 158 158 149 149 149 166 166 166 1053 - 166 166 166 158 158 158 158 158 158 182 182 182 1054 - 158 158 158 149 149 149 149 149 149 178 178 178 1055 - 162 162 162 170 170 170 170 170 170 170 170 170 1056 - 174 174 174 178 178 178 170 170 170 178 178 178 1057 - 170 170 170 178 178 178 178 178 178 162 162 162 1058 - 174 174 174 170 170 170 166 166 166 166 166 166 1059 - 141 141 141 50 50 50 30 30 30 2 2 6 1060 - 2 2 6 2 2 6 2 2 6 2 2 6 1061 - 2 2 6 66 66 66 58 58 58 22 22 22 1062 - 6 6 6 0 0 0 0 0 0 0 0 0 1063 - 0 0 0 0 0 0 0 0 0 0 0 0 1064 - 0 0 0 0 0 0 0 0 0 0 0 0 1065 - 0 0 0 0 0 0 0 0 0 0 0 0 1066 - 0 0 0 0 0 0 0 0 0 0 0 0 1067 - 0 0 0 0 0 0 0 0 0 0 0 0 1068 - 0 0 0 0 0 0 6 6 6 22 22 22 1069 - 58 58 58 62 62 62 2 2 6 2 2 6 1070 - 2 2 6 2 2 6 38 38 38 144 144 144 1071 - 178 178 178 162 162 162 134 134 134 154 154 154 1072 - 154 154 154 154 154 154 154 154 154 170 170 170 1073 - 154 154 154 154 154 154 162 162 162 170 170 170 1074 - 162 162 162 154 154 154 158 158 158 174 174 174 1075 - 149 149 149 166 166 166 174 174 174 178 178 178 1076 - 174 174 174 174 174 174 166 166 166 174 174 174 1077 - 166 166 166 166 166 166 166 166 166 166 166 166 1078 - 170 170 170 170 170 170 166 166 166 138 138 138 1079 - 42 42 42 34 34 34 18 14 6 22 22 22 1080 - 26 26 26 18 18 18 6 6 6 2 2 6 1081 - 2 2 6 82 82 82 54 54 54 18 18 18 1082 - 6 6 6 0 0 0 0 0 0 0 0 0 1083 - 0 0 0 0 0 0 0 0 0 0 0 0 1084 - 0 0 0 0 0 0 0 0 0 0 0 0 1085 - 0 0 0 0 0 0 0 0 0 0 0 0 1086 - 0 0 0 0 0 0 0 0 0 0 0 0 1087 - 0 0 0 0 0 0 0 0 0 0 0 0 1088 - 0 0 0 0 0 0 6 6 6 26 26 26 1089 - 62 62 62 106 106 106 74 54 14 185 133 11 1090 - 210 162 10 121 92 8 6 6 6 78 78 78 1091 - 154 154 154 149 149 149 141 141 141 149 149 149 1092 - 149 149 149 149 149 149 158 158 158 141 141 141 1093 - 149 149 149 141 141 141 158 158 158 149 149 149 1094 - 149 149 149 149 149 149 162 162 162 170 170 170 1095 - 154 154 154 170 170 170 162 162 162 166 166 166 1096 - 170 170 170 170 170 170 170 170 170 162 162 162 1097 - 162 162 162 170 170 170 170 170 170 170 170 170 1098 - 170 170 170 162 162 162 162 162 162 38 38 38 1099 - 14 14 14 2 2 6 2 2 6 2 2 6 1100 - 6 6 6 18 18 18 66 66 66 38 38 38 1101 - 6 6 6 94 94 94 50 50 50 18 18 18 1102 - 6 6 6 0 0 0 0 0 0 0 0 0 1103 - 0 0 0 0 0 0 0 0 0 0 0 0 1104 - 0 0 0 0 0 0 0 0 0 0 0 0 1105 - 0 0 0 0 0 0 0 0 0 0 0 0 1106 - 0 0 0 0 0 0 0 0 0 0 0 0 1107 - 0 0 0 0 0 0 0 0 0 6 6 6 1108 - 10 10 10 10 10 10 18 18 18 38 38 38 1109 - 78 78 78 142 134 106 216 158 10 242 186 14 1110 - 246 190 14 246 190 14 156 118 10 10 10 10 1111 - 116 116 116 182 182 182 138 138 138 154 154 154 1112 - 154 154 154 138 138 138 162 162 162 170 170 170 1113 - 178 178 178 138 138 138 162 162 162 162 162 162 1114 - 162 162 162 158 158 158 149 149 149 174 174 174 1115 - 134 134 134 174 174 174 170 170 170 158 158 158 1116 - 158 158 158 174 174 174 141 141 141 174 174 174 1117 - 149 149 149 166 166 166 158 158 158 174 174 174 1118 - 141 141 141 178 178 178 175 146 61 37 26 9 1119 - 2 2 6 2 2 6 2 2 6 2 2 6 1120 - 2 2 6 2 2 6 38 38 38 46 46 46 1121 - 26 26 26 106 106 106 54 54 54 18 18 18 1122 - 6 6 6 0 0 0 0 0 0 0 0 0 1123 - 0 0 0 0 0 0 0 0 0 0 0 0 1124 - 0 0 0 0 0 0 0 0 0 0 0 0 1125 - 0 0 0 0 0 0 0 0 0 0 0 0 1126 - 0 0 0 0 0 0 0 0 0 0 0 0 1127 - 0 0 0 6 6 6 14 14 14 22 22 22 1128 - 30 30 30 38 38 38 50 50 50 70 70 70 1129 - 106 106 106 190 142 34 226 170 11 242 186 14 1130 - 246 190 14 246 190 14 246 190 14 154 114 10 1131 - 6 6 6 74 74 74 226 226 226 253 253 253 1132 - 253 253 253 253 253 253 253 253 253 253 253 253 1133 - 253 253 253 253 253 253 231 231 231 250 250 250 1134 - 253 253 253 253 253 253 253 253 253 253 253 253 1135 - 253 253 253 253 253 253 253 253 253 253 253 253 1136 - 253 253 253 253 253 253 253 253 253 253 253 253 1137 - 253 253 253 253 253 253 253 253 253 228 184 62 1138 - 241 196 14 241 208 19 232 195 16 38 30 10 1139 - 2 2 6 2 2 6 2 2 6 2 2 6 1140 - 2 2 6 6 6 6 30 30 30 26 26 26 1141 - 203 166 17 154 142 90 66 66 66 26 26 26 1142 - 6 6 6 0 0 0 0 0 0 0 0 0 1143 - 0 0 0 0 0 0 0 0 0 0 0 0 1144 - 0 0 0 0 0 0 0 0 0 0 0 0 1145 - 0 0 0 0 0 0 0 0 0 0 0 0 1146 - 0 0 0 0 0 0 0 0 0 0 0 0 1147 - 6 6 6 18 18 18 38 38 38 58 58 58 1148 - 78 78 78 86 86 86 101 101 101 123 123 123 1149 - 175 146 61 210 150 10 234 174 13 246 186 14 1150 - 246 190 14 246 190 14 246 190 14 238 190 10 1151 - 102 78 10 2 2 6 46 46 46 198 198 198 1152 - 253 253 253 253 253 253 253 253 253 253 253 253 1153 - 253 253 253 253 253 253 234 234 234 242 242 242 1154 - 253 253 253 253 253 253 253 253 253 253 253 253 1155 - 253 253 253 253 253 253 253 253 253 253 253 253 1156 - 253 253 253 253 253 253 253 253 253 253 253 253 1157 - 253 253 253 253 253 253 253 253 253 224 178 62 1158 - 242 186 14 241 196 14 210 166 10 22 18 6 1159 - 2 2 6 2 2 6 2 2 6 2 2 6 1160 - 2 2 6 2 2 6 6 6 6 121 92 8 1161 - 238 202 15 232 195 16 82 82 82 34 34 34 1162 - 10 10 10 0 0 0 0 0 0 0 0 0 1163 - 0 0 0 0 0 0 0 0 0 0 0 0 1164 - 0 0 0 0 0 0 0 0 0 0 0 0 1165 - 0 0 0 0 0 0 0 0 0 0 0 0 1166 - 0 0 0 0 0 0 0 0 0 0 0 0 1167 - 14 14 14 38 38 38 70 70 70 154 122 46 1168 - 190 142 34 200 144 11 197 138 11 197 138 11 1169 - 213 154 11 226 170 11 242 186 14 246 190 14 1170 - 246 190 14 246 190 14 246 190 14 246 190 14 1171 - 225 175 15 46 32 6 2 2 6 22 22 22 1172 - 158 158 158 250 250 250 253 253 253 253 253 253 1173 - 253 253 253 253 253 253 253 253 253 253 253 253 1174 - 253 253 253 253 253 253 253 253 253 253 253 253 1175 - 253 253 253 253 253 253 253 253 253 253 253 253 1176 - 253 253 253 253 253 253 253 253 253 253 253 253 1177 - 253 253 253 250 250 250 242 242 242 224 178 62 1178 - 239 182 13 236 186 11 213 154 11 46 32 6 1179 - 2 2 6 2 2 6 2 2 6 2 2 6 1180 - 2 2 6 2 2 6 61 42 6 225 175 15 1181 - 238 190 10 236 186 11 112 100 78 42 42 42 1182 - 14 14 14 0 0 0 0 0 0 0 0 0 1183 - 0 0 0 0 0 0 0 0 0 0 0 0 1184 - 0 0 0 0 0 0 0 0 0 0 0 0 1185 - 0 0 0 0 0 0 0 0 0 0 0 0 1186 - 0 0 0 0 0 0 0 0 0 6 6 6 1187 - 22 22 22 54 54 54 154 122 46 213 154 11 1188 - 226 170 11 230 174 11 226 170 11 226 170 11 1189 - 236 178 12 242 186 14 246 190 14 246 190 14 1190 - 246 190 14 246 190 14 246 190 14 246 190 14 1191 - 241 196 14 184 144 12 10 10 10 2 2 6 1192 - 6 6 6 116 116 116 242 242 242 253 253 253 1193 - 253 253 253 253 253 253 253 253 253 253 253 253 1194 - 253 253 253 253 253 253 253 253 253 253 253 253 1195 - 253 253 253 253 253 253 253 253 253 253 253 253 1196 - 253 253 253 253 253 253 253 253 253 253 253 253 1197 - 253 253 253 231 231 231 198 198 198 214 170 54 1198 - 236 178 12 236 178 12 210 150 10 137 92 6 1199 - 18 14 6 2 2 6 2 2 6 2 2 6 1200 - 6 6 6 70 47 6 200 144 11 236 178 12 1201 - 239 182 13 239 182 13 124 112 88 58 58 58 1202 - 22 22 22 6 6 6 0 0 0 0 0 0 1203 - 0 0 0 0 0 0 0 0 0 0 0 0 1204 - 0 0 0 0 0 0 0 0 0 0 0 0 1205 - 0 0 0 0 0 0 0 0 0 0 0 0 1206 - 0 0 0 0 0 0 0 0 0 10 10 10 1207 - 30 30 30 70 70 70 180 133 36 226 170 11 1208 - 239 182 13 242 186 14 242 186 14 246 186 14 1209 - 246 190 14 246 190 14 246 190 14 246 190 14 1210 - 246 190 14 246 190 14 246 190 14 246 190 14 1211 - 246 190 14 232 195 16 98 70 6 2 2 6 1212 - 2 2 6 2 2 6 66 66 66 221 221 221 1213 - 253 253 253 253 253 253 253 253 253 253 253 253 1214 - 253 253 253 253 253 253 253 253 253 253 253 253 1215 - 253 253 253 253 253 253 253 253 253 253 253 253 1216 - 253 253 253 253 253 253 253 253 253 253 253 253 1217 - 253 253 253 206 206 206 198 198 198 214 166 58 1218 - 230 174 11 230 174 11 216 158 10 192 133 9 1219 - 163 110 8 116 81 8 102 78 10 116 81 8 1220 - 167 114 7 197 138 11 226 170 11 239 182 13 1221 - 242 186 14 242 186 14 162 146 94 78 78 78 1222 - 34 34 34 14 14 14 6 6 6 0 0 0 1223 - 0 0 0 0 0 0 0 0 0 0 0 0 1224 - 0 0 0 0 0 0 0 0 0 0 0 0 1225 - 0 0 0 0 0 0 0 0 0 0 0 0 1226 - 0 0 0 0 0 0 0 0 0 6 6 6 1227 - 30 30 30 78 78 78 190 142 34 226 170 11 1228 - 239 182 13 246 190 14 246 190 14 246 190 14 1229 - 246 190 14 246 190 14 246 190 14 246 190 14 1230 - 246 190 14 246 190 14 246 190 14 246 190 14 1231 - 246 190 14 241 196 14 203 166 17 22 18 6 1232 - 2 2 6 2 2 6 2 2 6 38 38 38 1233 - 218 218 218 253 253 253 253 253 253 253 253 253 1234 - 253 253 253 253 253 253 253 253 253 253 253 253 1235 - 253 253 253 253 253 253 253 253 253 253 253 253 1236 - 253 253 253 253 253 253 253 253 253 253 253 253 1237 - 250 250 250 206 206 206 198 198 198 202 162 69 1238 - 226 170 11 236 178 12 224 166 10 210 150 10 1239 - 200 144 11 197 138 11 192 133 9 197 138 11 1240 - 210 150 10 226 170 11 242 186 14 246 190 14 1241 - 246 190 14 246 186 14 225 175 15 124 112 88 1242 - 62 62 62 30 30 30 14 14 14 6 6 6 1243 - 0 0 0 0 0 0 0 0 0 0 0 0 1244 - 0 0 0 0 0 0 0 0 0 0 0 0 1245 - 0 0 0 0 0 0 0 0 0 0 0 0 1246 - 0 0 0 0 0 0 0 0 0 10 10 10 1247 - 30 30 30 78 78 78 174 135 50 224 166 10 1248 - 239 182 13 246 190 14 246 190 14 246 190 14 1249 - 246 190 14 246 190 14 246 190 14 246 190 14 1250 - 246 190 14 246 190 14 246 190 14 246 190 14 1251 - 246 190 14 246 190 14 241 196 14 139 102 15 1252 - 2 2 6 2 2 6 2 2 6 2 2 6 1253 - 78 78 78 250 250 250 253 253 253 253 253 253 1254 - 253 253 253 253 253 253 253 253 253 253 253 253 1255 - 253 253 253 253 253 253 253 253 253 253 253 253 1256 - 253 253 253 253 253 253 253 253 253 253 253 253 1257 - 250 250 250 214 214 214 198 198 198 190 150 46 1258 - 219 162 10 236 178 12 234 174 13 224 166 10 1259 - 216 158 10 213 154 11 213 154 11 216 158 10 1260 - 226 170 11 239 182 13 246 190 14 246 190 14 1261 - 246 190 14 246 190 14 242 186 14 206 162 42 1262 - 101 101 101 58 58 58 30 30 30 14 14 14 1263 - 6 6 6 0 0 0 0 0 0 0 0 0 1264 - 0 0 0 0 0 0 0 0 0 0 0 0 1265 - 0 0 0 0 0 0 0 0 0 0 0 0 1266 - 0 0 0 0 0 0 0 0 0 10 10 10 1267 - 30 30 30 74 74 74 174 135 50 216 158 10 1268 - 236 178 12 246 190 14 246 190 14 246 190 14 1269 - 246 190 14 246 190 14 246 190 14 246 190 14 1270 - 246 190 14 246 190 14 246 190 14 246 190 14 1271 - 246 190 14 246 190 14 241 196 14 226 184 13 1272 - 61 42 6 2 2 6 2 2 6 2 2 6 1273 - 22 22 22 238 238 238 253 253 253 253 253 253 1274 - 253 253 253 253 253 253 253 253 253 253 253 253 1275 - 253 253 253 253 253 253 253 253 253 253 253 253 1276 - 253 253 253 253 253 253 253 253 253 253 253 253 1277 - 253 253 253 226 226 226 187 187 187 180 133 36 1278 - 216 158 10 236 178 12 239 182 13 236 178 12 1279 - 230 174 11 226 170 11 226 170 11 230 174 11 1280 - 236 178 12 242 186 14 246 190 14 246 190 14 1281 - 246 190 14 246 190 14 246 186 14 239 182 13 1282 - 206 162 42 106 106 106 66 66 66 34 34 34 1283 - 14 14 14 6 6 6 0 0 0 0 0 0 1284 - 0 0 0 0 0 0 0 0 0 0 0 0 1285 - 0 0 0 0 0 0 0 0 0 0 0 0 1286 - 0 0 0 0 0 0 0 0 0 6 6 6 1287 - 26 26 26 70 70 70 163 133 67 213 154 11 1288 - 236 178 12 246 190 14 246 190 14 246 190 14 1289 - 246 190 14 246 190 14 246 190 14 246 190 14 1290 - 246 190 14 246 190 14 246 190 14 246 190 14 1291 - 246 190 14 246 190 14 246 190 14 241 196 14 1292 - 190 146 13 18 14 6 2 2 6 2 2 6 1293 - 46 46 46 246 246 246 253 253 253 253 253 253 1294 - 253 253 253 253 253 253 253 253 253 253 253 253 1295 - 253 253 253 253 253 253 253 253 253 253 253 253 1296 - 253 253 253 253 253 253 253 253 253 253 253 253 1297 - 253 253 253 221 221 221 86 86 86 156 107 11 1298 - 216 158 10 236 178 12 242 186 14 246 186 14 1299 - 242 186 14 239 182 13 239 182 13 242 186 14 1300 - 242 186 14 246 186 14 246 190 14 246 190 14 1301 - 246 190 14 246 190 14 246 190 14 246 190 14 1302 - 242 186 14 225 175 15 142 122 72 66 66 66 1303 - 30 30 30 10 10 10 0 0 0 0 0 0 1304 - 0 0 0 0 0 0 0 0 0 0 0 0 1305 - 0 0 0 0 0 0 0 0 0 0 0 0 1306 - 0 0 0 0 0 0 0 0 0 6 6 6 1307 - 26 26 26 70 70 70 163 133 67 210 150 10 1308 - 236 178 12 246 190 14 246 190 14 246 190 14 1309 - 246 190 14 246 190 14 246 190 14 246 190 14 1310 - 246 190 14 246 190 14 246 190 14 246 190 14 1311 - 246 190 14 246 190 14 246 190 14 246 190 14 1312 - 232 195 16 121 92 8 34 34 34 106 106 106 1313 - 221 221 221 253 253 253 253 253 253 253 253 253 1314 - 253 253 253 253 253 253 253 253 253 253 253 253 1315 - 253 253 253 253 253 253 253 253 253 253 253 253 1316 - 253 253 253 253 253 253 253 253 253 253 253 253 1317 - 242 242 242 82 82 82 18 14 6 163 110 8 1318 - 216 158 10 236 178 12 242 186 14 246 190 14 1319 - 246 190 14 246 190 14 246 190 14 246 190 14 1320 - 246 190 14 246 190 14 246 190 14 246 190 14 1321 - 246 190 14 246 190 14 246 190 14 246 190 14 1322 - 246 190 14 246 190 14 242 186 14 163 133 67 1323 - 46 46 46 18 18 18 6 6 6 0 0 0 1324 - 0 0 0 0 0 0 0 0 0 0 0 0 1325 - 0 0 0 0 0 0 0 0 0 0 0 0 1326 - 0 0 0 0 0 0 0 0 0 10 10 10 1327 - 30 30 30 78 78 78 163 133 67 210 150 10 1328 - 236 178 12 246 186 14 246 190 14 246 190 14 1329 - 246 190 14 246 190 14 246 190 14 246 190 14 1330 - 246 190 14 246 190 14 246 190 14 246 190 14 1331 - 246 190 14 246 190 14 246 190 14 246 190 14 1332 - 241 196 14 215 174 15 190 178 144 253 253 253 1333 - 253 253 253 253 253 253 253 253 253 253 253 253 1334 - 253 253 253 253 253 253 253 253 253 253 253 253 1335 - 253 253 253 253 253 253 253 253 253 253 253 253 1336 - 253 253 253 253 253 253 253 253 253 218 218 218 1337 - 58 58 58 2 2 6 22 18 6 167 114 7 1338 - 216 158 10 236 178 12 246 186 14 246 190 14 1339 - 246 190 14 246 190 14 246 190 14 246 190 14 1340 - 246 190 14 246 190 14 246 190 14 246 190 14 1341 - 246 190 14 246 190 14 246 190 14 246 190 14 1342 - 246 190 14 246 186 14 242 186 14 190 150 46 1343 - 54 54 54 22 22 22 6 6 6 0 0 0 1344 - 0 0 0 0 0 0 0 0 0 0 0 0 1345 - 0 0 0 0 0 0 0 0 0 0 0 0 1346 - 0 0 0 0 0 0 0 0 0 14 14 14 1347 - 38 38 38 86 86 86 180 133 36 213 154 11 1348 - 236 178 12 246 186 14 246 190 14 246 190 14 1349 - 246 190 14 246 190 14 246 190 14 246 190 14 1350 - 246 190 14 246 190 14 246 190 14 246 190 14 1351 - 246 190 14 246 190 14 246 190 14 246 190 14 1352 - 246 190 14 232 195 16 190 146 13 214 214 214 1353 - 253 253 253 253 253 253 253 253 253 253 253 253 1354 - 253 253 253 253 253 253 253 253 253 253 253 253 1355 - 253 253 253 253 253 253 253 253 253 253 253 253 1356 - 253 253 253 250 250 250 170 170 170 26 26 26 1357 - 2 2 6 2 2 6 37 26 9 163 110 8 1358 - 219 162 10 239 182 13 246 186 14 246 190 14 1359 - 246 190 14 246 190 14 246 190 14 246 190 14 1360 - 246 190 14 246 190 14 246 190 14 246 190 14 1361 - 246 190 14 246 190 14 246 190 14 246 190 14 1362 - 246 186 14 236 178 12 224 166 10 142 122 72 1363 - 46 46 46 18 18 18 6 6 6 0 0 0 1364 - 0 0 0 0 0 0 0 0 0 0 0 0 1365 - 0 0 0 0 0 0 0 0 0 0 0 0 1366 - 0 0 0 0 0 0 6 6 6 18 18 18 1367 - 50 50 50 109 106 95 192 133 9 224 166 10 1368 - 242 186 14 246 190 14 246 190 14 246 190 14 1369 - 246 190 14 246 190 14 246 190 14 246 190 14 1370 - 246 190 14 246 190 14 246 190 14 246 190 14 1371 - 246 190 14 246 190 14 246 190 14 246 190 14 1372 - 242 186 14 226 184 13 210 162 10 142 110 46 1373 - 226 226 226 253 253 253 253 253 253 253 253 253 1374 - 253 253 253 253 253 253 253 253 253 253 253 253 1375 - 253 253 253 253 253 253 253 253 253 253 253 253 1376 - 198 198 198 66 66 66 2 2 6 2 2 6 1377 - 2 2 6 2 2 6 50 34 6 156 107 11 1378 - 219 162 10 239 182 13 246 186 14 246 190 14 1379 - 246 190 14 246 190 14 246 190 14 246 190 14 1380 - 246 190 14 246 190 14 246 190 14 246 190 14 1381 - 246 190 14 246 190 14 246 190 14 242 186 14 1382 - 234 174 13 213 154 11 154 122 46 66 66 66 1383 - 30 30 30 10 10 10 0 0 0 0 0 0 1384 - 0 0 0 0 0 0 0 0 0 0 0 0 1385 - 0 0 0 0 0 0 0 0 0 0 0 0 1386 - 0 0 0 0 0 0 6 6 6 22 22 22 1387 - 58 58 58 154 121 60 206 145 10 234 174 13 1388 - 242 186 14 246 186 14 246 190 14 246 190 14 1389 - 246 190 14 246 190 14 246 190 14 246 190 14 1390 - 246 190 14 246 190 14 246 190 14 246 190 14 1391 - 246 190 14 246 190 14 246 190 14 246 190 14 1392 - 246 186 14 236 178 12 210 162 10 163 110 8 1393 - 61 42 6 138 138 138 218 218 218 250 250 250 1394 - 253 253 253 253 253 253 253 253 253 250 250 250 1395 - 242 242 242 210 210 210 144 144 144 66 66 66 1396 - 6 6 6 2 2 6 2 2 6 2 2 6 1397 - 2 2 6 2 2 6 61 42 6 163 110 8 1398 - 216 158 10 236 178 12 246 190 14 246 190 14 1399 - 246 190 14 246 190 14 246 190 14 246 190 14 1400 - 246 190 14 246 190 14 246 190 14 246 190 14 1401 - 246 190 14 239 182 13 230 174 11 216 158 10 1402 - 190 142 34 124 112 88 70 70 70 38 38 38 1403 - 18 18 18 6 6 6 0 0 0 0 0 0 1404 - 0 0 0 0 0 0 0 0 0 0 0 0 1405 - 0 0 0 0 0 0 0 0 0 0 0 0 1406 - 0 0 0 0 0 0 6 6 6 22 22 22 1407 - 62 62 62 168 124 44 206 145 10 224 166 10 1408 - 236 178 12 239 182 13 242 186 14 242 186 14 1409 - 246 186 14 246 190 14 246 190 14 246 190 14 1410 - 246 190 14 246 190 14 246 190 14 246 190 14 1411 - 246 190 14 246 190 14 246 190 14 246 190 14 1412 - 246 190 14 236 178 12 216 158 10 175 118 6 1413 - 80 54 7 2 2 6 6 6 6 30 30 30 1414 - 54 54 54 62 62 62 50 50 50 38 38 38 1415 - 14 14 14 2 2 6 2 2 6 2 2 6 1416 - 2 2 6 2 2 6 2 2 6 2 2 6 1417 - 2 2 6 6 6 6 80 54 7 167 114 7 1418 - 213 154 11 236 178 12 246 190 14 246 190 14 1419 - 246 190 14 246 190 14 246 190 14 246 190 14 1420 - 246 190 14 242 186 14 239 182 13 239 182 13 1421 - 230 174 11 210 150 10 174 135 50 124 112 88 1422 - 82 82 82 54 54 54 34 34 34 18 18 18 1423 - 6 6 6 0 0 0 0 0 0 0 0 0 1424 - 0 0 0 0 0 0 0 0 0 0 0 0 1425 - 0 0 0 0 0 0 0 0 0 0 0 0 1426 - 0 0 0 0 0 0 6 6 6 18 18 18 1427 - 50 50 50 158 118 36 192 133 9 200 144 11 1428 - 216 158 10 219 162 10 224 166 10 226 170 11 1429 - 230 174 11 236 178 12 239 182 13 239 182 13 1430 - 242 186 14 246 186 14 246 190 14 246 190 14 1431 - 246 190 14 246 190 14 246 190 14 246 190 14 1432 - 246 186 14 230 174 11 210 150 10 163 110 8 1433 - 104 69 6 10 10 10 2 2 6 2 2 6 1434 - 2 2 6 2 2 6 2 2 6 2 2 6 1435 - 2 2 6 2 2 6 2 2 6 2 2 6 1436 - 2 2 6 2 2 6 2 2 6 2 2 6 1437 - 2 2 6 6 6 6 91 60 6 167 114 7 1438 - 206 145 10 230 174 11 242 186 14 246 190 14 1439 - 246 190 14 246 190 14 246 186 14 242 186 14 1440 - 239 182 13 230 174 11 224 166 10 213 154 11 1441 - 180 133 36 124 112 88 86 86 86 58 58 58 1442 - 38 38 38 22 22 22 10 10 10 6 6 6 1443 - 0 0 0 0 0 0 0 0 0 0 0 0 1444 - 0 0 0 0 0 0 0 0 0 0 0 0 1445 - 0 0 0 0 0 0 0 0 0 0 0 0 1446 - 0 0 0 0 0 0 0 0 0 14 14 14 1447 - 34 34 34 70 70 70 138 110 50 158 118 36 1448 - 167 114 7 180 123 7 192 133 9 197 138 11 1449 - 200 144 11 206 145 10 213 154 11 219 162 10 1450 - 224 166 10 230 174 11 239 182 13 242 186 14 1451 - 246 186 14 246 186 14 246 186 14 246 186 14 1452 - 239 182 13 216 158 10 185 133 11 152 99 6 1453 - 104 69 6 18 14 6 2 2 6 2 2 6 1454 - 2 2 6 2 2 6 2 2 6 2 2 6 1455 - 2 2 6 2 2 6 2 2 6 2 2 6 1456 - 2 2 6 2 2 6 2 2 6 2 2 6 1457 - 2 2 6 6 6 6 80 54 7 152 99 6 1458 - 192 133 9 219 162 10 236 178 12 239 182 13 1459 - 246 186 14 242 186 14 239 182 13 236 178 12 1460 - 224 166 10 206 145 10 192 133 9 154 121 60 1461 - 94 94 94 62 62 62 42 42 42 22 22 22 1462 - 14 14 14 6 6 6 0 0 0 0 0 0 1463 - 0 0 0 0 0 0 0 0 0 0 0 0 1464 - 0 0 0 0 0 0 0 0 0 0 0 0 1465 - 0 0 0 0 0 0 0 0 0 0 0 0 1466 - 0 0 0 0 0 0 0 0 0 6 6 6 1467 - 18 18 18 34 34 34 58 58 58 78 78 78 1468 - 101 98 89 124 112 88 142 110 46 156 107 11 1469 - 163 110 8 167 114 7 175 118 6 180 123 7 1470 - 185 133 11 197 138 11 210 150 10 219 162 10 1471 - 226 170 11 236 178 12 236 178 12 234 174 13 1472 - 219 162 10 197 138 11 163 110 8 130 83 6 1473 - 91 60 6 10 10 10 2 2 6 2 2 6 1474 - 18 18 18 38 38 38 38 38 38 38 38 38 1475 - 38 38 38 38 38 38 38 38 38 38 38 38 1476 - 38 38 38 38 38 38 26 26 26 2 2 6 1477 - 2 2 6 6 6 6 70 47 6 137 92 6 1478 - 175 118 6 200 144 11 219 162 10 230 174 11 1479 - 234 174 13 230 174 11 219 162 10 210 150 10 1480 - 192 133 9 163 110 8 124 112 88 82 82 82 1481 - 50 50 50 30 30 30 14 14 14 6 6 6 1482 - 0 0 0 0 0 0 0 0 0 0 0 0 1483 - 0 0 0 0 0 0 0 0 0 0 0 0 1484 - 0 0 0 0 0 0 0 0 0 0 0 0 1485 - 0 0 0 0 0 0 0 0 0 0 0 0 1486 - 0 0 0 0 0 0 0 0 0 0 0 0 1487 - 6 6 6 14 14 14 22 22 22 34 34 34 1488 - 42 42 42 58 58 58 74 74 74 86 86 86 1489 - 101 98 89 122 102 70 130 98 46 121 87 25 1490 - 137 92 6 152 99 6 163 110 8 180 123 7 1491 - 185 133 11 197 138 11 206 145 10 200 144 11 1492 - 180 123 7 156 107 11 130 83 6 104 69 6 1493 - 50 34 6 54 54 54 110 110 110 101 98 89 1494 - 86 86 86 82 82 82 78 78 78 78 78 78 1495 - 78 78 78 78 78 78 78 78 78 78 78 78 1496 - 78 78 78 82 82 82 86 86 86 94 94 94 1497 - 106 106 106 101 101 101 86 66 34 124 80 6 1498 - 156 107 11 180 123 7 192 133 9 200 144 11 1499 - 206 145 10 200 144 11 192 133 9 175 118 6 1500 - 139 102 15 109 106 95 70 70 70 42 42 42 1501 - 22 22 22 10 10 10 0 0 0 0 0 0 1502 - 0 0 0 0 0 0 0 0 0 0 0 0 1503 - 0 0 0 0 0 0 0 0 0 0 0 0 1504 - 0 0 0 0 0 0 0 0 0 0 0 0 1505 - 0 0 0 0 0 0 0 0 0 0 0 0 1506 - 0 0 0 0 0 0 0 0 0 0 0 0 1507 - 0 0 0 0 0 0 6 6 6 10 10 10 1508 - 14 14 14 22 22 22 30 30 30 38 38 38 1509 - 50 50 50 62 62 62 74 74 74 90 90 90 1510 - 101 98 89 112 100 78 121 87 25 124 80 6 1511 - 137 92 6 152 99 6 152 99 6 152 99 6 1512 - 138 86 6 124 80 6 98 70 6 86 66 30 1513 - 101 98 89 82 82 82 58 58 58 46 46 46 1514 - 38 38 38 34 34 34 34 34 34 34 34 34 1515 - 34 34 34 34 34 34 34 34 34 34 34 34 1516 - 34 34 34 34 34 34 38 38 38 42 42 42 1517 - 54 54 54 82 82 82 94 86 76 91 60 6 1518 - 134 86 6 156 107 11 167 114 7 175 118 6 1519 - 175 118 6 167 114 7 152 99 6 121 87 25 1520 - 101 98 89 62 62 62 34 34 34 18 18 18 1521 - 6 6 6 0 0 0 0 0 0 0 0 0 1522 - 0 0 0 0 0 0 0 0 0 0 0 0 1523 - 0 0 0 0 0 0 0 0 0 0 0 0 1524 - 0 0 0 0 0 0 0 0 0 0 0 0 1525 - 0 0 0 0 0 0 0 0 0 0 0 0 1526 - 0 0 0 0 0 0 0 0 0 0 0 0 1527 - 0 0 0 0 0 0 0 0 0 0 0 0 1528 - 0 0 0 6 6 6 6 6 6 10 10 10 1529 - 18 18 18 22 22 22 30 30 30 42 42 42 1530 - 50 50 50 66 66 66 86 86 86 101 98 89 1531 - 106 86 58 98 70 6 104 69 6 104 69 6 1532 - 104 69 6 91 60 6 82 62 34 90 90 90 1533 - 62 62 62 38 38 38 22 22 22 14 14 14 1534 - 10 10 10 10 10 10 10 10 10 10 10 10 1535 - 10 10 10 10 10 10 6 6 6 10 10 10 1536 - 10 10 10 10 10 10 10 10 10 14 14 14 1537 - 22 22 22 42 42 42 70 70 70 89 81 66 1538 - 80 54 7 104 69 6 124 80 6 137 92 6 1539 - 134 86 6 116 81 8 100 82 52 86 86 86 1540 - 58 58 58 30 30 30 14 14 14 6 6 6 1541 - 0 0 0 0 0 0 0 0 0 0 0 0 1542 - 0 0 0 0 0 0 0 0 0 0 0 0 1543 - 0 0 0 0 0 0 0 0 0 0 0 0 1544 - 0 0 0 0 0 0 0 0 0 0 0 0 1545 - 0 0 0 0 0 0 0 0 0 0 0 0 1546 - 0 0 0 0 0 0 0 0 0 0 0 0 1547 - 0 0 0 0 0 0 0 0 0 0 0 0 1548 - 0 0 0 0 0 0 0 0 0 0 0 0 1549 - 0 0 0 6 6 6 10 10 10 14 14 14 1550 - 18 18 18 26 26 26 38 38 38 54 54 54 1551 - 70 70 70 86 86 86 94 86 76 89 81 66 1552 - 89 81 66 86 86 86 74 74 74 50 50 50 1553 - 30 30 30 14 14 14 6 6 6 0 0 0 1554 - 0 0 0 0 0 0 0 0 0 0 0 0 1555 - 0 0 0 0 0 0 0 0 0 0 0 0 1556 - 0 0 0 0 0 0 0 0 0 0 0 0 1557 - 6 6 6 18 18 18 34 34 34 58 58 58 1558 - 82 82 82 89 81 66 89 81 66 89 81 66 1559 - 94 86 66 94 86 76 74 74 74 50 50 50 1560 - 26 26 26 14 14 14 6 6 6 0 0 0 1561 - 0 0 0 0 0 0 0 0 0 0 0 0 1562 - 0 0 0 0 0 0 0 0 0 0 0 0 1563 - 0 0 0 0 0 0 0 0 0 0 0 0 1564 - 0 0 0 0 0 0 0 0 0 0 0 0 1565 - 0 0 0 0 0 0 0 0 0 0 0 0 1566 - 0 0 0 0 0 0 0 0 0 0 0 0 1567 - 0 0 0 0 0 0 0 0 0 0 0 0 1568 - 0 0 0 0 0 0 0 0 0 0 0 0 1569 - 0 0 0 0 0 0 0 0 0 0 0 0 1570 - 6 6 6 6 6 6 14 14 14 18 18 18 1571 - 30 30 30 38 38 38 46 46 46 54 54 54 1572 - 50 50 50 42 42 42 30 30 30 18 18 18 1573 - 10 10 10 0 0 0 0 0 0 0 0 0 1574 - 0 0 0 0 0 0 0 0 0 0 0 0 1575 - 0 0 0 0 0 0 0 0 0 0 0 0 1576 - 0 0 0 0 0 0 0 0 0 0 0 0 1577 - 0 0 0 6 6 6 14 14 14 26 26 26 1578 - 38 38 38 50 50 50 58 58 58 58 58 58 1579 - 54 54 54 42 42 42 30 30 30 18 18 18 1580 - 10 10 10 0 0 0 0 0 0 0 0 0 1581 - 0 0 0 0 0 0 0 0 0 0 0 0 1582 - 0 0 0 0 0 0 0 0 0 0 0 0 1583 - 0 0 0 0 0 0 0 0 0 0 0 0 1584 - 0 0 0 0 0 0 0 0 0 0 0 0 1585 - 0 0 0 0 0 0 0 0 0 0 0 0 1586 - 0 0 0 0 0 0 0 0 0 0 0 0 1587 - 0 0 0 0 0 0 0 0 0 0 0 0 1588 - 0 0 0 0 0 0 0 0 0 0 0 0 1589 - 0 0 0 0 0 0 0 0 0 0 0 0 1590 - 0 0 0 0 0 0 0 0 0 6 6 6 1591 - 6 6 6 10 10 10 14 14 14 18 18 18 1592 - 18 18 18 14 14 14 10 10 10 6 6 6 1593 - 0 0 0 0 0 0 0 0 0 0 0 0 1594 - 0 0 0 0 0 0 0 0 0 0 0 0 1595 - 0 0 0 0 0 0 0 0 0 0 0 0 1596 - 0 0 0 0 0 0 0 0 0 0 0 0 1597 - 0 0 0 0 0 0 0 0 0 6 6 6 1598 - 14 14 14 18 18 18 22 22 22 22 22 22 1599 - 18 18 18 14 14 14 10 10 10 6 6 6 1600 - 0 0 0 0 0 0 0 0 0 0 0 0 1601 - 0 0 0 0 0 0 0 0 0 0 0 0 1602 - 0 0 0 0 0 0 0 0 0 0 0 0 1603 - 0 0 0 0 0 0 0 0 0 0 0 0 1604 - 0 0 0 0 0 0 0 0 0 0 0 0
+5 -5
drivers/video/of_display_timing.c
··· 181 181 if (disp->num_timings == 0) { 182 182 /* should never happen, as entry was already found above */ 183 183 pr_err("%pOF: no timings specified\n", np); 184 - goto entryfail; 184 + goto timingfail; 185 185 } 186 186 187 187 disp->timings = kcalloc(disp->num_timings, ··· 189 189 GFP_KERNEL); 190 190 if (!disp->timings) { 191 191 pr_err("%pOF: could not allocate timings array\n", np); 192 - goto entryfail; 192 + goto timingfail; 193 193 } 194 194 195 195 disp->num_timings = 0; 196 196 disp->native_mode = 0; 197 197 198 - for_each_child_of_node(timings_np, entry) { 198 + for_each_child_of_node_scoped(timings_np, child) { 199 199 struct display_timing *dt; 200 200 int r; 201 201 ··· 206 206 goto timingfail; 207 207 } 208 208 209 - r = of_parse_display_timing(entry, dt); 209 + r = of_parse_display_timing(child, dt); 210 210 if (r) { 211 211 /* 212 212 * to not encourage wrong devicetrees, fail in case of ··· 218 218 goto timingfail; 219 219 } 220 220 221 - if (native_mode == entry) 221 + if (native_mode == child) 222 222 disp->native_mode = disp->num_timings; 223 223 224 224 disp->timings[disp->num_timings] = dt;
-1
include/linux/console.h
··· 697 697 extern void console_lock(void); 698 698 extern int console_trylock(void); 699 699 extern void console_unlock(void); 700 - extern void console_conditional_schedule(void); 701 700 extern void console_unblank(void); 702 701 extern void console_flush_on_panic(enum con_flush_mode mode); 703 702 extern struct tty_driver *console_device(int *);
+11 -2
include/linux/fb.h
··· 18 18 struct device; 19 19 struct device_node; 20 20 struct fb_info; 21 + struct fbcon_par; 21 22 struct file; 22 23 struct i2c_adapter; 23 24 struct inode; ··· 494 493 #if defined(CONFIG_FB_DEVICE) 495 494 struct device *dev; /* This is this fb device */ 496 495 #endif 497 - int class_flag; /* private sysfs flags */ 498 496 #ifdef CONFIG_FB_TILEBLITTING 499 497 struct fb_tile_ops *tileops; /* Tile Blitting */ 500 498 #endif ··· 506 506 #define FBINFO_STATE_RUNNING 0 507 507 #define FBINFO_STATE_SUSPENDED 1 508 508 u32 state; /* Hardware state i.e suspend */ 509 - void *fbcon_par; /* fbcon use-only private area */ 509 + struct fbcon_par *fbcon_par; /* fbcon use-only private area */ 510 510 /* From here on everything is device dependent */ 511 511 void *par; 512 512 ··· 622 622 static inline void unlock_fb_info(struct fb_info *info) 623 623 { 624 624 mutex_unlock(&info->lock); 625 + } 626 + 627 + static inline struct device *dev_of_fbinfo(const struct fb_info *info) 628 + { 629 + #ifdef CONFIG_FB_DEVICE 630 + return info->dev; 631 + #else 632 + return NULL; 633 + #endif 625 634 } 626 635 627 636 static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch,
-8
include/linux/linux_logo.h
··· 33 33 extern const struct linux_logo logo_linux_mono; 34 34 extern const struct linux_logo logo_linux_vga16; 35 35 extern const struct linux_logo logo_linux_clut224; 36 - extern const struct linux_logo logo_dec_clut224; 37 - extern const struct linux_logo logo_mac_clut224; 38 - extern const struct linux_logo logo_parisc_clut224; 39 - extern const struct linux_logo logo_sgi_clut224; 40 - extern const struct linux_logo logo_sun_clut224; 41 - extern const struct linux_logo logo_superh_mono; 42 - extern const struct linux_logo logo_superh_vga16; 43 - extern const struct linux_logo logo_superh_clut224; 44 36 extern const struct linux_logo logo_spe_clut224; 45 37 46 38 extern const struct linux_logo *fb_find_logo(int depth);
-16
kernel/printk/printk.c
··· 3416 3416 } 3417 3417 EXPORT_SYMBOL(console_unlock); 3418 3418 3419 - /** 3420 - * console_conditional_schedule - yield the CPU if required 3421 - * 3422 - * If the console code is currently allowed to sleep, and 3423 - * if this CPU should yield the CPU to another task, do 3424 - * so here. 3425 - * 3426 - * Must be called within console_lock();. 3427 - */ 3428 - void __sched console_conditional_schedule(void) 3429 - { 3430 - if (console_may_schedule) 3431 - cond_resched(); 3432 - } 3433 - EXPORT_SYMBOL(console_conditional_schedule); 3434 - 3435 3419 void console_unblank(void) 3436 3420 { 3437 3421 bool found_unblank = false;