1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
29b6b563cSPaul Mackerras /*
39b6b563cSPaul Mackerras * Procedures for drawing on the screen early on in the boot process.
49b6b563cSPaul Mackerras *
59b6b563cSPaul Mackerras * Benjamin Herrenschmidt <benh@kernel.crashing.org>
69b6b563cSPaul Mackerras */
79b6b563cSPaul Mackerras #include <linux/kernel.h>
89b6b563cSPaul Mackerras #include <linux/string.h>
99b6b563cSPaul Mackerras #include <linux/init.h>
104b16f8e2SPaul Gortmaker #include <linux/export.h>
1195f72d1eSYinghai Lu #include <linux/memblock.h>
1265fddcfcSMike Rapoport #include <linux/pgtable.h>
13e6f6390aSChristophe Leroy #include <linux/of.h>
149b6b563cSPaul Mackerras
159b6b563cSPaul Mackerras #include <asm/sections.h>
169b6b563cSPaul Mackerras #include <asm/btext.h>
179b6b563cSPaul Mackerras #include <asm/page.h>
189b6b563cSPaul Mackerras #include <asm/mmu.h>
199b6b563cSPaul Mackerras #include <asm/io.h>
209b6b563cSPaul Mackerras #include <asm/processor.h>
21719c91ccSDavid Gibson #include <asm/udbg.h>
229b6b563cSPaul Mackerras
239b6b563cSPaul Mackerras #define NO_SCROLL
249b6b563cSPaul Mackerras
259b6b563cSPaul Mackerras #ifndef NO_SCROLL
269b6b563cSPaul Mackerras static void scrollscreen(void);
279b6b563cSPaul Mackerras #endif
289b6b563cSPaul Mackerras
2933def849SJoe Perches #define __force_data __section(".data")
309b6b563cSPaul Mackerras
3151d3082fSBenjamin Herrenschmidt static int g_loc_X __force_data;
3251d3082fSBenjamin Herrenschmidt static int g_loc_Y __force_data;
3351d3082fSBenjamin Herrenschmidt static int g_max_loc_X __force_data;
3451d3082fSBenjamin Herrenschmidt static int g_max_loc_Y __force_data;
3551d3082fSBenjamin Herrenschmidt
3651d3082fSBenjamin Herrenschmidt static int dispDeviceRowBytes __force_data;
3751d3082fSBenjamin Herrenschmidt static int dispDeviceDepth __force_data;
3851d3082fSBenjamin Herrenschmidt static int dispDeviceRect[4] __force_data;
3951d3082fSBenjamin Herrenschmidt static unsigned char *dispDeviceBase __force_data;
4051d3082fSBenjamin Herrenschmidt static unsigned char *logicalDisplayBase __force_data;
419b6b563cSPaul Mackerras
429b6b563cSPaul Mackerras unsigned long disp_BAT[2] __initdata = {0, 0};
439b6b563cSPaul Mackerras
449b6b563cSPaul Mackerras #define cmapsz (16*256)
459b6b563cSPaul Mackerras
469b6b563cSPaul Mackerras static unsigned char vga_font[cmapsz];
479b6b563cSPaul Mackerras
482b6ff203SYu Kuai static int boot_text_mapped __force_data;
499b6b563cSPaul Mackerras
507191b615SBenjamin Herrenschmidt extern void rmci_on(void);
517191b615SBenjamin Herrenschmidt extern void rmci_off(void);
527191b615SBenjamin Herrenschmidt
rmci_maybe_on(void)537191b615SBenjamin Herrenschmidt static inline void rmci_maybe_on(void)
547191b615SBenjamin Herrenschmidt {
55ee372bc1SBenjamin Herrenschmidt #if defined(CONFIG_PPC_EARLY_DEBUG_BOOTX) && defined(CONFIG_PPC64)
567191b615SBenjamin Herrenschmidt if (!(mfmsr() & MSR_DR))
577191b615SBenjamin Herrenschmidt rmci_on();
587191b615SBenjamin Herrenschmidt #endif
597191b615SBenjamin Herrenschmidt }
607191b615SBenjamin Herrenschmidt
rmci_maybe_off(void)617191b615SBenjamin Herrenschmidt static inline void rmci_maybe_off(void)
627191b615SBenjamin Herrenschmidt {
63ee372bc1SBenjamin Herrenschmidt #if defined(CONFIG_PPC_EARLY_DEBUG_BOOTX) && defined(CONFIG_PPC64)
647191b615SBenjamin Herrenschmidt if (!(mfmsr() & MSR_DR))
657191b615SBenjamin Herrenschmidt rmci_off();
667191b615SBenjamin Herrenschmidt #endif
677191b615SBenjamin Herrenschmidt }
687191b615SBenjamin Herrenschmidt
697191b615SBenjamin Herrenschmidt
7040ef8cbcSPaul Mackerras #ifdef CONFIG_PPC32
719b6b563cSPaul Mackerras /* Calc BAT values for mapping the display and store them
729b6b563cSPaul Mackerras * in disp_BAT. Those values are then used from head.S to map
739b6b563cSPaul Mackerras * the display during identify_machine() and MMU_Init()
749b6b563cSPaul Mackerras *
759b6b563cSPaul Mackerras * The display is mapped to virtual address 0xD0000000, rather
762b461880SMichael Ellerman * than 1:1, because some CHRP machines put the frame buffer
77b5666f70SMichael Ellerman * in the region starting at 0xC0000000 (PAGE_OFFSET).
789b6b563cSPaul Mackerras * This mapping is temporary and will disappear as soon as the
799b6b563cSPaul Mackerras * setup done by MMU_Init() is applied.
809b6b563cSPaul Mackerras *
819b6b563cSPaul Mackerras * For now, we align the BAT and then map 8Mb on 601 and 16Mb
829b6b563cSPaul Mackerras * on other PPCs. This may cause trouble if the framebuffer
839b6b563cSPaul Mackerras * is really badly aligned, but I didn't encounter this case
849b6b563cSPaul Mackerras * yet.
859b6b563cSPaul Mackerras */
btext_prepare_BAT(void)8651d3082fSBenjamin Herrenschmidt void __init btext_prepare_BAT(void)
879b6b563cSPaul Mackerras {
88b5666f70SMichael Ellerman unsigned long vaddr = PAGE_OFFSET + 0x10000000;
899b6b563cSPaul Mackerras unsigned long addr;
909b6b563cSPaul Mackerras unsigned long lowbits;
919b6b563cSPaul Mackerras
929b6b563cSPaul Mackerras addr = (unsigned long)dispDeviceBase;
939b6b563cSPaul Mackerras if (!addr) {
949b6b563cSPaul Mackerras boot_text_mapped = 0;
959b6b563cSPaul Mackerras return;
969b6b563cSPaul Mackerras }
979b6b563cSPaul Mackerras lowbits = addr & ~0xFF000000UL;
989b6b563cSPaul Mackerras addr &= 0xFF000000UL;
999b6b563cSPaul Mackerras disp_BAT[0] = vaddr | (BL_16M<<2) | 2;
1009b6b563cSPaul Mackerras disp_BAT[1] = addr | (_PAGE_NO_CACHE | _PAGE_GUARDED | BPP_RW);
1019b6b563cSPaul Mackerras logicalDisplayBase = (void *) (vaddr + lowbits);
1029b6b563cSPaul Mackerras }
10340ef8cbcSPaul Mackerras #endif
1049b6b563cSPaul Mackerras
10551d3082fSBenjamin Herrenschmidt
10651d3082fSBenjamin Herrenschmidt /* This function can be used to enable the early boot text when doing
10751d3082fSBenjamin Herrenschmidt * OF booting or within bootx init. It must be followed by a btext_unmap()
10825985edcSLucas De Marchi * call before the logical address becomes unusable
1099b6b563cSPaul Mackerras */
btext_setup_display(int width,int height,int depth,int pitch,unsigned long address)11051d3082fSBenjamin Herrenschmidt void __init btext_setup_display(int width, int height, int depth, int pitch,
1119b6b563cSPaul Mackerras unsigned long address)
1129b6b563cSPaul Mackerras {
1139b6b563cSPaul Mackerras g_loc_X = 0;
1149b6b563cSPaul Mackerras g_loc_Y = 0;
1159b6b563cSPaul Mackerras g_max_loc_X = width / 8;
1169b6b563cSPaul Mackerras g_max_loc_Y = height / 16;
1179b6b563cSPaul Mackerras logicalDisplayBase = (unsigned char *)address;
1189b6b563cSPaul Mackerras dispDeviceBase = (unsigned char *)address;
1199b6b563cSPaul Mackerras dispDeviceRowBytes = pitch;
120ab134466SBenjamin Herrenschmidt dispDeviceDepth = depth == 15 ? 16 : depth;
1219b6b563cSPaul Mackerras dispDeviceRect[0] = dispDeviceRect[1] = 0;
1229b6b563cSPaul Mackerras dispDeviceRect[2] = width;
1239b6b563cSPaul Mackerras dispDeviceRect[3] = height;
1249b6b563cSPaul Mackerras boot_text_mapped = 1;
1259b6b563cSPaul Mackerras }
1269b6b563cSPaul Mackerras
btext_unmap(void)12751d3082fSBenjamin Herrenschmidt void __init btext_unmap(void)
12851d3082fSBenjamin Herrenschmidt {
12951d3082fSBenjamin Herrenschmidt boot_text_mapped = 0;
13051d3082fSBenjamin Herrenschmidt }
13151d3082fSBenjamin Herrenschmidt
1329b6b563cSPaul Mackerras /* Here's a small text engine to use during early boot
1339b6b563cSPaul Mackerras * or for debugging purposes
1349b6b563cSPaul Mackerras *
1359b6b563cSPaul Mackerras * todo:
1369b6b563cSPaul Mackerras *
1379b6b563cSPaul Mackerras * - build some kind of vgacon with it to enable early printk
1389b6b563cSPaul Mackerras * - move to a separate file
1399b6b563cSPaul Mackerras * - add a few video driver hooks to keep in sync with display
1409b6b563cSPaul Mackerras * changes.
1419b6b563cSPaul Mackerras */
1429b6b563cSPaul Mackerras
btext_map(void)1437191b615SBenjamin Herrenschmidt void btext_map(void)
1449b6b563cSPaul Mackerras {
1459b6b563cSPaul Mackerras unsigned long base, offset, size;
1469b6b563cSPaul Mackerras unsigned char *vbase;
1479b6b563cSPaul Mackerras
1489b6b563cSPaul Mackerras /* By default, we are no longer mapped */
1499b6b563cSPaul Mackerras boot_text_mapped = 0;
150d8731527SMathieu Malaterre if (!dispDeviceBase)
1519b6b563cSPaul Mackerras return;
1529b6b563cSPaul Mackerras base = ((unsigned long) dispDeviceBase) & 0xFFFFF000UL;
1539b6b563cSPaul Mackerras offset = ((unsigned long) dispDeviceBase) - base;
1549b6b563cSPaul Mackerras size = dispDeviceRowBytes * dispDeviceRect[3] + offset
1559b6b563cSPaul Mackerras + dispDeviceRect[0];
156aa91796eSChristophe Leroy vbase = ioremap_wc(base, size);
157d8731527SMathieu Malaterre if (!vbase)
1589b6b563cSPaul Mackerras return;
1599b6b563cSPaul Mackerras logicalDisplayBase = vbase + offset;
1609b6b563cSPaul Mackerras boot_text_mapped = 1;
1619b6b563cSPaul Mackerras }
1629b6b563cSPaul Mackerras
btext_initialize(struct device_node * np)163d276960dSNick Child static int __init btext_initialize(struct device_node *np)
1649b6b563cSPaul Mackerras {
1659b6b563cSPaul Mackerras unsigned int width, height, depth, pitch;
1669b6b563cSPaul Mackerras unsigned long address = 0;
167a7f67bdfSJeremy Kerr const u32 *prop;
1689b6b563cSPaul Mackerras
169e2eb6392SStephen Rothwell prop = of_get_property(np, "linux,bootx-width", NULL);
170ab134466SBenjamin Herrenschmidt if (prop == NULL)
171e2eb6392SStephen Rothwell prop = of_get_property(np, "width", NULL);
1729b6b563cSPaul Mackerras if (prop == NULL)
1739b6b563cSPaul Mackerras return -EINVAL;
1749b6b563cSPaul Mackerras width = *prop;
175e2eb6392SStephen Rothwell prop = of_get_property(np, "linux,bootx-height", NULL);
176ab134466SBenjamin Herrenschmidt if (prop == NULL)
177e2eb6392SStephen Rothwell prop = of_get_property(np, "height", NULL);
1789b6b563cSPaul Mackerras if (prop == NULL)
1799b6b563cSPaul Mackerras return -EINVAL;
1809b6b563cSPaul Mackerras height = *prop;
181e2eb6392SStephen Rothwell prop = of_get_property(np, "linux,bootx-depth", NULL);
182ab134466SBenjamin Herrenschmidt if (prop == NULL)
183e2eb6392SStephen Rothwell prop = of_get_property(np, "depth", NULL);
1849b6b563cSPaul Mackerras if (prop == NULL)
1859b6b563cSPaul Mackerras return -EINVAL;
1869b6b563cSPaul Mackerras depth = *prop;
1879b6b563cSPaul Mackerras pitch = width * ((depth + 7) / 8);
188e2eb6392SStephen Rothwell prop = of_get_property(np, "linux,bootx-linebytes", NULL);
189ab134466SBenjamin Herrenschmidt if (prop == NULL)
190e2eb6392SStephen Rothwell prop = of_get_property(np, "linebytes", NULL);
191441cbd8dSBenjamin Herrenschmidt if (prop && *prop != 0xffffffffu)
1929b6b563cSPaul Mackerras pitch = *prop;
1939b6b563cSPaul Mackerras if (pitch == 1)
1949b6b563cSPaul Mackerras pitch = 0x1000;
195b7a2da11SBenjamin Herrenschmidt prop = of_get_property(np, "linux,bootx-addr", NULL);
196b7a2da11SBenjamin Herrenschmidt if (prop == NULL)
197e2eb6392SStephen Rothwell prop = of_get_property(np, "address", NULL);
1989b6b563cSPaul Mackerras if (prop)
1999b6b563cSPaul Mackerras address = *prop;
2009b6b563cSPaul Mackerras
20151d3082fSBenjamin Herrenschmidt /* FIXME: Add support for PCI reg properties. Right now, only
20251d3082fSBenjamin Herrenschmidt * reliable on macs
20351d3082fSBenjamin Herrenschmidt */
2049b6b563cSPaul Mackerras if (address == 0)
2059b6b563cSPaul Mackerras return -EINVAL;
2069b6b563cSPaul Mackerras
2079b6b563cSPaul Mackerras g_loc_X = 0;
2089b6b563cSPaul Mackerras g_loc_Y = 0;
2099b6b563cSPaul Mackerras g_max_loc_X = width / 8;
2109b6b563cSPaul Mackerras g_max_loc_Y = height / 16;
2119b6b563cSPaul Mackerras dispDeviceBase = (unsigned char *)address;
2129b6b563cSPaul Mackerras dispDeviceRowBytes = pitch;
213ab134466SBenjamin Herrenschmidt dispDeviceDepth = depth == 15 ? 16 : depth;
2149b6b563cSPaul Mackerras dispDeviceRect[0] = dispDeviceRect[1] = 0;
2159b6b563cSPaul Mackerras dispDeviceRect[2] = width;
2169b6b563cSPaul Mackerras dispDeviceRect[3] = height;
2179b6b563cSPaul Mackerras
2187191b615SBenjamin Herrenschmidt btext_map();
2199b6b563cSPaul Mackerras
2209b6b563cSPaul Mackerras return 0;
2219b6b563cSPaul Mackerras }
2229b6b563cSPaul Mackerras
btext_find_display(int allow_nonstdout)22351d3082fSBenjamin Herrenschmidt int __init btext_find_display(int allow_nonstdout)
2249b6b563cSPaul Mackerras {
2255b8d6be7SRob Herring struct device_node *np = of_stdout;
2269b6b563cSPaul Mackerras int rc = -ENODEV;
2279b6b563cSPaul Mackerras
2285b8d6be7SRob Herring if (!of_node_is_type(np, "display")) {
2299b6b563cSPaul Mackerras printk("boot stdout isn't a display !\n");
2309b6b563cSPaul Mackerras np = NULL;
2319b6b563cSPaul Mackerras }
2329b6b563cSPaul Mackerras if (np)
2339b6b563cSPaul Mackerras rc = btext_initialize(np);
23451d3082fSBenjamin Herrenschmidt if (rc == 0 || !allow_nonstdout)
23551d3082fSBenjamin Herrenschmidt return rc;
2369b6b563cSPaul Mackerras
2373329c0d1SCyrill Gorcunov for_each_node_by_type(np, "display") {
238*4d57e351SRob Herring if (of_property_read_bool(np, "linux,opened")) {
239b7c670d6SRob Herring printk("trying %pOF ...\n", np);
2409b6b563cSPaul Mackerras rc = btext_initialize(np);
2419b6b563cSPaul Mackerras printk("result: %d\n", rc);
2429b6b563cSPaul Mackerras }
243a1d2b210SJulia Lawall if (rc == 0) {
244a1d2b210SJulia Lawall of_node_put(np);
24551d3082fSBenjamin Herrenschmidt break;
2469b6b563cSPaul Mackerras }
247a1d2b210SJulia Lawall }
24851d3082fSBenjamin Herrenschmidt return rc;
2499b6b563cSPaul Mackerras }
2509b6b563cSPaul Mackerras
2519b6b563cSPaul Mackerras /* Calc the base address of a given point (x,y) */
calc_base(int x,int y)2529b6b563cSPaul Mackerras static unsigned char * calc_base(int x, int y)
2539b6b563cSPaul Mackerras {
2549b6b563cSPaul Mackerras unsigned char *base;
2559b6b563cSPaul Mackerras
2569b6b563cSPaul Mackerras base = logicalDisplayBase;
257d8731527SMathieu Malaterre if (!base)
2589b6b563cSPaul Mackerras base = dispDeviceBase;
2599b6b563cSPaul Mackerras base += (x + dispDeviceRect[0]) * (dispDeviceDepth >> 3);
2609b6b563cSPaul Mackerras base += (y + dispDeviceRect[1]) * dispDeviceRowBytes;
2619b6b563cSPaul Mackerras return base;
2629b6b563cSPaul Mackerras }
2639b6b563cSPaul Mackerras
2649b6b563cSPaul Mackerras /* Adjust the display to a new resolution */
btext_update_display(unsigned long phys,int width,int height,int depth,int pitch)2659b6b563cSPaul Mackerras void btext_update_display(unsigned long phys, int width, int height,
2669b6b563cSPaul Mackerras int depth, int pitch)
2679b6b563cSPaul Mackerras {
268d8731527SMathieu Malaterre if (!dispDeviceBase)
2699b6b563cSPaul Mackerras return;
2709b6b563cSPaul Mackerras
2719b6b563cSPaul Mackerras /* check it's the same frame buffer (within 256MB) */
2729b6b563cSPaul Mackerras if ((phys ^ (unsigned long)dispDeviceBase) & 0xf0000000)
2739b6b563cSPaul Mackerras return;
2749b6b563cSPaul Mackerras
2759b6b563cSPaul Mackerras dispDeviceBase = (__u8 *) phys;
2769b6b563cSPaul Mackerras dispDeviceRect[0] = 0;
2779b6b563cSPaul Mackerras dispDeviceRect[1] = 0;
2789b6b563cSPaul Mackerras dispDeviceRect[2] = width;
2799b6b563cSPaul Mackerras dispDeviceRect[3] = height;
2809b6b563cSPaul Mackerras dispDeviceDepth = depth;
2819b6b563cSPaul Mackerras dispDeviceRowBytes = pitch;
2829b6b563cSPaul Mackerras if (boot_text_mapped) {
2839b6b563cSPaul Mackerras iounmap(logicalDisplayBase);
2849b6b563cSPaul Mackerras boot_text_mapped = 0;
2859b6b563cSPaul Mackerras }
2867191b615SBenjamin Herrenschmidt btext_map();
2879b6b563cSPaul Mackerras g_loc_X = 0;
2889b6b563cSPaul Mackerras g_loc_Y = 0;
2899b6b563cSPaul Mackerras g_max_loc_X = width / 8;
2909b6b563cSPaul Mackerras g_max_loc_Y = height / 16;
2919b6b563cSPaul Mackerras }
2929b6b563cSPaul Mackerras EXPORT_SYMBOL(btext_update_display);
2939b6b563cSPaul Mackerras
btext_clearscreen(void)294d276960dSNick Child void __init btext_clearscreen(void)
2959b6b563cSPaul Mackerras {
29651d3082fSBenjamin Herrenschmidt unsigned int *base = (unsigned int *)calc_base(0, 0);
2979b6b563cSPaul Mackerras unsigned long width = ((dispDeviceRect[2] - dispDeviceRect[0]) *
29851d3082fSBenjamin Herrenschmidt (dispDeviceDepth >> 3)) >> 2;
2999b6b563cSPaul Mackerras int i,j;
3009b6b563cSPaul Mackerras
3017191b615SBenjamin Herrenschmidt rmci_maybe_on();
3029b6b563cSPaul Mackerras for (i=0; i<(dispDeviceRect[3] - dispDeviceRect[1]); i++)
3039b6b563cSPaul Mackerras {
30451d3082fSBenjamin Herrenschmidt unsigned int *ptr = base;
3059b6b563cSPaul Mackerras for(j=width; j; --j)
3069b6b563cSPaul Mackerras *(ptr++) = 0;
30751d3082fSBenjamin Herrenschmidt base += (dispDeviceRowBytes >> 2);
3089b6b563cSPaul Mackerras }
3097191b615SBenjamin Herrenschmidt rmci_maybe_off();
3109b6b563cSPaul Mackerras }
3119b6b563cSPaul Mackerras
btext_flushscreen(void)312d276960dSNick Child void __init btext_flushscreen(void)
31351d3082fSBenjamin Herrenschmidt {
31451d3082fSBenjamin Herrenschmidt unsigned int *base = (unsigned int *)calc_base(0, 0);
31551d3082fSBenjamin Herrenschmidt unsigned long width = ((dispDeviceRect[2] - dispDeviceRect[0]) *
31651d3082fSBenjamin Herrenschmidt (dispDeviceDepth >> 3)) >> 2;
31751d3082fSBenjamin Herrenschmidt int i,j;
31851d3082fSBenjamin Herrenschmidt
31951d3082fSBenjamin Herrenschmidt for (i=0; i < (dispDeviceRect[3] - dispDeviceRect[1]); i++)
32051d3082fSBenjamin Herrenschmidt {
32151d3082fSBenjamin Herrenschmidt unsigned int *ptr = base;
32251d3082fSBenjamin Herrenschmidt for(j = width; j > 0; j -= 8) {
32351d3082fSBenjamin Herrenschmidt __asm__ __volatile__ ("dcbst 0,%0" :: "r" (ptr));
32451d3082fSBenjamin Herrenschmidt ptr += 8;
32551d3082fSBenjamin Herrenschmidt }
32651d3082fSBenjamin Herrenschmidt base += (dispDeviceRowBytes >> 2);
32751d3082fSBenjamin Herrenschmidt }
32851d3082fSBenjamin Herrenschmidt __asm__ __volatile__ ("sync" ::: "memory");
32951d3082fSBenjamin Herrenschmidt }
33051d3082fSBenjamin Herrenschmidt
btext_flushline(void)331d276960dSNick Child void __init btext_flushline(void)
33251d3082fSBenjamin Herrenschmidt {
33351d3082fSBenjamin Herrenschmidt unsigned int *base = (unsigned int *)calc_base(0, g_loc_Y << 4);
33451d3082fSBenjamin Herrenschmidt unsigned long width = ((dispDeviceRect[2] - dispDeviceRect[0]) *
33551d3082fSBenjamin Herrenschmidt (dispDeviceDepth >> 3)) >> 2;
33651d3082fSBenjamin Herrenschmidt int i,j;
33751d3082fSBenjamin Herrenschmidt
33851d3082fSBenjamin Herrenschmidt for (i=0; i < 16; i++)
33951d3082fSBenjamin Herrenschmidt {
34051d3082fSBenjamin Herrenschmidt unsigned int *ptr = base;
34151d3082fSBenjamin Herrenschmidt for(j = width; j > 0; j -= 8) {
34251d3082fSBenjamin Herrenschmidt __asm__ __volatile__ ("dcbst 0,%0" :: "r" (ptr));
34351d3082fSBenjamin Herrenschmidt ptr += 8;
34451d3082fSBenjamin Herrenschmidt }
34551d3082fSBenjamin Herrenschmidt base += (dispDeviceRowBytes >> 2);
34651d3082fSBenjamin Herrenschmidt }
34751d3082fSBenjamin Herrenschmidt __asm__ __volatile__ ("sync" ::: "memory");
34851d3082fSBenjamin Herrenschmidt }
34951d3082fSBenjamin Herrenschmidt
35051d3082fSBenjamin Herrenschmidt
3519b6b563cSPaul Mackerras #ifndef NO_SCROLL
scrollscreen(void)3529b6b563cSPaul Mackerras static void scrollscreen(void)
3539b6b563cSPaul Mackerras {
35451d3082fSBenjamin Herrenschmidt unsigned int *src = (unsigned int *)calc_base(0,16);
35551d3082fSBenjamin Herrenschmidt unsigned int *dst = (unsigned int *)calc_base(0,0);
3569b6b563cSPaul Mackerras unsigned long width = ((dispDeviceRect[2] - dispDeviceRect[0]) *
35751d3082fSBenjamin Herrenschmidt (dispDeviceDepth >> 3)) >> 2;
3589b6b563cSPaul Mackerras int i,j;
3599b6b563cSPaul Mackerras
3607191b615SBenjamin Herrenschmidt rmci_maybe_on();
3617191b615SBenjamin Herrenschmidt
3629b6b563cSPaul Mackerras for (i=0; i<(dispDeviceRect[3] - dispDeviceRect[1] - 16); i++)
3639b6b563cSPaul Mackerras {
36451d3082fSBenjamin Herrenschmidt unsigned int *src_ptr = src;
36551d3082fSBenjamin Herrenschmidt unsigned int *dst_ptr = dst;
3669b6b563cSPaul Mackerras for(j=width; j; --j)
3679b6b563cSPaul Mackerras *(dst_ptr++) = *(src_ptr++);
36851d3082fSBenjamin Herrenschmidt src += (dispDeviceRowBytes >> 2);
36951d3082fSBenjamin Herrenschmidt dst += (dispDeviceRowBytes >> 2);
3709b6b563cSPaul Mackerras }
3719b6b563cSPaul Mackerras for (i=0; i<16; i++)
3729b6b563cSPaul Mackerras {
37351d3082fSBenjamin Herrenschmidt unsigned int *dst_ptr = dst;
3749b6b563cSPaul Mackerras for(j=width; j; --j)
3759b6b563cSPaul Mackerras *(dst_ptr++) = 0;
37651d3082fSBenjamin Herrenschmidt dst += (dispDeviceRowBytes >> 2);
3779b6b563cSPaul Mackerras }
3787191b615SBenjamin Herrenschmidt
3797191b615SBenjamin Herrenschmidt rmci_maybe_off();
3809b6b563cSPaul Mackerras }
3819b6b563cSPaul Mackerras #endif /* ndef NO_SCROLL */
3829b6b563cSPaul Mackerras
3837191b615SBenjamin Herrenschmidt static unsigned int expand_bits_8[16] = {
3847191b615SBenjamin Herrenschmidt 0x00000000,
3857191b615SBenjamin Herrenschmidt 0x000000ff,
3867191b615SBenjamin Herrenschmidt 0x0000ff00,
3877191b615SBenjamin Herrenschmidt 0x0000ffff,
3887191b615SBenjamin Herrenschmidt 0x00ff0000,
3897191b615SBenjamin Herrenschmidt 0x00ff00ff,
3907191b615SBenjamin Herrenschmidt 0x00ffff00,
3917191b615SBenjamin Herrenschmidt 0x00ffffff,
3927191b615SBenjamin Herrenschmidt 0xff000000,
3937191b615SBenjamin Herrenschmidt 0xff0000ff,
3947191b615SBenjamin Herrenschmidt 0xff00ff00,
3957191b615SBenjamin Herrenschmidt 0xff00ffff,
3967191b615SBenjamin Herrenschmidt 0xffff0000,
3977191b615SBenjamin Herrenschmidt 0xffff00ff,
3987191b615SBenjamin Herrenschmidt 0xffffff00,
3997191b615SBenjamin Herrenschmidt 0xffffffff
4007191b615SBenjamin Herrenschmidt };
4017191b615SBenjamin Herrenschmidt
4027191b615SBenjamin Herrenschmidt static unsigned int expand_bits_16[4] = {
4037191b615SBenjamin Herrenschmidt 0x00000000,
4047191b615SBenjamin Herrenschmidt 0x0000ffff,
4057191b615SBenjamin Herrenschmidt 0xffff0000,
4067191b615SBenjamin Herrenschmidt 0xffffffff
4077191b615SBenjamin Herrenschmidt };
4087191b615SBenjamin Herrenschmidt
4097191b615SBenjamin Herrenschmidt
draw_byte_32(unsigned char * font,unsigned int * base,int rb)4107191b615SBenjamin Herrenschmidt static void draw_byte_32(unsigned char *font, unsigned int *base, int rb)
4117191b615SBenjamin Herrenschmidt {
4127191b615SBenjamin Herrenschmidt int l, bits;
4137191b615SBenjamin Herrenschmidt int fg = 0xFFFFFFFFUL;
4147191b615SBenjamin Herrenschmidt int bg = 0x00000000UL;
4157191b615SBenjamin Herrenschmidt
4167191b615SBenjamin Herrenschmidt for (l = 0; l < 16; ++l)
4177191b615SBenjamin Herrenschmidt {
4187191b615SBenjamin Herrenschmidt bits = *font++;
4197191b615SBenjamin Herrenschmidt base[0] = (-(bits >> 7) & fg) ^ bg;
4207191b615SBenjamin Herrenschmidt base[1] = (-((bits >> 6) & 1) & fg) ^ bg;
4217191b615SBenjamin Herrenschmidt base[2] = (-((bits >> 5) & 1) & fg) ^ bg;
4227191b615SBenjamin Herrenschmidt base[3] = (-((bits >> 4) & 1) & fg) ^ bg;
4237191b615SBenjamin Herrenschmidt base[4] = (-((bits >> 3) & 1) & fg) ^ bg;
4247191b615SBenjamin Herrenschmidt base[5] = (-((bits >> 2) & 1) & fg) ^ bg;
4257191b615SBenjamin Herrenschmidt base[6] = (-((bits >> 1) & 1) & fg) ^ bg;
4267191b615SBenjamin Herrenschmidt base[7] = (-(bits & 1) & fg) ^ bg;
4277191b615SBenjamin Herrenschmidt base = (unsigned int *) ((char *)base + rb);
4287191b615SBenjamin Herrenschmidt }
4297191b615SBenjamin Herrenschmidt }
4307191b615SBenjamin Herrenschmidt
draw_byte_16(unsigned char * font,unsigned int * base,int rb)4317191b615SBenjamin Herrenschmidt static inline void draw_byte_16(unsigned char *font, unsigned int *base, int rb)
4327191b615SBenjamin Herrenschmidt {
4337191b615SBenjamin Herrenschmidt int l, bits;
4347191b615SBenjamin Herrenschmidt int fg = 0xFFFFFFFFUL;
4357191b615SBenjamin Herrenschmidt int bg = 0x00000000UL;
4367191b615SBenjamin Herrenschmidt unsigned int *eb = (int *)expand_bits_16;
4377191b615SBenjamin Herrenschmidt
4387191b615SBenjamin Herrenschmidt for (l = 0; l < 16; ++l)
4397191b615SBenjamin Herrenschmidt {
4407191b615SBenjamin Herrenschmidt bits = *font++;
4417191b615SBenjamin Herrenschmidt base[0] = (eb[bits >> 6] & fg) ^ bg;
4427191b615SBenjamin Herrenschmidt base[1] = (eb[(bits >> 4) & 3] & fg) ^ bg;
4437191b615SBenjamin Herrenschmidt base[2] = (eb[(bits >> 2) & 3] & fg) ^ bg;
4447191b615SBenjamin Herrenschmidt base[3] = (eb[bits & 3] & fg) ^ bg;
4457191b615SBenjamin Herrenschmidt base = (unsigned int *) ((char *)base + rb);
4467191b615SBenjamin Herrenschmidt }
4477191b615SBenjamin Herrenschmidt }
4487191b615SBenjamin Herrenschmidt
draw_byte_8(unsigned char * font,unsigned int * base,int rb)4497191b615SBenjamin Herrenschmidt static inline void draw_byte_8(unsigned char *font, unsigned int *base, int rb)
4507191b615SBenjamin Herrenschmidt {
4517191b615SBenjamin Herrenschmidt int l, bits;
4527191b615SBenjamin Herrenschmidt int fg = 0x0F0F0F0FUL;
4537191b615SBenjamin Herrenschmidt int bg = 0x00000000UL;
4547191b615SBenjamin Herrenschmidt unsigned int *eb = (int *)expand_bits_8;
4557191b615SBenjamin Herrenschmidt
4567191b615SBenjamin Herrenschmidt for (l = 0; l < 16; ++l)
4577191b615SBenjamin Herrenschmidt {
4587191b615SBenjamin Herrenschmidt bits = *font++;
4597191b615SBenjamin Herrenschmidt base[0] = (eb[bits >> 4] & fg) ^ bg;
4607191b615SBenjamin Herrenschmidt base[1] = (eb[bits & 0xf] & fg) ^ bg;
4617191b615SBenjamin Herrenschmidt base = (unsigned int *) ((char *)base + rb);
4627191b615SBenjamin Herrenschmidt }
4637191b615SBenjamin Herrenschmidt }
4647191b615SBenjamin Herrenschmidt
draw_byte(unsigned char c,long locX,long locY)4657191b615SBenjamin Herrenschmidt static noinline void draw_byte(unsigned char c, long locX, long locY)
4667191b615SBenjamin Herrenschmidt {
4677191b615SBenjamin Herrenschmidt unsigned char *base = calc_base(locX << 3, locY << 4);
4687191b615SBenjamin Herrenschmidt unsigned char *font = &vga_font[((unsigned int)c) * 16];
4697191b615SBenjamin Herrenschmidt int rb = dispDeviceRowBytes;
4707191b615SBenjamin Herrenschmidt
4717191b615SBenjamin Herrenschmidt rmci_maybe_on();
4727191b615SBenjamin Herrenschmidt switch(dispDeviceDepth) {
4737191b615SBenjamin Herrenschmidt case 24:
4747191b615SBenjamin Herrenschmidt case 32:
4757191b615SBenjamin Herrenschmidt draw_byte_32(font, (unsigned int *)base, rb);
4767191b615SBenjamin Herrenschmidt break;
4777191b615SBenjamin Herrenschmidt case 15:
4787191b615SBenjamin Herrenschmidt case 16:
4797191b615SBenjamin Herrenschmidt draw_byte_16(font, (unsigned int *)base, rb);
4807191b615SBenjamin Herrenschmidt break;
4817191b615SBenjamin Herrenschmidt case 8:
4827191b615SBenjamin Herrenschmidt draw_byte_8(font, (unsigned int *)base, rb);
4837191b615SBenjamin Herrenschmidt break;
4847191b615SBenjamin Herrenschmidt }
4857191b615SBenjamin Herrenschmidt rmci_maybe_off();
4867191b615SBenjamin Herrenschmidt }
4877191b615SBenjamin Herrenschmidt
btext_drawchar(char c)4889b6b563cSPaul Mackerras void btext_drawchar(char c)
4899b6b563cSPaul Mackerras {
4909b6b563cSPaul Mackerras int cline = 0;
4919b6b563cSPaul Mackerras #ifdef NO_SCROLL
4929b6b563cSPaul Mackerras int x;
4939b6b563cSPaul Mackerras #endif
4949b6b563cSPaul Mackerras if (!boot_text_mapped)
4959b6b563cSPaul Mackerras return;
4969b6b563cSPaul Mackerras
4979b6b563cSPaul Mackerras switch (c) {
4989b6b563cSPaul Mackerras case '\b':
4999b6b563cSPaul Mackerras if (g_loc_X > 0)
5009b6b563cSPaul Mackerras --g_loc_X;
5019b6b563cSPaul Mackerras break;
5029b6b563cSPaul Mackerras case '\t':
5039b6b563cSPaul Mackerras g_loc_X = (g_loc_X & -8) + 8;
5049b6b563cSPaul Mackerras break;
5059b6b563cSPaul Mackerras case '\r':
5069b6b563cSPaul Mackerras g_loc_X = 0;
5079b6b563cSPaul Mackerras break;
5089b6b563cSPaul Mackerras case '\n':
5099b6b563cSPaul Mackerras g_loc_X = 0;
5109b6b563cSPaul Mackerras g_loc_Y++;
5119b6b563cSPaul Mackerras cline = 1;
5129b6b563cSPaul Mackerras break;
5139b6b563cSPaul Mackerras default:
5149b6b563cSPaul Mackerras draw_byte(c, g_loc_X++, g_loc_Y);
5159b6b563cSPaul Mackerras }
5169b6b563cSPaul Mackerras if (g_loc_X >= g_max_loc_X) {
5179b6b563cSPaul Mackerras g_loc_X = 0;
5189b6b563cSPaul Mackerras g_loc_Y++;
5199b6b563cSPaul Mackerras cline = 1;
5209b6b563cSPaul Mackerras }
5219b6b563cSPaul Mackerras #ifndef NO_SCROLL
5229b6b563cSPaul Mackerras while (g_loc_Y >= g_max_loc_Y) {
5239b6b563cSPaul Mackerras scrollscreen();
5249b6b563cSPaul Mackerras g_loc_Y--;
5259b6b563cSPaul Mackerras }
5269b6b563cSPaul Mackerras #else
5279b6b563cSPaul Mackerras /* wrap around from bottom to top of screen so we don't
5289b6b563cSPaul Mackerras waste time scrolling each line. -- paulus. */
5299b6b563cSPaul Mackerras if (g_loc_Y >= g_max_loc_Y)
5309b6b563cSPaul Mackerras g_loc_Y = 0;
5319b6b563cSPaul Mackerras if (cline) {
5329b6b563cSPaul Mackerras for (x = 0; x < g_max_loc_X; ++x)
5339b6b563cSPaul Mackerras draw_byte(' ', x, g_loc_Y);
5349b6b563cSPaul Mackerras }
5359b6b563cSPaul Mackerras #endif
5369b6b563cSPaul Mackerras }
5379b6b563cSPaul Mackerras
btext_drawstring(const char * c)5389b6b563cSPaul Mackerras void btext_drawstring(const char *c)
5399b6b563cSPaul Mackerras {
5409b6b563cSPaul Mackerras if (!boot_text_mapped)
5419b6b563cSPaul Mackerras return;
5429b6b563cSPaul Mackerras while (*c)
5439b6b563cSPaul Mackerras btext_drawchar(*c++);
5449b6b563cSPaul Mackerras }
5459b6b563cSPaul Mackerras
btext_drawtext(const char * c,unsigned int len)546d276960dSNick Child void __init btext_drawtext(const char *c, unsigned int len)
54751d3082fSBenjamin Herrenschmidt {
54851d3082fSBenjamin Herrenschmidt if (!boot_text_mapped)
54951d3082fSBenjamin Herrenschmidt return;
55051d3082fSBenjamin Herrenschmidt while (len--)
55151d3082fSBenjamin Herrenschmidt btext_drawchar(*c++);
55251d3082fSBenjamin Herrenschmidt }
55351d3082fSBenjamin Herrenschmidt
btext_drawhex(unsigned long v)554d276960dSNick Child void __init btext_drawhex(unsigned long v)
5559b6b563cSPaul Mackerras {
5569b6b563cSPaul Mackerras if (!boot_text_mapped)
5579b6b563cSPaul Mackerras return;
5589b6b563cSPaul Mackerras #ifdef CONFIG_PPC64
559542ad5d4SHarvey Harrison btext_drawchar(hex_asc_hi(v >> 56));
560542ad5d4SHarvey Harrison btext_drawchar(hex_asc_lo(v >> 56));
561542ad5d4SHarvey Harrison btext_drawchar(hex_asc_hi(v >> 48));
562542ad5d4SHarvey Harrison btext_drawchar(hex_asc_lo(v >> 48));
563542ad5d4SHarvey Harrison btext_drawchar(hex_asc_hi(v >> 40));
564542ad5d4SHarvey Harrison btext_drawchar(hex_asc_lo(v >> 40));
565542ad5d4SHarvey Harrison btext_drawchar(hex_asc_hi(v >> 32));
566542ad5d4SHarvey Harrison btext_drawchar(hex_asc_lo(v >> 32));
5679b6b563cSPaul Mackerras #endif
568542ad5d4SHarvey Harrison btext_drawchar(hex_asc_hi(v >> 24));
569542ad5d4SHarvey Harrison btext_drawchar(hex_asc_lo(v >> 24));
570542ad5d4SHarvey Harrison btext_drawchar(hex_asc_hi(v >> 16));
571542ad5d4SHarvey Harrison btext_drawchar(hex_asc_lo(v >> 16));
572542ad5d4SHarvey Harrison btext_drawchar(hex_asc_hi(v >> 8));
573542ad5d4SHarvey Harrison btext_drawchar(hex_asc_lo(v >> 8));
574542ad5d4SHarvey Harrison btext_drawchar(hex_asc_hi(v));
575542ad5d4SHarvey Harrison btext_drawchar(hex_asc_lo(v));
5769b6b563cSPaul Mackerras btext_drawchar(' ');
5779b6b563cSPaul Mackerras }
5789b6b563cSPaul Mackerras
udbg_init_btext(void)5797191b615SBenjamin Herrenschmidt void __init udbg_init_btext(void)
5809b6b563cSPaul Mackerras {
5817191b615SBenjamin Herrenschmidt /* If btext is enabled, we might have a BAT setup for early display,
5827191b615SBenjamin Herrenschmidt * thus we do enable some very basic udbg output
5837191b615SBenjamin Herrenschmidt */
5847191b615SBenjamin Herrenschmidt udbg_putc = btext_drawchar;
5859b6b563cSPaul Mackerras }
5869b6b563cSPaul Mackerras
5879b6b563cSPaul Mackerras static unsigned char vga_font[cmapsz] = {
5889b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5899b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd,
5909b6b563cSPaul Mackerras 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff,
5919b6b563cSPaul Mackerras 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
5929b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10,
5939b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe,
5949b6b563cSPaul Mackerras 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
5959b6b563cSPaul Mackerras 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
5969b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c,
5979b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c,
5989b6b563cSPaul Mackerras 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
5999b6b563cSPaul Mackerras 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
6009b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
6019b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd,
6029b6b563cSPaul Mackerras 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x0e,
6039b6b563cSPaul Mackerras 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
6049b6b563cSPaul Mackerras 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18,
6059b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30,
6069b6b563cSPaul Mackerras 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63,
6079b6b563cSPaul Mackerras 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00,
6089b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18,
6099b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8,
6109b6b563cSPaul Mackerras 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0e,
6119b6b563cSPaul Mackerras 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
6129b6b563cSPaul Mackerras 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00,
6139b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
6149b6b563cSPaul Mackerras 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xdb,
6159b6b563cSPaul Mackerras 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00,
6169b6b563cSPaul Mackerras 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6,
6179b6b563cSPaul Mackerras 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6189b6b563cSPaul Mackerras 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c,
6199b6b563cSPaul Mackerras 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
6209b6b563cSPaul Mackerras 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
6219b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
6229b6b563cSPaul Mackerras 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6239b6b563cSPaul Mackerras 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6249b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00,
6259b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
6269b6b563cSPaul Mackerras 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6279b6b563cSPaul Mackerras 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6289b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00,
6299b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c,
6309b6b563cSPaul Mackerras 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6319b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6329b6b563cSPaul Mackerras 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18,
6339b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00,
6349b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c,
6359b6b563cSPaul Mackerras 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
6369b6b563cSPaul Mackerras 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c,
6379b6b563cSPaul Mackerras 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18,
6389b6b563cSPaul Mackerras 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c,
6399b6b563cSPaul Mackerras 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
6409b6b563cSPaul Mackerras 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6419b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
6429b6b563cSPaul Mackerras 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
6439b6b563cSPaul Mackerras 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
6449b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
6459b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
6469b6b563cSPaul Mackerras 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6479b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
6489b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
6499b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6509b6b563cSPaul Mackerras 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6519b6b563cSPaul Mackerras 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
6529b6b563cSPaul Mackerras 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c,
6539b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18,
6549b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
6559b6b563cSPaul Mackerras 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
6569b6b563cSPaul Mackerras 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c,
6579b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe,
6589b6b563cSPaul Mackerras 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0,
6599b6b563cSPaul Mackerras 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
6609b6b563cSPaul Mackerras 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
6619b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18,
6629b6b563cSPaul Mackerras 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
6639b6b563cSPaul Mackerras 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
6649b6b563cSPaul Mackerras 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78,
6659b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
6669b6b563cSPaul Mackerras 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6679b6b563cSPaul Mackerras 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
6689b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06,
6699b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
6709b6b563cSPaul Mackerras 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
6719b6b563cSPaul Mackerras 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
6729b6b563cSPaul Mackerras 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18,
6739b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xde, 0xde,
6749b6b563cSPaul Mackerras 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38,
6759b6b563cSPaul Mackerras 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
6769b6b563cSPaul Mackerras 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc,
6779b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0,
6789b6b563cSPaul Mackerras 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6c,
6799b6b563cSPaul Mackerras 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00,
6809b6b563cSPaul Mackerras 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe,
6819b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68,
6829b6b563cSPaul Mackerras 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66,
6839b6b563cSPaul Mackerras 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00,
6849b6b563cSPaul Mackerras 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
6859b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18,
6869b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c,
6879b6b563cSPaul Mackerras 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
6889b6b563cSPaul Mackerras 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6,
6899b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60,
6909b6b563cSPaul Mackerras 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xe7,
6919b6b563cSPaul Mackerras 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
6929b6b563cSPaul Mackerras 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6,
6939b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
6949b6b563cSPaul Mackerras 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66,
6959b6b563cSPaul Mackerras 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
6969b6b563cSPaul Mackerras 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c,
6979b6b563cSPaul Mackerras 0x0c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c,
6989b6b563cSPaul Mackerras 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
6999b6b563cSPaul Mackerras 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
7009b6b563cSPaul Mackerras 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
7019b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
7029b6b563cSPaul Mackerras 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3,
7039b6b563cSPaul Mackerras 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
7049b6b563cSPaul Mackerras 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66,
7059b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18,
7069b6b563cSPaul Mackerras 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3,
7079b6b563cSPaul Mackerras 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
7089b6b563cSPaul Mackerras 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff,
7099b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30,
7109b6b563cSPaul Mackerras 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
7119b6b563cSPaul Mackerras 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
7129b6b563cSPaul Mackerras 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c,
7139b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00,
7149b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7159b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
7169b6b563cSPaul Mackerras 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7179b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c,
7189b6b563cSPaul Mackerras 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60,
7199b6b563cSPaul Mackerras 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
7209b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c,
7219b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc,
7229b6b563cSPaul Mackerras 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7239b6b563cSPaul Mackerras 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
7249b6b563cSPaul Mackerras 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0,
7259b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc,
7269b6b563cSPaul Mackerras 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x60,
7279b6b563cSPaul Mackerras 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
7289b6b563cSPaul Mackerras 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
7299b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06,
7309b6b563cSPaul Mackerras 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0xe0, 0x60,
7319b6b563cSPaul Mackerras 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
7329b6b563cSPaul Mackerras 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
7339b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb,
7349b6b563cSPaul Mackerras 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7359b6b563cSPaul Mackerras 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
7369b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
7379b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66,
7389b6b563cSPaul Mackerras 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
7399b6b563cSPaul Mackerras 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
7409b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0,
7419b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60,
7429b6b563cSPaul Mackerras 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30,
7439b6b563cSPaul Mackerras 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00,
7449b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
7459b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3,
7469b6b563cSPaul Mackerras 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7479b6b563cSPaul Mackerras 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00,
7489b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3,
7499b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
7509b6b563cSPaul Mackerras 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
7519b6b563cSPaul Mackerras 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
7529b6b563cSPaul Mackerras 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e,
7539b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18,
7549b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18,
7559b6b563cSPaul Mackerras 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
7569b6b563cSPaul Mackerras 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7579b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6,
7589b6b563cSPaul Mackerras 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66,
7599b6b563cSPaul Mackerras 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00,
7609b6b563cSPaul Mackerras 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
7619b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe,
7629b6b563cSPaul Mackerras 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c,
7639b6b563cSPaul Mackerras 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
7649b6b563cSPaul Mackerras 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76,
7659b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c,
7669b6b563cSPaul Mackerras 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38,
7679b6b563cSPaul Mackerras 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
7689b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06,
7699b6b563cSPaul Mackerras 0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe,
7709b6b563cSPaul Mackerras 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
7719b6b563cSPaul Mackerras 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
7729b6b563cSPaul Mackerras 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c,
7739b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18,
7749b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66,
7759b6b563cSPaul Mackerras 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
7769b6b563cSPaul Mackerras 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
7779b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6,
7789b6b563cSPaul Mackerras 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00,
7799b6b563cSPaul Mackerras 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
7809b6b563cSPaul Mackerras 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe,
7819b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b,
7829b6b563cSPaul Mackerras 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x6c,
7839b6b563cSPaul Mackerras 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00,
7849b6b563cSPaul Mackerras 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
7859b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6,
7869b6b563cSPaul Mackerras 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18,
7879b6b563cSPaul Mackerras 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
7889b6b563cSPaul Mackerras 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
7899b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc,
7909b6b563cSPaul Mackerras 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
7919b6b563cSPaul Mackerras 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
7929b6b563cSPaul Mackerras 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
7939b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
7949b6b563cSPaul Mackerras 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
7959b6b563cSPaul Mackerras 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
7969b6b563cSPaul Mackerras 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc,
7979b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18,
7989b6b563cSPaul Mackerras 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66,
7999b6b563cSPaul Mackerras 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00,
8009b6b563cSPaul Mackerras 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18,
8019b6b563cSPaul Mackerras 0xd8, 0x70, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c,
8029b6b563cSPaul Mackerras 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30,
8039b6b563cSPaul Mackerras 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
8049b6b563cSPaul Mackerras 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
8059b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc,
8069b6b563cSPaul Mackerras 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc,
8079b6b563cSPaul Mackerras 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
8089b6b563cSPaul Mackerras 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6,
8099b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00,
8109b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c,
8119b6b563cSPaul Mackerras 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8129b6b563cSPaul Mackerras 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c,
8139b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0,
8149b6b563cSPaul Mackerras 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8159b6b563cSPaul Mackerras 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
8169b6b563cSPaul Mackerras 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06,
8179b6b563cSPaul Mackerras 0x0c, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30,
8189b6b563cSPaul Mackerras 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
8199b6b563cSPaul Mackerras 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
8209b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00,
8219b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36,
8229b6b563cSPaul Mackerras 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0x11, 0x44,
8239b6b563cSPaul Mackerras 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
8249b6b563cSPaul Mackerras 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
8259b6b563cSPaul Mackerras 0x55, 0xaa, 0x55, 0xaa, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
8269b6b563cSPaul Mackerras 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0x18, 0x18, 0x18, 0x18,
8279b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
8289b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18,
8299b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8,
8309b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36,
8319b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8329b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36,
8339b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8,
8349b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36,
8359b6b563cSPaul Mackerras 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8369b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8379b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6,
8389b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8399b6b563cSPaul Mackerras 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8409b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00,
8419b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8,
8429b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8439b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
8449b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
8459b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
8469b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8479b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
8489b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
8499b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
8509b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
8519b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
8529b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
8539b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37,
8549b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8559b6b563cSPaul Mackerras 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8569b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36,
8579b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff,
8589b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8599b6b563cSPaul Mackerras 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8609b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36,
8619b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
8629b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36,
8639b6b563cSPaul Mackerras 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8649b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
8659b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff,
8669b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8679b6b563cSPaul Mackerras 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
8689b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36,
8699b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f,
8709b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
8719b6b563cSPaul Mackerras 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8729b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
8739b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
8749b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8759b6b563cSPaul Mackerras 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
8769b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18,
8779b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
8789b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8799b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
8809b6b563cSPaul Mackerras 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
8819b6b563cSPaul Mackerras 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
8829b6b563cSPaul Mackerras 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0,
8839b6b563cSPaul Mackerras 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
8849b6b563cSPaul Mackerras 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
8859b6b563cSPaul Mackerras 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
8869b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8879b6b563cSPaul Mackerras 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00,
8889b6b563cSPaul Mackerras 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc,
8899b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0,
8909b6b563cSPaul Mackerras 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8919b6b563cSPaul Mackerras 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
8929b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe,
8939b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8,
8949b6b563cSPaul Mackerras 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8959b6b563cSPaul Mackerras 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00,
8969b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
8979b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66,
8989b6b563cSPaul Mackerras 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
8999b6b563cSPaul Mackerras 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
9009b6b563cSPaul Mackerras 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee,
9019b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66,
9029b6b563cSPaul Mackerras 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9039b6b563cSPaul Mackerras 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9049b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0,
9059b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60,
9069b6b563cSPaul Mackerras 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
9079b6b563cSPaul Mackerras 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
9089b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00,
9099b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18,
9109b6b563cSPaul Mackerras 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
9119b6b563cSPaul Mackerras 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
9129b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e,
9139b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x1b, 0x18, 0x18,
9149b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
9159b6b563cSPaul Mackerras 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
9169b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00,
9179b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00,
9189b6b563cSPaul Mackerras 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c,
9199b6b563cSPaul Mackerras 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9209b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
9219b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9229b6b563cSPaul Mackerras 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x0c,
9239b6b563cSPaul Mackerras 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00,
9249b6b563cSPaul Mackerras 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
9259b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00,
9269b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9279b6b563cSPaul Mackerras 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
9289b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9299b6b563cSPaul Mackerras 0x00, 0x00, 0x00, 0x00,
9309b6b563cSPaul Mackerras };
931719c91ccSDavid Gibson
932