aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/Kconfig2
-rw-r--r--drivers/Makefile2
-rw-r--r--drivers/acpi/processor_idle.c2
-rw-r--r--drivers/base/node.c2
-rw-r--r--drivers/char/Kconfig4
-rw-r--r--drivers/char/Makefile1
-rw-r--r--drivers/char/ipmi/ipmi_msghandler.c2
-rw-r--r--drivers/char/mem.c8
-rw-r--r--drivers/char/vr41xx_giu.c743
-rw-r--r--drivers/ide/Kconfig4
-rw-r--r--drivers/ide/pci/sgiioc4.c30
-rw-r--r--drivers/input/gameport/gameport.c2
-rw-r--r--drivers/md/Makefile3
-rw-r--r--drivers/md/bitmap.c1586
-rw-r--r--drivers/md/dm-crypt.c3
-rw-r--r--drivers/md/linear.c3
-rw-r--r--drivers/md/md.c525
-rw-r--r--drivers/md/multipath.c3
-rw-r--r--drivers/md/raid0.c12
-rw-r--r--drivers/md/raid1.c242
-rw-r--r--drivers/md/raid10.c30
-rw-r--r--drivers/md/raid5.c12
-rw-r--r--drivers/md/raid6main.c12
-rw-r--r--drivers/misc/ibmasm/command.c30
-rw-r--r--drivers/misc/ibmasm/dot_command.c10
-rw-r--r--drivers/misc/ibmasm/event.c18
-rw-r--r--drivers/misc/ibmasm/heartbeat.c13
-rw-r--r--drivers/misc/ibmasm/ibmasm.h76
-rw-r--r--drivers/misc/ibmasm/ibmasmfs.c125
-rw-r--r--drivers/misc/ibmasm/lowlevel.c18
-rw-r--r--drivers/misc/ibmasm/module.c69
-rw-r--r--drivers/misc/ibmasm/r_heartbeat.c2
-rw-r--r--drivers/misc/ibmasm/remote.c304
-rw-r--r--drivers/misc/ibmasm/remote.h173
-rw-r--r--drivers/net/3c59x.c5
-rw-r--r--drivers/net/8390.c4
-rw-r--r--drivers/oprofile/buffer_sync.c4
-rw-r--r--drivers/pcmcia/Kconfig6
-rw-r--r--drivers/pcmcia/m32r_cfc.c57
-rw-r--r--drivers/pcmcia/m32r_cfc.h8
-rw-r--r--drivers/s390/cio/blacklist.c6
-rw-r--r--drivers/scsi/megaraid.c2
-rw-r--r--drivers/serial/Kconfig11
-rw-r--r--drivers/serial/Makefile2
-rw-r--r--drivers/serial/cpm_uart/cpm_uart_cpm2.c9
-rw-r--r--drivers/serial/ioc4_serial.c336
-rw-r--r--drivers/sn/Kconfig20
-rw-r--r--drivers/sn/Makefile2
-rw-r--r--drivers/sn/ioc4.c418
-rw-r--r--drivers/video/Kconfig16
-rw-r--r--drivers/video/Makefile1
-rw-r--r--drivers/video/arcfb.c684
-rw-r--r--drivers/video/chipsfb.c3
-rw-r--r--drivers/video/console/Kconfig17
-rw-r--r--drivers/video/console/Makefile2
-rw-r--r--drivers/video/console/bitblit.c23
-rw-r--r--drivers/video/console/font_10x18.c5146
-rw-r--r--drivers/video/console/font_7x14.c4118
-rw-r--r--drivers/video/console/font_sun12x22.c1579
-rw-r--r--drivers/video/console/fonts.c8
-rw-r--r--drivers/video/console/vgacon.c17
-rw-r--r--drivers/video/fbmem.c67
-rw-r--r--drivers/video/i810/i810_main.c1
-rw-r--r--drivers/video/intelfb/intelfbdrv.c23
-rw-r--r--drivers/video/nvidia/nvidia.c18
-rw-r--r--drivers/video/pm3fb.c2
-rw-r--r--drivers/video/riva/fbdev.c19
-rw-r--r--drivers/video/s1d13xxxfb.c2
-rw-r--r--drivers/video/savage/savagefb_driver.c2
-rw-r--r--drivers/video/softcursor.c9
-rw-r--r--drivers/video/vesafb.c8
71 files changed, 14977 insertions, 1749 deletions
diff --git a/drivers/Kconfig b/drivers/Kconfig
index ed41d9036bfc..aed4a9b97c14 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -58,4 +58,6 @@ source "drivers/mmc/Kconfig"
58 58
59source "drivers/infiniband/Kconfig" 59source "drivers/infiniband/Kconfig"
60 60
61source "drivers/sn/Kconfig"
62
61endmenu 63endmenu
diff --git a/drivers/Makefile b/drivers/Makefile
index 15681de688f4..3167be54fedd 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -61,6 +61,6 @@ obj-$(CONFIG_EISA) += eisa/
61obj-$(CONFIG_CPU_FREQ) += cpufreq/ 61obj-$(CONFIG_CPU_FREQ) += cpufreq/
62obj-$(CONFIG_MMC) += mmc/ 62obj-$(CONFIG_MMC) += mmc/
63obj-$(CONFIG_INFINIBAND) += infiniband/ 63obj-$(CONFIG_INFINIBAND) += infiniband/
64obj-$(CONFIG_BLK_DEV_SGIIOC4) += sn/ 64obj-$(CONFIG_SGI_IOC4) += sn/
65obj-y += firmware/ 65obj-y += firmware/
66obj-$(CONFIG_CRYPTO) += crypto/ 66obj-$(CONFIG_CRYPTO) += crypto/
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index ff64d333e95f..c9d671cf7857 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -171,7 +171,7 @@ static void acpi_processor_idle (void)
171 int sleep_ticks = 0; 171 int sleep_ticks = 0;
172 u32 t1, t2 = 0; 172 u32 t1, t2 = 0;
173 173
174 pr = processors[_smp_processor_id()]; 174 pr = processors[raw_smp_processor_id()];
175 if (!pr) 175 if (!pr)
176 return; 176 return;
177 177
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 5d4517ccc422..904b27caf697 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -87,7 +87,7 @@ static ssize_t node_read_numastat(struct sys_device * dev, char * buf)
87 for (i = 0; i < MAX_NR_ZONES; i++) { 87 for (i = 0; i < MAX_NR_ZONES; i++) {
88 struct zone *z = &pg->node_zones[i]; 88 struct zone *z = &pg->node_zones[i];
89 for (cpu = 0; cpu < NR_CPUS; cpu++) { 89 for (cpu = 0; cpu < NR_CPUS; cpu++) {
90 struct per_cpu_pageset *ps = &z->pageset[cpu]; 90 struct per_cpu_pageset *ps = zone_pcp(z,cpu);
91 numa_hit += ps->numa_hit; 91 numa_hit += ps->numa_hit;
92 numa_miss += ps->numa_miss; 92 numa_miss += ps->numa_miss;
93 numa_foreign += ps->numa_foreign; 93 numa_foreign += ps->numa_foreign;
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index 5ed6515ae01f..7ccf871d3c9d 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -929,6 +929,10 @@ config SCx200_GPIO
929 929
930 If compiled as a module, it will be called scx200_gpio. 930 If compiled as a module, it will be called scx200_gpio.
931 931
932config GPIO_VR41XX
933 tristate "NEC VR4100 series General-purpose I/O Unit support"
934 depends on CPU_VR41XX
935
932config RAW_DRIVER 936config RAW_DRIVER
933 tristate "RAW driver (/dev/raw/rawN) (OBSOLETE)" 937 tristate "RAW driver (/dev/raw/rawN) (OBSOLETE)"
934 help 938 help
diff --git a/drivers/char/Makefile b/drivers/char/Makefile
index e3f5c32aac55..1aff819f3832 100644
--- a/drivers/char/Makefile
+++ b/drivers/char/Makefile
@@ -80,6 +80,7 @@ obj-$(CONFIG_PPDEV) += ppdev.o
80obj-$(CONFIG_NWBUTTON) += nwbutton.o 80obj-$(CONFIG_NWBUTTON) += nwbutton.o
81obj-$(CONFIG_NWFLASH) += nwflash.o 81obj-$(CONFIG_NWFLASH) += nwflash.o
82obj-$(CONFIG_SCx200_GPIO) += scx200_gpio.o 82obj-$(CONFIG_SCx200_GPIO) += scx200_gpio.o
83obj-$(CONFIG_GPIO_VR41XX) += vr41xx_giu.o
83obj-$(CONFIG_TANBAC_TB0219) += tb0219.o 84obj-$(CONFIG_TANBAC_TB0219) += tb0219.o
84 85
85obj-$(CONFIG_WATCHDOG) += watchdog/ 86obj-$(CONFIG_WATCHDOG) += watchdog/
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
index d7fb452af7f9..0c81652eaba6 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -641,7 +641,7 @@ int ipmi_create_user(unsigned int if_num,
641 return -ENOMEM; 641 return -ENOMEM;
642 642
643 down_read(&interfaces_sem); 643 down_read(&interfaces_sem);
644 if ((if_num > MAX_IPMI_INTERFACES) || ipmi_interfaces[if_num] == NULL) 644 if ((if_num >= MAX_IPMI_INTERFACES) || ipmi_interfaces[if_num] == NULL)
645 { 645 {
646 rv = -EINVAL; 646 rv = -EINVAL;
647 goto out_unlock; 647 goto out_unlock;
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index 257b8ee605e5..e3085b22a365 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -484,7 +484,7 @@ static ssize_t write_kmem(struct file * file, const char __user * buf,
484 return virtr + wrote; 484 return virtr + wrote;
485} 485}
486 486
487#if defined(CONFIG_ISA) || !defined(__mc68000__) 487#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
488static ssize_t read_port(struct file * file, char __user * buf, 488static ssize_t read_port(struct file * file, char __user * buf,
489 size_t count, loff_t *ppos) 489 size_t count, loff_t *ppos)
490{ 490{
@@ -744,7 +744,7 @@ static struct file_operations null_fops = {
744 .write = write_null, 744 .write = write_null,
745}; 745};
746 746
747#if defined(CONFIG_ISA) || !defined(__mc68000__) 747#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
748static struct file_operations port_fops = { 748static struct file_operations port_fops = {
749 .llseek = memory_lseek, 749 .llseek = memory_lseek,
750 .read = read_port, 750 .read = read_port,
@@ -804,7 +804,7 @@ static int memory_open(struct inode * inode, struct file * filp)
804 case 3: 804 case 3:
805 filp->f_op = &null_fops; 805 filp->f_op = &null_fops;
806 break; 806 break;
807#if defined(CONFIG_ISA) || !defined(__mc68000__) 807#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
808 case 4: 808 case 4:
809 filp->f_op = &port_fops; 809 filp->f_op = &port_fops;
810 break; 810 break;
@@ -846,7 +846,7 @@ static const struct {
846 {1, "mem", S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops}, 846 {1, "mem", S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops},
847 {2, "kmem", S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops}, 847 {2, "kmem", S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
848 {3, "null", S_IRUGO | S_IWUGO, &null_fops}, 848 {3, "null", S_IRUGO | S_IWUGO, &null_fops},
849#if defined(CONFIG_ISA) || !defined(__mc68000__) 849#if (defined(CONFIG_ISA) || !defined(__mc68000__)) && (!defined(CONFIG_PPC_ISERIES) || defined(CONFIG_PCI))
850 {4, "port", S_IRUSR | S_IWUSR | S_IRGRP, &port_fops}, 850 {4, "port", S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},
851#endif 851#endif
852 {5, "zero", S_IRUGO | S_IWUGO, &zero_fops}, 852 {5, "zero", S_IRUGO | S_IWUGO, &zero_fops},
diff --git a/drivers/char/vr41xx_giu.c b/drivers/char/vr41xx_giu.c
new file mode 100644
index 000000000000..683278bc5241
--- /dev/null
+++ b/drivers/char/vr41xx_giu.c
@@ -0,0 +1,743 @@
1/*
2 * Driver for NEC VR4100 series General-purpose I/O Unit.
3 *
4 * Copyright (C) 2002 MontaVista Software Inc.
5 * Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com>
6 * Copyright (C) 2003-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22#include <linux/device.h>
23#include <linux/errno.h>
24#include <linux/fs.h>
25#include <linux/init.h>
26#include <linux/irq.h>
27#include <linux/interrupt.h>
28#include <linux/kernel.h>
29#include <linux/module.h>
30#include <linux/spinlock.h>
31#include <linux/types.h>
32
33#include <asm/cpu.h>
34#include <asm/io.h>
35#include <asm/vr41xx/giu.h>
36#include <asm/vr41xx/vr41xx.h>
37
38MODULE_AUTHOR("Yoichi Yuasa <yuasa@hh.iij4u.or.jp>");
39MODULE_DESCRIPTION("NEC VR4100 series General-purpose I/O Unit driver");
40MODULE_LICENSE("GPL");
41
42static int major; /* default is dynamic major device number */
43module_param(major, int, 0);
44MODULE_PARM_DESC(major, "Major device number");
45
46#define GIU_TYPE1_START 0x0b000100UL
47#define GIU_TYPE1_SIZE 0x20UL
48
49#define GIU_TYPE2_START 0x0f000140UL
50#define GIU_TYPE2_SIZE 0x20UL
51
52#define GIU_TYPE3_START 0x0f000140UL
53#define GIU_TYPE3_SIZE 0x28UL
54
55#define GIU_PULLUPDOWN_START 0x0b0002e0UL
56#define GIU_PULLUPDOWN_SIZE 0x04UL
57
58#define GIUIOSELL 0x00
59#define GIUIOSELH 0x02
60#define GIUPIODL 0x04
61#define GIUPIODH 0x06
62#define GIUINTSTATL 0x08
63#define GIUINTSTATH 0x0a
64#define GIUINTENL 0x0c
65#define GIUINTENH 0x0e
66#define GIUINTTYPL 0x10
67#define GIUINTTYPH 0x12
68#define GIUINTALSELL 0x14
69#define GIUINTALSELH 0x16
70#define GIUINTHTSELL 0x18
71#define GIUINTHTSELH 0x1a
72#define GIUPODATL 0x1c
73#define GIUPODATEN 0x1c
74#define GIUPODATH 0x1e
75 #define PIOEN0 0x0100
76 #define PIOEN1 0x0200
77#define GIUPODAT 0x1e
78#define GIUFEDGEINHL 0x20
79#define GIUFEDGEINHH 0x22
80#define GIUREDGEINHL 0x24
81#define GIUREDGEINHH 0x26
82
83#define GIUUSEUPDN 0x1e0
84#define GIUTERMUPDN 0x1e2
85
86#define GPIO_HAS_PULLUPDOWN_IO 0x0001
87#define GPIO_HAS_OUTPUT_ENABLE 0x0002
88#define GPIO_HAS_INTERRUPT_EDGE_SELECT 0x0100
89
90static spinlock_t giu_lock;
91static struct resource *giu_resource1;
92static struct resource *giu_resource2;
93static unsigned long giu_flags;
94static unsigned int giu_nr_pins;
95
96static void __iomem *giu_base;
97
98#define giu_read(offset) readw(giu_base + (offset))
99#define giu_write(offset, value) writew((value), giu_base + (offset))
100
101#define GPIO_PIN_OF_IRQ(irq) ((irq) - GIU_IRQ_BASE)
102#define GIUINT_HIGH_OFFSET 16
103#define GIUINT_HIGH_MAX 32
104
105static inline uint16_t giu_set(uint16_t offset, uint16_t set)
106{
107 uint16_t data;
108
109 data = giu_read(offset);
110 data |= set;
111 giu_write(offset, data);
112
113 return data;
114}
115
116static inline uint16_t giu_clear(uint16_t offset, uint16_t clear)
117{
118 uint16_t data;
119
120 data = giu_read(offset);
121 data &= ~clear;
122 giu_write(offset, data);
123
124 return data;
125}
126
127static unsigned int startup_giuint_low_irq(unsigned int irq)
128{
129 unsigned int pin;
130
131 pin = GPIO_PIN_OF_IRQ(irq);
132 giu_write(GIUINTSTATL, 1 << pin);
133 giu_set(GIUINTENL, 1 << pin);
134
135 return 0;
136}
137
138static void shutdown_giuint_low_irq(unsigned int irq)
139{
140 giu_clear(GIUINTENL, 1 << GPIO_PIN_OF_IRQ(irq));
141}
142
143static void enable_giuint_low_irq(unsigned int irq)
144{
145 giu_set(GIUINTENL, 1 << GPIO_PIN_OF_IRQ(irq));
146}
147
148#define disable_giuint_low_irq shutdown_giuint_low_irq
149
150static void ack_giuint_low_irq(unsigned int irq)
151{
152 unsigned int pin;
153
154 pin = GPIO_PIN_OF_IRQ(irq);
155 giu_clear(GIUINTENL, 1 << pin);
156 giu_write(GIUINTSTATL, 1 << pin);
157}
158
159static void end_giuint_low_irq(unsigned int irq)
160{
161 if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
162 giu_set(GIUINTENL, 1 << GPIO_PIN_OF_IRQ(irq));
163}
164
165static struct hw_interrupt_type giuint_low_irq_type = {
166 .typename = "GIUINTL",
167 .startup = startup_giuint_low_irq,
168 .shutdown = shutdown_giuint_low_irq,
169 .enable = enable_giuint_low_irq,
170 .disable = disable_giuint_low_irq,
171 .ack = ack_giuint_low_irq,
172 .end = end_giuint_low_irq,
173};
174
175static unsigned int startup_giuint_high_irq(unsigned int irq)
176{
177 unsigned int pin;
178
179 pin = GPIO_PIN_OF_IRQ(irq) - GIUINT_HIGH_OFFSET;
180 giu_write(GIUINTSTATH, 1 << pin);
181 giu_set(GIUINTENH, 1 << pin);
182
183 return 0;
184}
185
186static void shutdown_giuint_high_irq(unsigned int irq)
187{
188 giu_clear(GIUINTENH, 1 << (GPIO_PIN_OF_IRQ(irq) - GIUINT_HIGH_OFFSET));
189}
190
191static void enable_giuint_high_irq(unsigned int irq)
192{
193 giu_set(GIUINTENH, 1 << (GPIO_PIN_OF_IRQ(irq) - GIUINT_HIGH_OFFSET));
194}
195
196#define disable_giuint_high_irq shutdown_giuint_high_irq
197
198static void ack_giuint_high_irq(unsigned int irq)
199{
200 unsigned int pin;
201
202 pin = GPIO_PIN_OF_IRQ(irq) - GIUINT_HIGH_OFFSET;
203 giu_clear(GIUINTENH, 1 << pin);
204 giu_write(GIUINTSTATH, 1 << pin);
205}
206
207static void end_giuint_high_irq(unsigned int irq)
208{
209 if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
210 giu_set(GIUINTENH, 1 << (GPIO_PIN_OF_IRQ(irq) - GIUINT_HIGH_OFFSET));
211}
212
213static struct hw_interrupt_type giuint_high_irq_type = {
214 .typename = "GIUINTH",
215 .startup = startup_giuint_high_irq,
216 .shutdown = shutdown_giuint_high_irq,
217 .enable = enable_giuint_high_irq,
218 .disable = disable_giuint_high_irq,
219 .ack = ack_giuint_high_irq,
220 .end = end_giuint_high_irq,
221};
222
223static int giu_get_irq(unsigned int irq, struct pt_regs *regs)
224{
225 uint16_t pendl, pendh, maskl, maskh;
226 int i;
227
228 pendl = giu_read(GIUINTSTATL);
229 pendh = giu_read(GIUINTSTATH);
230 maskl = giu_read(GIUINTENL);
231 maskh = giu_read(GIUINTENH);
232
233 maskl &= pendl;
234 maskh &= pendh;
235
236 if (maskl) {
237 for (i = 0; i < 16; i++) {
238 if (maskl & (1 << i))
239 return GIU_IRQ(i);
240 }
241 } else if (maskh) {
242 for (i = 0; i < 16; i++) {
243 if (maskh & (1 << i))
244 return GIU_IRQ(i + GIUINT_HIGH_OFFSET);
245 }
246 }
247
248 printk(KERN_ERR "spurious GIU interrupt: %04x(%04x),%04x(%04x)\n",
249 maskl, pendl, maskh, pendh);
250
251 atomic_inc(&irq_err_count);
252
253 return -EINVAL;
254}
255
256void vr41xx_set_irq_trigger(unsigned int pin, irq_trigger_t trigger, irq_signal_t signal)
257{
258 uint16_t mask;
259
260 if (pin < GIUINT_HIGH_OFFSET) {
261 mask = 1 << pin;
262 if (trigger != IRQ_TRIGGER_LEVEL) {
263 giu_set(GIUINTTYPL, mask);
264 if (signal == IRQ_SIGNAL_HOLD)
265 giu_set(GIUINTHTSELL, mask);
266 else
267 giu_clear(GIUINTHTSELL, mask);
268 if (current_cpu_data.cputype == CPU_VR4133) {
269 switch (trigger) {
270 case IRQ_TRIGGER_EDGE_FALLING:
271 giu_set(GIUFEDGEINHL, mask);
272 giu_clear(GIUREDGEINHL, mask);
273 break;
274 case IRQ_TRIGGER_EDGE_RISING:
275 giu_clear(GIUFEDGEINHL, mask);
276 giu_set(GIUREDGEINHL, mask);
277 break;
278 default:
279 giu_set(GIUFEDGEINHL, mask);
280 giu_set(GIUREDGEINHL, mask);
281 break;
282 }
283 }
284 } else {
285 giu_clear(GIUINTTYPL, mask);
286 giu_clear(GIUINTHTSELL, mask);
287 }
288 giu_write(GIUINTSTATL, mask);
289 } else if (pin < GIUINT_HIGH_MAX) {
290 mask = 1 << (pin - GIUINT_HIGH_OFFSET);
291 if (trigger != IRQ_TRIGGER_LEVEL) {
292 giu_set(GIUINTTYPH, mask);
293 if (signal == IRQ_SIGNAL_HOLD)
294 giu_set(GIUINTHTSELH, mask);
295 else
296 giu_clear(GIUINTHTSELH, mask);
297 if (current_cpu_data.cputype == CPU_VR4133) {
298 switch (trigger) {
299 case IRQ_TRIGGER_EDGE_FALLING:
300 giu_set(GIUFEDGEINHH, mask);
301 giu_clear(GIUREDGEINHH, mask);
302 break;
303 case IRQ_TRIGGER_EDGE_RISING:
304 giu_clear(GIUFEDGEINHH, mask);
305 giu_set(GIUREDGEINHH, mask);
306 break;
307 default:
308 giu_set(GIUFEDGEINHH, mask);
309 giu_set(GIUREDGEINHH, mask);
310 break;
311 }
312 }
313 } else {
314 giu_clear(GIUINTTYPH, mask);
315 giu_clear(GIUINTHTSELH, mask);
316 }
317 giu_write(GIUINTSTATH, mask);
318 }
319}
320
321EXPORT_SYMBOL_GPL(vr41xx_set_irq_trigger);
322
323void vr41xx_set_irq_level(unsigned int pin, irq_level_t level)
324{
325 uint16_t mask;
326
327 if (pin < GIUINT_HIGH_OFFSET) {
328 mask = 1 << pin;
329 if (level == IRQ_LEVEL_HIGH)
330 giu_set(GIUINTALSELL, mask);
331 else
332 giu_clear(GIUINTALSELL, mask);
333 giu_write(GIUINTSTATL, mask);
334 } else if (pin < GIUINT_HIGH_MAX) {
335 mask = 1 << (pin - GIUINT_HIGH_OFFSET);
336 if (level == IRQ_LEVEL_HIGH)
337 giu_set(GIUINTALSELH, mask);
338 else
339 giu_clear(GIUINTALSELH, mask);
340 giu_write(GIUINTSTATH, mask);
341 }
342}
343
344EXPORT_SYMBOL_GPL(vr41xx_set_irq_level);
345
346gpio_data_t vr41xx_gpio_get_pin(unsigned int pin)
347{
348 uint16_t reg, mask;
349
350 if (pin >= giu_nr_pins)
351 return GPIO_DATA_INVAL;
352
353 if (pin < 16) {
354 reg = giu_read(GIUPIODL);
355 mask = (uint16_t)1 << pin;
356 } else if (pin < 32) {
357 reg = giu_read(GIUPIODH);
358 mask = (uint16_t)1 << (pin - 16);
359 } else if (pin < 48) {
360 reg = giu_read(GIUPODATL);
361 mask = (uint16_t)1 << (pin - 32);
362 } else {
363 reg = giu_read(GIUPODATH);
364 mask = (uint16_t)1 << (pin - 48);
365 }
366
367 if (reg & mask)
368 return GPIO_DATA_HIGH;
369
370 return GPIO_DATA_LOW;
371}
372
373EXPORT_SYMBOL_GPL(vr41xx_gpio_get_pin);
374
375int vr41xx_gpio_set_pin(unsigned int pin, gpio_data_t data)
376{
377 uint16_t offset, mask, reg;
378 unsigned long flags;
379
380 if (pin >= giu_nr_pins)
381 return -EINVAL;
382
383 if (pin < 16) {
384 offset = GIUPIODL;
385 mask = (uint16_t)1 << pin;
386 } else if (pin < 32) {
387 offset = GIUPIODH;
388 mask = (uint16_t)1 << (pin - 16);
389 } else if (pin < 48) {
390 offset = GIUPODATL;
391 mask = (uint16_t)1 << (pin - 32);
392 } else {
393 offset = GIUPODATH;
394 mask = (uint16_t)1 << (pin - 48);
395 }
396
397 spin_lock_irqsave(&giu_lock, flags);
398
399 reg = giu_read(offset);
400 if (data == GPIO_DATA_HIGH)
401 reg |= mask;
402 else
403 reg &= ~mask;
404 giu_write(offset, reg);
405
406 spin_unlock_irqrestore(&giu_lock, flags);
407
408 return 0;
409}
410
411EXPORT_SYMBOL_GPL(vr41xx_gpio_set_pin);
412
413int vr41xx_gpio_set_direction(unsigned int pin, gpio_direction_t dir)
414{
415 uint16_t offset, mask, reg;
416 unsigned long flags;
417
418 if (pin >= giu_nr_pins)
419 return -EINVAL;
420
421 if (pin < 16) {
422 offset = GIUIOSELL;
423 mask = (uint16_t)1 << pin;
424 } else if (pin < 32) {
425 offset = GIUIOSELH;
426 mask = (uint16_t)1 << (pin - 16);
427 } else {
428 if (giu_flags & GPIO_HAS_OUTPUT_ENABLE) {
429 offset = GIUPODATEN;
430 mask = (uint16_t)1 << (pin - 32);
431 } else {
432 switch (pin) {
433 case 48:
434 offset = GIUPODATH;
435 mask = PIOEN0;
436 break;
437 case 49:
438 offset = GIUPODATH;
439 mask = PIOEN1;
440 break;
441 default:
442 return -EINVAL;
443 }
444 }
445 }
446
447 spin_lock_irqsave(&giu_lock, flags);
448
449 reg = giu_read(offset);
450 if (dir == GPIO_OUTPUT)
451 reg |= mask;
452 else
453 reg &= ~mask;
454 giu_write(offset, reg);
455
456 spin_unlock_irqrestore(&giu_lock, flags);
457
458 return 0;
459}
460
461EXPORT_SYMBOL_GPL(vr41xx_gpio_set_direction);
462
463int vr41xx_gpio_pullupdown(unsigned int pin, gpio_pull_t pull)
464{
465 uint16_t reg, mask;
466 unsigned long flags;
467
468 if ((giu_flags & GPIO_HAS_PULLUPDOWN_IO) != GPIO_HAS_PULLUPDOWN_IO)
469 return -EPERM;
470
471 if (pin >= 15)
472 return -EINVAL;
473
474 mask = (uint16_t)1 << pin;
475
476 spin_lock_irqsave(&giu_lock, flags);
477
478 if (pull == GPIO_PULL_UP || pull == GPIO_PULL_DOWN) {
479 reg = giu_read(GIUTERMUPDN);
480 if (pull == GPIO_PULL_UP)
481 reg |= mask;
482 else
483 reg &= ~mask;
484 giu_write(GIUTERMUPDN, reg);
485
486 reg = giu_read(GIUUSEUPDN);
487 reg |= mask;
488 giu_write(GIUUSEUPDN, reg);
489 } else {
490 reg = giu_read(GIUUSEUPDN);
491 reg &= ~mask;
492 giu_write(GIUUSEUPDN, reg);
493 }
494
495 spin_unlock_irqrestore(&giu_lock, flags);
496
497 return 0;
498}
499
500EXPORT_SYMBOL_GPL(vr41xx_gpio_pullupdown);
501
502static ssize_t gpio_read(struct file *file, char __user *buf, size_t len,
503 loff_t *ppos)
504{
505 unsigned int pin;
506 char value = '0';
507
508 pin = iminor(file->f_dentry->d_inode);
509 if (pin >= giu_nr_pins)
510 return -EBADF;
511
512 if (vr41xx_gpio_get_pin(pin) == GPIO_DATA_HIGH)
513 value = '1';
514
515 if (len <= 0)
516 return -EFAULT;
517
518 if (put_user(value, buf))
519 return -EFAULT;
520
521 return 1;
522}
523
524static ssize_t gpio_write(struct file *file, const char __user *data,
525 size_t len, loff_t *ppos)
526{
527 unsigned int pin;
528 size_t i;
529 char c;
530 int retval = 0;
531
532 pin = iminor(file->f_dentry->d_inode);
533 if (pin >= giu_nr_pins)
534 return -EBADF;
535
536 for (i = 0; i < len; i++) {
537 if (get_user(c, data + i))
538 return -EFAULT;
539
540 switch (c) {
541 case '0':
542 retval = vr41xx_gpio_set_pin(pin, GPIO_DATA_LOW);
543 break;
544 case '1':
545 retval = vr41xx_gpio_set_pin(pin, GPIO_DATA_HIGH);
546 break;
547 case 'D':
548 printk(KERN_INFO "GPIO%d: pull down\n", pin);
549 retval = vr41xx_gpio_pullupdown(pin, GPIO_PULL_DOWN);
550 break;
551 case 'd':
552 printk(KERN_INFO "GPIO%d: pull up/down disable\n", pin);
553 retval = vr41xx_gpio_pullupdown(pin, GPIO_PULL_DISABLE);
554 break;
555 case 'I':
556 printk(KERN_INFO "GPIO%d: input\n", pin);
557 retval = vr41xx_gpio_set_direction(pin, GPIO_INPUT);
558 break;
559 case 'O':
560 printk(KERN_INFO "GPIO%d: output\n", pin);
561 retval = vr41xx_gpio_set_direction(pin, GPIO_OUTPUT);
562 break;
563 case 'o':
564 printk(KERN_INFO "GPIO%d: output disable\n", pin);
565 retval = vr41xx_gpio_set_direction(pin, GPIO_OUTPUT_DISABLE);
566 break;
567 case 'P':
568 printk(KERN_INFO "GPIO%d: pull up\n", pin);
569 retval = vr41xx_gpio_pullupdown(pin, GPIO_PULL_UP);
570 break;
571 case 'p':
572 printk(KERN_INFO "GPIO%d: pull up/down disable\n", pin);
573 retval = vr41xx_gpio_pullupdown(pin, GPIO_PULL_DISABLE);
574 break;
575 default:
576 break;
577 }
578
579 if (retval < 0)
580 break;
581 }
582
583 return i;
584}
585
586static int gpio_open(struct inode *inode, struct file *file)
587{
588 unsigned int pin;
589
590 pin = iminor(inode);
591 if (pin >= giu_nr_pins)
592 return -EBADF;
593
594 return nonseekable_open(inode, file);
595}
596
597static int gpio_release(struct inode *inode, struct file *file)
598{
599 unsigned int pin;
600
601 pin = iminor(inode);
602 if (pin >= giu_nr_pins)
603 return -EBADF;
604
605 return 0;
606}
607
608static struct file_operations gpio_fops = {
609 .owner = THIS_MODULE,
610 .read = gpio_read,
611 .write = gpio_write,
612 .open = gpio_open,
613 .release = gpio_release,
614};
615
616static int giu_probe(struct device *dev)
617{
618 unsigned long start, size, flags = 0;
619 unsigned int nr_pins = 0;
620 struct resource *res1, *res2 = NULL;
621 void *base;
622 int retval, i;
623
624 switch (current_cpu_data.cputype) {
625 case CPU_VR4111:
626 case CPU_VR4121:
627 start = GIU_TYPE1_START;
628 size = GIU_TYPE1_SIZE;
629 flags = GPIO_HAS_PULLUPDOWN_IO;
630 nr_pins = 50;
631 break;
632 case CPU_VR4122:
633 case CPU_VR4131:
634 start = GIU_TYPE2_START;
635 size = GIU_TYPE2_SIZE;
636 nr_pins = 36;
637 break;
638 case CPU_VR4133:
639 start = GIU_TYPE3_START;
640 size = GIU_TYPE3_SIZE;
641 flags = GPIO_HAS_INTERRUPT_EDGE_SELECT;
642 nr_pins = 48;
643 break;
644 default:
645 return -ENODEV;
646 }
647
648 res1 = request_mem_region(start, size, "GIU");
649 if (res1 == NULL)
650 return -EBUSY;
651
652 base = ioremap(start, size);
653 if (base == NULL) {
654 release_resource(res1);
655 return -ENOMEM;
656 }
657
658 if (flags & GPIO_HAS_PULLUPDOWN_IO) {
659 res2 = request_mem_region(GIU_PULLUPDOWN_START, GIU_PULLUPDOWN_SIZE, "GIU");
660 if (res2 == NULL) {
661 iounmap(base);
662 release_resource(res1);
663 return -EBUSY;
664 }
665 }
666
667 retval = register_chrdev(major, "GIU", &gpio_fops);
668 if (retval < 0) {
669 iounmap(base);
670 release_resource(res1);
671 release_resource(res2);
672 return retval;
673 }
674
675 if (major == 0) {
676 major = retval;
677 printk(KERN_INFO "GIU: major number %d\n", major);
678 }
679
680 spin_lock_init(&giu_lock);
681 giu_base = base;
682 giu_resource1 = res1;
683 giu_resource2 = res2;
684 giu_flags = flags;
685 giu_nr_pins = nr_pins;
686
687 giu_write(GIUINTENL, 0);
688 giu_write(GIUINTENH, 0);
689
690 for (i = GIU_IRQ_BASE; i <= GIU_IRQ_LAST; i++) {
691 if (i < GIU_IRQ(GIUINT_HIGH_OFFSET))
692 irq_desc[i].handler = &giuint_low_irq_type;
693 else
694 irq_desc[i].handler = &giuint_high_irq_type;
695 }
696
697 return cascade_irq(GIUINT_IRQ, giu_get_irq);
698}
699
700static int giu_remove(struct device *dev)
701{
702 iounmap(giu_base);
703
704 release_resource(giu_resource1);
705 if (giu_flags & GPIO_HAS_PULLUPDOWN_IO)
706 release_resource(giu_resource2);
707
708 return 0;
709}
710
711static struct platform_device *giu_platform_device;
712
713static struct device_driver giu_device_driver = {
714 .name = "GIU",
715 .bus = &platform_bus_type,
716 .probe = giu_probe,
717 .remove = giu_remove,
718};
719
720static int __devinit vr41xx_giu_init(void)
721{
722 int retval;
723
724 giu_platform_device = platform_device_register_simple("GIU", -1, NULL, 0);
725 if (IS_ERR(giu_platform_device))
726 return PTR_ERR(giu_platform_device);
727
728 retval = driver_register(&giu_device_driver);
729 if (retval < 0)
730 platform_device_unregister(giu_platform_device);
731
732 return retval;
733}
734
735static void __devexit vr41xx_giu_exit(void)
736{
737 driver_unregister(&giu_device_driver);
738
739 platform_device_unregister(giu_platform_device);
740}
741
742module_init(vr41xx_giu_init);
743module_exit(vr41xx_giu_exit);
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
index 3ac0a535b4aa..0273f124a4f7 100644
--- a/drivers/ide/Kconfig
+++ b/drivers/ide/Kconfig
@@ -672,8 +672,8 @@ config BLK_DEV_SVWKS
672 chipsets. 672 chipsets.
673 673
674config BLK_DEV_SGIIOC4 674config BLK_DEV_SGIIOC4
675 tristate "Silicon Graphics IOC4 chipset support" 675 tristate "Silicon Graphics IOC4 chipset ATA/ATAPI support"
676 depends on IA64_SGI_SN2 || IA64_GENERIC 676 depends on (IA64_SGI_SN2 || IA64_GENERIC) && SGI_IOC4
677 help 677 help
678 This driver adds PIO & MultiMode DMA-2 support for the SGI IOC4 678 This driver adds PIO & MultiMode DMA-2 support for the SGI IOC4
679 chipset, which has one channel and can support two devices. 679 chipset, which has one channel and can support two devices.
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c
index 4651a22bf12e..af526b671c4e 100644
--- a/drivers/ide/pci/sgiioc4.c
+++ b/drivers/ide/pci/sgiioc4.c
@@ -34,7 +34,7 @@
34#include <linux/mm.h> 34#include <linux/mm.h>
35#include <linux/ioport.h> 35#include <linux/ioport.h>
36#include <linux/blkdev.h> 36#include <linux/blkdev.h>
37#include <linux/ioc4_common.h> 37#include <linux/ioc4.h>
38#include <asm/io.h> 38#include <asm/io.h>
39 39
40#include <linux/ide.h> 40#include <linux/ide.h>
@@ -715,14 +715,34 @@ static ide_pci_device_t sgiioc4_chipsets[] __devinitdata = {
715}; 715};
716 716
717int 717int
718ioc4_ide_attach_one(struct pci_dev *dev, const struct pci_device_id *id) 718ioc4_ide_attach_one(struct ioc4_driver_data *idd)
719{ 719{
720 return pci_init_sgiioc4(dev, &sgiioc4_chipsets[id->driver_data]); 720 return pci_init_sgiioc4(idd->idd_pdev,
721 &sgiioc4_chipsets[idd->idd_pci_id->driver_data]);
721} 722}
722 723
724static struct ioc4_submodule ioc4_ide_submodule = {
725 .is_name = "IOC4_ide",
726 .is_owner = THIS_MODULE,
727 .is_probe = ioc4_ide_attach_one,
728/* .is_remove = ioc4_ide_remove_one, */
729};
730
731static int __devinit
732ioc4_ide_init(void)
733{
734 return ioc4_register_submodule(&ioc4_ide_submodule);
735}
736
737static void __devexit
738ioc4_ide_exit(void)
739{
740 ioc4_unregister_submodule(&ioc4_ide_submodule);
741}
742
743module_init(ioc4_ide_init);
744module_exit(ioc4_ide_exit);
723 745
724MODULE_AUTHOR("Aniket Malatpure - Silicon Graphics Inc. (SGI)"); 746MODULE_AUTHOR("Aniket Malatpure - Silicon Graphics Inc. (SGI)");
725MODULE_DESCRIPTION("IDE PCI driver module for SGI IOC4 Base-IO Card"); 747MODULE_DESCRIPTION("IDE PCI driver module for SGI IOC4 Base-IO Card");
726MODULE_LICENSE("GPL"); 748MODULE_LICENSE("GPL");
727
728EXPORT_SYMBOL(ioc4_ide_attach_one);
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
index 9b8ff396e6f8..e152d0fa0cdd 100644
--- a/drivers/input/gameport/gameport.c
+++ b/drivers/input/gameport/gameport.c
@@ -134,7 +134,7 @@ static int gameport_measure_speed(struct gameport *gameport)
134 } 134 }
135 135
136 gameport_close(gameport); 136 gameport_close(gameport);
137 return (cpu_data[_smp_processor_id()].loops_per_jiffy * (unsigned long)HZ / (1000 / 50)) / (tx < 1 ? 1 : tx); 137 return (cpu_data[raw_smp_processor_id()].loops_per_jiffy * (unsigned long)HZ / (1000 / 50)) / (tx < 1 ? 1 : tx);
138 138
139#else 139#else
140 140
diff --git a/drivers/md/Makefile b/drivers/md/Makefile
index 90de9c146a5f..d3efedf6a6ad 100644
--- a/drivers/md/Makefile
+++ b/drivers/md/Makefile
@@ -7,6 +7,7 @@ dm-mod-objs := dm.o dm-table.o dm-target.o dm-linear.o dm-stripe.o \
7dm-multipath-objs := dm-hw-handler.o dm-path-selector.o dm-mpath.o 7dm-multipath-objs := dm-hw-handler.o dm-path-selector.o dm-mpath.o
8dm-snapshot-objs := dm-snap.o dm-exception-store.o 8dm-snapshot-objs := dm-snap.o dm-exception-store.o
9dm-mirror-objs := dm-log.o dm-raid1.o 9dm-mirror-objs := dm-log.o dm-raid1.o
10md-mod-objs := md.o bitmap.o
10raid6-objs := raid6main.o raid6algos.o raid6recov.o raid6tables.o \ 11raid6-objs := raid6main.o raid6algos.o raid6recov.o raid6tables.o \
11 raid6int1.o raid6int2.o raid6int4.o \ 12 raid6int1.o raid6int2.o raid6int4.o \
12 raid6int8.o raid6int16.o raid6int32.o \ 13 raid6int8.o raid6int16.o raid6int32.o \
@@ -28,7 +29,7 @@ obj-$(CONFIG_MD_RAID5) += raid5.o xor.o
28obj-$(CONFIG_MD_RAID6) += raid6.o xor.o 29obj-$(CONFIG_MD_RAID6) += raid6.o xor.o
29obj-$(CONFIG_MD_MULTIPATH) += multipath.o 30obj-$(CONFIG_MD_MULTIPATH) += multipath.o
30obj-$(CONFIG_MD_FAULTY) += faulty.o 31obj-$(CONFIG_MD_FAULTY) += faulty.o
31obj-$(CONFIG_BLK_DEV_MD) += md.o 32obj-$(CONFIG_BLK_DEV_MD) += md-mod.o
32obj-$(CONFIG_BLK_DEV_DM) += dm-mod.o 33obj-$(CONFIG_BLK_DEV_DM) += dm-mod.o
33obj-$(CONFIG_DM_CRYPT) += dm-crypt.o 34obj-$(CONFIG_DM_CRYPT) += dm-crypt.o
34obj-$(CONFIG_DM_MULTIPATH) += dm-multipath.o dm-round-robin.o 35obj-$(CONFIG_DM_MULTIPATH) += dm-multipath.o dm-round-robin.o
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
new file mode 100644
index 000000000000..95980ad6b27b
--- /dev/null
+++ b/drivers/md/bitmap.c
@@ -0,0 +1,1586 @@
1/*
2 * bitmap.c two-level bitmap (C) Peter T. Breuer (ptb@ot.uc3m.es) 2003
3 *
4 * bitmap_create - sets up the bitmap structure
5 * bitmap_destroy - destroys the bitmap structure
6 *
7 * additions, Copyright (C) 2003-2004, Paul Clements, SteelEye Technology, Inc.:
8 * - added disk storage for bitmap
9 * - changes to allow various bitmap chunk sizes
10 * - added bitmap daemon (to asynchronously clear bitmap bits from disk)
11 */
12
13/*
14 * Still to do:
15 *
16 * flush after percent set rather than just time based. (maybe both).
17 * wait if count gets too high, wake when it drops to half.
18 * allow bitmap to be mirrored with superblock (before or after...)
19 * allow hot-add to re-instate a current device.
20 * allow hot-add of bitmap after quiessing device
21 */
22
23#include <linux/module.h>
24#include <linux/version.h>
25#include <linux/errno.h>
26#include <linux/slab.h>
27#include <linux/init.h>
28#include <linux/config.h>
29#include <linux/timer.h>
30#include <linux/sched.h>
31#include <linux/list.h>
32#include <linux/file.h>
33#include <linux/mount.h>
34#include <linux/buffer_head.h>
35#include <linux/raid/md.h>
36#include <linux/raid/bitmap.h>
37
38/* debug macros */
39
40#define DEBUG 0
41
42#if DEBUG
43/* these are for debugging purposes only! */
44
45/* define one and only one of these */
46#define INJECT_FAULTS_1 0 /* cause bitmap_alloc_page to fail always */
47#define INJECT_FAULTS_2 0 /* cause bitmap file to be kicked when first bit set*/
48#define INJECT_FAULTS_3 0 /* treat bitmap file as kicked at init time */
49#define INJECT_FAULTS_4 0 /* undef */
50#define INJECT_FAULTS_5 0 /* undef */
51#define INJECT_FAULTS_6 0
52
53/* if these are defined, the driver will fail! debug only */
54#define INJECT_FATAL_FAULT_1 0 /* fail kmalloc, causing bitmap_create to fail */
55#define INJECT_FATAL_FAULT_2 0 /* undef */
56#define INJECT_FATAL_FAULT_3 0 /* undef */
57#endif
58
59//#define DPRINTK PRINTK /* set this NULL to avoid verbose debug output */
60#define DPRINTK(x...) do { } while(0)
61
62#ifndef PRINTK
63# if DEBUG > 0
64# define PRINTK(x...) printk(KERN_DEBUG x)
65# else
66# define PRINTK(x...)
67# endif
68#endif
69
70static inline char * bmname(struct bitmap *bitmap)
71{
72 return bitmap->mddev ? mdname(bitmap->mddev) : "mdX";
73}
74
75
76/*
77 * test if the bitmap is active
78 */
79int bitmap_active(struct bitmap *bitmap)
80{
81 unsigned long flags;
82 int res = 0;
83
84 if (!bitmap)
85 return res;
86 spin_lock_irqsave(&bitmap->lock, flags);
87 res = bitmap->flags & BITMAP_ACTIVE;
88 spin_unlock_irqrestore(&bitmap->lock, flags);
89 return res;
90}
91
92#define WRITE_POOL_SIZE 256
93/* mempool for queueing pending writes on the bitmap file */
94static void *write_pool_alloc(unsigned int gfp_flags, void *data)
95{
96 return kmalloc(sizeof(struct page_list), gfp_flags);
97}
98
99static void write_pool_free(void *ptr, void *data)
100{
101 kfree(ptr);
102}
103
104/*
105 * just a placeholder - calls kmalloc for bitmap pages
106 */
107static unsigned char *bitmap_alloc_page(struct bitmap *bitmap)
108{
109 unsigned char *page;
110
111#if INJECT_FAULTS_1
112 page = NULL;
113#else
114 page = kmalloc(PAGE_SIZE, GFP_NOIO);
115#endif
116 if (!page)
117 printk("%s: bitmap_alloc_page FAILED\n", bmname(bitmap));
118 else
119 PRINTK("%s: bitmap_alloc_page: allocated page at %p\n",
120 bmname(bitmap), page);
121 return page;
122}
123
124/*
125 * for now just a placeholder -- just calls kfree for bitmap pages
126 */
127static void bitmap_free_page(struct bitmap *bitmap, unsigned char *page)
128{
129 PRINTK("%s: bitmap_free_page: free page %p\n", bmname(bitmap), page);
130 kfree(page);
131}
132
133/*
134 * check a page and, if necessary, allocate it (or hijack it if the alloc fails)
135 *
136 * 1) check to see if this page is allocated, if it's not then try to alloc
137 * 2) if the alloc fails, set the page's hijacked flag so we'll use the
138 * page pointer directly as a counter
139 *
140 * if we find our page, we increment the page's refcount so that it stays
141 * allocated while we're using it
142 */
143static int bitmap_checkpage(struct bitmap *bitmap, unsigned long page, int create)
144{
145 unsigned char *mappage;
146
147 if (page >= bitmap->pages) {
148 printk(KERN_ALERT
149 "%s: invalid bitmap page request: %lu (> %lu)\n",
150 bmname(bitmap), page, bitmap->pages-1);
151 return -EINVAL;
152 }
153
154
155 if (bitmap->bp[page].hijacked) /* it's hijacked, don't try to alloc */
156 return 0;
157
158 if (bitmap->bp[page].map) /* page is already allocated, just return */
159 return 0;
160
161 if (!create)
162 return -ENOENT;
163
164 spin_unlock_irq(&bitmap->lock);
165
166 /* this page has not been allocated yet */
167
168 if ((mappage = bitmap_alloc_page(bitmap)) == NULL) {
169 PRINTK("%s: bitmap map page allocation failed, hijacking\n",
170 bmname(bitmap));
171 /* failed - set the hijacked flag so that we can use the
172 * pointer as a counter */
173 spin_lock_irq(&bitmap->lock);
174 if (!bitmap->bp[page].map)
175 bitmap->bp[page].hijacked = 1;
176 goto out;
177 }
178
179 /* got a page */
180
181 spin_lock_irq(&bitmap->lock);
182
183 /* recheck the page */
184
185 if (bitmap->bp[page].map || bitmap->bp[page].hijacked) {
186 /* somebody beat us to getting the page */
187 bitmap_free_page(bitmap, mappage);
188 return 0;
189 }
190
191 /* no page was in place and we have one, so install it */
192
193 memset(mappage, 0, PAGE_SIZE);
194 bitmap->bp[page].map = mappage;
195 bitmap->missing_pages--;
196out:
197 return 0;
198}
199
200
201/* if page is completely empty, put it back on the free list, or dealloc it */
202/* if page was hijacked, unmark the flag so it might get alloced next time */
203/* Note: lock should be held when calling this */
204static inline void bitmap_checkfree(struct bitmap *bitmap, unsigned long page)
205{
206 char *ptr;
207
208 if (bitmap->bp[page].count) /* page is still busy */
209 return;
210
211 /* page is no longer in use, it can be released */
212
213 if (bitmap->bp[page].hijacked) { /* page was hijacked, undo this now */
214 bitmap->bp[page].hijacked = 0;
215 bitmap->bp[page].map = NULL;
216 return;
217 }
218
219 /* normal case, free the page */
220
221#if 0
222/* actually ... let's not. We will probably need the page again exactly when
223 * memory is tight and we are flusing to disk
224 */
225 return;
226#else
227 ptr = bitmap->bp[page].map;
228 bitmap->bp[page].map = NULL;
229 bitmap->missing_pages++;
230 bitmap_free_page(bitmap, ptr);
231 return;
232#endif
233}
234
235
236/*
237 * bitmap file handling - read and write the bitmap file and its superblock
238 */
239
240/* copy the pathname of a file to a buffer */
241char *file_path(struct file *file, char *buf, int count)
242{
243 struct dentry *d;
244 struct vfsmount *v;
245
246 if (!buf)
247 return NULL;
248
249 d = file->f_dentry;
250 v = file->f_vfsmnt;
251
252 buf = d_path(d, v, buf, count);
253
254 return IS_ERR(buf) ? NULL : buf;
255}
256
257/*
258 * basic page I/O operations
259 */
260
261/* IO operations when bitmap is stored near all superblocks */
262static struct page *read_sb_page(mddev_t *mddev, long offset, unsigned long index)
263{
264 /* choose a good rdev and read the page from there */
265
266 mdk_rdev_t *rdev;
267 struct list_head *tmp;
268 struct page *page = alloc_page(GFP_KERNEL);
269 sector_t target;
270
271 if (!page)
272 return ERR_PTR(-ENOMEM);
273 do {
274 ITERATE_RDEV(mddev, rdev, tmp)
275 if (rdev->in_sync && !rdev->faulty)
276 goto found;
277 return ERR_PTR(-EIO);
278
279 found:
280 target = (rdev->sb_offset << 1) + offset + index * (PAGE_SIZE/512);
281
282 } while (!sync_page_io(rdev->bdev, target, PAGE_SIZE, page, READ));
283
284 page->index = index;
285 return page;
286}
287
288static int write_sb_page(mddev_t *mddev, long offset, struct page *page, int wait)
289{
290 mdk_rdev_t *rdev;
291 struct list_head *tmp;
292
293 ITERATE_RDEV(mddev, rdev, tmp)
294 if (rdev->in_sync && !rdev->faulty)
295 md_super_write(mddev, rdev,
296 (rdev->sb_offset<<1) + offset
297 + page->index * (PAGE_SIZE/512),
298 PAGE_SIZE,
299 page);
300
301 if (wait)
302 wait_event(mddev->sb_wait, atomic_read(&mddev->pending_writes)==0);
303 return 0;
304}
305
306/*
307 * write out a page to a file
308 */
309static int write_page(struct bitmap *bitmap, struct page *page, int wait)
310{
311 int ret = -ENOMEM;
312
313 if (bitmap->file == NULL)
314 return write_sb_page(bitmap->mddev, bitmap->offset, page, wait);
315
316 if (wait)
317 lock_page(page);
318 else {
319 if (TestSetPageLocked(page))
320 return -EAGAIN; /* already locked */
321 if (PageWriteback(page)) {
322 unlock_page(page);
323 return -EAGAIN;
324 }
325 }
326
327 ret = page->mapping->a_ops->prepare_write(NULL, page, 0, PAGE_SIZE);
328 if (!ret)
329 ret = page->mapping->a_ops->commit_write(NULL, page, 0,
330 PAGE_SIZE);
331 if (ret) {
332 unlock_page(page);
333 return ret;
334 }
335
336 set_page_dirty(page); /* force it to be written out */
337
338 if (!wait) {
339 /* add to list to be waited for by daemon */
340 struct page_list *item = mempool_alloc(bitmap->write_pool, GFP_NOIO);
341 item->page = page;
342 page_cache_get(page);
343 spin_lock(&bitmap->write_lock);
344 list_add(&item->list, &bitmap->complete_pages);
345 spin_unlock(&bitmap->write_lock);
346 md_wakeup_thread(bitmap->writeback_daemon);
347 }
348 return write_one_page(page, wait);
349}
350
351/* read a page from a file, pinning it into cache, and return bytes_read */
352static struct page *read_page(struct file *file, unsigned long index,
353 unsigned long *bytes_read)
354{
355 struct inode *inode = file->f_mapping->host;
356 struct page *page = NULL;
357 loff_t isize = i_size_read(inode);
358 unsigned long end_index = isize >> PAGE_CACHE_SHIFT;
359
360 PRINTK("read bitmap file (%dB @ %Lu)\n", (int)PAGE_CACHE_SIZE,
361 (unsigned long long)index << PAGE_CACHE_SHIFT);
362
363 page = read_cache_page(inode->i_mapping, index,
364 (filler_t *)inode->i_mapping->a_ops->readpage, file);
365 if (IS_ERR(page))
366 goto out;
367 wait_on_page_locked(page);
368 if (!PageUptodate(page) || PageError(page)) {
369 page_cache_release(page);
370 page = ERR_PTR(-EIO);
371 goto out;
372 }
373
374 if (index > end_index) /* we have read beyond EOF */
375 *bytes_read = 0;
376 else if (index == end_index) /* possible short read */
377 *bytes_read = isize & ~PAGE_CACHE_MASK;
378 else
379 *bytes_read = PAGE_CACHE_SIZE; /* got a full page */
380out:
381 if (IS_ERR(page))
382 printk(KERN_ALERT "md: bitmap read error: (%dB @ %Lu): %ld\n",
383 (int)PAGE_CACHE_SIZE,
384 (unsigned long long)index << PAGE_CACHE_SHIFT,
385 PTR_ERR(page));
386 return page;
387}
388
389/*
390 * bitmap file superblock operations
391 */
392
393/* update the event counter and sync the superblock to disk */
394int bitmap_update_sb(struct bitmap *bitmap)
395{
396 bitmap_super_t *sb;
397 unsigned long flags;
398
399 if (!bitmap || !bitmap->mddev) /* no bitmap for this array */
400 return 0;
401 spin_lock_irqsave(&bitmap->lock, flags);
402 if (!bitmap->sb_page) { /* no superblock */
403 spin_unlock_irqrestore(&bitmap->lock, flags);
404 return 0;
405 }
406 spin_unlock_irqrestore(&bitmap->lock, flags);
407 sb = (bitmap_super_t *)kmap(bitmap->sb_page);
408 sb->events = cpu_to_le64(bitmap->mddev->events);
409 if (!bitmap->mddev->degraded)
410 sb->events_cleared = cpu_to_le64(bitmap->mddev->events);
411 kunmap(bitmap->sb_page);
412 return write_page(bitmap, bitmap->sb_page, 1);
413}
414
415/* print out the bitmap file superblock */
416void bitmap_print_sb(struct bitmap *bitmap)
417{
418 bitmap_super_t *sb;
419
420 if (!bitmap || !bitmap->sb_page)
421 return;
422 sb = (bitmap_super_t *)kmap(bitmap->sb_page);
423 printk(KERN_DEBUG "%s: bitmap file superblock:\n", bmname(bitmap));
424 printk(KERN_DEBUG " magic: %08x\n", le32_to_cpu(sb->magic));
425 printk(KERN_DEBUG " version: %d\n", le32_to_cpu(sb->version));
426 printk(KERN_DEBUG " uuid: %08x.%08x.%08x.%08x\n",
427 *(__u32 *)(sb->uuid+0),
428 *(__u32 *)(sb->uuid+4),
429 *(__u32 *)(sb->uuid+8),
430 *(__u32 *)(sb->uuid+12));
431 printk(KERN_DEBUG " events: %llu\n",
432 (unsigned long long) le64_to_cpu(sb->events));
433 printk(KERN_DEBUG "events cleared: %llu\n",
434 (unsigned long long) le64_to_cpu(sb->events_cleared));
435 printk(KERN_DEBUG " state: %08x\n", le32_to_cpu(sb->state));
436 printk(KERN_DEBUG " chunksize: %d B\n", le32_to_cpu(sb->chunksize));
437 printk(KERN_DEBUG " daemon sleep: %ds\n", le32_to_cpu(sb->daemon_sleep));
438 printk(KERN_DEBUG " sync size: %llu KB\n",
439 (unsigned long long)le64_to_cpu(sb->sync_size)/2);
440 kunmap(bitmap->sb_page);
441}
442
443/* read the superblock from the bitmap file and initialize some bitmap fields */
444static int bitmap_read_sb(struct bitmap *bitmap)
445{
446 char *reason = NULL;
447 bitmap_super_t *sb;
448 unsigned long chunksize, daemon_sleep;
449 unsigned long bytes_read;
450 unsigned long long events;
451 int err = -EINVAL;
452
453 /* page 0 is the superblock, read it... */
454 if (bitmap->file)
455 bitmap->sb_page = read_page(bitmap->file, 0, &bytes_read);
456 else {
457 bitmap->sb_page = read_sb_page(bitmap->mddev, bitmap->offset, 0);
458 bytes_read = PAGE_SIZE;
459 }
460 if (IS_ERR(bitmap->sb_page)) {
461 err = PTR_ERR(bitmap->sb_page);
462 bitmap->sb_page = NULL;
463 return err;
464 }
465
466 sb = (bitmap_super_t *)kmap(bitmap->sb_page);
467
468 if (bytes_read < sizeof(*sb)) { /* short read */
469 printk(KERN_INFO "%s: bitmap file superblock truncated\n",
470 bmname(bitmap));
471 err = -ENOSPC;
472 goto out;
473 }
474
475 chunksize = le32_to_cpu(sb->chunksize);
476 daemon_sleep = le32_to_cpu(sb->daemon_sleep);
477
478 /* verify that the bitmap-specific fields are valid */
479 if (sb->magic != cpu_to_le32(BITMAP_MAGIC))
480 reason = "bad magic";
481 else if (sb->version != cpu_to_le32(BITMAP_MAJOR))
482 reason = "unrecognized superblock version";
483 else if (chunksize < 512 || chunksize > (1024 * 1024 * 4))
484 reason = "bitmap chunksize out of range (512B - 4MB)";
485 else if ((1 << ffz(~chunksize)) != chunksize)
486 reason = "bitmap chunksize not a power of 2";
487 else if (daemon_sleep < 1 || daemon_sleep > 15)
488 reason = "daemon sleep period out of range";
489 if (reason) {
490 printk(KERN_INFO "%s: invalid bitmap file superblock: %s\n",
491 bmname(bitmap), reason);
492 goto out;
493 }
494
495 /* keep the array size field of the bitmap superblock up to date */
496 sb->sync_size = cpu_to_le64(bitmap->mddev->resync_max_sectors);
497
498 if (!bitmap->mddev->persistent)
499 goto success;
500
501 /*
502 * if we have a persistent array superblock, compare the
503 * bitmap's UUID and event counter to the mddev's
504 */
505 if (memcmp(sb->uuid, bitmap->mddev->uuid, 16)) {
506 printk(KERN_INFO "%s: bitmap superblock UUID mismatch\n",
507 bmname(bitmap));
508 goto out;
509 }
510 events = le64_to_cpu(sb->events);
511 if (events < bitmap->mddev->events) {
512 printk(KERN_INFO "%s: bitmap file is out of date (%llu < %llu) "
513 "-- forcing full recovery\n", bmname(bitmap), events,
514 (unsigned long long) bitmap->mddev->events);
515 sb->state |= BITMAP_STALE;
516 }
517success:
518 /* assign fields using values from superblock */
519 bitmap->chunksize = chunksize;
520 bitmap->daemon_sleep = daemon_sleep;
521 bitmap->flags |= sb->state;
522 bitmap->events_cleared = le64_to_cpu(sb->events_cleared);
523 err = 0;
524out:
525 kunmap(bitmap->sb_page);
526 if (err)
527 bitmap_print_sb(bitmap);
528 return err;
529}
530
531enum bitmap_mask_op {
532 MASK_SET,
533 MASK_UNSET
534};
535
536/* record the state of the bitmap in the superblock */
537static void bitmap_mask_state(struct bitmap *bitmap, enum bitmap_state bits,
538 enum bitmap_mask_op op)
539{
540 bitmap_super_t *sb;
541 unsigned long flags;
542
543 spin_lock_irqsave(&bitmap->lock, flags);
544 if (!bitmap || !bitmap->sb_page) { /* can't set the state */
545 spin_unlock_irqrestore(&bitmap->lock, flags);
546 return;
547 }
548 page_cache_get(bitmap->sb_page);
549 spin_unlock_irqrestore(&bitmap->lock, flags);
550 sb = (bitmap_super_t *)kmap(bitmap->sb_page);
551 switch (op) {
552 case MASK_SET: sb->state |= bits;
553 break;
554 case MASK_UNSET: sb->state &= ~bits;
555 break;
556 default: BUG();
557 }
558 kunmap(bitmap->sb_page);
559 page_cache_release(bitmap->sb_page);
560}
561
562/*
563 * general bitmap file operations
564 */
565
566/* calculate the index of the page that contains this bit */
567static inline unsigned long file_page_index(unsigned long chunk)
568{
569 return CHUNK_BIT_OFFSET(chunk) >> PAGE_BIT_SHIFT;
570}
571
572/* calculate the (bit) offset of this bit within a page */
573static inline unsigned long file_page_offset(unsigned long chunk)
574{
575 return CHUNK_BIT_OFFSET(chunk) & (PAGE_BITS - 1);
576}
577
578/*
579 * return a pointer to the page in the filemap that contains the given bit
580 *
581 * this lookup is complicated by the fact that the bitmap sb might be exactly
582 * 1 page (e.g., x86) or less than 1 page -- so the bitmap might start on page
583 * 0 or page 1
584 */
585static inline struct page *filemap_get_page(struct bitmap *bitmap,
586 unsigned long chunk)
587{
588 return bitmap->filemap[file_page_index(chunk) - file_page_index(0)];
589}
590
591
592static void bitmap_file_unmap(struct bitmap *bitmap)
593{
594 struct page **map, *sb_page;
595 unsigned long *attr;
596 int pages;
597 unsigned long flags;
598
599 spin_lock_irqsave(&bitmap->lock, flags);
600 map = bitmap->filemap;
601 bitmap->filemap = NULL;
602 attr = bitmap->filemap_attr;
603 bitmap->filemap_attr = NULL;
604 pages = bitmap->file_pages;
605 bitmap->file_pages = 0;
606 sb_page = bitmap->sb_page;
607 bitmap->sb_page = NULL;
608 spin_unlock_irqrestore(&bitmap->lock, flags);
609
610 while (pages--)
611 if (map[pages]->index != 0) /* 0 is sb_page, release it below */
612 page_cache_release(map[pages]);
613 kfree(map);
614 kfree(attr);
615
616 if (sb_page)
617 page_cache_release(sb_page);
618}
619
620static void bitmap_stop_daemons(struct bitmap *bitmap);
621
622/* dequeue the next item in a page list -- don't call from irq context */
623static struct page_list *dequeue_page(struct bitmap *bitmap)
624{
625 struct page_list *item = NULL;
626 struct list_head *head = &bitmap->complete_pages;
627
628 spin_lock(&bitmap->write_lock);
629 if (list_empty(head))
630 goto out;
631 item = list_entry(head->prev, struct page_list, list);
632 list_del(head->prev);
633out:
634 spin_unlock(&bitmap->write_lock);
635 return item;
636}
637
638static void drain_write_queues(struct bitmap *bitmap)
639{
640 struct page_list *item;
641
642 while ((item = dequeue_page(bitmap))) {
643 /* don't bother to wait */
644 page_cache_release(item->page);
645 mempool_free(item, bitmap->write_pool);
646 }
647
648 wake_up(&bitmap->write_wait);
649}
650
651static void bitmap_file_put(struct bitmap *bitmap)
652{
653 struct file *file;
654 struct inode *inode;
655 unsigned long flags;
656
657 spin_lock_irqsave(&bitmap->lock, flags);
658 file = bitmap->file;
659 bitmap->file = NULL;
660 spin_unlock_irqrestore(&bitmap->lock, flags);
661
662 bitmap_stop_daemons(bitmap);
663
664 drain_write_queues(bitmap);
665
666 bitmap_file_unmap(bitmap);
667
668 if (file) {
669 inode = file->f_mapping->host;
670 spin_lock(&inode->i_lock);
671 atomic_set(&inode->i_writecount, 1); /* allow writes again */
672 spin_unlock(&inode->i_lock);
673 fput(file);
674 }
675}
676
677
678/*
679 * bitmap_file_kick - if an error occurs while manipulating the bitmap file
680 * then it is no longer reliable, so we stop using it and we mark the file
681 * as failed in the superblock
682 */
683static void bitmap_file_kick(struct bitmap *bitmap)
684{
685 char *path, *ptr = NULL;
686
687 bitmap_mask_state(bitmap, BITMAP_STALE, MASK_SET);
688 bitmap_update_sb(bitmap);
689
690 if (bitmap->file) {
691 path = kmalloc(PAGE_SIZE, GFP_KERNEL);
692 if (path)
693 ptr = file_path(bitmap->file, path, PAGE_SIZE);
694
695 printk(KERN_ALERT "%s: kicking failed bitmap file %s from array!\n",
696 bmname(bitmap), ptr ? ptr : "");
697
698 kfree(path);
699 }
700
701 bitmap_file_put(bitmap);
702
703 return;
704}
705
706enum bitmap_page_attr {
707 BITMAP_PAGE_DIRTY = 1, // there are set bits that need to be synced
708 BITMAP_PAGE_CLEAN = 2, // there are bits that might need to be cleared
709 BITMAP_PAGE_NEEDWRITE=4, // there are cleared bits that need to be synced
710};
711
712static inline void set_page_attr(struct bitmap *bitmap, struct page *page,
713 enum bitmap_page_attr attr)
714{
715 bitmap->filemap_attr[page->index] |= attr;
716}
717
718static inline void clear_page_attr(struct bitmap *bitmap, struct page *page,
719 enum bitmap_page_attr attr)
720{
721 bitmap->filemap_attr[page->index] &= ~attr;
722}
723
724static inline unsigned long get_page_attr(struct bitmap *bitmap, struct page *page)
725{
726 return bitmap->filemap_attr[page->index];
727}
728
729/*
730 * bitmap_file_set_bit -- called before performing a write to the md device
731 * to set (and eventually sync) a particular bit in the bitmap file
732 *
733 * we set the bit immediately, then we record the page number so that
734 * when an unplug occurs, we can flush the dirty pages out to disk
735 */
736static void bitmap_file_set_bit(struct bitmap *bitmap, sector_t block)
737{
738 unsigned long bit;
739 struct page *page;
740 void *kaddr;
741 unsigned long chunk = block >> CHUNK_BLOCK_SHIFT(bitmap);
742
743 if (!bitmap->filemap) {
744 return;
745 }
746
747 page = filemap_get_page(bitmap, chunk);
748 bit = file_page_offset(chunk);
749
750
751 /* make sure the page stays cached until it gets written out */
752 if (! (get_page_attr(bitmap, page) & BITMAP_PAGE_DIRTY))
753 page_cache_get(page);
754
755 /* set the bit */
756 kaddr = kmap_atomic(page, KM_USER0);
757 set_bit(bit, kaddr);
758 kunmap_atomic(kaddr, KM_USER0);
759 PRINTK("set file bit %lu page %lu\n", bit, page->index);
760
761 /* record page number so it gets flushed to disk when unplug occurs */
762 set_page_attr(bitmap, page, BITMAP_PAGE_DIRTY);
763
764}
765
766/* this gets called when the md device is ready to unplug its underlying
767 * (slave) device queues -- before we let any writes go down, we need to
768 * sync the dirty pages of the bitmap file to disk */
769int bitmap_unplug(struct bitmap *bitmap)
770{
771 unsigned long i, attr, flags;
772 struct page *page;
773 int wait = 0;
774 int err;
775
776 if (!bitmap)
777 return 0;
778
779 /* look at each page to see if there are any set bits that need to be
780 * flushed out to disk */
781 for (i = 0; i < bitmap->file_pages; i++) {
782 spin_lock_irqsave(&bitmap->lock, flags);
783 if (!bitmap->filemap) {
784 spin_unlock_irqrestore(&bitmap->lock, flags);
785 return 0;
786 }
787 page = bitmap->filemap[i];
788 attr = get_page_attr(bitmap, page);
789 clear_page_attr(bitmap, page, BITMAP_PAGE_DIRTY);
790 clear_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE);
791 if ((attr & BITMAP_PAGE_DIRTY))
792 wait = 1;
793 spin_unlock_irqrestore(&bitmap->lock, flags);
794
795 if (attr & (BITMAP_PAGE_DIRTY | BITMAP_PAGE_NEEDWRITE)) {
796 err = write_page(bitmap, page, 0);
797 if (err == -EAGAIN) {
798 if (attr & BITMAP_PAGE_DIRTY)
799 err = write_page(bitmap, page, 1);
800 else
801 err = 0;
802 }
803 if (err)
804 return 1;
805 }
806 }
807 if (wait) { /* if any writes were performed, we need to wait on them */
808 if (bitmap->file) {
809 spin_lock_irq(&bitmap->write_lock);
810 wait_event_lock_irq(bitmap->write_wait,
811 list_empty(&bitmap->complete_pages), bitmap->write_lock,
812 wake_up_process(bitmap->writeback_daemon->tsk));
813 spin_unlock_irq(&bitmap->write_lock);
814 } else
815 wait_event(bitmap->mddev->sb_wait,
816 atomic_read(&bitmap->mddev->pending_writes)==0);
817 }
818 return 0;
819}
820
821static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset,
822 unsigned long sectors, int in_sync);
823/* * bitmap_init_from_disk -- called at bitmap_create time to initialize
824 * the in-memory bitmap from the on-disk bitmap -- also, sets up the
825 * memory mapping of the bitmap file
826 * Special cases:
827 * if there's no bitmap file, or if the bitmap file had been
828 * previously kicked from the array, we mark all the bits as
829 * 1's in order to cause a full resync.
830 */
831static int bitmap_init_from_disk(struct bitmap *bitmap, int in_sync)
832{
833 unsigned long i, chunks, index, oldindex, bit;
834 struct page *page = NULL, *oldpage = NULL;
835 unsigned long num_pages, bit_cnt = 0;
836 struct file *file;
837 unsigned long bytes, offset, dummy;
838 int outofdate;
839 int ret = -ENOSPC;
840
841 chunks = bitmap->chunks;
842 file = bitmap->file;
843
844 BUG_ON(!file && !bitmap->offset);
845
846#if INJECT_FAULTS_3
847 outofdate = 1;
848#else
849 outofdate = bitmap->flags & BITMAP_STALE;
850#endif
851 if (outofdate)
852 printk(KERN_INFO "%s: bitmap file is out of date, doing full "
853 "recovery\n", bmname(bitmap));
854
855 bytes = (chunks + 7) / 8;
856
857 num_pages = (bytes + sizeof(bitmap_super_t) + PAGE_SIZE - 1) / PAGE_SIZE;
858
859 if (file && i_size_read(file->f_mapping->host) < bytes + sizeof(bitmap_super_t)) {
860 printk(KERN_INFO "%s: bitmap file too short %lu < %lu\n",
861 bmname(bitmap),
862 (unsigned long) i_size_read(file->f_mapping->host),
863 bytes + sizeof(bitmap_super_t));
864 goto out;
865 }
866
867 ret = -ENOMEM;
868
869 bitmap->filemap = kmalloc(sizeof(struct page *) * num_pages, GFP_KERNEL);
870 if (!bitmap->filemap)
871 goto out;
872
873 bitmap->filemap_attr = kmalloc(sizeof(long) * num_pages, GFP_KERNEL);
874 if (!bitmap->filemap_attr)
875 goto out;
876
877 memset(bitmap->filemap_attr, 0, sizeof(long) * num_pages);
878
879 oldindex = ~0L;
880
881 for (i = 0; i < chunks; i++) {
882 index = file_page_index(i);
883 bit = file_page_offset(i);
884 if (index != oldindex) { /* this is a new page, read it in */
885 /* unmap the old page, we're done with it */
886 if (oldpage != NULL)
887 kunmap(oldpage);
888 if (index == 0) {
889 /*
890 * if we're here then the superblock page
891 * contains some bits (PAGE_SIZE != sizeof sb)
892 * we've already read it in, so just use it
893 */
894 page = bitmap->sb_page;
895 offset = sizeof(bitmap_super_t);
896 } else if (file) {
897 page = read_page(file, index, &dummy);
898 offset = 0;
899 } else {
900 page = read_sb_page(bitmap->mddev, bitmap->offset, index);
901 offset = 0;
902 }
903 if (IS_ERR(page)) { /* read error */
904 ret = PTR_ERR(page);
905 goto out;
906 }
907
908 oldindex = index;
909 oldpage = page;
910 kmap(page);
911
912 if (outofdate) {
913 /*
914 * if bitmap is out of date, dirty the
915 * whole page and write it out
916 */
917 memset(page_address(page) + offset, 0xff,
918 PAGE_SIZE - offset);
919 ret = write_page(bitmap, page, 1);
920 if (ret) {
921 kunmap(page);
922 /* release, page not in filemap yet */
923 page_cache_release(page);
924 goto out;
925 }
926 }
927
928 bitmap->filemap[bitmap->file_pages++] = page;
929 }
930 if (test_bit(bit, page_address(page))) {
931 /* if the disk bit is set, set the memory bit */
932 bitmap_set_memory_bits(bitmap,
933 i << CHUNK_BLOCK_SHIFT(bitmap), 1, in_sync);
934 bit_cnt++;
935 }
936 }
937
938 /* everything went OK */
939 ret = 0;
940 bitmap_mask_state(bitmap, BITMAP_STALE, MASK_UNSET);
941
942 if (page) /* unmap the last page */
943 kunmap(page);
944
945 if (bit_cnt) { /* Kick recovery if any bits were set */
946 set_bit(MD_RECOVERY_NEEDED, &bitmap->mddev->recovery);
947 md_wakeup_thread(bitmap->mddev->thread);
948 }
949
950out:
951 printk(KERN_INFO "%s: bitmap initialized from disk: "
952 "read %lu/%lu pages, set %lu bits, status: %d\n",
953 bmname(bitmap), bitmap->file_pages, num_pages, bit_cnt, ret);
954
955 return ret;
956}
957
958void bitmap_write_all(struct bitmap *bitmap)
959{
960 /* We don't actually write all bitmap blocks here,
961 * just flag them as needing to be written
962 */
963
964 unsigned long chunks = bitmap->chunks;
965 unsigned long bytes = (chunks+7)/8 + sizeof(bitmap_super_t);
966 unsigned long num_pages = (bytes + PAGE_SIZE-1) / PAGE_SIZE;
967 while (num_pages--)
968 bitmap->filemap_attr[num_pages] |= BITMAP_PAGE_NEEDWRITE;
969}
970
971
972static void bitmap_count_page(struct bitmap *bitmap, sector_t offset, int inc)
973{
974 sector_t chunk = offset >> CHUNK_BLOCK_SHIFT(bitmap);
975 unsigned long page = chunk >> PAGE_COUNTER_SHIFT;
976 bitmap->bp[page].count += inc;
977/*
978 if (page == 0) printk("count page 0, offset %llu: %d gives %d\n",
979 (unsigned long long)offset, inc, bitmap->bp[page].count);
980*/
981 bitmap_checkfree(bitmap, page);
982}
983static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap,
984 sector_t offset, int *blocks,
985 int create);
986
987/*
988 * bitmap daemon -- periodically wakes up to clean bits and flush pages
989 * out to disk
990 */
991
992int bitmap_daemon_work(struct bitmap *bitmap)
993{
994 unsigned long j;
995 unsigned long flags;
996 struct page *page = NULL, *lastpage = NULL;
997 int err = 0;
998 int blocks;
999 int attr;
1000
1001 if (bitmap == NULL)
1002 return 0;
1003 if (time_before(jiffies, bitmap->daemon_lastrun + bitmap->daemon_sleep*HZ))
1004 return 0;
1005 bitmap->daemon_lastrun = jiffies;
1006
1007 for (j = 0; j < bitmap->chunks; j++) {
1008 bitmap_counter_t *bmc;
1009 spin_lock_irqsave(&bitmap->lock, flags);
1010 if (!bitmap->filemap) {
1011 /* error or shutdown */
1012 spin_unlock_irqrestore(&bitmap->lock, flags);
1013 break;
1014 }
1015
1016 page = filemap_get_page(bitmap, j);
1017
1018 if (page != lastpage) {
1019 /* skip this page unless it's marked as needing cleaning */
1020 if (!((attr=get_page_attr(bitmap, page)) & BITMAP_PAGE_CLEAN)) {
1021 if (attr & BITMAP_PAGE_NEEDWRITE) {
1022 page_cache_get(page);
1023 clear_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE);
1024 }
1025 spin_unlock_irqrestore(&bitmap->lock, flags);
1026 if (attr & BITMAP_PAGE_NEEDWRITE) {
1027 switch (write_page(bitmap, page, 0)) {
1028 case -EAGAIN:
1029 set_page_attr(bitmap, page, BITMAP_PAGE_NEEDWRITE);
1030 break;
1031 case 0:
1032 break;
1033 default:
1034 bitmap_file_kick(bitmap);
1035 }
1036 page_cache_release(page);
1037 }
1038 continue;
1039 }
1040
1041 /* grab the new page, sync and release the old */
1042 page_cache_get(page);
1043 if (lastpage != NULL) {
1044 if (get_page_attr(bitmap, lastpage) & BITMAP_PAGE_NEEDWRITE) {
1045 clear_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE);
1046 spin_unlock_irqrestore(&bitmap->lock, flags);
1047 err = write_page(bitmap, lastpage, 0);
1048 if (err == -EAGAIN) {
1049 err = 0;
1050 set_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE);
1051 }
1052 } else {
1053 set_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE);
1054 spin_unlock_irqrestore(&bitmap->lock, flags);
1055 }
1056 kunmap(lastpage);
1057 page_cache_release(lastpage);
1058 if (err)
1059 bitmap_file_kick(bitmap);
1060 } else
1061 spin_unlock_irqrestore(&bitmap->lock, flags);
1062 lastpage = page;
1063 kmap(page);
1064/*
1065 printk("bitmap clean at page %lu\n", j);
1066*/
1067 spin_lock_irqsave(&bitmap->lock, flags);
1068 clear_page_attr(bitmap, page, BITMAP_PAGE_CLEAN);
1069 }
1070 bmc = bitmap_get_counter(bitmap, j << CHUNK_BLOCK_SHIFT(bitmap),
1071 &blocks, 0);
1072 if (bmc) {
1073/*
1074 if (j < 100) printk("bitmap: j=%lu, *bmc = 0x%x\n", j, *bmc);
1075*/
1076 if (*bmc == 2) {
1077 *bmc=1; /* maybe clear the bit next time */
1078 set_page_attr(bitmap, page, BITMAP_PAGE_CLEAN);
1079 } else if (*bmc == 1) {
1080 /* we can clear the bit */
1081 *bmc = 0;
1082 bitmap_count_page(bitmap, j << CHUNK_BLOCK_SHIFT(bitmap),
1083 -1);
1084
1085 /* clear the bit */
1086 clear_bit(file_page_offset(j), page_address(page));
1087 }
1088 }
1089 spin_unlock_irqrestore(&bitmap->lock, flags);
1090 }
1091
1092 /* now sync the final page */
1093 if (lastpage != NULL) {
1094 kunmap(lastpage);
1095 spin_lock_irqsave(&bitmap->lock, flags);
1096 if (get_page_attr(bitmap, lastpage) &BITMAP_PAGE_NEEDWRITE) {
1097 clear_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE);
1098 spin_unlock_irqrestore(&bitmap->lock, flags);
1099 err = write_page(bitmap, lastpage, 0);
1100 if (err == -EAGAIN) {
1101 set_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE);
1102 err = 0;
1103 }
1104 } else {
1105 set_page_attr(bitmap, lastpage, BITMAP_PAGE_NEEDWRITE);
1106 spin_unlock_irqrestore(&bitmap->lock, flags);
1107 }
1108
1109 page_cache_release(lastpage);
1110 }
1111
1112 return err;
1113}
1114
1115static void daemon_exit(struct bitmap *bitmap, mdk_thread_t **daemon)
1116{
1117 mdk_thread_t *dmn;
1118 unsigned long flags;
1119
1120 /* if no one is waiting on us, we'll free the md thread struct
1121 * and exit, otherwise we let the waiter clean things up */
1122 spin_lock_irqsave(&bitmap->lock, flags);
1123 if ((dmn = *daemon)) { /* no one is waiting, cleanup and exit */
1124 *daemon = NULL;
1125 spin_unlock_irqrestore(&bitmap->lock, flags);
1126 kfree(dmn);
1127 complete_and_exit(NULL, 0); /* do_exit not exported */
1128 }
1129 spin_unlock_irqrestore(&bitmap->lock, flags);
1130}
1131
1132static void bitmap_writeback_daemon(mddev_t *mddev)
1133{
1134 struct bitmap *bitmap = mddev->bitmap;
1135 struct page *page;
1136 struct page_list *item;
1137 int err = 0;
1138
1139 if (signal_pending(current)) {
1140 printk(KERN_INFO
1141 "%s: bitmap writeback daemon got signal, exiting...\n",
1142 bmname(bitmap));
1143 err = -EINTR;
1144 goto out;
1145 }
1146
1147 PRINTK("%s: bitmap writeback daemon woke up...\n", bmname(bitmap));
1148 /* wait on bitmap page writebacks */
1149 while ((item = dequeue_page(bitmap))) {
1150 page = item->page;
1151 mempool_free(item, bitmap->write_pool);
1152 PRINTK("wait on page writeback: %p\n", page);
1153 wait_on_page_writeback(page);
1154 PRINTK("finished page writeback: %p\n", page);
1155
1156 err = PageError(page);
1157 page_cache_release(page);
1158 if (err) {
1159 printk(KERN_WARNING "%s: bitmap file writeback "
1160 "failed (page %lu): %d\n",
1161 bmname(bitmap), page->index, err);
1162 bitmap_file_kick(bitmap);
1163 goto out;
1164 }
1165 }
1166 out:
1167 wake_up(&bitmap->write_wait);
1168 if (err) {
1169 printk(KERN_INFO "%s: bitmap writeback daemon exiting (%d)\n",
1170 bmname(bitmap), err);
1171 daemon_exit(bitmap, &bitmap->writeback_daemon);
1172 }
1173}
1174
1175static int bitmap_start_daemon(struct bitmap *bitmap, mdk_thread_t **ptr,
1176 void (*func)(mddev_t *), char *name)
1177{
1178 mdk_thread_t *daemon;
1179 unsigned long flags;
1180 char namebuf[32];
1181
1182 spin_lock_irqsave(&bitmap->lock, flags);
1183 *ptr = NULL;
1184
1185 if (!bitmap->file) /* no need for daemon if there's no backing file */
1186 goto out_unlock;
1187
1188 spin_unlock_irqrestore(&bitmap->lock, flags);
1189
1190#if INJECT_FATAL_FAULT_2
1191 daemon = NULL;
1192#else
1193 sprintf(namebuf, "%%s_%s", name);
1194 daemon = md_register_thread(func, bitmap->mddev, namebuf);
1195#endif
1196 if (!daemon) {
1197 printk(KERN_ERR "%s: failed to start bitmap daemon\n",
1198 bmname(bitmap));
1199 return -ECHILD;
1200 }
1201
1202 spin_lock_irqsave(&bitmap->lock, flags);
1203 *ptr = daemon;
1204
1205 md_wakeup_thread(daemon); /* start it running */
1206
1207 PRINTK("%s: %s daemon (pid %d) started...\n",
1208 bmname(bitmap), name, daemon->tsk->pid);
1209out_unlock:
1210 spin_unlock_irqrestore(&bitmap->lock, flags);
1211 return 0;
1212}
1213
1214static int bitmap_start_daemons(struct bitmap *bitmap)
1215{
1216 int err = bitmap_start_daemon(bitmap, &bitmap->writeback_daemon,
1217 bitmap_writeback_daemon, "bitmap_wb");
1218 return err;
1219}
1220
1221static void bitmap_stop_daemon(struct bitmap *bitmap, mdk_thread_t **ptr)
1222{
1223 mdk_thread_t *daemon;
1224 unsigned long flags;
1225
1226 spin_lock_irqsave(&bitmap->lock, flags);
1227 daemon = *ptr;
1228 *ptr = NULL;
1229 spin_unlock_irqrestore(&bitmap->lock, flags);
1230 if (daemon)
1231 md_unregister_thread(daemon); /* destroy the thread */
1232}
1233
1234static void bitmap_stop_daemons(struct bitmap *bitmap)
1235{
1236 /* the daemons can't stop themselves... they'll just exit instead... */
1237 if (bitmap->writeback_daemon &&
1238 current->pid != bitmap->writeback_daemon->tsk->pid)
1239 bitmap_stop_daemon(bitmap, &bitmap->writeback_daemon);
1240}
1241
1242static bitmap_counter_t *bitmap_get_counter(struct bitmap *bitmap,
1243 sector_t offset, int *blocks,
1244 int create)
1245{
1246 /* If 'create', we might release the lock and reclaim it.
1247 * The lock must have been taken with interrupts enabled.
1248 * If !create, we don't release the lock.
1249 */
1250 sector_t chunk = offset >> CHUNK_BLOCK_SHIFT(bitmap);
1251 unsigned long page = chunk >> PAGE_COUNTER_SHIFT;
1252 unsigned long pageoff = (chunk & PAGE_COUNTER_MASK) << COUNTER_BYTE_SHIFT;
1253 sector_t csize;
1254
1255 if (bitmap_checkpage(bitmap, page, create) < 0) {
1256 csize = ((sector_t)1) << (CHUNK_BLOCK_SHIFT(bitmap));
1257 *blocks = csize - (offset & (csize- 1));
1258 return NULL;
1259 }
1260 /* now locked ... */
1261
1262 if (bitmap->bp[page].hijacked) { /* hijacked pointer */
1263 /* should we use the first or second counter field
1264 * of the hijacked pointer? */
1265 int hi = (pageoff > PAGE_COUNTER_MASK);
1266 csize = ((sector_t)1) << (CHUNK_BLOCK_SHIFT(bitmap) +
1267 PAGE_COUNTER_SHIFT - 1);
1268 *blocks = csize - (offset & (csize- 1));
1269 return &((bitmap_counter_t *)
1270 &bitmap->bp[page].map)[hi];
1271 } else { /* page is allocated */
1272 csize = ((sector_t)1) << (CHUNK_BLOCK_SHIFT(bitmap));
1273 *blocks = csize - (offset & (csize- 1));
1274 return (bitmap_counter_t *)
1275 &(bitmap->bp[page].map[pageoff]);
1276 }
1277}
1278
1279int bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors)
1280{
1281 if (!bitmap) return 0;
1282 while (sectors) {
1283 int blocks;
1284 bitmap_counter_t *bmc;
1285
1286 spin_lock_irq(&bitmap->lock);
1287 bmc = bitmap_get_counter(bitmap, offset, &blocks, 1);
1288 if (!bmc) {
1289 spin_unlock_irq(&bitmap->lock);
1290 return 0;
1291 }
1292
1293 switch(*bmc) {
1294 case 0:
1295 bitmap_file_set_bit(bitmap, offset);
1296 bitmap_count_page(bitmap,offset, 1);
1297 blk_plug_device(bitmap->mddev->queue);
1298 /* fall through */
1299 case 1:
1300 *bmc = 2;
1301 }
1302 if ((*bmc & COUNTER_MAX) == COUNTER_MAX) BUG();
1303 (*bmc)++;
1304
1305 spin_unlock_irq(&bitmap->lock);
1306
1307 offset += blocks;
1308 if (sectors > blocks)
1309 sectors -= blocks;
1310 else sectors = 0;
1311 }
1312 return 0;
1313}
1314
1315void bitmap_endwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors,
1316 int success)
1317{
1318 if (!bitmap) return;
1319 while (sectors) {
1320 int blocks;
1321 unsigned long flags;
1322 bitmap_counter_t *bmc;
1323
1324 spin_lock_irqsave(&bitmap->lock, flags);
1325 bmc = bitmap_get_counter(bitmap, offset, &blocks, 0);
1326 if (!bmc) {
1327 spin_unlock_irqrestore(&bitmap->lock, flags);
1328 return;
1329 }
1330
1331 if (!success && ! (*bmc & NEEDED_MASK))
1332 *bmc |= NEEDED_MASK;
1333
1334 (*bmc)--;
1335 if (*bmc <= 2) {
1336 set_page_attr(bitmap,
1337 filemap_get_page(bitmap, offset >> CHUNK_BLOCK_SHIFT(bitmap)),
1338 BITMAP_PAGE_CLEAN);
1339 }
1340 spin_unlock_irqrestore(&bitmap->lock, flags);
1341 offset += blocks;
1342 if (sectors > blocks)
1343 sectors -= blocks;
1344 else sectors = 0;
1345 }
1346}
1347
1348int bitmap_start_sync(struct bitmap *bitmap, sector_t offset, int *blocks)
1349{
1350 bitmap_counter_t *bmc;
1351 int rv;
1352 if (bitmap == NULL) {/* FIXME or bitmap set as 'failed' */
1353 *blocks = 1024;
1354 return 1; /* always resync if no bitmap */
1355 }
1356 spin_lock_irq(&bitmap->lock);
1357 bmc = bitmap_get_counter(bitmap, offset, blocks, 0);
1358 rv = 0;
1359 if (bmc) {
1360 /* locked */
1361 if (RESYNC(*bmc))
1362 rv = 1;
1363 else if (NEEDED(*bmc)) {
1364 rv = 1;
1365 *bmc |= RESYNC_MASK;
1366 *bmc &= ~NEEDED_MASK;
1367 }
1368 }
1369 spin_unlock_irq(&bitmap->lock);
1370 return rv;
1371}
1372
1373void bitmap_end_sync(struct bitmap *bitmap, sector_t offset, int *blocks, int aborted)
1374{
1375 bitmap_counter_t *bmc;
1376 unsigned long flags;
1377/*
1378 if (offset == 0) printk("bitmap_end_sync 0 (%d)\n", aborted);
1379*/ if (bitmap == NULL) {
1380 *blocks = 1024;
1381 return;
1382 }
1383 spin_lock_irqsave(&bitmap->lock, flags);
1384 bmc = bitmap_get_counter(bitmap, offset, blocks, 0);
1385 if (bmc == NULL)
1386 goto unlock;
1387 /* locked */
1388/*
1389 if (offset == 0) printk("bitmap_end sync found 0x%x, blocks %d\n", *bmc, *blocks);
1390*/
1391 if (RESYNC(*bmc)) {
1392 *bmc &= ~RESYNC_MASK;
1393
1394 if (!NEEDED(*bmc) && aborted)
1395 *bmc |= NEEDED_MASK;
1396 else {
1397 if (*bmc <= 2) {
1398 set_page_attr(bitmap,
1399 filemap_get_page(bitmap, offset >> CHUNK_BLOCK_SHIFT(bitmap)),
1400 BITMAP_PAGE_CLEAN);
1401 }
1402 }
1403 }
1404 unlock:
1405 spin_unlock_irqrestore(&bitmap->lock, flags);
1406}
1407
1408void bitmap_close_sync(struct bitmap *bitmap)
1409{
1410 /* Sync has finished, and any bitmap chunks that weren't synced
1411 * properly have been aborted. It remains to us to clear the
1412 * RESYNC bit wherever it is still on
1413 */
1414 sector_t sector = 0;
1415 int blocks;
1416 if (!bitmap) return;
1417 while (sector < bitmap->mddev->resync_max_sectors) {
1418 bitmap_end_sync(bitmap, sector, &blocks, 0);
1419/*
1420 if (sector < 500) printk("bitmap_close_sync: sec %llu blks %d\n",
1421 (unsigned long long)sector, blocks);
1422*/ sector += blocks;
1423 }
1424}
1425
1426static void bitmap_set_memory_bits(struct bitmap *bitmap, sector_t offset,
1427 unsigned long sectors, int in_sync)
1428{
1429 /* For each chunk covered by any of these sectors, set the
1430 * counter to 1 and set resync_needed unless in_sync. They should all
1431 * be 0 at this point
1432 */
1433 while (sectors) {
1434 int secs;
1435 bitmap_counter_t *bmc;
1436 spin_lock_irq(&bitmap->lock);
1437 bmc = bitmap_get_counter(bitmap, offset, &secs, 1);
1438 if (!bmc) {
1439 spin_unlock_irq(&bitmap->lock);
1440 return;
1441 }
1442 if (! *bmc) {
1443 struct page *page;
1444 *bmc = 1 | (in_sync? 0 : NEEDED_MASK);
1445 bitmap_count_page(bitmap, offset, 1);
1446 page = filemap_get_page(bitmap, offset >> CHUNK_BLOCK_SHIFT(bitmap));
1447 set_page_attr(bitmap, page, BITMAP_PAGE_CLEAN);
1448 }
1449 spin_unlock_irq(&bitmap->lock);
1450 if (sectors > secs)
1451 sectors -= secs;
1452 else
1453 sectors = 0;
1454 }
1455}
1456
1457/*
1458 * free memory that was allocated
1459 */
1460void bitmap_destroy(mddev_t *mddev)
1461{
1462 unsigned long k, pages;
1463 struct bitmap_page *bp;
1464 struct bitmap *bitmap = mddev->bitmap;
1465
1466 if (!bitmap) /* there was no bitmap */
1467 return;
1468
1469 mddev->bitmap = NULL; /* disconnect from the md device */
1470
1471 /* release the bitmap file and kill the daemon */
1472 bitmap_file_put(bitmap);
1473
1474 bp = bitmap->bp;
1475 pages = bitmap->pages;
1476
1477 /* free all allocated memory */
1478
1479 mempool_destroy(bitmap->write_pool);
1480
1481 if (bp) /* deallocate the page memory */
1482 for (k = 0; k < pages; k++)
1483 if (bp[k].map && !bp[k].hijacked)
1484 kfree(bp[k].map);
1485 kfree(bp);
1486 kfree(bitmap);
1487}
1488
1489/*
1490 * initialize the bitmap structure
1491 * if this returns an error, bitmap_destroy must be called to do clean up
1492 */
1493int bitmap_create(mddev_t *mddev)
1494{
1495 struct bitmap *bitmap;
1496 unsigned long blocks = mddev->resync_max_sectors;
1497 unsigned long chunks;
1498 unsigned long pages;
1499 struct file *file = mddev->bitmap_file;
1500 int err;
1501
1502 BUG_ON(sizeof(bitmap_super_t) != 256);
1503
1504 if (!file && !mddev->bitmap_offset) /* bitmap disabled, nothing to do */
1505 return 0;
1506
1507 BUG_ON(file && mddev->bitmap_offset);
1508
1509 bitmap = kmalloc(sizeof(*bitmap), GFP_KERNEL);
1510 if (!bitmap)
1511 return -ENOMEM;
1512
1513 memset(bitmap, 0, sizeof(*bitmap));
1514
1515 spin_lock_init(&bitmap->lock);
1516 bitmap->mddev = mddev;
1517 mddev->bitmap = bitmap;
1518
1519 spin_lock_init(&bitmap->write_lock);
1520 INIT_LIST_HEAD(&bitmap->complete_pages);
1521 init_waitqueue_head(&bitmap->write_wait);
1522 bitmap->write_pool = mempool_create(WRITE_POOL_SIZE, write_pool_alloc,
1523 write_pool_free, NULL);
1524 if (!bitmap->write_pool)
1525 return -ENOMEM;
1526
1527 bitmap->file = file;
1528 bitmap->offset = mddev->bitmap_offset;
1529 if (file) get_file(file);
1530 /* read superblock from bitmap file (this sets bitmap->chunksize) */
1531 err = bitmap_read_sb(bitmap);
1532 if (err)
1533 return err;
1534
1535 bitmap->chunkshift = find_first_bit(&bitmap->chunksize,
1536 sizeof(bitmap->chunksize));
1537
1538 /* now that chunksize and chunkshift are set, we can use these macros */
1539 chunks = (blocks + CHUNK_BLOCK_RATIO(bitmap) - 1) /
1540 CHUNK_BLOCK_RATIO(bitmap);
1541 pages = (chunks + PAGE_COUNTER_RATIO - 1) / PAGE_COUNTER_RATIO;
1542
1543 BUG_ON(!pages);
1544
1545 bitmap->chunks = chunks;
1546 bitmap->pages = pages;
1547 bitmap->missing_pages = pages;
1548 bitmap->counter_bits = COUNTER_BITS;
1549
1550 bitmap->syncchunk = ~0UL;
1551
1552#if INJECT_FATAL_FAULT_1
1553 bitmap->bp = NULL;
1554#else
1555 bitmap->bp = kmalloc(pages * sizeof(*bitmap->bp), GFP_KERNEL);
1556#endif
1557 if (!bitmap->bp)
1558 return -ENOMEM;
1559 memset(bitmap->bp, 0, pages * sizeof(*bitmap->bp));
1560
1561 bitmap->flags |= BITMAP_ACTIVE;
1562
1563 /* now that we have some pages available, initialize the in-memory
1564 * bitmap from the on-disk bitmap */
1565 err = bitmap_init_from_disk(bitmap, mddev->recovery_cp == MaxSector);
1566 if (err)
1567 return err;
1568
1569 printk(KERN_INFO "created bitmap (%lu pages) for device %s\n",
1570 pages, bmname(bitmap));
1571
1572 /* kick off the bitmap daemons */
1573 err = bitmap_start_daemons(bitmap);
1574 if (err)
1575 return err;
1576 return bitmap_update_sb(bitmap);
1577}
1578
1579/* the bitmap API -- for raid personalities */
1580EXPORT_SYMBOL(bitmap_startwrite);
1581EXPORT_SYMBOL(bitmap_endwrite);
1582EXPORT_SYMBOL(bitmap_start_sync);
1583EXPORT_SYMBOL(bitmap_end_sync);
1584EXPORT_SYMBOL(bitmap_unplug);
1585EXPORT_SYMBOL(bitmap_close_sync);
1586EXPORT_SYMBOL(bitmap_daemon_work);
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index 0dd6c2b5391b..d0a4bab220e5 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -704,8 +704,7 @@ static void crypt_dtr(struct dm_target *ti)
704 mempool_destroy(cc->page_pool); 704 mempool_destroy(cc->page_pool);
705 mempool_destroy(cc->io_pool); 705 mempool_destroy(cc->io_pool);
706 706
707 if (cc->iv_mode) 707 kfree(cc->iv_mode);
708 kfree(cc->iv_mode);
709 if (cc->iv_gen_ops && cc->iv_gen_ops->dtr) 708 if (cc->iv_gen_ops && cc->iv_gen_ops->dtr)
710 cc->iv_gen_ops->dtr(cc); 709 cc->iv_gen_ops->dtr(cc);
711 crypto_free_tfm(cc->tfm); 710 crypto_free_tfm(cc->tfm);
diff --git a/drivers/md/linear.c b/drivers/md/linear.c
index b1941b887f46..8d740013d74d 100644
--- a/drivers/md/linear.c
+++ b/drivers/md/linear.c
@@ -217,8 +217,7 @@ static int linear_run (mddev_t *mddev)
217 return 0; 217 return 0;
218 218
219out: 219out:
220 if (conf) 220 kfree(conf);
221 kfree(conf);
222 return 1; 221 return 1;
223} 222}
224 223
diff --git a/drivers/md/md.c b/drivers/md/md.c
index d899204d3743..0c6b5b6baff6 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -19,6 +19,9 @@
19 19
20 Neil Brown <neilb@cse.unsw.edu.au>. 20 Neil Brown <neilb@cse.unsw.edu.au>.
21 21
22 - persistent bitmap code
23 Copyright (C) 2003-2004, Paul Clements, SteelEye Technology, Inc.
24
22 This program is free software; you can redistribute it and/or modify 25 This program is free software; you can redistribute it and/or modify
23 it under the terms of the GNU General Public License as published by 26 it under the terms of the GNU General Public License as published by
24 the Free Software Foundation; either version 2, or (at your option) 27 the Free Software Foundation; either version 2, or (at your option)
@@ -33,6 +36,7 @@
33#include <linux/config.h> 36#include <linux/config.h>
34#include <linux/linkage.h> 37#include <linux/linkage.h>
35#include <linux/raid/md.h> 38#include <linux/raid/md.h>
39#include <linux/raid/bitmap.h>
36#include <linux/sysctl.h> 40#include <linux/sysctl.h>
37#include <linux/devfs_fs_kernel.h> 41#include <linux/devfs_fs_kernel.h>
38#include <linux/buffer_head.h> /* for invalidate_bdev */ 42#include <linux/buffer_head.h> /* for invalidate_bdev */
@@ -40,6 +44,8 @@
40 44
41#include <linux/init.h> 45#include <linux/init.h>
42 46
47#include <linux/file.h>
48
43#ifdef CONFIG_KMOD 49#ifdef CONFIG_KMOD
44#include <linux/kmod.h> 50#include <linux/kmod.h>
45#endif 51#endif
@@ -189,8 +195,7 @@ static mddev_t * mddev_find(dev_t unit)
189 if (mddev->unit == unit) { 195 if (mddev->unit == unit) {
190 mddev_get(mddev); 196 mddev_get(mddev);
191 spin_unlock(&all_mddevs_lock); 197 spin_unlock(&all_mddevs_lock);
192 if (new) 198 kfree(new);
193 kfree(new);
194 return mddev; 199 return mddev;
195 } 200 }
196 201
@@ -218,6 +223,8 @@ static mddev_t * mddev_find(dev_t unit)
218 INIT_LIST_HEAD(&new->all_mddevs); 223 INIT_LIST_HEAD(&new->all_mddevs);
219 init_timer(&new->safemode_timer); 224 init_timer(&new->safemode_timer);
220 atomic_set(&new->active, 1); 225 atomic_set(&new->active, 1);
226 spin_lock_init(&new->write_lock);
227 init_waitqueue_head(&new->sb_wait);
221 228
222 new->queue = blk_alloc_queue(GFP_KERNEL); 229 new->queue = blk_alloc_queue(GFP_KERNEL);
223 if (!new->queue) { 230 if (!new->queue) {
@@ -320,6 +327,40 @@ static void free_disk_sb(mdk_rdev_t * rdev)
320} 327}
321 328
322 329
330static int super_written(struct bio *bio, unsigned int bytes_done, int error)
331{
332 mdk_rdev_t *rdev = bio->bi_private;
333 if (bio->bi_size)
334 return 1;
335
336 if (error || !test_bit(BIO_UPTODATE, &bio->bi_flags))
337 md_error(rdev->mddev, rdev);
338
339 if (atomic_dec_and_test(&rdev->mddev->pending_writes))
340 wake_up(&rdev->mddev->sb_wait);
341 return 0;
342}
343
344void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev,
345 sector_t sector, int size, struct page *page)
346{
347 /* write first size bytes of page to sector of rdev
348 * Increment mddev->pending_writes before returning
349 * and decrement it on completion, waking up sb_wait
350 * if zero is reached.
351 * If an error occurred, call md_error
352 */
353 struct bio *bio = bio_alloc(GFP_NOIO, 1);
354
355 bio->bi_bdev = rdev->bdev;
356 bio->bi_sector = sector;
357 bio_add_page(bio, page, size, 0);
358 bio->bi_private = rdev;
359 bio->bi_end_io = super_written;
360 atomic_inc(&mddev->pending_writes);
361 submit_bio((1<<BIO_RW)|(1<<BIO_RW_SYNC), bio);
362}
363
323static int bi_complete(struct bio *bio, unsigned int bytes_done, int error) 364static int bi_complete(struct bio *bio, unsigned int bytes_done, int error)
324{ 365{
325 if (bio->bi_size) 366 if (bio->bi_size)
@@ -329,7 +370,7 @@ static int bi_complete(struct bio *bio, unsigned int bytes_done, int error)
329 return 0; 370 return 0;
330} 371}
331 372
332static int sync_page_io(struct block_device *bdev, sector_t sector, int size, 373int sync_page_io(struct block_device *bdev, sector_t sector, int size,
333 struct page *page, int rw) 374 struct page *page, int rw)
334{ 375{
335 struct bio *bio = bio_alloc(GFP_NOIO, 1); 376 struct bio *bio = bio_alloc(GFP_NOIO, 1);
@@ -416,11 +457,8 @@ static int sb_equal(mdp_super_t *sb1, mdp_super_t *sb2)
416 ret = 1; 457 ret = 1;
417 458
418abort: 459abort:
419 if (tmp1) 460 kfree(tmp1);
420 kfree(tmp1); 461 kfree(tmp2);
421 if (tmp2)
422 kfree(tmp2);
423
424 return ret; 462 return ret;
425} 463}
426 464
@@ -569,6 +607,8 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t *rdev)
569 mdp_disk_t *desc; 607 mdp_disk_t *desc;
570 mdp_super_t *sb = (mdp_super_t *)page_address(rdev->sb_page); 608 mdp_super_t *sb = (mdp_super_t *)page_address(rdev->sb_page);
571 609
610 rdev->raid_disk = -1;
611 rdev->in_sync = 0;
572 if (mddev->raid_disks == 0) { 612 if (mddev->raid_disks == 0) {
573 mddev->major_version = 0; 613 mddev->major_version = 0;
574 mddev->minor_version = sb->minor_version; 614 mddev->minor_version = sb->minor_version;
@@ -599,16 +639,35 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t *rdev)
599 memcpy(mddev->uuid+12,&sb->set_uuid3, 4); 639 memcpy(mddev->uuid+12,&sb->set_uuid3, 4);
600 640
601 mddev->max_disks = MD_SB_DISKS; 641 mddev->max_disks = MD_SB_DISKS;
602 } else { 642
603 __u64 ev1; 643 if (sb->state & (1<<MD_SB_BITMAP_PRESENT) &&
604 ev1 = md_event(sb); 644 mddev->bitmap_file == NULL) {
645 if (mddev->level != 1) {
646 /* FIXME use a better test */
647 printk(KERN_WARNING "md: bitmaps only support for raid1\n");
648 return -EINVAL;
649 }
650 mddev->bitmap_offset = (MD_SB_BYTES >> 9);
651 }
652
653 } else if (mddev->pers == NULL) {
654 /* Insist on good event counter while assembling */
655 __u64 ev1 = md_event(sb);
605 ++ev1; 656 ++ev1;
606 if (ev1 < mddev->events) 657 if (ev1 < mddev->events)
607 return -EINVAL; 658 return -EINVAL;
608 } 659 } else if (mddev->bitmap) {
660 /* if adding to array with a bitmap, then we can accept an
661 * older device ... but not too old.
662 */
663 __u64 ev1 = md_event(sb);
664 if (ev1 < mddev->bitmap->events_cleared)
665 return 0;
666 } else /* just a hot-add of a new device, leave raid_disk at -1 */
667 return 0;
668
609 if (mddev->level != LEVEL_MULTIPATH) { 669 if (mddev->level != LEVEL_MULTIPATH) {
610 rdev->raid_disk = -1; 670 rdev->faulty = 0;
611 rdev->in_sync = rdev->faulty = 0;
612 desc = sb->disks + rdev->desc_nr; 671 desc = sb->disks + rdev->desc_nr;
613 672
614 if (desc->state & (1<<MD_DISK_FAULTY)) 673 if (desc->state & (1<<MD_DISK_FAULTY))
@@ -618,7 +677,8 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t *rdev)
618 rdev->in_sync = 1; 677 rdev->in_sync = 1;
619 rdev->raid_disk = desc->raid_disk; 678 rdev->raid_disk = desc->raid_disk;
620 } 679 }
621 } 680 } else /* MULTIPATH are always insync */
681 rdev->in_sync = 1;
622 return 0; 682 return 0;
623} 683}
624 684
@@ -683,6 +743,9 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
683 sb->layout = mddev->layout; 743 sb->layout = mddev->layout;
684 sb->chunk_size = mddev->chunk_size; 744 sb->chunk_size = mddev->chunk_size;
685 745
746 if (mddev->bitmap && mddev->bitmap_file == NULL)
747 sb->state |= (1<<MD_SB_BITMAP_PRESENT);
748
686 sb->disks[0].state = (1<<MD_DISK_REMOVED); 749 sb->disks[0].state = (1<<MD_DISK_REMOVED);
687 ITERATE_RDEV(mddev,rdev2,tmp) { 750 ITERATE_RDEV(mddev,rdev2,tmp) {
688 mdp_disk_t *d; 751 mdp_disk_t *d;
@@ -780,7 +843,7 @@ static int super_1_load(mdk_rdev_t *rdev, mdk_rdev_t *refdev, int minor_version)
780 case 0: 843 case 0:
781 sb_offset = rdev->bdev->bd_inode->i_size >> 9; 844 sb_offset = rdev->bdev->bd_inode->i_size >> 9;
782 sb_offset -= 8*2; 845 sb_offset -= 8*2;
783 sb_offset &= ~(4*2-1); 846 sb_offset &= ~(sector_t)(4*2-1);
784 /* convert from sectors to K */ 847 /* convert from sectors to K */
785 sb_offset /= 2; 848 sb_offset /= 2;
786 break; 849 break;
@@ -860,6 +923,8 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev)
860{ 923{
861 struct mdp_superblock_1 *sb = (struct mdp_superblock_1*)page_address(rdev->sb_page); 924 struct mdp_superblock_1 *sb = (struct mdp_superblock_1*)page_address(rdev->sb_page);
862 925
926 rdev->raid_disk = -1;
927 rdev->in_sync = 0;
863 if (mddev->raid_disks == 0) { 928 if (mddev->raid_disks == 0) {
864 mddev->major_version = 1; 929 mddev->major_version = 1;
865 mddev->patch_version = 0; 930 mddev->patch_version = 0;
@@ -877,13 +942,30 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev)
877 memcpy(mddev->uuid, sb->set_uuid, 16); 942 memcpy(mddev->uuid, sb->set_uuid, 16);
878 943
879 mddev->max_disks = (4096-256)/2; 944 mddev->max_disks = (4096-256)/2;
880 } else { 945
881 __u64 ev1; 946 if ((le32_to_cpu(sb->feature_map) & 1) &&
882 ev1 = le64_to_cpu(sb->events); 947 mddev->bitmap_file == NULL ) {
948 if (mddev->level != 1) {
949 printk(KERN_WARNING "md: bitmaps only supported for raid1\n");
950 return -EINVAL;
951 }
952 mddev->bitmap_offset = (__s32)le32_to_cpu(sb->bitmap_offset);
953 }
954 } else if (mddev->pers == NULL) {
955 /* Insist of good event counter while assembling */
956 __u64 ev1 = le64_to_cpu(sb->events);
883 ++ev1; 957 ++ev1;
884 if (ev1 < mddev->events) 958 if (ev1 < mddev->events)
885 return -EINVAL; 959 return -EINVAL;
886 } 960 } else if (mddev->bitmap) {
961 /* If adding to array with a bitmap, then we can accept an
962 * older device, but not too old.
963 */
964 __u64 ev1 = le64_to_cpu(sb->events);
965 if (ev1 < mddev->bitmap->events_cleared)
966 return 0;
967 } else /* just a hot-add of a new device, leave raid_disk at -1 */
968 return 0;
887 969
888 if (mddev->level != LEVEL_MULTIPATH) { 970 if (mddev->level != LEVEL_MULTIPATH) {
889 int role; 971 int role;
@@ -891,14 +973,10 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev)
891 role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]); 973 role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]);
892 switch(role) { 974 switch(role) {
893 case 0xffff: /* spare */ 975 case 0xffff: /* spare */
894 rdev->in_sync = 0;
895 rdev->faulty = 0; 976 rdev->faulty = 0;
896 rdev->raid_disk = -1;
897 break; 977 break;
898 case 0xfffe: /* faulty */ 978 case 0xfffe: /* faulty */
899 rdev->in_sync = 0;
900 rdev->faulty = 1; 979 rdev->faulty = 1;
901 rdev->raid_disk = -1;
902 break; 980 break;
903 default: 981 default:
904 rdev->in_sync = 1; 982 rdev->in_sync = 1;
@@ -906,7 +984,9 @@ static int super_1_validate(mddev_t *mddev, mdk_rdev_t *rdev)
906 rdev->raid_disk = role; 984 rdev->raid_disk = role;
907 break; 985 break;
908 } 986 }
909 } 987 } else /* MULTIPATH are always insync */
988 rdev->in_sync = 1;
989
910 return 0; 990 return 0;
911} 991}
912 992
@@ -933,6 +1013,11 @@ static void super_1_sync(mddev_t *mddev, mdk_rdev_t *rdev)
933 else 1013 else
934 sb->resync_offset = cpu_to_le64(0); 1014 sb->resync_offset = cpu_to_le64(0);
935 1015
1016 if (mddev->bitmap && mddev->bitmap_file == NULL) {
1017 sb->bitmap_offset = cpu_to_le32((__u32)mddev->bitmap_offset);
1018 sb->feature_map = cpu_to_le32(1);
1019 }
1020
936 max_dev = 0; 1021 max_dev = 0;
937 ITERATE_RDEV(mddev,rdev2,tmp) 1022 ITERATE_RDEV(mddev,rdev2,tmp)
938 if (rdev2->desc_nr+1 > max_dev) 1023 if (rdev2->desc_nr+1 > max_dev)
@@ -1196,8 +1281,11 @@ void md_print_devices(void)
1196 printk("md: * <COMPLETE RAID STATE PRINTOUT> *\n"); 1281 printk("md: * <COMPLETE RAID STATE PRINTOUT> *\n");
1197 printk("md: **********************************\n"); 1282 printk("md: **********************************\n");
1198 ITERATE_MDDEV(mddev,tmp) { 1283 ITERATE_MDDEV(mddev,tmp) {
1199 printk("%s: ", mdname(mddev));
1200 1284
1285 if (mddev->bitmap)
1286 bitmap_print_sb(mddev->bitmap);
1287 else
1288 printk("%s: ", mdname(mddev));
1201 ITERATE_RDEV(mddev,rdev,tmp2) 1289 ITERATE_RDEV(mddev,rdev,tmp2)
1202 printk("<%s>", bdevname(rdev->bdev,b)); 1290 printk("<%s>", bdevname(rdev->bdev,b));
1203 printk("\n"); 1291 printk("\n");
@@ -1210,30 +1298,6 @@ void md_print_devices(void)
1210} 1298}
1211 1299
1212 1300
1213static int write_disk_sb(mdk_rdev_t * rdev)
1214{
1215 char b[BDEVNAME_SIZE];
1216 if (!rdev->sb_loaded) {
1217 MD_BUG();
1218 return 1;
1219 }
1220 if (rdev->faulty) {
1221 MD_BUG();
1222 return 1;
1223 }
1224
1225 dprintk(KERN_INFO "(write) %s's sb offset: %llu\n",
1226 bdevname(rdev->bdev,b),
1227 (unsigned long long)rdev->sb_offset);
1228
1229 if (sync_page_io(rdev->bdev, rdev->sb_offset<<1, MD_SB_BYTES, rdev->sb_page, WRITE))
1230 return 0;
1231
1232 printk("md: write_disk_sb failed for device %s\n",
1233 bdevname(rdev->bdev,b));
1234 return 1;
1235}
1236
1237static void sync_sbs(mddev_t * mddev) 1301static void sync_sbs(mddev_t * mddev)
1238{ 1302{
1239 mdk_rdev_t *rdev; 1303 mdk_rdev_t *rdev;
@@ -1248,12 +1312,14 @@ static void sync_sbs(mddev_t * mddev)
1248 1312
1249static void md_update_sb(mddev_t * mddev) 1313static void md_update_sb(mddev_t * mddev)
1250{ 1314{
1251 int err, count = 100; 1315 int err;
1252 struct list_head *tmp; 1316 struct list_head *tmp;
1253 mdk_rdev_t *rdev; 1317 mdk_rdev_t *rdev;
1318 int sync_req;
1254 1319
1255 mddev->sb_dirty = 0;
1256repeat: 1320repeat:
1321 spin_lock(&mddev->write_lock);
1322 sync_req = mddev->in_sync;
1257 mddev->utime = get_seconds(); 1323 mddev->utime = get_seconds();
1258 mddev->events ++; 1324 mddev->events ++;
1259 1325
@@ -1266,20 +1332,26 @@ repeat:
1266 MD_BUG(); 1332 MD_BUG();
1267 mddev->events --; 1333 mddev->events --;
1268 } 1334 }
1335 mddev->sb_dirty = 2;
1269 sync_sbs(mddev); 1336 sync_sbs(mddev);
1270 1337
1271 /* 1338 /*
1272 * do not write anything to disk if using 1339 * do not write anything to disk if using
1273 * nonpersistent superblocks 1340 * nonpersistent superblocks
1274 */ 1341 */
1275 if (!mddev->persistent) 1342 if (!mddev->persistent) {
1343 mddev->sb_dirty = 0;
1344 spin_unlock(&mddev->write_lock);
1345 wake_up(&mddev->sb_wait);
1276 return; 1346 return;
1347 }
1348 spin_unlock(&mddev->write_lock);
1277 1349
1278 dprintk(KERN_INFO 1350 dprintk(KERN_INFO
1279 "md: updating %s RAID superblock on device (in sync %d)\n", 1351 "md: updating %s RAID superblock on device (in sync %d)\n",
1280 mdname(mddev),mddev->in_sync); 1352 mdname(mddev),mddev->in_sync);
1281 1353
1282 err = 0; 1354 err = bitmap_update_sb(mddev->bitmap);
1283 ITERATE_RDEV(mddev,rdev,tmp) { 1355 ITERATE_RDEV(mddev,rdev,tmp) {
1284 char b[BDEVNAME_SIZE]; 1356 char b[BDEVNAME_SIZE];
1285 dprintk(KERN_INFO "md: "); 1357 dprintk(KERN_INFO "md: ");
@@ -1288,22 +1360,32 @@ repeat:
1288 1360
1289 dprintk("%s ", bdevname(rdev->bdev,b)); 1361 dprintk("%s ", bdevname(rdev->bdev,b));
1290 if (!rdev->faulty) { 1362 if (!rdev->faulty) {
1291 err += write_disk_sb(rdev); 1363 md_super_write(mddev,rdev,
1364 rdev->sb_offset<<1, MD_SB_BYTES,
1365 rdev->sb_page);
1366 dprintk(KERN_INFO "(write) %s's sb offset: %llu\n",
1367 bdevname(rdev->bdev,b),
1368 (unsigned long long)rdev->sb_offset);
1369
1292 } else 1370 } else
1293 dprintk(")\n"); 1371 dprintk(")\n");
1294 if (!err && mddev->level == LEVEL_MULTIPATH) 1372 if (mddev->level == LEVEL_MULTIPATH)
1295 /* only need to write one superblock... */ 1373 /* only need to write one superblock... */
1296 break; 1374 break;
1297 } 1375 }
1298 if (err) { 1376 wait_event(mddev->sb_wait, atomic_read(&mddev->pending_writes)==0);
1299 if (--count) { 1377 /* if there was a failure, sb_dirty was set to 1, and we re-write super */
1300 printk(KERN_ERR "md: errors occurred during superblock" 1378
1301 " update, repeating\n"); 1379 spin_lock(&mddev->write_lock);
1302 goto repeat; 1380 if (mddev->in_sync != sync_req|| mddev->sb_dirty == 1) {
1303 } 1381 /* have to write it out again */
1304 printk(KERN_ERR \ 1382 spin_unlock(&mddev->write_lock);
1305 "md: excessive errors occurred during superblock update, exiting\n"); 1383 goto repeat;
1306 } 1384 }
1385 mddev->sb_dirty = 0;
1386 spin_unlock(&mddev->write_lock);
1387 wake_up(&mddev->sb_wait);
1388
1307} 1389}
1308 1390
1309/* 1391/*
@@ -1607,12 +1689,19 @@ static int do_md_run(mddev_t * mddev)
1607 1689
1608 mddev->resync_max_sectors = mddev->size << 1; /* may be over-ridden by personality */ 1690 mddev->resync_max_sectors = mddev->size << 1; /* may be over-ridden by personality */
1609 1691
1610 err = mddev->pers->run(mddev); 1692 /* before we start the array running, initialise the bitmap */
1693 err = bitmap_create(mddev);
1694 if (err)
1695 printk(KERN_ERR "%s: failed to create bitmap (%d)\n",
1696 mdname(mddev), err);
1697 else
1698 err = mddev->pers->run(mddev);
1611 if (err) { 1699 if (err) {
1612 printk(KERN_ERR "md: pers->run() failed ...\n"); 1700 printk(KERN_ERR "md: pers->run() failed ...\n");
1613 module_put(mddev->pers->owner); 1701 module_put(mddev->pers->owner);
1614 mddev->pers = NULL; 1702 mddev->pers = NULL;
1615 return -EINVAL; 1703 bitmap_destroy(mddev);
1704 return err;
1616 } 1705 }
1617 atomic_set(&mddev->writes_pending,0); 1706 atomic_set(&mddev->writes_pending,0);
1618 mddev->safemode = 0; 1707 mddev->safemode = 0;
@@ -1725,6 +1814,14 @@ static int do_md_stop(mddev_t * mddev, int ro)
1725 if (ro) 1814 if (ro)
1726 set_disk_ro(disk, 1); 1815 set_disk_ro(disk, 1);
1727 } 1816 }
1817
1818 bitmap_destroy(mddev);
1819 if (mddev->bitmap_file) {
1820 atomic_set(&mddev->bitmap_file->f_dentry->d_inode->i_writecount, 1);
1821 fput(mddev->bitmap_file);
1822 mddev->bitmap_file = NULL;
1823 }
1824
1728 /* 1825 /*
1729 * Free resources if final stop 1826 * Free resources if final stop
1730 */ 1827 */
@@ -1983,6 +2080,42 @@ static int get_array_info(mddev_t * mddev, void __user * arg)
1983 return 0; 2080 return 0;
1984} 2081}
1985 2082
2083static int get_bitmap_file(mddev_t * mddev, void * arg)
2084{
2085 mdu_bitmap_file_t *file = NULL; /* too big for stack allocation */
2086 char *ptr, *buf = NULL;
2087 int err = -ENOMEM;
2088
2089 file = kmalloc(sizeof(*file), GFP_KERNEL);
2090 if (!file)
2091 goto out;
2092
2093 /* bitmap disabled, zero the first byte and copy out */
2094 if (!mddev->bitmap || !mddev->bitmap->file) {
2095 file->pathname[0] = '\0';
2096 goto copy_out;
2097 }
2098
2099 buf = kmalloc(sizeof(file->pathname), GFP_KERNEL);
2100 if (!buf)
2101 goto out;
2102
2103 ptr = file_path(mddev->bitmap->file, buf, sizeof(file->pathname));
2104 if (!ptr)
2105 goto out;
2106
2107 strcpy(file->pathname, ptr);
2108
2109copy_out:
2110 err = 0;
2111 if (copy_to_user(arg, file, sizeof(*file)))
2112 err = -EFAULT;
2113out:
2114 kfree(buf);
2115 kfree(file);
2116 return err;
2117}
2118
1986static int get_disk_info(mddev_t * mddev, void __user * arg) 2119static int get_disk_info(mddev_t * mddev, void __user * arg)
1987{ 2120{
1988 mdu_disk_info_t info; 2121 mdu_disk_info_t info;
@@ -2078,11 +2211,25 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
2078 PTR_ERR(rdev)); 2211 PTR_ERR(rdev));
2079 return PTR_ERR(rdev); 2212 return PTR_ERR(rdev);
2080 } 2213 }
2214 /* set save_raid_disk if appropriate */
2215 if (!mddev->persistent) {
2216 if (info->state & (1<<MD_DISK_SYNC) &&
2217 info->raid_disk < mddev->raid_disks)
2218 rdev->raid_disk = info->raid_disk;
2219 else
2220 rdev->raid_disk = -1;
2221 } else
2222 super_types[mddev->major_version].
2223 validate_super(mddev, rdev);
2224 rdev->saved_raid_disk = rdev->raid_disk;
2225
2081 rdev->in_sync = 0; /* just to be sure */ 2226 rdev->in_sync = 0; /* just to be sure */
2082 rdev->raid_disk = -1; 2227 rdev->raid_disk = -1;
2083 err = bind_rdev_to_array(rdev, mddev); 2228 err = bind_rdev_to_array(rdev, mddev);
2084 if (err) 2229 if (err)
2085 export_rdev(rdev); 2230 export_rdev(rdev);
2231
2232 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
2086 if (mddev->thread) 2233 if (mddev->thread)
2087 md_wakeup_thread(mddev->thread); 2234 md_wakeup_thread(mddev->thread);
2088 return err; 2235 return err;
@@ -2256,6 +2403,49 @@ abort_export:
2256 return err; 2403 return err;
2257} 2404}
2258 2405
2406/* similar to deny_write_access, but accounts for our holding a reference
2407 * to the file ourselves */
2408static int deny_bitmap_write_access(struct file * file)
2409{
2410 struct inode *inode = file->f_mapping->host;
2411
2412 spin_lock(&inode->i_lock);
2413 if (atomic_read(&inode->i_writecount) > 1) {
2414 spin_unlock(&inode->i_lock);
2415 return -ETXTBSY;
2416 }
2417 atomic_set(&inode->i_writecount, -1);
2418 spin_unlock(&inode->i_lock);
2419
2420 return 0;
2421}
2422
2423static int set_bitmap_file(mddev_t *mddev, int fd)
2424{
2425 int err;
2426
2427 if (mddev->pers)
2428 return -EBUSY;
2429
2430 mddev->bitmap_file = fget(fd);
2431
2432 if (mddev->bitmap_file == NULL) {
2433 printk(KERN_ERR "%s: error: failed to get bitmap file\n",
2434 mdname(mddev));
2435 return -EBADF;
2436 }
2437
2438 err = deny_bitmap_write_access(mddev->bitmap_file);
2439 if (err) {
2440 printk(KERN_ERR "%s: error: bitmap file is already in use\n",
2441 mdname(mddev));
2442 fput(mddev->bitmap_file);
2443 mddev->bitmap_file = NULL;
2444 } else
2445 mddev->bitmap_offset = 0; /* file overrides offset */
2446 return err;
2447}
2448
2259/* 2449/*
2260 * set_array_info is used two different ways 2450 * set_array_info is used two different ways
2261 * The original usage is when creating a new array. 2451 * The original usage is when creating a new array.
@@ -2567,8 +2757,10 @@ static int md_ioctl(struct inode *inode, struct file *file,
2567 /* 2757 /*
2568 * Commands querying/configuring an existing array: 2758 * Commands querying/configuring an existing array:
2569 */ 2759 */
2570 /* if we are initialised yet, only ADD_NEW_DISK or STOP_ARRAY is allowed */ 2760 /* if we are not initialised yet, only ADD_NEW_DISK, STOP_ARRAY,
2571 if (!mddev->raid_disks && cmd != ADD_NEW_DISK && cmd != STOP_ARRAY && cmd != RUN_ARRAY) { 2761 * RUN_ARRAY, and SET_BITMAP_FILE are allowed */
2762 if (!mddev->raid_disks && cmd != ADD_NEW_DISK && cmd != STOP_ARRAY
2763 && cmd != RUN_ARRAY && cmd != SET_BITMAP_FILE) {
2572 err = -ENODEV; 2764 err = -ENODEV;
2573 goto abort_unlock; 2765 goto abort_unlock;
2574 } 2766 }
@@ -2582,6 +2774,10 @@ static int md_ioctl(struct inode *inode, struct file *file,
2582 err = get_array_info(mddev, argp); 2774 err = get_array_info(mddev, argp);
2583 goto done_unlock; 2775 goto done_unlock;
2584 2776
2777 case GET_BITMAP_FILE:
2778 err = get_bitmap_file(mddev, (void *)arg);
2779 goto done_unlock;
2780
2585 case GET_DISK_INFO: 2781 case GET_DISK_INFO:
2586 err = get_disk_info(mddev, argp); 2782 err = get_disk_info(mddev, argp);
2587 goto done_unlock; 2783 goto done_unlock;
@@ -2662,6 +2858,10 @@ static int md_ioctl(struct inode *inode, struct file *file,
2662 err = do_md_run (mddev); 2858 err = do_md_run (mddev);
2663 goto done_unlock; 2859 goto done_unlock;
2664 2860
2861 case SET_BITMAP_FILE:
2862 err = set_bitmap_file(mddev, (int)arg);
2863 goto done_unlock;
2864
2665 default: 2865 default:
2666 if (_IOC_TYPE(cmd) == MD_MAJOR) 2866 if (_IOC_TYPE(cmd) == MD_MAJOR)
2667 printk(KERN_WARNING "md: %s(pid %d) used" 2867 printk(KERN_WARNING "md: %s(pid %d) used"
@@ -2773,8 +2973,9 @@ static int md_thread(void * arg)
2773 while (thread->run) { 2973 while (thread->run) {
2774 void (*run)(mddev_t *); 2974 void (*run)(mddev_t *);
2775 2975
2776 wait_event_interruptible(thread->wqueue, 2976 wait_event_interruptible_timeout(thread->wqueue,
2777 test_bit(THREAD_WAKEUP, &thread->flags)); 2977 test_bit(THREAD_WAKEUP, &thread->flags),
2978 thread->timeout);
2778 if (current->flags & PF_FREEZE) 2979 if (current->flags & PF_FREEZE)
2779 refrigerator(PF_FREEZE); 2980 refrigerator(PF_FREEZE);
2780 2981
@@ -2820,6 +3021,7 @@ mdk_thread_t *md_register_thread(void (*run) (mddev_t *), mddev_t *mddev,
2820 thread->run = run; 3021 thread->run = run;
2821 thread->mddev = mddev; 3022 thread->mddev = mddev;
2822 thread->name = name; 3023 thread->name = name;
3024 thread->timeout = MAX_SCHEDULE_TIMEOUT;
2823 ret = kernel_thread(md_thread, thread, 0); 3025 ret = kernel_thread(md_thread, thread, 0);
2824 if (ret < 0) { 3026 if (ret < 0) {
2825 kfree(thread); 3027 kfree(thread);
@@ -2858,13 +3060,13 @@ void md_error(mddev_t *mddev, mdk_rdev_t *rdev)
2858 3060
2859 if (!rdev || rdev->faulty) 3061 if (!rdev || rdev->faulty)
2860 return; 3062 return;
2861 3063/*
2862 dprintk("md_error dev:%s, rdev:(%d:%d), (caller: %p,%p,%p,%p).\n", 3064 dprintk("md_error dev:%s, rdev:(%d:%d), (caller: %p,%p,%p,%p).\n",
2863 mdname(mddev), 3065 mdname(mddev),
2864 MAJOR(rdev->bdev->bd_dev), MINOR(rdev->bdev->bd_dev), 3066 MAJOR(rdev->bdev->bd_dev), MINOR(rdev->bdev->bd_dev),
2865 __builtin_return_address(0),__builtin_return_address(1), 3067 __builtin_return_address(0),__builtin_return_address(1),
2866 __builtin_return_address(2),__builtin_return_address(3)); 3068 __builtin_return_address(2),__builtin_return_address(3));
2867 3069*/
2868 if (!mddev->pers->error_handler) 3070 if (!mddev->pers->error_handler)
2869 return; 3071 return;
2870 mddev->pers->error_handler(mddev,rdev); 3072 mddev->pers->error_handler(mddev,rdev);
@@ -3018,6 +3220,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
3018 struct list_head *tmp2; 3220 struct list_head *tmp2;
3019 mdk_rdev_t *rdev; 3221 mdk_rdev_t *rdev;
3020 int i; 3222 int i;
3223 struct bitmap *bitmap;
3021 3224
3022 if (v == (void*)1) { 3225 if (v == (void*)1) {
3023 seq_printf(seq, "Personalities : "); 3226 seq_printf(seq, "Personalities : ");
@@ -3070,10 +3273,35 @@ static int md_seq_show(struct seq_file *seq, void *v)
3070 if (mddev->pers) { 3273 if (mddev->pers) {
3071 mddev->pers->status (seq, mddev); 3274 mddev->pers->status (seq, mddev);
3072 seq_printf(seq, "\n "); 3275 seq_printf(seq, "\n ");
3073 if (mddev->curr_resync > 2) 3276 if (mddev->curr_resync > 2) {
3074 status_resync (seq, mddev); 3277 status_resync (seq, mddev);
3075 else if (mddev->curr_resync == 1 || mddev->curr_resync == 2) 3278 seq_printf(seq, "\n ");
3076 seq_printf(seq, " resync=DELAYED"); 3279 } else if (mddev->curr_resync == 1 || mddev->curr_resync == 2)
3280 seq_printf(seq, " resync=DELAYED\n ");
3281 } else
3282 seq_printf(seq, "\n ");
3283
3284 if ((bitmap = mddev->bitmap)) {
3285 unsigned long chunk_kb;
3286 unsigned long flags;
3287 spin_lock_irqsave(&bitmap->lock, flags);
3288 chunk_kb = bitmap->chunksize >> 10;
3289 seq_printf(seq, "bitmap: %lu/%lu pages [%luKB], "
3290 "%lu%s chunk",
3291 bitmap->pages - bitmap->missing_pages,
3292 bitmap->pages,
3293 (bitmap->pages - bitmap->missing_pages)
3294 << (PAGE_SHIFT - 10),
3295 chunk_kb ? chunk_kb : bitmap->chunksize,
3296 chunk_kb ? "KB" : "B");
3297 if (bitmap->file) {
3298 seq_printf(seq, ", file: ");
3299 seq_path(seq, bitmap->file->f_vfsmnt,
3300 bitmap->file->f_dentry," \t\n");
3301 }
3302
3303 seq_printf(seq, "\n");
3304 spin_unlock_irqrestore(&bitmap->lock, flags);
3077 } 3305 }
3078 3306
3079 seq_printf(seq, "\n"); 3307 seq_printf(seq, "\n");
@@ -3176,19 +3404,28 @@ void md_done_sync(mddev_t *mddev, int blocks, int ok)
3176} 3404}
3177 3405
3178 3406
3179void md_write_start(mddev_t *mddev) 3407/* md_write_start(mddev, bi)
3408 * If we need to update some array metadata (e.g. 'active' flag
3409 * in superblock) before writing, schedule a superblock update
3410 * and wait for it to complete.
3411 */
3412void md_write_start(mddev_t *mddev, struct bio *bi)
3180{ 3413{
3181 if (!atomic_read(&mddev->writes_pending)) { 3414 DEFINE_WAIT(w);
3182 mddev_lock_uninterruptible(mddev); 3415 if (bio_data_dir(bi) != WRITE)
3416 return;
3417
3418 atomic_inc(&mddev->writes_pending);
3419 if (mddev->in_sync) {
3420 spin_lock(&mddev->write_lock);
3183 if (mddev->in_sync) { 3421 if (mddev->in_sync) {
3184 mddev->in_sync = 0; 3422 mddev->in_sync = 0;
3185 del_timer(&mddev->safemode_timer); 3423 mddev->sb_dirty = 1;
3186 md_update_sb(mddev); 3424 md_wakeup_thread(mddev->thread);
3187 } 3425 }
3188 atomic_inc(&mddev->writes_pending); 3426 spin_unlock(&mddev->write_lock);
3189 mddev_unlock(mddev); 3427 }
3190 } else 3428 wait_event(mddev->sb_wait, mddev->sb_dirty==0);
3191 atomic_inc(&mddev->writes_pending);
3192} 3429}
3193 3430
3194void md_write_end(mddev_t *mddev) 3431void md_write_end(mddev_t *mddev)
@@ -3201,37 +3438,6 @@ void md_write_end(mddev_t *mddev)
3201 } 3438 }
3202} 3439}
3203 3440
3204static inline void md_enter_safemode(mddev_t *mddev)
3205{
3206 if (!mddev->safemode) return;
3207 if (mddev->safemode == 2 &&
3208 (atomic_read(&mddev->writes_pending) || mddev->in_sync ||
3209 mddev->recovery_cp != MaxSector))
3210 return; /* avoid the lock */
3211 mddev_lock_uninterruptible(mddev);
3212 if (mddev->safemode && !atomic_read(&mddev->writes_pending) &&
3213 !mddev->in_sync && mddev->recovery_cp == MaxSector) {
3214 mddev->in_sync = 1;
3215 md_update_sb(mddev);
3216 }
3217 mddev_unlock(mddev);
3218
3219 if (mddev->safemode == 1)
3220 mddev->safemode = 0;
3221}
3222
3223void md_handle_safemode(mddev_t *mddev)
3224{
3225 if (signal_pending(current)) {
3226 printk(KERN_INFO "md: %s in immediate safe mode\n",
3227 mdname(mddev));
3228 mddev->safemode = 2;
3229 flush_signals(current);
3230 }
3231 md_enter_safemode(mddev);
3232}
3233
3234
3235static DECLARE_WAIT_QUEUE_HEAD(resync_wait); 3441static DECLARE_WAIT_QUEUE_HEAD(resync_wait);
3236 3442
3237#define SYNC_MARKS 10 3443#define SYNC_MARKS 10
@@ -3241,12 +3447,13 @@ static void md_do_sync(mddev_t *mddev)
3241 mddev_t *mddev2; 3447 mddev_t *mddev2;
3242 unsigned int currspeed = 0, 3448 unsigned int currspeed = 0,
3243 window; 3449 window;
3244 sector_t max_sectors,j; 3450 sector_t max_sectors,j, io_sectors;
3245 unsigned long mark[SYNC_MARKS]; 3451 unsigned long mark[SYNC_MARKS];
3246 sector_t mark_cnt[SYNC_MARKS]; 3452 sector_t mark_cnt[SYNC_MARKS];
3247 int last_mark,m; 3453 int last_mark,m;
3248 struct list_head *tmp; 3454 struct list_head *tmp;
3249 sector_t last_check; 3455 sector_t last_check;
3456 int skipped = 0;
3250 3457
3251 /* just incase thread restarts... */ 3458 /* just incase thread restarts... */
3252 if (test_bit(MD_RECOVERY_DONE, &mddev->recovery)) 3459 if (test_bit(MD_RECOVERY_DONE, &mddev->recovery))
@@ -3312,7 +3519,7 @@ static void md_do_sync(mddev_t *mddev)
3312 3519
3313 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) 3520 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery))
3314 /* resync follows the size requested by the personality, 3521 /* resync follows the size requested by the personality,
3315 * which default to physical size, but can be virtual size 3522 * which defaults to physical size, but can be virtual size
3316 */ 3523 */
3317 max_sectors = mddev->resync_max_sectors; 3524 max_sectors = mddev->resync_max_sectors;
3318 else 3525 else
@@ -3327,13 +3534,15 @@ static void md_do_sync(mddev_t *mddev)
3327 sysctl_speed_limit_max); 3534 sysctl_speed_limit_max);
3328 3535
3329 is_mddev_idle(mddev); /* this also initializes IO event counters */ 3536 is_mddev_idle(mddev); /* this also initializes IO event counters */
3330 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) 3537 /* we don't use the checkpoint if there's a bitmap */
3538 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) && !mddev->bitmap)
3331 j = mddev->recovery_cp; 3539 j = mddev->recovery_cp;
3332 else 3540 else
3333 j = 0; 3541 j = 0;
3542 io_sectors = 0;
3334 for (m = 0; m < SYNC_MARKS; m++) { 3543 for (m = 0; m < SYNC_MARKS; m++) {
3335 mark[m] = jiffies; 3544 mark[m] = jiffies;
3336 mark_cnt[m] = j; 3545 mark_cnt[m] = io_sectors;
3337 } 3546 }
3338 last_mark = 0; 3547 last_mark = 0;
3339 mddev->resync_mark = mark[last_mark]; 3548 mddev->resync_mark = mark[last_mark];
@@ -3358,21 +3567,29 @@ static void md_do_sync(mddev_t *mddev)
3358 } 3567 }
3359 3568
3360 while (j < max_sectors) { 3569 while (j < max_sectors) {
3361 int sectors; 3570 sector_t sectors;
3362 3571
3363 sectors = mddev->pers->sync_request(mddev, j, currspeed < sysctl_speed_limit_min); 3572 skipped = 0;
3364 if (sectors < 0) { 3573 sectors = mddev->pers->sync_request(mddev, j, &skipped,
3574 currspeed < sysctl_speed_limit_min);
3575 if (sectors == 0) {
3365 set_bit(MD_RECOVERY_ERR, &mddev->recovery); 3576 set_bit(MD_RECOVERY_ERR, &mddev->recovery);
3366 goto out; 3577 goto out;
3367 } 3578 }
3368 atomic_add(sectors, &mddev->recovery_active); 3579
3580 if (!skipped) { /* actual IO requested */
3581 io_sectors += sectors;
3582 atomic_add(sectors, &mddev->recovery_active);
3583 }
3584
3369 j += sectors; 3585 j += sectors;
3370 if (j>1) mddev->curr_resync = j; 3586 if (j>1) mddev->curr_resync = j;
3371 3587
3372 if (last_check + window > j || j == max_sectors) 3588
3589 if (last_check + window > io_sectors || j == max_sectors)
3373 continue; 3590 continue;
3374 3591
3375 last_check = j; 3592 last_check = io_sectors;
3376 3593
3377 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery) || 3594 if (test_bit(MD_RECOVERY_INTR, &mddev->recovery) ||
3378 test_bit(MD_RECOVERY_ERR, &mddev->recovery)) 3595 test_bit(MD_RECOVERY_ERR, &mddev->recovery))
@@ -3386,7 +3603,7 @@ static void md_do_sync(mddev_t *mddev)
3386 mddev->resync_mark = mark[next]; 3603 mddev->resync_mark = mark[next];
3387 mddev->resync_mark_cnt = mark_cnt[next]; 3604 mddev->resync_mark_cnt = mark_cnt[next];
3388 mark[next] = jiffies; 3605 mark[next] = jiffies;
3389 mark_cnt[next] = j - atomic_read(&mddev->recovery_active); 3606 mark_cnt[next] = io_sectors - atomic_read(&mddev->recovery_active);
3390 last_mark = next; 3607 last_mark = next;
3391 } 3608 }
3392 3609
@@ -3413,7 +3630,8 @@ static void md_do_sync(mddev_t *mddev)
3413 mddev->queue->unplug_fn(mddev->queue); 3630 mddev->queue->unplug_fn(mddev->queue);
3414 cond_resched(); 3631 cond_resched();
3415 3632
3416 currspeed = ((unsigned long)(j-mddev->resync_mark_cnt))/2/((jiffies-mddev->resync_mark)/HZ +1) +1; 3633 currspeed = ((unsigned long)(io_sectors-mddev->resync_mark_cnt))/2
3634 /((jiffies-mddev->resync_mark)/HZ +1) +1;
3417 3635
3418 if (currspeed > sysctl_speed_limit_min) { 3636 if (currspeed > sysctl_speed_limit_min) {
3419 if ((currspeed > sysctl_speed_limit_max) || 3637 if ((currspeed > sysctl_speed_limit_max) ||
@@ -3433,7 +3651,7 @@ static void md_do_sync(mddev_t *mddev)
3433 wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active)); 3651 wait_event(mddev->recovery_wait, !atomic_read(&mddev->recovery_active));
3434 3652
3435 /* tell personality that we are finished */ 3653 /* tell personality that we are finished */
3436 mddev->pers->sync_request(mddev, max_sectors, 1); 3654 mddev->pers->sync_request(mddev, max_sectors, &skipped, 1);
3437 3655
3438 if (!test_bit(MD_RECOVERY_ERR, &mddev->recovery) && 3656 if (!test_bit(MD_RECOVERY_ERR, &mddev->recovery) &&
3439 mddev->curr_resync > 2 && 3657 mddev->curr_resync > 2 &&
@@ -3447,7 +3665,6 @@ static void md_do_sync(mddev_t *mddev)
3447 mddev->recovery_cp = MaxSector; 3665 mddev->recovery_cp = MaxSector;
3448 } 3666 }
3449 3667
3450 md_enter_safemode(mddev);
3451 skip: 3668 skip:
3452 mddev->curr_resync = 0; 3669 mddev->curr_resync = 0;
3453 wake_up(&resync_wait); 3670 wake_up(&resync_wait);
@@ -3484,20 +3701,48 @@ void md_check_recovery(mddev_t *mddev)
3484 struct list_head *rtmp; 3701 struct list_head *rtmp;
3485 3702
3486 3703
3487 dprintk(KERN_INFO "md: recovery thread got woken up ...\n"); 3704 if (mddev->bitmap)
3705 bitmap_daemon_work(mddev->bitmap);
3488 3706
3489 if (mddev->ro) 3707 if (mddev->ro)
3490 return; 3708 return;
3709
3710 if (signal_pending(current)) {
3711 if (mddev->pers->sync_request) {
3712 printk(KERN_INFO "md: %s in immediate safe mode\n",
3713 mdname(mddev));
3714 mddev->safemode = 2;
3715 }
3716 flush_signals(current);
3717 }
3718
3491 if ( ! ( 3719 if ( ! (
3492 mddev->sb_dirty || 3720 mddev->sb_dirty ||
3493 test_bit(MD_RECOVERY_NEEDED, &mddev->recovery) || 3721 test_bit(MD_RECOVERY_NEEDED, &mddev->recovery) ||
3494 test_bit(MD_RECOVERY_DONE, &mddev->recovery) 3722 test_bit(MD_RECOVERY_DONE, &mddev->recovery) ||
3723 (mddev->safemode == 1) ||
3724 (mddev->safemode == 2 && ! atomic_read(&mddev->writes_pending)
3725 && !mddev->in_sync && mddev->recovery_cp == MaxSector)
3495 )) 3726 ))
3496 return; 3727 return;
3728
3497 if (mddev_trylock(mddev)==0) { 3729 if (mddev_trylock(mddev)==0) {
3498 int spares =0; 3730 int spares =0;
3731
3732 spin_lock(&mddev->write_lock);
3733 if (mddev->safemode && !atomic_read(&mddev->writes_pending) &&
3734 !mddev->in_sync && mddev->recovery_cp == MaxSector) {
3735 mddev->in_sync = 1;
3736 mddev->sb_dirty = 1;
3737 }
3738 if (mddev->safemode == 1)
3739 mddev->safemode = 0;
3740 spin_unlock(&mddev->write_lock);
3741
3499 if (mddev->sb_dirty) 3742 if (mddev->sb_dirty)
3500 md_update_sb(mddev); 3743 md_update_sb(mddev);
3744
3745
3501 if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) && 3746 if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) &&
3502 !test_bit(MD_RECOVERY_DONE, &mddev->recovery)) { 3747 !test_bit(MD_RECOVERY_DONE, &mddev->recovery)) {
3503 /* resync/recovery still happening */ 3748 /* resync/recovery still happening */
@@ -3515,6 +3760,14 @@ void md_check_recovery(mddev_t *mddev)
3515 mddev->pers->spare_active(mddev); 3760 mddev->pers->spare_active(mddev);
3516 } 3761 }
3517 md_update_sb(mddev); 3762 md_update_sb(mddev);
3763
3764 /* if array is no-longer degraded, then any saved_raid_disk
3765 * information must be scrapped
3766 */
3767 if (!mddev->degraded)
3768 ITERATE_RDEV(mddev,rdev,rtmp)
3769 rdev->saved_raid_disk = -1;
3770
3518 mddev->recovery = 0; 3771 mddev->recovery = 0;
3519 /* flag recovery needed just to double check */ 3772 /* flag recovery needed just to double check */
3520 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 3773 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
@@ -3557,6 +3810,13 @@ void md_check_recovery(mddev_t *mddev)
3557 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery); 3810 set_bit(MD_RECOVERY_RUNNING, &mddev->recovery);
3558 if (!spares) 3811 if (!spares)
3559 set_bit(MD_RECOVERY_SYNC, &mddev->recovery); 3812 set_bit(MD_RECOVERY_SYNC, &mddev->recovery);
3813 if (spares && mddev->bitmap && ! mddev->bitmap->file) {
3814 /* We are adding a device or devices to an array
3815 * which has the bitmap stored on all devices.
3816 * So make sure all bitmap pages get written
3817 */
3818 bitmap_write_all(mddev->bitmap);
3819 }
3560 mddev->sync_thread = md_register_thread(md_do_sync, 3820 mddev->sync_thread = md_register_thread(md_do_sync,
3561 mddev, 3821 mddev,
3562 "%s_resync"); 3822 "%s_resync");
@@ -3624,6 +3884,8 @@ static int __init md_init(void)
3624 " MD_SB_DISKS=%d\n", 3884 " MD_SB_DISKS=%d\n",
3625 MD_MAJOR_VERSION, MD_MINOR_VERSION, 3885 MD_MAJOR_VERSION, MD_MINOR_VERSION,
3626 MD_PATCHLEVEL_VERSION, MAX_MD_DEVS, MD_SB_DISKS); 3886 MD_PATCHLEVEL_VERSION, MAX_MD_DEVS, MD_SB_DISKS);
3887 printk(KERN_INFO "md: bitmap version %d.%d\n", BITMAP_MAJOR,
3888 BITMAP_MINOR);
3627 3889
3628 if (register_blkdev(MAJOR_NR, "md")) 3890 if (register_blkdev(MAJOR_NR, "md"))
3629 return -1; 3891 return -1;
@@ -3739,7 +4001,6 @@ EXPORT_SYMBOL(md_error);
3739EXPORT_SYMBOL(md_done_sync); 4001EXPORT_SYMBOL(md_done_sync);
3740EXPORT_SYMBOL(md_write_start); 4002EXPORT_SYMBOL(md_write_start);
3741EXPORT_SYMBOL(md_write_end); 4003EXPORT_SYMBOL(md_write_end);
3742EXPORT_SYMBOL(md_handle_safemode);
3743EXPORT_SYMBOL(md_register_thread); 4004EXPORT_SYMBOL(md_register_thread);
3744EXPORT_SYMBOL(md_unregister_thread); 4005EXPORT_SYMBOL(md_unregister_thread);
3745EXPORT_SYMBOL(md_wakeup_thread); 4006EXPORT_SYMBOL(md_wakeup_thread);
diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c
index 2ae2d709cb15..2d2ca7fa0265 100644
--- a/drivers/md/multipath.c
+++ b/drivers/md/multipath.c
@@ -533,8 +533,7 @@ static int multipath_run (mddev_t *mddev)
533out_free_conf: 533out_free_conf:
534 if (conf->pool) 534 if (conf->pool)
535 mempool_destroy(conf->pool); 535 mempool_destroy(conf->pool);
536 if (conf->multipaths) 536 kfree(conf->multipaths);
537 kfree(conf->multipaths);
538 kfree(conf); 537 kfree(conf);
539 mddev->private = NULL; 538 mddev->private = NULL;
540out: 539out:
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
index e7d934eca06f..e11dd14d0b43 100644
--- a/drivers/md/raid0.c
+++ b/drivers/md/raid0.c
@@ -371,10 +371,8 @@ static int raid0_run (mddev_t *mddev)
371 return 0; 371 return 0;
372 372
373out_free_conf: 373out_free_conf:
374 if (conf->strip_zone) 374 kfree(conf->strip_zone);
375 kfree(conf->strip_zone); 375 kfree(conf->devlist);
376 if (conf->devlist)
377 kfree (conf->devlist);
378 kfree(conf); 376 kfree(conf);
379 mddev->private = NULL; 377 mddev->private = NULL;
380out: 378out:
@@ -386,11 +384,11 @@ static int raid0_stop (mddev_t *mddev)
386 raid0_conf_t *conf = mddev_to_conf(mddev); 384 raid0_conf_t *conf = mddev_to_conf(mddev);
387 385
388 blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/ 386 blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/
389 kfree (conf->hash_table); 387 kfree(conf->hash_table);
390 conf->hash_table = NULL; 388 conf->hash_table = NULL;
391 kfree (conf->strip_zone); 389 kfree(conf->strip_zone);
392 conf->strip_zone = NULL; 390 conf->strip_zone = NULL;
393 kfree (conf); 391 kfree(conf);
394 mddev->private = NULL; 392 mddev->private = NULL;
395 393
396 return 0; 394 return 0;
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 1db5de52d376..ff1dbec864af 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -12,6 +12,15 @@
12 * Fixes to reconstruction by Jakob Østergaard" <jakob@ostenfeld.dk> 12 * Fixes to reconstruction by Jakob Østergaard" <jakob@ostenfeld.dk>
13 * Various fixes by Neil Brown <neilb@cse.unsw.edu.au> 13 * Various fixes by Neil Brown <neilb@cse.unsw.edu.au>
14 * 14 *
15 * Changes by Peter T. Breuer <ptb@it.uc3m.es> 31/1/2003 to support
16 * bitmapped intelligence in resync:
17 *
18 * - bitmap marked during normal i/o
19 * - bitmap used to skip nondirty blocks during sync
20 *
21 * Additions to bitmap code, (C) 2003-2004 Paul Clements, SteelEye Technology:
22 * - persistent bitmap code
23 *
15 * This program is free software; you can redistribute it and/or modify 24 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by 25 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2, or (at your option) 26 * the Free Software Foundation; either version 2, or (at your option)
@@ -22,7 +31,16 @@
22 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 31 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 */ 32 */
24 33
34#include "dm-bio-list.h"
25#include <linux/raid/raid1.h> 35#include <linux/raid/raid1.h>
36#include <linux/raid/bitmap.h>
37
38#define DEBUG 0
39#if DEBUG
40#define PRINTK(x...) printk(x)
41#else
42#define PRINTK(x...)
43#endif
26 44
27/* 45/*
28 * Number of guaranteed r1bios in case of extreme VM load: 46 * Number of guaranteed r1bios in case of extreme VM load:
@@ -287,9 +305,11 @@ static int raid1_end_write_request(struct bio *bio, unsigned int bytes_done, int
287 /* 305 /*
288 * this branch is our 'one mirror IO has finished' event handler: 306 * this branch is our 'one mirror IO has finished' event handler:
289 */ 307 */
290 if (!uptodate) 308 if (!uptodate) {
291 md_error(r1_bio->mddev, conf->mirrors[mirror].rdev); 309 md_error(r1_bio->mddev, conf->mirrors[mirror].rdev);
292 else 310 /* an I/O failed, we can't clear the bitmap */
311 set_bit(R1BIO_Degraded, &r1_bio->state);
312 } else
293 /* 313 /*
294 * Set R1BIO_Uptodate in our master bio, so that 314 * Set R1BIO_Uptodate in our master bio, so that
295 * we will return a good error code for to the higher 315 * we will return a good error code for to the higher
@@ -309,6 +329,10 @@ static int raid1_end_write_request(struct bio *bio, unsigned int bytes_done, int
309 * already. 329 * already.
310 */ 330 */
311 if (atomic_dec_and_test(&r1_bio->remaining)) { 331 if (atomic_dec_and_test(&r1_bio->remaining)) {
332 /* clear the bitmap if all writes complete successfully */
333 bitmap_endwrite(r1_bio->mddev->bitmap, r1_bio->sector,
334 r1_bio->sectors,
335 !test_bit(R1BIO_Degraded, &r1_bio->state));
312 md_write_end(r1_bio->mddev); 336 md_write_end(r1_bio->mddev);
313 raid_end_bio_io(r1_bio); 337 raid_end_bio_io(r1_bio);
314 } 338 }
@@ -458,7 +482,10 @@ static void unplug_slaves(mddev_t *mddev)
458 482
459static void raid1_unplug(request_queue_t *q) 483static void raid1_unplug(request_queue_t *q)
460{ 484{
461 unplug_slaves(q->queuedata); 485 mddev_t *mddev = q->queuedata;
486
487 unplug_slaves(mddev);
488 md_wakeup_thread(mddev->thread);
462} 489}
463 490
464static int raid1_issue_flush(request_queue_t *q, struct gendisk *disk, 491static int raid1_issue_flush(request_queue_t *q, struct gendisk *disk,
@@ -501,16 +528,16 @@ static void device_barrier(conf_t *conf, sector_t sect)
501{ 528{
502 spin_lock_irq(&conf->resync_lock); 529 spin_lock_irq(&conf->resync_lock);
503 wait_event_lock_irq(conf->wait_idle, !waitqueue_active(&conf->wait_resume), 530 wait_event_lock_irq(conf->wait_idle, !waitqueue_active(&conf->wait_resume),
504 conf->resync_lock, unplug_slaves(conf->mddev)); 531 conf->resync_lock, raid1_unplug(conf->mddev->queue));
505 532
506 if (!conf->barrier++) { 533 if (!conf->barrier++) {
507 wait_event_lock_irq(conf->wait_idle, !conf->nr_pending, 534 wait_event_lock_irq(conf->wait_idle, !conf->nr_pending,
508 conf->resync_lock, unplug_slaves(conf->mddev)); 535 conf->resync_lock, raid1_unplug(conf->mddev->queue));
509 if (conf->nr_pending) 536 if (conf->nr_pending)
510 BUG(); 537 BUG();
511 } 538 }
512 wait_event_lock_irq(conf->wait_resume, conf->barrier < RESYNC_DEPTH, 539 wait_event_lock_irq(conf->wait_resume, conf->barrier < RESYNC_DEPTH,
513 conf->resync_lock, unplug_slaves(conf->mddev)); 540 conf->resync_lock, raid1_unplug(conf->mddev->queue));
514 conf->next_resync = sect; 541 conf->next_resync = sect;
515 spin_unlock_irq(&conf->resync_lock); 542 spin_unlock_irq(&conf->resync_lock);
516} 543}
@@ -522,14 +549,20 @@ static int make_request(request_queue_t *q, struct bio * bio)
522 mirror_info_t *mirror; 549 mirror_info_t *mirror;
523 r1bio_t *r1_bio; 550 r1bio_t *r1_bio;
524 struct bio *read_bio; 551 struct bio *read_bio;
525 int i, disks; 552 int i, targets = 0, disks;
526 mdk_rdev_t *rdev; 553 mdk_rdev_t *rdev;
554 struct bitmap *bitmap = mddev->bitmap;
555 unsigned long flags;
556 struct bio_list bl;
557
527 558
528 /* 559 /*
529 * Register the new request and wait if the reconstruction 560 * Register the new request and wait if the reconstruction
530 * thread has put up a bar for new requests. 561 * thread has put up a bar for new requests.
531 * Continue immediately if no resync is active currently. 562 * Continue immediately if no resync is active currently.
532 */ 563 */
564 md_write_start(mddev, bio); /* wait on superblock update early */
565
533 spin_lock_irq(&conf->resync_lock); 566 spin_lock_irq(&conf->resync_lock);
534 wait_event_lock_irq(conf->wait_resume, !conf->barrier, conf->resync_lock, ); 567 wait_event_lock_irq(conf->wait_resume, !conf->barrier, conf->resync_lock, );
535 conf->nr_pending++; 568 conf->nr_pending++;
@@ -552,7 +585,7 @@ static int make_request(request_queue_t *q, struct bio * bio)
552 585
553 r1_bio->master_bio = bio; 586 r1_bio->master_bio = bio;
554 r1_bio->sectors = bio->bi_size >> 9; 587 r1_bio->sectors = bio->bi_size >> 9;
555 588 r1_bio->state = 0;
556 r1_bio->mddev = mddev; 589 r1_bio->mddev = mddev;
557 r1_bio->sector = bio->bi_sector; 590 r1_bio->sector = bio->bi_sector;
558 591
@@ -595,6 +628,13 @@ static int make_request(request_queue_t *q, struct bio * bio)
595 * bios[x] to bio 628 * bios[x] to bio
596 */ 629 */
597 disks = conf->raid_disks; 630 disks = conf->raid_disks;
631#if 0
632 { static int first=1;
633 if (first) printk("First Write sector %llu disks %d\n",
634 (unsigned long long)r1_bio->sector, disks);
635 first = 0;
636 }
637#endif
598 rcu_read_lock(); 638 rcu_read_lock();
599 for (i = 0; i < disks; i++) { 639 for (i = 0; i < disks; i++) {
600 if ((rdev=conf->mirrors[i].rdev) != NULL && 640 if ((rdev=conf->mirrors[i].rdev) != NULL &&
@@ -605,13 +645,21 @@ static int make_request(request_queue_t *q, struct bio * bio)
605 r1_bio->bios[i] = NULL; 645 r1_bio->bios[i] = NULL;
606 } else 646 } else
607 r1_bio->bios[i] = bio; 647 r1_bio->bios[i] = bio;
648 targets++;
608 } else 649 } else
609 r1_bio->bios[i] = NULL; 650 r1_bio->bios[i] = NULL;
610 } 651 }
611 rcu_read_unlock(); 652 rcu_read_unlock();
612 653
613 atomic_set(&r1_bio->remaining, 1); 654 if (targets < conf->raid_disks) {
614 md_write_start(mddev); 655 /* array is degraded, we will not clear the bitmap
656 * on I/O completion (see raid1_end_write_request) */
657 set_bit(R1BIO_Degraded, &r1_bio->state);
658 }
659
660 atomic_set(&r1_bio->remaining, 0);
661
662 bio_list_init(&bl);
615 for (i = 0; i < disks; i++) { 663 for (i = 0; i < disks; i++) {
616 struct bio *mbio; 664 struct bio *mbio;
617 if (!r1_bio->bios[i]) 665 if (!r1_bio->bios[i])
@@ -627,14 +675,23 @@ static int make_request(request_queue_t *q, struct bio * bio)
627 mbio->bi_private = r1_bio; 675 mbio->bi_private = r1_bio;
628 676
629 atomic_inc(&r1_bio->remaining); 677 atomic_inc(&r1_bio->remaining);
630 generic_make_request(mbio);
631 }
632 678
633 if (atomic_dec_and_test(&r1_bio->remaining)) { 679 bio_list_add(&bl, mbio);
634 md_write_end(mddev);
635 raid_end_bio_io(r1_bio);
636 } 680 }
637 681
682 bitmap_startwrite(bitmap, bio->bi_sector, r1_bio->sectors);
683 spin_lock_irqsave(&conf->device_lock, flags);
684 bio_list_merge(&conf->pending_bio_list, &bl);
685 bio_list_init(&bl);
686
687 blk_plug_device(mddev->queue);
688 spin_unlock_irqrestore(&conf->device_lock, flags);
689
690#if 0
691 while ((bio = bio_list_pop(&bl)) != NULL)
692 generic_make_request(bio);
693#endif
694
638 return 0; 695 return 0;
639} 696}
640 697
@@ -714,7 +771,7 @@ static void close_sync(conf_t *conf)
714{ 771{
715 spin_lock_irq(&conf->resync_lock); 772 spin_lock_irq(&conf->resync_lock);
716 wait_event_lock_irq(conf->wait_resume, !conf->barrier, 773 wait_event_lock_irq(conf->wait_resume, !conf->barrier,
717 conf->resync_lock, unplug_slaves(conf->mddev)); 774 conf->resync_lock, raid1_unplug(conf->mddev->queue));
718 spin_unlock_irq(&conf->resync_lock); 775 spin_unlock_irq(&conf->resync_lock);
719 776
720 if (conf->barrier) BUG(); 777 if (conf->barrier) BUG();
@@ -754,9 +811,12 @@ static int raid1_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
754{ 811{
755 conf_t *conf = mddev->private; 812 conf_t *conf = mddev->private;
756 int found = 0; 813 int found = 0;
757 int mirror; 814 int mirror = 0;
758 mirror_info_t *p; 815 mirror_info_t *p;
759 816
817 if (rdev->saved_raid_disk >= 0 &&
818 conf->mirrors[rdev->saved_raid_disk].rdev == NULL)
819 mirror = rdev->saved_raid_disk;
760 for (mirror=0; mirror < mddev->raid_disks; mirror++) 820 for (mirror=0; mirror < mddev->raid_disks; mirror++)
761 if ( !(p=conf->mirrors+mirror)->rdev) { 821 if ( !(p=conf->mirrors+mirror)->rdev) {
762 822
@@ -773,6 +833,8 @@ static int raid1_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
773 p->head_position = 0; 833 p->head_position = 0;
774 rdev->raid_disk = mirror; 834 rdev->raid_disk = mirror;
775 found = 1; 835 found = 1;
836 if (rdev->saved_raid_disk != mirror)
837 conf->fullsync = 1;
776 p->rdev = rdev; 838 p->rdev = rdev;
777 break; 839 break;
778 } 840 }
@@ -828,10 +890,11 @@ static int end_sync_read(struct bio *bio, unsigned int bytes_done, int error)
828 * or re-read if the read failed. 890 * or re-read if the read failed.
829 * We don't do much here, just schedule handling by raid1d 891 * We don't do much here, just schedule handling by raid1d
830 */ 892 */
831 if (!uptodate) 893 if (!uptodate) {
832 md_error(r1_bio->mddev, 894 md_error(r1_bio->mddev,
833 conf->mirrors[r1_bio->read_disk].rdev); 895 conf->mirrors[r1_bio->read_disk].rdev);
834 else 896 set_bit(R1BIO_Degraded, &r1_bio->state);
897 } else
835 set_bit(R1BIO_Uptodate, &r1_bio->state); 898 set_bit(R1BIO_Uptodate, &r1_bio->state);
836 rdev_dec_pending(conf->mirrors[r1_bio->read_disk].rdev, conf->mddev); 899 rdev_dec_pending(conf->mirrors[r1_bio->read_disk].rdev, conf->mddev);
837 reschedule_retry(r1_bio); 900 reschedule_retry(r1_bio);
@@ -855,8 +918,10 @@ static int end_sync_write(struct bio *bio, unsigned int bytes_done, int error)
855 mirror = i; 918 mirror = i;
856 break; 919 break;
857 } 920 }
858 if (!uptodate) 921 if (!uptodate) {
859 md_error(mddev, conf->mirrors[mirror].rdev); 922 md_error(mddev, conf->mirrors[mirror].rdev);
923 set_bit(R1BIO_Degraded, &r1_bio->state);
924 }
860 update_head_pos(mirror, r1_bio); 925 update_head_pos(mirror, r1_bio);
861 926
862 if (atomic_dec_and_test(&r1_bio->remaining)) { 927 if (atomic_dec_and_test(&r1_bio->remaining)) {
@@ -876,6 +941,9 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio)
876 941
877 bio = r1_bio->bios[r1_bio->read_disk]; 942 bio = r1_bio->bios[r1_bio->read_disk];
878 943
944/*
945 if (r1_bio->sector == 0) printk("First sync write startss\n");
946*/
879 /* 947 /*
880 * schedule writes 948 * schedule writes
881 */ 949 */
@@ -903,10 +971,12 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio)
903 atomic_inc(&conf->mirrors[i].rdev->nr_pending); 971 atomic_inc(&conf->mirrors[i].rdev->nr_pending);
904 atomic_inc(&r1_bio->remaining); 972 atomic_inc(&r1_bio->remaining);
905 md_sync_acct(conf->mirrors[i].rdev->bdev, wbio->bi_size >> 9); 973 md_sync_acct(conf->mirrors[i].rdev->bdev, wbio->bi_size >> 9);
974
906 generic_make_request(wbio); 975 generic_make_request(wbio);
907 } 976 }
908 977
909 if (atomic_dec_and_test(&r1_bio->remaining)) { 978 if (atomic_dec_and_test(&r1_bio->remaining)) {
979 /* if we're here, all write(s) have completed, so clean up */
910 md_done_sync(mddev, r1_bio->sectors, 1); 980 md_done_sync(mddev, r1_bio->sectors, 1);
911 put_buf(r1_bio); 981 put_buf(r1_bio);
912 } 982 }
@@ -931,11 +1001,30 @@ static void raid1d(mddev_t *mddev)
931 mdk_rdev_t *rdev; 1001 mdk_rdev_t *rdev;
932 1002
933 md_check_recovery(mddev); 1003 md_check_recovery(mddev);
934 md_handle_safemode(mddev);
935 1004
936 for (;;) { 1005 for (;;) {
937 char b[BDEVNAME_SIZE]; 1006 char b[BDEVNAME_SIZE];
938 spin_lock_irqsave(&conf->device_lock, flags); 1007 spin_lock_irqsave(&conf->device_lock, flags);
1008
1009 if (conf->pending_bio_list.head) {
1010 bio = bio_list_get(&conf->pending_bio_list);
1011 blk_remove_plug(mddev->queue);
1012 spin_unlock_irqrestore(&conf->device_lock, flags);
1013 /* flush any pending bitmap writes to disk before proceeding w/ I/O */
1014 if (bitmap_unplug(mddev->bitmap) != 0)
1015 printk("%s: bitmap file write failed!\n", mdname(mddev));
1016
1017 while (bio) { /* submit pending writes */
1018 struct bio *next = bio->bi_next;
1019 bio->bi_next = NULL;
1020 generic_make_request(bio);
1021 bio = next;
1022 }
1023 unplug = 1;
1024
1025 continue;
1026 }
1027
939 if (list_empty(head)) 1028 if (list_empty(head))
940 break; 1029 break;
941 r1_bio = list_entry(head->prev, r1bio_t, retry_list); 1030 r1_bio = list_entry(head->prev, r1bio_t, retry_list);
@@ -1009,7 +1098,7 @@ static int init_resync(conf_t *conf)
1009 * that can be installed to exclude normal IO requests. 1098 * that can be installed to exclude normal IO requests.
1010 */ 1099 */
1011 1100
1012static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster) 1101static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, int go_faster)
1013{ 1102{
1014 conf_t *conf = mddev_to_conf(mddev); 1103 conf_t *conf = mddev_to_conf(mddev);
1015 mirror_info_t *mirror; 1104 mirror_info_t *mirror;
@@ -1019,17 +1108,43 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
1019 int disk; 1108 int disk;
1020 int i; 1109 int i;
1021 int write_targets = 0; 1110 int write_targets = 0;
1111 int sync_blocks;
1022 1112
1023 if (!conf->r1buf_pool) 1113 if (!conf->r1buf_pool)
1114 {
1115/*
1116 printk("sync start - bitmap %p\n", mddev->bitmap);
1117*/
1024 if (init_resync(conf)) 1118 if (init_resync(conf))
1025 return -ENOMEM; 1119 return 0;
1120 }
1026 1121
1027 max_sector = mddev->size << 1; 1122 max_sector = mddev->size << 1;
1028 if (sector_nr >= max_sector) { 1123 if (sector_nr >= max_sector) {
1124 /* If we aborted, we need to abort the
1125 * sync on the 'current' bitmap chunk (there will
1126 * only be one in raid1 resync.
1127 * We can find the current addess in mddev->curr_resync
1128 */
1129 if (!conf->fullsync) {
1130 if (mddev->curr_resync < max_sector)
1131 bitmap_end_sync(mddev->bitmap,
1132 mddev->curr_resync,
1133 &sync_blocks, 1);
1134 bitmap_close_sync(mddev->bitmap);
1135 }
1136 if (mddev->curr_resync >= max_sector)
1137 conf->fullsync = 0;
1029 close_sync(conf); 1138 close_sync(conf);
1030 return 0; 1139 return 0;
1031 } 1140 }
1032 1141
1142 if (!conf->fullsync &&
1143 !bitmap_start_sync(mddev->bitmap, sector_nr, &sync_blocks)) {
1144 /* We can skip this block, and probably several more */
1145 *skipped = 1;
1146 return sync_blocks;
1147 }
1033 /* 1148 /*
1034 * If there is non-resync activity waiting for us then 1149 * If there is non-resync activity waiting for us then
1035 * put in a delay to throttle resync. 1150 * put in a delay to throttle resync.
@@ -1068,6 +1183,7 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
1068 1183
1069 r1_bio->mddev = mddev; 1184 r1_bio->mddev = mddev;
1070 r1_bio->sector = sector_nr; 1185 r1_bio->sector = sector_nr;
1186 r1_bio->state = 0;
1071 set_bit(R1BIO_IsSync, &r1_bio->state); 1187 set_bit(R1BIO_IsSync, &r1_bio->state);
1072 r1_bio->read_disk = disk; 1188 r1_bio->read_disk = disk;
1073 1189
@@ -1102,18 +1218,24 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
1102 bio->bi_bdev = conf->mirrors[i].rdev->bdev; 1218 bio->bi_bdev = conf->mirrors[i].rdev->bdev;
1103 bio->bi_private = r1_bio; 1219 bio->bi_private = r1_bio;
1104 } 1220 }
1221
1222 if (write_targets + 1 < conf->raid_disks)
1223 /* array degraded, can't clear bitmap */
1224 set_bit(R1BIO_Degraded, &r1_bio->state);
1225
1105 if (write_targets == 0) { 1226 if (write_targets == 0) {
1106 /* There is nowhere to write, so all non-sync 1227 /* There is nowhere to write, so all non-sync
1107 * drives must be failed - so we are finished 1228 * drives must be failed - so we are finished
1108 */ 1229 */
1109 int rv = max_sector - sector_nr; 1230 sector_t rv = max_sector - sector_nr;
1110 md_done_sync(mddev, rv, 1); 1231 *skipped = 1;
1111 put_buf(r1_bio); 1232 put_buf(r1_bio);
1112 rdev_dec_pending(conf->mirrors[disk].rdev, mddev); 1233 rdev_dec_pending(conf->mirrors[disk].rdev, mddev);
1113 return rv; 1234 return rv;
1114 } 1235 }
1115 1236
1116 nr_sectors = 0; 1237 nr_sectors = 0;
1238 sync_blocks = 0;
1117 do { 1239 do {
1118 struct page *page; 1240 struct page *page;
1119 int len = PAGE_SIZE; 1241 int len = PAGE_SIZE;
@@ -1121,6 +1243,17 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
1121 len = (max_sector - sector_nr) << 9; 1243 len = (max_sector - sector_nr) << 9;
1122 if (len == 0) 1244 if (len == 0)
1123 break; 1245 break;
1246 if (!conf->fullsync) {
1247 if (sync_blocks == 0) {
1248 if (!bitmap_start_sync(mddev->bitmap,
1249 sector_nr, &sync_blocks))
1250 break;
1251 if (sync_blocks < (PAGE_SIZE>>9))
1252 BUG();
1253 if (len > (sync_blocks<<9)) len = sync_blocks<<9;
1254 }
1255 }
1256
1124 for (i=0 ; i < conf->raid_disks; i++) { 1257 for (i=0 ; i < conf->raid_disks; i++) {
1125 bio = r1_bio->bios[i]; 1258 bio = r1_bio->bios[i];
1126 if (bio->bi_end_io) { 1259 if (bio->bi_end_io) {
@@ -1143,6 +1276,7 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
1143 } 1276 }
1144 nr_sectors += len>>9; 1277 nr_sectors += len>>9;
1145 sector_nr += len>>9; 1278 sector_nr += len>>9;
1279 sync_blocks -= (len>>9);
1146 } while (r1_bio->bios[disk]->bi_vcnt < RESYNC_PAGES); 1280 } while (r1_bio->bios[disk]->bi_vcnt < RESYNC_PAGES);
1147 bio_full: 1281 bio_full:
1148 bio = r1_bio->bios[disk]; 1282 bio = r1_bio->bios[disk];
@@ -1231,6 +1365,9 @@ static int run(mddev_t *mddev)
1231 init_waitqueue_head(&conf->wait_idle); 1365 init_waitqueue_head(&conf->wait_idle);
1232 init_waitqueue_head(&conf->wait_resume); 1366 init_waitqueue_head(&conf->wait_resume);
1233 1367
1368 bio_list_init(&conf->pending_bio_list);
1369 bio_list_init(&conf->flushing_bio_list);
1370
1234 if (!conf->working_disks) { 1371 if (!conf->working_disks) {
1235 printk(KERN_ERR "raid1: no operational mirrors for %s\n", 1372 printk(KERN_ERR "raid1: no operational mirrors for %s\n",
1236 mdname(mddev)); 1373 mdname(mddev));
@@ -1259,16 +1396,15 @@ static int run(mddev_t *mddev)
1259 conf->last_used = j; 1396 conf->last_used = j;
1260 1397
1261 1398
1262 1399 mddev->thread = md_register_thread(raid1d, mddev, "%s_raid1");
1263 { 1400 if (!mddev->thread) {
1264 mddev->thread = md_register_thread(raid1d, mddev, "%s_raid1"); 1401 printk(KERN_ERR
1265 if (!mddev->thread) { 1402 "raid1: couldn't allocate thread for %s\n",
1266 printk(KERN_ERR 1403 mdname(mddev));
1267 "raid1: couldn't allocate thread for %s\n", 1404 goto out_free_conf;
1268 mdname(mddev));
1269 goto out_free_conf;
1270 }
1271 } 1405 }
1406 if (mddev->bitmap) mddev->thread->timeout = mddev->bitmap->daemon_sleep * HZ;
1407
1272 printk(KERN_INFO 1408 printk(KERN_INFO
1273 "raid1: raid set %s active with %d out of %d mirrors\n", 1409 "raid1: raid set %s active with %d out of %d mirrors\n",
1274 mdname(mddev), mddev->raid_disks - mddev->degraded, 1410 mdname(mddev), mddev->raid_disks - mddev->degraded,
@@ -1291,10 +1427,8 @@ out_free_conf:
1291 if (conf) { 1427 if (conf) {
1292 if (conf->r1bio_pool) 1428 if (conf->r1bio_pool)
1293 mempool_destroy(conf->r1bio_pool); 1429 mempool_destroy(conf->r1bio_pool);
1294 if (conf->mirrors) 1430 kfree(conf->mirrors);
1295 kfree(conf->mirrors); 1431 kfree(conf->poolinfo);
1296 if (conf->poolinfo)
1297 kfree(conf->poolinfo);
1298 kfree(conf); 1432 kfree(conf);
1299 mddev->private = NULL; 1433 mddev->private = NULL;
1300 } 1434 }
@@ -1311,10 +1445,8 @@ static int stop(mddev_t *mddev)
1311 blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/ 1445 blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/
1312 if (conf->r1bio_pool) 1446 if (conf->r1bio_pool)
1313 mempool_destroy(conf->r1bio_pool); 1447 mempool_destroy(conf->r1bio_pool);
1314 if (conf->mirrors) 1448 kfree(conf->mirrors);
1315 kfree(conf->mirrors); 1449 kfree(conf->poolinfo);
1316 if (conf->poolinfo)
1317 kfree(conf->poolinfo);
1318 kfree(conf); 1450 kfree(conf);
1319 mddev->private = NULL; 1451 mddev->private = NULL;
1320 return 0; 1452 return 0;
@@ -1349,17 +1481,26 @@ static int raid1_reshape(mddev_t *mddev, int raid_disks)
1349 * We allocate a new r1bio_pool if we can. 1481 * We allocate a new r1bio_pool if we can.
1350 * Then raise a device barrier and wait until all IO stops. 1482 * Then raise a device barrier and wait until all IO stops.
1351 * Then resize conf->mirrors and swap in the new r1bio pool. 1483 * Then resize conf->mirrors and swap in the new r1bio pool.
1484 *
1485 * At the same time, we "pack" the devices so that all the missing
1486 * devices have the higher raid_disk numbers.
1352 */ 1487 */
1353 mempool_t *newpool, *oldpool; 1488 mempool_t *newpool, *oldpool;
1354 struct pool_info *newpoolinfo; 1489 struct pool_info *newpoolinfo;
1355 mirror_info_t *newmirrors; 1490 mirror_info_t *newmirrors;
1356 conf_t *conf = mddev_to_conf(mddev); 1491 conf_t *conf = mddev_to_conf(mddev);
1492 int cnt;
1357 1493
1358 int d; 1494 int d, d2;
1359 1495
1360 for (d= raid_disks; d < conf->raid_disks; d++) 1496 if (raid_disks < conf->raid_disks) {
1361 if (conf->mirrors[d].rdev) 1497 cnt=0;
1498 for (d= 0; d < conf->raid_disks; d++)
1499 if (conf->mirrors[d].rdev)
1500 cnt++;
1501 if (cnt > raid_disks)
1362 return -EBUSY; 1502 return -EBUSY;
1503 }
1363 1504
1364 newpoolinfo = kmalloc(sizeof(*newpoolinfo), GFP_KERNEL); 1505 newpoolinfo = kmalloc(sizeof(*newpoolinfo), GFP_KERNEL);
1365 if (!newpoolinfo) 1506 if (!newpoolinfo)
@@ -1384,14 +1525,18 @@ static int raid1_reshape(mddev_t *mddev, int raid_disks)
1384 spin_lock_irq(&conf->resync_lock); 1525 spin_lock_irq(&conf->resync_lock);
1385 conf->barrier++; 1526 conf->barrier++;
1386 wait_event_lock_irq(conf->wait_idle, !conf->nr_pending, 1527 wait_event_lock_irq(conf->wait_idle, !conf->nr_pending,
1387 conf->resync_lock, unplug_slaves(mddev)); 1528 conf->resync_lock, raid1_unplug(mddev->queue));
1388 spin_unlock_irq(&conf->resync_lock); 1529 spin_unlock_irq(&conf->resync_lock);
1389 1530
1390 /* ok, everything is stopped */ 1531 /* ok, everything is stopped */
1391 oldpool = conf->r1bio_pool; 1532 oldpool = conf->r1bio_pool;
1392 conf->r1bio_pool = newpool; 1533 conf->r1bio_pool = newpool;
1393 for (d=0; d < raid_disks && d < conf->raid_disks; d++) 1534
1394 newmirrors[d] = conf->mirrors[d]; 1535 for (d=d2=0; d < conf->raid_disks; d++)
1536 if (conf->mirrors[d].rdev) {
1537 conf->mirrors[d].rdev->raid_disk = d2;
1538 newmirrors[d2++].rdev = conf->mirrors[d].rdev;
1539 }
1395 kfree(conf->mirrors); 1540 kfree(conf->mirrors);
1396 conf->mirrors = newmirrors; 1541 conf->mirrors = newmirrors;
1397 kfree(conf->poolinfo); 1542 kfree(conf->poolinfo);
@@ -1400,6 +1545,7 @@ static int raid1_reshape(mddev_t *mddev, int raid_disks)
1400 mddev->degraded += (raid_disks - conf->raid_disks); 1545 mddev->degraded += (raid_disks - conf->raid_disks);
1401 conf->raid_disks = mddev->raid_disks = raid_disks; 1546 conf->raid_disks = mddev->raid_disks = raid_disks;
1402 1547
1548 conf->last_used = 0; /* just make sure it is in-range */
1403 spin_lock_irq(&conf->resync_lock); 1549 spin_lock_irq(&conf->resync_lock);
1404 conf->barrier--; 1550 conf->barrier--;
1405 spin_unlock_irq(&conf->resync_lock); 1551 spin_unlock_irq(&conf->resync_lock);
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 3c37be6423d7..62ebb1bc72be 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -700,6 +700,8 @@ static int make_request(request_queue_t *q, struct bio * bio)
700 return 0; 700 return 0;
701 } 701 }
702 702
703 md_write_start(mddev, bio);
704
703 /* 705 /*
704 * Register the new request and wait if the reconstruction 706 * Register the new request and wait if the reconstruction
705 * thread has put up a bar for new requests. 707 * thread has put up a bar for new requests.
@@ -774,7 +776,7 @@ static int make_request(request_queue_t *q, struct bio * bio)
774 rcu_read_unlock(); 776 rcu_read_unlock();
775 777
776 atomic_set(&r10_bio->remaining, 1); 778 atomic_set(&r10_bio->remaining, 1);
777 md_write_start(mddev); 779
778 for (i = 0; i < conf->copies; i++) { 780 for (i = 0; i < conf->copies; i++) {
779 struct bio *mbio; 781 struct bio *mbio;
780 int d = r10_bio->devs[i].devnum; 782 int d = r10_bio->devs[i].devnum;
@@ -1216,7 +1218,6 @@ static void raid10d(mddev_t *mddev)
1216 mdk_rdev_t *rdev; 1218 mdk_rdev_t *rdev;
1217 1219
1218 md_check_recovery(mddev); 1220 md_check_recovery(mddev);
1219 md_handle_safemode(mddev);
1220 1221
1221 for (;;) { 1222 for (;;) {
1222 char b[BDEVNAME_SIZE]; 1223 char b[BDEVNAME_SIZE];
@@ -1319,7 +1320,7 @@ static int init_resync(conf_t *conf)
1319 * 1320 *
1320 */ 1321 */
1321 1322
1322static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster) 1323static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, int go_faster)
1323{ 1324{
1324 conf_t *conf = mddev_to_conf(mddev); 1325 conf_t *conf = mddev_to_conf(mddev);
1325 r10bio_t *r10_bio; 1326 r10bio_t *r10_bio;
@@ -1333,7 +1334,7 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
1333 1334
1334 if (!conf->r10buf_pool) 1335 if (!conf->r10buf_pool)
1335 if (init_resync(conf)) 1336 if (init_resync(conf))
1336 return -ENOMEM; 1337 return 0;
1337 1338
1338 skipped: 1339 skipped:
1339 max_sector = mddev->size << 1; 1340 max_sector = mddev->size << 1;
@@ -1341,15 +1342,15 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
1341 max_sector = mddev->resync_max_sectors; 1342 max_sector = mddev->resync_max_sectors;
1342 if (sector_nr >= max_sector) { 1343 if (sector_nr >= max_sector) {
1343 close_sync(conf); 1344 close_sync(conf);
1345 *skipped = 1;
1344 return sectors_skipped; 1346 return sectors_skipped;
1345 } 1347 }
1346 if (chunks_skipped >= conf->raid_disks) { 1348 if (chunks_skipped >= conf->raid_disks) {
1347 /* if there has been nothing to do on any drive, 1349 /* if there has been nothing to do on any drive,
1348 * then there is nothing to do at all.. 1350 * then there is nothing to do at all..
1349 */ 1351 */
1350 sector_t sec = max_sector - sector_nr; 1352 *skipped = 1;
1351 md_done_sync(mddev, sec, 1); 1353 return (max_sector - sector_nr) + sectors_skipped;
1352 return sec + sectors_skipped;
1353 } 1354 }
1354 1355
1355 /* make sure whole request will fit in a chunk - if chunks 1356 /* make sure whole request will fit in a chunk - if chunks
@@ -1563,17 +1564,22 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
1563 } 1564 }
1564 } 1565 }
1565 1566
1567 if (sectors_skipped)
1568 /* pretend they weren't skipped, it makes
1569 * no important difference in this case
1570 */
1571 md_done_sync(mddev, sectors_skipped, 1);
1572
1566 return sectors_skipped + nr_sectors; 1573 return sectors_skipped + nr_sectors;
1567 giveup: 1574 giveup:
1568 /* There is nowhere to write, so all non-sync 1575 /* There is nowhere to write, so all non-sync
1569 * drives must be failed, so try the next chunk... 1576 * drives must be failed, so try the next chunk...
1570 */ 1577 */
1571 { 1578 {
1572 int sec = max_sector - sector_nr; 1579 sector_t sec = max_sector - sector_nr;
1573 sectors_skipped += sec; 1580 sectors_skipped += sec;
1574 chunks_skipped ++; 1581 chunks_skipped ++;
1575 sector_nr = max_sector; 1582 sector_nr = max_sector;
1576 md_done_sync(mddev, sec, 1);
1577 goto skipped; 1583 goto skipped;
1578 } 1584 }
1579} 1585}
@@ -1731,8 +1737,7 @@ static int run(mddev_t *mddev)
1731out_free_conf: 1737out_free_conf:
1732 if (conf->r10bio_pool) 1738 if (conf->r10bio_pool)
1733 mempool_destroy(conf->r10bio_pool); 1739 mempool_destroy(conf->r10bio_pool);
1734 if (conf->mirrors) 1740 kfree(conf->mirrors);
1735 kfree(conf->mirrors);
1736 kfree(conf); 1741 kfree(conf);
1737 mddev->private = NULL; 1742 mddev->private = NULL;
1738out: 1743out:
@@ -1748,8 +1753,7 @@ static int stop(mddev_t *mddev)
1748 blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/ 1753 blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/
1749 if (conf->r10bio_pool) 1754 if (conf->r10bio_pool)
1750 mempool_destroy(conf->r10bio_pool); 1755 mempool_destroy(conf->r10bio_pool);
1751 if (conf->mirrors) 1756 kfree(conf->mirrors);
1752 kfree(conf->mirrors);
1753 kfree(conf); 1757 kfree(conf);
1754 mddev->private = NULL; 1758 mddev->private = NULL;
1755 return 0; 1759 return 0;
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 3cb11ac232fa..93a9726cc2d6 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -1411,6 +1411,8 @@ static int make_request (request_queue_t *q, struct bio * bi)
1411 sector_t logical_sector, last_sector; 1411 sector_t logical_sector, last_sector;
1412 struct stripe_head *sh; 1412 struct stripe_head *sh;
1413 1413
1414 md_write_start(mddev, bi);
1415
1414 if (bio_data_dir(bi)==WRITE) { 1416 if (bio_data_dir(bi)==WRITE) {
1415 disk_stat_inc(mddev->gendisk, writes); 1417 disk_stat_inc(mddev->gendisk, writes);
1416 disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi)); 1418 disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi));
@@ -1423,8 +1425,7 @@ static int make_request (request_queue_t *q, struct bio * bi)
1423 last_sector = bi->bi_sector + (bi->bi_size>>9); 1425 last_sector = bi->bi_sector + (bi->bi_size>>9);
1424 bi->bi_next = NULL; 1426 bi->bi_next = NULL;
1425 bi->bi_phys_segments = 1; /* over-loaded to count active stripes */ 1427 bi->bi_phys_segments = 1; /* over-loaded to count active stripes */
1426 if ( bio_data_dir(bi) == WRITE ) 1428
1427 md_write_start(mddev);
1428 for (;logical_sector < last_sector; logical_sector += STRIPE_SECTORS) { 1429 for (;logical_sector < last_sector; logical_sector += STRIPE_SECTORS) {
1429 DEFINE_WAIT(w); 1430 DEFINE_WAIT(w);
1430 1431
@@ -1475,7 +1476,7 @@ static int make_request (request_queue_t *q, struct bio * bi)
1475} 1476}
1476 1477
1477/* FIXME go_faster isn't used */ 1478/* FIXME go_faster isn't used */
1478static int sync_request (mddev_t *mddev, sector_t sector_nr, int go_faster) 1479static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, int go_faster)
1479{ 1480{
1480 raid5_conf_t *conf = (raid5_conf_t *) mddev->private; 1481 raid5_conf_t *conf = (raid5_conf_t *) mddev->private;
1481 struct stripe_head *sh; 1482 struct stripe_head *sh;
@@ -1498,8 +1499,8 @@ static int sync_request (mddev_t *mddev, sector_t sector_nr, int go_faster)
1498 * nothing we can do. 1499 * nothing we can do.
1499 */ 1500 */
1500 if (mddev->degraded >= 1 && test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { 1501 if (mddev->degraded >= 1 && test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
1501 int rv = (mddev->size << 1) - sector_nr; 1502 sector_t rv = (mddev->size << 1) - sector_nr;
1502 md_done_sync(mddev, rv, 1); 1503 *skipped = 1;
1503 return rv; 1504 return rv;
1504 } 1505 }
1505 1506
@@ -1546,7 +1547,6 @@ static void raid5d (mddev_t *mddev)
1546 PRINTK("+++ raid5d active\n"); 1547 PRINTK("+++ raid5d active\n");
1547 1548
1548 md_check_recovery(mddev); 1549 md_check_recovery(mddev);
1549 md_handle_safemode(mddev);
1550 1550
1551 handled = 0; 1551 handled = 0;
1552 spin_lock_irq(&conf->device_lock); 1552 spin_lock_irq(&conf->device_lock);
diff --git a/drivers/md/raid6main.c b/drivers/md/raid6main.c
index 908edd78a792..f62ea1a73d0d 100644
--- a/drivers/md/raid6main.c
+++ b/drivers/md/raid6main.c
@@ -1570,6 +1570,8 @@ static int make_request (request_queue_t *q, struct bio * bi)
1570 sector_t logical_sector, last_sector; 1570 sector_t logical_sector, last_sector;
1571 struct stripe_head *sh; 1571 struct stripe_head *sh;
1572 1572
1573 md_write_start(mddev, bi);
1574
1573 if (bio_data_dir(bi)==WRITE) { 1575 if (bio_data_dir(bi)==WRITE) {
1574 disk_stat_inc(mddev->gendisk, writes); 1576 disk_stat_inc(mddev->gendisk, writes);
1575 disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi)); 1577 disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bi));
@@ -1583,8 +1585,7 @@ static int make_request (request_queue_t *q, struct bio * bi)
1583 1585
1584 bi->bi_next = NULL; 1586 bi->bi_next = NULL;
1585 bi->bi_phys_segments = 1; /* over-loaded to count active stripes */ 1587 bi->bi_phys_segments = 1; /* over-loaded to count active stripes */
1586 if ( bio_data_dir(bi) == WRITE ) 1588
1587 md_write_start(mddev);
1588 for (;logical_sector < last_sector; logical_sector += STRIPE_SECTORS) { 1589 for (;logical_sector < last_sector; logical_sector += STRIPE_SECTORS) {
1589 DEFINE_WAIT(w); 1590 DEFINE_WAIT(w);
1590 1591
@@ -1634,7 +1635,7 @@ static int make_request (request_queue_t *q, struct bio * bi)
1634} 1635}
1635 1636
1636/* FIXME go_faster isn't used */ 1637/* FIXME go_faster isn't used */
1637static int sync_request (mddev_t *mddev, sector_t sector_nr, int go_faster) 1638static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, int go_faster)
1638{ 1639{
1639 raid6_conf_t *conf = (raid6_conf_t *) mddev->private; 1640 raid6_conf_t *conf = (raid6_conf_t *) mddev->private;
1640 struct stripe_head *sh; 1641 struct stripe_head *sh;
@@ -1657,8 +1658,8 @@ static int sync_request (mddev_t *mddev, sector_t sector_nr, int go_faster)
1657 * nothing we can do. 1658 * nothing we can do.
1658 */ 1659 */
1659 if (mddev->degraded >= 2 && test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) { 1660 if (mddev->degraded >= 2 && test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
1660 int rv = (mddev->size << 1) - sector_nr; 1661 sector_t rv = (mddev->size << 1) - sector_nr;
1661 md_done_sync(mddev, rv, 1); 1662 *skipped = 1;
1662 return rv; 1663 return rv;
1663 } 1664 }
1664 1665
@@ -1705,7 +1706,6 @@ static void raid6d (mddev_t *mddev)
1705 PRINTK("+++ raid6d active\n"); 1706 PRINTK("+++ raid6d active\n");
1706 1707
1707 md_check_recovery(mddev); 1708 md_check_recovery(mddev);
1708 md_handle_safemode(mddev);
1709 1709
1710 handled = 0; 1710 handled = 0;
1711 spin_lock_irq(&conf->device_lock); 1711 spin_lock_irq(&conf->device_lock);
diff --git a/drivers/misc/ibmasm/command.c b/drivers/misc/ibmasm/command.c
index 245b0058381d..07a085ccbd5b 100644
--- a/drivers/misc/ibmasm/command.c
+++ b/drivers/misc/ibmasm/command.c
@@ -23,6 +23,7 @@
23 */ 23 */
24 24
25#include "ibmasm.h" 25#include "ibmasm.h"
26#include "lowlevel.h"
26 27
27static void exec_next_command(struct service_processor *sp); 28static void exec_next_command(struct service_processor *sp);
28static void free_command(struct kobject *kobj); 29static void free_command(struct kobject *kobj);
@@ -31,8 +32,9 @@ static struct kobj_type ibmasm_cmd_kobj_type = {
31 .release = free_command, 32 .release = free_command,
32}; 33};
33 34
35static atomic_t command_count = ATOMIC_INIT(0);
34 36
35struct command *ibmasm_new_command(size_t buffer_size) 37struct command *ibmasm_new_command(struct service_processor *sp, size_t buffer_size)
36{ 38{
37 struct command *cmd; 39 struct command *cmd;
38 40
@@ -55,11 +57,15 @@ struct command *ibmasm_new_command(size_t buffer_size)
55 57
56 kobject_init(&cmd->kobj); 58 kobject_init(&cmd->kobj);
57 cmd->kobj.ktype = &ibmasm_cmd_kobj_type; 59 cmd->kobj.ktype = &ibmasm_cmd_kobj_type;
60 cmd->lock = &sp->lock;
58 61
59 cmd->status = IBMASM_CMD_PENDING; 62 cmd->status = IBMASM_CMD_PENDING;
60 init_waitqueue_head(&cmd->wait); 63 init_waitqueue_head(&cmd->wait);
61 INIT_LIST_HEAD(&cmd->queue_node); 64 INIT_LIST_HEAD(&cmd->queue_node);
62 65
66 atomic_inc(&command_count);
67 dbg("command count: %d\n", atomic_read(&command_count));
68
63 return cmd; 69 return cmd;
64} 70}
65 71
@@ -68,6 +74,8 @@ static void free_command(struct kobject *kobj)
68 struct command *cmd = to_command(kobj); 74 struct command *cmd = to_command(kobj);
69 75
70 list_del(&cmd->queue_node); 76 list_del(&cmd->queue_node);
77 atomic_dec(&command_count);
78 dbg("command count: %d\n", atomic_read(&command_count));
71 kfree(cmd->buffer); 79 kfree(cmd->buffer);
72 kfree(cmd); 80 kfree(cmd);
73} 81}
@@ -94,8 +102,14 @@ static struct command *dequeue_command(struct service_processor *sp)
94 102
95static inline void do_exec_command(struct service_processor *sp) 103static inline void do_exec_command(struct service_processor *sp)
96{ 104{
105 char tsbuf[32];
106
107 dbg("%s:%d at %s\n", __FUNCTION__, __LINE__, get_timestamp(tsbuf));
108
97 if (ibmasm_send_i2o_message(sp)) { 109 if (ibmasm_send_i2o_message(sp)) {
98 sp->current_command->status = IBMASM_CMD_FAILED; 110 sp->current_command->status = IBMASM_CMD_FAILED;
111 wake_up(&sp->current_command->wait);
112 command_put(sp->current_command);
99 exec_next_command(sp); 113 exec_next_command(sp);
100 } 114 }
101} 115}
@@ -111,14 +125,16 @@ static inline void do_exec_command(struct service_processor *sp)
111void ibmasm_exec_command(struct service_processor *sp, struct command *cmd) 125void ibmasm_exec_command(struct service_processor *sp, struct command *cmd)
112{ 126{
113 unsigned long flags; 127 unsigned long flags;
128 char tsbuf[32];
129
130 dbg("%s:%d at %s\n", __FUNCTION__, __LINE__, get_timestamp(tsbuf));
114 131
115 spin_lock_irqsave(&sp->lock, flags); 132 spin_lock_irqsave(&sp->lock, flags);
116 133
117 if (!sp->current_command) { 134 if (!sp->current_command) {
118 command_get(cmd);
119 sp->current_command = cmd; 135 sp->current_command = cmd;
136 command_get(sp->current_command);
120 spin_unlock_irqrestore(&sp->lock, flags); 137 spin_unlock_irqrestore(&sp->lock, flags);
121
122 do_exec_command(sp); 138 do_exec_command(sp);
123 } else { 139 } else {
124 enqueue_command(sp, cmd); 140 enqueue_command(sp, cmd);
@@ -129,9 +145,9 @@ void ibmasm_exec_command(struct service_processor *sp, struct command *cmd)
129static void exec_next_command(struct service_processor *sp) 145static void exec_next_command(struct service_processor *sp)
130{ 146{
131 unsigned long flags; 147 unsigned long flags;
148 char tsbuf[32];
132 149
133 wake_up(&sp->current_command->wait); 150 dbg("%s:%d at %s\n", __FUNCTION__, __LINE__, get_timestamp(tsbuf));
134 command_put(sp->current_command);
135 151
136 spin_lock_irqsave(&sp->lock, flags); 152 spin_lock_irqsave(&sp->lock, flags);
137 sp->current_command = dequeue_command(sp); 153 sp->current_command = dequeue_command(sp);
@@ -169,7 +185,9 @@ void ibmasm_receive_command_response(struct service_processor *sp, void *respons
169 if (!sp->current_command) 185 if (!sp->current_command)
170 return; 186 return;
171 187
172 memcpy(cmd->buffer, response, min(size, cmd->buffer_size)); 188 memcpy_fromio(cmd->buffer, response, min(size, cmd->buffer_size));
173 cmd->status = IBMASM_CMD_COMPLETE; 189 cmd->status = IBMASM_CMD_COMPLETE;
190 wake_up(&sp->current_command->wait);
191 command_put(sp->current_command);
174 exec_next_command(sp); 192 exec_next_command(sp);
175} 193}
diff --git a/drivers/misc/ibmasm/dot_command.c b/drivers/misc/ibmasm/dot_command.c
index 478a8d898fc1..13c52f866e2e 100644
--- a/drivers/misc/ibmasm/dot_command.c
+++ b/drivers/misc/ibmasm/dot_command.c
@@ -33,7 +33,13 @@ void ibmasm_receive_message(struct service_processor *sp, void *message, int mes
33 u32 size; 33 u32 size;
34 struct dot_command_header *header = (struct dot_command_header *)message; 34 struct dot_command_header *header = (struct dot_command_header *)message;
35 35
36 if (message_size == 0)
37 return;
38
36 size = get_dot_command_size(message); 39 size = get_dot_command_size(message);
40 if (size == 0)
41 return;
42
37 if (size > message_size) 43 if (size > message_size)
38 size = message_size; 44 size = message_size;
39 45
@@ -67,7 +73,7 @@ int ibmasm_send_driver_vpd(struct service_processor *sp)
67 u8 *vpd_data; 73 u8 *vpd_data;
68 int result = 0; 74 int result = 0;
69 75
70 command = ibmasm_new_command(INIT_BUFFER_SIZE); 76 command = ibmasm_new_command(sp, INIT_BUFFER_SIZE);
71 if (command == NULL) 77 if (command == NULL)
72 return -ENOMEM; 78 return -ENOMEM;
73 79
@@ -121,7 +127,7 @@ int ibmasm_send_os_state(struct service_processor *sp, int os_state)
121 struct os_state_command *os_state_cmd; 127 struct os_state_command *os_state_cmd;
122 int result = 0; 128 int result = 0;
123 129
124 cmd = ibmasm_new_command(sizeof(struct os_state_command)); 130 cmd = ibmasm_new_command(sp, sizeof(struct os_state_command));
125 if (cmd == NULL) 131 if (cmd == NULL)
126 return -ENOMEM; 132 return -ENOMEM;
127 133
diff --git a/drivers/misc/ibmasm/event.c b/drivers/misc/ibmasm/event.c
index e100f34f1587..fe1e819235a4 100644
--- a/drivers/misc/ibmasm/event.c
+++ b/drivers/misc/ibmasm/event.c
@@ -23,6 +23,7 @@
23 */ 23 */
24 24
25#include "ibmasm.h" 25#include "ibmasm.h"
26#include "lowlevel.h"
26 27
27/* 28/*
28 * ASM service processor event handling routines. 29 * ASM service processor event handling routines.
@@ -34,7 +35,6 @@
34 * circular buffer. 35 * circular buffer.
35 */ 36 */
36 37
37
38static void wake_up_event_readers(struct service_processor *sp) 38static void wake_up_event_readers(struct service_processor *sp)
39{ 39{
40 struct event_reader *reader; 40 struct event_reader *reader;
@@ -63,7 +63,7 @@ void ibmasm_receive_event(struct service_processor *sp, void *data, unsigned int
63 spin_lock_irqsave(&sp->lock, flags); 63 spin_lock_irqsave(&sp->lock, flags);
64 /* copy the event into the next slot in the circular buffer */ 64 /* copy the event into the next slot in the circular buffer */
65 event = &buffer->events[buffer->next_index]; 65 event = &buffer->events[buffer->next_index];
66 memcpy(event->data, data, data_size); 66 memcpy_fromio(event->data, data, data_size);
67 event->data_size = data_size; 67 event->data_size = data_size;
68 event->serial_number = buffer->next_serial_number; 68 event->serial_number = buffer->next_serial_number;
69 69
@@ -93,7 +93,10 @@ int ibmasm_get_next_event(struct service_processor *sp, struct event_reader *rea
93 unsigned int index; 93 unsigned int index;
94 unsigned long flags; 94 unsigned long flags;
95 95
96 if (wait_event_interruptible(reader->wait, event_available(buffer, reader))) 96 reader->cancelled = 0;
97
98 if (wait_event_interruptible(reader->wait,
99 event_available(buffer, reader) || reader->cancelled))
97 return -ERESTARTSYS; 100 return -ERESTARTSYS;
98 101
99 if (!event_available(buffer, reader)) 102 if (!event_available(buffer, reader))
@@ -116,6 +119,12 @@ int ibmasm_get_next_event(struct service_processor *sp, struct event_reader *rea
116 return event->data_size; 119 return event->data_size;
117} 120}
118 121
122void ibmasm_cancel_next_event(struct event_reader *reader)
123{
124 reader->cancelled = 1;
125 wake_up_interruptible(&reader->wait);
126}
127
119void ibmasm_event_reader_register(struct service_processor *sp, struct event_reader *reader) 128void ibmasm_event_reader_register(struct service_processor *sp, struct event_reader *reader)
120{ 129{
121 unsigned long flags; 130 unsigned long flags;
@@ -131,8 +140,6 @@ void ibmasm_event_reader_unregister(struct service_processor *sp, struct event_r
131{ 140{
132 unsigned long flags; 141 unsigned long flags;
133 142
134 wake_up_interruptible(&reader->wait);
135
136 spin_lock_irqsave(&sp->lock, flags); 143 spin_lock_irqsave(&sp->lock, flags);
137 list_del(&reader->node); 144 list_del(&reader->node);
138 spin_unlock_irqrestore(&sp->lock, flags); 145 spin_unlock_irqrestore(&sp->lock, flags);
@@ -164,6 +171,5 @@ int ibmasm_event_buffer_init(struct service_processor *sp)
164 171
165void ibmasm_event_buffer_exit(struct service_processor *sp) 172void ibmasm_event_buffer_exit(struct service_processor *sp)
166{ 173{
167 wake_up_event_readers(sp);
168 kfree(sp->event_buffer); 174 kfree(sp->event_buffer);
169} 175}
diff --git a/drivers/misc/ibmasm/heartbeat.c b/drivers/misc/ibmasm/heartbeat.c
index ce09309174d6..f295401fac21 100644
--- a/drivers/misc/ibmasm/heartbeat.c
+++ b/drivers/misc/ibmasm/heartbeat.c
@@ -25,6 +25,7 @@
25#include <linux/notifier.h> 25#include <linux/notifier.h>
26#include "ibmasm.h" 26#include "ibmasm.h"
27#include "dot_command.h" 27#include "dot_command.h"
28#include "lowlevel.h"
28 29
29static int suspend_heartbeats = 0; 30static int suspend_heartbeats = 0;
30 31
@@ -62,7 +63,7 @@ void ibmasm_unregister_panic_notifier(void)
62 63
63int ibmasm_heartbeat_init(struct service_processor *sp) 64int ibmasm_heartbeat_init(struct service_processor *sp)
64{ 65{
65 sp->heartbeat = ibmasm_new_command(HEARTBEAT_BUFFER_SIZE); 66 sp->heartbeat = ibmasm_new_command(sp, HEARTBEAT_BUFFER_SIZE);
66 if (sp->heartbeat == NULL) 67 if (sp->heartbeat == NULL)
67 return -ENOMEM; 68 return -ENOMEM;
68 69
@@ -71,6 +72,12 @@ int ibmasm_heartbeat_init(struct service_processor *sp)
71 72
72void ibmasm_heartbeat_exit(struct service_processor *sp) 73void ibmasm_heartbeat_exit(struct service_processor *sp)
73{ 74{
75 char tsbuf[32];
76
77 dbg("%s:%d at %s\n", __FUNCTION__, __LINE__, get_timestamp(tsbuf));
78 ibmasm_wait_for_response(sp->heartbeat, IBMASM_CMD_TIMEOUT_NORMAL);
79 dbg("%s:%d at %s\n", __FUNCTION__, __LINE__, get_timestamp(tsbuf));
80 suspend_heartbeats = 1;
74 command_put(sp->heartbeat); 81 command_put(sp->heartbeat);
75} 82}
76 83
@@ -78,14 +85,16 @@ void ibmasm_receive_heartbeat(struct service_processor *sp, void *message, size
78{ 85{
79 struct command *cmd = sp->heartbeat; 86 struct command *cmd = sp->heartbeat;
80 struct dot_command_header *header = (struct dot_command_header *)cmd->buffer; 87 struct dot_command_header *header = (struct dot_command_header *)cmd->buffer;
88 char tsbuf[32];
81 89
90 dbg("%s:%d at %s\n", __FUNCTION__, __LINE__, get_timestamp(tsbuf));
82 if (suspend_heartbeats) 91 if (suspend_heartbeats)
83 return; 92 return;
84 93
85 /* return the received dot command to sender */ 94 /* return the received dot command to sender */
86 cmd->status = IBMASM_CMD_PENDING; 95 cmd->status = IBMASM_CMD_PENDING;
87 size = min(size, cmd->buffer_size); 96 size = min(size, cmd->buffer_size);
88 memcpy(cmd->buffer, message, size); 97 memcpy_fromio(cmd->buffer, message, size);
89 header->type = sp_write; 98 header->type = sp_write;
90 ibmasm_exec_command(sp, cmd); 99 ibmasm_exec_command(sp, cmd);
91} 100}
diff --git a/drivers/misc/ibmasm/ibmasm.h b/drivers/misc/ibmasm/ibmasm.h
index 6fec7fd8cd1a..ecce4ffd3e23 100644
--- a/drivers/misc/ibmasm/ibmasm.h
+++ b/drivers/misc/ibmasm/ibmasm.h
@@ -34,16 +34,31 @@
34#include <linux/version.h> 34#include <linux/version.h>
35#include <linux/interrupt.h> 35#include <linux/interrupt.h>
36#include <linux/device.h> 36#include <linux/device.h>
37#include <linux/input.h>
37 38
38/* Driver identification */ 39/* Driver identification */
39#define DRIVER_NAME "ibmasm" 40#define DRIVER_NAME "ibmasm"
40#define DRIVER_VERSION "0.4" 41#define DRIVER_VERSION "1.0"
41#define DRIVER_AUTHOR "Max Asbock" 42#define DRIVER_AUTHOR "Max Asbock <masbock@us.ibm.com>, Vernon Mauery <vernux@us.ibm.com>"
42#define DRIVER_DESC "IBM ASM Service Processor Driver" 43#define DRIVER_DESC "IBM ASM Service Processor Driver"
43 44
44#define err(msg) printk(KERN_ERR "%s: " msg "\n", DRIVER_NAME) 45#define err(msg) printk(KERN_ERR "%s: " msg "\n", DRIVER_NAME)
45#define info(msg) printk(KERN_INFO "%s: " msg "\n", DRIVER_NAME) 46#define info(msg) printk(KERN_INFO "%s: " msg "\n", DRIVER_NAME)
46 47
48extern int ibmasm_debug;
49#define dbg(STR, ARGS...) \
50 do { \
51 if (ibmasm_debug) \
52 printk(KERN_DEBUG STR , ##ARGS); \
53 } while (0)
54
55static inline char *get_timestamp(char *buf)
56{
57 struct timeval now;
58 do_gettimeofday(&now);
59 sprintf(buf, "%lu.%lu", now.tv_sec, now.tv_usec);
60 return buf;
61}
47 62
48#define IBMASM_CMD_PENDING 0 63#define IBMASM_CMD_PENDING 0
49#define IBMASM_CMD_COMPLETE 1 64#define IBMASM_CMD_COMPLETE 1
@@ -52,7 +67,7 @@
52#define IBMASM_CMD_TIMEOUT_NORMAL 45 67#define IBMASM_CMD_TIMEOUT_NORMAL 45
53#define IBMASM_CMD_TIMEOUT_EXTRA 240 68#define IBMASM_CMD_TIMEOUT_EXTRA 240
54 69
55#define IBMASM_CMD_MAX_BUFFER_SIZE 0x4000 70#define IBMASM_CMD_MAX_BUFFER_SIZE 0x8000
56 71
57#define REVERSE_HEARTBEAT_TIMEOUT 120 72#define REVERSE_HEARTBEAT_TIMEOUT 120
58 73
@@ -80,12 +95,17 @@ struct command {
80 size_t buffer_size; 95 size_t buffer_size;
81 int status; 96 int status;
82 struct kobject kobj; 97 struct kobject kobj;
98 spinlock_t *lock;
83}; 99};
84#define to_command(c) container_of(c, struct command, kobj) 100#define to_command(c) container_of(c, struct command, kobj)
85 101
86static inline void command_put(struct command *cmd) 102static inline void command_put(struct command *cmd)
87{ 103{
104 unsigned long flags;
105
106 spin_lock_irqsave(cmd->lock, flags);
88 kobject_put(&cmd->kobj); 107 kobject_put(&cmd->kobj);
108 spin_unlock_irqrestore(cmd->lock, flags);
89} 109}
90 110
91static inline void command_get(struct command *cmd) 111static inline void command_get(struct command *cmd)
@@ -108,6 +128,7 @@ struct event_buffer {
108}; 128};
109 129
110struct event_reader { 130struct event_reader {
131 int cancelled;
111 unsigned int next_serial_number; 132 unsigned int next_serial_number;
112 wait_queue_head_t wait; 133 wait_queue_head_t wait;
113 struct list_head node; 134 struct list_head node;
@@ -120,41 +141,11 @@ struct reverse_heartbeat {
120 unsigned int stopped; 141 unsigned int stopped;
121}; 142};
122 143
123 144struct ibmasm_remote {
124/* remote console events */ 145 struct input_dev keybd_dev;
125struct mouse_event { 146 struct input_dev mouse_dev;
126 long x;
127 long y;
128 unsigned char buttons;
129 unsigned char transitions;
130};
131
132struct keyboard_event {
133 unsigned long key_code;
134 unsigned char key_down;
135}; 147};
136 148
137struct remote_event {
138 unsigned long type;
139 union {
140 struct mouse_event mouse;
141 struct keyboard_event keyboard;
142 } data;
143};
144
145#define DRIVER_REMOTE_QUEUE_SIZE 240
146
147struct remote_queue {
148 struct remote_event *start;
149 struct remote_event *end;
150 struct remote_event *reader;
151 struct remote_event *writer;
152 unsigned int size;
153 int open;
154 wait_queue_head_t wait;
155};
156
157
158struct service_processor { 149struct service_processor {
159 struct list_head node; 150 struct list_head node;
160 spinlock_t lock; 151 spinlock_t lock;
@@ -167,13 +158,13 @@ struct service_processor {
167 char dirname[IBMASM_NAME_SIZE]; 158 char dirname[IBMASM_NAME_SIZE];
168 char devname[IBMASM_NAME_SIZE]; 159 char devname[IBMASM_NAME_SIZE];
169 unsigned int number; 160 unsigned int number;
170 struct remote_queue remote_queue; 161 struct ibmasm_remote *remote;
171 int serial_line; 162 int serial_line;
172 struct device *dev; 163 struct device *dev;
173}; 164};
174 165
175/* command processing */ 166/* command processing */
176extern struct command *ibmasm_new_command(size_t buffer_size); 167extern struct command *ibmasm_new_command(struct service_processor *sp, size_t buffer_size);
177extern void ibmasm_exec_command(struct service_processor *sp, struct command *cmd); 168extern void ibmasm_exec_command(struct service_processor *sp, struct command *cmd);
178extern void ibmasm_wait_for_response(struct command *cmd, int timeout); 169extern void ibmasm_wait_for_response(struct command *cmd, int timeout);
179extern void ibmasm_receive_command_response(struct service_processor *sp, void *response, size_t size); 170extern void ibmasm_receive_command_response(struct service_processor *sp, void *response, size_t size);
@@ -185,6 +176,7 @@ extern void ibmasm_receive_event(struct service_processor *sp, void *data, unsi
185extern void ibmasm_event_reader_register(struct service_processor *sp, struct event_reader *reader); 176extern void ibmasm_event_reader_register(struct service_processor *sp, struct event_reader *reader);
186extern void ibmasm_event_reader_unregister(struct service_processor *sp, struct event_reader *reader); 177extern void ibmasm_event_reader_unregister(struct service_processor *sp, struct event_reader *reader);
187extern int ibmasm_get_next_event(struct service_processor *sp, struct event_reader *reader); 178extern int ibmasm_get_next_event(struct service_processor *sp, struct event_reader *reader);
179extern void ibmasm_cancel_next_event(struct event_reader *reader);
188 180
189/* heartbeat - from SP to OS */ 181/* heartbeat - from SP to OS */
190extern void ibmasm_register_panic_notifier(void); 182extern void ibmasm_register_panic_notifier(void);
@@ -208,11 +200,9 @@ extern int ibmasm_send_i2o_message(struct service_processor *sp);
208extern irqreturn_t ibmasm_interrupt_handler(int irq, void * dev_id, struct pt_regs *regs); 200extern irqreturn_t ibmasm_interrupt_handler(int irq, void * dev_id, struct pt_regs *regs);
209 201
210/* remote console */ 202/* remote console */
211extern void ibmasm_handle_mouse_interrupt(struct service_processor *sp); 203extern void ibmasm_handle_mouse_interrupt(struct service_processor *sp, struct pt_regs *regs);
212extern int ibmasm_init_remote_queue(struct service_processor *sp); 204extern int ibmasm_init_remote_input_dev(struct service_processor *sp);
213extern void ibmasm_free_remote_queue(struct service_processor *sp); 205extern void ibmasm_free_remote_input_dev(struct service_processor *sp);
214extern void ibmasm_advance_reader(struct remote_queue *q, unsigned int n);
215extern size_t ibmasm_events_available(struct remote_queue *q);
216 206
217/* file system */ 207/* file system */
218extern int ibmasmfs_register(void); 208extern int ibmasmfs_register(void);
diff --git a/drivers/misc/ibmasm/ibmasmfs.c b/drivers/misc/ibmasm/ibmasmfs.c
index 866e867e68f2..5c550fcac2c4 100644
--- a/drivers/misc/ibmasm/ibmasmfs.c
+++ b/drivers/misc/ibmasm/ibmasmfs.c
@@ -37,9 +37,7 @@
37 * | |-- event 37 * | |-- event
38 * | |-- reverse_heartbeat 38 * | |-- reverse_heartbeat
39 * | `-- remote_video 39 * | `-- remote_video
40 * | |-- connected
41 * | |-- depth 40 * | |-- depth
42 * | |-- events
43 * | |-- height 41 * | |-- height
44 * | `-- width 42 * | `-- width
45 * . 43 * .
@@ -50,9 +48,7 @@
50 * |-- event 48 * |-- event
51 * |-- reverse_heartbeat 49 * |-- reverse_heartbeat
52 * `-- remote_video 50 * `-- remote_video
53 * |-- connected
54 * |-- depth 51 * |-- depth
55 * |-- events
56 * |-- height 52 * |-- height
57 * `-- width 53 * `-- width
58 * 54 *
@@ -75,14 +71,6 @@
75 * remote_video/width: control remote display settings 71 * remote_video/width: control remote display settings
76 * write: set value 72 * write: set value
77 * read: read value 73 * read: read value
78 *
79 * remote_video/connected
80 * read: return "1" if web browser VNC java applet is connected,
81 * "0" otherwise
82 *
83 * remote_video/events
84 * read: sleep until a remote mouse or keyboard event occurs, then return
85 * then event.
86 */ 74 */
87 75
88#include <linux/fs.h> 76#include <linux/fs.h>
@@ -333,7 +321,7 @@ static ssize_t command_file_write(struct file *file, const char __user *ubuff, s
333 if (command_data->command) 321 if (command_data->command)
334 return -EAGAIN; 322 return -EAGAIN;
335 323
336 cmd = ibmasm_new_command(count); 324 cmd = ibmasm_new_command(command_data->sp, count);
337 if (!cmd) 325 if (!cmd)
338 return -ENOMEM; 326 return -ENOMEM;
339 327
@@ -374,6 +362,7 @@ static int event_file_open(struct inode *inode, struct file *file)
374 ibmasm_event_reader_register(sp, &event_data->reader); 362 ibmasm_event_reader_register(sp, &event_data->reader);
375 363
376 event_data->sp = sp; 364 event_data->sp = sp;
365 event_data->active = 0;
377 file->private_data = event_data; 366 file->private_data = event_data;
378 return 0; 367 return 0;
379} 368}
@@ -391,7 +380,9 @@ static ssize_t event_file_read(struct file *file, char __user *buf, size_t count
391{ 380{
392 struct ibmasmfs_event_data *event_data = file->private_data; 381 struct ibmasmfs_event_data *event_data = file->private_data;
393 struct event_reader *reader = &event_data->reader; 382 struct event_reader *reader = &event_data->reader;
383 struct service_processor *sp = event_data->sp;
394 int ret; 384 int ret;
385 unsigned long flags;
395 386
396 if (*offset < 0) 387 if (*offset < 0)
397 return -EINVAL; 388 return -EINVAL;
@@ -400,17 +391,32 @@ static ssize_t event_file_read(struct file *file, char __user *buf, size_t count
400 if (*offset != 0) 391 if (*offset != 0)
401 return 0; 392 return 0;
402 393
403 ret = ibmasm_get_next_event(event_data->sp, reader); 394 spin_lock_irqsave(&sp->lock, flags);
395 if (event_data->active) {
396 spin_unlock_irqrestore(&sp->lock, flags);
397 return -EBUSY;
398 }
399 event_data->active = 1;
400 spin_unlock_irqrestore(&sp->lock, flags);
401
402 ret = ibmasm_get_next_event(sp, reader);
404 if (ret <= 0) 403 if (ret <= 0)
405 return ret; 404 goto out;
406 405
407 if (count < reader->data_size) 406 if (count < reader->data_size) {
408 return -EINVAL; 407 ret = -EINVAL;
408 goto out;
409 }
409 410
410 if (copy_to_user(buf, reader->data, reader->data_size)) 411 if (copy_to_user(buf, reader->data, reader->data_size)) {
411 return -EFAULT; 412 ret = -EFAULT;
413 goto out;
414 }
415 ret = reader->data_size;
412 416
413 return reader->data_size; 417out:
418 event_data->active = 0;
419 return ret;
414} 420}
415 421
416static ssize_t event_file_write(struct file *file, const char __user *buf, size_t count, loff_t *offset) 422static ssize_t event_file_write(struct file *file, const char __user *buf, size_t count, loff_t *offset)
@@ -424,7 +430,7 @@ static ssize_t event_file_write(struct file *file, const char __user *buf, size_
424 if (*offset != 0) 430 if (*offset != 0)
425 return 0; 431 return 0;
426 432
427 wake_up_interruptible(&event_data->reader.wait); 433 ibmasm_cancel_next_event(&event_data->reader);
428 return 0; 434 return 0;
429} 435}
430 436
@@ -575,75 +581,6 @@ static ssize_t remote_settings_file_write(struct file *file, const char __user *
575 return count; 581 return count;
576} 582}
577 583
578static int remote_event_file_open(struct inode *inode, struct file *file)
579{
580 struct service_processor *sp;
581 unsigned long flags;
582 struct remote_queue *q;
583
584 file->private_data = inode->u.generic_ip;
585 sp = file->private_data;
586 q = &sp->remote_queue;
587
588 /* allow only one event reader */
589 spin_lock_irqsave(&sp->lock, flags);
590 if (q->open) {
591 spin_unlock_irqrestore(&sp->lock, flags);
592 return -EBUSY;
593 }
594 q->open = 1;
595 spin_unlock_irqrestore(&sp->lock, flags);
596
597 enable_mouse_interrupts(sp);
598
599 return 0;
600}
601
602static int remote_event_file_close(struct inode *inode, struct file *file)
603{
604 struct service_processor *sp = file->private_data;
605
606 disable_mouse_interrupts(sp);
607 wake_up_interruptible(&sp->remote_queue.wait);
608 sp->remote_queue.open = 0;
609
610 return 0;
611}
612
613static ssize_t remote_event_file_read(struct file *file, char __user *buf, size_t count, loff_t *offset)
614{
615 struct service_processor *sp = file->private_data;
616 struct remote_queue *q = &sp->remote_queue;
617 size_t data_size;
618 struct remote_event *reader = q->reader;
619 size_t num_events;
620
621 if (*offset < 0)
622 return -EINVAL;
623 if (count == 0 || count > 1024)
624 return 0;
625 if (*offset != 0)
626 return 0;
627
628 if (wait_event_interruptible(q->wait, q->reader != q->writer))
629 return -ERESTARTSYS;
630
631 /* only get multiples of struct remote_event */
632 num_events = min((count/sizeof(struct remote_event)), ibmasm_events_available(q));
633 if (!num_events)
634 return 0;
635
636 data_size = num_events * sizeof(struct remote_event);
637
638 if (copy_to_user(buf, reader, data_size))
639 return -EFAULT;
640
641 ibmasm_advance_reader(q, num_events);
642
643 return data_size;
644}
645
646
647static struct file_operations command_fops = { 584static struct file_operations command_fops = {
648 .open = command_file_open, 585 .open = command_file_open,
649 .release = command_file_close, 586 .release = command_file_close,
@@ -672,12 +609,6 @@ static struct file_operations remote_settings_fops = {
672 .write = remote_settings_file_write, 609 .write = remote_settings_file_write,
673}; 610};
674 611
675static struct file_operations remote_event_fops = {
676 .open = remote_event_file_open,
677 .release = remote_event_file_close,
678 .read = remote_event_file_read,
679};
680
681 612
682static void ibmasmfs_create_files (struct super_block *sb, struct dentry *root) 613static void ibmasmfs_create_files (struct super_block *sb, struct dentry *root)
683{ 614{
@@ -703,7 +634,5 @@ static void ibmasmfs_create_files (struct super_block *sb, struct dentry *root)
703 ibmasmfs_create_file(sb, remote_dir, "width", &remote_settings_fops, (void *)display_width(sp), S_IRUSR|S_IWUSR); 634 ibmasmfs_create_file(sb, remote_dir, "width", &remote_settings_fops, (void *)display_width(sp), S_IRUSR|S_IWUSR);
704 ibmasmfs_create_file(sb, remote_dir, "height", &remote_settings_fops, (void *)display_height(sp), S_IRUSR|S_IWUSR); 635 ibmasmfs_create_file(sb, remote_dir, "height", &remote_settings_fops, (void *)display_height(sp), S_IRUSR|S_IWUSR);
705 ibmasmfs_create_file(sb, remote_dir, "depth", &remote_settings_fops, (void *)display_depth(sp), S_IRUSR|S_IWUSR); 636 ibmasmfs_create_file(sb, remote_dir, "depth", &remote_settings_fops, (void *)display_depth(sp), S_IRUSR|S_IWUSR);
706 ibmasmfs_create_file(sb, remote_dir, "connected", &remote_settings_fops, (void *)vnc_status(sp), S_IRUSR);
707 ibmasmfs_create_file(sb, remote_dir, "events", &remote_event_fops, (void *)sp, S_IRUSR);
708 } 637 }
709} 638}
diff --git a/drivers/misc/ibmasm/lowlevel.c b/drivers/misc/ibmasm/lowlevel.c
index 5156de2759d8..47949a2c7e94 100644
--- a/drivers/misc/ibmasm/lowlevel.c
+++ b/drivers/misc/ibmasm/lowlevel.c
@@ -46,8 +46,8 @@ int ibmasm_send_i2o_message(struct service_processor *sp)
46 46
47 message = get_i2o_message(sp->base_address, mfa); 47 message = get_i2o_message(sp->base_address, mfa);
48 48
49 memcpy(&message->header, &header, sizeof(struct i2o_header)); 49 memcpy_toio(&message->header, &header, sizeof(struct i2o_header));
50 memcpy(&message->data, command->buffer, command_size); 50 memcpy_toio(&message->data, command->buffer, command_size);
51 51
52 set_mfa_inbound(sp->base_address, mfa); 52 set_mfa_inbound(sp->base_address, mfa);
53 53
@@ -59,23 +59,27 @@ irqreturn_t ibmasm_interrupt_handler(int irq, void * dev_id, struct pt_regs *reg
59 u32 mfa; 59 u32 mfa;
60 struct service_processor *sp = (struct service_processor *)dev_id; 60 struct service_processor *sp = (struct service_processor *)dev_id;
61 void __iomem *base_address = sp->base_address; 61 void __iomem *base_address = sp->base_address;
62 char tsbuf[32];
62 63
63 if (!sp_interrupt_pending(base_address)) 64 if (!sp_interrupt_pending(base_address))
64 return IRQ_NONE; 65 return IRQ_NONE;
65 66
67 dbg("respond to interrupt at %s\n", get_timestamp(tsbuf));
68
66 if (mouse_interrupt_pending(sp)) { 69 if (mouse_interrupt_pending(sp)) {
67 ibmasm_handle_mouse_interrupt(sp); 70 ibmasm_handle_mouse_interrupt(sp, regs);
68 mfa = get_mfa_outbound(base_address);
69 clear_mouse_interrupt(sp); 71 clear_mouse_interrupt(sp);
70 set_mfa_outbound(base_address, mfa);
71 return IRQ_HANDLED;
72 } 72 }
73 73
74 mfa = get_mfa_outbound(base_address); 74 mfa = get_mfa_outbound(base_address);
75 if (valid_mfa(mfa)) { 75 if (valid_mfa(mfa)) {
76 struct i2o_message *msg = get_i2o_message(base_address, mfa); 76 struct i2o_message *msg = get_i2o_message(base_address, mfa);
77 ibmasm_receive_message(sp, &msg->data, incoming_data_size(msg)); 77 ibmasm_receive_message(sp, &msg->data, incoming_data_size(msg));
78 } 78 } else
79 dbg("didn't get a valid MFA\n");
80
79 set_mfa_outbound(base_address, mfa); 81 set_mfa_outbound(base_address, mfa);
82 dbg("finished interrupt at %s\n", get_timestamp(tsbuf));
83
80 return IRQ_HANDLED; 84 return IRQ_HANDLED;
81} 85}
diff --git a/drivers/misc/ibmasm/module.c b/drivers/misc/ibmasm/module.c
index 777432ae764a..1fdf03fd2da7 100644
--- a/drivers/misc/ibmasm/module.c
+++ b/drivers/misc/ibmasm/module.c
@@ -56,17 +56,26 @@
56#include "lowlevel.h" 56#include "lowlevel.h"
57#include "remote.h" 57#include "remote.h"
58 58
59int ibmasm_debug = 0;
60module_param(ibmasm_debug, int , S_IRUGO | S_IWUSR);
61MODULE_PARM_DESC(ibmasm_debug, " Set debug mode on or off");
62
59 63
60static int __devinit ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id) 64static int __devinit ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
61{ 65{
62 int err, result = -ENOMEM; 66 int result;
63 struct service_processor *sp; 67 struct service_processor *sp;
64 68
65 if ((err = pci_enable_device(pdev))) { 69 if ((result = pci_enable_device(pdev))) {
66 printk(KERN_ERR "%s: can't enable PCI device at %s\n", 70 dev_err(&pdev->dev, "Failed to enable PCI device\n");
67 DRIVER_NAME, pci_name(pdev)); 71 return result;
68 return err;
69 } 72 }
73 if ((result = pci_request_regions(pdev, DRIVER_NAME))) {
74 dev_err(&pdev->dev, "Failed to allocate PCI resources\n");
75 goto error_resources;
76 }
77 /* vnc client won't work without bus-mastering */
78 pci_set_master(pdev);
70 79
71 sp = kmalloc(sizeof(struct service_processor), GFP_KERNEL); 80 sp = kmalloc(sizeof(struct service_processor), GFP_KERNEL);
72 if (sp == NULL) { 81 if (sp == NULL) {
@@ -76,6 +85,9 @@ static int __devinit ibmasm_init_one(struct pci_dev *pdev, const struct pci_devi
76 } 85 }
77 memset(sp, 0, sizeof(struct service_processor)); 86 memset(sp, 0, sizeof(struct service_processor));
78 87
88 sp->lock = SPIN_LOCK_UNLOCKED;
89 INIT_LIST_HEAD(&sp->command_queue);
90
79 pci_set_drvdata(pdev, (void *)sp); 91 pci_set_drvdata(pdev, (void *)sp);
80 sp->dev = &pdev->dev; 92 sp->dev = &pdev->dev;
81 sp->number = pdev->bus->number; 93 sp->number = pdev->bus->number;
@@ -101,15 +113,6 @@ static int __devinit ibmasm_init_one(struct pci_dev *pdev, const struct pci_devi
101 goto error_ioremap; 113 goto error_ioremap;
102 } 114 }
103 115
104 result = ibmasm_init_remote_queue(sp);
105 if (result) {
106 dev_err(sp->dev, "Failed to initialize remote queue\n");
107 goto error_remote_queue;
108 }
109
110 spin_lock_init(&sp->lock);
111 INIT_LIST_HEAD(&sp->command_queue);
112
113 result = request_irq(sp->irq, ibmasm_interrupt_handler, SA_SHIRQ, sp->devname, (void*)sp); 116 result = request_irq(sp->irq, ibmasm_interrupt_handler, SA_SHIRQ, sp->devname, (void*)sp);
114 if (result) { 117 if (result) {
115 dev_err(sp->dev, "Failed to register interrupt handler\n"); 118 dev_err(sp->dev, "Failed to register interrupt handler\n");
@@ -117,7 +120,12 @@ static int __devinit ibmasm_init_one(struct pci_dev *pdev, const struct pci_devi
117 } 120 }
118 121
119 enable_sp_interrupts(sp->base_address); 122 enable_sp_interrupts(sp->base_address);
120 disable_mouse_interrupts(sp); 123
124 result = ibmasm_init_remote_input_dev(sp);
125 if (result) {
126 dev_err(sp->dev, "Failed to initialize remote queue\n");
127 goto error_send_message;
128 }
121 129
122 result = ibmasm_send_driver_vpd(sp); 130 result = ibmasm_send_driver_vpd(sp);
123 if (result) { 131 if (result) {
@@ -133,30 +141,25 @@ static int __devinit ibmasm_init_one(struct pci_dev *pdev, const struct pci_devi
133 141
134 ibmasm_register_uart(sp); 142 ibmasm_register_uart(sp);
135 143
136 dev_printk(KERN_DEBUG, &pdev->dev, "WARNING: This software may not be supported or function\n");
137 dev_printk(KERN_DEBUG, &pdev->dev, "correctly on your IBM server. Please consult the IBM\n");
138 dev_printk(KERN_DEBUG, &pdev->dev, "ServerProven website\n");
139 dev_printk(KERN_DEBUG, &pdev->dev, "http://www.pc.ibm.com/ww/eserver/xseries/serverproven\n");
140 dev_printk(KERN_DEBUG, &pdev->dev, "for information on the specific driver level and support\n");
141 dev_printk(KERN_DEBUG, &pdev->dev, "statement for your IBM server.\n");
142
143 return 0; 144 return 0;
144 145
145error_send_message: 146error_send_message:
146 disable_sp_interrupts(sp->base_address); 147 disable_sp_interrupts(sp->base_address);
148 ibmasm_free_remote_input_dev(sp);
147 free_irq(sp->irq, (void *)sp); 149 free_irq(sp->irq, (void *)sp);
148error_request_irq: 150error_request_irq:
149 ibmasm_free_remote_queue(sp);
150error_remote_queue:
151 iounmap(sp->base_address); 151 iounmap(sp->base_address);
152error_ioremap: 152error_ioremap:
153 ibmasm_heartbeat_exit(sp); 153 ibmasm_heartbeat_exit(sp);
154error_heartbeat: 154error_heartbeat:
155 ibmasm_event_buffer_exit(sp); 155 ibmasm_event_buffer_exit(sp);
156error_eventbuffer: 156error_eventbuffer:
157 pci_set_drvdata(pdev, NULL);
157 kfree(sp); 158 kfree(sp);
158error_kmalloc: 159error_kmalloc:
159 pci_disable_device(pdev); 160 pci_release_regions(pdev);
161error_resources:
162 pci_disable_device(pdev);
160 163
161 return result; 164 return result;
162} 165}
@@ -165,16 +168,24 @@ static void __devexit ibmasm_remove_one(struct pci_dev *pdev)
165{ 168{
166 struct service_processor *sp = (struct service_processor *)pci_get_drvdata(pdev); 169 struct service_processor *sp = (struct service_processor *)pci_get_drvdata(pdev);
167 170
171 dbg("Unregistering UART\n");
168 ibmasm_unregister_uart(sp); 172 ibmasm_unregister_uart(sp);
169 ibmasm_send_os_state(sp, SYSTEM_STATE_OS_DOWN); 173 dbg("Sending OS down message\n");
174 if (ibmasm_send_os_state(sp, SYSTEM_STATE_OS_DOWN))
175 err("failed to get repsonse to 'Send OS State' command\n");
176 dbg("Disabling heartbeats\n");
177 ibmasm_heartbeat_exit(sp);
178 dbg("Disabling interrupts\n");
170 disable_sp_interrupts(sp->base_address); 179 disable_sp_interrupts(sp->base_address);
171 disable_mouse_interrupts(sp); 180 dbg("Freeing SP irq\n");
172 free_irq(sp->irq, (void *)sp); 181 free_irq(sp->irq, (void *)sp);
173 ibmasm_heartbeat_exit(sp); 182 dbg("Cleaning up\n");
174 ibmasm_free_remote_queue(sp); 183 ibmasm_free_remote_input_dev(sp);
175 iounmap(sp->base_address); 184 iounmap(sp->base_address);
176 ibmasm_event_buffer_exit(sp); 185 ibmasm_event_buffer_exit(sp);
186 pci_set_drvdata(pdev, NULL);
177 kfree(sp); 187 kfree(sp);
188 pci_release_regions(pdev);
178 pci_disable_device(pdev); 189 pci_disable_device(pdev);
179} 190}
180 191
diff --git a/drivers/misc/ibmasm/r_heartbeat.c b/drivers/misc/ibmasm/r_heartbeat.c
index 93d9c1b2ad6f..f8fdb2d5417e 100644
--- a/drivers/misc/ibmasm/r_heartbeat.c
+++ b/drivers/misc/ibmasm/r_heartbeat.c
@@ -63,7 +63,7 @@ int ibmasm_start_reverse_heartbeat(struct service_processor *sp, struct reverse_
63 int times_failed = 0; 63 int times_failed = 0;
64 int result = 1; 64 int result = 1;
65 65
66 cmd = ibmasm_new_command(sizeof rhb_dot_cmd); 66 cmd = ibmasm_new_command(sp, sizeof rhb_dot_cmd);
67 if (!cmd) 67 if (!cmd)
68 return -ENOMEM; 68 return -ENOMEM;
69 69
diff --git a/drivers/misc/ibmasm/remote.c b/drivers/misc/ibmasm/remote.c
index 520c3f10c271..d3c48d23ee51 100644
--- a/drivers/misc/ibmasm/remote.c
+++ b/drivers/misc/ibmasm/remote.c
@@ -1,4 +1,3 @@
1
2/* 1/*
3 * IBM ASM Service Processor Device Driver 2 * IBM ASM Service Processor Device Driver
4 * 3 *
@@ -18,135 +17,256 @@
18 * 17 *
19 * Copyright (C) IBM Corporation, 2004 18 * Copyright (C) IBM Corporation, 2004
20 * 19 *
21 * Author: Max Asböck <amax@us.ibm.com> 20 * Authors: Max Asböck <amax@us.ibm.com>
21 * Vernon Mauery <vernux@us.ibm.com>
22 * 22 *
23 */ 23 */
24 24
25/* Remote mouse and keyboard event handling functions */ 25/* Remote mouse and keyboard event handling functions */
26 26
27#include <linux/pci.h>
27#include "ibmasm.h" 28#include "ibmasm.h"
28#include "remote.h" 29#include "remote.h"
29 30
30int ibmasm_init_remote_queue(struct service_processor *sp) 31static int xmax = 1600;
31{ 32static int ymax = 1200;
32 struct remote_queue *q = &sp->remote_queue;
33
34 disable_mouse_interrupts(sp);
35 33
36 q->open = 0;
37 q->size = 0;
38 34
39 q->start = kmalloc(DRIVER_REMOTE_QUEUE_SIZE * sizeof(struct remote_event), GFP_KERNEL); 35static unsigned short xlate_high[XLATE_SIZE] = {
40 if (q->start == 0) 36 [KEY_SYM_ENTER & 0xff] = KEY_ENTER,
41 return -ENOMEM; 37 [KEY_SYM_KPSLASH & 0xff] = KEY_KPSLASH,
38 [KEY_SYM_KPSTAR & 0xff] = KEY_KPASTERISK,
39 [KEY_SYM_KPMINUS & 0xff] = KEY_KPMINUS,
40 [KEY_SYM_KPDOT & 0xff] = KEY_KPDOT,
41 [KEY_SYM_KPPLUS & 0xff] = KEY_KPPLUS,
42 [KEY_SYM_KP0 & 0xff] = KEY_KP0,
43 [KEY_SYM_KP1 & 0xff] = KEY_KP1,
44 [KEY_SYM_KP2 & 0xff] = KEY_KP2, [KEY_SYM_KPDOWN & 0xff] = KEY_KP2,
45 [KEY_SYM_KP3 & 0xff] = KEY_KP3,
46 [KEY_SYM_KP4 & 0xff] = KEY_KP4, [KEY_SYM_KPLEFT & 0xff] = KEY_KP4,
47 [KEY_SYM_KP5 & 0xff] = KEY_KP5,
48 [KEY_SYM_KP6 & 0xff] = KEY_KP6, [KEY_SYM_KPRIGHT & 0xff] = KEY_KP6,
49 [KEY_SYM_KP7 & 0xff] = KEY_KP7,
50 [KEY_SYM_KP8 & 0xff] = KEY_KP8, [KEY_SYM_KPUP & 0xff] = KEY_KP8,
51 [KEY_SYM_KP9 & 0xff] = KEY_KP9,
52 [KEY_SYM_BK_SPC & 0xff] = KEY_BACKSPACE,
53 [KEY_SYM_TAB & 0xff] = KEY_TAB,
54 [KEY_SYM_CTRL & 0xff] = KEY_LEFTCTRL,
55 [KEY_SYM_ALT & 0xff] = KEY_LEFTALT,
56 [KEY_SYM_INSERT & 0xff] = KEY_INSERT,
57 [KEY_SYM_DELETE & 0xff] = KEY_DELETE,
58 [KEY_SYM_SHIFT & 0xff] = KEY_LEFTSHIFT,
59 [KEY_SYM_UARROW & 0xff] = KEY_UP,
60 [KEY_SYM_DARROW & 0xff] = KEY_DOWN,
61 [KEY_SYM_LARROW & 0xff] = KEY_LEFT,
62 [KEY_SYM_RARROW & 0xff] = KEY_RIGHT,
63 [KEY_SYM_ESCAPE & 0xff] = KEY_ESC,
64 [KEY_SYM_PAGEUP & 0xff] = KEY_PAGEUP,
65 [KEY_SYM_PAGEDOWN & 0xff] = KEY_PAGEDOWN,
66 [KEY_SYM_HOME & 0xff] = KEY_HOME,
67 [KEY_SYM_END & 0xff] = KEY_END,
68 [KEY_SYM_F1 & 0xff] = KEY_F1,
69 [KEY_SYM_F2 & 0xff] = KEY_F2,
70 [KEY_SYM_F3 & 0xff] = KEY_F3,
71 [KEY_SYM_F4 & 0xff] = KEY_F4,
72 [KEY_SYM_F5 & 0xff] = KEY_F5,
73 [KEY_SYM_F6 & 0xff] = KEY_F6,
74 [KEY_SYM_F7 & 0xff] = KEY_F7,
75 [KEY_SYM_F8 & 0xff] = KEY_F8,
76 [KEY_SYM_F9 & 0xff] = KEY_F9,
77 [KEY_SYM_F10 & 0xff] = KEY_F10,
78 [KEY_SYM_F11 & 0xff] = KEY_F11,
79 [KEY_SYM_F12 & 0xff] = KEY_F12,
80 [KEY_SYM_CAP_LOCK & 0xff] = KEY_CAPSLOCK,
81 [KEY_SYM_NUM_LOCK & 0xff] = KEY_NUMLOCK,
82 [KEY_SYM_SCR_LOCK & 0xff] = KEY_SCROLLLOCK,
83};
84static unsigned short xlate[XLATE_SIZE] = {
85 [NO_KEYCODE] = KEY_RESERVED,
86 [KEY_SYM_SPACE] = KEY_SPACE,
87 [KEY_SYM_TILDE] = KEY_GRAVE, [KEY_SYM_BKTIC] = KEY_GRAVE,
88 [KEY_SYM_ONE] = KEY_1, [KEY_SYM_BANG] = KEY_1,
89 [KEY_SYM_TWO] = KEY_2, [KEY_SYM_AT] = KEY_2,
90 [KEY_SYM_THREE] = KEY_3, [KEY_SYM_POUND] = KEY_3,
91 [KEY_SYM_FOUR] = KEY_4, [KEY_SYM_DOLLAR] = KEY_4,
92 [KEY_SYM_FIVE] = KEY_5, [KEY_SYM_PERCENT] = KEY_5,
93 [KEY_SYM_SIX] = KEY_6, [KEY_SYM_CARAT] = KEY_6,
94 [KEY_SYM_SEVEN] = KEY_7, [KEY_SYM_AMPER] = KEY_7,
95 [KEY_SYM_EIGHT] = KEY_8, [KEY_SYM_STAR] = KEY_8,
96 [KEY_SYM_NINE] = KEY_9, [KEY_SYM_LPAREN] = KEY_9,
97 [KEY_SYM_ZERO] = KEY_0, [KEY_SYM_RPAREN] = KEY_0,
98 [KEY_SYM_MINUS] = KEY_MINUS, [KEY_SYM_USCORE] = KEY_MINUS,
99 [KEY_SYM_EQUAL] = KEY_EQUAL, [KEY_SYM_PLUS] = KEY_EQUAL,
100 [KEY_SYM_LBRKT] = KEY_LEFTBRACE, [KEY_SYM_LCURLY] = KEY_LEFTBRACE,
101 [KEY_SYM_RBRKT] = KEY_RIGHTBRACE, [KEY_SYM_RCURLY] = KEY_RIGHTBRACE,
102 [KEY_SYM_SLASH] = KEY_BACKSLASH, [KEY_SYM_PIPE] = KEY_BACKSLASH,
103 [KEY_SYM_TIC] = KEY_APOSTROPHE, [KEY_SYM_QUOTE] = KEY_APOSTROPHE,
104 [KEY_SYM_SEMIC] = KEY_SEMICOLON, [KEY_SYM_COLON] = KEY_SEMICOLON,
105 [KEY_SYM_COMMA] = KEY_COMMA, [KEY_SYM_LT] = KEY_COMMA,
106 [KEY_SYM_PERIOD] = KEY_DOT, [KEY_SYM_GT] = KEY_DOT,
107 [KEY_SYM_BSLASH] = KEY_SLASH, [KEY_SYM_QMARK] = KEY_SLASH,
108 [KEY_SYM_A] = KEY_A, [KEY_SYM_a] = KEY_A,
109 [KEY_SYM_B] = KEY_B, [KEY_SYM_b] = KEY_B,
110 [KEY_SYM_C] = KEY_C, [KEY_SYM_c] = KEY_C,
111 [KEY_SYM_D] = KEY_D, [KEY_SYM_d] = KEY_D,
112 [KEY_SYM_E] = KEY_E, [KEY_SYM_e] = KEY_E,
113 [KEY_SYM_F] = KEY_F, [KEY_SYM_f] = KEY_F,
114 [KEY_SYM_G] = KEY_G, [KEY_SYM_g] = KEY_G,
115 [KEY_SYM_H] = KEY_H, [KEY_SYM_h] = KEY_H,
116 [KEY_SYM_I] = KEY_I, [KEY_SYM_i] = KEY_I,
117 [KEY_SYM_J] = KEY_J, [KEY_SYM_j] = KEY_J,
118 [KEY_SYM_K] = KEY_K, [KEY_SYM_k] = KEY_K,
119 [KEY_SYM_L] = KEY_L, [KEY_SYM_l] = KEY_L,
120 [KEY_SYM_M] = KEY_M, [KEY_SYM_m] = KEY_M,
121 [KEY_SYM_N] = KEY_N, [KEY_SYM_n] = KEY_N,
122 [KEY_SYM_O] = KEY_O, [KEY_SYM_o] = KEY_O,
123 [KEY_SYM_P] = KEY_P, [KEY_SYM_p] = KEY_P,
124 [KEY_SYM_Q] = KEY_Q, [KEY_SYM_q] = KEY_Q,
125 [KEY_SYM_R] = KEY_R, [KEY_SYM_r] = KEY_R,
126 [KEY_SYM_S] = KEY_S, [KEY_SYM_s] = KEY_S,
127 [KEY_SYM_T] = KEY_T, [KEY_SYM_t] = KEY_T,
128 [KEY_SYM_U] = KEY_U, [KEY_SYM_u] = KEY_U,
129 [KEY_SYM_V] = KEY_V, [KEY_SYM_v] = KEY_V,
130 [KEY_SYM_W] = KEY_W, [KEY_SYM_w] = KEY_W,
131 [KEY_SYM_X] = KEY_X, [KEY_SYM_x] = KEY_X,
132 [KEY_SYM_Y] = KEY_Y, [KEY_SYM_y] = KEY_Y,
133 [KEY_SYM_Z] = KEY_Z, [KEY_SYM_z] = KEY_Z,
134};
42 135
43 q->end = q->start + DRIVER_REMOTE_QUEUE_SIZE; 136static char remote_mouse_name[] = "ibmasm RSA I remote mouse";
44 q->reader = q->start; 137static char remote_keybd_name[] = "ibmasm RSA I remote keyboard";
45 q->writer = q->start;
46 q->size = DRIVER_REMOTE_QUEUE_SIZE;
47 init_waitqueue_head(&q->wait);
48 138
49 return 0; 139static void print_input(struct remote_input *input)
50}
51
52void ibmasm_free_remote_queue(struct service_processor *sp)
53{ 140{
54 kfree(sp->remote_queue.start); 141 if (input->type == INPUT_TYPE_MOUSE) {
142 unsigned char buttons = input->mouse_buttons;
143 dbg("remote mouse movement: (x,y)=(%d,%d)%s%s%s%s\n",
144 input->data.mouse.x, input->data.mouse.y,
145 (buttons)?" -- buttons:":"",
146 (buttons & REMOTE_BUTTON_LEFT)?"left ":"",
147 (buttons & REMOTE_BUTTON_MIDDLE)?"middle ":"",
148 (buttons & REMOTE_BUTTON_RIGHT)?"right":""
149 );
150 } else {
151 dbg("remote keypress (code, flag, down):"
152 "%d (0x%x) [0x%x] [0x%x]\n",
153 input->data.keyboard.key_code,
154 input->data.keyboard.key_code,
155 input->data.keyboard.key_flag,
156 input->data.keyboard.key_down
157 );
158 }
55} 159}
56 160
57void ibmasm_advance_reader(struct remote_queue *q, unsigned int n) 161static void send_mouse_event(struct input_dev *dev, struct pt_regs *regs,
162 struct remote_input *input)
58{ 163{
59 q->reader += n; 164 unsigned char buttons = input->mouse_buttons;
60 if (q->reader >= q->end)
61 q->reader -= q->size;
62}
63 165
64size_t ibmasm_events_available(struct remote_queue *q) 166 input_regs(dev, regs);
65{ 167 input_report_abs(dev, ABS_X, input->data.mouse.x);
66 ssize_t diff = q->writer - q->reader; 168 input_report_abs(dev, ABS_Y, input->data.mouse.y);
67 169 input_report_key(dev, BTN_LEFT, buttons & REMOTE_BUTTON_LEFT);
68 return (diff >= 0) ? diff : q->end - q->reader; 170 input_report_key(dev, BTN_MIDDLE, buttons & REMOTE_BUTTON_MIDDLE);
171 input_report_key(dev, BTN_RIGHT, buttons & REMOTE_BUTTON_RIGHT);
172 input_sync(dev);
69} 173}
70
71 174
72static int space_free(struct remote_queue *q) 175static void send_keyboard_event(struct input_dev *dev, struct pt_regs *regs,
176 struct remote_input *input)
73{ 177{
74 if (q->reader == q->writer) 178 unsigned int key;
75 return q->size - 1; 179 unsigned short code = input->data.keyboard.key_code;
76 180
77 return ( (q->reader + q->size - q->writer) % q->size ) - 1; 181 if (code & 0xff00)
182 key = xlate_high[code & 0xff];
183 else
184 key = xlate[code];
185 input_regs(dev, regs);
186 input_report_key(dev, key, (input->data.keyboard.key_down) ? 1 : 0);
187 input_sync(dev);
78} 188}
79 189
80static void set_mouse_event(struct remote_input *input, struct mouse_event *mouse) 190void ibmasm_handle_mouse_interrupt(struct service_processor *sp,
191 struct pt_regs *regs)
81{ 192{
82 static char last_buttons = 0; 193 unsigned long reader;
194 unsigned long writer;
195 struct remote_input input;
83 196
84 mouse->x = input->data.mouse.x; 197 reader = get_queue_reader(sp);
85 mouse->y = input->data.mouse.y; 198 writer = get_queue_writer(sp);
86 199
87 if (input->mouse_buttons == REMOTE_MOUSE_DOUBLE_CLICK) { 200 while (reader != writer) {
88 mouse->buttons = REMOTE_MOUSE_DOUBLE_CLICK; 201 memcpy_fromio(&input, get_queue_entry(sp, reader),
89 last_buttons = 0; 202 sizeof(struct remote_input));
90 return;
91 }
92 mouse->transitions = last_buttons ^ input->mouse_buttons;
93 mouse->buttons = input->mouse_buttons;
94 203
95 last_buttons = input->mouse_buttons; 204 print_input(&input);
96} 205 if (input.type == INPUT_TYPE_MOUSE) {
206 send_mouse_event(&sp->remote->mouse_dev, regs, &input);
207 } else if (input.type == INPUT_TYPE_KEYBOARD) {
208 send_keyboard_event(&sp->remote->keybd_dev, regs, &input);
209 } else
210 break;
97 211
98static void set_keyboard_event(struct remote_input *input, struct keyboard_event *keyboard) 212 reader = advance_queue_reader(sp, reader);
99{ 213 writer = get_queue_writer(sp);
100 keyboard->key_code = input->data.keyboard.key_code; 214 }
101 keyboard->key_down = input->data.keyboard.key_down;
102} 215}
103 216
104static int add_to_driver_queue(struct remote_queue *q, struct remote_input *input) 217int ibmasm_init_remote_input_dev(struct service_processor *sp)
105{ 218{
106 struct remote_event *event = q->writer; 219 /* set up the mouse input device */
220 struct ibmasm_remote *remote;
221 struct pci_dev *pdev = to_pci_dev(sp->dev);
222 int i;
107 223
108 if (space_free(q) < 1) { 224 sp->remote = remote = kmalloc(sizeof(*remote), GFP_KERNEL);
109 return 1; 225 if (!remote)
110 } 226 return -ENOMEM;
111 227
112 switch(input->type) { 228 memset(remote, 0, sizeof(*remote));
113 case (INPUT_TYPE_MOUSE):
114 event->type = INPUT_TYPE_MOUSE;
115 set_mouse_event(input, &event->data.mouse);
116 break;
117 case (INPUT_TYPE_KEYBOARD):
118 event->type = INPUT_TYPE_KEYBOARD;
119 set_keyboard_event(input, &event->data.keyboard);
120 break;
121 default:
122 return 0;
123 }
124 event->type = input->type;
125 229
126 q->writer++; 230 remote->mouse_dev.private = remote;
127 if (q->writer == q->end) 231 init_input_dev(&remote->mouse_dev);
128 q->writer = q->start; 232 remote->mouse_dev.id.vendor = pdev->vendor;
233 remote->mouse_dev.id.product = pdev->device;
234 remote->mouse_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
235 remote->mouse_dev.keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) |
236 BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);
237 set_bit(BTN_TOUCH, remote->mouse_dev.keybit);
238 remote->mouse_dev.name = remote_mouse_name;
239 input_set_abs_params(&remote->mouse_dev, ABS_X, 0, xmax, 0, 0);
240 input_set_abs_params(&remote->mouse_dev, ABS_Y, 0, ymax, 0, 0);
129 241
130 return 0; 242 remote->keybd_dev.private = remote;
131} 243 init_input_dev(&remote->keybd_dev);
132 244 remote->keybd_dev.id.vendor = pdev->vendor;
245 remote->keybd_dev.id.product = pdev->device;
246 remote->keybd_dev.evbit[0] = BIT(EV_KEY);
247 remote->keybd_dev.name = remote_keybd_name;
133 248
134void ibmasm_handle_mouse_interrupt(struct service_processor *sp) 249 for (i=0; i<XLATE_SIZE; i++) {
135{ 250 if (xlate_high[i])
136 unsigned long reader; 251 set_bit(xlate_high[i], remote->keybd_dev.keybit);
137 unsigned long writer; 252 if (xlate[i])
138 struct remote_input input; 253 set_bit(xlate[i], remote->keybd_dev.keybit);
254 }
139 255
140 reader = get_queue_reader(sp); 256 input_register_device(&remote->mouse_dev);
141 writer = get_queue_writer(sp); 257 input_register_device(&remote->keybd_dev);
258 enable_mouse_interrupts(sp);
142 259
143 while (reader != writer) { 260 printk(KERN_INFO "ibmasm remote responding to events on RSA card %d\n", sp->number);
144 memcpy(&input, (void *)get_queue_entry(sp, reader), sizeof(struct remote_input));
145 261
146 if (add_to_driver_queue(&sp->remote_queue, &input)) 262 return 0;
147 break; 263}
148 264
149 reader = advance_queue_reader(sp, reader); 265void ibmasm_free_remote_input_dev(struct service_processor *sp)
150 } 266{
151 wake_up_interruptible(&sp->remote_queue.wait); 267 disable_mouse_interrupts(sp);
268 input_unregister_device(&sp->remote->keybd_dev);
269 input_unregister_device(&sp->remote->mouse_dev);
270 kfree(sp->remote);
152} 271}
272
diff --git a/drivers/misc/ibmasm/remote.h b/drivers/misc/ibmasm/remote.h
index a8eb19f02d3f..b7076a8442d2 100644
--- a/drivers/misc/ibmasm/remote.h
+++ b/drivers/misc/ibmasm/remote.h
@@ -51,11 +51,13 @@
51 51
52 52
53/* mouse button states received from SP */ 53/* mouse button states received from SP */
54#define REMOTE_MOUSE_DOUBLE_CLICK 0xF0 54#define REMOTE_DOUBLE_CLICK 0xF0
55#define REMOTE_MOUSE_BUTTON_LEFT 0x01 55#define REMOTE_BUTTON_LEFT 0x01
56#define REMOTE_MOUSE_BUTTON_MIDDLE 0x02 56#define REMOTE_BUTTON_MIDDLE 0x02
57#define REMOTE_MOUSE_BUTTON_RIGHT 0x04 57#define REMOTE_BUTTON_RIGHT 0x04
58 58
59/* size of keysym/keycode translation matricies */
60#define XLATE_SIZE 256
59 61
60struct mouse_input { 62struct mouse_input {
61 unsigned short y; 63 unsigned short y;
@@ -83,11 +85,13 @@ struct remote_input {
83 unsigned char pad3; 85 unsigned char pad3;
84}; 86};
85 87
86#define mouse_addr(sp) sp->base_address + CONDOR_MOUSE_DATA 88#define mouse_addr(sp) (sp->base_address + CONDOR_MOUSE_DATA)
87#define display_width(sp) mouse_addr(sp) + CONDOR_INPUT_DISPLAY_RESX 89#define display_width(sp) (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_RESX)
88#define display_height(sp) mouse_addr(sp) + CONDOR_INPUT_DISPLAY_RESY 90#define display_height(sp) (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_RESY)
89#define display_depth(sp) mouse_addr(sp) + CONDOR_INPUT_DISPLAY_BITS 91#define display_depth(sp) (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_BITS)
90#define vnc_status(sp) mouse_addr(sp) + CONDOR_OUTPUT_VNC_STATUS 92#define desktop_info(sp) (mouse_addr(sp) + CONDOR_INPUT_DESKTOP_INFO)
93#define vnc_status(sp) (mouse_addr(sp) + CONDOR_OUTPUT_VNC_STATUS)
94#define isr_control(sp) (mouse_addr(sp) + CONDOR_MOUSE_ISR_CONTROL)
91 95
92#define mouse_interrupt_pending(sp) readl(mouse_addr(sp) + CONDOR_MOUSE_ISR_STATUS) 96#define mouse_interrupt_pending(sp) readl(mouse_addr(sp) + CONDOR_MOUSE_ISR_STATUS)
93#define clear_mouse_interrupt(sp) writel(0, mouse_addr(sp) + CONDOR_MOUSE_ISR_STATUS) 97#define clear_mouse_interrupt(sp) writel(0, mouse_addr(sp) + CONDOR_MOUSE_ISR_STATUS)
@@ -101,10 +105,10 @@ struct remote_input {
101#define get_queue_reader(sp) readl(mouse_addr(sp) + CONDOR_MOUSE_Q_READER) 105#define get_queue_reader(sp) readl(mouse_addr(sp) + CONDOR_MOUSE_Q_READER)
102#define set_queue_reader(sp, reader) writel(reader, mouse_addr(sp) + CONDOR_MOUSE_Q_READER) 106#define set_queue_reader(sp, reader) writel(reader, mouse_addr(sp) + CONDOR_MOUSE_Q_READER)
103 107
104#define queue_begin mouse_addr(sp) + CONDOR_MOUSE_Q_BEGIN 108#define queue_begin (mouse_addr(sp) + CONDOR_MOUSE_Q_BEGIN)
105 109
106#define get_queue_entry(sp, read_index) \ 110#define get_queue_entry(sp, read_index) \
107 queue_begin + read_index * sizeof(struct remote_input) 111 ((void*)(queue_begin + read_index * sizeof(struct remote_input)))
108 112
109static inline int advance_queue_reader(struct service_processor *sp, unsigned long reader) 113static inline int advance_queue_reader(struct service_processor *sp, unsigned long reader)
110{ 114{
@@ -116,4 +120,151 @@ static inline int advance_queue_reader(struct service_processor *sp, unsigned lo
116 return reader; 120 return reader;
117} 121}
118 122
123#define NO_KEYCODE 0
124#define KEY_SYM_BK_SPC 0xFF08
125#define KEY_SYM_TAB 0xFF09
126#define KEY_SYM_ENTER 0xFF0D
127#define KEY_SYM_SCR_LOCK 0xFF14
128#define KEY_SYM_ESCAPE 0xFF1B
129#define KEY_SYM_HOME 0xFF50
130#define KEY_SYM_LARROW 0xFF51
131#define KEY_SYM_UARROW 0xFF52
132#define KEY_SYM_RARROW 0xFF53
133#define KEY_SYM_DARROW 0xFF54
134#define KEY_SYM_PAGEUP 0xFF55
135#define KEY_SYM_PAGEDOWN 0xFF56
136#define KEY_SYM_END 0xFF57
137#define KEY_SYM_INSERT 0xFF63
138#define KEY_SYM_NUM_LOCK 0xFF7F
139#define KEY_SYM_KPSTAR 0xFFAA
140#define KEY_SYM_KPPLUS 0xFFAB
141#define KEY_SYM_KPMINUS 0xFFAD
142#define KEY_SYM_KPDOT 0xFFAE
143#define KEY_SYM_KPSLASH 0xFFAF
144#define KEY_SYM_KPRIGHT 0xFF96
145#define KEY_SYM_KPUP 0xFF97
146#define KEY_SYM_KPLEFT 0xFF98
147#define KEY_SYM_KPDOWN 0xFF99
148#define KEY_SYM_KP0 0xFFB0
149#define KEY_SYM_KP1 0xFFB1
150#define KEY_SYM_KP2 0xFFB2
151#define KEY_SYM_KP3 0xFFB3
152#define KEY_SYM_KP4 0xFFB4
153#define KEY_SYM_KP5 0xFFB5
154#define KEY_SYM_KP6 0xFFB6
155#define KEY_SYM_KP7 0xFFB7
156#define KEY_SYM_KP8 0xFFB8
157#define KEY_SYM_KP9 0xFFB9
158#define KEY_SYM_F1 0xFFBE // 1B 5B 5B 41
159#define KEY_SYM_F2 0xFFBF // 1B 5B 5B 42
160#define KEY_SYM_F3 0xFFC0 // 1B 5B 5B 43
161#define KEY_SYM_F4 0xFFC1 // 1B 5B 5B 44
162#define KEY_SYM_F5 0xFFC2 // 1B 5B 5B 45
163#define KEY_SYM_F6 0xFFC3 // 1B 5B 31 37 7E
164#define KEY_SYM_F7 0xFFC4 // 1B 5B 31 38 7E
165#define KEY_SYM_F8 0xFFC5 // 1B 5B 31 39 7E
166#define KEY_SYM_F9 0xFFC6 // 1B 5B 32 30 7E
167#define KEY_SYM_F10 0xFFC7 // 1B 5B 32 31 7E
168#define KEY_SYM_F11 0xFFC8 // 1B 5B 32 33 7E
169#define KEY_SYM_F12 0xFFC9 // 1B 5B 32 34 7E
170#define KEY_SYM_SHIFT 0xFFE1
171#define KEY_SYM_CTRL 0xFFE3
172#define KEY_SYM_ALT 0xFFE9
173#define KEY_SYM_CAP_LOCK 0xFFE5
174#define KEY_SYM_DELETE 0xFFFF
175#define KEY_SYM_TILDE 0x60
176#define KEY_SYM_BKTIC 0x7E
177#define KEY_SYM_ONE 0x31
178#define KEY_SYM_BANG 0x21
179#define KEY_SYM_TWO 0x32
180#define KEY_SYM_AT 0x40
181#define KEY_SYM_THREE 0x33
182#define KEY_SYM_POUND 0x23
183#define KEY_SYM_FOUR 0x34
184#define KEY_SYM_DOLLAR 0x24
185#define KEY_SYM_FIVE 0x35
186#define KEY_SYM_PERCENT 0x25
187#define KEY_SYM_SIX 0x36
188#define KEY_SYM_CARAT 0x5E
189#define KEY_SYM_SEVEN 0x37
190#define KEY_SYM_AMPER 0x26
191#define KEY_SYM_EIGHT 0x38
192#define KEY_SYM_STAR 0x2A
193#define KEY_SYM_NINE 0x39
194#define KEY_SYM_LPAREN 0x28
195#define KEY_SYM_ZERO 0x30
196#define KEY_SYM_RPAREN 0x29
197#define KEY_SYM_MINUS 0x2D
198#define KEY_SYM_USCORE 0x5F
199#define KEY_SYM_EQUAL 0x2B
200#define KEY_SYM_PLUS 0x3D
201#define KEY_SYM_LBRKT 0x5B
202#define KEY_SYM_LCURLY 0x7B
203#define KEY_SYM_RBRKT 0x5D
204#define KEY_SYM_RCURLY 0x7D
205#define KEY_SYM_SLASH 0x5C
206#define KEY_SYM_PIPE 0x7C
207#define KEY_SYM_TIC 0x27
208#define KEY_SYM_QUOTE 0x22
209#define KEY_SYM_SEMIC 0x3B
210#define KEY_SYM_COLON 0x3A
211#define KEY_SYM_COMMA 0x2C
212#define KEY_SYM_LT 0x3C
213#define KEY_SYM_PERIOD 0x2E
214#define KEY_SYM_GT 0x3E
215#define KEY_SYM_BSLASH 0x2F
216#define KEY_SYM_QMARK 0x3F
217#define KEY_SYM_A 0x41
218#define KEY_SYM_B 0x42
219#define KEY_SYM_C 0x43
220#define KEY_SYM_D 0x44
221#define KEY_SYM_E 0x45
222#define KEY_SYM_F 0x46
223#define KEY_SYM_G 0x47
224#define KEY_SYM_H 0x48
225#define KEY_SYM_I 0x49
226#define KEY_SYM_J 0x4A
227#define KEY_SYM_K 0x4B
228#define KEY_SYM_L 0x4C
229#define KEY_SYM_M 0x4D
230#define KEY_SYM_N 0x4E
231#define KEY_SYM_O 0x4F
232#define KEY_SYM_P 0x50
233#define KEY_SYM_Q 0x51
234#define KEY_SYM_R 0x52
235#define KEY_SYM_S 0x53
236#define KEY_SYM_T 0x54
237#define KEY_SYM_U 0x55
238#define KEY_SYM_V 0x56
239#define KEY_SYM_W 0x57
240#define KEY_SYM_X 0x58
241#define KEY_SYM_Y 0x59
242#define KEY_SYM_Z 0x5A
243#define KEY_SYM_a 0x61
244#define KEY_SYM_b 0x62
245#define KEY_SYM_c 0x63
246#define KEY_SYM_d 0x64
247#define KEY_SYM_e 0x65
248#define KEY_SYM_f 0x66
249#define KEY_SYM_g 0x67
250#define KEY_SYM_h 0x68
251#define KEY_SYM_i 0x69
252#define KEY_SYM_j 0x6A
253#define KEY_SYM_k 0x6B
254#define KEY_SYM_l 0x6C
255#define KEY_SYM_m 0x6D
256#define KEY_SYM_n 0x6E
257#define KEY_SYM_o 0x6F
258#define KEY_SYM_p 0x70
259#define KEY_SYM_q 0x71
260#define KEY_SYM_r 0x72
261#define KEY_SYM_s 0x73
262#define KEY_SYM_t 0x74
263#define KEY_SYM_u 0x75
264#define KEY_SYM_v 0x76
265#define KEY_SYM_w 0x77
266#define KEY_SYM_x 0x78
267#define KEY_SYM_y 0x79
268#define KEY_SYM_z 0x7A
269#define KEY_SYM_SPACE 0x20
119#endif /* _IBMASM_REMOTE_H_ */ 270#endif /* _IBMASM_REMOTE_H_ */
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c
index b5e076043431..80ec9aa575bb 100644
--- a/drivers/net/3c59x.c
+++ b/drivers/net/3c59x.c
@@ -2202,9 +2202,8 @@ boomerang_start_xmit(struct sk_buff *skb, struct net_device *dev)
2202 2202
2203 if (vortex_debug > 6) { 2203 if (vortex_debug > 6) {
2204 printk(KERN_DEBUG "boomerang_start_xmit()\n"); 2204 printk(KERN_DEBUG "boomerang_start_xmit()\n");
2205 if (vortex_debug > 3) 2205 printk(KERN_DEBUG "%s: Trying to send a packet, Tx index %d.\n",
2206 printk(KERN_DEBUG "%s: Trying to send a packet, Tx index %d.\n", 2206 dev->name, vp->cur_tx);
2207 dev->name, vp->cur_tx);
2208 } 2207 }
2209 2208
2210 if (vp->cur_tx - vp->dirty_tx >= TX_RING_SIZE) { 2209 if (vp->cur_tx - vp->dirty_tx >= TX_RING_SIZE) {
diff --git a/drivers/net/8390.c b/drivers/net/8390.c
index bab16bcc9ae5..6d76f3a99b17 100644
--- a/drivers/net/8390.c
+++ b/drivers/net/8390.c
@@ -225,9 +225,9 @@ void ei_tx_timeout(struct net_device *dev)
225 unsigned long icucr; 225 unsigned long icucr;
226 226
227 local_irq_save(flags); 227 local_irq_save(flags);
228 icucr = inl(ICUCR1); 228 icucr = inl(M32R_ICU_CR1_PORTL);
229 icucr |= M32R_ICUCR_ISMOD11; 229 icucr |= M32R_ICUCR_ISMOD11;
230 outl(icucr, ICUCR1); 230 outl(icucr, M32R_ICU_CR1_PORTL);
231 local_irq_restore(flags); 231 local_irq_restore(flags);
232#endif 232#endif
233 ei_local->stat.tx_errors++; 233 ei_local->stat.tx_errors++;
diff --git a/drivers/oprofile/buffer_sync.c b/drivers/oprofile/buffer_sync.c
index 55720dc6ec43..745a14183634 100644
--- a/drivers/oprofile/buffer_sync.c
+++ b/drivers/oprofile/buffer_sync.c
@@ -62,7 +62,7 @@ static int task_exit_notify(struct notifier_block * self, unsigned long val, voi
62 /* To avoid latency problems, we only process the current CPU, 62 /* To avoid latency problems, we only process the current CPU,
63 * hoping that most samples for the task are on this CPU 63 * hoping that most samples for the task are on this CPU
64 */ 64 */
65 sync_buffer(_smp_processor_id()); 65 sync_buffer(raw_smp_processor_id());
66 return 0; 66 return 0;
67} 67}
68 68
@@ -86,7 +86,7 @@ static int munmap_notify(struct notifier_block * self, unsigned long val, void *
86 /* To avoid latency problems, we only process the current CPU, 86 /* To avoid latency problems, we only process the current CPU,
87 * hoping that most samples for the task are on this CPU 87 * hoping that most samples for the task are on this CPU
88 */ 88 */
89 sync_buffer(_smp_processor_id()); 89 sync_buffer(raw_smp_processor_id());
90 return 0; 90 return 0;
91 } 91 }
92 92
diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig
index 6375ebc85020..14e4124e1523 100644
--- a/drivers/pcmcia/Kconfig
+++ b/drivers/pcmcia/Kconfig
@@ -171,19 +171,21 @@ config PCMCIA_PROBE
171config M32R_PCC 171config M32R_PCC
172 bool "M32R PCMCIA I/F" 172 bool "M32R PCMCIA I/F"
173 depends on M32R && CHIP_M32700 && PCMCIA 173 depends on M32R && CHIP_M32700 && PCMCIA
174 select PCCARD_NONSTATIC
174 help 175 help
175 Say Y here to use the M32R PCMCIA controller. 176 Say Y here to use the M32R PCMCIA controller.
176 177
177config M32R_CFC 178config M32R_CFC
178 bool "M32R CF I/F Controller" 179 bool "M32R CF I/F Controller"
179 depends on M32R && (PLAT_USRV || PLAT_M32700UT || PLAT_MAPPI2 || PLAT_OPSPUT) 180 depends on M32R && (PLAT_USRV || PLAT_M32700UT || PLAT_MAPPI2 || PLAT_MAPPI3 || PLAT_OPSPUT)
181 select PCCARD_NONSTATIC
180 help 182 help
181 Say Y here to use the M32R CompactFlash controller. 183 Say Y here to use the M32R CompactFlash controller.
182 184
183config M32R_CFC_NUM 185config M32R_CFC_NUM
184 int "M32R CF I/F number" 186 int "M32R CF I/F number"
185 depends on M32R_CFC 187 depends on M32R_CFC
186 default "1" if PLAT_USRV || PLAT_M32700UT || PLAT_MAPPI2 || PLAT_OPSPUT 188 default "1" if PLAT_USRV || PLAT_M32700UT || PLAT_MAPPI2 || PLAT_MAPPI3 || PLAT_OPSPUT
187 help 189 help
188 Set the number of M32R CF slots. 190 Set the number of M32R CF slots.
189 191
diff --git a/drivers/pcmcia/m32r_cfc.c b/drivers/pcmcia/m32r_cfc.c
index 581bfa95429e..b1111c6bf062 100644
--- a/drivers/pcmcia/m32r_cfc.c
+++ b/drivers/pcmcia/m32r_cfc.c
@@ -24,9 +24,9 @@
24#include <linux/workqueue.h> 24#include <linux/workqueue.h>
25#include <linux/interrupt.h> 25#include <linux/interrupt.h>
26#include <linux/device.h> 26#include <linux/device.h>
27#include <linux/bitops.h>
27#include <asm/irq.h> 28#include <asm/irq.h>
28#include <asm/io.h> 29#include <asm/io.h>
29#include <asm/bitops.h>
30#include <asm/system.h> 30#include <asm/system.h>
31 31
32#include <pcmcia/version.h> 32#include <pcmcia/version.h>
@@ -444,7 +444,7 @@ static int _pcc_get_status(u_short sock, u_int *value)
444 debug(3, "m32r_cfc: _pcc_get_status: " 444 debug(3, "m32r_cfc: _pcc_get_status: "
445 "power off (CPCR=0x%08x)\n", status); 445 "power off (CPCR=0x%08x)\n", status);
446 } 446 }
447#elif defined(CONFIG_PLAT_MAPPI2) 447#elif defined(CONFIG_PLAT_MAPPI2) || defined(CONFIG_PLAT_MAPPI3)
448 if ( status ) { 448 if ( status ) {
449 status = pcc_get(sock, (unsigned int)PLD_CPCR); 449 status = pcc_get(sock, (unsigned int)PLD_CPCR);
450 if (status == 0) { /* power off */ 450 if (status == 0) { /* power off */
@@ -452,18 +452,23 @@ static int _pcc_get_status(u_short sock, u_int *value)
452 pcc_set(sock, (unsigned int)PLD_CFBUFCR,0); /* force buffer off for ZA-36 */ 452 pcc_set(sock, (unsigned int)PLD_CFBUFCR,0); /* force buffer off for ZA-36 */
453 udelay(50); 453 udelay(50);
454 } 454 }
455 status = pcc_get(sock, (unsigned int)PLD_CFBUFCR); 455 *value |= SS_POWERON;
456 if (status != 0) { /* buffer off */ 456
457 pcc_set(sock, (unsigned int)PLD_CFBUFCR,0); 457 pcc_set(sock, (unsigned int)PLD_CFBUFCR,0);
458 udelay(50); 458 udelay(50);
459 pcc_set(sock, (unsigned int)PLD_CFRSTCR, 0x0101); 459 pcc_set(sock, (unsigned int)PLD_CFRSTCR, 0x0101);
460 udelay(25); /* for IDE reset */ 460 udelay(25); /* for IDE reset */
461 pcc_set(sock, (unsigned int)PLD_CFRSTCR, 0x0100); 461 pcc_set(sock, (unsigned int)PLD_CFRSTCR, 0x0100);
462 mdelay(2); /* for IDE reset */ 462 mdelay(2); /* for IDE reset */
463 } else { 463
464 *value |= SS_POWERON; 464 *value |= SS_READY;
465 *value |= SS_READY; 465 *value |= SS_3VCARD;
466 } 466 } else {
467 /* disable CF power */
468 pcc_set(sock, (unsigned int)PLD_CPCR, 0);
469 udelay(100);
470 debug(3, "m32r_cfc: _pcc_get_status: "
471 "power off (CPCR=0x%08x)\n", status);
467 } 472 }
468#else 473#else
469#error no platform configuration 474#error no platform configuration
@@ -479,14 +484,13 @@ static int _pcc_get_socket(u_short sock, socket_state_t *state)
479{ 484{
480// pcc_socket_t *t = &socket[sock]; 485// pcc_socket_t *t = &socket[sock];
481 486
482#if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_USRV) || defined(CONFIG_PLAT_OPSPUT)
483 state->flags = 0; 487 state->flags = 0;
484 state->csc_mask = SS_DETECT; 488 state->csc_mask = SS_DETECT;
485 state->csc_mask |= SS_READY; 489 state->csc_mask |= SS_READY;
486 state->io_irq = 0; 490 state->io_irq = 0;
487 state->Vcc = 33; /* 3.3V fixed */ 491 state->Vcc = 33; /* 3.3V fixed */
488 state->Vpp = 33; 492 state->Vpp = 33;
489#endif 493
490 debug(3, "m32r_cfc: GetSocket(%d) = flags %#3.3x, Vcc %d, Vpp %d, " 494 debug(3, "m32r_cfc: GetSocket(%d) = flags %#3.3x, Vcc %d, Vpp %d, "
491 "io_irq %d, csc_mask %#2.2x\n", sock, state->flags, 495 "io_irq %d, csc_mask %#2.2x\n", sock, state->flags,
492 state->Vcc, state->Vpp, state->io_irq, state->csc_mask); 496 state->Vcc, state->Vpp, state->io_irq, state->csc_mask);
@@ -497,32 +501,17 @@ static int _pcc_get_socket(u_short sock, socket_state_t *state)
497 501
498static int _pcc_set_socket(u_short sock, socket_state_t *state) 502static int _pcc_set_socket(u_short sock, socket_state_t *state)
499{ 503{
500#if defined(CONFIG_PLAT_MAPPI2)
501 u_long reg = 0;
502#endif
503 debug(3, "m32r_cfc: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, " 504 debug(3, "m32r_cfc: SetSocket(%d, flags %#3.3x, Vcc %d, Vpp %d, "
504 "io_irq %d, csc_mask %#2.2x)\n", sock, state->flags, 505 "io_irq %d, csc_mask %#2.2x)\n", sock, state->flags,
505 state->Vcc, state->Vpp, state->io_irq, state->csc_mask); 506 state->Vcc, state->Vpp, state->io_irq, state->csc_mask);
506 507
507#if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_USRV) || defined(CONFIG_PLAT_OPSPUT) 508#if defined(CONFIG_PLAT_M32700UT) || defined(CONFIG_PLAT_USRV) || defined(CONFIG_PLAT_OPSPUT) || defined(CONFIG_PLAT_MAPPI2) || defined(CONFIG_PLAT_MAPPI3)
508 if (state->Vcc) { 509 if (state->Vcc) {
509 if ((state->Vcc != 50) && (state->Vcc != 33)) 510 if ((state->Vcc != 50) && (state->Vcc != 33))
510 return -EINVAL; 511 return -EINVAL;
511 /* accept 5V and 3.3V */ 512 /* accept 5V and 3.3V */
512 } 513 }
513#elif defined(CONFIG_PLAT_MAPPI2)
514 if (state->Vcc) {
515 /*
516 * 5V only
517 */
518 if (state->Vcc == 50) {
519 reg |= PCCSIGCR_VEN;
520 } else {
521 return -EINVAL;
522 }
523 }
524#endif 514#endif
525
526 if (state->flags & SS_RESET) { 515 if (state->flags & SS_RESET) {
527 debug(3, ":RESET\n"); 516 debug(3, ":RESET\n");
528 pcc_set(sock,(unsigned int)PLD_CFRSTCR,0x101); 517 pcc_set(sock,(unsigned int)PLD_CFRSTCR,0x101);
@@ -788,7 +777,7 @@ static int __init init_m32r_pcc(void)
788 return ret; 777 return ret;
789 } 778 }
790 779
791#if defined(CONFIG_PLAT_MAPPI2) 780#if defined(CONFIG_PLAT_MAPPI2) || defined(CONFIG_PLAT_MAPPI3)
792 pcc_set(0, (unsigned int)PLD_CFCR0, 0x0f0f); 781 pcc_set(0, (unsigned int)PLD_CFCR0, 0x0f0f);
793 pcc_set(0, (unsigned int)PLD_CFCR1, 0x0200); 782 pcc_set(0, (unsigned int)PLD_CFCR1, 0x0200);
794#endif 783#endif
@@ -825,7 +814,7 @@ static int __init init_m32r_pcc(void)
825 for (i = 0 ; i < pcc_sockets ; i++) { 814 for (i = 0 ; i < pcc_sockets ; i++) {
826 socket[i].socket.dev.dev = &pcc_device.dev; 815 socket[i].socket.dev.dev = &pcc_device.dev;
827 socket[i].socket.ops = &pcc_operations; 816 socket[i].socket.ops = &pcc_operations;
828 socket[i].socket.resource_ops = &pccard_static_ops; 817 socket[i].socket.resource_ops = &pccard_nonstatic_ops;
829 socket[i].socket.owner = THIS_MODULE; 818 socket[i].socket.owner = THIS_MODULE;
830 socket[i].number = i; 819 socket[i].number = i;
831 ret = pcmcia_register_socket(&socket[i].socket); 820 ret = pcmcia_register_socket(&socket[i].socket);
diff --git a/drivers/pcmcia/m32r_cfc.h b/drivers/pcmcia/m32r_cfc.h
index 17c1db7ae155..8146e3bee2e8 100644
--- a/drivers/pcmcia/m32r_cfc.h
+++ b/drivers/pcmcia/m32r_cfc.h
@@ -71,11 +71,15 @@
71 71
72#define CFC_IOPORT_BASE 0x1000 72#define CFC_IOPORT_BASE 0x1000
73 73
74#if !defined(CONFIG_PLAT_USRV) 74#if defined(CONFIG_PLAT_MAPPI3)
75#define CFC_ATTR_MAPBASE 0x14014000
76#define CFC_IO_MAPBASE_BYTE 0xb4012000
77#define CFC_IO_MAPBASE_WORD 0xb4002000
78#elif !defined(CONFIG_PLAT_USRV)
75#define CFC_ATTR_MAPBASE 0x0c014000 79#define CFC_ATTR_MAPBASE 0x0c014000
76#define CFC_IO_MAPBASE_BYTE 0xac012000 80#define CFC_IO_MAPBASE_BYTE 0xac012000
77#define CFC_IO_MAPBASE_WORD 0xac002000 81#define CFC_IO_MAPBASE_WORD 0xac002000
78#else /* CONFIG_PLAT_USRV */ 82#else
79#define CFC_ATTR_MAPBASE 0x04014000 83#define CFC_ATTR_MAPBASE 0x04014000
80#define CFC_IO_MAPBASE_BYTE 0xa4012000 84#define CFC_IO_MAPBASE_BYTE 0xa4012000
81#define CFC_IO_MAPBASE_WORD 0xa4002000 85#define CFC_IO_MAPBASE_WORD 0xa4002000
diff --git a/drivers/s390/cio/blacklist.c b/drivers/s390/cio/blacklist.c
index 4a06c7d0e5e4..aac83ce6469c 100644
--- a/drivers/s390/cio/blacklist.c
+++ b/drivers/s390/cio/blacklist.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * drivers/s390/cio/blacklist.c 2 * drivers/s390/cio/blacklist.c
3 * S/390 common I/O routines -- blacklisting of specific devices 3 * S/390 common I/O routines -- blacklisting of specific devices
4 * $Revision: 1.33 $ 4 * $Revision: 1.34 $
5 * 5 *
6 * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, 6 * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH,
7 * IBM Corporation 7 * IBM Corporation
@@ -289,7 +289,7 @@ static int cio_ignore_read (char *page, char **start, off_t off,
289 len = 0; 289 len = 0;
290 for (devno = off; /* abuse the page variable 290 for (devno = off; /* abuse the page variable
291 * as counter, see fs/proc/generic.c */ 291 * as counter, see fs/proc/generic.c */
292 devno <= __MAX_SUBCHANNELS && len + entry_size < count; devno++) { 292 devno < __MAX_SUBCHANNELS && len + entry_size < count; devno++) {
293 if (!test_bit(devno, bl_dev)) 293 if (!test_bit(devno, bl_dev))
294 continue; 294 continue;
295 len += sprintf(page + len, "0.0.%04lx", devno); 295 len += sprintf(page + len, "0.0.%04lx", devno);
@@ -302,7 +302,7 @@ static int cio_ignore_read (char *page, char **start, off_t off,
302 len += sprintf(page + len, "\n"); 302 len += sprintf(page + len, "\n");
303 } 303 }
304 304
305 if (devno <= __MAX_SUBCHANNELS) 305 if (devno < __MAX_SUBCHANNELS)
306 *eof = 1; 306 *eof = 1;
307 *start = (char *) (devno - off); /* number of checked entries */ 307 *start = (char *) (devno - off); /* number of checked entries */
308 return len; 308 return len;
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 80b0c40c522b..ec81532eb845 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -1975,7 +1975,7 @@ __megaraid_reset(Scsi_Cmnd *cmd)
1975static int 1975static int
1976megaraid_reset(Scsi_Cmnd *cmd) 1976megaraid_reset(Scsi_Cmnd *cmd)
1977{ 1977{
1978 adapter = (adapter_t *)cmd->device->host->hostdata; 1978 adapter_t *adapter = (adapter_t *)cmd->device->host->hostdata;
1979 int rc; 1979 int rc;
1980 1980
1981 spin_lock_irq(&adapter->lock); 1981 spin_lock_irq(&adapter->lock);
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index 6e44b46c9e9d..25fcef2c42de 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -753,7 +753,7 @@ config SERIAL_MPC52xx_CONSOLE_BAUD
753 753
754config SERIAL_ICOM 754config SERIAL_ICOM
755 tristate "IBM Multiport Serial Adapter" 755 tristate "IBM Multiport Serial Adapter"
756 depends on PPC_ISERIES || PPC_PSERIES 756 depends on PCI && (PPC_ISERIES || PPC_PSERIES)
757 select SERIAL_CORE 757 select SERIAL_CORE
758 help 758 help
759 This driver is for a family of multiport serial adapters 759 This driver is for a family of multiport serial adapters
@@ -843,4 +843,13 @@ config SERIAL_JSM
843 To compile this driver as a module, choose M here: the 843 To compile this driver as a module, choose M here: the
844 module will be called jsm. 844 module will be called jsm.
845 845
846config SERIAL_SGI_IOC4
847 tristate "SGI IOC4 controller serial support"
848 depends on (IA64_GENERIC || IA64_SGI_SN2) && SGI_IOC4
849 select SERIAL_CORE
850 help
851 If you have an SGI Altix with an IOC4 based Base IO card
852 and wish to use the serial ports on this card, say Y.
853 Otherwise, say N.
854
846endmenu 855endmenu
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index 81b77d769b84..8f1cdde7dbed 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -51,4 +51,4 @@ obj-$(CONFIG_ETRAX_SERIAL) += crisv10.o
51obj-$(CONFIG_SERIAL_JSM) += jsm/ 51obj-$(CONFIG_SERIAL_JSM) += jsm/
52obj-$(CONFIG_SERIAL_TXX9) += serial_txx9.o 52obj-$(CONFIG_SERIAL_TXX9) += serial_txx9.o
53obj-$(CONFIG_SERIAL_VR41XX) += vr41xx_siu.o 53obj-$(CONFIG_SERIAL_VR41XX) += vr41xx_siu.o
54obj-$(CONFIG_BLK_DEV_SGIIOC4) += ioc4_serial.o 54obj-$(CONFIG_SERIAL_SGI_IOC4) += ioc4_serial.o
diff --git a/drivers/serial/cpm_uart/cpm_uart_cpm2.c b/drivers/serial/cpm_uart/cpm_uart_cpm2.c
index b422c3abfba6..c4c8f4b44f53 100644
--- a/drivers/serial/cpm_uart/cpm_uart_cpm2.c
+++ b/drivers/serial/cpm_uart/cpm_uart_cpm2.c
@@ -134,12 +134,21 @@ void scc1_lineif(struct uart_cpm_port *pinfo)
134 134
135void scc2_lineif(struct uart_cpm_port *pinfo) 135void scc2_lineif(struct uart_cpm_port *pinfo)
136{ 136{
137 /*
138 * STx GP3 uses the SCC2 secondary option pin assignment
139 * which this driver doesn't account for in the static
140 * pin assignments. This kind of board specific info
141 * really has to get out of the driver so boards can
142 * be supported in a sane fashion.
143 */
144#ifndef CONFIG_STX_GP3
137 volatile iop_cpm2_t *io = &cpm2_immr->im_ioport; 145 volatile iop_cpm2_t *io = &cpm2_immr->im_ioport;
138 io->iop_pparb |= 0x008b0000; 146 io->iop_pparb |= 0x008b0000;
139 io->iop_pdirb |= 0x00880000; 147 io->iop_pdirb |= 0x00880000;
140 io->iop_psorb |= 0x00880000; 148 io->iop_psorb |= 0x00880000;
141 io->iop_pdirb &= ~0x00030000; 149 io->iop_pdirb &= ~0x00030000;
142 io->iop_psorb &= ~0x00030000; 150 io->iop_psorb &= ~0x00030000;
151#endif
143 cpm2_immr->im_cpmux.cmx_scr &= 0xff00ffff; 152 cpm2_immr->im_cpmux.cmx_scr &= 0xff00ffff;
144 cpm2_immr->im_cpmux.cmx_scr |= 0x00090000; 153 cpm2_immr->im_cpmux.cmx_scr |= 0x00090000;
145 pinfo->brg = 2; 154 pinfo->brg = 2;
diff --git a/drivers/serial/ioc4_serial.c b/drivers/serial/ioc4_serial.c
index ba4e13a22a50..793c3a7cbe47 100644
--- a/drivers/serial/ioc4_serial.c
+++ b/drivers/serial/ioc4_serial.c
@@ -20,7 +20,7 @@
20#include <linux/serial_reg.h> 20#include <linux/serial_reg.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/pci.h> 22#include <linux/pci.h>
23#include <linux/ioc4_common.h> 23#include <linux/ioc4.h>
24#include <linux/serial_core.h> 24#include <linux/serial_core.h>
25 25
26/* 26/*
@@ -130,12 +130,19 @@
130 IOC4_SIO_IR_S3_TX_EXPLICIT) 130 IOC4_SIO_IR_S3_TX_EXPLICIT)
131 131
132/* Bitmasks for IOC4_OTHER_IR, IOC4_OTHER_IEC, and IOC4_OTHER_IES */ 132/* Bitmasks for IOC4_OTHER_IR, IOC4_OTHER_IEC, and IOC4_OTHER_IES */
133#define IOC4_OTHER_IR_ATA_INT 0x00000001 /* ATAPI intr pass-thru */ 133#define IOC4_OTHER_IR_ATA_INT 0x00000001 /* ATAPI intr pass-thru */
134#define IOC4_OTHER_IR_ATA_MEMERR 0x00000002 /* ATAPI DMA PCI error */ 134#define IOC4_OTHER_IR_ATA_MEMERR 0x00000002 /* ATAPI DMA PCI error */
135#define IOC4_OTHER_IR_S0_MEMERR 0x00000004 /* Port 0 PCI error */ 135#define IOC4_OTHER_IR_S0_MEMERR 0x00000004 /* Port 0 PCI error */
136#define IOC4_OTHER_IR_S1_MEMERR 0x00000008 /* Port 1 PCI error */ 136#define IOC4_OTHER_IR_S1_MEMERR 0x00000008 /* Port 1 PCI error */
137#define IOC4_OTHER_IR_S2_MEMERR 0x00000010 /* Port 2 PCI error */ 137#define IOC4_OTHER_IR_S2_MEMERR 0x00000010 /* Port 2 PCI error */
138#define IOC4_OTHER_IR_S3_MEMERR 0x00000020 /* Port 3 PCI error */ 138#define IOC4_OTHER_IR_S3_MEMERR 0x00000020 /* Port 3 PCI error */
139#define IOC4_OTHER_IR_KBD_INT 0x00000040 /* Keyboard/mouse */
140#define IOC4_OTHER_IR_RESERVED 0x007fff80 /* Reserved */
141#define IOC4_OTHER_IR_RT_INT 0x00800000 /* INT_OUT section output */
142#define IOC4_OTHER_IR_GEN_INT 0xff000000 /* Generic pins */
143
144#define IOC4_OTHER_IR_SER_MEMERR (IOC4_OTHER_IR_S0_MEMERR | IOC4_OTHER_IR_S1_MEMERR | \
145 IOC4_OTHER_IR_S2_MEMERR | IOC4_OTHER_IR_S3_MEMERR)
139 146
140/* Bitmasks for IOC4_SIO_CR */ 147/* Bitmasks for IOC4_SIO_CR */
141#define IOC4_SIO_CR_CMD_PULSE_SHIFT 0 /* byte bus strobe shift */ 148#define IOC4_SIO_CR_CMD_PULSE_SHIFT 0 /* byte bus strobe shift */
@@ -274,70 +281,24 @@ struct ioc4_uartregs {
274#define i4u_dlm u2.dlm 281#define i4u_dlm u2.dlm
275#define i4u_fcr u3.fcr 282#define i4u_fcr u3.fcr
276 283
277/* PCI memory space register map addressed using pci_bar0 */ 284/* Serial port registers used for DMA serial I/O */
278struct ioc4_memregs { 285struct ioc4_serial {
279 struct ioc4_mem { 286 uint32_t sbbr01_l;
280 /* Miscellaneous IOC4 registers */ 287 uint32_t sbbr01_h;
281 uint32_t pci_err_addr_l; 288 uint32_t sbbr23_l;
282 uint32_t pci_err_addr_h; 289 uint32_t sbbr23_h;
283 uint32_t sio_ir; 290
284 uint32_t other_ir; 291 struct ioc4_serialregs port_0;
285 292 struct ioc4_serialregs port_1;
286 /* These registers are read-only for general kernel code. */ 293 struct ioc4_serialregs port_2;
287 uint32_t sio_ies_ro; 294 struct ioc4_serialregs port_3;
288 uint32_t other_ies_ro; 295 struct ioc4_uartregs uart_0;
289 uint32_t sio_iec_ro; 296 struct ioc4_uartregs uart_1;
290 uint32_t other_iec_ro; 297 struct ioc4_uartregs uart_2;
291 uint32_t sio_cr; 298 struct ioc4_uartregs uart_3;
292 uint32_t misc_fill1; 299} ioc4_serial;
293 uint32_t int_out;
294 uint32_t misc_fill2;
295 uint32_t gpcr_s;
296 uint32_t gpcr_c;
297 uint32_t gpdr;
298 uint32_t misc_fill3;
299 uint32_t gppr_0;
300 uint32_t gppr_1;
301 uint32_t gppr_2;
302 uint32_t gppr_3;
303 uint32_t gppr_4;
304 uint32_t gppr_5;
305 uint32_t gppr_6;
306 uint32_t gppr_7;
307 } ioc4_mem;
308
309 char misc_fill4[0x100 - 0x5C - 4];
310
311 /* ATA/ATAP registers */
312 uint32_t ata_notused[9];
313 char ata_fill1[0x140 - 0x120 - 4];
314 uint32_t ata_notused1[8];
315 char ata_fill2[0x200 - 0x15C - 4];
316
317 /* Keyboard and mouse registers */
318 uint32_t km_notused[5];;
319 char km_fill1[0x300 - 0x210 - 4];
320
321 /* Serial port registers used for DMA serial I/O */
322 struct ioc4_serial {
323 uint32_t sbbr01_l;
324 uint32_t sbbr01_h;
325 uint32_t sbbr23_l;
326 uint32_t sbbr23_h;
327
328 struct ioc4_serialregs port_0;
329 struct ioc4_serialregs port_1;
330 struct ioc4_serialregs port_2;
331 struct ioc4_serialregs port_3;
332 struct ioc4_uartregs uart_0;
333 struct ioc4_uartregs uart_1;
334 struct ioc4_uartregs uart_2;
335 struct ioc4_uartregs uart_3;
336 } ioc4_serial;
337};
338 300
339/* UART clock speed */ 301/* UART clock speed */
340#define IOC4_SER_XIN_CLK IOC4_SER_XIN_CLK_66
341#define IOC4_SER_XIN_CLK_66 66666667 302#define IOC4_SER_XIN_CLK_66 66666667
342#define IOC4_SER_XIN_CLK_33 33333333 303#define IOC4_SER_XIN_CLK_33 33333333
343 304
@@ -412,8 +373,8 @@ enum sio_proto {
412 | UART_LCR_WLEN7 | UART_LCR_WLEN8) 373 | UART_LCR_WLEN7 | UART_LCR_WLEN8)
413#define LCR_MASK_STOP_BITS (UART_LCR_STOP) 374#define LCR_MASK_STOP_BITS (UART_LCR_STOP)
414 375
415#define PENDING(_p) (readl(&(_p)->ip_mem->sio_ir) & _p->ip_ienb) 376#define PENDING(_p) (readl(&(_p)->ip_mem->sio_ir.raw) & _p->ip_ienb)
416#define READ_SIO_IR(_p) readl(&(_p)->ip_mem->sio_ir) 377#define READ_SIO_IR(_p) readl(&(_p)->ip_mem->sio_ir.raw)
417 378
418/* Default to 4k buffers */ 379/* Default to 4k buffers */
419#ifdef IOC4_1K_BUFFERS 380#ifdef IOC4_1K_BUFFERS
@@ -447,7 +408,7 @@ struct ioc4_control {
447 */ 408 */
448#define MAX_IOC4_INTR_ENTS (8 * sizeof(uint32_t)) 409#define MAX_IOC4_INTR_ENTS (8 * sizeof(uint32_t))
449struct ioc4_soft { 410struct ioc4_soft {
450 struct ioc4_mem __iomem *is_ioc4_mem_addr; 411 struct ioc4_misc_regs __iomem *is_ioc4_misc_addr;
451 struct ioc4_serial __iomem *is_ioc4_serial_addr; 412 struct ioc4_serial __iomem *is_ioc4_serial_addr;
452 413
453 /* Each interrupt type has an entry in the array */ 414 /* Each interrupt type has an entry in the array */
@@ -486,7 +447,7 @@ struct ioc4_port {
486 struct ioc4_soft *ip_ioc4_soft; 447 struct ioc4_soft *ip_ioc4_soft;
487 448
488 /* pci mem addresses */ 449 /* pci mem addresses */
489 struct ioc4_mem __iomem *ip_mem; 450 struct ioc4_misc_regs __iomem *ip_mem;
490 struct ioc4_serial __iomem *ip_serial; 451 struct ioc4_serial __iomem *ip_serial;
491 struct ioc4_serialregs __iomem *ip_serial_regs; 452 struct ioc4_serialregs __iomem *ip_serial_regs;
492 struct ioc4_uartregs __iomem *ip_uart_regs; 453 struct ioc4_uartregs __iomem *ip_uart_regs;
@@ -553,7 +514,7 @@ struct hooks {
553 uint32_t intr_dma_error; 514 uint32_t intr_dma_error;
554 uint32_t intr_clear; 515 uint32_t intr_clear;
555 uint32_t intr_all; 516 uint32_t intr_all;
556 char rs422_select_pin; 517 int rs422_select_pin;
557}; 518};
558 519
559static struct hooks hooks_array[IOC4_NUM_SERIAL_PORTS] = { 520static struct hooks hooks_array[IOC4_NUM_SERIAL_PORTS] = {
@@ -669,7 +630,7 @@ static void handle_intr(void *arg, uint32_t sio_ir);
669static inline void 630static inline void
670write_ireg(struct ioc4_soft *ioc4_soft, uint32_t val, int which, int type) 631write_ireg(struct ioc4_soft *ioc4_soft, uint32_t val, int which, int type)
671{ 632{
672 struct ioc4_mem __iomem *mem = ioc4_soft->is_ioc4_mem_addr; 633 struct ioc4_misc_regs __iomem *mem = ioc4_soft->is_ioc4_misc_addr;
673 unsigned long flags; 634 unsigned long flags;
674 635
675 spin_lock_irqsave(&ioc4_soft->is_ir_lock, flags); 636 spin_lock_irqsave(&ioc4_soft->is_ir_lock, flags);
@@ -678,11 +639,11 @@ write_ireg(struct ioc4_soft *ioc4_soft, uint32_t val, int which, int type)
678 case IOC4_SIO_INTR_TYPE: 639 case IOC4_SIO_INTR_TYPE:
679 switch (which) { 640 switch (which) {
680 case IOC4_W_IES: 641 case IOC4_W_IES:
681 writel(val, &mem->sio_ies_ro); 642 writel(val, &mem->sio_ies.raw);
682 break; 643 break;
683 644
684 case IOC4_W_IEC: 645 case IOC4_W_IEC:
685 writel(val, &mem->sio_iec_ro); 646 writel(val, &mem->sio_iec.raw);
686 break; 647 break;
687 } 648 }
688 break; 649 break;
@@ -690,11 +651,11 @@ write_ireg(struct ioc4_soft *ioc4_soft, uint32_t val, int which, int type)
690 case IOC4_OTHER_INTR_TYPE: 651 case IOC4_OTHER_INTR_TYPE:
691 switch (which) { 652 switch (which) {
692 case IOC4_W_IES: 653 case IOC4_W_IES:
693 writel(val, &mem->other_ies_ro); 654 writel(val, &mem->other_ies.raw);
694 break; 655 break;
695 656
696 case IOC4_W_IEC: 657 case IOC4_W_IEC:
697 writel(val, &mem->other_iec_ro); 658 writel(val, &mem->other_iec.raw);
698 break; 659 break;
699 } 660 }
700 break; 661 break;
@@ -747,7 +708,8 @@ static int set_baud(struct ioc4_port *port, int baud)
747 */ 708 */
748static struct ioc4_port *get_ioc4_port(struct uart_port *the_port) 709static struct ioc4_port *get_ioc4_port(struct uart_port *the_port)
749{ 710{
750 struct ioc4_control *control = dev_get_drvdata(the_port->dev); 711 struct ioc4_driver_data *idd = dev_get_drvdata(the_port->dev);
712 struct ioc4_control *control = idd->idd_serial_data;
751 int ii; 713 int ii;
752 714
753 if (control) { 715 if (control) {
@@ -782,7 +744,7 @@ static struct ioc4_port *get_ioc4_port(struct uart_port *the_port)
782static inline uint32_t 744static inline uint32_t
783pending_intrs(struct ioc4_soft *soft, int type) 745pending_intrs(struct ioc4_soft *soft, int type)
784{ 746{
785 struct ioc4_mem __iomem *mem = soft->is_ioc4_mem_addr; 747 struct ioc4_misc_regs __iomem *mem = soft->is_ioc4_misc_addr;
786 unsigned long flag; 748 unsigned long flag;
787 uint32_t intrs = 0; 749 uint32_t intrs = 0;
788 750
@@ -793,11 +755,11 @@ pending_intrs(struct ioc4_soft *soft, int type)
793 755
794 switch (type) { 756 switch (type) {
795 case IOC4_SIO_INTR_TYPE: 757 case IOC4_SIO_INTR_TYPE:
796 intrs = readl(&mem->sio_ir) & readl(&mem->sio_ies_ro); 758 intrs = readl(&mem->sio_ir.raw) & readl(&mem->sio_ies.raw);
797 break; 759 break;
798 760
799 case IOC4_OTHER_INTR_TYPE: 761 case IOC4_OTHER_INTR_TYPE:
800 intrs = readl(&mem->other_ir) & readl(&mem->other_ies_ro); 762 intrs = readl(&mem->other_ir.raw) & readl(&mem->other_ies.raw);
801 763
802 /* Don't process any ATA interrupte */ 764 /* Don't process any ATA interrupte */
803 intrs &= ~(IOC4_OTHER_IR_ATA_INT | IOC4_OTHER_IR_ATA_MEMERR); 765 intrs &= ~(IOC4_OTHER_IR_ATA_INT | IOC4_OTHER_IR_ATA_MEMERR);
@@ -826,7 +788,7 @@ static int inline port_init(struct ioc4_port *port)
826 788
827 /* Wait until any pending bus activity for this port has ceased */ 789 /* Wait until any pending bus activity for this port has ceased */
828 do 790 do
829 sio_cr = readl(&port->ip_mem->sio_cr); 791 sio_cr = readl(&port->ip_mem->sio_cr.raw);
830 while (!(sio_cr & IOC4_SIO_CR_SIO_DIAG_IDLE)); 792 while (!(sio_cr & IOC4_SIO_CR_SIO_DIAG_IDLE));
831 793
832 /* Finish reset sequence */ 794 /* Finish reset sequence */
@@ -899,7 +861,7 @@ static int inline port_init(struct ioc4_port *port)
899 write_ireg(port->ip_ioc4_soft, hooks->intr_clear, 861 write_ireg(port->ip_ioc4_soft, hooks->intr_clear,
900 IOC4_W_IEC, IOC4_SIO_INTR_TYPE); 862 IOC4_W_IEC, IOC4_SIO_INTR_TYPE);
901 port->ip_ienb &= ~hooks->intr_clear; 863 port->ip_ienb &= ~hooks->intr_clear;
902 writel(hooks->intr_clear, &port->ip_mem->sio_ir); 864 writel(hooks->intr_clear, &port->ip_mem->sio_ir.raw);
903 return 0; 865 return 0;
904} 866}
905 867
@@ -918,23 +880,23 @@ static void handle_dma_error_intr(void *arg, uint32_t other_ir)
918 spin_lock_irqsave(&port->ip_lock, flags); 880 spin_lock_irqsave(&port->ip_lock, flags);
919 881
920 /* ACK the interrupt */ 882 /* ACK the interrupt */
921 writel(hooks->intr_dma_error, &port->ip_mem->other_ir); 883 writel(hooks->intr_dma_error, &port->ip_mem->other_ir.raw);
922 884
923 if (readl(&port->ip_mem->pci_err_addr_l) & IOC4_PCI_ERR_ADDR_VLD) { 885 if (readl(&port->ip_mem->pci_err_addr_l.raw) & IOC4_PCI_ERR_ADDR_VLD) {
924 printk(KERN_ERR 886 printk(KERN_ERR
925 "PCI error address is 0x%lx, " 887 "PCI error address is 0x%lx, "
926 "master is serial port %c %s\n", 888 "master is serial port %c %s\n",
927 (((uint64_t)readl(&port->ip_mem->pci_err_addr_h) 889 (((uint64_t)readl(&port->ip_mem->pci_err_addr_h)
928 << 32) 890 << 32)
929 | readl(&port->ip_mem->pci_err_addr_l)) 891 | readl(&port->ip_mem->pci_err_addr_l.raw))
930 & IOC4_PCI_ERR_ADDR_ADDR_MSK, '1' + 892 & IOC4_PCI_ERR_ADDR_ADDR_MSK, '1' +
931 ((char)(readl(&port->ip_mem-> pci_err_addr_l) & 893 ((char)(readl(&port->ip_mem->pci_err_addr_l.raw) &
932 IOC4_PCI_ERR_ADDR_MST_NUM_MSK) >> 1), 894 IOC4_PCI_ERR_ADDR_MST_NUM_MSK) >> 1),
933 (readl(&port->ip_mem->pci_err_addr_l) 895 (readl(&port->ip_mem->pci_err_addr_l.raw)
934 & IOC4_PCI_ERR_ADDR_MST_TYP_MSK) 896 & IOC4_PCI_ERR_ADDR_MST_TYP_MSK)
935 ? "RX" : "TX"); 897 ? "RX" : "TX");
936 898
937 if (readl(&port->ip_mem->pci_err_addr_l) 899 if (readl(&port->ip_mem->pci_err_addr_l.raw)
938 & IOC4_PCI_ERR_ADDR_MUL_ERR) { 900 & IOC4_PCI_ERR_ADDR_MUL_ERR) {
939 printk(KERN_ERR 901 printk(KERN_ERR
940 "Multiple errors occurred\n"); 902 "Multiple errors occurred\n");
@@ -1018,26 +980,26 @@ static irqreturn_t ioc4_intr(int irq, void *arg, struct pt_regs *regs)
1018 "other_ies = 0x%x\n", 980 "other_ies = 0x%x\n",
1019 (intr_type == IOC4_SIO_INTR_TYPE) ? "sio" : 981 (intr_type == IOC4_SIO_INTR_TYPE) ? "sio" :
1020 "other", this_ir, 982 "other", this_ir,
1021 readl(&soft->is_ioc4_mem_addr->sio_ir), 983 readl(&soft->is_ioc4_misc_addr->sio_ir.raw),
1022 readl(&soft->is_ioc4_mem_addr->sio_ies_ro), 984 readl(&soft->is_ioc4_misc_addr->sio_ies.raw),
1023 readl(&soft->is_ioc4_mem_addr->other_ir), 985 readl(&soft->is_ioc4_misc_addr->other_ir.raw),
1024 readl(&soft->is_ioc4_mem_addr->other_ies_ro)); 986 readl(&soft->is_ioc4_misc_addr->other_ies.raw));
1025 } 987 }
1026 } 988 }
1027#ifdef DEBUG_INTERRUPTS 989#ifdef DEBUG_INTERRUPTS
1028 { 990 {
1029 struct ioc4_mem __iomem *mem = soft->is_ioc4_mem_addr; 991 struct ioc4_misc_regs __iomem *mem = soft->is_ioc4_misc_addr;
1030 spinlock_t *lp = &soft->is_ir_lock; 992 spinlock_t *lp = &soft->is_ir_lock;
1031 unsigned long flag; 993 unsigned long flag;
1032 994
1033 spin_lock_irqsave(&soft->is_ir_lock, flag); 995 spin_lock_irqsave(&soft->is_ir_lock, flag);
1034 printk ("%s : %d : mem 0x%p sio_ir 0x%x sio_ies_ro 0x%x " 996 printk ("%s : %d : mem 0x%p sio_ir 0x%x sio_ies 0x%x "
1035 "other_ir 0x%x other_ies_ro 0x%x mask 0x%x\n", 997 "other_ir 0x%x other_ies 0x%x mask 0x%x\n",
1036 __FUNCTION__, __LINE__, 998 __FUNCTION__, __LINE__,
1037 (void *)mem, readl(&mem->sio_ir), 999 (void *)mem, readl(&mem->sio_ir.raw),
1038 readl(&mem->sio_ies_ro), 1000 readl(&mem->sio_ies.raw),
1039 readl(&mem->other_ir), 1001 readl(&mem->other_ir.raw),
1040 readl(&mem->other_ies_ro), 1002 readl(&mem->other_ies.raw),
1041 IOC4_OTHER_IR_ATA_INT | IOC4_OTHER_IR_ATA_MEMERR); 1003 IOC4_OTHER_IR_ATA_INT | IOC4_OTHER_IR_ATA_MEMERR);
1042 spin_unlock_irqrestore(&soft->is_ir_lock, flag); 1004 spin_unlock_irqrestore(&soft->is_ir_lock, flag);
1043 } 1005 }
@@ -1049,21 +1011,20 @@ static irqreturn_t ioc4_intr(int irq, void *arg, struct pt_regs *regs)
1049 * ioc4_attach_local - Device initialization. 1011 * ioc4_attach_local - Device initialization.
1050 * Called at *_attach() time for each 1012 * Called at *_attach() time for each
1051 * IOC4 with serial ports in the system. 1013 * IOC4 with serial ports in the system.
1052 * @control: ioc4_control ptr 1014 * @idd: Master module data for this IOC4
1053 * @pdev: PCI handle for this device
1054 * @soft: soft struct for this device
1055 * @ioc4: ioc4 mem space
1056 */ 1015 */
1057static int inline ioc4_attach_local(struct pci_dev *pdev, 1016static int inline ioc4_attach_local(struct ioc4_driver_data *idd)
1058 struct ioc4_control *control,
1059 struct ioc4_soft *soft, void __iomem *ioc4_mem,
1060 void __iomem *ioc4_serial)
1061{ 1017{
1062 struct ioc4_port *port; 1018 struct ioc4_port *port;
1063 struct ioc4_port *ports[IOC4_NUM_SERIAL_PORTS]; 1019 struct ioc4_port *ports[IOC4_NUM_SERIAL_PORTS];
1064 int port_number; 1020 int port_number;
1065 uint16_t ioc4_revid_min = 62; 1021 uint16_t ioc4_revid_min = 62;
1066 uint16_t ioc4_revid; 1022 uint16_t ioc4_revid;
1023 struct pci_dev *pdev = idd->idd_pdev;
1024 struct ioc4_control* control = idd->idd_serial_data;
1025 struct ioc4_soft *soft = control->ic_soft;
1026 void __iomem *ioc4_misc = idd->idd_misc_regs;
1027 void __iomem *ioc4_serial = soft->is_ioc4_serial_addr;
1067 1028
1068 /* IOC4 firmware must be at least rev 62 */ 1029 /* IOC4 firmware must be at least rev 62 */
1069 pci_read_config_word(pdev, PCI_COMMAND_SPECIAL, &ioc4_revid); 1030 pci_read_config_word(pdev, PCI_COMMAND_SPECIAL, &ioc4_revid);
@@ -1076,7 +1037,7 @@ static int inline ioc4_attach_local(struct pci_dev *pdev,
1076 ioc4_revid, ioc4_revid_min); 1037 ioc4_revid, ioc4_revid_min);
1077 return -EPERM; 1038 return -EPERM;
1078 } 1039 }
1079 BUG_ON(ioc4_mem == NULL); 1040 BUG_ON(ioc4_misc == NULL);
1080 BUG_ON(ioc4_serial == NULL); 1041 BUG_ON(ioc4_serial == NULL);
1081 1042
1082 /* Create port structures for each port */ 1043 /* Create port structures for each port */
@@ -1100,10 +1061,18 @@ static int inline ioc4_attach_local(struct pci_dev *pdev,
1100 port->ip_ioc4_soft = soft; 1061 port->ip_ioc4_soft = soft;
1101 port->ip_pdev = pdev; 1062 port->ip_pdev = pdev;
1102 port->ip_ienb = 0; 1063 port->ip_ienb = 0;
1103 port->ip_pci_bus_speed = IOC4_SER_XIN_CLK; 1064 /* Use baud rate calculations based on detected PCI
1065 * bus speed. Simply test whether the PCI clock is
1066 * running closer to 66MHz or 33MHz.
1067 */
1068 if (idd->count_period/IOC4_EXTINT_COUNT_DIVISOR < 20) {
1069 port->ip_pci_bus_speed = IOC4_SER_XIN_CLK_66;
1070 } else {
1071 port->ip_pci_bus_speed = IOC4_SER_XIN_CLK_33;
1072 }
1104 port->ip_baud = 9600; 1073 port->ip_baud = 9600;
1105 port->ip_control = control; 1074 port->ip_control = control;
1106 port->ip_mem = ioc4_mem; 1075 port->ip_mem = ioc4_misc;
1107 port->ip_serial = ioc4_serial; 1076 port->ip_serial = ioc4_serial;
1108 1077
1109 /* point to the right hook */ 1078 /* point to the right hook */
@@ -1604,14 +1573,12 @@ static int ioc4_set_proto(struct ioc4_port *port, enum sio_proto proto)
1604 switch (proto) { 1573 switch (proto) {
1605 case PROTO_RS232: 1574 case PROTO_RS232:
1606 /* Clear the appropriate GIO pin */ 1575 /* Clear the appropriate GIO pin */
1607 writel(0, (&port->ip_mem->gppr_0 + 1576 writel(0, (&port->ip_mem->gppr[hooks->rs422_select_pin].raw));
1608 hooks->rs422_select_pin));
1609 break; 1577 break;
1610 1578
1611 case PROTO_RS422: 1579 case PROTO_RS422:
1612 /* Set the appropriate GIO pin */ 1580 /* Set the appropriate GIO pin */
1613 writel(1, (&port->ip_mem->gppr_0 + 1581 writel(1, (&port->ip_mem->gppr[hooks->rs422_select_pin].raw));
1614 hooks->rs422_select_pin));
1615 break; 1582 break;
1616 1583
1617 default: 1584 default:
@@ -1885,7 +1852,7 @@ static void handle_intr(void *arg, uint32_t sio_ir)
1885 if (sio_ir & hooks->intr_delta_dcd) { 1852 if (sio_ir & hooks->intr_delta_dcd) {
1886 /* ACK the interrupt */ 1853 /* ACK the interrupt */
1887 writel(hooks->intr_delta_dcd, 1854 writel(hooks->intr_delta_dcd,
1888 &port->ip_mem->sio_ir); 1855 &port->ip_mem->sio_ir.raw);
1889 1856
1890 shadow = readl(&port->ip_serial_regs->shadow); 1857 shadow = readl(&port->ip_serial_regs->shadow);
1891 1858
@@ -1907,7 +1874,7 @@ static void handle_intr(void *arg, uint32_t sio_ir)
1907 if (sio_ir & hooks->intr_delta_cts) { 1874 if (sio_ir & hooks->intr_delta_cts) {
1908 /* ACK the interrupt */ 1875 /* ACK the interrupt */
1909 writel(hooks->intr_delta_cts, 1876 writel(hooks->intr_delta_cts,
1910 &port->ip_mem->sio_ir); 1877 &port->ip_mem->sio_ir.raw);
1911 1878
1912 shadow = readl(&port->ip_serial_regs->shadow); 1879 shadow = readl(&port->ip_serial_regs->shadow);
1913 1880
@@ -1928,7 +1895,7 @@ static void handle_intr(void *arg, uint32_t sio_ir)
1928 if (sio_ir & hooks->intr_rx_timer) { 1895 if (sio_ir & hooks->intr_rx_timer) {
1929 /* ACK the interrupt */ 1896 /* ACK the interrupt */
1930 writel(hooks->intr_rx_timer, 1897 writel(hooks->intr_rx_timer,
1931 &port->ip_mem->sio_ir); 1898 &port->ip_mem->sio_ir.raw);
1932 1899
1933 if ((port->ip_notify & N_DATA_READY) 1900 if ((port->ip_notify & N_DATA_READY)
1934 && (port->ip_port)) { 1901 && (port->ip_port)) {
@@ -1974,7 +1941,7 @@ static void handle_intr(void *arg, uint32_t sio_ir)
1974 1941
1975 /* ACK the interrupt */ 1942 /* ACK the interrupt */
1976 writel(hooks->intr_tx_explicit, 1943 writel(hooks->intr_tx_explicit,
1977 &port->ip_mem->sio_ir); 1944 &port->ip_mem->sio_ir.raw);
1978 1945
1979 if (port->ip_notify & N_OUTPUT_LOWAT) 1946 if (port->ip_notify & N_OUTPUT_LOWAT)
1980 ioc4_cb_output_lowat(port); 1947 ioc4_cb_output_lowat(port);
@@ -2634,7 +2601,8 @@ ioc4_serial_core_attach(struct pci_dev *pdev)
2634{ 2601{
2635 struct ioc4_port *port; 2602 struct ioc4_port *port;
2636 struct uart_port *the_port; 2603 struct uart_port *the_port;
2637 struct ioc4_control *control = pci_get_drvdata(pdev); 2604 struct ioc4_driver_data *idd = pci_get_drvdata(pdev);
2605 struct ioc4_control *control = idd->idd_serial_data;
2638 int ii; 2606 int ii;
2639 2607
2640 DPRINT_CONFIG(("%s: attach pdev 0x%p - control 0x%p\n", 2608 DPRINT_CONFIG(("%s: attach pdev 0x%p - control 0x%p\n",
@@ -2680,55 +2648,29 @@ ioc4_serial_core_attach(struct pci_dev *pdev)
2680 2648
2681/** 2649/**
2682 * ioc4_serial_attach_one - register attach function 2650 * ioc4_serial_attach_one - register attach function
2683 * called per card found from ioc4_serial_detect as part 2651 * called per card found from IOC4 master module.
2684 * of module_init(). 2652 * @idd: Master module data for this IOC4
2685 * @pdev: handle for this card
2686 * @pci_id: pci id for this card
2687 */ 2653 */
2688int 2654int
2689ioc4_serial_attach_one(struct pci_dev *pdev, const struct pci_device_id *pci_id) 2655ioc4_serial_attach_one(struct ioc4_driver_data *idd)
2690{ 2656{
2691 struct ioc4_mem __iomem *mem; 2657 unsigned long tmp_addr1;
2692 unsigned long tmp_addr, tmp_addr1;
2693 struct ioc4_serial __iomem *serial; 2658 struct ioc4_serial __iomem *serial;
2694 struct ioc4_soft *soft; 2659 struct ioc4_soft *soft;
2695 struct ioc4_control *control; 2660 struct ioc4_control *control;
2696 int tmp, ret = 0; 2661 int ret = 0;
2697 2662
2698 2663
2699 DPRINT_CONFIG(("%s (0x%p, 0x%p)\n", __FUNCTION__, pdev, pci_id)); 2664 DPRINT_CONFIG(("%s (0x%p, 0x%p)\n", __FUNCTION__, idd->idd_pdev, idd->idd_pci_id));
2700
2701 /* Map in the ioc4 memory */
2702 tmp_addr = pci_resource_start(pdev, 0);
2703 if (!tmp_addr) {
2704 printk(KERN_WARNING
2705 "ioc4 (%p) : unable to get PIO mapping for "
2706 "MEM space\n", (void *)pdev);
2707 return -ENODEV;
2708 }
2709 if (!request_region(tmp_addr, sizeof(struct ioc4_mem), "sioc4_mem")) {
2710 printk(KERN_ALERT
2711 "ioc4 (%p): unable to get request region for "
2712 "MEM space\n", (void *)pdev);
2713 return -ENODEV;
2714 }
2715 mem = ioremap(tmp_addr, sizeof(struct ioc4_mem));
2716 if (!mem) {
2717 printk(KERN_WARNING
2718 "ioc4 (%p) : unable to remap ioc4 memory\n",
2719 (void *)pdev);
2720 ret = -ENODEV;
2721 goto out1;
2722 }
2723 2665
2724 /* request serial registers */ 2666 /* request serial registers */
2725 tmp_addr1 = pci_resource_start(pdev, 0) + IOC4_SERIAL_OFFSET; 2667 tmp_addr1 = idd->idd_bar0 + IOC4_SERIAL_OFFSET;
2726 2668
2727 if (!request_region(tmp_addr1, sizeof(struct ioc4_serial), 2669 if (!request_region(tmp_addr1, sizeof(struct ioc4_serial),
2728 "sioc4_uart")) { 2670 "sioc4_uart")) {
2729 printk(KERN_WARNING 2671 printk(KERN_WARNING
2730 "ioc4 (%p): unable to get request region for " 2672 "ioc4 (%p): unable to get request region for "
2731 "uart space\n", (void *)pdev); 2673 "uart space\n", (void *)idd->idd_pdev);
2732 ret = -ENODEV; 2674 ret = -ENODEV;
2733 goto out1; 2675 goto out1;
2734 } 2676 }
@@ -2736,12 +2678,12 @@ ioc4_serial_attach_one(struct pci_dev *pdev, const struct pci_device_id *pci_id)
2736 if (!serial) { 2678 if (!serial) {
2737 printk(KERN_WARNING 2679 printk(KERN_WARNING
2738 "ioc4 (%p) : unable to remap ioc4 serial register\n", 2680 "ioc4 (%p) : unable to remap ioc4 serial register\n",
2739 (void *)pdev); 2681 (void *)idd->idd_pdev);
2740 ret = -ENODEV; 2682 ret = -ENODEV;
2741 goto out2; 2683 goto out2;
2742 } 2684 }
2743 DPRINT_CONFIG(("%s : mem 0x%p, serial 0x%p\n", 2685 DPRINT_CONFIG(("%s : mem 0x%p, serial 0x%p\n",
2744 __FUNCTION__, (void *)mem, (void *)serial)); 2686 __FUNCTION__, (void *)idd->idd_misc_regs, (void *)serial));
2745 2687
2746 /* Get memory for the new card */ 2688 /* Get memory for the new card */
2747 control = kmalloc(sizeof(struct ioc4_control) * IOC4_NUM_SERIAL_PORTS, 2689 control = kmalloc(sizeof(struct ioc4_control) * IOC4_NUM_SERIAL_PORTS,
@@ -2754,59 +2696,56 @@ ioc4_serial_attach_one(struct pci_dev *pdev, const struct pci_device_id *pci_id)
2754 goto out2; 2696 goto out2;
2755 } 2697 }
2756 memset(control, 0, sizeof(struct ioc4_control)); 2698 memset(control, 0, sizeof(struct ioc4_control));
2757 pci_set_drvdata(pdev, control); 2699 idd->idd_serial_data = control;
2758 2700
2759 /* Allocate the soft structure */ 2701 /* Allocate the soft structure */
2760 soft = kmalloc(sizeof(struct ioc4_soft), GFP_KERNEL); 2702 soft = kmalloc(sizeof(struct ioc4_soft), GFP_KERNEL);
2761 if (!soft) { 2703 if (!soft) {
2762 printk(KERN_WARNING 2704 printk(KERN_WARNING
2763 "ioc4 (%p): unable to get memory for the soft struct\n", 2705 "ioc4 (%p): unable to get memory for the soft struct\n",
2764 (void *)pdev); 2706 (void *)idd->idd_pdev);
2765 ret = -ENOMEM; 2707 ret = -ENOMEM;
2766 goto out3; 2708 goto out3;
2767 } 2709 }
2768 memset(soft, 0, sizeof(struct ioc4_soft)); 2710 memset(soft, 0, sizeof(struct ioc4_soft));
2769 2711
2770 spin_lock_init(&soft->is_ir_lock); 2712 spin_lock_init(&soft->is_ir_lock);
2771 soft->is_ioc4_mem_addr = mem; 2713 soft->is_ioc4_misc_addr = idd->idd_misc_regs;
2772 soft->is_ioc4_serial_addr = serial; 2714 soft->is_ioc4_serial_addr = serial;
2773 2715
2774 /* Init the IOC4 */ 2716 /* Init the IOC4 */
2775 pci_read_config_dword(pdev, PCI_COMMAND, &tmp); 2717 writel(0xf << IOC4_SIO_CR_CMD_PULSE_SHIFT,
2776 pci_write_config_dword(pdev, PCI_COMMAND, 2718 &idd->idd_misc_regs->sio_cr.raw);
2777 tmp | PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
2778
2779 writel(0xf << IOC4_SIO_CR_CMD_PULSE_SHIFT, &mem->sio_cr);
2780 2719
2781 /* Enable serial port mode select generic PIO pins as outputs */ 2720 /* Enable serial port mode select generic PIO pins as outputs */
2782 writel(IOC4_GPCR_UART0_MODESEL | IOC4_GPCR_UART1_MODESEL 2721 writel(IOC4_GPCR_UART0_MODESEL | IOC4_GPCR_UART1_MODESEL
2783 | IOC4_GPCR_UART2_MODESEL | IOC4_GPCR_UART3_MODESEL, 2722 | IOC4_GPCR_UART2_MODESEL | IOC4_GPCR_UART3_MODESEL,
2784 &mem->gpcr_s); 2723 &idd->idd_misc_regs->gpcr_s.raw);
2785 2724
2786 /* Clear and disable all interrupts */ 2725 /* Clear and disable all serial interrupts */
2787 write_ireg(soft, ~0, IOC4_W_IEC, IOC4_SIO_INTR_TYPE); 2726 write_ireg(soft, ~0, IOC4_W_IEC, IOC4_SIO_INTR_TYPE);
2788 writel(~0, &mem->sio_ir); 2727 writel(~0, &idd->idd_misc_regs->sio_ir.raw);
2789 write_ireg(soft, ~(IOC4_OTHER_IR_ATA_INT | IOC4_OTHER_IR_ATA_MEMERR), 2728 write_ireg(soft, IOC4_OTHER_IR_SER_MEMERR, IOC4_W_IEC,
2790 IOC4_W_IEC, IOC4_OTHER_INTR_TYPE); 2729 IOC4_OTHER_INTR_TYPE);
2791 writel(~(IOC4_OTHER_IR_ATA_MEMERR | IOC4_OTHER_IR_ATA_MEMERR), 2730 writel(IOC4_OTHER_IR_SER_MEMERR, &idd->idd_misc_regs->other_ir.raw);
2792 &mem->other_ir);
2793 control->ic_soft = soft; 2731 control->ic_soft = soft;
2794 if (!request_irq(pdev->irq, ioc4_intr, SA_SHIRQ, 2732
2733 /* Hook up interrupt handler */
2734 if (!request_irq(idd->idd_pdev->irq, ioc4_intr, SA_SHIRQ,
2795 "sgi-ioc4serial", (void *)soft)) { 2735 "sgi-ioc4serial", (void *)soft)) {
2796 control->ic_irq = pdev->irq; 2736 control->ic_irq = idd->idd_pdev->irq;
2797 } else { 2737 } else {
2798 printk(KERN_WARNING 2738 printk(KERN_WARNING
2799 "%s : request_irq fails for IRQ 0x%x\n ", 2739 "%s : request_irq fails for IRQ 0x%x\n ",
2800 __FUNCTION__, pdev->irq); 2740 __FUNCTION__, idd->idd_pdev->irq);
2801 } 2741 }
2802 if ((ret = ioc4_attach_local(pdev, control, soft, 2742 ret = ioc4_attach_local(idd);
2803 soft->is_ioc4_mem_addr, 2743 if (ret)
2804 soft->is_ioc4_serial_addr)))
2805 goto out4; 2744 goto out4;
2806 2745
2807 /* register port with the serial core */ 2746 /* register port with the serial core */
2808 2747
2809 if ((ret = ioc4_serial_core_attach(pdev))) 2748 if ((ret = ioc4_serial_core_attach(idd->idd_pdev)))
2810 goto out4; 2749 goto out4;
2811 2750
2812 return ret; 2751 return ret;
@@ -2819,7 +2758,6 @@ out3:
2819out2: 2758out2:
2820 release_region(tmp_addr1, sizeof(struct ioc4_serial)); 2759 release_region(tmp_addr1, sizeof(struct ioc4_serial));
2821out1: 2760out1:
2822 release_region(tmp_addr, sizeof(struct ioc4_mem));
2823 2761
2824 return ret; 2762 return ret;
2825} 2763}
@@ -2828,11 +2766,10 @@ out1:
2828/** 2766/**
2829 * ioc4_serial_remove_one - detach function 2767 * ioc4_serial_remove_one - detach function
2830 * 2768 *
2831 * @pdev: handle for this card 2769 * @idd: IOC4 master module data for this IOC4
2832 */ 2770 */
2833 2771
2834#if 0 2772int ioc4_serial_remove_one(struct ioc4_driver_data *idd)
2835void ioc4_serial_remove_one(struct pci_dev *pdev)
2836{ 2773{
2837 int ii; 2774 int ii;
2838 struct ioc4_control *control; 2775 struct ioc4_control *control;
@@ -2840,7 +2777,7 @@ void ioc4_serial_remove_one(struct pci_dev *pdev)
2840 struct ioc4_port *port; 2777 struct ioc4_port *port;
2841 struct ioc4_soft *soft; 2778 struct ioc4_soft *soft;
2842 2779
2843 control = pci_get_drvdata(pdev); 2780 control = idd->idd_serial_data;
2844 2781
2845 for (ii = 0; ii < IOC4_NUM_SERIAL_PORTS; ii++) { 2782 for (ii = 0; ii < IOC4_NUM_SERIAL_PORTS; ii++) {
2846 the_port = &control->ic_port[ii].icp_uart_port; 2783 the_port = &control->ic_port[ii].icp_uart_port;
@@ -2867,10 +2804,17 @@ void ioc4_serial_remove_one(struct pci_dev *pdev)
2867 kfree(soft); 2804 kfree(soft);
2868 } 2805 }
2869 kfree(control); 2806 kfree(control);
2870 pci_set_drvdata(pdev, NULL); 2807 idd->idd_serial_data = NULL;
2871 uart_unregister_driver(&ioc4_uart); 2808
2809 return 0;
2872} 2810}
2873#endif 2811
2812static struct ioc4_submodule ioc4_serial_submodule = {
2813 .is_name = "IOC4_serial",
2814 .is_owner = THIS_MODULE,
2815 .is_probe = ioc4_serial_attach_one,
2816 .is_remove = ioc4_serial_remove_one,
2817};
2874 2818
2875/** 2819/**
2876 * ioc4_serial_init - module init 2820 * ioc4_serial_init - module init
@@ -2886,12 +2830,20 @@ int ioc4_serial_init(void)
2886 __FUNCTION__); 2830 __FUNCTION__);
2887 return ret; 2831 return ret;
2888 } 2832 }
2889 return 0; 2833
2834 /* register with IOC4 main module */
2835 return ioc4_register_submodule(&ioc4_serial_submodule);
2836}
2837
2838static void __devexit ioc4_serial_exit(void)
2839{
2840 ioc4_unregister_submodule(&ioc4_serial_submodule);
2841 uart_unregister_driver(&ioc4_uart);
2890} 2842}
2891 2843
2844module_init(ioc4_serial_init);
2845module_exit(ioc4_serial_exit);
2846
2892MODULE_AUTHOR("Pat Gefre - Silicon Graphics Inc. (SGI) <pfg@sgi.com>"); 2847MODULE_AUTHOR("Pat Gefre - Silicon Graphics Inc. (SGI) <pfg@sgi.com>");
2893MODULE_DESCRIPTION("Serial PCI driver module for SGI IOC4 Base-IO Card"); 2848MODULE_DESCRIPTION("Serial PCI driver module for SGI IOC4 Base-IO Card");
2894MODULE_LICENSE("GPL"); 2849MODULE_LICENSE("GPL");
2895
2896EXPORT_SYMBOL(ioc4_serial_init);
2897EXPORT_SYMBOL(ioc4_serial_attach_one);
diff --git a/drivers/sn/Kconfig b/drivers/sn/Kconfig
new file mode 100644
index 000000000000..13b8d249da5c
--- /dev/null
+++ b/drivers/sn/Kconfig
@@ -0,0 +1,20 @@
1#
2# Miscellaneous SN-specific devices
3#
4
5menu "SN Devices"
6
7config SGI_IOC4
8 tristate "SGI IOC4 Base IO support"
9 depends on (IA64_GENERIC || IA64_SGI_SN2) && MMTIMER
10 default m
11 ---help---
12 This option enables basic support for the SGI IOC4-based Base IO
13 controller card. This option does not enable any specific
14 functions on such a card, but provides necessary infrastructure
15 for other drivers to utilize.
16
17 If you have an SGI Altix with an IOC4-based
18 I/O controller say Y. Otherwise say N.
19
20endmenu
diff --git a/drivers/sn/Makefile b/drivers/sn/Makefile
index 631e54958448..c2a284185372 100644
--- a/drivers/sn/Makefile
+++ b/drivers/sn/Makefile
@@ -3,4 +3,4 @@
3# 3#
4# 4#
5 5
6obj-$(CONFIG_BLK_DEV_SGIIOC4) += ioc4.o 6obj-$(CONFIG_SGI_IOC4) += ioc4.o
diff --git a/drivers/sn/ioc4.c b/drivers/sn/ioc4.c
index d9e4ee280e5f..ea75b3d0612b 100644
--- a/drivers/sn/ioc4.c
+++ b/drivers/sn/ioc4.c
@@ -6,60 +6,422 @@
6 * Copyright (C) 2005 Silicon Graphics, Inc. All Rights Reserved. 6 * Copyright (C) 2005 Silicon Graphics, Inc. All Rights Reserved.
7 */ 7 */
8 8
9/* 9/* This file contains the master driver module for use by SGI IOC4 subdrivers.
10 * This file contains a shim driver for the IOC4 IDE and serial drivers. 10 *
11 * It allocates any resources shared between multiple subdevices, and
12 * provides accessor functions (where needed) and the like for those
13 * resources. It also provides a mechanism for the subdevice modules
14 * to support loading and unloading.
15 *
16 * Non-shared resources (e.g. external interrupt A_INT_OUT register page
17 * alias, serial port and UART registers) are handled by the subdevice
18 * modules themselves.
19 *
20 * This is all necessary because IOC4 is not implemented as a multi-function
21 * PCI device, but an amalgamation of disparate registers for several
22 * types of device (ATA, serial, external interrupts). The normal
23 * resource management in the kernel doesn't have quite the right interfaces
24 * to handle this situation (e.g. multiple modules can't claim the same
25 * PCI ID), thus this IOC4 master module.
11 */ 26 */
12 27
13#include <linux/errno.h> 28#include <linux/errno.h>
14#include <linux/module.h> 29#include <linux/module.h>
15#include <linux/pci.h> 30#include <linux/pci.h>
16#include <linux/ioc4_common.h> 31#include <linux/ioc4.h>
17#include <linux/ide.h> 32#include <linux/mmtimer.h>
33#include <linux/rtc.h>
34#include <linux/rwsem.h>
35#include <asm/sn/addrs.h>
36#include <asm/sn/clksupport.h>
37#include <asm/sn/shub_mmr.h>
18 38
39/***************
40 * Definitions *
41 ***************/
19 42
20static int __devinit 43/* Tweakable values */
21ioc4_probe_one(struct pci_dev *pdev, const struct pci_device_id *pci_id) 44
45/* PCI bus speed detection/calibration */
46#define IOC4_CALIBRATE_COUNT 63 /* Calibration cycle period */
47#define IOC4_CALIBRATE_CYCLES 256 /* Average over this many cycles */
48#define IOC4_CALIBRATE_DISCARD 2 /* Discard first few cycles */
49#define IOC4_CALIBRATE_LOW_MHZ 25 /* Lower bound on bus speed sanity */
50#define IOC4_CALIBRATE_HIGH_MHZ 75 /* Upper bound on bus speed sanity */
51#define IOC4_CALIBRATE_DEFAULT_MHZ 66 /* Assumed if sanity check fails */
52
53/************************
54 * Submodule management *
55 ************************/
56
57static LIST_HEAD(ioc4_devices);
58static DECLARE_RWSEM(ioc4_devices_rwsem);
59
60static LIST_HEAD(ioc4_submodules);
61static DECLARE_RWSEM(ioc4_submodules_rwsem);
62
63/* Register an IOC4 submodule */
64int
65ioc4_register_submodule(struct ioc4_submodule *is)
66{
67 struct ioc4_driver_data *idd;
68
69 down_write(&ioc4_submodules_rwsem);
70 list_add(&is->is_list, &ioc4_submodules);
71 up_write(&ioc4_submodules_rwsem);
72
73 /* Initialize submodule for each IOC4 */
74 if (!is->is_probe)
75 return 0;
76
77 down_read(&ioc4_devices_rwsem);
78 list_for_each_entry(idd, &ioc4_devices, idd_list) {
79 if (is->is_probe(idd)) {
80 printk(KERN_WARNING
81 "%s: IOC4 submodule %s probe failed "
82 "for pci_dev %s",
83 __FUNCTION__, module_name(is->is_owner),
84 pci_name(idd->idd_pdev));
85 }
86 }
87 up_read(&ioc4_devices_rwsem);
88
89 return 0;
90}
91
92/* Unregister an IOC4 submodule */
93void
94ioc4_unregister_submodule(struct ioc4_submodule *is)
95{
96 struct ioc4_driver_data *idd;
97
98 down_write(&ioc4_submodules_rwsem);
99 list_del(&is->is_list);
100 up_write(&ioc4_submodules_rwsem);
101
102 /* Remove submodule for each IOC4 */
103 if (!is->is_remove)
104 return;
105
106 down_read(&ioc4_devices_rwsem);
107 list_for_each_entry(idd, &ioc4_devices, idd_list) {
108 if (is->is_remove(idd)) {
109 printk(KERN_WARNING
110 "%s: IOC4 submodule %s remove failed "
111 "for pci_dev %s.\n",
112 __FUNCTION__, module_name(is->is_owner),
113 pci_name(idd->idd_pdev));
114 }
115 }
116 up_read(&ioc4_devices_rwsem);
117}
118
119/*********************
120 * Device management *
121 *********************/
122
123#define IOC4_CALIBRATE_LOW_LIMIT \
124 (1000*IOC4_EXTINT_COUNT_DIVISOR/IOC4_CALIBRATE_LOW_MHZ)
125#define IOC4_CALIBRATE_HIGH_LIMIT \
126 (1000*IOC4_EXTINT_COUNT_DIVISOR/IOC4_CALIBRATE_HIGH_MHZ)
127#define IOC4_CALIBRATE_DEFAULT \
128 (1000*IOC4_EXTINT_COUNT_DIVISOR/IOC4_CALIBRATE_DEFAULT_MHZ)
129
130#define IOC4_CALIBRATE_END \
131 (IOC4_CALIBRATE_CYCLES + IOC4_CALIBRATE_DISCARD)
132
133#define IOC4_INT_OUT_MODE_TOGGLE 0x7 /* Toggle INT_OUT every COUNT+1 ticks */
134
135/* Determines external interrupt output clock period of the PCI bus an
136 * IOC4 is attached to. This value can be used to determine the PCI
137 * bus speed.
138 *
139 * IOC4 has a design feature that various internal timers are derived from
140 * the PCI bus clock. This causes IOC4 device drivers to need to take the
141 * bus speed into account when setting various register values (e.g. INT_OUT
142 * register COUNT field, UART divisors, etc). Since this information is
143 * needed by several subdrivers, it is determined by the main IOC4 driver,
144 * even though the following code utilizes external interrupt registers
145 * to perform the speed calculation.
146 */
147static void
148ioc4_clock_calibrate(struct ioc4_driver_data *idd)
149{
150 extern unsigned long sn_rtc_cycles_per_second;
151 union ioc4_int_out int_out;
152 union ioc4_gpcr gpcr;
153 unsigned int state, last_state = 1;
154 uint64_t start = 0, end, period;
155 unsigned int count = 0;
156
157 /* Enable output */
158 gpcr.raw = 0;
159 gpcr.fields.dir = IOC4_GPCR_DIR_0;
160 gpcr.fields.int_out_en = 1;
161 writel(gpcr.raw, &idd->idd_misc_regs->gpcr_s.raw);
162
163 /* Reset to power-on state */
164 writel(0, &idd->idd_misc_regs->int_out.raw);
165 mmiowb();
166
167 printk(KERN_INFO
168 "%s: Calibrating PCI bus speed "
169 "for pci_dev %s ... ", __FUNCTION__, pci_name(idd->idd_pdev));
170 /* Set up square wave */
171 int_out.raw = 0;
172 int_out.fields.count = IOC4_CALIBRATE_COUNT;
173 int_out.fields.mode = IOC4_INT_OUT_MODE_TOGGLE;
174 int_out.fields.diag = 0;
175 writel(int_out.raw, &idd->idd_misc_regs->int_out.raw);
176 mmiowb();
177
178 /* Check square wave period averaged over some number of cycles */
179 do {
180 int_out.raw = readl(&idd->idd_misc_regs->int_out.raw);
181 state = int_out.fields.int_out;
182 if (!last_state && state) {
183 count++;
184 if (count == IOC4_CALIBRATE_END) {
185 end = rtc_time();
186 break;
187 } else if (count == IOC4_CALIBRATE_DISCARD)
188 start = rtc_time();
189 }
190 last_state = state;
191 } while (1);
192
193 /* Calculation rearranged to preserve intermediate precision.
194 * Logically:
195 * 1. "end - start" gives us number of RTC cycles over all the
196 * square wave cycles measured.
197 * 2. Divide by number of square wave cycles to get number of
198 * RTC cycles per square wave cycle.
199 * 3. Divide by 2*(int_out.fields.count+1), which is the formula
200 * by which the IOC4 generates the square wave, to get the
201 * number of RTC cycles per IOC4 INT_OUT count.
202 * 4. Divide by sn_rtc_cycles_per_second to get seconds per
203 * count.
204 * 5. Multiply by 1E9 to get nanoseconds per count.
205 */
206 period = ((end - start) * 1000000000) /
207 (IOC4_CALIBRATE_CYCLES * 2 * (IOC4_CALIBRATE_COUNT + 1)
208 * sn_rtc_cycles_per_second);
209
210 /* Bounds check the result. */
211 if (period > IOC4_CALIBRATE_LOW_LIMIT ||
212 period < IOC4_CALIBRATE_HIGH_LIMIT) {
213 printk("failed. Assuming PCI clock ticks are %d ns.\n",
214 IOC4_CALIBRATE_DEFAULT / IOC4_EXTINT_COUNT_DIVISOR);
215 period = IOC4_CALIBRATE_DEFAULT;
216 } else {
217 printk("succeeded. PCI clock ticks are %ld ns.\n",
218 period / IOC4_EXTINT_COUNT_DIVISOR);
219 }
220
221 /* Remember results. We store the extint clock period rather
222 * than the PCI clock period so that greater precision is
223 * retained. Divide by IOC4_EXTINT_COUNT_DIVISOR to get
224 * PCI clock period.
225 */
226 idd->count_period = period;
227}
228
229/* Adds a new instance of an IOC4 card */
230static int
231ioc4_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
22{ 232{
233 struct ioc4_driver_data *idd;
234 struct ioc4_submodule *is;
235 uint32_t pcmd;
23 int ret; 236 int ret;
24 237
238 /* Enable IOC4 and take ownership of it */
25 if ((ret = pci_enable_device(pdev))) { 239 if ((ret = pci_enable_device(pdev))) {
26 printk(KERN_WARNING 240 printk(KERN_WARNING
27 "%s: Failed to enable device with " 241 "%s: Failed to enable IOC4 device for pci_dev %s.\n",
28 "pci_dev 0x%p... returning\n", 242 __FUNCTION__, pci_name(pdev));
29 __FUNCTION__, (void *)pdev); 243 goto out;
30 return ret;
31 } 244 }
32 pci_set_master(pdev); 245 pci_set_master(pdev);
33 246
34 /* attach each sub-device */ 247 /* Set up per-IOC4 data */
35 ret = ioc4_ide_attach_one(pdev, pci_id); 248 idd = kmalloc(sizeof(struct ioc4_driver_data), GFP_KERNEL);
36 if (ret) 249 if (!idd) {
37 return ret; 250 printk(KERN_WARNING
38 return ioc4_serial_attach_one(pdev, pci_id); 251 "%s: Failed to allocate IOC4 data for pci_dev %s.\n",
252 __FUNCTION__, pci_name(pdev));
253 ret = -ENODEV;
254 goto out_idd;
255 }
256 idd->idd_pdev = pdev;
257 idd->idd_pci_id = pci_id;
258
259 /* Map IOC4 misc registers. These are shared between subdevices
260 * so the main IOC4 module manages them.
261 */
262 idd->idd_bar0 = pci_resource_start(idd->idd_pdev, 0);
263 if (!idd->idd_bar0) {
264 printk(KERN_WARNING
265 "%s: Unable to find IOC4 misc resource "
266 "for pci_dev %s.\n",
267 __FUNCTION__, pci_name(idd->idd_pdev));
268 ret = -ENODEV;
269 goto out_pci;
270 }
271 if (!request_region(idd->idd_bar0, sizeof(struct ioc4_misc_regs),
272 "ioc4_misc")) {
273 printk(KERN_WARNING
274 "%s: Unable to request IOC4 misc region "
275 "for pci_dev %s.\n",
276 __FUNCTION__, pci_name(idd->idd_pdev));
277 ret = -ENODEV;
278 goto out_pci;
279 }
280 idd->idd_misc_regs = ioremap(idd->idd_bar0,
281 sizeof(struct ioc4_misc_regs));
282 if (!idd->idd_misc_regs) {
283 printk(KERN_WARNING
284 "%s: Unable to remap IOC4 misc region "
285 "for pci_dev %s.\n",
286 __FUNCTION__, pci_name(idd->idd_pdev));
287 ret = -ENODEV;
288 goto out_misc_region;
289 }
290
291 /* Failsafe portion of per-IOC4 initialization */
292
293 /* Initialize IOC4 */
294 pci_read_config_dword(idd->idd_pdev, PCI_COMMAND, &pcmd);
295 pci_write_config_dword(idd->idd_pdev, PCI_COMMAND,
296 pcmd | PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
297
298 /* Determine PCI clock */
299 ioc4_clock_calibrate(idd);
300
301 /* Disable/clear all interrupts. Need to do this here lest
302 * one submodule request the shared IOC4 IRQ, but interrupt
303 * is generated by a different subdevice.
304 */
305 /* Disable */
306 writel(~0, &idd->idd_misc_regs->other_iec.raw);
307 writel(~0, &idd->idd_misc_regs->sio_iec);
308 /* Clear (i.e. acknowledge) */
309 writel(~0, &idd->idd_misc_regs->other_ir.raw);
310 writel(~0, &idd->idd_misc_regs->sio_ir);
311
312 /* Track PCI-device specific data */
313 idd->idd_serial_data = NULL;
314 pci_set_drvdata(idd->idd_pdev, idd);
315 down_write(&ioc4_devices_rwsem);
316 list_add(&idd->idd_list, &ioc4_devices);
317 up_write(&ioc4_devices_rwsem);
318
319 /* Add this IOC4 to all submodules */
320 down_read(&ioc4_submodules_rwsem);
321 list_for_each_entry(is, &ioc4_submodules, is_list) {
322 if (is->is_probe && is->is_probe(idd)) {
323 printk(KERN_WARNING
324 "%s: IOC4 submodule 0x%s probe failed "
325 "for pci_dev %s.\n",
326 __FUNCTION__, module_name(is->is_owner),
327 pci_name(idd->idd_pdev));
328 }
329 }
330 up_read(&ioc4_submodules_rwsem);
331
332 return 0;
333
334out_misc_region:
335 release_region(idd->idd_bar0, sizeof(struct ioc4_misc_regs));
336out_pci:
337 kfree(idd);
338out_idd:
339 pci_disable_device(pdev);
340out:
341 return ret;
39} 342}
40 343
41/* pci device struct */ 344/* Removes a particular instance of an IOC4 card. */
42static struct pci_device_id ioc4_s_id_table[] = { 345static void
346ioc4_remove(struct pci_dev *pdev)
347{
348 struct ioc4_submodule *is;
349 struct ioc4_driver_data *idd;
350
351 idd = pci_get_drvdata(pdev);
352
353 /* Remove this IOC4 from all submodules */
354 down_read(&ioc4_submodules_rwsem);
355 list_for_each_entry(is, &ioc4_submodules, is_list) {
356 if (is->is_remove && is->is_remove(idd)) {
357 printk(KERN_WARNING
358 "%s: IOC4 submodule 0x%s remove failed "
359 "for pci_dev %s.\n",
360 __FUNCTION__, module_name(is->is_owner),
361 pci_name(idd->idd_pdev));
362 }
363 }
364 up_read(&ioc4_submodules_rwsem);
365
366 /* Release resources */
367 iounmap(idd->idd_misc_regs);
368 if (!idd->idd_bar0) {
369 printk(KERN_WARNING
370 "%s: Unable to get IOC4 misc mapping for pci_dev %s. "
371 "Device removal may be incomplete.\n",
372 __FUNCTION__, pci_name(idd->idd_pdev));
373 }
374 release_region(idd->idd_bar0, sizeof(struct ioc4_misc_regs));
375
376 /* Disable IOC4 and relinquish */
377 pci_disable_device(pdev);
378
379 /* Remove and free driver data */
380 down_write(&ioc4_devices_rwsem);
381 list_del(&idd->idd_list);
382 up_write(&ioc4_devices_rwsem);
383 kfree(idd);
384}
385
386static struct pci_device_id ioc4_id_table[] = {
43 {PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC4, PCI_ANY_ID, 387 {PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC4, PCI_ANY_ID,
44 PCI_ANY_ID, 0x0b4000, 0xFFFFFF}, 388 PCI_ANY_ID, 0x0b4000, 0xFFFFFF},
45 {0} 389 {0}
46}; 390};
47MODULE_DEVICE_TABLE(pci, ioc4_s_id_table);
48 391
49static struct pci_driver __devinitdata ioc4_s_driver = { 392static struct pci_driver __devinitdata ioc4_driver = {
50 .name = "IOC4", 393 .name = "IOC4",
51 .id_table = ioc4_s_id_table, 394 .id_table = ioc4_id_table,
52 .probe = ioc4_probe_one, 395 .probe = ioc4_probe,
396 .remove = ioc4_remove,
53}; 397};
54 398
55static int __devinit ioc4_detect(void) 399MODULE_DEVICE_TABLE(pci, ioc4_id_table);
400
401/*********************
402 * Module management *
403 *********************/
404
405/* Module load */
406static int __devinit
407ioc4_init(void)
56{ 408{
57 ioc4_serial_init(); 409 return pci_register_driver(&ioc4_driver);
410}
58 411
59 return pci_register_driver(&ioc4_s_driver); 412/* Module unload */
413static void __devexit
414ioc4_exit(void)
415{
416 pci_unregister_driver(&ioc4_driver);
60} 417}
61module_init(ioc4_detect);
62 418
63MODULE_AUTHOR("Pat Gefre - Silicon Graphics Inc. (SGI) <pfg@sgi.com>"); 419module_init(ioc4_init);
64MODULE_DESCRIPTION("PCI driver module for SGI IOC4 Base-IO Card"); 420module_exit(ioc4_exit);
421
422MODULE_AUTHOR("Brent Casavant - Silicon Graphics, Inc. <bcasavan@sgi.com>");
423MODULE_DESCRIPTION("PCI driver master module for SGI IOC4 Base-IO Card");
65MODULE_LICENSE("GPL"); 424MODULE_LICENSE("GPL");
425
426EXPORT_SYMBOL(ioc4_register_submodule);
427EXPORT_SYMBOL(ioc4_unregister_submodule);
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 6be8fbec0a0e..04d3120f7236 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -322,6 +322,22 @@ config FB_FM2
322 This is the frame buffer device driver for the Amiga FrameMaster 322 This is the frame buffer device driver for the Amiga FrameMaster
323 card from BSC (exhibited 1992 but not shipped as a CBM product). 323 card from BSC (exhibited 1992 but not shipped as a CBM product).
324 324
325config FB_ARC
326 tristate "Arc Monochrome LCD board support"
327 depends on FB && X86
328 select FB_CFB_FILLRECT
329 select FB_CFB_COPYAREA
330 select FB_CFB_IMAGEBLIT
331 select FB_SOFT_CURSOR
332 help
333 This enables support for the Arc Monochrome LCD board. The board
334 is based on the KS-108 lcd controller and is typically a matrix
335 of 2*n chips. This driver was tested with a 128x64 panel. This
336 driver supports it for use with x86 SBCs through a 16 bit GPIO
337 interface (8 bit data, 8 bit control). If you anticpate using
338 this driver, say Y or M; otherwise say N. You must specify the
339 GPIO IO address to be used for setting control and data.
340
325config FB_ATARI 341config FB_ATARI
326 bool "Atari native chipset support" 342 bool "Atari native chipset support"
327 depends on (FB = y) && ATARI && BROKEN 343 depends on (FB = y) && ATARI && BROKEN
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index bd8dc0ffe723..b018df4e95c8 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -21,6 +21,7 @@ obj-$(CONFIG_FB_MACMODES) += macmodes.o
21# Hardware specific drivers go first 21# Hardware specific drivers go first
22obj-$(CONFIG_FB_RETINAZ3) += retz3fb.o 22obj-$(CONFIG_FB_RETINAZ3) += retz3fb.o
23obj-$(CONFIG_FB_AMIGA) += amifb.o c2p.o 23obj-$(CONFIG_FB_AMIGA) += amifb.o c2p.o
24obj-$(CONFIG_FB_ARC) += arcfb.o
24obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o 25obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o
25obj-$(CONFIG_FB_CYBER) += cyberfb.o 26obj-$(CONFIG_FB_CYBER) += cyberfb.o
26obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o 27obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o
diff --git a/drivers/video/arcfb.c b/drivers/video/arcfb.c
new file mode 100644
index 000000000000..d28457e0c063
--- /dev/null
+++ b/drivers/video/arcfb.c
@@ -0,0 +1,684 @@
1/*
2 * linux/drivers/video/arcfb.c -- FB driver for Arc monochrome LCD board
3 *
4 * Copyright (C) 2005, Jaya Kumar <jayalk@intworks.biz>
5 * http://www.intworks.biz/arclcd
6 *
7 * This file is subject to the terms and conditions of the GNU General Public
8 * License. See the file COPYING in the main directory of this archive for
9 * more details.
10 *
11 * Layout is based on skeletonfb.c by James Simmons and Geert Uytterhoeven.
12 *
13 * This driver was written to be used with the Arc LCD board. Arc uses a
14 * set of KS108 chips that control individual 64x64 LCD matrices. The board
15 * can be paneled in a variety of setups such as 2x1=128x64, 4x4=256x256 and
16 * so on. The interface between the board and the host is TTL based GPIO. The
17 * GPIO requirements are 8 writable data lines and 4+n lines for control. On a
18 * GPIO-less system, the board can be tested by connecting the respective sigs
19 * up to a parallel port connector. The driver requires the IO addresses for
20 * data and control GPIO at load time. It is unable to probe for the
21 * existence of the LCD so it must be told at load time whether it should
22 * be enabled or not.
23 *
24 * Todo:
25 * - testing with 4x4
26 * - testing with interrupt hw
27 *
28 * General notes:
29 * - User must set tuhold. It's in microseconds. According to the 108 spec,
30 * the hold time is supposed to be at least 1 microsecond.
31 * - User must set num_cols=x num_rows=y, eg: x=2 means 128
32 * - User must set arcfb_enable=1 to enable it
33 * - User must set dio_addr=0xIOADDR cio_addr=0xIOADDR
34 *
35 */
36
37#include <linux/module.h>
38#include <linux/kernel.h>
39#include <linux/errno.h>
40#include <linux/string.h>
41#include <linux/mm.h>
42#include <linux/tty.h>
43#include <linux/slab.h>
44#include <linux/vmalloc.h>
45#include <linux/delay.h>
46#include <linux/interrupt.h>
47#include <linux/fb.h>
48#include <linux/init.h>
49#include <linux/arcfb.h>
50
51#include <asm/uaccess.h>
52
53#define floor8(a) (a&(~0x07))
54#define floorXres(a,xres) (a&(~(xres - 1)))
55#define iceil8(a) (((int)((a+7)/8))*8)
56#define ceil64(a) (a|0x3F)
57#define ceilXres(a,xres) (a|(xres - 1))
58
59/* ks108 chipset specific defines and code */
60
61#define KS_SET_DPY_START_LINE 0xC0
62#define KS_SET_PAGE_NUM 0xB8
63#define KS_SET_X 0x40
64#define KS_CEHI 0x01
65#define KS_CELO 0x00
66#define KS_SEL_CMD 0x08
67#define KS_SEL_DATA 0x00
68#define KS_DPY_ON 0x3F
69#define KS_DPY_OFF 0x3E
70#define KS_INTACK 0x40
71#define KS_CLRINT 0x02
72
73struct arcfb_par {
74 unsigned long dio_addr;
75 unsigned long cio_addr;
76 unsigned long c2io_addr;
77 atomic_t ref_count;
78 unsigned char cslut[9];
79 struct fb_info *info;
80 unsigned int irq;
81 spinlock_t lock;
82};
83
84static struct fb_fix_screeninfo arcfb_fix __initdata = {
85 .id = "arcfb",
86 .type = FB_TYPE_PACKED_PIXELS,
87 .visual = FB_VISUAL_MONO01,
88 .xpanstep = 0,
89 .ypanstep = 1,
90 .ywrapstep = 0,
91 .accel = FB_ACCEL_NONE,
92};
93
94static struct fb_var_screeninfo arcfb_var __initdata = {
95 .xres = 128,
96 .yres = 64,
97 .xres_virtual = 128,
98 .yres_virtual = 64,
99 .bits_per_pixel = 1,
100 .nonstd = 1,
101};
102
103static unsigned long num_cols;
104static unsigned long num_rows;
105static unsigned long dio_addr;
106static unsigned long cio_addr;
107static unsigned long c2io_addr;
108static unsigned long splashval;
109static unsigned long tuhold;
110static unsigned int nosplash;
111static unsigned int arcfb_enable;
112static unsigned int irq;
113
114static DECLARE_WAIT_QUEUE_HEAD(arcfb_waitq);
115
116static void ks108_writeb_ctl(struct arcfb_par *par,
117 unsigned int chipindex, unsigned char value)
118{
119 unsigned char chipselval = par->cslut[chipindex];
120
121 outb(chipselval|KS_CEHI|KS_SEL_CMD, par->cio_addr);
122 outb(value, par->dio_addr);
123 udelay(tuhold);
124 outb(chipselval|KS_CELO|KS_SEL_CMD, par->cio_addr);
125}
126
127static void ks108_writeb_mainctl(struct arcfb_par *par, unsigned char value)
128{
129
130 outb(value, par->cio_addr);
131 udelay(tuhold);
132}
133
134static unsigned char ks108_readb_ctl2(struct arcfb_par *par)
135{
136 return inb(par->c2io_addr);
137}
138
139static void ks108_writeb_data(struct arcfb_par *par,
140 unsigned int chipindex, unsigned char value)
141{
142 unsigned char chipselval = par->cslut[chipindex];
143
144 outb(chipselval|KS_CEHI|KS_SEL_DATA, par->cio_addr);
145 outb(value, par->dio_addr);
146 udelay(tuhold);
147 outb(chipselval|KS_CELO|KS_SEL_DATA, par->cio_addr);
148}
149
150static void ks108_set_start_line(struct arcfb_par *par,
151 unsigned int chipindex, unsigned char y)
152{
153 ks108_writeb_ctl(par, chipindex, KS_SET_DPY_START_LINE|y);
154}
155
156static void ks108_set_yaddr(struct arcfb_par *par,
157 unsigned int chipindex, unsigned char y)
158{
159 ks108_writeb_ctl(par, chipindex, KS_SET_PAGE_NUM|y);
160}
161
162static void ks108_set_xaddr(struct arcfb_par *par,
163 unsigned int chipindex, unsigned char x)
164{
165 ks108_writeb_ctl(par, chipindex, KS_SET_X|x);
166}
167
168static void ks108_clear_lcd(struct arcfb_par *par, unsigned int chipindex)
169{
170 int i,j;
171
172 for (i = 0; i <= 8; i++) {
173 ks108_set_yaddr(par, chipindex, i);
174 ks108_set_xaddr(par, chipindex, 0);
175 for (j = 0; j < 64; j++) {
176 ks108_writeb_data(par, chipindex,
177 (unsigned char) splashval);
178 }
179 }
180}
181
182/* main arcfb functions */
183
184static int arcfb_open(struct fb_info *info, int user)
185{
186 struct arcfb_par *par = info->par;
187
188 atomic_inc(&par->ref_count);
189 return 0;
190}
191
192static int arcfb_release(struct fb_info *info, int user)
193{
194 struct arcfb_par *par = info->par;
195 int count = atomic_read(&par->ref_count);
196
197 if (!count)
198 return -EINVAL;
199 atomic_dec(&par->ref_count);
200 return 0;
201}
202
203static int arcfb_pan_display(struct fb_var_screeninfo *var,
204 struct fb_info *info)
205{
206 int i;
207 struct arcfb_par *par = info->par;
208
209 if ((var->vmode & FB_VMODE_YWRAP) && (var->yoffset < 64)
210 && (info->var.yres <= 64)) {
211 for (i = 0; i < num_cols; i++) {
212 ks108_set_start_line(par, i, var->yoffset);
213 }
214 info->var.yoffset = var->yoffset;
215 return 0;
216 }
217
218 return -EINVAL;
219}
220
221static irqreturn_t arcfb_interrupt(int vec, void *dev_instance,
222 struct pt_regs *regs)
223{
224 struct fb_info *info = dev_instance;
225 unsigned char ctl2status;
226 struct arcfb_par *par = info->par;
227
228 ctl2status = ks108_readb_ctl2(par);
229
230 if (!(ctl2status & KS_INTACK)) /* not arc generated interrupt */
231 return IRQ_NONE;
232
233 ks108_writeb_mainctl(par, KS_CLRINT);
234
235 spin_lock(&par->lock);
236 if (waitqueue_active(&arcfb_waitq)) {
237 wake_up(&arcfb_waitq);
238 }
239 spin_unlock(&par->lock);
240
241 return IRQ_HANDLED;
242}
243
244/*
245 * here we handle a specific page on the lcd. the complexity comes from
246 * the fact that the fb is laidout in 8xX vertical columns. we extract
247 * each write of 8 vertical pixels. then we shift out as we move along
248 * X. That's what rightshift does. bitmask selects the desired input bit.
249 */
250static void arcfb_lcd_update_page(struct arcfb_par *par, unsigned int upper,
251 unsigned int left, unsigned int right, unsigned int distance)
252{
253 unsigned char *src;
254 unsigned int xindex, yindex, chipindex, linesize;
255 int i, count;
256 unsigned char val;
257 unsigned char bitmask, rightshift;
258
259 xindex = left >> 6;
260 yindex = upper >> 6;
261 chipindex = (xindex + (yindex*num_cols));
262
263 ks108_set_yaddr(par, chipindex, upper/8);
264
265 linesize = par->info->var.xres/8;
266 src = par->info->screen_base + (left/8) + (upper * linesize);
267 ks108_set_xaddr(par, chipindex, left);
268
269 bitmask=1;
270 rightshift=0;
271 while (left <= right) {
272 val = 0;
273 for (i = 0; i < 8; i++) {
274 if ( i > rightshift) {
275 val |= (*(src + (i*linesize)) & bitmask)
276 << (i - rightshift);
277 } else {
278 val |= (*(src + (i*linesize)) & bitmask)
279 >> (rightshift - i);
280 }
281 }
282 ks108_writeb_data(par, chipindex, val);
283 left++;
284 count++;
285 if (bitmask == 0x80) {
286 bitmask = 1;
287 src++;
288 rightshift=0;
289 } else {
290 bitmask <<= 1;
291 rightshift++;
292 }
293 }
294}
295
296/*
297 * here we handle the entire vertical page of the update. we write across
298 * lcd chips. update_page uses the upper/left values to decide which
299 * chip to select for the right. upper is needed for setting the page
300 * desired for the write.
301 */
302static void arcfb_lcd_update_vert(struct arcfb_par *par, unsigned int top,
303 unsigned int bottom, unsigned int left, unsigned int right)
304{
305 unsigned int distance, upper, lower;
306
307 distance = (bottom - top) + 1;
308 upper = top;
309 lower = top + 7;
310
311 while (distance > 0) {
312 distance -= 8;
313 arcfb_lcd_update_page(par, upper, left, right, 8);
314 upper = lower + 1;
315 lower = upper + 7;
316 }
317}
318
319/*
320 * here we handle horizontal blocks for the update. update_vert will
321 * handle spaning multiple pages. we break out each horizontal
322 * block in to individual blocks no taller than 64 pixels.
323 */
324static void arcfb_lcd_update_horiz(struct arcfb_par *par, unsigned int left,
325 unsigned int right, unsigned int top, unsigned int h)
326{
327 unsigned int distance, upper, lower;
328
329 distance = h;
330 upper = floor8(top);
331 lower = min(upper + distance - 1, ceil64(upper));
332
333 while (distance > 0) {
334 distance -= ((lower - upper) + 1 );
335 arcfb_lcd_update_vert(par, upper, lower, left, right);
336 upper = lower + 1;
337 lower = min(upper + distance - 1, ceil64(upper));
338 }
339}
340
341/*
342 * here we start the process of spliting out the fb update into
343 * individual blocks of pixels. we end up spliting into 64x64 blocks
344 * and finally down to 64x8 pages.
345 */
346static void arcfb_lcd_update(struct arcfb_par *par, unsigned int dx,
347 unsigned int dy, unsigned int w, unsigned int h)
348{
349 unsigned int left, right, distance, y;
350
351 /* align the request first */
352 y = floor8(dy);
353 h += dy - y;
354 h = iceil8(h);
355
356 distance = w;
357 left = dx;
358 right = min(left + w - 1, ceil64(left));
359
360 while (distance > 0) {
361 arcfb_lcd_update_horiz(par, left, right, y, h);
362 distance -= ((right - left) + 1);
363 left = right + 1;
364 right = min(left + distance - 1, ceil64(left));
365 }
366}
367
368void arcfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
369{
370 struct arcfb_par *par = info->par;
371
372 cfb_fillrect(info, rect);
373
374 /* update the physical lcd */
375 arcfb_lcd_update(par, rect->dx, rect->dy, rect->width, rect->height);
376}
377
378void arcfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
379{
380 struct arcfb_par *par = info->par;
381
382 cfb_copyarea(info, area);
383
384 /* update the physical lcd */
385 arcfb_lcd_update(par, area->dx, area->dy, area->width, area->height);
386}
387
388void arcfb_imageblit(struct fb_info *info, const struct fb_image *image)
389{
390 struct arcfb_par *par = info->par;
391
392 cfb_imageblit(info, image);
393
394 /* update the physical lcd */
395 arcfb_lcd_update(par, image->dx, image->dy, image->width,
396 image->height);
397}
398
399static int arcfb_ioctl(struct inode *inode, struct file *file,
400 unsigned int cmd, unsigned long arg,
401 struct fb_info *info)
402{
403 void __user *argp = (void __user *)arg;
404 struct arcfb_par *par = info->par;
405 unsigned long flags;
406
407 switch (cmd) {
408 case FBIO_WAITEVENT:
409 {
410 DEFINE_WAIT(wait);
411 /* illegal to wait on arc if no irq will occur */
412 if (!par->irq)
413 return -EINVAL;
414
415 /* wait until the Arc has generated an interrupt
416 * which will wake us up */
417 spin_lock_irqsave(&par->lock, flags);
418 prepare_to_wait(&arcfb_waitq, &wait,
419 TASK_INTERRUPTIBLE);
420 spin_unlock_irqrestore(&par->lock, flags);
421 schedule();
422 finish_wait(&arcfb_waitq, &wait);
423 }
424 case FBIO_GETCONTROL2:
425 {
426 unsigned char ctl2;
427
428 ctl2 = ks108_readb_ctl2(info->par);
429 if (copy_to_user(argp, &ctl2, sizeof(ctl2)))
430 return -EFAULT;
431 return 0;
432 }
433 default:
434 return -EINVAL;
435 }
436}
437
438/*
439 * this is the access path from userspace. they can seek and write to
440 * the fb. it's inefficient for them to do anything less than 64*8
441 * writes since we update the lcd in each write() anyway.
442 */
443static ssize_t arcfb_write(struct file *file, const char *buf, size_t count,
444 loff_t *ppos)
445{
446 /* modded from epson 1355 */
447
448 struct inode *inode;
449 int fbidx;
450 struct fb_info *info;
451 unsigned long p;
452 int err=-EINVAL;
453 unsigned int fbmemlength,x,y,w,h, bitppos, startpos, endpos, bitcount;
454 struct arcfb_par *par;
455 unsigned int xres;
456
457 p = *ppos;
458 inode = file->f_dentry->d_inode;
459 fbidx = iminor(inode);
460 info = registered_fb[fbidx];
461 par = info->par;
462
463 if (!info || !info->screen_base)
464 return -ENODEV;
465
466 xres = info->var.xres;
467 fbmemlength = (xres * info->var.yres)/8;
468
469 if (p > fbmemlength)
470 return -ENOSPC;
471
472 err = 0;
473 if ((count + p) > fbmemlength) {
474 count = fbmemlength - p;
475 err = -ENOSPC;
476 }
477
478 if (count) {
479 char *base_addr;
480
481 base_addr = info->screen_base;
482 count -= copy_from_user(base_addr + p, buf, count);
483 *ppos += count;
484 err = -EFAULT;
485 }
486
487
488 bitppos = p*8;
489 startpos = floorXres(bitppos, xres);
490 endpos = ceilXres((bitppos + (count*8)), xres);
491 bitcount = endpos - startpos;
492
493 x = startpos % xres;
494 y = startpos / xres;
495 w = xres;
496 h = bitcount / xres;
497 arcfb_lcd_update(par, x, y, w, h);
498
499 if (count)
500 return count;
501 return err;
502}
503
504static void arcfb_platform_release(struct device *device)
505{
506}
507
508static struct fb_ops arcfb_ops = {
509 .owner = THIS_MODULE,
510 .fb_open = arcfb_open,
511 .fb_write = arcfb_write,
512 .fb_release = arcfb_release,
513 .fb_pan_display = arcfb_pan_display,
514 .fb_fillrect = arcfb_fillrect,
515 .fb_copyarea = arcfb_copyarea,
516 .fb_imageblit = arcfb_imageblit,
517 .fb_cursor = soft_cursor,
518 .fb_ioctl = arcfb_ioctl,
519};
520
521static int __init arcfb_probe(struct device *device)
522{
523 struct platform_device *dev = to_platform_device(device);
524 struct fb_info *info;
525 int retval = -ENOMEM;
526 int videomemorysize;
527 unsigned char *videomemory;
528 struct arcfb_par *par;
529 int i;
530
531 videomemorysize = (((64*64)*num_cols)*num_rows)/8;
532
533 /* We need a flat backing store for the Arc's
534 less-flat actual paged framebuffer */
535 if (!(videomemory = vmalloc(videomemorysize)))
536 return retval;
537
538 memset(videomemory, 0, videomemorysize);
539
540 info = framebuffer_alloc(sizeof(struct arcfb_par), &dev->dev);
541 if (!info)
542 goto err;
543
544 info->screen_base = (char __iomem *)videomemory;
545 info->fbops = &arcfb_ops;
546
547 info->var = arcfb_var;
548 info->fix = arcfb_fix;
549 par = info->par;
550 par->info = info;
551
552 if (!dio_addr || !cio_addr || !c2io_addr) {
553 printk(KERN_WARNING "no IO addresses supplied\n");
554 goto err1;
555 }
556 par->dio_addr = dio_addr;
557 par->cio_addr = cio_addr;
558 par->c2io_addr = c2io_addr;
559 par->cslut[0] = 0x00;
560 par->cslut[1] = 0x06;
561 info->flags = FBINFO_FLAG_DEFAULT;
562 spin_lock_init(&par->lock);
563 retval = register_framebuffer(info);
564 if (retval < 0)
565 goto err1;
566 dev_set_drvdata(&dev->dev, info);
567 if (irq) {
568 par->irq = irq;
569 if (request_irq(par->irq, &arcfb_interrupt, SA_SHIRQ,
570 "arcfb", info)) {
571 printk(KERN_INFO
572 "arcfb: Failed req IRQ %d\n", par->irq);
573 goto err1;
574 }
575 }
576 printk(KERN_INFO
577 "fb%d: Arc frame buffer device, using %dK of video memory\n",
578 info->node, videomemorysize >> 10);
579
580 /* this inits the lcd but doesn't clear dirty pixels */
581 for (i = 0; i < num_cols * num_rows; i++) {
582 ks108_writeb_ctl(par, i, KS_DPY_OFF);
583 ks108_set_start_line(par, i, 0);
584 ks108_set_yaddr(par, i, 0);
585 ks108_set_xaddr(par, i, 0);
586 ks108_writeb_ctl(par, i, KS_DPY_ON);
587 }
588
589 /* if we were told to splash the screen, we just clear it */
590 if (!nosplash) {
591 for (i = 0; i < num_cols * num_rows; i++) {
592 printk(KERN_INFO "fb%d: splashing lcd %d\n",
593 info->node, i);
594 ks108_set_start_line(par, i, 0);
595 ks108_clear_lcd(par, i);
596 }
597 }
598
599 return 0;
600err1:
601 framebuffer_release(info);
602err:
603 vfree(videomemory);
604 return retval;
605}
606
607static int arcfb_remove(struct device *device)
608{
609 struct fb_info *info = dev_get_drvdata(device);
610
611 if (info) {
612 unregister_framebuffer(info);
613 vfree(info->screen_base);
614 framebuffer_release(info);
615 }
616 return 0;
617}
618
619static struct device_driver arcfb_driver = {
620 .name = "arcfb",
621 .bus = &platform_bus_type,
622 .probe = arcfb_probe,
623 .remove = arcfb_remove,
624};
625
626static struct platform_device arcfb_device = {
627 .name = "arcfb",
628 .id = 0,
629 .dev = {
630 .release = arcfb_platform_release,
631 }
632};
633
634static int __init arcfb_init(void)
635{
636 int ret;
637
638 if (!arcfb_enable)
639 return -ENXIO;
640
641 ret = driver_register(&arcfb_driver);
642 if (!ret) {
643 ret = platform_device_register(&arcfb_device);
644 if (ret)
645 driver_unregister(&arcfb_driver);
646 }
647 return ret;
648
649}
650
651static void __exit arcfb_exit(void)
652{
653 platform_device_unregister(&arcfb_device);
654 driver_unregister(&arcfb_driver);
655}
656
657module_param(num_cols, ulong, 0);
658MODULE_PARM_DESC(num_cols, "Num horiz panels, eg: 2 = 128 bit wide");
659module_param(num_rows, ulong, 0);
660MODULE_PARM_DESC(num_rows, "Num vert panels, eg: 1 = 64 bit high");
661module_param(nosplash, uint, 0);
662MODULE_PARM_DESC(nosplash, "Disable doing the splash screen");
663module_param(arcfb_enable, uint, 0);
664MODULE_PARM_DESC(arcfb_enable, "Enable communication with Arc board");
665module_param(dio_addr, ulong, 0);
666MODULE_PARM_DESC(dio_addr, "IO address for data, eg: 0x480");
667module_param(cio_addr, ulong, 0);
668MODULE_PARM_DESC(cio_addr, "IO address for control, eg: 0x400");
669module_param(c2io_addr, ulong, 0);
670MODULE_PARM_DESC(c2io_addr, "IO address for secondary control, eg: 0x408");
671module_param(splashval, ulong, 0);
672MODULE_PARM_DESC(splashval, "Splash pattern: 0xFF is black, 0x00 is green");
673module_param(tuhold, ulong, 0);
674MODULE_PARM_DESC(tuhold, "Time to hold between strobing data to Arc board");
675module_param(irq, uint, 0);
676MODULE_PARM_DESC(irq, "IRQ for the Arc board");
677
678module_init(arcfb_init);
679module_exit(arcfb_exit);
680
681MODULE_DESCRIPTION("fbdev driver for Arc monochrome LCD board");
682MODULE_AUTHOR("Jaya Kumar");
683MODULE_LICENSE("GPL");
684
diff --git a/drivers/video/chipsfb.c b/drivers/video/chipsfb.c
index ab98f225fe3e..95e72550d43f 100644
--- a/drivers/video/chipsfb.c
+++ b/drivers/video/chipsfb.c
@@ -423,9 +423,6 @@ chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent)
423 pmu_register_sleep_notifier(&chips_sleep_notifier); 423 pmu_register_sleep_notifier(&chips_sleep_notifier);
424#endif /* CONFIG_PMAC_PBOOK */ 424#endif /* CONFIG_PMAC_PBOOK */
425 425
426 /* Clear the entire framebuffer */
427 memset(p->screen_base, 0, 0x100000);
428
429 pci_set_drvdata(dp, p); 426 pci_set_drvdata(dp, p);
430 return 0; 427 return 0;
431} 428}
diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig
index ccf55811d24f..e4b91a4b936c 100644
--- a/drivers/video/console/Kconfig
+++ b/drivers/video/console/Kconfig
@@ -153,6 +153,15 @@ config FONT_6x11
153 Small console font with Macintosh-style high-half glyphs. Some Mac 153 Small console font with Macintosh-style high-half glyphs. Some Mac
154 framebuffer drivers don't support this one at all. 154 framebuffer drivers don't support this one at all.
155 155
156config FONT_7x14
157 bool "console 7x14 font (not supported by all drivers)" if FONTS
158 depends on FRAMEBUFFER_CONSOLE
159 default y if !SPARC32 && !SPARC64 && !FONTS
160 help
161 Console font with characters just a bit smaller than the default.
162 If the standard 8x16 font is a little too big for you, say Y.
163 Otherwise, say N.
164
156config FONT_PEARL_8x8 165config FONT_PEARL_8x8
157 bool "Pearl (old m68k) console 8x8 font" if FONTS 166 bool "Pearl (old m68k) console 8x8 font" if FONTS
158 depends on FRAMEBUFFER_CONSOLE 167 depends on FRAMEBUFFER_CONSOLE
@@ -187,5 +196,13 @@ config FONT_SUN12x22
187 big letters (like the letters used in the SPARC PROM). If the 196 big letters (like the letters used in the SPARC PROM). If the
188 standard font is unreadable for you, say Y, otherwise say N. 197 standard font is unreadable for you, say Y, otherwise say N.
189 198
199config FONT_10x18
200 bool "console 10x18 font (not supported by all drivers)"
201 depends on FONTS
202 help
203 This is a high resolution console font for machines with very
204 big letters. It fits between the sun 12x22 and the normal 8x16 font.
205 If other fonts are too big or too small for you, say Y, otherwise say N.
206
190endmenu 207endmenu
191 208
diff --git a/drivers/video/console/Makefile b/drivers/video/console/Makefile
index 33516447f9f2..b562f6bb9d31 100644
--- a/drivers/video/console/Makefile
+++ b/drivers/video/console/Makefile
@@ -10,6 +10,8 @@ font-objs-$(CONFIG_FONT_SUN12x22) += font_sun12x22.o
10font-objs-$(CONFIG_FONT_8x8) += font_8x8.o 10font-objs-$(CONFIG_FONT_8x8) += font_8x8.o
11font-objs-$(CONFIG_FONT_8x16) += font_8x16.o 11font-objs-$(CONFIG_FONT_8x16) += font_8x16.o
12font-objs-$(CONFIG_FONT_6x11) += font_6x11.o 12font-objs-$(CONFIG_FONT_6x11) += font_6x11.o
13font-objs-$(CONFIG_FONT_7x14) += font_7x14.o
14font-objs-$(CONFIG_FONT_10x18) += font_10x18.o
13font-objs-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o 15font-objs-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o
14font-objs-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o 16font-objs-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
15font-objs-$(CONFIG_FONT_MINI_4x6) += font_mini_4x6.o 17font-objs-$(CONFIG_FONT_MINI_4x6) += font_mini_4x6.o
diff --git a/drivers/video/console/bitblit.c b/drivers/video/console/bitblit.c
index b28a4b0e395e..3c731577fed6 100644
--- a/drivers/video/console/bitblit.c
+++ b/drivers/video/console/bitblit.c
@@ -107,13 +107,6 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info,
107 const unsigned short *s, int count, int yy, int xx, 107 const unsigned short *s, int count, int yy, int xx,
108 int fg, int bg) 108 int fg, int bg)
109{ 109{
110 void (*move_unaligned)(struct fb_info *info, struct fb_pixmap *buf,
111 u8 *dst, u32 d_pitch, u8 *src, u32 idx,
112 u32 height, u32 shift_high, u32 shift_low,
113 u32 mod);
114 void (*move_aligned)(struct fb_info *info, struct fb_pixmap *buf,
115 u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch,
116 u32 height);
117 unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff; 110 unsigned short charmask = vc->vc_hi_font_mask ? 0x1ff : 0xff;
118 unsigned int width = (vc->vc_font.width + 7) >> 3; 111 unsigned int width = (vc->vc_font.width + 7) >> 3;
119 unsigned int cellsize = vc->vc_font.height * width; 112 unsigned int cellsize = vc->vc_font.height * width;
@@ -141,13 +134,6 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info,
141 image.height = vc->vc_font.height; 134 image.height = vc->vc_font.height;
142 image.depth = 1; 135 image.depth = 1;
143 136
144 if (info->pixmap.outbuf && info->pixmap.inbuf) {
145 move_aligned = fb_iomove_buf_aligned;
146 move_unaligned = fb_iomove_buf_unaligned;
147 } else {
148 move_aligned = fb_sysmove_buf_aligned;
149 move_unaligned = fb_sysmove_buf_unaligned;
150 }
151 while (count) { 137 while (count) {
152 if (count > maxcnt) 138 if (count > maxcnt)
153 cnt = k = maxcnt; 139 cnt = k = maxcnt;
@@ -171,9 +157,9 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info,
171 src = buf; 157 src = buf;
172 } 158 }
173 159
174 move_unaligned(info, &info->pixmap, dst, pitch, 160 fb_pad_unaligned_buffer(dst, pitch, src, idx,
175 src, idx, image.height, 161 image.height, shift_high,
176 shift_high, shift_low, mod); 162 shift_low, mod);
177 shift_low += mod; 163 shift_low += mod;
178 dst += (shift_low >= 8) ? width : width - 1; 164 dst += (shift_low >= 8) ? width : width - 1;
179 shift_low &= 7; 165 shift_low &= 7;
@@ -189,8 +175,7 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info,
189 src = buf; 175 src = buf;
190 } 176 }
191 177
192 move_aligned(info, &info->pixmap, dst, pitch, 178 fb_pad_aligned_buffer(dst, pitch, src, idx, image.height);
193 src, idx, image.height);
194 dst += width; 179 dst += width;
195 } 180 }
196 } 181 }
diff --git a/drivers/video/console/font_10x18.c b/drivers/video/console/font_10x18.c
new file mode 100644
index 000000000000..ff0af96e4dfc
--- /dev/null
+++ b/drivers/video/console/font_10x18.c
@@ -0,0 +1,5146 @@
1/********************************
2 * adapted from font_sun12x22.c *
3 * by Jurriaan Kalkman 06-2005 *
4 ********************************/
5
6#include <linux/font.h>
7
8#define FONTDATAMAX 9216
9
10static unsigned char fontdata_10x18[FONTDATAMAX] = {
11
12 /* 0 0x00 '^@' */
13 0x00, 0x00, /* 0000000000 */
14 0x00, 0x00, /* 0000000000 */
15 0x00, 0x00, /* 0000000000 */
16 0x00, 0x00, /* 0000000000 */
17 0x00, 0x00, /* 0000000000 */
18 0x00, 0x00, /* 0000000000 */
19 0x00, 0x00, /* 0000000000 */
20 0x00, 0x00, /* 0000000000 */
21 0x00, 0x00, /* 0000000000 */
22 0x00, 0x00, /* 0000000000 */
23 0x00, 0x00, /* 0000000000 */
24 0x00, 0x00, /* 0000000000 */
25 0x00, 0x00, /* 0000000000 */
26 0x00, 0x00, /* 0000000000 */
27 0x00, 0x00, /* 0000000000 */
28 0x00, 0x00, /* 0000000000 */
29 0x00, 0x00, /* 0000000000 */
30 0x00, 0x00, /* 0000000000 */
31
32 /* 1 0x01 '^A' */
33 0x00, 0x00, /* 0000000000 */
34 0x00, 0x00, /* 0000000000 */
35 0x00, 0x00, /* 0000000000 */
36 0x00, 0x00, /* 0000000000 */
37 0x00, 0x00, /* 0000000000 */
38 0x3f, 0x80, /* 0011111110 */
39 0x40, 0x40, /* 0100000001 */
40 0x5b, 0x40, /* 0101101101 */
41 0x40, 0x40, /* 0100000001 */
42 0x44, 0x40, /* 0100010001 */
43 0x44, 0x40, /* 0100010001 */
44 0x51, 0x40, /* 0101000101 */
45 0x4e, 0x40, /* 0100111001 */
46 0x40, 0x40, /* 0100000001 */
47 0x3f, 0x80, /* 0011111110 */
48 0x00, 0x00, /* 0000000000 */
49 0x00, 0x00, /* 0000000000 */
50 0x00, 0x00, /* 0000000000 */
51
52 /* 2 0x02 '^B' */
53 0x00, 0x00, /* 0000000000 */
54 0x00, 0x00, /* 0000000000 */
55 0x00, 0x00, /* 0000000000 */
56 0x00, 0x00, /* 0000000000 */
57 0x00, 0x00, /* 0000000000 */
58 0x3f, 0x80, /* 0011111110 */
59 0x7f, 0xc0, /* 0111111111 */
60 0x64, 0xc0, /* 0110010011 */
61 0x7f, 0xc0, /* 0111111111 */
62 0x7b, 0xc0, /* 0111101111 */
63 0x7b, 0xc0, /* 0111101111 */
64 0x6e, 0xc0, /* 0110111011 */
65 0x71, 0xc0, /* 0111000111 */
66 0x7f, 0xc0, /* 0111111111 */
67 0x3f, 0x80, /* 0011111110 */
68 0x00, 0x00, /* 0000000000 */
69 0x00, 0x00, /* 0000000000 */
70 0x00, 0x00, /* 0000000000 */
71
72 /* 3 0x03 '^C' */
73 0x00, 0x00, /* 0000000000 */
74 0x00, 0x00, /* 0000000000 */
75 0x00, 0x00, /* 0000000000 */
76 0x00, 0x00, /* 0000000000 */
77 0x00, 0x00, /* 0000000000 */
78 0x11, 0x00, /* 0001000100 */
79 0x3b, 0x80, /* 0011101110 */
80 0x7f, 0xc0, /* 0111111111 */
81 0x3f, 0x80, /* 0011111110 */
82 0x3f, 0x80, /* 0011111110 */
83 0x1f, 0x00, /* 0001111100 */
84 0x1f, 0x00, /* 0001111100 */
85 0x0e, 0x00, /* 0000111000 */
86 0x0e, 0x00, /* 0000111000 */
87 0x04, 0x00, /* 0000010000 */
88 0x00, 0x00, /* 0000000000 */
89 0x00, 0x00, /* 0000000000 */
90 0x00, 0x00, /* 0000000000 */
91
92 /* 4 0x04 '^D' */
93 0x00, 0x00, /* 0000000000 */
94 0x00, 0x00, /* 0000000000 */
95 0x00, 0x00, /* 0000000000 */
96 0x00, 0x00, /* 0000000000 */
97 0x04, 0x00, /* 0000010000 */
98 0x0e, 0x00, /* 0000111000 */
99 0x0e, 0x00, /* 0000111000 */
100 0x1f, 0x00, /* 0001111100 */
101 0x1f, 0x00, /* 0001111100 */
102 0x3f, 0x80, /* 0011111110 */
103 0x1f, 0x00, /* 0001111100 */
104 0x1f, 0x00, /* 0001111100 */
105 0x0e, 0x00, /* 0000111000 */
106 0x0e, 0x00, /* 0000111000 */
107 0x04, 0x00, /* 0000010000 */
108 0x00, 0x00, /* 0000000000 */
109 0x00, 0x00, /* 0000000000 */
110 0x00, 0x00, /* 0000000000 */
111
112 /* 5 0x05 '^E' */
113 0x00, 0x00, /* 0000000000 */
114 0x00, 0x00, /* 0000000000 */
115 0x00, 0x00, /* 0000000000 */
116 0x00, 0x00, /* 0000000000 */
117 0x00, 0x00, /* 0000000000 */
118 0x00, 0x00, /* 0000000000 */
119 0x0c, 0x00, /* 0000110000 */
120 0x1e, 0x00, /* 0001111000 */
121 0x0c, 0x00, /* 0000110000 */
122 0x31, 0x80, /* 0011000110 */
123 0x7b, 0xc0, /* 0111101111 */
124 0x35, 0x80, /* 0011010110 */
125 0x04, 0x00, /* 0000010000 */
126 0x0e, 0x00, /* 0000111000 */
127 0x1f, 0x00, /* 0001111100 */
128 0x00, 0x00, /* 0000000000 */
129 0x00, 0x00, /* 0000000000 */
130 0x00, 0x00, /* 0000000000 */
131
132 /* 6 0x06 '^F' */
133 0x00, 0x00, /* 0000000000 */
134 0x00, 0x00, /* 0000000000 */
135 0x00, 0x00, /* 0000000000 */
136 0x00, 0x00, /* 0000000000 */
137 0x04, 0x00, /* 0000010000 */
138 0x0e, 0x00, /* 0000111000 */
139 0x1f, 0x00, /* 0001111100 */
140 0x1f, 0x00, /* 0001111100 */
141 0x3f, 0x80, /* 0011111110 */
142 0x7f, 0xc0, /* 0111111111 */
143 0x7f, 0xc0, /* 0111111111 */
144 0x35, 0x80, /* 0011010110 */
145 0x04, 0x00, /* 0000010000 */
146 0x0e, 0x00, /* 0000111000 */
147 0x1f, 0x00, /* 0001111100 */
148 0x00, 0x00, /* 0000000000 */
149 0x00, 0x00, /* 0000000000 */
150 0x00, 0x00, /* 0000000000 */
151
152 /* 7 0x07 '^G' */
153 0x00, 0x00, /* 0000000000 */
154 0x00, 0x00, /* 0000000000 */
155 0x00, 0x00, /* 0000000000 */
156 0x00, 0x00, /* 0000000000 */
157 0x00, 0x00, /* 0000000000 */
158 0x0c, 0x00, /* 0000110000 */
159 0x1e, 0x00, /* 0001111000 */
160 0x1e, 0x00, /* 0001111000 */
161 0x3f, 0x00, /* 0011111100 */
162 0x3f, 0x00, /* 0011111100 */
163 0x1e, 0x00, /* 0001111000 */
164 0x1e, 0x00, /* 0001111000 */
165 0x0c, 0x00, /* 0000110000 */
166 0x00, 0x00, /* 0000000000 */
167 0x00, 0x00, /* 0000000000 */
168 0x00, 0x00, /* 0000000000 */
169 0x00, 0x00, /* 0000000000 */
170 0x00, 0x00, /* 0000000000 */
171
172 /* 8 0x08 '^H' */
173 0xff, 0xc0, /* 1111111111 */
174 0xff, 0xc0, /* 1111111111 */
175 0xff, 0xc0, /* 1111111111 */
176 0xff, 0xc0, /* 1111111111 */
177 0xff, 0xc0, /* 1111111111 */
178 0xf3, 0xc0, /* 1111001111 */
179 0xe1, 0xc0, /* 1110000111 */
180 0xe1, 0xc0, /* 1110000111 */
181 0xc0, 0xc0, /* 1100000011 */
182 0xc0, 0xc0, /* 1100000011 */
183 0xe1, 0xc0, /* 1110000111 */
184 0xe1, 0xc0, /* 1110000111 */
185 0xf3, 0xc0, /* 1111001111 */
186 0xff, 0xc0, /* 1111111111 */
187 0xff, 0xc0, /* 1111111111 */
188 0xff, 0xc0, /* 1111111111 */
189 0xff, 0xc0, /* 1111111111 */
190 0xff, 0xc0, /* 1111111111 */
191
192 /* 9 0x09 '^I' */
193 0x00, 0x00, /* 0000000000 */
194 0x00, 0x00, /* 0000000000 */
195 0x00, 0x00, /* 0000000000 */
196 0x00, 0x00, /* 0000000000 */
197 0x00, 0x00, /* 0000000000 */
198 0x0c, 0x00, /* 0000110000 */
199 0x12, 0x00, /* 0001001000 */
200 0x12, 0x00, /* 0001001000 */
201 0x21, 0x00, /* 0010000100 */
202 0x21, 0x00, /* 0010000100 */
203 0x12, 0x00, /* 0001001000 */
204 0x12, 0x00, /* 0001001000 */
205 0x0c, 0x00, /* 0000110000 */
206 0x00, 0x00, /* 0000000000 */
207 0x00, 0x00, /* 0000000000 */
208 0x00, 0x00, /* 0000000000 */
209 0x00, 0x00, /* 0000000000 */
210 0x00, 0x00, /* 0000000000 */
211
212 /* 10 0x0a '^J' */
213 0xff, 0xc0, /* 1111111111 */
214 0xff, 0xc0, /* 1111111111 */
215 0xff, 0xc0, /* 1111111111 */
216 0xff, 0xc0, /* 1111111111 */
217 0xff, 0xc0, /* 1111111111 */
218 0xf3, 0xc0, /* 1111001111 */
219 0xed, 0xc0, /* 1110110111 */
220 0xed, 0xc0, /* 1110110111 */
221 0xde, 0xc0, /* 1101111011 */
222 0xde, 0xc0, /* 1101111011 */
223 0xed, 0xc0, /* 1110110111 */
224 0xed, 0xc0, /* 1110110111 */
225 0xf3, 0xc0, /* 1111001111 */
226 0xff, 0xc0, /* 1111111111 */
227 0xff, 0xc0, /* 1111111111 */
228 0xff, 0xc0, /* 1111111111 */
229 0xff, 0xc0, /* 1111111111 */
230 0xff, 0xc0, /* 1111111111 */
231
232 /* 11 0x0b '^K' */
233 0x00, 0x00, /* 0000000000 */
234 0x00, 0x00, /* 0000000000 */
235 0x0f, 0xc0, /* 0000111111 */
236 0x0f, 0xc0, /* 0000111111 */
237 0x03, 0xc0, /* 0000001111 */
238 0x06, 0xc0, /* 0000011011 */
239 0x0c, 0xc0, /* 0000110011 */
240 0x3c, 0x00, /* 0011110000 */
241 0x66, 0x00, /* 0110011000 */
242 0xc3, 0x00, /* 1100001100 */
243 0xc3, 0x00, /* 1100001100 */
244 0xc3, 0x00, /* 1100001100 */
245 0x66, 0x00, /* 0110011000 */
246 0x3c, 0x00, /* 0011110000 */
247 0x00, 0x00, /* 0000000000 */
248 0x00, 0x00, /* 0000000000 */
249 0x00, 0x00, /* 0000000000 */
250 0x00, 0x00, /* 0000000000 */
251
252 /* 12 0x0c '^L' */
253 0x00, 0x00, /* 0000000000 */
254 0x00, 0x00, /* 0000000000 */
255 0x00, 0x00, /* 0000000000 */
256 0x1e, 0x00, /* 0001111000 */
257 0x33, 0x00, /* 0011001100 */
258 0x61, 0x80, /* 0110000110 */
259 0x61, 0x80, /* 0110000110 */
260 0x61, 0x80, /* 0110000110 */
261 0x33, 0x00, /* 0011001100 */
262 0x1e, 0x00, /* 0001111000 */
263 0x0c, 0x00, /* 0000110000 */
264 0x0c, 0x00, /* 0000110000 */
265 0x3f, 0x00, /* 0011111100 */
266 0x0c, 0x00, /* 0000110000 */
267 0x0c, 0x00, /* 0000110000 */
268 0x00, 0x00, /* 0000000000 */
269 0x00, 0x00, /* 0000000000 */
270 0x00, 0x00, /* 0000000000 */
271
272 /* 13 0x0d '^M' */
273 0x00, 0x00, /* 0000000000 */
274 0x00, 0x00, /* 0000000000 */
275 0x00, 0x00, /* 0000000000 */
276 0x0f, 0x80, /* 0000111110 */
277 0x08, 0x80, /* 0000100010 */
278 0x0f, 0x80, /* 0000111110 */
279 0x08, 0x00, /* 0000100000 */
280 0x08, 0x00, /* 0000100000 */
281 0x08, 0x00, /* 0000100000 */
282 0x08, 0x00, /* 0000100000 */
283 0x08, 0x00, /* 0000100000 */
284 0x08, 0x00, /* 0000100000 */
285 0x38, 0x00, /* 0011100000 */
286 0x78, 0x00, /* 0111100000 */
287 0x30, 0x00, /* 0011000000 */
288 0x00, 0x00, /* 0000000000 */
289 0x00, 0x00, /* 0000000000 */
290 0x00, 0x00, /* 0000000000 */
291
292 /* 14 0x0e '^N' */
293 0x00, 0x00, /* 0000000000 */
294 0x00, 0x00, /* 0000000000 */
295 0x00, 0x00, /* 0000000000 */
296 0x1f, 0x80, /* 0001111110 */
297 0x10, 0x80, /* 0001000010 */
298 0x1f, 0x80, /* 0001111110 */
299 0x10, 0x80, /* 0001000010 */
300 0x10, 0x80, /* 0001000010 */
301 0x10, 0x80, /* 0001000010 */
302 0x10, 0x80, /* 0001000010 */
303 0x13, 0x80, /* 0001001110 */
304 0x17, 0x80, /* 0001011110 */
305 0x73, 0x00, /* 0111001100 */
306 0xf0, 0x00, /* 1111000000 */
307 0x60, 0x00, /* 0110000000 */
308 0x00, 0x00, /* 0000000000 */
309 0x00, 0x00, /* 0000000000 */
310 0x00, 0x00, /* 0000000000 */
311
312 /* 15 0x0f '^O' */
313 0x00, 0x00, /* 0000000000 */
314 0x00, 0x00, /* 0000000000 */
315 0x00, 0x00, /* 0000000000 */
316 0x04, 0x00, /* 0000010000 */
317 0x24, 0x80, /* 0010010010 */
318 0x15, 0x00, /* 0001010100 */
319 0x55, 0x40, /* 0101010101 */
320 0x3f, 0x80, /* 0011111110 */
321 0x0e, 0x00, /* 0000111000 */
322 0x00, 0x00, /* 0000000000 */
323 0x0e, 0x00, /* 0000111000 */
324 0x3f, 0x80, /* 0011111110 */
325 0x55, 0x40, /* 0101010101 */
326 0x15, 0x00, /* 0001010100 */
327 0x24, 0x80, /* 0010010010 */
328 0x00, 0x00, /* 0000000000 */
329 0x00, 0x00, /* 0000000000 */
330 0x00, 0x00, /* 0000000000 */
331
332 /* 16 0x10 '^P' */
333 0x00, 0x80, /* 0000000010 */
334 0x01, 0x80, /* 0000000110 */
335 0x03, 0x80, /* 0000001110 */
336 0x07, 0x80, /* 0000011110 */
337 0x0f, 0x80, /* 0000111110 */
338 0x1f, 0x80, /* 0001111110 */
339 0x3f, 0x80, /* 0011111110 */
340 0x7f, 0x80, /* 0111111110 */
341 0xff, 0x80, /* 1111111110 */
342 0x7f, 0x80, /* 0111111110 */
343 0x3f, 0x80, /* 0011111110 */
344 0x1f, 0x80, /* 0001111110 */
345 0x0f, 0x80, /* 0000111110 */
346 0x07, 0x80, /* 0000011110 */
347 0x03, 0x80, /* 0000001110 */
348 0x01, 0x80, /* 0000000110 */
349 0x00, 0x80, /* 0000000010 */
350 0x00, 0x00, /* 0000000000 */
351
352 /* 17 0x11 '^Q' */
353 0x40, 0x00, /* 0100000000 */
354 0x60, 0x00, /* 0110000000 */
355 0x70, 0x00, /* 0111000000 */
356 0x78, 0x00, /* 0111100000 */
357 0x7c, 0x00, /* 0111110000 */
358 0x7e, 0x00, /* 0111111000 */
359 0x7f, 0x00, /* 0111111100 */
360 0x7f, 0x80, /* 0111111110 */
361 0x7f, 0xc0, /* 0111111111 */
362 0x7f, 0x80, /* 0111111110 */
363 0x7f, 0x00, /* 0111111100 */
364 0x7e, 0x00, /* 0111111000 */
365 0x7c, 0x00, /* 0111110000 */
366 0x78, 0x00, /* 0111100000 */
367 0x70, 0x00, /* 0111000000 */
368 0x60, 0x00, /* 0110000000 */
369 0x40, 0x00, /* 0100000000 */
370 0x00, 0x00, /* 0000000000 */
371
372 /* 18 0x12 '^R' */
373 0x00, 0x00, /* 0000000000 */
374 0x00, 0x00, /* 0000000000 */
375 0x00, 0x00, /* 0000000000 */
376 0x00, 0x00, /* 0000000000 */
377 0x0c, 0x00, /* 0000110000 */
378 0x1e, 0x00, /* 0001111000 */
379 0x3f, 0x00, /* 0011111100 */
380 0x7f, 0x80, /* 0111111110 */
381 0x0c, 0x00, /* 0000110000 */
382 0x0c, 0x00, /* 0000110000 */
383 0x0c, 0x00, /* 0000110000 */
384 0x7f, 0x80, /* 0111111110 */
385 0x3f, 0x00, /* 0011111100 */
386 0x1e, 0x00, /* 0001111000 */
387 0x0c, 0x00, /* 0000110000 */
388 0x00, 0x00, /* 0000000000 */
389 0x00, 0x00, /* 0000000000 */
390 0x00, 0x00, /* 0000000000 */
391
392 /* 19 0x13 '^S' */
393 0x00, 0x00, /* 0000000000 */
394 0x33, 0x00, /* 0011001100 */
395 0x33, 0x00, /* 0011001100 */
396 0x33, 0x00, /* 0011001100 */
397 0x33, 0x00, /* 0011001100 */
398 0x33, 0x00, /* 0011001100 */
399 0x33, 0x00, /* 0011001100 */
400 0x33, 0x00, /* 0011001100 */
401 0x33, 0x00, /* 0011001100 */
402 0x33, 0x00, /* 0011001100 */
403 0x33, 0x00, /* 0011001100 */
404 0x00, 0x00, /* 0000000000 */
405 0x00, 0x00, /* 0000000000 */
406 0x33, 0x00, /* 0011001100 */
407 0x33, 0x00, /* 0011001100 */
408 0x00, 0x00, /* 0000000000 */
409 0x00, 0x00, /* 0000000000 */
410 0x00, 0x00, /* 0000000000 */
411
412 /* 20 0x14 '^T' */
413 0x00, 0x00, /* 0000000000 */
414 0x1f, 0xc0, /* 0001111111 */
415 0x39, 0x80, /* 0011100110 */
416 0x79, 0x80, /* 0111100110 */
417 0x79, 0x80, /* 0111100110 */
418 0x79, 0x80, /* 0111100110 */
419 0x39, 0x80, /* 0011100110 */
420 0x19, 0x80, /* 0001100110 */
421 0x19, 0x80, /* 0001100110 */
422 0x19, 0x80, /* 0001100110 */
423 0x19, 0x80, /* 0001100110 */
424 0x19, 0x80, /* 0001100110 */
425 0x19, 0x80, /* 0001100110 */
426 0x39, 0xc0, /* 0011100111 */
427 0x00, 0x00, /* 0000000000 */
428 0x00, 0x00, /* 0000000000 */
429 0x00, 0x00, /* 0000000000 */
430 0x00, 0x00, /* 0000000000 */
431
432 /* 21 0x15 '^U' */
433 0x00, 0x00, /* 0000000000 */
434 0x00, 0x00, /* 0000000000 */
435 0x3e, 0x00, /* 0011111000 */
436 0x63, 0x00, /* 0110001100 */
437 0x63, 0x00, /* 0110001100 */
438 0x60, 0x00, /* 0110000000 */
439 0x60, 0x00, /* 0110000000 */
440 0x3e, 0x00, /* 0011111000 */
441 0x63, 0x00, /* 0110001100 */
442 0x63, 0x00, /* 0110001100 */
443 0x3e, 0x00, /* 0011111000 */
444 0x03, 0x00, /* 0000001100 */
445 0x03, 0x00, /* 0000001100 */
446 0x63, 0x00, /* 0110001100 */
447 0x63, 0x00, /* 0110001100 */
448 0x3e, 0x00, /* 0011111000 */
449 0x00, 0x00, /* 0000000000 */
450 0x00, 0x00, /* 0000000000 */
451
452 /* 22 0x16 '^V' */
453 0x00, 0x00, /* 0000000000 */
454 0x00, 0x00, /* 0000000000 */
455 0x00, 0x00, /* 0000000000 */
456 0x00, 0x00, /* 0000000000 */
457 0x00, 0x00, /* 0000000000 */
458 0x00, 0x00, /* 0000000000 */
459 0x00, 0x00, /* 0000000000 */
460 0x00, 0x00, /* 0000000000 */
461 0x00, 0x00, /* 0000000000 */
462 0x00, 0x00, /* 0000000000 */
463 0x00, 0x00, /* 0000000000 */
464 0x00, 0x00, /* 0000000000 */
465 0x7f, 0x80, /* 0111111110 */
466 0x7f, 0x80, /* 0111111110 */
467 0x7f, 0x80, /* 0111111110 */
468 0x00, 0x00, /* 0000000000 */
469 0x00, 0x00, /* 0000000000 */
470 0x00, 0x00, /* 0000000000 */
471
472 /* 23 0x17 '^W' */
473 0x00, 0x00, /* 0000000000 */
474 0x00, 0x00, /* 0000000000 */
475 0x0c, 0x00, /* 0000110000 */
476 0x1e, 0x00, /* 0001111000 */
477 0x3f, 0x00, /* 0011111100 */
478 0x7f, 0x80, /* 0111111110 */
479 0x0c, 0x00, /* 0000110000 */
480 0x0c, 0x00, /* 0000110000 */
481 0x0c, 0x00, /* 0000110000 */
482 0x7f, 0x80, /* 0111111110 */
483 0x3f, 0x00, /* 0011111100 */
484 0x1e, 0x00, /* 0001111000 */
485 0x0c, 0x00, /* 0000110000 */
486 0x7f, 0x80, /* 0111111110 */
487 0x7f, 0x80, /* 0111111110 */
488 0x00, 0x00, /* 0000000000 */
489 0x00, 0x00, /* 0000000000 */
490 0x00, 0x00, /* 0000000000 */
491
492 /* 24 0x18 '^X' */
493 0x00, 0x00, /* 0000000000 */
494 0x00, 0x00, /* 0000000000 */
495 0x00, 0x00, /* 0000000000 */
496 0x0c, 0x00, /* 0000110000 */
497 0x1e, 0x00, /* 0001111000 */
498 0x3f, 0x00, /* 0011111100 */
499 0x7f, 0x80, /* 0111111110 */
500 0x0c, 0x00, /* 0000110000 */
501 0x0c, 0x00, /* 0000110000 */
502 0x0c, 0x00, /* 0000110000 */
503 0x0c, 0x00, /* 0000110000 */
504 0x0c, 0x00, /* 0000110000 */
505 0x0c, 0x00, /* 0000110000 */
506 0x0c, 0x00, /* 0000110000 */
507 0x0c, 0x00, /* 0000110000 */
508 0x00, 0x00, /* 0000000000 */
509 0x00, 0x00, /* 0000000000 */
510 0x00, 0x00, /* 0000000000 */
511
512 /* 25 0x19 '^Y' */
513 0x00, 0x00, /* 0000000000 */
514 0x00, 0x00, /* 0000000000 */
515 0x00, 0x00, /* 0000000000 */
516 0x0c, 0x00, /* 0000110000 */
517 0x0c, 0x00, /* 0000110000 */
518 0x0c, 0x00, /* 0000110000 */
519 0x0c, 0x00, /* 0000110000 */
520 0x0c, 0x00, /* 0000110000 */
521 0x0c, 0x00, /* 0000110000 */
522 0x0c, 0x00, /* 0000110000 */
523 0x0c, 0x00, /* 0000110000 */
524 0x7f, 0x80, /* 0111111110 */
525 0x3f, 0x00, /* 0011111100 */
526 0x1e, 0x00, /* 0001111000 */
527 0x0c, 0x00, /* 0000110000 */
528 0x00, 0x00, /* 0000000000 */
529 0x00, 0x00, /* 0000000000 */
530 0x00, 0x00, /* 0000000000 */
531
532 /* 26 0x1a '^Z' */
533 0x00, 0x00, /* 0000000000 */
534 0x00, 0x00, /* 0000000000 */
535 0x00, 0x00, /* 0000000000 */
536 0x00, 0x00, /* 0000000000 */
537 0x04, 0x00, /* 0000010000 */
538 0x06, 0x00, /* 0000011000 */
539 0x07, 0x00, /* 0000011100 */
540 0x7f, 0x80, /* 0111111110 */
541 0x7f, 0x80, /* 0111111110 */
542 0x07, 0x00, /* 0000011100 */
543 0x06, 0x00, /* 0000011000 */
544 0x04, 0x00, /* 0000010000 */
545 0x00, 0x00, /* 0000000000 */
546 0x00, 0x00, /* 0000000000 */
547 0x00, 0x00, /* 0000000000 */
548 0x00, 0x00, /* 0000000000 */
549 0x00, 0x00, /* 0000000000 */
550 0x00, 0x00, /* 0000000000 */
551
552 /* 27 0x1b '^[' */
553 0x00, 0x00, /* 0000000000 */
554 0x00, 0x00, /* 0000000000 */
555 0x00, 0x00, /* 0000000000 */
556 0x00, 0x00, /* 0000000000 */
557 0x00, 0x00, /* 0000000000 */
558 0x08, 0x00, /* 0000100000 */
559 0x18, 0x00, /* 0001100000 */
560 0x38, 0x00, /* 0011100000 */
561 0x7f, 0x80, /* 0111111110 */
562 0x7f, 0x80, /* 0111111110 */
563 0x38, 0x00, /* 0011100000 */
564 0x18, 0x00, /* 0001100000 */
565 0x08, 0x00, /* 0000100000 */
566 0x00, 0x00, /* 0000000000 */
567 0x00, 0x00, /* 0000000000 */
568 0x00, 0x00, /* 0000000000 */
569 0x00, 0x00, /* 0000000000 */
570 0x00, 0x00, /* 0000000000 */
571
572 /* 28 0x1c '^\' */
573 0x00, 0x00, /* 0000000000 */
574 0x00, 0x00, /* 0000000000 */
575 0x00, 0x00, /* 0000000000 */
576 0x00, 0x00, /* 0000000000 */
577 0x00, 0x00, /* 0000000000 */
578 0x60, 0x00, /* 0110000000 */
579 0x60, 0x00, /* 0110000000 */
580 0x60, 0x00, /* 0110000000 */
581 0x7f, 0x80, /* 0111111110 */
582 0x7f, 0x80, /* 0111111110 */
583 0x00, 0x00, /* 0000000000 */
584 0x00, 0x00, /* 0000000000 */
585 0x00, 0x00, /* 0000000000 */
586 0x00, 0x00, /* 0000000000 */
587 0x00, 0x00, /* 0000000000 */
588 0x00, 0x00, /* 0000000000 */
589 0x00, 0x00, /* 0000000000 */
590 0x00, 0x00, /* 0000000000 */
591
592 /* 29 0x1d '^]' */
593 0x00, 0x00, /* 0000000000 */
594 0x00, 0x00, /* 0000000000 */
595 0x00, 0x00, /* 0000000000 */
596 0x00, 0x00, /* 0000000000 */
597 0x00, 0x00, /* 0000000000 */
598 0x12, 0x00, /* 0001001000 */
599 0x33, 0x00, /* 0011001100 */
600 0x73, 0x80, /* 0111001110 */
601 0xff, 0xc0, /* 1111111111 */
602 0xff, 0xc0, /* 1111111111 */
603 0x73, 0x80, /* 0111001110 */
604 0x33, 0x00, /* 0011001100 */
605 0x12, 0x00, /* 0001001000 */
606 0x00, 0x00, /* 0000000000 */
607 0x00, 0x00, /* 0000000000 */
608 0x00, 0x00, /* 0000000000 */
609 0x00, 0x00, /* 0000000000 */
610 0x00, 0x00, /* 0000000000 */
611
612 /* 30 0x1e '^^' */
613 0x00, 0x00, /* 0000000000 */
614 0x00, 0x00, /* 0000000000 */
615 0x00, 0x00, /* 0000000000 */
616 0x00, 0x00, /* 0000000000 */
617 0x00, 0x00, /* 0000000000 */
618 0x04, 0x00, /* 0000010000 */
619 0x04, 0x00, /* 0000010000 */
620 0x0e, 0x00, /* 0000111000 */
621 0x0e, 0x00, /* 0000111000 */
622 0x1f, 0x00, /* 0001111100 */
623 0x1f, 0x00, /* 0001111100 */
624 0x3f, 0x80, /* 0011111110 */
625 0x3f, 0x80, /* 0011111110 */
626 0x7f, 0xc0, /* 0111111111 */
627 0x7f, 0xc0, /* 0111111111 */
628 0x00, 0x00, /* 0000000000 */
629 0x00, 0x00, /* 0000000000 */
630 0x00, 0x00, /* 0000000000 */
631
632 /* 31 0x1f '^_' */
633 0x00, 0x00, /* 0000000000 */
634 0x00, 0x00, /* 0000000000 */
635 0x00, 0x00, /* 0000000000 */
636 0x00, 0x00, /* 0000000000 */
637 0x00, 0x00, /* 0000000000 */
638 0x7f, 0xc0, /* 0111111111 */
639 0x7f, 0xc0, /* 0111111111 */
640 0x3f, 0x80, /* 0011111110 */
641 0x3f, 0x80, /* 0011111110 */
642 0x1f, 0x00, /* 0001111100 */
643 0x1f, 0x00, /* 0001111100 */
644 0x0e, 0x00, /* 0000111000 */
645 0x0e, 0x00, /* 0000111000 */
646 0x04, 0x00, /* 0000010000 */
647 0x04, 0x00, /* 0000010000 */
648 0x00, 0x00, /* 0000000000 */
649 0x00, 0x00, /* 0000000000 */
650 0x00, 0x00, /* 0000000000 */
651
652 /* 32 0x20 ' ' */
653 0x00, 0x00, /* 0000000000 */
654 0x00, 0x00, /* 0000000000 */
655 0x00, 0x00, /* 0000000000 */
656 0x00, 0x00, /* 0000000000 */
657 0x00, 0x00, /* 0000000000 */
658 0x00, 0x00, /* 0000000000 */
659 0x00, 0x00, /* 0000000000 */
660 0x00, 0x00, /* 0000000000 */
661 0x00, 0x00, /* 0000000000 */
662 0x00, 0x00, /* 0000000000 */
663 0x00, 0x00, /* 0000000000 */
664 0x00, 0x00, /* 0000000000 */
665 0x00, 0x00, /* 0000000000 */
666 0x00, 0x00, /* 0000000000 */
667 0x00, 0x00, /* 0000000000 */
668 0x00, 0x00, /* 0000000000 */
669 0x00, 0x00, /* 0000000000 */
670 0x00, 0x00, /* 0000000000 */
671
672 /* 33 0x21 '!' */
673 0x00, 0x00, /* 0000000000 */
674 0x0c, 0x00, /* 0000110000 */
675 0x0c, 0x00, /* 0000110000 */
676 0x0c, 0x00, /* 0000110000 */
677 0x0c, 0x00, /* 0000110000 */
678 0x0c, 0x00, /* 0000110000 */
679 0x0c, 0x00, /* 0000110000 */
680 0x0c, 0x00, /* 0000110000 */
681 0x0c, 0x00, /* 0000110000 */
682 0x0c, 0x00, /* 0000110000 */
683 0x0c, 0x00, /* 0000110000 */
684 0x00, 0x00, /* 0000000000 */
685 0x0c, 0x00, /* 0000110000 */
686 0x0c, 0x00, /* 0000110000 */
687 0x00, 0x00, /* 0000000000 */
688 0x00, 0x00, /* 0000000000 */
689 0x00, 0x00, /* 0000000000 */
690 0x00, 0x00, /* 0000000000 */
691
692 /* 34 0x22 '"' */
693 0x00, 0x00, /* 0000000000 */
694 0x63, 0x00, /* 0110001100 */
695 0xf7, 0x80, /* 1111011110 */
696 0xf7, 0x80, /* 1111011110 */
697 0x31, 0x80, /* 0011000110 */
698 0x31, 0x80, /* 0011000110 */
699 0x63, 0x00, /* 0110001100 */
700 0x42, 0x00, /* 0100001000 */
701 0x00, 0x00, /* 0000000000 */
702 0x00, 0x00, /* 0000000000 */
703 0x00, 0x00, /* 0000000000 */
704 0x00, 0x00, /* 0000000000 */
705 0x00, 0x00, /* 0000000000 */
706 0x00, 0x00, /* 0000000000 */
707 0x00, 0x00, /* 0000000000 */
708 0x00, 0x00, /* 0000000000 */
709 0x00, 0x00, /* 0000000000 */
710 0x00, 0x00, /* 0000000000 */
711
712 /* 35 0x23 '#' */
713 0x00, 0x00, /* 0000000000 */
714 0x33, 0x00, /* 0011001100 */
715 0x33, 0x00, /* 0011001100 */
716 0x7f, 0x80, /* 0111111110 */
717 0x7f, 0x80, /* 0111111110 */
718 0x33, 0x00, /* 0011001100 */
719 0x33, 0x00, /* 0011001100 */
720 0x33, 0x00, /* 0011001100 */
721 0x33, 0x00, /* 0011001100 */
722 0x7f, 0x80, /* 0111111110 */
723 0x7f, 0x80, /* 0111111110 */
724 0x33, 0x00, /* 0011001100 */
725 0x33, 0x00, /* 0011001100 */
726 0x00, 0x00, /* 0000000000 */
727 0x00, 0x00, /* 0000000000 */
728 0x00, 0x00, /* 0000000000 */
729 0x00, 0x00, /* 0000000000 */
730 0x00, 0x00, /* 0000000000 */
731
732 /* 36 0x24 '$' */
733 0x00, 0x00, /* 0000000000 */
734 0x0c, 0x00, /* 0000110000 */
735 0x3e, 0x00, /* 0011111000 */
736 0x3f, 0x00, /* 0011111100 */
737 0x6f, 0x80, /* 0110111110 */
738 0x6d, 0x80, /* 0110110110 */
739 0x6c, 0x80, /* 0110110010 */
740 0x3c, 0x00, /* 0011110000 */
741 0x0f, 0x00, /* 0000111100 */
742 0x0d, 0x80, /* 0000110110 */
743 0x4d, 0x80, /* 0100110110 */
744 0x6d, 0x80, /* 0110110110 */
745 0x7f, 0x00, /* 0111111100 */
746 0x3e, 0x00, /* 0011111000 */
747 0x0c, 0x00, /* 0000110000 */
748 0x00, 0x00, /* 0000000000 */
749 0x00, 0x00, /* 0000000000 */
750 0x00, 0x00, /* 0000000000 */
751
752 /* 37 0x25 '%' */
753 0x00, 0x00, /* 0000000000 */
754 0x31, 0x80, /* 0011000110 */
755 0x7b, 0x00, /* 0111101100 */
756 0x7b, 0x00, /* 0111101100 */
757 0x36, 0x00, /* 0011011000 */
758 0x06, 0x00, /* 0000011000 */
759 0x0c, 0x00, /* 0000110000 */
760 0x0c, 0x00, /* 0000110000 */
761 0x18, 0x00, /* 0001100000 */
762 0x1b, 0x00, /* 0001101100 */
763 0x37, 0x80, /* 0011011110 */
764 0x37, 0x80, /* 0011011110 */
765 0x63, 0x00, /* 0110001100 */
766 0x00, 0x00, /* 0000000000 */
767 0x00, 0x00, /* 0000000000 */
768 0x00, 0x00, /* 0000000000 */
769 0x00, 0x00, /* 0000000000 */
770 0x00, 0x00, /* 0000000000 */
771
772 /* 38 0x26 '&' */
773 0x00, 0x00, /* 0000000000 */
774 0x07, 0x00, /* 0000011100 */
775 0x0f, 0x80, /* 0000111110 */
776 0x19, 0x80, /* 0001100110 */
777 0x19, 0x80, /* 0001100110 */
778 0x0f, 0x80, /* 0000111110 */
779 0x1e, 0x00, /* 0001111000 */
780 0x3e, 0x00, /* 0011111000 */
781 0x76, 0x00, /* 0111011000 */
782 0x66, 0x40, /* 0110011001 */
783 0x63, 0xc0, /* 0110001111 */
784 0x63, 0x80, /* 0110001110 */
785 0x63, 0x00, /* 0110001100 */
786 0x3f, 0x80, /* 0011111110 */
787 0x1c, 0xc0, /* 0001110011 */
788 0x00, 0x00, /* 0000000000 */
789 0x00, 0x00, /* 0000000000 */
790 0x00, 0x00, /* 0000000000 */
791
792 /* 39 0x27 ''' */
793 0x00, 0x00, /* 0000000000 */
794 0x30, 0x00, /* 0011000000 */
795 0x78, 0x00, /* 0111100000 */
796 0x78, 0x00, /* 0111100000 */
797 0x18, 0x00, /* 0001100000 */
798 0x18, 0x00, /* 0001100000 */
799 0x30, 0x00, /* 0011000000 */
800 0x20, 0x00, /* 0010000000 */
801 0x00, 0x00, /* 0000000000 */
802 0x00, 0x00, /* 0000000000 */
803 0x00, 0x00, /* 0000000000 */
804 0x00, 0x00, /* 0000000000 */
805 0x00, 0x00, /* 0000000000 */
806 0x00, 0x00, /* 0000000000 */
807 0x00, 0x00, /* 0000000000 */
808 0x00, 0x00, /* 0000000000 */
809 0x00, 0x00, /* 0000000000 */
810 0x00, 0x00, /* 0000000000 */
811
812 /* 40 0x28 '(' */
813 0x00, 0x00, /* 0000000000 */
814 0x03, 0x00, /* 0000001100 */
815 0x06, 0x00, /* 0000011000 */
816 0x0c, 0x00, /* 0000110000 */
817 0x0c, 0x00, /* 0000110000 */
818 0x18, 0x00, /* 0001100000 */
819 0x18, 0x00, /* 0001100000 */
820 0x18, 0x00, /* 0001100000 */
821 0x18, 0x00, /* 0001100000 */
822 0x18, 0x00, /* 0001100000 */
823 0x18, 0x00, /* 0001100000 */
824 0x0c, 0x00, /* 0000110000 */
825 0x0c, 0x00, /* 0000110000 */
826 0x06, 0x00, /* 0000011000 */
827 0x03, 0x00, /* 0000001100 */
828 0x00, 0x00, /* 0000000000 */
829 0x00, 0x00, /* 0000000000 */
830 0x00, 0x00, /* 0000000000 */
831
832 /* 41 0x29 ')' */
833 0x00, 0x00, /* 0000000000 */
834 0x30, 0x00, /* 0011000000 */
835 0x18, 0x00, /* 0001100000 */
836 0x0c, 0x00, /* 0000110000 */
837 0x0c, 0x00, /* 0000110000 */
838 0x06, 0x00, /* 0000011000 */
839 0x06, 0x00, /* 0000011000 */
840 0x06, 0x00, /* 0000011000 */
841 0x06, 0x00, /* 0000011000 */
842 0x06, 0x00, /* 0000011000 */
843 0x06, 0x00, /* 0000011000 */
844 0x0c, 0x00, /* 0000110000 */
845 0x0c, 0x00, /* 0000110000 */
846 0x18, 0x00, /* 0001100000 */
847 0x30, 0x00, /* 0011000000 */
848 0x00, 0x00, /* 0000000000 */
849 0x00, 0x00, /* 0000000000 */
850 0x00, 0x00, /* 0000000000 */
851
852 /* 42 0x2a '*' */
853 0x00, 0x00, /* 0000000000 */
854 0x00, 0x00, /* 0000000000 */
855 0x00, 0x00, /* 0000000000 */
856 0x0c, 0x00, /* 0000110000 */
857 0x4c, 0x80, /* 0100110010 */
858 0x6d, 0x80, /* 0110110110 */
859 0x3f, 0x00, /* 0011111100 */
860 0x7f, 0x80, /* 0111111110 */
861 0x3f, 0x00, /* 0011111100 */
862 0x6d, 0x80, /* 0110110110 */
863 0x4c, 0x80, /* 0100110010 */
864 0x0c, 0x00, /* 0000110000 */
865 0x00, 0x00, /* 0000000000 */
866 0x00, 0x00, /* 0000000000 */
867 0x00, 0x00, /* 0000000000 */
868 0x00, 0x00, /* 0000000000 */
869 0x00, 0x00, /* 0000000000 */
870 0x00, 0x00, /* 0000000000 */
871
872 /* 43 0x2b '+' */
873 0x00, 0x00, /* 0000000000 */
874 0x00, 0x00, /* 0000000000 */
875 0x00, 0x00, /* 0000000000 */
876 0x0c, 0x00, /* 0000110000 */
877 0x0c, 0x00, /* 0000110000 */
878 0x0c, 0x00, /* 0000110000 */
879 0x0c, 0x00, /* 0000110000 */
880 0x7f, 0x80, /* 0111111110 */
881 0x7f, 0x80, /* 0111111110 */
882 0x0c, 0x00, /* 0000110000 */
883 0x0c, 0x00, /* 0000110000 */
884 0x0c, 0x00, /* 0000110000 */
885 0x0c, 0x00, /* 0000110000 */
886 0x00, 0x00, /* 0000000000 */
887 0x00, 0x00, /* 0000000000 */
888 0x00, 0x00, /* 0000000000 */
889 0x00, 0x00, /* 0000000000 */
890 0x00, 0x00, /* 0000000000 */
891
892 /* 44 0x2c ',' */
893 0x00, 0x00, /* 0000000000 */
894 0x00, 0x00, /* 0000000000 */
895 0x00, 0x00, /* 0000000000 */
896 0x00, 0x00, /* 0000000000 */
897 0x00, 0x00, /* 0000000000 */
898 0x00, 0x00, /* 0000000000 */
899 0x00, 0x00, /* 0000000000 */
900 0x00, 0x00, /* 0000000000 */
901 0x00, 0x00, /* 0000000000 */
902 0x00, 0x00, /* 0000000000 */
903 0x30, 0x00, /* 0011000000 */
904 0x78, 0x00, /* 0111100000 */
905 0x78, 0x00, /* 0111100000 */
906 0x18, 0x00, /* 0001100000 */
907 0x18, 0x00, /* 0001100000 */
908 0x30, 0x00, /* 0011000000 */
909 0x60, 0x00, /* 0110000000 */
910 0x40, 0x00, /* 0100000000 */
911
912 /* 45 0x2d '-' */
913 0x00, 0x00, /* 0000000000 */
914 0x00, 0x00, /* 0000000000 */
915 0x00, 0x00, /* 0000000000 */
916 0x00, 0x00, /* 0000000000 */
917 0x00, 0x00, /* 0000000000 */
918 0x00, 0x00, /* 0000000000 */
919 0x00, 0x00, /* 0000000000 */
920 0x00, 0x00, /* 0000000000 */
921 0x7f, 0x80, /* 0111111110 */
922 0x7f, 0x80, /* 0111111110 */
923 0x00, 0x00, /* 0000000000 */
924 0x00, 0x00, /* 0000000000 */
925 0x00, 0x00, /* 0000000000 */
926 0x00, 0x00, /* 0000000000 */
927 0x00, 0x00, /* 0000000000 */
928 0x00, 0x00, /* 0000000000 */
929 0x00, 0x00, /* 0000000000 */
930 0x00, 0x00, /* 0000000000 */
931
932 /* 46 0x2e '.' */
933 0x00, 0x00, /* 0000000000 */
934 0x00, 0x00, /* 0000000000 */
935 0x00, 0x00, /* 0000000000 */
936 0x00, 0x00, /* 0000000000 */
937 0x00, 0x00, /* 0000000000 */
938 0x00, 0x00, /* 0000000000 */
939 0x00, 0x00, /* 0000000000 */
940 0x00, 0x00, /* 0000000000 */
941 0x00, 0x00, /* 0000000000 */
942 0x00, 0x00, /* 0000000000 */
943 0x00, 0x00, /* 0000000000 */
944 0x18, 0x00, /* 0001100000 */
945 0x3c, 0x00, /* 0011110000 */
946 0x3c, 0x00, /* 0011110000 */
947 0x18, 0x00, /* 0001100000 */
948 0x00, 0x00, /* 0000000000 */
949 0x00, 0x00, /* 0000000000 */
950 0x00, 0x00, /* 0000000000 */
951
952 /* 47 0x2f '/' */
953 0x00, 0x00, /* 0000000000 */
954 0x01, 0x80, /* 0000000110 */
955 0x01, 0x80, /* 0000000110 */
956 0x03, 0x00, /* 0000001100 */
957 0x03, 0x00, /* 0000001100 */
958 0x06, 0x00, /* 0000011000 */
959 0x06, 0x00, /* 0000011000 */
960 0x0c, 0x00, /* 0000110000 */
961 0x0c, 0x00, /* 0000110000 */
962 0x18, 0x00, /* 0001100000 */
963 0x18, 0x00, /* 0001100000 */
964 0x30, 0x00, /* 0011000000 */
965 0x30, 0x00, /* 0011000000 */
966 0x60, 0x00, /* 0110000000 */
967 0x60, 0x00, /* 0110000000 */
968 0x00, 0x00, /* 0000000000 */
969 0x00, 0x00, /* 0000000000 */
970 0x00, 0x00, /* 0000000000 */
971
972 /* 48 0x30 '0' */
973 0x00, 0x00, /* 0000000000 */
974 0x0e, 0x00, /* 0000111000 */
975 0x1f, 0x00, /* 0001111100 */
976 0x23, 0x00, /* 0010001100 */
977 0x61, 0x80, /* 0110000110 */
978 0x63, 0x80, /* 0110001110 */
979 0x65, 0x80, /* 0110010110 */
980 0x65, 0x80, /* 0110010110 */
981 0x69, 0x80, /* 0110100110 */
982 0x69, 0x80, /* 0110100110 */
983 0x71, 0x80, /* 0111000110 */
984 0x61, 0x00, /* 0110000100 */
985 0x31, 0x00, /* 0011000100 */
986 0x3e, 0x00, /* 0011111000 */
987 0x1c, 0x00, /* 0001110000 */
988 0x00, 0x00, /* 0000000000 */
989 0x00, 0x00, /* 0000000000 */
990 0x00, 0x00, /* 0000000000 */
991
992 /* 49 0x31 '1' */
993 0x00, 0x00, /* 0000000000 */
994 0x04, 0x00, /* 0000010000 */
995 0x0c, 0x00, /* 0000110000 */
996 0x1c, 0x00, /* 0001110000 */
997 0x3c, 0x00, /* 0011110000 */
998 0x6c, 0x00, /* 0110110000 */
999 0x0c, 0x00, /* 0000110000 */
1000 0x0c, 0x00, /* 0000110000 */
1001 0x0c, 0x00, /* 0000110000 */
1002 0x0c, 0x00, /* 0000110000 */
1003 0x0c, 0x00, /* 0000110000 */
1004 0x0c, 0x00, /* 0000110000 */
1005 0x0c, 0x00, /* 0000110000 */
1006 0x0c, 0x00, /* 0000110000 */
1007 0x7f, 0x80, /* 0111111110 */
1008 0x00, 0x00, /* 0000000000 */
1009 0x00, 0x00, /* 0000000000 */
1010 0x00, 0x00, /* 0000000000 */
1011
1012 /* 50 0x32 '2' */
1013 0x00, 0x00, /* 0000000000 */
1014 0x1e, 0x00, /* 0001111000 */
1015 0x3f, 0x00, /* 0011111100 */
1016 0x63, 0x80, /* 0110001110 */
1017 0x41, 0x80, /* 0100000110 */
1018 0x01, 0x80, /* 0000000110 */
1019 0x01, 0x80, /* 0000000110 */
1020 0x03, 0x00, /* 0000001100 */
1021 0x06, 0x00, /* 0000011000 */
1022 0x06, 0x00, /* 0000011000 */
1023 0x0c, 0x00, /* 0000110000 */
1024 0x18, 0x00, /* 0001100000 */
1025 0x30, 0x80, /* 0011000010 */
1026 0x7f, 0x80, /* 0111111110 */
1027 0x7f, 0x80, /* 0111111110 */
1028 0x00, 0x00, /* 0000000000 */
1029 0x00, 0x00, /* 0000000000 */
1030 0x00, 0x00, /* 0000000000 */
1031
1032 /* 51 0x33 '3' */
1033 0x00, 0x00, /* 0000000000 */
1034 0x1c, 0x00, /* 0001110000 */
1035 0x3e, 0x00, /* 0011111000 */
1036 0x47, 0x00, /* 0100011100 */
1037 0x03, 0x00, /* 0000001100 */
1038 0x07, 0x00, /* 0000011100 */
1039 0x06, 0x00, /* 0000011000 */
1040 0x0e, 0x00, /* 0000111000 */
1041 0x07, 0x00, /* 0000011100 */
1042 0x03, 0x00, /* 0000001100 */
1043 0x01, 0x80, /* 0000000110 */
1044 0x41, 0x80, /* 0100000110 */
1045 0x61, 0x80, /* 0110000110 */
1046 0x3f, 0x00, /* 0011111100 */
1047 0x1e, 0x00, /* 0001111000 */
1048 0x00, 0x00, /* 0000000000 */
1049 0x00, 0x00, /* 0000000000 */
1050 0x00, 0x00, /* 0000000000 */
1051
1052 /* 52 0x34 '4' */
1053 0x00, 0x00, /* 0000000000 */
1054 0x06, 0x00, /* 0000011000 */
1055 0x0e, 0x00, /* 0000111000 */
1056 0x1e, 0x00, /* 0001111000 */
1057 0x36, 0x00, /* 0011011000 */
1058 0x36, 0x00, /* 0011011000 */
1059 0x66, 0x00, /* 0110011000 */
1060 0x66, 0x00, /* 0110011000 */
1061 0xc6, 0x00, /* 1100011000 */
1062 0xc6, 0x00, /* 1100011000 */
1063 0xff, 0x80, /* 1111111110 */
1064 0xff, 0x80, /* 1111111110 */
1065 0x06, 0x00, /* 0000011000 */
1066 0x06, 0x00, /* 0000011000 */
1067 0x06, 0x00, /* 0000011000 */
1068 0x00, 0x00, /* 0000000000 */
1069 0x00, 0x00, /* 0000000000 */
1070 0x00, 0x00, /* 0000000000 */
1071
1072 /* 53 0x35 '5' */
1073 0x00, 0x00, /* 0000000000 */
1074 0x1f, 0x00, /* 0001111100 */
1075 0x1f, 0x00, /* 0001111100 */
1076 0x30, 0x00, /* 0011000000 */
1077 0x30, 0x00, /* 0011000000 */
1078 0x60, 0x00, /* 0110000000 */
1079 0x7e, 0x00, /* 0111111000 */
1080 0x67, 0x00, /* 0110011100 */
1081 0x03, 0x80, /* 0000001110 */
1082 0x01, 0x80, /* 0000000110 */
1083 0x01, 0x80, /* 0000000110 */
1084 0x01, 0x80, /* 0000000110 */
1085 0x41, 0x80, /* 0100000110 */
1086 0x63, 0x00, /* 0110001100 */
1087 0x3e, 0x00, /* 0011111000 */
1088 0x00, 0x00, /* 0000000000 */
1089 0x00, 0x00, /* 0000000000 */
1090 0x00, 0x00, /* 0000000000 */
1091
1092 /* 54 0x36 '6' */
1093 0x00, 0x00, /* 0000000000 */
1094 0x06, 0x00, /* 0000011000 */
1095 0x0c, 0x00, /* 0000110000 */
1096 0x18, 0x00, /* 0001100000 */
1097 0x30, 0x00, /* 0011000000 */
1098 0x30, 0x00, /* 0011000000 */
1099 0x60, 0x00, /* 0110000000 */
1100 0x6e, 0x00, /* 0110111000 */
1101 0x7f, 0x00, /* 0111111100 */
1102 0x73, 0x80, /* 0111001110 */
1103 0x61, 0x80, /* 0110000110 */
1104 0x61, 0x80, /* 0110000110 */
1105 0x71, 0x00, /* 0111000100 */
1106 0x3e, 0x00, /* 0011111000 */
1107 0x1c, 0x00, /* 0001110000 */
1108 0x00, 0x00, /* 0000000000 */
1109 0x00, 0x00, /* 0000000000 */
1110 0x00, 0x00, /* 0000000000 */
1111
1112 /* 55 0x37 '7' */
1113 0x00, 0x00, /* 0000000000 */
1114 0x1f, 0x80, /* 0001111110 */
1115 0x3f, 0x80, /* 0011111110 */
1116 0x61, 0x80, /* 0110000110 */
1117 0x01, 0x80, /* 0000000110 */
1118 0x03, 0x00, /* 0000001100 */
1119 0x03, 0x00, /* 0000001100 */
1120 0x06, 0x00, /* 0000011000 */
1121 0x06, 0x00, /* 0000011000 */
1122 0x0c, 0x00, /* 0000110000 */
1123 0x0c, 0x00, /* 0000110000 */
1124 0x18, 0x00, /* 0001100000 */
1125 0x18, 0x00, /* 0001100000 */
1126 0x30, 0x00, /* 0011000000 */
1127 0x30, 0x00, /* 0011000000 */
1128 0x00, 0x00, /* 0000000000 */
1129 0x00, 0x00, /* 0000000000 */
1130 0x00, 0x00, /* 0000000000 */
1131
1132 /* 56 0x38 '8' */
1133 0x00, 0x00, /* 0000000000 */
1134 0x1e, 0x00, /* 0001111000 */
1135 0x23, 0x00, /* 0010001100 */
1136 0x61, 0x80, /* 0110000110 */
1137 0x61, 0x80, /* 0110000110 */
1138 0x31, 0x00, /* 0011000100 */
1139 0x1a, 0x00, /* 0001101000 */
1140 0x0c, 0x00, /* 0000110000 */
1141 0x16, 0x00, /* 0001011000 */
1142 0x23, 0x00, /* 0010001100 */
1143 0x61, 0x80, /* 0110000110 */
1144 0x61, 0x80, /* 0110000110 */
1145 0x61, 0x80, /* 0110000110 */
1146 0x31, 0x00, /* 0011000100 */
1147 0x1e, 0x00, /* 0001111000 */
1148 0x00, 0x00, /* 0000000000 */
1149 0x00, 0x00, /* 0000000000 */
1150 0x00, 0x00, /* 0000000000 */
1151
1152 /* 57 0x39 '9' */
1153 0x00, 0x00, /* 0000000000 */
1154 0x0e, 0x00, /* 0000111000 */
1155 0x17, 0x00, /* 0001011100 */
1156 0x23, 0x80, /* 0010001110 */
1157 0x61, 0x80, /* 0110000110 */
1158 0x61, 0x80, /* 0110000110 */
1159 0x61, 0x80, /* 0110000110 */
1160 0x73, 0x80, /* 0111001110 */
1161 0x3d, 0x80, /* 0011110110 */
1162 0x19, 0x80, /* 0001100110 */
1163 0x01, 0x80, /* 0000000110 */
1164 0x03, 0x00, /* 0000001100 */
1165 0x03, 0x00, /* 0000001100 */
1166 0x06, 0x00, /* 0000011000 */
1167 0x0c, 0x00, /* 0000110000 */
1168 0x18, 0x00, /* 0001100000 */
1169 0x00, 0x00, /* 0000000000 */
1170 0x00, 0x00, /* 0000000000 */
1171
1172 /* 58 0x3a ':' */
1173 0x00, 0x00, /* 0000000000 */
1174 0x00, 0x00, /* 0000000000 */
1175 0x00, 0x00, /* 0000000000 */
1176 0x00, 0x00, /* 0000000000 */
1177 0x18, 0x00, /* 0001100000 */
1178 0x3c, 0x00, /* 0011110000 */
1179 0x3c, 0x00, /* 0011110000 */
1180 0x18, 0x00, /* 0001100000 */
1181 0x00, 0x00, /* 0000000000 */
1182 0x00, 0x00, /* 0000000000 */
1183 0x18, 0x00, /* 0001100000 */
1184 0x3c, 0x00, /* 0011110000 */
1185 0x3c, 0x00, /* 0011110000 */
1186 0x18, 0x00, /* 0001100000 */
1187 0x00, 0x00, /* 0000000000 */
1188 0x00, 0x00, /* 0000000000 */
1189 0x00, 0x00, /* 0000000000 */
1190 0x00, 0x00, /* 0000000000 */
1191
1192 /* 59 0x3b ';' */
1193 0x00, 0x00, /* 0000000000 */
1194 0x00, 0x00, /* 0000000000 */
1195 0x00, 0x00, /* 0000000000 */
1196 0x00, 0x00, /* 0000000000 */
1197 0x00, 0x00, /* 0000000000 */
1198 0x00, 0x00, /* 0000000000 */
1199 0x18, 0x00, /* 0001100000 */
1200 0x3c, 0x00, /* 0011110000 */
1201 0x3c, 0x00, /* 0011110000 */
1202 0x18, 0x00, /* 0001100000 */
1203 0x00, 0x00, /* 0000000000 */
1204 0x18, 0x00, /* 0001100000 */
1205 0x3c, 0x00, /* 0011110000 */
1206 0x3c, 0x00, /* 0011110000 */
1207 0x0c, 0x00, /* 0000110000 */
1208 0x18, 0x00, /* 0001100000 */
1209 0x30, 0x00, /* 0011000000 */
1210 0x20, 0x00, /* 0010000000 */
1211
1212 /* 60 0x3c '<' */
1213 0x00, 0x00, /* 0000000000 */
1214 0x00, 0x00, /* 0000000000 */
1215 0x03, 0x00, /* 0000001100 */
1216 0x06, 0x00, /* 0000011000 */
1217 0x0c, 0x00, /* 0000110000 */
1218 0x18, 0x00, /* 0001100000 */
1219 0x30, 0x00, /* 0011000000 */
1220 0x60, 0x00, /* 0110000000 */
1221 0x60, 0x00, /* 0110000000 */
1222 0x30, 0x00, /* 0011000000 */
1223 0x18, 0x00, /* 0001100000 */
1224 0x0c, 0x00, /* 0000110000 */
1225 0x06, 0x00, /* 0000011000 */
1226 0x03, 0x00, /* 0000001100 */
1227 0x00, 0x00, /* 0000000000 */
1228 0x00, 0x00, /* 0000000000 */
1229 0x00, 0x00, /* 0000000000 */
1230 0x00, 0x00, /* 0000000000 */
1231
1232 /* 61 0x3d '=' */
1233 0x00, 0x00, /* 0000000000 */
1234 0x00, 0x00, /* 0000000000 */
1235 0x00, 0x00, /* 0000000000 */
1236 0x00, 0x00, /* 0000000000 */
1237 0x00, 0x00, /* 0000000000 */
1238 0x00, 0x00, /* 0000000000 */
1239 0x7f, 0x80, /* 0111111110 */
1240 0x7f, 0x80, /* 0111111110 */
1241 0x00, 0x00, /* 0000000000 */
1242 0x00, 0x00, /* 0000000000 */
1243 0x7f, 0x80, /* 0111111110 */
1244 0x7f, 0x80, /* 0111111110 */
1245 0x00, 0x00, /* 0000000000 */
1246 0x00, 0x00, /* 0000000000 */
1247 0x00, 0x00, /* 0000000000 */
1248 0x00, 0x00, /* 0000000000 */
1249 0x00, 0x00, /* 0000000000 */
1250 0x00, 0x00, /* 0000000000 */
1251
1252 /* 62 0x3e '>' */
1253 0x00, 0x00, /* 0000000000 */
1254 0x00, 0x00, /* 0000000000 */
1255 0x30, 0x00, /* 0011000000 */
1256 0x18, 0x00, /* 0001100000 */
1257 0x0c, 0x00, /* 0000110000 */
1258 0x06, 0x00, /* 0000011000 */
1259 0x03, 0x00, /* 0000001100 */
1260 0x01, 0x80, /* 0000000110 */
1261 0x01, 0x80, /* 0000000110 */
1262 0x03, 0x00, /* 0000001100 */
1263 0x06, 0x00, /* 0000011000 */
1264 0x0c, 0x00, /* 0000110000 */
1265 0x18, 0x00, /* 0001100000 */
1266 0x30, 0x00, /* 0011000000 */
1267 0x00, 0x00, /* 0000000000 */
1268 0x00, 0x00, /* 0000000000 */
1269 0x00, 0x00, /* 0000000000 */
1270 0x00, 0x00, /* 0000000000 */
1271
1272 /* 63 0x3f '?' */
1273 0x00, 0x00, /* 0000000000 */
1274 0x0e, 0x00, /* 0000111000 */
1275 0x1f, 0x00, /* 0001111100 */
1276 0x3b, 0x80, /* 0011101110 */
1277 0x21, 0x80, /* 0010000110 */
1278 0x01, 0x80, /* 0000000110 */
1279 0x03, 0x00, /* 0000001100 */
1280 0x06, 0x00, /* 0000011000 */
1281 0x06, 0x00, /* 0000011000 */
1282 0x0c, 0x00, /* 0000110000 */
1283 0x0c, 0x00, /* 0000110000 */
1284 0x00, 0x00, /* 0000000000 */
1285 0x00, 0x00, /* 0000000000 */
1286 0x0c, 0x00, /* 0000110000 */
1287 0x0c, 0x00, /* 0000110000 */
1288 0x00, 0x00, /* 0000000000 */
1289 0x00, 0x00, /* 0000000000 */
1290 0x00, 0x00, /* 0000000000 */
1291
1292 /* 64 0x40 '@' */
1293 0x00, 0x00, /* 0000000000 */
1294 0x00, 0x00, /* 0000000000 */
1295 0x0e, 0x00, /* 0000111000 */
1296 0x3f, 0x00, /* 0011111100 */
1297 0x31, 0x80, /* 0011000110 */
1298 0x65, 0x80, /* 0110010110 */
1299 0x6d, 0x80, /* 0110110110 */
1300 0x6d, 0x80, /* 0110110110 */
1301 0x6d, 0x80, /* 0110110110 */
1302 0x6d, 0x80, /* 0110110110 */
1303 0x6f, 0x80, /* 0110111110 */
1304 0x60, 0x00, /* 0110000000 */
1305 0x31, 0x80, /* 0011000110 */
1306 0x3f, 0x80, /* 0011111110 */
1307 0x0f, 0x00, /* 0000111100 */
1308 0x00, 0x00, /* 0000000000 */
1309 0x00, 0x00, /* 0000000000 */
1310 0x00, 0x00, /* 0000000000 */
1311
1312 /* 65 0x41 'A' */
1313 0x00, 0x00, /* 0000000000 */
1314 0x04, 0x00, /* 0000010000 */
1315 0x04, 0x00, /* 0000010000 */
1316 0x0e, 0x00, /* 0000111000 */
1317 0x0e, 0x00, /* 0000111000 */
1318 0x1b, 0x00, /* 0001101100 */
1319 0x1b, 0x00, /* 0001101100 */
1320 0x19, 0x80, /* 0001100110 */
1321 0x31, 0x80, /* 0011000110 */
1322 0x3f, 0x80, /* 0011111110 */
1323 0x31, 0x80, /* 0011000110 */
1324 0x61, 0x80, /* 0110000110 */
1325 0x60, 0xc0, /* 0110000011 */
1326 0x60, 0xc0, /* 0110000011 */
1327 0xf1, 0xc0, /* 1111000111 */
1328 0x00, 0x00, /* 0000000000 */
1329 0x00, 0x00, /* 0000000000 */
1330 0x00, 0x00, /* 0000000000 */
1331
1332 /* 66 0x42 'B' */
1333 0x00, 0x00, /* 0000000000 */
1334 0xfc, 0x00, /* 1111110000 */
1335 0x62, 0x00, /* 0110001000 */
1336 0x63, 0x00, /* 0110001100 */
1337 0x63, 0x00, /* 0110001100 */
1338 0x63, 0x00, /* 0110001100 */
1339 0x66, 0x00, /* 0110011000 */
1340 0x7e, 0x00, /* 0111111000 */
1341 0x63, 0x00, /* 0110001100 */
1342 0x61, 0x80, /* 0110000110 */
1343 0x61, 0x80, /* 0110000110 */
1344 0x61, 0x80, /* 0110000110 */
1345 0x61, 0x80, /* 0110000110 */
1346 0x63, 0x00, /* 0110001100 */
1347 0xfe, 0x00, /* 1111111000 */
1348 0x00, 0x00, /* 0000000000 */
1349 0x00, 0x00, /* 0000000000 */
1350 0x00, 0x00, /* 0000000000 */
1351
1352 /* 67 0x43 'C' */
1353 0x00, 0x00, /* 0000000000 */
1354 0x0f, 0x00, /* 0000111100 */
1355 0x11, 0x80, /* 0001000110 */
1356 0x20, 0x80, /* 0010000010 */
1357 0x20, 0x00, /* 0010000000 */
1358 0x60, 0x00, /* 0110000000 */
1359 0x60, 0x00, /* 0110000000 */
1360 0x60, 0x00, /* 0110000000 */
1361 0x60, 0x00, /* 0110000000 */
1362 0x60, 0x00, /* 0110000000 */
1363 0x60, 0x00, /* 0110000000 */
1364 0x20, 0x00, /* 0010000000 */
1365 0x30, 0x80, /* 0011000010 */
1366 0x19, 0x00, /* 0001100100 */
1367 0x0e, 0x00, /* 0000111000 */
1368 0x00, 0x00, /* 0000000000 */
1369 0x00, 0x00, /* 0000000000 */
1370 0x00, 0x00, /* 0000000000 */
1371
1372 /* 68 0x44 'D' */
1373 0x00, 0x00, /* 0000000000 */
1374 0xfc, 0x00, /* 1111110000 */
1375 0x67, 0x00, /* 0110011100 */
1376 0x63, 0x00, /* 0110001100 */
1377 0x61, 0x80, /* 0110000110 */
1378 0x61, 0x80, /* 0110000110 */
1379 0x61, 0x80, /* 0110000110 */
1380 0x61, 0x80, /* 0110000110 */
1381 0x61, 0x80, /* 0110000110 */
1382 0x61, 0x80, /* 0110000110 */
1383 0x61, 0x80, /* 0110000110 */
1384 0x61, 0x80, /* 0110000110 */
1385 0x61, 0x00, /* 0110000100 */
1386 0x66, 0x00, /* 0110011000 */
1387 0xf8, 0x00, /* 1111100000 */
1388 0x00, 0x00, /* 0000000000 */
1389 0x00, 0x00, /* 0000000000 */
1390 0x00, 0x00, /* 0000000000 */
1391
1392 /* 69 0x45 'E' */
1393 0x00, 0x00, /* 0000000000 */
1394 0x7f, 0x80, /* 0111111110 */
1395 0x30, 0x80, /* 0011000010 */
1396 0x30, 0x80, /* 0011000010 */
1397 0x30, 0x00, /* 0011000000 */
1398 0x30, 0x00, /* 0011000000 */
1399 0x31, 0x00, /* 0011000100 */
1400 0x3f, 0x00, /* 0011111100 */
1401 0x31, 0x00, /* 0011000100 */
1402 0x30, 0x00, /* 0011000000 */
1403 0x30, 0x00, /* 0011000000 */
1404 0x30, 0x00, /* 0011000000 */
1405 0x30, 0x80, /* 0011000010 */
1406 0x30, 0x80, /* 0011000010 */
1407 0x7f, 0x80, /* 0111111110 */
1408 0x00, 0x00, /* 0000000000 */
1409 0x00, 0x00, /* 0000000000 */
1410 0x00, 0x00, /* 0000000000 */
1411
1412 /* 70 0x46 'F' */
1413 0x00, 0x00, /* 0000000000 */
1414 0x7f, 0x80, /* 0111111110 */
1415 0x30, 0x80, /* 0011000010 */
1416 0x30, 0x80, /* 0011000010 */
1417 0x30, 0x00, /* 0011000000 */
1418 0x30, 0x00, /* 0011000000 */
1419 0x31, 0x00, /* 0011000100 */
1420 0x3f, 0x00, /* 0011111100 */
1421 0x31, 0x00, /* 0011000100 */
1422 0x30, 0x00, /* 0011000000 */
1423 0x30, 0x00, /* 0011000000 */
1424 0x30, 0x00, /* 0011000000 */
1425 0x30, 0x00, /* 0011000000 */
1426 0x30, 0x00, /* 0011000000 */
1427 0x78, 0x00, /* 0111100000 */
1428 0x00, 0x00, /* 0000000000 */
1429 0x00, 0x00, /* 0000000000 */
1430 0x00, 0x00, /* 0000000000 */
1431
1432 /* 71 0x47 'G' */
1433 0x00, 0x00, /* 0000000000 */
1434 0x0f, 0x00, /* 0000111100 */
1435 0x11, 0x80, /* 0001000110 */
1436 0x20, 0x80, /* 0010000010 */
1437 0x20, 0x00, /* 0010000000 */
1438 0x60, 0x00, /* 0110000000 */
1439 0x60, 0x00, /* 0110000000 */
1440 0x60, 0x00, /* 0110000000 */
1441 0x60, 0x00, /* 0110000000 */
1442 0x67, 0xc0, /* 0110011111 */
1443 0x61, 0x80, /* 0110000110 */
1444 0x21, 0x80, /* 0010000110 */
1445 0x31, 0x80, /* 0011000110 */
1446 0x19, 0x80, /* 0001100110 */
1447 0x0e, 0x00, /* 0000111000 */
1448 0x00, 0x00, /* 0000000000 */
1449 0x00, 0x00, /* 0000000000 */
1450 0x00, 0x00, /* 0000000000 */
1451
1452 /* 72 0x48 'H' */
1453 0x00, 0x00, /* 0000000000 */
1454 0xf3, 0xc0, /* 1111001111 */
1455 0x61, 0x80, /* 0110000110 */
1456 0x61, 0x80, /* 0110000110 */
1457 0x61, 0x80, /* 0110000110 */
1458 0x61, 0x80, /* 0110000110 */
1459 0x61, 0x80, /* 0110000110 */
1460 0x7f, 0x80, /* 0111111110 */
1461 0x61, 0x80, /* 0110000110 */
1462 0x61, 0x80, /* 0110000110 */
1463 0x61, 0x80, /* 0110000110 */
1464 0x61, 0x80, /* 0110000110 */
1465 0x61, 0x80, /* 0110000110 */
1466 0x61, 0x80, /* 0110000110 */
1467 0xf3, 0xc0, /* 1111001111 */
1468 0x00, 0x00, /* 0000000000 */
1469 0x00, 0x00, /* 0000000000 */
1470 0x00, 0x00, /* 0000000000 */
1471
1472 /* 73 0x49 'I' */
1473 0x00, 0x00, /* 0000000000 */
1474 0x3f, 0x00, /* 0011111100 */
1475 0x0c, 0x00, /* 0000110000 */
1476 0x0c, 0x00, /* 0000110000 */
1477 0x0c, 0x00, /* 0000110000 */
1478 0x0c, 0x00, /* 0000110000 */
1479 0x0c, 0x00, /* 0000110000 */
1480 0x0c, 0x00, /* 0000110000 */
1481 0x0c, 0x00, /* 0000110000 */
1482 0x0c, 0x00, /* 0000110000 */
1483 0x0c, 0x00, /* 0000110000 */
1484 0x0c, 0x00, /* 0000110000 */
1485 0x0c, 0x00, /* 0000110000 */
1486 0x0c, 0x00, /* 0000110000 */
1487 0x3f, 0x00, /* 0011111100 */
1488 0x00, 0x00, /* 0000000000 */
1489 0x00, 0x00, /* 0000000000 */
1490 0x00, 0x00, /* 0000000000 */
1491
1492 /* 74 0x4a 'J' */
1493 0x00, 0x00, /* 0000000000 */
1494 0x3f, 0x00, /* 0011111100 */
1495 0x0c, 0x00, /* 0000110000 */
1496 0x0c, 0x00, /* 0000110000 */
1497 0x0c, 0x00, /* 0000110000 */
1498 0x0c, 0x00, /* 0000110000 */
1499 0x0c, 0x00, /* 0000110000 */
1500 0x0c, 0x00, /* 0000110000 */
1501 0x0c, 0x00, /* 0000110000 */
1502 0x0c, 0x00, /* 0000110000 */
1503 0x0c, 0x00, /* 0000110000 */
1504 0x0c, 0x00, /* 0000110000 */
1505 0x0c, 0x00, /* 0000110000 */
1506 0x0c, 0x00, /* 0000110000 */
1507 0x08, 0x00, /* 0000100000 */
1508 0x70, 0x00, /* 0111000000 */
1509 0x60, 0x00, /* 0110000000 */
1510 0x00, 0x00, /* 0000000000 */
1511
1512 /* 75 0x4b 'K' */
1513 0x00, 0x00, /* 0000000000 */
1514 0xf1, 0x80, /* 1111000110 */
1515 0x63, 0x00, /* 0110001100 */
1516 0x66, 0x00, /* 0110011000 */
1517 0x6c, 0x00, /* 0110110000 */
1518 0x78, 0x00, /* 0111100000 */
1519 0x70, 0x00, /* 0111000000 */
1520 0x70, 0x00, /* 0111000000 */
1521 0x78, 0x00, /* 0111100000 */
1522 0x78, 0x00, /* 0111100000 */
1523 0x6c, 0x00, /* 0110110000 */
1524 0x66, 0x00, /* 0110011000 */
1525 0x63, 0x00, /* 0110001100 */
1526 0x61, 0x80, /* 0110000110 */
1527 0xf0, 0xc0, /* 1111000011 */
1528 0x00, 0x00, /* 0000000000 */
1529 0x00, 0x00, /* 0000000000 */
1530 0x00, 0x00, /* 0000000000 */
1531
1532 /* 76 0x4c 'L' */
1533 0x00, 0x00, /* 0000000000 */
1534 0x78, 0x00, /* 0111100000 */
1535 0x30, 0x00, /* 0011000000 */
1536 0x30, 0x00, /* 0011000000 */
1537 0x30, 0x00, /* 0011000000 */
1538 0x30, 0x00, /* 0011000000 */
1539 0x30, 0x00, /* 0011000000 */
1540 0x30, 0x00, /* 0011000000 */
1541 0x30, 0x00, /* 0011000000 */
1542 0x30, 0x00, /* 0011000000 */
1543 0x30, 0x00, /* 0011000000 */
1544 0x30, 0x00, /* 0011000000 */
1545 0x30, 0x80, /* 0011000010 */
1546 0x30, 0x80, /* 0011000010 */
1547 0x7f, 0x80, /* 0111111110 */
1548 0x00, 0x00, /* 0000000000 */
1549 0x00, 0x00, /* 0000000000 */
1550 0x00, 0x00, /* 0000000000 */
1551
1552 /* 77 0x4d 'M' */
1553 0x00, 0x00, /* 0000000000 */
1554 0xe0, 0xc0, /* 1110000011 */
1555 0x61, 0x80, /* 0110000110 */
1556 0x73, 0x80, /* 0111001110 */
1557 0x73, 0x80, /* 0111001110 */
1558 0x6d, 0x80, /* 0110110110 */
1559 0x6d, 0x80, /* 0110110110 */
1560 0x61, 0x80, /* 0110000110 */
1561 0x61, 0x80, /* 0110000110 */
1562 0x61, 0x80, /* 0110000110 */
1563 0x61, 0x80, /* 0110000110 */
1564 0x61, 0x80, /* 0110000110 */
1565 0x61, 0x80, /* 0110000110 */
1566 0x61, 0x80, /* 0110000110 */
1567 0xf3, 0xc0, /* 1111001111 */
1568 0x00, 0x00, /* 0000000000 */
1569 0x00, 0x00, /* 0000000000 */
1570 0x00, 0x00, /* 0000000000 */
1571
1572 /* 78 0x4e 'N' */
1573 0x00, 0x00, /* 0000000000 */
1574 0xf3, 0xc0, /* 1111001111 */
1575 0x61, 0x80, /* 0110000110 */
1576 0x61, 0x80, /* 0110000110 */
1577 0x71, 0x80, /* 0111000110 */
1578 0x79, 0x80, /* 0111100110 */
1579 0x79, 0x80, /* 0111100110 */
1580 0x6d, 0x80, /* 0110110110 */
1581 0x6d, 0x80, /* 0110110110 */
1582 0x67, 0x80, /* 0110011110 */
1583 0x67, 0x80, /* 0110011110 */
1584 0x63, 0x80, /* 0110001110 */
1585 0x61, 0x80, /* 0110000110 */
1586 0x61, 0x80, /* 0110000110 */
1587 0xf3, 0xc0, /* 1111001111 */
1588 0x00, 0x00, /* 0000000000 */
1589 0x00, 0x00, /* 0000000000 */
1590 0x00, 0x00, /* 0000000000 */
1591
1592 /* 79 0x4f 'O' */
1593 0x00, 0x00, /* 0000000000 */
1594 0x0c, 0x00, /* 0000110000 */
1595 0x17, 0x00, /* 0001011100 */
1596 0x23, 0x00, /* 0010001100 */
1597 0x21, 0x80, /* 0010000110 */
1598 0x61, 0x80, /* 0110000110 */
1599 0x61, 0x80, /* 0110000110 */
1600 0x61, 0x80, /* 0110000110 */
1601 0x61, 0x80, /* 0110000110 */
1602 0x61, 0x80, /* 0110000110 */
1603 0x61, 0x80, /* 0110000110 */
1604 0x21, 0x00, /* 0010000100 */
1605 0x31, 0x00, /* 0011000100 */
1606 0x1a, 0x00, /* 0001101000 */
1607 0x0c, 0x00, /* 0000110000 */
1608 0x00, 0x00, /* 0000000000 */
1609 0x00, 0x00, /* 0000000000 */
1610 0x00, 0x00, /* 0000000000 */
1611
1612 /* 80 0x50 'P' */
1613 0x00, 0x00, /* 0000000000 */
1614 0xfe, 0x00, /* 1111111000 */
1615 0x63, 0x00, /* 0110001100 */
1616 0x61, 0x80, /* 0110000110 */
1617 0x61, 0x80, /* 0110000110 */
1618 0x61, 0x80, /* 0110000110 */
1619 0x63, 0x00, /* 0110001100 */
1620 0x7e, 0x00, /* 0111111000 */
1621 0x60, 0x00, /* 0110000000 */
1622 0x60, 0x00, /* 0110000000 */
1623 0x60, 0x00, /* 0110000000 */
1624 0x60, 0x00, /* 0110000000 */
1625 0x60, 0x00, /* 0110000000 */
1626 0x60, 0x00, /* 0110000000 */
1627 0xf0, 0x00, /* 1111000000 */
1628 0x00, 0x00, /* 0000000000 */
1629 0x00, 0x00, /* 0000000000 */
1630 0x00, 0x00, /* 0000000000 */
1631
1632 /* 81 0x51 'Q' */
1633 0x00, 0x00, /* 0000000000 */
1634 0x0e, 0x00, /* 0000111000 */
1635 0x13, 0x00, /* 0001001100 */
1636 0x23, 0x00, /* 0010001100 */
1637 0x21, 0x80, /* 0010000110 */
1638 0x61, 0x80, /* 0110000110 */
1639 0x61, 0x80, /* 0110000110 */
1640 0x61, 0x80, /* 0110000110 */
1641 0x61, 0x80, /* 0110000110 */
1642 0x61, 0x80, /* 0110000110 */
1643 0x31, 0x80, /* 0011000110 */
1644 0x3b, 0x00, /* 0011101100 */
1645 0x1e, 0x00, /* 0001111000 */
1646 0x0c, 0x00, /* 0000110000 */
1647 0x1e, 0x00, /* 0001111000 */
1648 0x26, 0x00, /* 0010011000 */
1649 0x03, 0x80, /* 0000001110 */
1650 0x00, 0x00, /* 0000000000 */
1651
1652 /* 82 0x52 'R' */
1653 0x00, 0x00, /* 0000000000 */
1654 0xfe, 0x00, /* 1111111000 */
1655 0x63, 0x00, /* 0110001100 */
1656 0x61, 0x80, /* 0110000110 */
1657 0x61, 0x80, /* 0110000110 */
1658 0x61, 0x80, /* 0110000110 */
1659 0x61, 0x00, /* 0110000100 */
1660 0x7e, 0x00, /* 0111111000 */
1661 0x78, 0x00, /* 0111100000 */
1662 0x6c, 0x00, /* 0110110000 */
1663 0x6e, 0x00, /* 0110111000 */
1664 0x67, 0x00, /* 0110011100 */
1665 0x63, 0x80, /* 0110001110 */
1666 0x61, 0xc0, /* 0110000111 */
1667 0xf0, 0xc0, /* 1111000011 */
1668 0x00, 0x00, /* 0000000000 */
1669 0x00, 0x00, /* 0000000000 */
1670 0x00, 0x00, /* 0000000000 */
1671
1672 /* 83 0x53 'S' */
1673 0x00, 0x00, /* 0000000000 */
1674 0x1f, 0x00, /* 0001111100 */
1675 0x31, 0x80, /* 0011000110 */
1676 0x60, 0x80, /* 0110000010 */
1677 0x60, 0x00, /* 0110000000 */
1678 0x60, 0x00, /* 0110000000 */
1679 0x30, 0x00, /* 0011000000 */
1680 0x18, 0x00, /* 0001100000 */
1681 0x0c, 0x00, /* 0000110000 */
1682 0x06, 0x00, /* 0000011000 */
1683 0x03, 0x00, /* 0000001100 */
1684 0x01, 0x80, /* 0000000110 */
1685 0x41, 0x80, /* 0100000110 */
1686 0x63, 0x00, /* 0110001100 */
1687 0x3e, 0x00, /* 0011111000 */
1688 0x00, 0x00, /* 0000000000 */
1689 0x00, 0x00, /* 0000000000 */
1690 0x00, 0x00, /* 0000000000 */
1691
1692 /* 84 0x54 'T' */
1693 0x00, 0x00, /* 0000000000 */
1694 0x7f, 0x80, /* 0111111110 */
1695 0x4c, 0x80, /* 0100110010 */
1696 0x0c, 0x00, /* 0000110000 */
1697 0x0c, 0x00, /* 0000110000 */
1698 0x0c, 0x00, /* 0000110000 */
1699 0x0c, 0x00, /* 0000110000 */
1700 0x0c, 0x00, /* 0000110000 */
1701 0x0c, 0x00, /* 0000110000 */
1702 0x0c, 0x00, /* 0000110000 */
1703 0x0c, 0x00, /* 0000110000 */
1704 0x0c, 0x00, /* 0000110000 */
1705 0x0c, 0x00, /* 0000110000 */
1706 0x0c, 0x00, /* 0000110000 */
1707 0x3f, 0x00, /* 0011111100 */
1708 0x00, 0x00, /* 0000000000 */
1709 0x00, 0x00, /* 0000000000 */
1710 0x00, 0x00, /* 0000000000 */
1711
1712 /* 85 0x55 'U' */
1713 0x00, 0x00, /* 0000000000 */
1714 0xf3, 0xc0, /* 1111001111 */
1715 0x61, 0x80, /* 0110000110 */
1716 0x61, 0x80, /* 0110000110 */
1717 0x61, 0x80, /* 0110000110 */
1718 0x61, 0x80, /* 0110000110 */
1719 0x61, 0x80, /* 0110000110 */
1720 0x61, 0x80, /* 0110000110 */
1721 0x61, 0x80, /* 0110000110 */
1722 0x61, 0x80, /* 0110000110 */
1723 0x61, 0x80, /* 0110000110 */
1724 0x61, 0x80, /* 0110000110 */
1725 0x73, 0x00, /* 0111001100 */
1726 0x3f, 0x00, /* 0011111100 */
1727 0x1e, 0x00, /* 0001111000 */
1728 0x00, 0x00, /* 0000000000 */
1729 0x00, 0x00, /* 0000000000 */
1730 0x00, 0x00, /* 0000000000 */
1731
1732 /* 86 0x56 'V' */
1733 0x00, 0x00, /* 0000000000 */
1734 0xe1, 0xc0, /* 1110000111 */
1735 0xc0, 0xc0, /* 1100000011 */
1736 0x61, 0x80, /* 0110000110 */
1737 0x61, 0x80, /* 0110000110 */
1738 0x61, 0x80, /* 0110000110 */
1739 0x33, 0x00, /* 0011001100 */
1740 0x33, 0x00, /* 0011001100 */
1741 0x33, 0x00, /* 0011001100 */
1742 0x12, 0x00, /* 0001001000 */
1743 0x1e, 0x00, /* 0001111000 */
1744 0x1e, 0x00, /* 0001111000 */
1745 0x0c, 0x00, /* 0000110000 */
1746 0x0c, 0x00, /* 0000110000 */
1747 0x0c, 0x00, /* 0000110000 */
1748 0x00, 0x00, /* 0000000000 */
1749 0x00, 0x00, /* 0000000000 */
1750 0x00, 0x00, /* 0000000000 */
1751
1752 /* 87 0x57 'W' */
1753 0x00, 0x00, /* 0000000000 */
1754 0xe1, 0xc0, /* 1110000111 */
1755 0xc0, 0xc0, /* 1100000011 */
1756 0xc0, 0xc0, /* 1100000011 */
1757 0xc0, 0xc0, /* 1100000011 */
1758 0xe0, 0xc0, /* 1110000011 */
1759 0x61, 0x80, /* 0110000110 */
1760 0x6d, 0x80, /* 0110110110 */
1761 0x6d, 0x80, /* 0110110110 */
1762 0x7f, 0x80, /* 0111111110 */
1763 0x77, 0x00, /* 0111011100 */
1764 0x33, 0x00, /* 0011001100 */
1765 0x33, 0x00, /* 0011001100 */
1766 0x33, 0x00, /* 0011001100 */
1767 0x33, 0x00, /* 0011001100 */
1768 0x00, 0x00, /* 0000000000 */
1769 0x00, 0x00, /* 0000000000 */
1770 0x00, 0x00, /* 0000000000 */
1771
1772 /* 88 0x58 'X' */
1773 0x00, 0x00, /* 0000000000 */
1774 0xf7, 0x80, /* 1111011110 */
1775 0x63, 0x00, /* 0110001100 */
1776 0x63, 0x00, /* 0110001100 */
1777 0x36, 0x00, /* 0011011000 */
1778 0x36, 0x00, /* 0011011000 */
1779 0x36, 0x00, /* 0011011000 */
1780 0x1c, 0x00, /* 0001110000 */
1781 0x1c, 0x00, /* 0001110000 */
1782 0x36, 0x00, /* 0011011000 */
1783 0x36, 0x00, /* 0011011000 */
1784 0x36, 0x00, /* 0011011000 */
1785 0x63, 0x00, /* 0110001100 */
1786 0x63, 0x00, /* 0110001100 */
1787 0xf7, 0x80, /* 1111011110 */
1788 0x00, 0x00, /* 0000000000 */
1789 0x00, 0x00, /* 0000000000 */
1790 0x00, 0x00, /* 0000000000 */
1791
1792 /* 89 0x59 'Y' */
1793 0x00, 0x00, /* 0000000000 */
1794 0xf3, 0xc0, /* 1111001111 */
1795 0x61, 0x80, /* 0110000110 */
1796 0x61, 0x80, /* 0110000110 */
1797 0x33, 0x00, /* 0011001100 */
1798 0x33, 0x00, /* 0011001100 */
1799 0x1e, 0x00, /* 0001111000 */
1800 0x0c, 0x00, /* 0000110000 */
1801 0x0c, 0x00, /* 0000110000 */
1802 0x0c, 0x00, /* 0000110000 */
1803 0x0c, 0x00, /* 0000110000 */
1804 0x0c, 0x00, /* 0000110000 */
1805 0x0c, 0x00, /* 0000110000 */
1806 0x0c, 0x00, /* 0000110000 */
1807 0x1e, 0x00, /* 0001111000 */
1808 0x00, 0x00, /* 0000000000 */
1809 0x00, 0x00, /* 0000000000 */
1810 0x00, 0x00, /* 0000000000 */
1811
1812 /* 90 0x5a 'Z' */
1813 0x00, 0x00, /* 0000000000 */
1814 0x3f, 0x80, /* 0011111110 */
1815 0x21, 0x80, /* 0010000110 */
1816 0x01, 0x80, /* 0000000110 */
1817 0x03, 0x00, /* 0000001100 */
1818 0x03, 0x00, /* 0000001100 */
1819 0x06, 0x00, /* 0000011000 */
1820 0x06, 0x00, /* 0000011000 */
1821 0x0c, 0x00, /* 0000110000 */
1822 0x0c, 0x00, /* 0000110000 */
1823 0x18, 0x00, /* 0001100000 */
1824 0x18, 0x00, /* 0001100000 */
1825 0x30, 0x00, /* 0011000000 */
1826 0x30, 0x80, /* 0011000010 */
1827 0x3f, 0x80, /* 0011111110 */
1828 0x00, 0x00, /* 0000000000 */
1829 0x00, 0x00, /* 0000000000 */
1830 0x00, 0x00, /* 0000000000 */
1831
1832 /* 91 0x5b '[' */
1833 0x00, 0x00, /* 0000000000 */
1834 0x1f, 0x00, /* 0001111100 */
1835 0x1f, 0x00, /* 0001111100 */
1836 0x18, 0x00, /* 0001100000 */
1837 0x18, 0x00, /* 0001100000 */
1838 0x18, 0x00, /* 0001100000 */
1839 0x18, 0x00, /* 0001100000 */
1840 0x18, 0x00, /* 0001100000 */
1841 0x18, 0x00, /* 0001100000 */
1842 0x18, 0x00, /* 0001100000 */
1843 0x18, 0x00, /* 0001100000 */
1844 0x18, 0x00, /* 0001100000 */
1845 0x18, 0x00, /* 0001100000 */
1846 0x18, 0x00, /* 0001100000 */
1847 0x1f, 0x00, /* 0001111100 */
1848 0x1f, 0x00, /* 0001111100 */
1849 0x00, 0x00, /* 0000000000 */
1850 0x00, 0x00, /* 0000000000 */
1851
1852 /* 92 0x5c '\' */
1853 0x00, 0x00, /* 0000000000 */
1854 0xc0, 0x00, /* 1100000000 */
1855 0x60, 0x00, /* 0110000000 */
1856 0x60, 0x00, /* 0110000000 */
1857 0x30, 0x00, /* 0011000000 */
1858 0x30, 0x00, /* 0011000000 */
1859 0x18, 0x00, /* 0001100000 */
1860 0x18, 0x00, /* 0001100000 */
1861 0x0c, 0x00, /* 0000110000 */
1862 0x0c, 0x00, /* 0000110000 */
1863 0x06, 0x00, /* 0000011000 */
1864 0x06, 0x00, /* 0000011000 */
1865 0x03, 0x00, /* 0000001100 */
1866 0x03, 0x00, /* 0000001100 */
1867 0x01, 0x80, /* 0000000110 */
1868 0x01, 0x80, /* 0000000110 */
1869 0x00, 0xc0, /* 0000000011 */
1870 0x00, 0x00, /* 0000000000 */
1871
1872 /* 93 0x5d ']' */
1873 0x00, 0x00, /* 0000000000 */
1874 0x3e, 0x00, /* 0011111000 */
1875 0x3e, 0x00, /* 0011111000 */
1876 0x06, 0x00, /* 0000011000 */
1877 0x06, 0x00, /* 0000011000 */
1878 0x06, 0x00, /* 0000011000 */
1879 0x06, 0x00, /* 0000011000 */
1880 0x06, 0x00, /* 0000011000 */
1881 0x06, 0x00, /* 0000011000 */
1882 0x06, 0x00, /* 0000011000 */
1883 0x06, 0x00, /* 0000011000 */
1884 0x06, 0x00, /* 0000011000 */
1885 0x06, 0x00, /* 0000011000 */
1886 0x06, 0x00, /* 0000011000 */
1887 0x3e, 0x00, /* 0011111000 */
1888 0x3e, 0x00, /* 0011111000 */
1889 0x00, 0x00, /* 0000000000 */
1890 0x00, 0x00, /* 0000000000 */
1891
1892 /* 94 0x5e '^' */
1893 0x00, 0x00, /* 0000000000 */
1894 0x0c, 0x00, /* 0000110000 */
1895 0x1e, 0x00, /* 0001111000 */
1896 0x33, 0x00, /* 0011001100 */
1897 0x61, 0x80, /* 0110000110 */
1898 0x00, 0x00, /* 0000000000 */
1899 0x00, 0x00, /* 0000000000 */
1900 0x00, 0x00, /* 0000000000 */
1901 0x00, 0x00, /* 0000000000 */
1902 0x00, 0x00, /* 0000000000 */
1903 0x00, 0x00, /* 0000000000 */
1904 0x00, 0x00, /* 0000000000 */
1905 0x00, 0x00, /* 0000000000 */
1906 0x00, 0x00, /* 0000000000 */
1907 0x00, 0x00, /* 0000000000 */
1908 0x00, 0x00, /* 0000000000 */
1909 0x00, 0x00, /* 0000000000 */
1910 0x00, 0x00, /* 0000000000 */
1911
1912 /* 95 0x5f '_' */
1913 0x00, 0x00, /* 0000000000 */
1914 0x00, 0x00, /* 0000000000 */
1915 0x00, 0x00, /* 0000000000 */
1916 0x00, 0x00, /* 0000000000 */
1917 0x00, 0x00, /* 0000000000 */
1918 0x00, 0x00, /* 0000000000 */
1919 0x00, 0x00, /* 0000000000 */
1920 0x00, 0x00, /* 0000000000 */
1921 0x00, 0x00, /* 0000000000 */
1922 0x00, 0x00, /* 0000000000 */
1923 0x00, 0x00, /* 0000000000 */
1924 0x00, 0x00, /* 0000000000 */
1925 0x00, 0x00, /* 0000000000 */
1926 0x00, 0x00, /* 0000000000 */
1927 0x00, 0x00, /* 0000000000 */
1928 0xff, 0xc0, /* 1111111111 */
1929 0xff, 0xc0, /* 1111111111 */
1930 0x00, 0x00, /* 0000000000 */
1931
1932 /* 96 0x60 '`' */
1933 0x04, 0x00, /* 0000010000 */
1934 0x0c, 0x00, /* 0000110000 */
1935 0x18, 0x00, /* 0001100000 */
1936 0x18, 0x00, /* 0001100000 */
1937 0x1e, 0x00, /* 0001111000 */
1938 0x1e, 0x00, /* 0001111000 */
1939 0x0c, 0x00, /* 0000110000 */
1940 0x00, 0x00, /* 0000000000 */
1941 0x00, 0x00, /* 0000000000 */
1942 0x00, 0x00, /* 0000000000 */
1943 0x00, 0x00, /* 0000000000 */
1944 0x00, 0x00, /* 0000000000 */
1945 0x00, 0x00, /* 0000000000 */
1946 0x00, 0x00, /* 0000000000 */
1947 0x00, 0x00, /* 0000000000 */
1948 0x00, 0x00, /* 0000000000 */
1949 0x00, 0x00, /* 0000000000 */
1950 0x00, 0x00, /* 0000000000 */
1951
1952 /* 97 0x61 'a' */
1953 0x00, 0x00, /* 0000000000 */
1954 0x00, 0x00, /* 0000000000 */
1955 0x00, 0x00, /* 0000000000 */
1956 0x00, 0x00, /* 0000000000 */
1957 0x00, 0x00, /* 0000000000 */
1958 0x1f, 0x00, /* 0001111100 */
1959 0x31, 0x80, /* 0011000110 */
1960 0x21, 0x80, /* 0010000110 */
1961 0x07, 0x80, /* 0000011110 */
1962 0x39, 0x80, /* 0011100110 */
1963 0x61, 0x80, /* 0110000110 */
1964 0x61, 0x80, /* 0110000110 */
1965 0x61, 0x80, /* 0110000110 */
1966 0x73, 0x80, /* 0111001110 */
1967 0x3d, 0xc0, /* 0011110111 */
1968 0x00, 0x00, /* 0000000000 */
1969 0x00, 0x00, /* 0000000000 */
1970 0x00, 0x00, /* 0000000000 */
1971
1972 /* 98 0x62 'b' */
1973 0x20, 0x00, /* 0010000000 */
1974 0x60, 0x00, /* 0110000000 */
1975 0xe0, 0x00, /* 1110000000 */
1976 0x60, 0x00, /* 0110000000 */
1977 0x60, 0x00, /* 0110000000 */
1978 0x66, 0x00, /* 0110011000 */
1979 0x6f, 0x00, /* 0110111100 */
1980 0x73, 0x80, /* 0111001110 */
1981 0x61, 0x80, /* 0110000110 */
1982 0x61, 0x80, /* 0110000110 */
1983 0x61, 0x80, /* 0110000110 */
1984 0x61, 0x80, /* 0110000110 */
1985 0x71, 0x80, /* 0111000110 */
1986 0x7b, 0x00, /* 0111101100 */
1987 0x4e, 0x00, /* 0100111000 */
1988 0x00, 0x00, /* 0000000000 */
1989 0x00, 0x00, /* 0000000000 */
1990 0x00, 0x00, /* 0000000000 */
1991
1992 /* 99 0x63 'c' */
1993 0x00, 0x00, /* 0000000000 */
1994 0x00, 0x00, /* 0000000000 */
1995 0x00, 0x00, /* 0000000000 */
1996 0x00, 0x00, /* 0000000000 */
1997 0x00, 0x00, /* 0000000000 */
1998 0x1e, 0x00, /* 0001111000 */
1999 0x37, 0x00, /* 0011011100 */
2000 0x23, 0x00, /* 0010001100 */
2001 0x60, 0x00, /* 0110000000 */
2002 0x60, 0x00, /* 0110000000 */
2003 0x60, 0x00, /* 0110000000 */
2004 0x60, 0x00, /* 0110000000 */
2005 0x71, 0x00, /* 0111000100 */
2006 0x33, 0x00, /* 0011001100 */
2007 0x1e, 0x00, /* 0001111000 */
2008 0x00, 0x00, /* 0000000000 */
2009 0x00, 0x00, /* 0000000000 */
2010 0x00, 0x00, /* 0000000000 */
2011
2012 /* 100 0x64 'd' */
2013 0x01, 0x80, /* 0000000110 */
2014 0x03, 0x80, /* 0000001110 */
2015 0x01, 0x80, /* 0000000110 */
2016 0x01, 0x80, /* 0000000110 */
2017 0x01, 0x80, /* 0000000110 */
2018 0x0d, 0x80, /* 0000110110 */
2019 0x37, 0x80, /* 0011011110 */
2020 0x23, 0x80, /* 0010001110 */
2021 0x61, 0x80, /* 0110000110 */
2022 0x61, 0x80, /* 0110000110 */
2023 0x61, 0x80, /* 0110000110 */
2024 0x61, 0x80, /* 0110000110 */
2025 0x73, 0x80, /* 0111001110 */
2026 0x35, 0x80, /* 0011010110 */
2027 0x19, 0xc0, /* 0001100111 */
2028 0x00, 0x00, /* 0000000000 */
2029 0x00, 0x00, /* 0000000000 */
2030 0x00, 0x00, /* 0000000000 */
2031
2032 /* 101 0x65 'e' */
2033 0x00, 0x00, /* 0000000000 */
2034 0x00, 0x00, /* 0000000000 */
2035 0x00, 0x00, /* 0000000000 */
2036 0x00, 0x00, /* 0000000000 */
2037 0x00, 0x00, /* 0000000000 */
2038 0x0c, 0x00, /* 0000110000 */
2039 0x33, 0x00, /* 0011001100 */
2040 0x61, 0x80, /* 0110000110 */
2041 0x61, 0x80, /* 0110000110 */
2042 0x7f, 0x80, /* 0111111110 */
2043 0x60, 0x00, /* 0110000000 */
2044 0x60, 0x00, /* 0110000000 */
2045 0x30, 0x00, /* 0011000000 */
2046 0x19, 0x80, /* 0001100110 */
2047 0x0e, 0x00, /* 0000111000 */
2048 0x00, 0x00, /* 0000000000 */
2049 0x00, 0x00, /* 0000000000 */
2050 0x00, 0x00, /* 0000000000 */
2051
2052 /* 102 0x66 'f' */
2053 0x07, 0x00, /* 0000011100 */
2054 0x09, 0x80, /* 0000100110 */
2055 0x09, 0x80, /* 0000100110 */
2056 0x18, 0x00, /* 0001100000 */
2057 0x18, 0x00, /* 0001100000 */
2058 0x18, 0x00, /* 0001100000 */
2059 0x18, 0x00, /* 0001100000 */
2060 0x7f, 0x00, /* 0111111100 */
2061 0x18, 0x00, /* 0001100000 */
2062 0x18, 0x00, /* 0001100000 */
2063 0x18, 0x00, /* 0001100000 */
2064 0x18, 0x00, /* 0001100000 */
2065 0x18, 0x00, /* 0001100000 */
2066 0x18, 0x00, /* 0001100000 */
2067 0x3c, 0x00, /* 0011110000 */
2068 0x00, 0x00, /* 0000000000 */
2069 0x00, 0x00, /* 0000000000 */
2070 0x00, 0x00, /* 0000000000 */
2071
2072 /* 103 0x67 'g' */
2073 0x00, 0x00, /* 0000000000 */
2074 0x00, 0x00, /* 0000000000 */
2075 0x00, 0x00, /* 0000000000 */
2076 0x00, 0x00, /* 0000000000 */
2077 0x00, 0x00, /* 0000000000 */
2078 0x1c, 0x80, /* 0001110010 */
2079 0x37, 0x80, /* 0011011110 */
2080 0x63, 0x00, /* 0110001100 */
2081 0x63, 0x00, /* 0110001100 */
2082 0x36, 0x00, /* 0011011000 */
2083 0x3c, 0x00, /* 0011110000 */
2084 0x60, 0x00, /* 0110000000 */
2085 0x7f, 0x00, /* 0111111100 */
2086 0x3f, 0x80, /* 0011111110 */
2087 0x21, 0x80, /* 0010000110 */
2088 0x40, 0x80, /* 0100000010 */
2089 0x7f, 0x00, /* 0111111100 */
2090 0x3e, 0x00, /* 0011111000 */
2091
2092 /* 104 0x68 'h' */
2093 0x10, 0x00, /* 0001000000 */
2094 0x30, 0x00, /* 0011000000 */
2095 0x70, 0x00, /* 0111000000 */
2096 0x30, 0x00, /* 0011000000 */
2097 0x30, 0x00, /* 0011000000 */
2098 0x37, 0x00, /* 0011011100 */
2099 0x3b, 0x80, /* 0011101110 */
2100 0x31, 0x80, /* 0011000110 */
2101 0x31, 0x80, /* 0011000110 */
2102 0x31, 0x80, /* 0011000110 */
2103 0x31, 0x80, /* 0011000110 */
2104 0x31, 0x80, /* 0011000110 */
2105 0x31, 0x80, /* 0011000110 */
2106 0x31, 0x80, /* 0011000110 */
2107 0x7b, 0xc0, /* 0111101111 */
2108 0x00, 0x00, /* 0000000000 */
2109 0x00, 0x00, /* 0000000000 */
2110 0x00, 0x00, /* 0000000000 */
2111
2112 /* 105 0x69 'i' */
2113 0x00, 0x00, /* 0000000000 */
2114 0x0c, 0x00, /* 0000110000 */
2115 0x0c, 0x00, /* 0000110000 */
2116 0x00, 0x00, /* 0000000000 */
2117 0x00, 0x00, /* 0000000000 */
2118 0x3c, 0x00, /* 0011110000 */
2119 0x0c, 0x00, /* 0000110000 */
2120 0x0c, 0x00, /* 0000110000 */
2121 0x0c, 0x00, /* 0000110000 */
2122 0x0c, 0x00, /* 0000110000 */
2123 0x0c, 0x00, /* 0000110000 */
2124 0x0c, 0x00, /* 0000110000 */
2125 0x0c, 0x00, /* 0000110000 */
2126 0x0c, 0x00, /* 0000110000 */
2127 0x3f, 0x00, /* 0011111100 */
2128 0x00, 0x00, /* 0000000000 */
2129 0x00, 0x00, /* 0000000000 */
2130 0x00, 0x00, /* 0000000000 */
2131
2132 /* 106 0x6a 'j' */
2133 0x00, 0x00, /* 0000000000 */
2134 0x01, 0x80, /* 0000000110 */
2135 0x01, 0x80, /* 0000000110 */
2136 0x00, 0x00, /* 0000000000 */
2137 0x00, 0x00, /* 0000000000 */
2138 0x07, 0x80, /* 0000011110 */
2139 0x01, 0x80, /* 0000000110 */
2140 0x01, 0x80, /* 0000000110 */
2141 0x01, 0x80, /* 0000000110 */
2142 0x01, 0x80, /* 0000000110 */
2143 0x01, 0x80, /* 0000000110 */
2144 0x01, 0x80, /* 0000000110 */
2145 0x01, 0x80, /* 0000000110 */
2146 0x41, 0x80, /* 0100000110 */
2147 0x61, 0x80, /* 0110000110 */
2148 0x71, 0x80, /* 0111000110 */
2149 0x3f, 0x00, /* 0011111100 */
2150 0x1c, 0x00, /* 0001110000 */
2151
2152 /* 107 0x6b 'k' */
2153 0x60, 0x00, /* 0110000000 */
2154 0xe0, 0x00, /* 1110000000 */
2155 0x60, 0x00, /* 0110000000 */
2156 0x60, 0x00, /* 0110000000 */
2157 0x60, 0x00, /* 0110000000 */
2158 0x63, 0x80, /* 0110001110 */
2159 0x66, 0x00, /* 0110011000 */
2160 0x6c, 0x00, /* 0110110000 */
2161 0x78, 0x00, /* 0111100000 */
2162 0x70, 0x00, /* 0111000000 */
2163 0x78, 0x00, /* 0111100000 */
2164 0x6c, 0x00, /* 0110110000 */
2165 0x6e, 0x00, /* 0110111000 */
2166 0x67, 0x00, /* 0110011100 */
2167 0xf3, 0x80, /* 1111001110 */
2168 0x00, 0x00, /* 0000000000 */
2169 0x00, 0x00, /* 0000000000 */
2170 0x00, 0x00, /* 0000000000 */
2171
2172 /* 108 0x6c 'l' */
2173 0x3c, 0x00, /* 0011110000 */
2174 0x0c, 0x00, /* 0000110000 */
2175 0x0c, 0x00, /* 0000110000 */
2176 0x0c, 0x00, /* 0000110000 */
2177 0x0c, 0x00, /* 0000110000 */
2178 0x0c, 0x00, /* 0000110000 */
2179 0x0c, 0x00, /* 0000110000 */
2180 0x0c, 0x00, /* 0000110000 */
2181 0x0c, 0x00, /* 0000110000 */
2182 0x0c, 0x00, /* 0000110000 */
2183 0x0c, 0x00, /* 0000110000 */
2184 0x0c, 0x00, /* 0000110000 */
2185 0x0c, 0x00, /* 0000110000 */
2186 0x0c, 0x00, /* 0000110000 */
2187 0x3f, 0x00, /* 0011111100 */
2188 0x00, 0x00, /* 0000000000 */
2189 0x00, 0x00, /* 0000000000 */
2190 0x00, 0x00, /* 0000000000 */
2191
2192 /* 109 0x6d 'm' */
2193 0x00, 0x00, /* 0000000000 */
2194 0x00, 0x00, /* 0000000000 */
2195 0x00, 0x00, /* 0000000000 */
2196 0x00, 0x00, /* 0000000000 */
2197 0x00, 0x00, /* 0000000000 */
2198 0xdb, 0x80, /* 1101101110 */
2199 0x6d, 0x80, /* 0110110110 */
2200 0x6d, 0x80, /* 0110110110 */
2201 0x6d, 0x80, /* 0110110110 */
2202 0x6d, 0x80, /* 0110110110 */
2203 0x6d, 0x80, /* 0110110110 */
2204 0x6d, 0x80, /* 0110110110 */
2205 0x6d, 0x80, /* 0110110110 */
2206 0x6d, 0x80, /* 0110110110 */
2207 0xed, 0xc0, /* 1110110111 */
2208 0x00, 0x00, /* 0000000000 */
2209 0x00, 0x00, /* 0000000000 */
2210 0x00, 0x00, /* 0000000000 */
2211
2212 /* 110 0x6e 'n' */
2213 0x00, 0x00, /* 0000000000 */
2214 0x00, 0x00, /* 0000000000 */
2215 0x00, 0x00, /* 0000000000 */
2216 0x00, 0x00, /* 0000000000 */
2217 0x00, 0x00, /* 0000000000 */
2218 0x6f, 0x00, /* 0110111100 */
2219 0x7b, 0x80, /* 0111101110 */
2220 0x31, 0x80, /* 0011000110 */
2221 0x31, 0x80, /* 0011000110 */
2222 0x31, 0x80, /* 0011000110 */
2223 0x31, 0x80, /* 0011000110 */
2224 0x31, 0x80, /* 0011000110 */
2225 0x31, 0x80, /* 0011000110 */
2226 0x31, 0x80, /* 0011000110 */
2227 0x7b, 0xc0, /* 0111101111 */
2228 0x00, 0x00, /* 0000000000 */
2229 0x00, 0x00, /* 0000000000 */
2230 0x00, 0x00, /* 0000000000 */
2231
2232 /* 111 0x6f 'o' */
2233 0x00, 0x00, /* 0000000000 */
2234 0x00, 0x00, /* 0000000000 */
2235 0x00, 0x00, /* 0000000000 */
2236 0x00, 0x00, /* 0000000000 */
2237 0x00, 0x00, /* 0000000000 */
2238 0x3c, 0x00, /* 0011110000 */
2239 0x66, 0x00, /* 0110011000 */
2240 0xc3, 0x00, /* 1100001100 */
2241 0xc1, 0x80, /* 1100000110 */
2242 0xc1, 0x80, /* 1100000110 */
2243 0xc1, 0x80, /* 1100000110 */
2244 0xc1, 0x80, /* 1100000110 */
2245 0xe1, 0x80, /* 1110000110 */
2246 0x73, 0x00, /* 0111001100 */
2247 0x3c, 0x00, /* 0011110000 */
2248 0x00, 0x00, /* 0000000000 */
2249 0x00, 0x00, /* 0000000000 */
2250 0x00, 0x00, /* 0000000000 */
2251
2252 /* 112 0x70 'p' */
2253 0x00, 0x00, /* 0000000000 */
2254 0x00, 0x00, /* 0000000000 */
2255 0x00, 0x00, /* 0000000000 */
2256 0x00, 0x00, /* 0000000000 */
2257 0x00, 0x00, /* 0000000000 */
2258 0xde, 0x00, /* 1101111000 */
2259 0x76, 0x00, /* 0111011000 */
2260 0x63, 0x00, /* 0110001100 */
2261 0x61, 0x80, /* 0110000110 */
2262 0x61, 0x80, /* 0110000110 */
2263 0x61, 0x80, /* 0110000110 */
2264 0x61, 0x80, /* 0110000110 */
2265 0x71, 0x80, /* 0111000110 */
2266 0x7b, 0x00, /* 0111101100 */
2267 0x7e, 0x00, /* 0111111000 */
2268 0x60, 0x00, /* 0110000000 */
2269 0x60, 0x00, /* 0110000000 */
2270 0xf0, 0x00, /* 1111000000 */
2271
2272 /* 113 0x71 'q' */
2273 0x00, 0x00, /* 0000000000 */
2274 0x00, 0x00, /* 0000000000 */
2275 0x00, 0x00, /* 0000000000 */
2276 0x00, 0x00, /* 0000000000 */
2277 0x00, 0x00, /* 0000000000 */
2278 0x0e, 0xc0, /* 0000111011 */
2279 0x1b, 0x80, /* 0001101110 */
2280 0x33, 0x80, /* 0011001110 */
2281 0x61, 0x80, /* 0110000110 */
2282 0x61, 0x80, /* 0110000110 */
2283 0x61, 0x80, /* 0110000110 */
2284 0x61, 0x80, /* 0110000110 */
2285 0x71, 0x80, /* 0111000110 */
2286 0x3b, 0x80, /* 0011101110 */
2287 0x1f, 0x80, /* 0001111110 */
2288 0x01, 0x80, /* 0000000110 */
2289 0x01, 0x80, /* 0000000110 */
2290 0x03, 0xc0, /* 0000001111 */
2291
2292 /* 114 0x72 'r' */
2293 0x00, 0x00, /* 0000000000 */
2294 0x00, 0x00, /* 0000000000 */
2295 0x00, 0x00, /* 0000000000 */
2296 0x00, 0x00, /* 0000000000 */
2297 0x00, 0x00, /* 0000000000 */
2298 0x73, 0x00, /* 0111001100 */
2299 0x35, 0x80, /* 0011010110 */
2300 0x39, 0x80, /* 0011100110 */
2301 0x30, 0x00, /* 0011000000 */
2302 0x30, 0x00, /* 0011000000 */
2303 0x30, 0x00, /* 0011000000 */
2304 0x30, 0x00, /* 0011000000 */
2305 0x30, 0x00, /* 0011000000 */
2306 0x30, 0x00, /* 0011000000 */
2307 0x78, 0x00, /* 0111100000 */
2308 0x00, 0x00, /* 0000000000 */
2309 0x00, 0x00, /* 0000000000 */
2310 0x00, 0x00, /* 0000000000 */
2311
2312 /* 115 0x73 's' */
2313 0x00, 0x00, /* 0000000000 */
2314 0x00, 0x00, /* 0000000000 */
2315 0x00, 0x00, /* 0000000000 */
2316 0x00, 0x00, /* 0000000000 */
2317 0x00, 0x00, /* 0000000000 */
2318 0x3f, 0x00, /* 0011111100 */
2319 0x63, 0x00, /* 0110001100 */
2320 0x61, 0x00, /* 0110000100 */
2321 0x70, 0x00, /* 0111000000 */
2322 0x38, 0x00, /* 0011100000 */
2323 0x0e, 0x00, /* 0000111000 */
2324 0x07, 0x00, /* 0000011100 */
2325 0x43, 0x00, /* 0100001100 */
2326 0x63, 0x00, /* 0110001100 */
2327 0x7e, 0x00, /* 0111111000 */
2328 0x00, 0x00, /* 0000000000 */
2329 0x00, 0x00, /* 0000000000 */
2330 0x00, 0x00, /* 0000000000 */
2331
2332 /* 116 0x74 't' */
2333 0x00, 0x00, /* 0000000000 */
2334 0x00, 0x00, /* 0000000000 */
2335 0x08, 0x00, /* 0000100000 */
2336 0x08, 0x00, /* 0000100000 */
2337 0x18, 0x00, /* 0001100000 */
2338 0x7f, 0x80, /* 0111111110 */
2339 0x18, 0x00, /* 0001100000 */
2340 0x18, 0x00, /* 0001100000 */
2341 0x18, 0x00, /* 0001100000 */
2342 0x18, 0x00, /* 0001100000 */
2343 0x18, 0x00, /* 0001100000 */
2344 0x18, 0x00, /* 0001100000 */
2345 0x18, 0x00, /* 0001100000 */
2346 0x1c, 0x80, /* 0001110010 */
2347 0x0f, 0x00, /* 0000111100 */
2348 0x00, 0x00, /* 0000000000 */
2349 0x00, 0x00, /* 0000000000 */
2350 0x00, 0x00, /* 0000000000 */
2351
2352 /* 117 0x75 'u' */
2353 0x00, 0x00, /* 0000000000 */
2354 0x00, 0x00, /* 0000000000 */
2355 0x00, 0x00, /* 0000000000 */
2356 0x00, 0x00, /* 0000000000 */
2357 0x00, 0x00, /* 0000000000 */
2358 0xf7, 0x80, /* 1111011110 */
2359 0x63, 0x00, /* 0110001100 */
2360 0x63, 0x00, /* 0110001100 */
2361 0x63, 0x00, /* 0110001100 */
2362 0x63, 0x00, /* 0110001100 */
2363 0x63, 0x00, /* 0110001100 */
2364 0x63, 0x00, /* 0110001100 */
2365 0x63, 0x00, /* 0110001100 */
2366 0x77, 0x00, /* 0111011100 */
2367 0x3d, 0x80, /* 0011110110 */
2368 0x00, 0x00, /* 0000000000 */
2369 0x00, 0x00, /* 0000000000 */
2370 0x00, 0x00, /* 0000000000 */
2371
2372 /* 118 0x76 'v' */
2373 0x00, 0x00, /* 0000000000 */
2374 0x00, 0x00, /* 0000000000 */
2375 0x00, 0x00, /* 0000000000 */
2376 0x00, 0x00, /* 0000000000 */
2377 0x00, 0x00, /* 0000000000 */
2378 0xf1, 0xc0, /* 1111000111 */
2379 0x60, 0xc0, /* 0110000011 */
2380 0x31, 0x80, /* 0011000110 */
2381 0x31, 0x80, /* 0011000110 */
2382 0x19, 0x80, /* 0001100110 */
2383 0x1b, 0x00, /* 0001101100 */
2384 0x0f, 0x00, /* 0000111100 */
2385 0x0f, 0x00, /* 0000111100 */
2386 0x06, 0x00, /* 0000011000 */
2387 0x06, 0x00, /* 0000011000 */
2388 0x00, 0x00, /* 0000000000 */
2389 0x00, 0x00, /* 0000000000 */
2390 0x00, 0x00, /* 0000000000 */
2391
2392 /* 119 0x77 'w' */
2393 0x00, 0x00, /* 0000000000 */
2394 0x00, 0x00, /* 0000000000 */
2395 0x00, 0x00, /* 0000000000 */
2396 0x00, 0x00, /* 0000000000 */
2397 0x00, 0x00, /* 0000000000 */
2398 0xe3, 0xc0, /* 1110001111 */
2399 0xc1, 0x80, /* 1100000110 */
2400 0xc1, 0x80, /* 1100000110 */
2401 0xc1, 0x80, /* 1100000110 */
2402 0xc1, 0x80, /* 1100000110 */
2403 0x6b, 0x00, /* 0110101100 */
2404 0x6b, 0x00, /* 0110101100 */
2405 0x7e, 0x00, /* 0111111000 */
2406 0x36, 0x00, /* 0011011000 */
2407 0x36, 0x00, /* 0011011000 */
2408 0x00, 0x00, /* 0000000000 */
2409 0x00, 0x00, /* 0000000000 */
2410 0x00, 0x00, /* 0000000000 */
2411
2412 /* 120 0x78 'x' */
2413 0x00, 0x00, /* 0000000000 */
2414 0x00, 0x00, /* 0000000000 */
2415 0x00, 0x00, /* 0000000000 */
2416 0x00, 0x00, /* 0000000000 */
2417 0x00, 0x00, /* 0000000000 */
2418 0xf7, 0x80, /* 1111011110 */
2419 0x63, 0x00, /* 0110001100 */
2420 0x36, 0x00, /* 0011011000 */
2421 0x36, 0x00, /* 0011011000 */
2422 0x1c, 0x00, /* 0001110000 */
2423 0x1c, 0x00, /* 0001110000 */
2424 0x36, 0x00, /* 0011011000 */
2425 0x66, 0x00, /* 0110011000 */
2426 0x63, 0x00, /* 0110001100 */
2427 0xf7, 0x80, /* 1111011110 */
2428 0x00, 0x00, /* 0000000000 */
2429 0x00, 0x00, /* 0000000000 */
2430 0x00, 0x00, /* 0000000000 */
2431
2432 /* 121 0x79 'y' */
2433 0x00, 0x00, /* 0000000000 */
2434 0x00, 0x00, /* 0000000000 */
2435 0x00, 0x00, /* 0000000000 */
2436 0x00, 0x00, /* 0000000000 */
2437 0x00, 0x00, /* 0000000000 */
2438 0xf3, 0xc0, /* 1111001111 */
2439 0x61, 0x80, /* 0110000110 */
2440 0x33, 0x00, /* 0011001100 */
2441 0x1b, 0x00, /* 0001101100 */
2442 0x1e, 0x00, /* 0001111000 */
2443 0x0e, 0x00, /* 0000111000 */
2444 0x0c, 0x00, /* 0000110000 */
2445 0x0c, 0x00, /* 0000110000 */
2446 0x0c, 0x00, /* 0000110000 */
2447 0x0c, 0x00, /* 0000110000 */
2448 0x18, 0x00, /* 0001100000 */
2449 0x78, 0x00, /* 0111100000 */
2450 0x70, 0x00, /* 0111000000 */
2451
2452 /* 122 0x7a 'z' */
2453 0x00, 0x00, /* 0000000000 */
2454 0x00, 0x00, /* 0000000000 */
2455 0x00, 0x00, /* 0000000000 */
2456 0x00, 0x00, /* 0000000000 */
2457 0x00, 0x00, /* 0000000000 */
2458 0x7f, 0x80, /* 0111111110 */
2459 0x61, 0x80, /* 0110000110 */
2460 0x43, 0x00, /* 0100001100 */
2461 0x06, 0x00, /* 0000011000 */
2462 0x0c, 0x00, /* 0000110000 */
2463 0x18, 0x00, /* 0001100000 */
2464 0x30, 0x00, /* 0011000000 */
2465 0x60, 0x80, /* 0110000010 */
2466 0x61, 0x80, /* 0110000110 */
2467 0x7f, 0x80, /* 0111111110 */
2468 0x00, 0x00, /* 0000000000 */
2469 0x00, 0x00, /* 0000000000 */
2470 0x00, 0x00, /* 0000000000 */
2471
2472 /* 123 0x7b '{' */
2473 0x07, 0x00, /* 0000011100 */
2474 0x0c, 0x00, /* 0000110000 */
2475 0x0c, 0x00, /* 0000110000 */
2476 0x0c, 0x00, /* 0000110000 */
2477 0x0c, 0x00, /* 0000110000 */
2478 0x0c, 0x00, /* 0000110000 */
2479 0x18, 0x00, /* 0001100000 */
2480 0x70, 0x00, /* 0111000000 */
2481 0x18, 0x00, /* 0001100000 */
2482 0x0c, 0x00, /* 0000110000 */
2483 0x0c, 0x00, /* 0000110000 */
2484 0x0c, 0x00, /* 0000110000 */
2485 0x0c, 0x00, /* 0000110000 */
2486 0x0c, 0x00, /* 0000110000 */
2487 0x07, 0x00, /* 0000011100 */
2488 0x00, 0x00, /* 0000000000 */
2489 0x00, 0x00, /* 0000000000 */
2490 0x00, 0x00, /* 0000000000 */
2491
2492 /* 124 0x7c '|' */
2493 0x0c, 0x00, /* 0000110000 */
2494 0x0c, 0x00, /* 0000110000 */
2495 0x0c, 0x00, /* 0000110000 */
2496 0x0c, 0x00, /* 0000110000 */
2497 0x0c, 0x00, /* 0000110000 */
2498 0x0c, 0x00, /* 0000110000 */
2499 0x0c, 0x00, /* 0000110000 */
2500 0x0c, 0x00, /* 0000110000 */
2501 0x0c, 0x00, /* 0000110000 */
2502 0x0c, 0x00, /* 0000110000 */
2503 0x0c, 0x00, /* 0000110000 */
2504 0x0c, 0x00, /* 0000110000 */
2505 0x0c, 0x00, /* 0000110000 */
2506 0x0c, 0x00, /* 0000110000 */
2507 0x0c, 0x00, /* 0000110000 */
2508 0x0c, 0x00, /* 0000110000 */
2509 0x0c, 0x00, /* 0000110000 */
2510 0x00, 0x00, /* 0000000000 */
2511
2512 /* 125 0x7d '}' */
2513 0x38, 0x00, /* 0011100000 */
2514 0x0c, 0x00, /* 0000110000 */
2515 0x0c, 0x00, /* 0000110000 */
2516 0x0c, 0x00, /* 0000110000 */
2517 0x0c, 0x00, /* 0000110000 */
2518 0x0c, 0x00, /* 0000110000 */
2519 0x06, 0x00, /* 0000011000 */
2520 0x03, 0x80, /* 0000001110 */
2521 0x06, 0x00, /* 0000011000 */
2522 0x0c, 0x00, /* 0000110000 */
2523 0x0c, 0x00, /* 0000110000 */
2524 0x0c, 0x00, /* 0000110000 */
2525 0x0c, 0x00, /* 0000110000 */
2526 0x0c, 0x00, /* 0000110000 */
2527 0x38, 0x00, /* 0011100000 */
2528 0x00, 0x00, /* 0000000000 */
2529 0x00, 0x00, /* 0000000000 */
2530 0x00, 0x00, /* 0000000000 */
2531
2532 /* 126 0x7e '~' */
2533 0x00, 0x00, /* 0000000000 */
2534 0x18, 0x80, /* 0001100010 */
2535 0x3d, 0x80, /* 0011110110 */
2536 0x6f, 0x00, /* 0110111100 */
2537 0x46, 0x00, /* 0100011000 */
2538 0x00, 0x00, /* 0000000000 */
2539 0x00, 0x00, /* 0000000000 */
2540 0x00, 0x00, /* 0000000000 */
2541 0x00, 0x00, /* 0000000000 */
2542 0x00, 0x00, /* 0000000000 */
2543 0x00, 0x00, /* 0000000000 */
2544 0x00, 0x00, /* 0000000000 */
2545 0x00, 0x00, /* 0000000000 */
2546 0x00, 0x00, /* 0000000000 */
2547 0x00, 0x00, /* 0000000000 */
2548 0x00, 0x00, /* 0000000000 */
2549 0x00, 0x00, /* 0000000000 */
2550 0x00, 0x00, /* 0000000000 */
2551
2552 /* 127 0x7f '.' */
2553 0x00, 0x00, /* 0000000000 */
2554 0x00, 0x00, /* 0000000000 */
2555 0x00, 0x00, /* 0000000000 */
2556 0x00, 0x00, /* 0000000000 */
2557 0x00, 0x00, /* 0000000000 */
2558 0x00, 0x00, /* 0000000000 */
2559 0x00, 0x00, /* 0000000000 */
2560 0x00, 0x00, /* 0000000000 */
2561 0x0c, 0x00, /* 0000110000 */
2562 0x12, 0x00, /* 0001001000 */
2563 0x21, 0x00, /* 0010000100 */
2564 0x40, 0x80, /* 0100000010 */
2565 0x40, 0x80, /* 0100000010 */
2566 0x40, 0x80, /* 0100000010 */
2567 0x7f, 0x80, /* 0111111110 */
2568 0x00, 0x00, /* 0000000000 */
2569 0x00, 0x00, /* 0000000000 */
2570 0x00, 0x00, /* 0000000000 */
2571
2572 /* 128 0x80 '.' */
2573 0x00, 0x00, /* 0000000000 */
2574 0x1f, 0x00, /* 0001111100 */
2575 0x21, 0x80, /* 0010000110 */
2576 0x40, 0x80, /* 0100000010 */
2577 0x40, 0x00, /* 0100000000 */
2578 0x40, 0x00, /* 0100000000 */
2579 0x40, 0x00, /* 0100000000 */
2580 0x40, 0x00, /* 0100000000 */
2581 0x40, 0x00, /* 0100000000 */
2582 0x40, 0x00, /* 0100000000 */
2583 0x60, 0x80, /* 0110000010 */
2584 0x31, 0x00, /* 0011000100 */
2585 0x1e, 0x00, /* 0001111000 */
2586 0x08, 0x00, /* 0000100000 */
2587 0x04, 0x00, /* 0000010000 */
2588 0x02, 0x00, /* 0000001000 */
2589 0x02, 0x00, /* 0000001000 */
2590 0x1c, 0x00, /* 0001110000 */
2591
2592 /* 129 0x81 '.' */
2593 0x00, 0x00, /* 0000000000 */
2594 0x1b, 0x00, /* 0001101100 */
2595 0x1b, 0x00, /* 0001101100 */
2596 0x00, 0x00, /* 0000000000 */
2597 0x00, 0x00, /* 0000000000 */
2598 0x7b, 0x80, /* 0111101110 */
2599 0x31, 0x00, /* 0011000100 */
2600 0x31, 0x00, /* 0011000100 */
2601 0x31, 0x00, /* 0011000100 */
2602 0x31, 0x00, /* 0011000100 */
2603 0x31, 0x00, /* 0011000100 */
2604 0x31, 0x00, /* 0011000100 */
2605 0x31, 0x00, /* 0011000100 */
2606 0x3b, 0x00, /* 0011101100 */
2607 0x1c, 0x80, /* 0001110010 */
2608 0x00, 0x00, /* 0000000000 */
2609 0x00, 0x00, /* 0000000000 */
2610 0x00, 0x00, /* 0000000000 */
2611
2612 /* 130 0x82 '.' */
2613 0x00, 0x00, /* 0000000000 */
2614 0x01, 0x00, /* 0000000100 */
2615 0x02, 0x00, /* 0000001000 */
2616 0x04, 0x00, /* 0000010000 */
2617 0x00, 0x00, /* 0000000000 */
2618 0x0c, 0x00, /* 0000110000 */
2619 0x33, 0x00, /* 0011001100 */
2620 0x61, 0x80, /* 0110000110 */
2621 0x61, 0x80, /* 0110000110 */
2622 0x7f, 0x80, /* 0111111110 */
2623 0x60, 0x00, /* 0110000000 */
2624 0x60, 0x00, /* 0110000000 */
2625 0x30, 0x00, /* 0011000000 */
2626 0x19, 0x80, /* 0001100110 */
2627 0x0e, 0x00, /* 0000111000 */
2628 0x00, 0x00, /* 0000000000 */
2629 0x00, 0x00, /* 0000000000 */
2630 0x00, 0x00, /* 0000000000 */
2631
2632 /* 131 0x83 '.' */
2633 0x04, 0x00, /* 0000010000 */
2634 0x0e, 0x00, /* 0000111000 */
2635 0x1b, 0x00, /* 0001101100 */
2636 0x31, 0x80, /* 0011000110 */
2637 0x00, 0x00, /* 0000000000 */
2638 0x1f, 0x00, /* 0001111100 */
2639 0x31, 0x80, /* 0011000110 */
2640 0x21, 0x80, /* 0010000110 */
2641 0x07, 0x80, /* 0000011110 */
2642 0x39, 0x80, /* 0011100110 */
2643 0x61, 0x80, /* 0110000110 */
2644 0x61, 0x80, /* 0110000110 */
2645 0x61, 0x80, /* 0110000110 */
2646 0x73, 0x80, /* 0111001110 */
2647 0x3d, 0xc0, /* 0011110111 */
2648 0x00, 0x00, /* 0000000000 */
2649 0x00, 0x00, /* 0000000000 */
2650 0x00, 0x00, /* 0000000000 */
2651
2652 /* 132 0x84 '.' */
2653 0x00, 0x00, /* 0000000000 */
2654 0x1b, 0x00, /* 0001101100 */
2655 0x1b, 0x00, /* 0001101100 */
2656 0x00, 0x00, /* 0000000000 */
2657 0x00, 0x00, /* 0000000000 */
2658 0x1f, 0x00, /* 0001111100 */
2659 0x31, 0x80, /* 0011000110 */
2660 0x21, 0x80, /* 0010000110 */
2661 0x07, 0x80, /* 0000011110 */
2662 0x39, 0x80, /* 0011100110 */
2663 0x61, 0x80, /* 0110000110 */
2664 0x61, 0x80, /* 0110000110 */
2665 0x61, 0x80, /* 0110000110 */
2666 0x73, 0x80, /* 0111001110 */
2667 0x3d, 0xc0, /* 0011110111 */
2668 0x00, 0x00, /* 0000000000 */
2669 0x00, 0x00, /* 0000000000 */
2670 0x00, 0x00, /* 0000000000 */
2671
2672 /* 133 0x85 '.' */
2673 0x00, 0x00, /* 0000000000 */
2674 0x18, 0x00, /* 0001100000 */
2675 0x0c, 0x00, /* 0000110000 */
2676 0x06, 0x00, /* 0000011000 */
2677 0x00, 0x00, /* 0000000000 */
2678 0x1f, 0x00, /* 0001111100 */
2679 0x31, 0x80, /* 0011000110 */
2680 0x21, 0x80, /* 0010000110 */
2681 0x07, 0x80, /* 0000011110 */
2682 0x39, 0x80, /* 0011100110 */
2683 0x61, 0x80, /* 0110000110 */
2684 0x61, 0x80, /* 0110000110 */
2685 0x61, 0x80, /* 0110000110 */
2686 0x73, 0x80, /* 0111001110 */
2687 0x3d, 0xc0, /* 0011110111 */
2688 0x00, 0x00, /* 0000000000 */
2689 0x00, 0x00, /* 0000000000 */
2690 0x00, 0x00, /* 0000000000 */
2691
2692 /* 134 0x86 '.' */
2693 0x00, 0x00, /* 0000000000 */
2694 0x0e, 0x00, /* 0000111000 */
2695 0x1b, 0x00, /* 0001101100 */
2696 0x0e, 0x00, /* 0000111000 */
2697 0x00, 0x00, /* 0000000000 */
2698 0x1f, 0x00, /* 0001111100 */
2699 0x31, 0x80, /* 0011000110 */
2700 0x21, 0x80, /* 0010000110 */
2701 0x07, 0x80, /* 0000011110 */
2702 0x39, 0x80, /* 0011100110 */
2703 0x61, 0x80, /* 0110000110 */
2704 0x61, 0x80, /* 0110000110 */
2705 0x61, 0x80, /* 0110000110 */
2706 0x73, 0x80, /* 0111001110 */
2707 0x3d, 0xc0, /* 0011110111 */
2708 0x00, 0x00, /* 0000000000 */
2709 0x00, 0x00, /* 0000000000 */
2710 0x00, 0x00, /* 0000000000 */
2711
2712 /* 135 0x87 '.' */
2713 0x00, 0x00, /* 0000000000 */
2714 0x00, 0x00, /* 0000000000 */
2715 0x00, 0x00, /* 0000000000 */
2716 0x00, 0x00, /* 0000000000 */
2717 0x00, 0x00, /* 0000000000 */
2718 0x1f, 0x00, /* 0001111100 */
2719 0x31, 0x80, /* 0011000110 */
2720 0x20, 0x80, /* 0010000010 */
2721 0x60, 0x00, /* 0110000000 */
2722 0x60, 0x00, /* 0110000000 */
2723 0x60, 0x00, /* 0110000000 */
2724 0x70, 0x80, /* 0111000010 */
2725 0x30, 0x80, /* 0011000010 */
2726 0x1f, 0x00, /* 0001111100 */
2727 0x04, 0x00, /* 0000010000 */
2728 0x02, 0x00, /* 0000001000 */
2729 0x01, 0x00, /* 0000000100 */
2730 0x0e, 0x00, /* 0000111000 */
2731
2732 /* 136 0x88 '.' */
2733 0x04, 0x00, /* 0000010000 */
2734 0x0e, 0x00, /* 0000111000 */
2735 0x1b, 0x00, /* 0001101100 */
2736 0x31, 0x80, /* 0011000110 */
2737 0x00, 0x00, /* 0000000000 */
2738 0x0c, 0x00, /* 0000110000 */
2739 0x33, 0x00, /* 0011001100 */
2740 0x61, 0x80, /* 0110000110 */
2741 0x61, 0x80, /* 0110000110 */
2742 0x7f, 0x80, /* 0111111110 */
2743 0x60, 0x00, /* 0110000000 */
2744 0x60, 0x00, /* 0110000000 */
2745 0x30, 0x00, /* 0011000000 */
2746 0x19, 0x80, /* 0001100110 */
2747 0x0e, 0x00, /* 0000111000 */
2748 0x00, 0x00, /* 0000000000 */
2749 0x00, 0x00, /* 0000000000 */
2750 0x00, 0x00, /* 0000000000 */
2751
2752 /* 137 0x89 '.' */
2753 0x00, 0x00, /* 0000000000 */
2754 0x36, 0x00, /* 0011011000 */
2755 0x36, 0x00, /* 0011011000 */
2756 0x00, 0x00, /* 0000000000 */
2757 0x00, 0x00, /* 0000000000 */
2758 0x0c, 0x00, /* 0000110000 */
2759 0x33, 0x00, /* 0011001100 */
2760 0x61, 0x80, /* 0110000110 */
2761 0x61, 0x80, /* 0110000110 */
2762 0x7f, 0x80, /* 0111111110 */
2763 0x60, 0x00, /* 0110000000 */
2764 0x60, 0x00, /* 0110000000 */
2765 0x30, 0x00, /* 0011000000 */
2766 0x19, 0x80, /* 0001100110 */
2767 0x0e, 0x00, /* 0000111000 */
2768 0x00, 0x00, /* 0000000000 */
2769 0x00, 0x00, /* 0000000000 */
2770 0x00, 0x00, /* 0000000000 */
2771
2772 /* 138 0x8a '.' */
2773 0x00, 0x00, /* 0000000000 */
2774 0x30, 0x00, /* 0011000000 */
2775 0x18, 0x00, /* 0001100000 */
2776 0x0c, 0x00, /* 0000110000 */
2777 0x00, 0x00, /* 0000000000 */
2778 0x0c, 0x00, /* 0000110000 */
2779 0x33, 0x00, /* 0011001100 */
2780 0x61, 0x80, /* 0110000110 */
2781 0x61, 0x80, /* 0110000110 */
2782 0x7f, 0x80, /* 0111111110 */
2783 0x60, 0x00, /* 0110000000 */
2784 0x60, 0x00, /* 0110000000 */
2785 0x30, 0x00, /* 0011000000 */
2786 0x19, 0x80, /* 0001100110 */
2787 0x0e, 0x00, /* 0000111000 */
2788 0x00, 0x00, /* 0000000000 */
2789 0x00, 0x00, /* 0000000000 */
2790 0x00, 0x00, /* 0000000000 */
2791
2792 /* 139 0x8b '.' */
2793 0x00, 0x00, /* 0000000000 */
2794 0x36, 0x00, /* 0011011000 */
2795 0x36, 0x00, /* 0011011000 */
2796 0x00, 0x00, /* 0000000000 */
2797 0x00, 0x00, /* 0000000000 */
2798 0x3c, 0x00, /* 0011110000 */
2799 0x0c, 0x00, /* 0000110000 */
2800 0x0c, 0x00, /* 0000110000 */
2801 0x0c, 0x00, /* 0000110000 */
2802 0x0c, 0x00, /* 0000110000 */
2803 0x0c, 0x00, /* 0000110000 */
2804 0x0c, 0x00, /* 0000110000 */
2805 0x0c, 0x00, /* 0000110000 */
2806 0x0c, 0x00, /* 0000110000 */
2807 0x3f, 0x00, /* 0011111100 */
2808 0x00, 0x00, /* 0000000000 */
2809 0x00, 0x00, /* 0000000000 */
2810 0x00, 0x00, /* 0000000000 */
2811
2812 /* 140 0x8c '.' */
2813 0x08, 0x00, /* 0000100000 */
2814 0x1c, 0x00, /* 0001110000 */
2815 0x36, 0x00, /* 0011011000 */
2816 0x63, 0x00, /* 0110001100 */
2817 0x00, 0x00, /* 0000000000 */
2818 0x3c, 0x00, /* 0011110000 */
2819 0x0c, 0x00, /* 0000110000 */
2820 0x0c, 0x00, /* 0000110000 */
2821 0x0c, 0x00, /* 0000110000 */
2822 0x0c, 0x00, /* 0000110000 */
2823 0x0c, 0x00, /* 0000110000 */
2824 0x0c, 0x00, /* 0000110000 */
2825 0x0c, 0x00, /* 0000110000 */
2826 0x0c, 0x00, /* 0000110000 */
2827 0x3f, 0x00, /* 0011111100 */
2828 0x00, 0x00, /* 0000000000 */
2829 0x00, 0x00, /* 0000000000 */
2830 0x00, 0x00, /* 0000000000 */
2831
2832 /* 141 0x8d '.' */
2833 0x00, 0x00, /* 0000000000 */
2834 0x30, 0x00, /* 0011000000 */
2835 0x18, 0x00, /* 0001100000 */
2836 0x0c, 0x00, /* 0000110000 */
2837 0x00, 0x00, /* 0000000000 */
2838 0x3c, 0x00, /* 0011110000 */
2839 0x0c, 0x00, /* 0000110000 */
2840 0x0c, 0x00, /* 0000110000 */
2841 0x0c, 0x00, /* 0000110000 */
2842 0x0c, 0x00, /* 0000110000 */
2843 0x0c, 0x00, /* 0000110000 */
2844 0x0c, 0x00, /* 0000110000 */
2845 0x0c, 0x00, /* 0000110000 */
2846 0x0c, 0x00, /* 0000110000 */
2847 0x3f, 0x00, /* 0011111100 */
2848 0x00, 0x00, /* 0000000000 */
2849 0x00, 0x00, /* 0000000000 */
2850 0x00, 0x00, /* 0000000000 */
2851
2852 /* 142 0x8e '.' */
2853 0x31, 0x80, /* 0011000110 */
2854 0x31, 0x80, /* 0011000110 */
2855 0x04, 0x00, /* 0000010000 */
2856 0x04, 0x00, /* 0000010000 */
2857 0x0e, 0x00, /* 0000111000 */
2858 0x0e, 0x00, /* 0000111000 */
2859 0x0e, 0x00, /* 0000111000 */
2860 0x19, 0x00, /* 0001100100 */
2861 0x19, 0x00, /* 0001100100 */
2862 0x3f, 0x00, /* 0011111100 */
2863 0x31, 0x00, /* 0011000100 */
2864 0x31, 0x00, /* 0011000100 */
2865 0x60, 0x80, /* 0110000010 */
2866 0x60, 0x80, /* 0110000010 */
2867 0xf3, 0xc0, /* 1111001111 */
2868 0x00, 0x00, /* 0000000000 */
2869 0x00, 0x00, /* 0000000000 */
2870 0x00, 0x00, /* 0000000000 */
2871
2872 /* 143 0x8f '.' */
2873 0x04, 0x00, /* 0000010000 */
2874 0x0a, 0x00, /* 0000101000 */
2875 0x0a, 0x00, /* 0000101000 */
2876 0x04, 0x00, /* 0000010000 */
2877 0x0e, 0x00, /* 0000111000 */
2878 0x0e, 0x00, /* 0000111000 */
2879 0x0e, 0x00, /* 0000111000 */
2880 0x19, 0x00, /* 0001100100 */
2881 0x19, 0x00, /* 0001100100 */
2882 0x3f, 0x00, /* 0011111100 */
2883 0x31, 0x00, /* 0011000100 */
2884 0x31, 0x00, /* 0011000100 */
2885 0x60, 0x80, /* 0110000010 */
2886 0x60, 0x80, /* 0110000010 */
2887 0xf3, 0xc0, /* 1111001111 */
2888 0x00, 0x00, /* 0000000000 */
2889 0x00, 0x00, /* 0000000000 */
2890 0x00, 0x00, /* 0000000000 */
2891
2892 /* 144 0x90 '.' */
2893 0x03, 0x00, /* 0000001100 */
2894 0x06, 0x00, /* 0000011000 */
2895 0x0c, 0x00, /* 0000110000 */
2896 0x7f, 0x80, /* 0111111110 */
2897 0x30, 0x80, /* 0011000010 */
2898 0x30, 0x80, /* 0011000010 */
2899 0x30, 0x00, /* 0011000000 */
2900 0x31, 0x00, /* 0011000100 */
2901 0x3f, 0x00, /* 0011111100 */
2902 0x31, 0x00, /* 0011000100 */
2903 0x30, 0x00, /* 0011000000 */
2904 0x30, 0x00, /* 0011000000 */
2905 0x30, 0x80, /* 0011000010 */
2906 0x30, 0x80, /* 0011000010 */
2907 0x7f, 0x80, /* 0111111110 */
2908 0x00, 0x00, /* 0000000000 */
2909 0x00, 0x00, /* 0000000000 */
2910 0x00, 0x00, /* 0000000000 */
2911
2912 /* 145 0x91 '.' */
2913 0x00, 0x00, /* 0000000000 */
2914 0x00, 0x00, /* 0000000000 */
2915 0x00, 0x00, /* 0000000000 */
2916 0x00, 0x00, /* 0000000000 */
2917 0x00, 0x00, /* 0000000000 */
2918 0x3b, 0x80, /* 0011101110 */
2919 0x6c, 0xc0, /* 0110110011 */
2920 0x4c, 0xc0, /* 0100110011 */
2921 0x0c, 0xc0, /* 0000110011 */
2922 0x3f, 0xc0, /* 0011111111 */
2923 0x6c, 0x00, /* 0110110000 */
2924 0xcc, 0x00, /* 1100110000 */
2925 0xcc, 0x00, /* 1100110000 */
2926 0xee, 0xc0, /* 1110111011 */
2927 0x7b, 0x80, /* 0111101110 */
2928 0x00, 0x00, /* 0000000000 */
2929 0x00, 0x00, /* 0000000000 */
2930 0x00, 0x00, /* 0000000000 */
2931
2932 /* 146 0x92 '.' */
2933 0x00, 0x00, /* 0000000000 */
2934 0x07, 0xc0, /* 0000011111 */
2935 0x0e, 0x40, /* 0000111001 */
2936 0x0e, 0x40, /* 0000111001 */
2937 0x0e, 0x00, /* 0000111000 */
2938 0x16, 0x00, /* 0001011000 */
2939 0x16, 0x80, /* 0001011010 */
2940 0x17, 0x80, /* 0001011110 */
2941 0x16, 0x80, /* 0001011010 */
2942 0x3e, 0x00, /* 0011111000 */
2943 0x26, 0x00, /* 0010011000 */
2944 0x26, 0x00, /* 0010011000 */
2945 0x46, 0x40, /* 0100011001 */
2946 0x46, 0x40, /* 0100011001 */
2947 0xef, 0xc0, /* 1110111111 */
2948 0x00, 0x00, /* 0000000000 */
2949 0x00, 0x00, /* 0000000000 */
2950 0x00, 0x00, /* 0000000000 */
2951
2952 /* 147 0x93 '.' */
2953 0x00, 0x00, /* 0000000000 */
2954 0x08, 0x00, /* 0000100000 */
2955 0x1c, 0x00, /* 0001110000 */
2956 0x36, 0x00, /* 0011011000 */
2957 0x00, 0x00, /* 0000000000 */
2958 0x3c, 0x00, /* 0011110000 */
2959 0x66, 0x00, /* 0110011000 */
2960 0xc3, 0x00, /* 1100001100 */
2961 0xc1, 0x80, /* 1100000110 */
2962 0xc1, 0x80, /* 1100000110 */
2963 0xc1, 0x80, /* 1100000110 */
2964 0xc1, 0x80, /* 1100000110 */
2965 0xe1, 0x80, /* 1110000110 */
2966 0x73, 0x00, /* 0111001100 */
2967 0x3c, 0x00, /* 0011110000 */
2968 0x00, 0x00, /* 0000000000 */
2969 0x00, 0x00, /* 0000000000 */
2970 0x00, 0x00, /* 0000000000 */
2971
2972 /* 148 0x94 '.' */
2973 0x00, 0x00, /* 0000000000 */
2974 0x00, 0x00, /* 0000000000 */
2975 0x33, 0x00, /* 0011001100 */
2976 0x33, 0x00, /* 0011001100 */
2977 0x00, 0x00, /* 0000000000 */
2978 0x3c, 0x00, /* 0011110000 */
2979 0x66, 0x00, /* 0110011000 */
2980 0xc3, 0x00, /* 1100001100 */
2981 0xc1, 0x80, /* 1100000110 */
2982 0xc1, 0x80, /* 1100000110 */
2983 0xc1, 0x80, /* 1100000110 */
2984 0xc1, 0x80, /* 1100000110 */
2985 0xe1, 0x80, /* 1110000110 */
2986 0x73, 0x00, /* 0111001100 */
2987 0x3c, 0x00, /* 0011110000 */
2988 0x00, 0x00, /* 0000000000 */
2989 0x00, 0x00, /* 0000000000 */
2990 0x00, 0x00, /* 0000000000 */
2991
2992 /* 149 0x95 '.' */
2993 0x00, 0x00, /* 0000000000 */
2994 0x18, 0x00, /* 0001100000 */
2995 0x0c, 0x00, /* 0000110000 */
2996 0x06, 0x00, /* 0000011000 */
2997 0x00, 0x00, /* 0000000000 */
2998 0x3c, 0x00, /* 0011110000 */
2999 0x66, 0x00, /* 0110011000 */
3000 0xc3, 0x00, /* 1100001100 */
3001 0xc1, 0x80, /* 1100000110 */
3002 0xc1, 0x80, /* 1100000110 */
3003 0xc1, 0x80, /* 1100000110 */
3004 0xc1, 0x80, /* 1100000110 */
3005 0xe1, 0x80, /* 1110000110 */
3006 0x73, 0x00, /* 0111001100 */
3007 0x3c, 0x00, /* 0011110000 */
3008 0x00, 0x00, /* 0000000000 */
3009 0x00, 0x00, /* 0000000000 */
3010 0x00, 0x00, /* 0000000000 */
3011
3012 /* 150 0x96 '.' */
3013 0x08, 0x00, /* 0000100000 */
3014 0x1c, 0x00, /* 0001110000 */
3015 0x36, 0x00, /* 0011011000 */
3016 0x63, 0x00, /* 0110001100 */
3017 0x00, 0x00, /* 0000000000 */
3018 0xf7, 0x80, /* 1111011110 */
3019 0x63, 0x00, /* 0110001100 */
3020 0x63, 0x00, /* 0110001100 */
3021 0x63, 0x00, /* 0110001100 */
3022 0x63, 0x00, /* 0110001100 */
3023 0x63, 0x00, /* 0110001100 */
3024 0x63, 0x00, /* 0110001100 */
3025 0x63, 0x00, /* 0110001100 */
3026 0x77, 0x00, /* 0111011100 */
3027 0x3d, 0x80, /* 0011110110 */
3028 0x00, 0x00, /* 0000000000 */
3029 0x00, 0x00, /* 0000000000 */
3030 0x00, 0x00, /* 0000000000 */
3031
3032 /* 151 0x97 '.' */
3033 0x00, 0x00, /* 0000000000 */
3034 0x60, 0x00, /* 0110000000 */
3035 0x30, 0x00, /* 0011000000 */
3036 0x18, 0x00, /* 0001100000 */
3037 0x00, 0x00, /* 0000000000 */
3038 0xf7, 0x80, /* 1111011110 */
3039 0x63, 0x00, /* 0110001100 */
3040 0x63, 0x00, /* 0110001100 */
3041 0x63, 0x00, /* 0110001100 */
3042 0x63, 0x00, /* 0110001100 */
3043 0x63, 0x00, /* 0110001100 */
3044 0x63, 0x00, /* 0110001100 */
3045 0x63, 0x00, /* 0110001100 */
3046 0x77, 0x00, /* 0111011100 */
3047 0x3d, 0x80, /* 0011110110 */
3048 0x00, 0x00, /* 0000000000 */
3049 0x00, 0x00, /* 0000000000 */
3050 0x00, 0x00, /* 0000000000 */
3051
3052 /* 152 0x98 '.' */
3053 0x00, 0x00, /* 0000000000 */
3054 0x33, 0x00, /* 0011001100 */
3055 0x33, 0x00, /* 0011001100 */
3056 0x00, 0x00, /* 0000000000 */
3057 0x00, 0x00, /* 0000000000 */
3058 0xf3, 0xc0, /* 1111001111 */
3059 0x61, 0x80, /* 0110000110 */
3060 0x33, 0x00, /* 0011001100 */
3061 0x1b, 0x00, /* 0001101100 */
3062 0x1e, 0x00, /* 0001111000 */
3063 0x0e, 0x00, /* 0000111000 */
3064 0x0c, 0x00, /* 0000110000 */
3065 0x0c, 0x00, /* 0000110000 */
3066 0x0c, 0x00, /* 0000110000 */
3067 0x0c, 0x00, /* 0000110000 */
3068 0x18, 0x00, /* 0001100000 */
3069 0x78, 0x00, /* 0111100000 */
3070 0x70, 0x00, /* 0111000000 */
3071
3072 /* 153 0x99 '.' */
3073 0x61, 0x80, /* 0110000110 */
3074 0x61, 0x80, /* 0110000110 */
3075 0x0c, 0x00, /* 0000110000 */
3076 0x17, 0x00, /* 0001011100 */
3077 0x23, 0x00, /* 0010001100 */
3078 0x21, 0x80, /* 0010000110 */
3079 0x61, 0x80, /* 0110000110 */
3080 0x61, 0x80, /* 0110000110 */
3081 0x61, 0x80, /* 0110000110 */
3082 0x61, 0x80, /* 0110000110 */
3083 0x61, 0x80, /* 0110000110 */
3084 0x21, 0x00, /* 0010000100 */
3085 0x31, 0x00, /* 0011000100 */
3086 0x1a, 0x00, /* 0001101000 */
3087 0x0c, 0x00, /* 0000110000 */
3088 0x00, 0x00, /* 0000000000 */
3089 0x00, 0x00, /* 0000000000 */
3090 0x00, 0x00, /* 0000000000 */
3091
3092 /* 154 0x9a '.' */
3093 0x33, 0x00, /* 0011001100 */
3094 0x33, 0x00, /* 0011001100 */
3095 0x00, 0x00, /* 0000000000 */
3096 0xf1, 0xc0, /* 1111000111 */
3097 0x60, 0x80, /* 0110000010 */
3098 0x60, 0x80, /* 0110000010 */
3099 0x60, 0x80, /* 0110000010 */
3100 0x60, 0x80, /* 0110000010 */
3101 0x60, 0x80, /* 0110000010 */
3102 0x60, 0x80, /* 0110000010 */
3103 0x60, 0x80, /* 0110000010 */
3104 0x60, 0x80, /* 0110000010 */
3105 0x71, 0x00, /* 0111000100 */
3106 0x3f, 0x00, /* 0011111100 */
3107 0x1e, 0x00, /* 0001111000 */
3108 0x00, 0x00, /* 0000000000 */
3109 0x00, 0x00, /* 0000000000 */
3110 0x00, 0x00, /* 0000000000 */
3111
3112 /* 155 0x9b '.' */
3113 0x00, 0x00, /* 0000000000 */
3114 0x00, 0x00, /* 0000000000 */
3115 0x00, 0x00, /* 0000000000 */
3116 0x06, 0x00, /* 0000011000 */
3117 0x06, 0x00, /* 0000011000 */
3118 0x1f, 0x80, /* 0001111110 */
3119 0x36, 0x80, /* 0011011010 */
3120 0x26, 0x00, /* 0010011000 */
3121 0x66, 0x00, /* 0110011000 */
3122 0x66, 0x00, /* 0110011000 */
3123 0x66, 0x00, /* 0110011000 */
3124 0x66, 0x00, /* 0110011000 */
3125 0x76, 0x00, /* 0111011000 */
3126 0x36, 0x80, /* 0011011010 */
3127 0x1f, 0x80, /* 0001111110 */
3128 0x06, 0x00, /* 0000011000 */
3129 0x06, 0x00, /* 0000011000 */
3130 0x00, 0x00, /* 0000000000 */
3131
3132 /* 156 0x9c '.' */
3133 0x00, 0x00, /* 0000000000 */
3134 0x1e, 0x00, /* 0001111000 */
3135 0x3b, 0x00, /* 0011101100 */
3136 0x33, 0x00, /* 0011001100 */
3137 0x30, 0x00, /* 0011000000 */
3138 0x30, 0x00, /* 0011000000 */
3139 0x30, 0x00, /* 0011000000 */
3140 0x7e, 0x00, /* 0111111000 */
3141 0x7e, 0x00, /* 0111111000 */
3142 0x30, 0x00, /* 0011000000 */
3143 0x30, 0x00, /* 0011000000 */
3144 0x30, 0x00, /* 0011000000 */
3145 0x30, 0x00, /* 0011000000 */
3146 0x7c, 0x80, /* 0111110010 */
3147 0x7f, 0x80, /* 0111111110 */
3148 0x43, 0x00, /* 0100001100 */
3149 0x00, 0x00, /* 0000000000 */
3150 0x00, 0x00, /* 0000000000 */
3151
3152 /* 157 0x9d '.' */
3153 0x00, 0x00, /* 0000000000 */
3154 0x40, 0x80, /* 0100000010 */
3155 0x40, 0x80, /* 0100000010 */
3156 0x21, 0x00, /* 0010000100 */
3157 0x33, 0x00, /* 0011001100 */
3158 0x33, 0x00, /* 0011001100 */
3159 0x1e, 0x00, /* 0001111000 */
3160 0x0c, 0x00, /* 0000110000 */
3161 0x3f, 0x00, /* 0011111100 */
3162 0x0c, 0x00, /* 0000110000 */
3163 0x3f, 0x00, /* 0011111100 */
3164 0x0c, 0x00, /* 0000110000 */
3165 0x0c, 0x00, /* 0000110000 */
3166 0x0c, 0x00, /* 0000110000 */
3167 0x0c, 0x00, /* 0000110000 */
3168 0x00, 0x00, /* 0000000000 */
3169 0x00, 0x00, /* 0000000000 */
3170 0x00, 0x00, /* 0000000000 */
3171
3172 /* 158 0x9e '.' */
3173 0x00, 0x00, /* 0000000000 */
3174 0xbf, 0x00, /* 1011111100 */
3175 0x40, 0x80, /* 0100000010 */
3176 0x40, 0x80, /* 0100000010 */
3177 0x7f, 0x00, /* 0111111100 */
3178 0x40, 0x00, /* 0100000000 */
3179 0x48, 0x00, /* 0100100000 */
3180 0x48, 0x00, /* 0100100000 */
3181 0x5e, 0x00, /* 0101111000 */
3182 0x48, 0x00, /* 0100100000 */
3183 0x48, 0x00, /* 0100100000 */
3184 0x48, 0x00, /* 0100100000 */
3185 0x48, 0x80, /* 0100100010 */
3186 0x47, 0x00, /* 0100011100 */
3187 0xe0, 0x00, /* 1110000000 */
3188 0x00, 0x00, /* 0000000000 */
3189 0x00, 0x00, /* 0000000000 */
3190 0x00, 0x00, /* 0000000000 */
3191
3192 /* 159 0x9f '.' */
3193 0x00, 0x00, /* 0000000000 */
3194 0x03, 0x00, /* 0000001100 */
3195 0x04, 0x80, /* 0000010010 */
3196 0x08, 0x00, /* 0000100000 */
3197 0x08, 0x00, /* 0000100000 */
3198 0x08, 0x00, /* 0000100000 */
3199 0x08, 0x00, /* 0000100000 */
3200 0x09, 0x00, /* 0000100100 */
3201 0x3e, 0x00, /* 0011111000 */
3202 0x48, 0x00, /* 0100100000 */
3203 0x08, 0x00, /* 0000100000 */
3204 0x08, 0x00, /* 0000100000 */
3205 0x08, 0x00, /* 0000100000 */
3206 0x08, 0x00, /* 0000100000 */
3207 0x08, 0x00, /* 0000100000 */
3208 0x90, 0x00, /* 1001000000 */
3209 0x60, 0x00, /* 0110000000 */
3210 0x00, 0x00, /* 0000000000 */
3211
3212 /* 160 0xa0 '.' */
3213 0x00, 0x00, /* 0000000000 */
3214 0x03, 0x00, /* 0000001100 */
3215 0x06, 0x00, /* 0000011000 */
3216 0x0c, 0x00, /* 0000110000 */
3217 0x00, 0x00, /* 0000000000 */
3218 0x1f, 0x00, /* 0001111100 */
3219 0x31, 0x80, /* 0011000110 */
3220 0x21, 0x80, /* 0010000110 */
3221 0x07, 0x80, /* 0000011110 */
3222 0x39, 0x80, /* 0011100110 */
3223 0x61, 0x80, /* 0110000110 */
3224 0x61, 0x80, /* 0110000110 */
3225 0x61, 0x80, /* 0110000110 */
3226 0x73, 0x80, /* 0111001110 */
3227 0x3d, 0xc0, /* 0011110111 */
3228 0x00, 0x00, /* 0000000000 */
3229 0x00, 0x00, /* 0000000000 */
3230 0x00, 0x00, /* 0000000000 */
3231
3232 /* 161 0xa1 '.' */
3233 0x00, 0x00, /* 0000000000 */
3234 0x03, 0x00, /* 0000001100 */
3235 0x06, 0x00, /* 0000011000 */
3236 0x0c, 0x00, /* 0000110000 */
3237 0x00, 0x00, /* 0000000000 */
3238 0x3c, 0x00, /* 0011110000 */
3239 0x0c, 0x00, /* 0000110000 */
3240 0x0c, 0x00, /* 0000110000 */
3241 0x0c, 0x00, /* 0000110000 */
3242 0x0c, 0x00, /* 0000110000 */
3243 0x0c, 0x00, /* 0000110000 */
3244 0x0c, 0x00, /* 0000110000 */
3245 0x0c, 0x00, /* 0000110000 */
3246 0x0c, 0x00, /* 0000110000 */
3247 0x3f, 0x00, /* 0011111100 */
3248 0x00, 0x00, /* 0000000000 */
3249 0x00, 0x00, /* 0000000000 */
3250 0x00, 0x00, /* 0000000000 */
3251
3252 /* 162 0xa2 '.' */
3253 0x00, 0x00, /* 0000000000 */
3254 0x06, 0x00, /* 0000011000 */
3255 0x0c, 0x00, /* 0000110000 */
3256 0x18, 0x00, /* 0001100000 */
3257 0x00, 0x00, /* 0000000000 */
3258 0x3c, 0x00, /* 0011110000 */
3259 0x66, 0x00, /* 0110011000 */
3260 0xc3, 0x00, /* 1100001100 */
3261 0xc1, 0x80, /* 1100000110 */
3262 0xc1, 0x80, /* 1100000110 */
3263 0xc1, 0x80, /* 1100000110 */
3264 0xc1, 0x80, /* 1100000110 */
3265 0xe1, 0x80, /* 1110000110 */
3266 0x73, 0x00, /* 0111001100 */
3267 0x3c, 0x00, /* 0011110000 */
3268 0x00, 0x00, /* 0000000000 */
3269 0x00, 0x00, /* 0000000000 */
3270 0x00, 0x00, /* 0000000000 */
3271
3272 /* 163 0xa3 '.' */
3273 0x00, 0x00, /* 0000000000 */
3274 0x06, 0x00, /* 0000011000 */
3275 0x0c, 0x00, /* 0000110000 */
3276 0x18, 0x00, /* 0001100000 */
3277 0x00, 0x00, /* 0000000000 */
3278 0xf7, 0x80, /* 1111011110 */
3279 0x63, 0x00, /* 0110001100 */
3280 0x63, 0x00, /* 0110001100 */
3281 0x63, 0x00, /* 0110001100 */
3282 0x63, 0x00, /* 0110001100 */
3283 0x63, 0x00, /* 0110001100 */
3284 0x63, 0x00, /* 0110001100 */
3285 0x63, 0x00, /* 0110001100 */
3286 0x77, 0x00, /* 0111011100 */
3287 0x3d, 0x80, /* 0011110110 */
3288 0x00, 0x00, /* 0000000000 */
3289 0x00, 0x00, /* 0000000000 */
3290 0x00, 0x00, /* 0000000000 */
3291
3292 /* 164 0xa4 '.' */
3293 0x00, 0x00, /* 0000000000 */
3294 0x38, 0x80, /* 0011100010 */
3295 0x7f, 0x80, /* 0111111110 */
3296 0x47, 0x00, /* 0100011100 */
3297 0x00, 0x00, /* 0000000000 */
3298 0x6f, 0x00, /* 0110111100 */
3299 0x7b, 0x80, /* 0111101110 */
3300 0x31, 0x80, /* 0011000110 */
3301 0x31, 0x80, /* 0011000110 */
3302 0x31, 0x80, /* 0011000110 */
3303 0x31, 0x80, /* 0011000110 */
3304 0x31, 0x80, /* 0011000110 */
3305 0x31, 0x80, /* 0011000110 */
3306 0x31, 0x80, /* 0011000110 */
3307 0x7b, 0xc0, /* 0111101111 */
3308 0x00, 0x00, /* 0000000000 */
3309 0x00, 0x00, /* 0000000000 */
3310 0x00, 0x00, /* 0000000000 */
3311
3312 /* 165 0xa5 '.' */
3313 0x00, 0x00, /* 0000000000 */
3314 0x38, 0x80, /* 0011100010 */
3315 0x7f, 0x80, /* 0111111110 */
3316 0x47, 0x00, /* 0100011100 */
3317 0x00, 0x00, /* 0000000000 */
3318 0xe3, 0xc0, /* 1110001111 */
3319 0x71, 0x80, /* 0111000110 */
3320 0x79, 0x80, /* 0111100110 */
3321 0x79, 0x80, /* 0111100110 */
3322 0x6d, 0x80, /* 0110110110 */
3323 0x6d, 0x80, /* 0110110110 */
3324 0x67, 0x80, /* 0110011110 */
3325 0x63, 0x80, /* 0110001110 */
3326 0x61, 0x80, /* 0110000110 */
3327 0xf0, 0xc0, /* 1111000011 */
3328 0x00, 0x00, /* 0000000000 */
3329 0x00, 0x00, /* 0000000000 */
3330 0x00, 0x00, /* 0000000000 */
3331
3332 /* 166 0xa6 '.' */
3333 0x00, 0x00, /* 0000000000 */
3334 0x3e, 0x00, /* 0011111000 */
3335 0x63, 0x00, /* 0110001100 */
3336 0x03, 0x00, /* 0000001100 */
3337 0x0f, 0x00, /* 0000111100 */
3338 0x33, 0x00, /* 0011001100 */
3339 0x63, 0x00, /* 0110001100 */
3340 0x63, 0x00, /* 0110001100 */
3341 0x67, 0x00, /* 0110011100 */
3342 0x3b, 0x80, /* 0011101110 */
3343 0x00, 0x00, /* 0000000000 */
3344 0x7f, 0x80, /* 0111111110 */
3345 0x00, 0x00, /* 0000000000 */
3346 0x00, 0x00, /* 0000000000 */
3347 0x00, 0x00, /* 0000000000 */
3348 0x00, 0x00, /* 0000000000 */
3349 0x00, 0x00, /* 0000000000 */
3350 0x00, 0x00, /* 0000000000 */
3351
3352 /* 167 0xa7 '.' */
3353 0x00, 0x00, /* 0000000000 */
3354 0x0e, 0x00, /* 0000111000 */
3355 0x33, 0x00, /* 0011001100 */
3356 0x21, 0x80, /* 0010000110 */
3357 0x61, 0x80, /* 0110000110 */
3358 0x61, 0x80, /* 0110000110 */
3359 0x61, 0x80, /* 0110000110 */
3360 0x61, 0x00, /* 0110000100 */
3361 0x33, 0x00, /* 0011001100 */
3362 0x1c, 0x00, /* 0001110000 */
3363 0x00, 0x00, /* 0000000000 */
3364 0x7f, 0x80, /* 0111111110 */
3365 0x00, 0x00, /* 0000000000 */
3366 0x00, 0x00, /* 0000000000 */
3367 0x00, 0x00, /* 0000000000 */
3368 0x00, 0x00, /* 0000000000 */
3369 0x00, 0x00, /* 0000000000 */
3370 0x00, 0x00, /* 0000000000 */
3371
3372 /* 168 0xa8 '.' */
3373 0x00, 0x00, /* 0000000000 */
3374 0x06, 0x00, /* 0000011000 */
3375 0x06, 0x00, /* 0000011000 */
3376 0x00, 0x00, /* 0000000000 */
3377 0x06, 0x00, /* 0000011000 */
3378 0x06, 0x00, /* 0000011000 */
3379 0x0c, 0x00, /* 0000110000 */
3380 0x18, 0x00, /* 0001100000 */
3381 0x30, 0x00, /* 0011000000 */
3382 0x60, 0x00, /* 0110000000 */
3383 0x60, 0x00, /* 0110000000 */
3384 0x60, 0x80, /* 0110000010 */
3385 0x73, 0x80, /* 0111001110 */
3386 0x3f, 0x00, /* 0011111100 */
3387 0x1e, 0x00, /* 0001111000 */
3388 0x00, 0x00, /* 0000000000 */
3389 0x00, 0x00, /* 0000000000 */
3390 0x00, 0x00, /* 0000000000 */
3391
3392 /* 169 0xa9 '.' */
3393 0x00, 0x00, /* 0000000000 */
3394 0x00, 0x00, /* 0000000000 */
3395 0x00, 0x00, /* 0000000000 */
3396 0x00, 0x00, /* 0000000000 */
3397 0x00, 0x00, /* 0000000000 */
3398 0x00, 0x00, /* 0000000000 */
3399 0x00, 0x00, /* 0000000000 */
3400 0x00, 0x00, /* 0000000000 */
3401 0x7f, 0x80, /* 0111111110 */
3402 0x7f, 0x80, /* 0111111110 */
3403 0x60, 0x00, /* 0110000000 */
3404 0x60, 0x00, /* 0110000000 */
3405 0x60, 0x00, /* 0110000000 */
3406 0x00, 0x00, /* 0000000000 */
3407 0x00, 0x00, /* 0000000000 */
3408 0x00, 0x00, /* 0000000000 */
3409 0x00, 0x00, /* 0000000000 */
3410 0x00, 0x00, /* 0000000000 */
3411
3412 /* 170 0xaa '.' */
3413 0x00, 0x00, /* 0000000000 */
3414 0x00, 0x00, /* 0000000000 */
3415 0x00, 0x00, /* 0000000000 */
3416 0x00, 0x00, /* 0000000000 */
3417 0x00, 0x00, /* 0000000000 */
3418 0x00, 0x00, /* 0000000000 */
3419 0x00, 0x00, /* 0000000000 */
3420 0x00, 0x00, /* 0000000000 */
3421 0x7f, 0x80, /* 0111111110 */
3422 0x7f, 0x80, /* 0111111110 */
3423 0x01, 0x80, /* 0000000110 */
3424 0x01, 0x80, /* 0000000110 */
3425 0x01, 0x80, /* 0000000110 */
3426 0x00, 0x00, /* 0000000000 */
3427 0x00, 0x00, /* 0000000000 */
3428 0x00, 0x00, /* 0000000000 */
3429 0x00, 0x00, /* 0000000000 */
3430 0x00, 0x00, /* 0000000000 */
3431
3432 /* 171 0xab '.' */
3433 0x00, 0x00, /* 0000000000 */
3434 0x20, 0x00, /* 0010000000 */
3435 0x60, 0x00, /* 0110000000 */
3436 0x20, 0x00, /* 0010000000 */
3437 0x20, 0x80, /* 0010000010 */
3438 0x21, 0x00, /* 0010000100 */
3439 0x22, 0x00, /* 0010001000 */
3440 0x74, 0x00, /* 0111010000 */
3441 0x08, 0x00, /* 0000100000 */
3442 0x17, 0x00, /* 0001011100 */
3443 0x28, 0x80, /* 0010100010 */
3444 0x43, 0x00, /* 0100001100 */
3445 0x04, 0x00, /* 0000010000 */
3446 0x08, 0x00, /* 0000100000 */
3447 0x0f, 0x80, /* 0000111110 */
3448 0x00, 0x00, /* 0000000000 */
3449 0x00, 0x00, /* 0000000000 */
3450 0x00, 0x00, /* 0000000000 */
3451
3452 /* 172 0xac '.' */
3453 0x00, 0x00, /* 0000000000 */
3454 0x20, 0x00, /* 0010000000 */
3455 0x60, 0x00, /* 0110000000 */
3456 0x20, 0x00, /* 0010000000 */
3457 0x20, 0x80, /* 0010000010 */
3458 0x21, 0x00, /* 0010000100 */
3459 0x22, 0x00, /* 0010001000 */
3460 0x74, 0x00, /* 0111010000 */
3461 0x09, 0x00, /* 0000100100 */
3462 0x13, 0x00, /* 0001001100 */
3463 0x25, 0x00, /* 0010010100 */
3464 0x49, 0x00, /* 0100100100 */
3465 0x1f, 0x80, /* 0001111110 */
3466 0x01, 0x00, /* 0000000100 */
3467 0x01, 0x00, /* 0000000100 */
3468 0x00, 0x00, /* 0000000000 */
3469 0x00, 0x00, /* 0000000000 */
3470 0x00, 0x00, /* 0000000000 */
3471
3472 /* 173 0xad '.' */
3473 0x00, 0x00, /* 0000000000 */
3474 0x0c, 0x00, /* 0000110000 */
3475 0x0c, 0x00, /* 0000110000 */
3476 0x00, 0x00, /* 0000000000 */
3477 0x0c, 0x00, /* 0000110000 */
3478 0x0c, 0x00, /* 0000110000 */
3479 0x0c, 0x00, /* 0000110000 */
3480 0x0c, 0x00, /* 0000110000 */
3481 0x0c, 0x00, /* 0000110000 */
3482 0x0c, 0x00, /* 0000110000 */
3483 0x0c, 0x00, /* 0000110000 */
3484 0x0c, 0x00, /* 0000110000 */
3485 0x0c, 0x00, /* 0000110000 */
3486 0x0c, 0x00, /* 0000110000 */
3487 0x0c, 0x00, /* 0000110000 */
3488 0x00, 0x00, /* 0000000000 */
3489 0x00, 0x00, /* 0000000000 */
3490 0x00, 0x00, /* 0000000000 */
3491
3492 /* 174 0xae '.' */
3493 0x00, 0x00, /* 0000000000 */
3494 0x00, 0x00, /* 0000000000 */
3495 0x00, 0x00, /* 0000000000 */
3496 0x00, 0x00, /* 0000000000 */
3497 0x00, 0x00, /* 0000000000 */
3498 0x0d, 0x80, /* 0000110110 */
3499 0x1b, 0x00, /* 0001101100 */
3500 0x36, 0x00, /* 0011011000 */
3501 0x6c, 0x00, /* 0110110000 */
3502 0xd8, 0x00, /* 1101100000 */
3503 0x6c, 0x00, /* 0110110000 */
3504 0x36, 0x00, /* 0011011000 */
3505 0x1b, 0x00, /* 0001101100 */
3506 0x0d, 0x80, /* 0000110110 */
3507 0x00, 0x00, /* 0000000000 */
3508 0x00, 0x00, /* 0000000000 */
3509 0x00, 0x00, /* 0000000000 */
3510 0x00, 0x00, /* 0000000000 */
3511
3512 /* 175 0xaf '.' */
3513 0x00, 0x00, /* 0000000000 */
3514 0x00, 0x00, /* 0000000000 */
3515 0x00, 0x00, /* 0000000000 */
3516 0x00, 0x00, /* 0000000000 */
3517 0x00, 0x00, /* 0000000000 */
3518 0x6c, 0x00, /* 0110110000 */
3519 0x36, 0x00, /* 0011011000 */
3520 0x1b, 0x00, /* 0001101100 */
3521 0x0d, 0x80, /* 0000110110 */
3522 0x06, 0xc0, /* 0000011011 */
3523 0x0d, 0x80, /* 0000110110 */
3524 0x1b, 0x00, /* 0001101100 */
3525 0x36, 0x00, /* 0011011000 */
3526 0x6c, 0x00, /* 0110110000 */
3527 0x00, 0x00, /* 0000000000 */
3528 0x00, 0x00, /* 0000000000 */
3529 0x00, 0x00, /* 0000000000 */
3530 0x00, 0x00, /* 0000000000 */
3531
3532 /* 176 0xb0 '.' */
3533 0xc3, 0x00, /* 1100001100 */
3534 0x41, 0x00, /* 0100000100 */
3535 0x18, 0x40, /* 0001100001 */
3536 0x10, 0x40, /* 0001000001 */
3537 0xc3, 0x00, /* 1100001100 */
3538 0x41, 0x00, /* 0100000100 */
3539 0x18, 0x40, /* 0001100001 */
3540 0x10, 0x40, /* 0001000001 */
3541 0xc3, 0x00, /* 1100001100 */
3542 0x41, 0x00, /* 0100000100 */
3543 0x18, 0x40, /* 0001100001 */
3544 0x10, 0x40, /* 0001000001 */
3545 0xc3, 0x00, /* 1100001100 */
3546 0x41, 0x00, /* 0100000100 */
3547 0x18, 0x40, /* 0001100001 */
3548 0x10, 0x40, /* 0001000001 */
3549 0xc3, 0x00, /* 1100001100 */
3550 0x41, 0x00, /* 0100000100 */
3551
3552 /* 177 0xb1 '.' */
3553 0x11, 0x00, /* 0001000100 */
3554 0xbb, 0x80, /* 1011101110 */
3555 0x11, 0x00, /* 0001000100 */
3556 0x44, 0x40, /* 0100010001 */
3557 0xee, 0xc0, /* 1110111011 */
3558 0x44, 0x40, /* 0100010001 */
3559 0x11, 0x00, /* 0001000100 */
3560 0xbb, 0x80, /* 1011101110 */
3561 0x11, 0x00, /* 0001000100 */
3562 0x44, 0x40, /* 0100010001 */
3563 0xee, 0xc0, /* 1110111011 */
3564 0x44, 0x40, /* 0100010001 */
3565 0x11, 0x00, /* 0001000100 */
3566 0xbb, 0x80, /* 1011101110 */
3567 0x11, 0x00, /* 0001000100 */
3568 0x44, 0x40, /* 0100010001 */
3569 0xee, 0xc0, /* 1110111011 */
3570 0x44, 0x40, /* 0100010001 */
3571
3572 /* 178 0xb2 '.' */
3573 0x3c, 0xc0, /* 0011110011 */
3574 0xbe, 0xc0, /* 1011111011 */
3575 0xe7, 0x80, /* 1110011110 */
3576 0xef, 0x80, /* 1110111110 */
3577 0x3c, 0xc0, /* 0011110011 */
3578 0xbe, 0xc0, /* 1011111011 */
3579 0xe7, 0x80, /* 1110011110 */
3580 0xef, 0x80, /* 1110111110 */
3581 0x3c, 0xc0, /* 0011110011 */
3582 0xbe, 0xc0, /* 1011111011 */
3583 0xe7, 0x80, /* 1110011110 */
3584 0xef, 0x80, /* 1110111110 */
3585 0x3c, 0xc0, /* 0011110011 */
3586 0xbe, 0xc0, /* 1011111011 */
3587 0xe7, 0x80, /* 1110011110 */
3588 0xef, 0x80, /* 1110111110 */
3589 0x3c, 0xc0, /* 0011110011 */
3590 0xbe, 0xc0, /* 1011111011 */
3591
3592 /* 179 0xb3 '.' */
3593 0x0c, 0x00, /* 0000110000 */
3594 0x0c, 0x00, /* 0000110000 */
3595 0x0c, 0x00, /* 0000110000 */
3596 0x0c, 0x00, /* 0000110000 */
3597 0x0c, 0x00, /* 0000110000 */
3598 0x0c, 0x00, /* 0000110000 */
3599 0x0c, 0x00, /* 0000110000 */
3600 0x0c, 0x00, /* 0000110000 */
3601 0x0c, 0x00, /* 0000110000 */
3602 0x0c, 0x00, /* 0000110000 */
3603 0x0c, 0x00, /* 0000110000 */
3604 0x0c, 0x00, /* 0000110000 */
3605 0x0c, 0x00, /* 0000110000 */
3606 0x0c, 0x00, /* 0000110000 */
3607 0x0c, 0x00, /* 0000110000 */
3608 0x0c, 0x00, /* 0000110000 */
3609 0x0c, 0x00, /* 0000110000 */
3610 0x0c, 0x00, /* 0000110000 */
3611
3612 /* 180 0xb4 '.' */
3613 0x0c, 0x00, /* 0000110000 */
3614 0x0c, 0x00, /* 0000110000 */
3615 0x0c, 0x00, /* 0000110000 */
3616 0x0c, 0x00, /* 0000110000 */
3617 0x0c, 0x00, /* 0000110000 */
3618 0x0c, 0x00, /* 0000110000 */
3619 0x0c, 0x00, /* 0000110000 */
3620 0x0c, 0x00, /* 0000110000 */
3621 0xfc, 0x00, /* 1111110000 */
3622 0xfc, 0x00, /* 1111110000 */
3623 0x0c, 0x00, /* 0000110000 */
3624 0x0c, 0x00, /* 0000110000 */
3625 0x0c, 0x00, /* 0000110000 */
3626 0x0c, 0x00, /* 0000110000 */
3627 0x0c, 0x00, /* 0000110000 */
3628 0x0c, 0x00, /* 0000110000 */
3629 0x0c, 0x00, /* 0000110000 */
3630 0x0c, 0x00, /* 0000110000 */
3631
3632 /* 181 0xb5 '.' */
3633 0x0c, 0x00, /* 0000110000 */
3634 0x0c, 0x00, /* 0000110000 */
3635 0x0c, 0x00, /* 0000110000 */
3636 0x0c, 0x00, /* 0000110000 */
3637 0x0c, 0x00, /* 0000110000 */
3638 0xfc, 0x00, /* 1111110000 */
3639 0xfc, 0x00, /* 1111110000 */
3640 0x0c, 0x00, /* 0000110000 */
3641 0xfc, 0x00, /* 1111110000 */
3642 0xfc, 0x00, /* 1111110000 */
3643 0x0c, 0x00, /* 0000110000 */
3644 0x0c, 0x00, /* 0000110000 */
3645 0x0c, 0x00, /* 0000110000 */
3646 0x0c, 0x00, /* 0000110000 */
3647 0x0c, 0x00, /* 0000110000 */
3648 0x0c, 0x00, /* 0000110000 */
3649 0x0c, 0x00, /* 0000110000 */
3650 0x0c, 0x00, /* 0000110000 */
3651
3652 /* 182 0xb6 '.' */
3653 0x1b, 0x00, /* 0001101100 */
3654 0x1b, 0x00, /* 0001101100 */
3655 0x1b, 0x00, /* 0001101100 */
3656 0x1b, 0x00, /* 0001101100 */
3657 0x1b, 0x00, /* 0001101100 */
3658 0x1b, 0x00, /* 0001101100 */
3659 0x1b, 0x00, /* 0001101100 */
3660 0x1b, 0x00, /* 0001101100 */
3661 0xfb, 0x00, /* 1111101100 */
3662 0xfb, 0x00, /* 1111101100 */
3663 0x1b, 0x00, /* 0001101100 */
3664 0x1b, 0x00, /* 0001101100 */
3665 0x1b, 0x00, /* 0001101100 */
3666 0x1b, 0x00, /* 0001101100 */
3667 0x1b, 0x00, /* 0001101100 */
3668 0x1b, 0x00, /* 0001101100 */
3669 0x1b, 0x00, /* 0001101100 */
3670 0x1b, 0x00, /* 0001101100 */
3671
3672 /* 183 0xb7 '.' */
3673 0x00, 0x00, /* 0000000000 */
3674 0x00, 0x00, /* 0000000000 */
3675 0x00, 0x00, /* 0000000000 */
3676 0x00, 0x00, /* 0000000000 */
3677 0x00, 0x00, /* 0000000000 */
3678 0x00, 0x00, /* 0000000000 */
3679 0x00, 0x00, /* 0000000000 */
3680 0x00, 0x00, /* 0000000000 */
3681 0xff, 0x00, /* 1111111100 */
3682 0xff, 0x00, /* 1111111100 */
3683 0x1b, 0x00, /* 0001101100 */
3684 0x1b, 0x00, /* 0001101100 */
3685 0x1b, 0x00, /* 0001101100 */
3686 0x1b, 0x00, /* 0001101100 */
3687 0x1b, 0x00, /* 0001101100 */
3688 0x1b, 0x00, /* 0001101100 */
3689 0x1b, 0x00, /* 0001101100 */
3690 0x1b, 0x00, /* 0001101100 */
3691
3692 /* 184 0xb8 '.' */
3693 0x00, 0x00, /* 0000000000 */
3694 0x00, 0x00, /* 0000000000 */
3695 0x00, 0x00, /* 0000000000 */
3696 0x00, 0x00, /* 0000000000 */
3697 0x00, 0x00, /* 0000000000 */
3698 0xfc, 0x00, /* 1111110000 */
3699 0xfc, 0x00, /* 1111110000 */
3700 0x0c, 0x00, /* 0000110000 */
3701 0xfc, 0x00, /* 1111110000 */
3702 0xfc, 0x00, /* 1111110000 */
3703 0x0c, 0x00, /* 0000110000 */
3704 0x0c, 0x00, /* 0000110000 */
3705 0x0c, 0x00, /* 0000110000 */
3706 0x0c, 0x00, /* 0000110000 */
3707 0x0c, 0x00, /* 0000110000 */
3708 0x0c, 0x00, /* 0000110000 */
3709 0x0c, 0x00, /* 0000110000 */
3710 0x0c, 0x00, /* 0000110000 */
3711
3712 /* 185 0xb9 '.' */
3713 0x1b, 0x00, /* 0001101100 */
3714 0x1b, 0x00, /* 0001101100 */
3715 0x1b, 0x00, /* 0001101100 */
3716 0x1b, 0x00, /* 0001101100 */
3717 0x1b, 0x00, /* 0001101100 */
3718 0xfb, 0x00, /* 1111101100 */
3719 0xfb, 0x00, /* 1111101100 */
3720 0x03, 0x00, /* 0000001100 */
3721 0xfb, 0x00, /* 1111101100 */
3722 0xfb, 0x00, /* 1111101100 */
3723 0x1b, 0x00, /* 0001101100 */
3724 0x1b, 0x00, /* 0001101100 */
3725 0x1b, 0x00, /* 0001101100 */
3726 0x1b, 0x00, /* 0001101100 */
3727 0x1b, 0x00, /* 0001101100 */
3728 0x1b, 0x00, /* 0001101100 */
3729 0x1b, 0x00, /* 0001101100 */
3730 0x1b, 0x00, /* 0001101100 */
3731
3732 /* 186 0xba '.' */
3733 0x1b, 0x00, /* 0001101100 */
3734 0x1b, 0x00, /* 0001101100 */
3735 0x1b, 0x00, /* 0001101100 */
3736 0x1b, 0x00, /* 0001101100 */
3737 0x1b, 0x00, /* 0001101100 */
3738 0x1b, 0x00, /* 0001101100 */
3739 0x1b, 0x00, /* 0001101100 */
3740 0x1b, 0x00, /* 0001101100 */
3741 0x1b, 0x00, /* 0001101100 */
3742 0x1b, 0x00, /* 0001101100 */
3743 0x1b, 0x00, /* 0001101100 */
3744 0x1b, 0x00, /* 0001101100 */
3745 0x1b, 0x00, /* 0001101100 */
3746 0x1b, 0x00, /* 0001101100 */
3747 0x1b, 0x00, /* 0001101100 */
3748 0x1b, 0x00, /* 0001101100 */
3749 0x1b, 0x00, /* 0001101100 */
3750 0x1b, 0x00, /* 0001101100 */
3751
3752 /* 187 0xbb '.' */
3753 0x00, 0x00, /* 0000000000 */
3754 0x00, 0x00, /* 0000000000 */
3755 0x00, 0x00, /* 0000000000 */
3756 0x00, 0x00, /* 0000000000 */
3757 0x00, 0x00, /* 0000000000 */
3758 0xff, 0x00, /* 1111111100 */
3759 0xff, 0x00, /* 1111111100 */
3760 0x03, 0x00, /* 0000001100 */
3761 0xfb, 0x00, /* 1111101100 */
3762 0xfb, 0x00, /* 1111101100 */
3763 0x1b, 0x00, /* 0001101100 */
3764 0x1b, 0x00, /* 0001101100 */
3765 0x1b, 0x00, /* 0001101100 */
3766 0x1b, 0x00, /* 0001101100 */
3767 0x1b, 0x00, /* 0001101100 */
3768 0x1b, 0x00, /* 0001101100 */
3769 0x1b, 0x00, /* 0001101100 */
3770 0x1b, 0x00, /* 0001101100 */
3771
3772 /* 188 0xbc '.' */
3773 0x1b, 0x00, /* 0001101100 */
3774 0x1b, 0x00, /* 0001101100 */
3775 0x1b, 0x00, /* 0001101100 */
3776 0x1b, 0x00, /* 0001101100 */
3777 0x1b, 0x00, /* 0001101100 */
3778 0xfb, 0x00, /* 1111101100 */
3779 0xfb, 0x00, /* 1111101100 */
3780 0x03, 0x00, /* 0000001100 */
3781 0xff, 0x00, /* 1111111100 */
3782 0xff, 0x00, /* 1111111100 */
3783 0x00, 0x00, /* 0000000000 */
3784 0x00, 0x00, /* 0000000000 */
3785 0x00, 0x00, /* 0000000000 */
3786 0x00, 0x00, /* 0000000000 */
3787 0x00, 0x00, /* 0000000000 */
3788 0x00, 0x00, /* 0000000000 */
3789 0x00, 0x00, /* 0000000000 */
3790 0x00, 0x00, /* 0000000000 */
3791
3792 /* 189 0xbd '.' */
3793 0x1b, 0x00, /* 0001101100 */
3794 0x1b, 0x00, /* 0001101100 */
3795 0x1b, 0x00, /* 0001101100 */
3796 0x1b, 0x00, /* 0001101100 */
3797 0x1b, 0x00, /* 0001101100 */
3798 0x1b, 0x00, /* 0001101100 */
3799 0x1b, 0x00, /* 0001101100 */
3800 0x1b, 0x00, /* 0001101100 */
3801 0xff, 0x00, /* 1111111100 */
3802 0xff, 0x00, /* 1111111100 */
3803 0x00, 0x00, /* 0000000000 */
3804 0x00, 0x00, /* 0000000000 */
3805 0x00, 0x00, /* 0000000000 */
3806 0x00, 0x00, /* 0000000000 */
3807 0x00, 0x00, /* 0000000000 */
3808 0x00, 0x00, /* 0000000000 */
3809 0x00, 0x00, /* 0000000000 */
3810 0x00, 0x00, /* 0000000000 */
3811
3812 /* 190 0xbe '.' */
3813 0x0c, 0x00, /* 0000110000 */
3814 0x0c, 0x00, /* 0000110000 */
3815 0x0c, 0x00, /* 0000110000 */
3816 0x0c, 0x00, /* 0000110000 */
3817 0x0c, 0x00, /* 0000110000 */
3818 0xfc, 0x00, /* 1111110000 */
3819 0xfc, 0x00, /* 1111110000 */
3820 0x0c, 0x00, /* 0000110000 */
3821 0xfc, 0x00, /* 1111110000 */
3822 0xfc, 0x00, /* 1111110000 */
3823 0x00, 0x00, /* 0000000000 */
3824 0x00, 0x00, /* 0000000000 */
3825 0x00, 0x00, /* 0000000000 */
3826 0x00, 0x00, /* 0000000000 */
3827 0x00, 0x00, /* 0000000000 */
3828 0x00, 0x00, /* 0000000000 */
3829 0x00, 0x00, /* 0000000000 */
3830 0x00, 0x00, /* 0000000000 */
3831
3832 /* 191 0xbf '.' */
3833 0x00, 0x00, /* 0000000000 */
3834 0x00, 0x00, /* 0000000000 */
3835 0x00, 0x00, /* 0000000000 */
3836 0x00, 0x00, /* 0000000000 */
3837 0x00, 0x00, /* 0000000000 */
3838 0x00, 0x00, /* 0000000000 */
3839 0x00, 0x00, /* 0000000000 */
3840 0x00, 0x00, /* 0000000000 */
3841 0xfc, 0x00, /* 1111110000 */
3842 0xfc, 0x00, /* 1111110000 */
3843 0x0c, 0x00, /* 0000110000 */
3844 0x0c, 0x00, /* 0000110000 */
3845 0x0c, 0x00, /* 0000110000 */
3846 0x0c, 0x00, /* 0000110000 */
3847 0x0c, 0x00, /* 0000110000 */
3848 0x0c, 0x00, /* 0000110000 */
3849 0x0c, 0x00, /* 0000110000 */
3850 0x0c, 0x00, /* 0000110000 */
3851
3852 /* 192 0xc0 '.' */
3853 0x0c, 0x00, /* 0000110000 */
3854 0x0c, 0x00, /* 0000110000 */
3855 0x0c, 0x00, /* 0000110000 */
3856 0x0c, 0x00, /* 0000110000 */
3857 0x0c, 0x00, /* 0000110000 */
3858 0x0c, 0x00, /* 0000110000 */
3859 0x0c, 0x00, /* 0000110000 */
3860 0x0c, 0x00, /* 0000110000 */
3861 0x0f, 0xc0, /* 0000111111 */
3862 0x0f, 0xc0, /* 0000111111 */
3863 0x00, 0x00, /* 0000000000 */
3864 0x00, 0x00, /* 0000000000 */
3865 0x00, 0x00, /* 0000000000 */
3866 0x00, 0x00, /* 0000000000 */
3867 0x00, 0x00, /* 0000000000 */
3868 0x00, 0x00, /* 0000000000 */
3869 0x00, 0x00, /* 0000000000 */
3870 0x00, 0x00, /* 0000000000 */
3871
3872 /* 193 0xc1 '.' */
3873 0x0c, 0x00, /* 0000110000 */
3874 0x0c, 0x00, /* 0000110000 */
3875 0x0c, 0x00, /* 0000110000 */
3876 0x0c, 0x00, /* 0000110000 */
3877 0x0c, 0x00, /* 0000110000 */
3878 0x0c, 0x00, /* 0000110000 */
3879 0x0c, 0x00, /* 0000110000 */
3880 0x0c, 0x00, /* 0000110000 */
3881 0xff, 0xc0, /* 1111111111 */
3882 0xff, 0xc0, /* 1111111111 */
3883 0x00, 0x00, /* 0000000000 */
3884 0x00, 0x00, /* 0000000000 */
3885 0x00, 0x00, /* 0000000000 */
3886 0x00, 0x00, /* 0000000000 */
3887 0x00, 0x00, /* 0000000000 */
3888 0x00, 0x00, /* 0000000000 */
3889 0x00, 0x00, /* 0000000000 */
3890 0x00, 0x00, /* 0000000000 */
3891
3892 /* 194 0xc2 '.' */
3893 0x00, 0x00, /* 0000000000 */
3894 0x00, 0x00, /* 0000000000 */
3895 0x00, 0x00, /* 0000000000 */
3896 0x00, 0x00, /* 0000000000 */
3897 0x00, 0x00, /* 0000000000 */
3898 0x00, 0x00, /* 0000000000 */
3899 0x00, 0x00, /* 0000000000 */
3900 0x00, 0x00, /* 0000000000 */
3901 0xff, 0xc0, /* 1111111111 */
3902 0xff, 0xc0, /* 1111111111 */
3903 0x0c, 0x00, /* 0000110000 */
3904 0x0c, 0x00, /* 0000110000 */
3905 0x0c, 0x00, /* 0000110000 */
3906 0x0c, 0x00, /* 0000110000 */
3907 0x0c, 0x00, /* 0000110000 */
3908 0x0c, 0x00, /* 0000110000 */
3909 0x0c, 0x00, /* 0000110000 */
3910 0x0c, 0x00, /* 0000110000 */
3911
3912 /* 195 0xc3 '.' */
3913 0x0c, 0x00, /* 0000110000 */
3914 0x0c, 0x00, /* 0000110000 */
3915 0x0c, 0x00, /* 0000110000 */
3916 0x0c, 0x00, /* 0000110000 */
3917 0x0c, 0x00, /* 0000110000 */
3918 0x0c, 0x00, /* 0000110000 */
3919 0x0c, 0x00, /* 0000110000 */
3920 0x0c, 0x00, /* 0000110000 */
3921 0x0f, 0xc0, /* 0000111111 */
3922 0x0f, 0xc0, /* 0000111111 */
3923 0x0c, 0x00, /* 0000110000 */
3924 0x0c, 0x00, /* 0000110000 */
3925 0x0c, 0x00, /* 0000110000 */
3926 0x0c, 0x00, /* 0000110000 */
3927 0x0c, 0x00, /* 0000110000 */
3928 0x0c, 0x00, /* 0000110000 */
3929 0x0c, 0x00, /* 0000110000 */
3930 0x0c, 0x00, /* 0000110000 */
3931
3932 /* 196 0xc4 '.' */
3933 0x00, 0x00, /* 0000000000 */
3934 0x00, 0x00, /* 0000000000 */
3935 0x00, 0x00, /* 0000000000 */
3936 0x00, 0x00, /* 0000000000 */
3937 0x00, 0x00, /* 0000000000 */
3938 0x00, 0x00, /* 0000000000 */
3939 0x00, 0x00, /* 0000000000 */
3940 0x00, 0x00, /* 0000000000 */
3941 0xff, 0xc0, /* 1111111111 */
3942 0xff, 0xc0, /* 1111111111 */
3943 0x00, 0x00, /* 0000000000 */
3944 0x00, 0x00, /* 0000000000 */
3945 0x00, 0x00, /* 0000000000 */
3946 0x00, 0x00, /* 0000000000 */
3947 0x00, 0x00, /* 0000000000 */
3948 0x00, 0x00, /* 0000000000 */
3949 0x00, 0x00, /* 0000000000 */
3950 0x00, 0x00, /* 0000000000 */
3951
3952 /* 197 0xc5 '.' */
3953 0x0c, 0x00, /* 0000110000 */
3954 0x0c, 0x00, /* 0000110000 */
3955 0x0c, 0x00, /* 0000110000 */
3956 0x0c, 0x00, /* 0000110000 */
3957 0x0c, 0x00, /* 0000110000 */
3958 0x0c, 0x00, /* 0000110000 */
3959 0x0c, 0x00, /* 0000110000 */
3960 0x0c, 0x00, /* 0000110000 */
3961 0xff, 0xc0, /* 1111111111 */
3962 0xff, 0xc0, /* 1111111111 */
3963 0x0c, 0x00, /* 0000110000 */
3964 0x0c, 0x00, /* 0000110000 */
3965 0x0c, 0x00, /* 0000110000 */
3966 0x0c, 0x00, /* 0000110000 */
3967 0x0c, 0x00, /* 0000110000 */
3968 0x0c, 0x00, /* 0000110000 */
3969 0x0c, 0x00, /* 0000110000 */
3970 0x0c, 0x00, /* 0000110000 */
3971
3972 /* 198 0xc6 '.' */
3973 0x0c, 0x00, /* 0000110000 */
3974 0x0c, 0x00, /* 0000110000 */
3975 0x0c, 0x00, /* 0000110000 */
3976 0x0c, 0x00, /* 0000110000 */
3977 0x0c, 0x00, /* 0000110000 */
3978 0x0f, 0xc0, /* 0000111111 */
3979 0x0f, 0xc0, /* 0000111111 */
3980 0x0c, 0x00, /* 0000110000 */
3981 0x0f, 0xc0, /* 0000111111 */
3982 0x0f, 0xc0, /* 0000111111 */
3983 0x0c, 0x00, /* 0000110000 */
3984 0x0c, 0x00, /* 0000110000 */
3985 0x0c, 0x00, /* 0000110000 */
3986 0x0c, 0x00, /* 0000110000 */
3987 0x0c, 0x00, /* 0000110000 */
3988 0x0c, 0x00, /* 0000110000 */
3989 0x0c, 0x00, /* 0000110000 */
3990 0x0c, 0x00, /* 0000110000 */
3991
3992 /* 199 0xc7 '.' */
3993 0x1b, 0x00, /* 0001101100 */
3994 0x1b, 0x00, /* 0001101100 */
3995 0x1b, 0x00, /* 0001101100 */
3996 0x1b, 0x00, /* 0001101100 */
3997 0x1b, 0x00, /* 0001101100 */
3998 0x1b, 0x00, /* 0001101100 */
3999 0x1b, 0x00, /* 0001101100 */
4000 0x1b, 0x00, /* 0001101100 */
4001 0x1b, 0xc0, /* 0001101111 */
4002 0x1b, 0xc0, /* 0001101111 */
4003 0x1b, 0x00, /* 0001101100 */
4004 0x1b, 0x00, /* 0001101100 */
4005 0x1b, 0x00, /* 0001101100 */
4006 0x1b, 0x00, /* 0001101100 */
4007 0x1b, 0x00, /* 0001101100 */
4008 0x1b, 0x00, /* 0001101100 */
4009 0x1b, 0x00, /* 0001101100 */
4010 0x1b, 0x00, /* 0001101100 */
4011
4012 /* 200 0xc8 '.' */
4013 0x1b, 0x00, /* 0001101100 */
4014 0x1b, 0x00, /* 0001101100 */
4015 0x1b, 0x00, /* 0001101100 */
4016 0x1b, 0x00, /* 0001101100 */
4017 0x1b, 0x00, /* 0001101100 */
4018 0x1b, 0xc0, /* 0001101111 */
4019 0x1b, 0xc0, /* 0001101111 */
4020 0x18, 0x00, /* 0001100000 */
4021 0x1f, 0xc0, /* 0001111111 */
4022 0x1f, 0xc0, /* 0001111111 */
4023 0x00, 0x00, /* 0000000000 */
4024 0x00, 0x00, /* 0000000000 */
4025 0x00, 0x00, /* 0000000000 */
4026 0x00, 0x00, /* 0000000000 */
4027 0x00, 0x00, /* 0000000000 */
4028 0x00, 0x00, /* 0000000000 */
4029 0x00, 0x00, /* 0000000000 */
4030 0x00, 0x00, /* 0000000000 */
4031
4032 /* 201 0xc9 '.' */
4033 0x00, 0x00, /* 0000000000 */
4034 0x00, 0x00, /* 0000000000 */
4035 0x00, 0x00, /* 0000000000 */
4036 0x00, 0x00, /* 0000000000 */
4037 0x00, 0x00, /* 0000000000 */
4038 0x1f, 0xc0, /* 0001111111 */
4039 0x1f, 0xc0, /* 0001111111 */
4040 0x18, 0x00, /* 0001100000 */
4041 0x1b, 0xc0, /* 0001101111 */
4042 0x1b, 0xc0, /* 0001101111 */
4043 0x1b, 0x00, /* 0001101100 */
4044 0x1b, 0x00, /* 0001101100 */
4045 0x1b, 0x00, /* 0001101100 */
4046 0x1b, 0x00, /* 0001101100 */
4047 0x1b, 0x00, /* 0001101100 */
4048 0x1b, 0x00, /* 0001101100 */
4049 0x1b, 0x00, /* 0001101100 */
4050 0x1b, 0x00, /* 0001101100 */
4051
4052 /* 202 0xca '.' */
4053 0x1b, 0x00, /* 0001101100 */
4054 0x1b, 0x00, /* 0001101100 */
4055 0x1b, 0x00, /* 0001101100 */
4056 0x1b, 0x00, /* 0001101100 */
4057 0x1b, 0x00, /* 0001101100 */
4058 0xfb, 0xc0, /* 1111101111 */
4059 0xfb, 0xc0, /* 1111101111 */
4060 0x00, 0x00, /* 0000000000 */
4061 0xff, 0xc0, /* 1111111111 */
4062 0xff, 0xc0, /* 1111111111 */
4063 0x00, 0x00, /* 0000000000 */
4064 0x00, 0x00, /* 0000000000 */
4065 0x00, 0x00, /* 0000000000 */
4066 0x00, 0x00, /* 0000000000 */
4067 0x00, 0x00, /* 0000000000 */
4068 0x00, 0x00, /* 0000000000 */
4069 0x00, 0x00, /* 0000000000 */
4070 0x00, 0x00, /* 0000000000 */
4071
4072 /* 203 0xcb '.' */
4073 0x00, 0x00, /* 0000000000 */
4074 0x00, 0x00, /* 0000000000 */
4075 0x00, 0x00, /* 0000000000 */
4076 0x00, 0x00, /* 0000000000 */
4077 0x00, 0x00, /* 0000000000 */
4078 0xff, 0xc0, /* 1111111111 */
4079 0xff, 0xc0, /* 1111111111 */
4080 0x00, 0x00, /* 0000000000 */
4081 0xfb, 0xc0, /* 1111101111 */
4082 0xfb, 0xc0, /* 1111101111 */
4083 0x1b, 0x00, /* 0001101100 */
4084 0x1b, 0x00, /* 0001101100 */
4085 0x1b, 0x00, /* 0001101100 */
4086 0x1b, 0x00, /* 0001101100 */
4087 0x1b, 0x00, /* 0001101100 */
4088 0x1b, 0x00, /* 0001101100 */
4089 0x1b, 0x00, /* 0001101100 */
4090 0x1b, 0x00, /* 0001101100 */
4091
4092 /* 204 0xcc '.' */
4093 0x1b, 0x00, /* 0001101100 */
4094 0x1b, 0x00, /* 0001101100 */
4095 0x1b, 0x00, /* 0001101100 */
4096 0x1b, 0x00, /* 0001101100 */
4097 0x1b, 0x00, /* 0001101100 */
4098 0x1b, 0xc0, /* 0001101111 */
4099 0x1b, 0xc0, /* 0001101111 */
4100 0x18, 0x00, /* 0001100000 */
4101 0x1b, 0xc0, /* 0001101111 */
4102 0x1b, 0xc0, /* 0001101111 */
4103 0x1b, 0x00, /* 0001101100 */
4104 0x1b, 0x00, /* 0001101100 */
4105 0x1b, 0x00, /* 0001101100 */
4106 0x1b, 0x00, /* 0001101100 */
4107 0x1b, 0x00, /* 0001101100 */
4108 0x1b, 0x00, /* 0001101100 */
4109 0x1b, 0x00, /* 0001101100 */
4110 0x1b, 0x00, /* 0001101100 */
4111
4112 /* 205 0xcd '.' */
4113 0x00, 0x00, /* 0000000000 */
4114 0x00, 0x00, /* 0000000000 */
4115 0x00, 0x00, /* 0000000000 */
4116 0x00, 0x00, /* 0000000000 */
4117 0x00, 0x00, /* 0000000000 */
4118 0xff, 0xc0, /* 1111111111 */
4119 0xff, 0xc0, /* 1111111111 */
4120 0x00, 0x00, /* 0000000000 */
4121 0xff, 0xc0, /* 1111111111 */
4122 0xff, 0xc0, /* 1111111111 */
4123 0x00, 0x00, /* 0000000000 */
4124 0x00, 0x00, /* 0000000000 */
4125 0x00, 0x00, /* 0000000000 */
4126 0x00, 0x00, /* 0000000000 */
4127 0x00, 0x00, /* 0000000000 */
4128 0x00, 0x00, /* 0000000000 */
4129 0x00, 0x00, /* 0000000000 */
4130 0x00, 0x00, /* 0000000000 */
4131
4132 /* 206 0xce '.' */
4133 0x1b, 0x00, /* 0001101100 */
4134 0x1b, 0x00, /* 0001101100 */
4135 0x1b, 0x00, /* 0001101100 */
4136 0x1b, 0x00, /* 0001101100 */
4137 0x1b, 0x00, /* 0001101100 */
4138 0xfb, 0xc0, /* 1111101111 */
4139 0xfb, 0xc0, /* 1111101111 */
4140 0x00, 0x00, /* 0000000000 */
4141 0xfb, 0xc0, /* 1111101111 */
4142 0xfb, 0xc0, /* 1111101111 */
4143 0x1b, 0x00, /* 0001101100 */
4144 0x1b, 0x00, /* 0001101100 */
4145 0x1b, 0x00, /* 0001101100 */
4146 0x1b, 0x00, /* 0001101100 */
4147 0x1b, 0x00, /* 0001101100 */
4148 0x1b, 0x00, /* 0001101100 */
4149 0x1b, 0x00, /* 0001101100 */
4150 0x1b, 0x00, /* 0001101100 */
4151
4152 /* 207 0xcf '.' */
4153 0x0c, 0x00, /* 0000110000 */
4154 0x0c, 0x00, /* 0000110000 */
4155 0x0c, 0x00, /* 0000110000 */
4156 0x0c, 0x00, /* 0000110000 */
4157 0x0c, 0x00, /* 0000110000 */
4158 0xff, 0xc0, /* 1111111111 */
4159 0xff, 0xc0, /* 1111111111 */
4160 0x00, 0x00, /* 0000000000 */
4161 0xff, 0xc0, /* 1111111111 */
4162 0xff, 0xc0, /* 1111111111 */
4163 0x00, 0x00, /* 0000000000 */
4164 0x00, 0x00, /* 0000000000 */
4165 0x00, 0x00, /* 0000000000 */
4166 0x00, 0x00, /* 0000000000 */
4167 0x00, 0x00, /* 0000000000 */
4168 0x00, 0x00, /* 0000000000 */
4169 0x00, 0x00, /* 0000000000 */
4170 0x00, 0x00, /* 0000000000 */
4171
4172 /* 208 0xd0 '.' */
4173 0x1b, 0x00, /* 0001101100 */
4174 0x1b, 0x00, /* 0001101100 */
4175 0x1b, 0x00, /* 0001101100 */
4176 0x1b, 0x00, /* 0001101100 */
4177 0x1b, 0x00, /* 0001101100 */
4178 0x1b, 0x00, /* 0001101100 */
4179 0x1b, 0x00, /* 0001101100 */
4180 0x1b, 0x00, /* 0001101100 */
4181 0xff, 0xc0, /* 1111111111 */
4182 0xff, 0xc0, /* 1111111111 */
4183 0x00, 0x00, /* 0000000000 */
4184 0x00, 0x00, /* 0000000000 */
4185 0x00, 0x00, /* 0000000000 */
4186 0x00, 0x00, /* 0000000000 */
4187 0x00, 0x00, /* 0000000000 */
4188 0x00, 0x00, /* 0000000000 */
4189 0x00, 0x00, /* 0000000000 */
4190 0x00, 0x00, /* 0000000000 */
4191
4192 /* 209 0xd1 '.' */
4193 0x00, 0x00, /* 0000000000 */
4194 0x00, 0x00, /* 0000000000 */
4195 0x00, 0x00, /* 0000000000 */
4196 0x00, 0x00, /* 0000000000 */
4197 0x00, 0x00, /* 0000000000 */
4198 0xff, 0xc0, /* 1111111111 */
4199 0xff, 0xc0, /* 1111111111 */
4200 0x00, 0x00, /* 0000000000 */
4201 0xff, 0xc0, /* 1111111111 */
4202 0xff, 0xc0, /* 1111111111 */
4203 0x0c, 0x00, /* 0000110000 */
4204 0x0c, 0x00, /* 0000110000 */
4205 0x0c, 0x00, /* 0000110000 */
4206 0x0c, 0x00, /* 0000110000 */
4207 0x0c, 0x00, /* 0000110000 */
4208 0x0c, 0x00, /* 0000110000 */
4209 0x0c, 0x00, /* 0000110000 */
4210 0x0c, 0x00, /* 0000110000 */
4211
4212 /* 210 0xd2 '.' */
4213 0x00, 0x00, /* 0000000000 */
4214 0x00, 0x00, /* 0000000000 */
4215 0x00, 0x00, /* 0000000000 */
4216 0x00, 0x00, /* 0000000000 */
4217 0x00, 0x00, /* 0000000000 */
4218 0x00, 0x00, /* 0000000000 */
4219 0x00, 0x00, /* 0000000000 */
4220 0x00, 0x00, /* 0000000000 */
4221 0xff, 0xc0, /* 1111111111 */
4222 0xff, 0xc0, /* 1111111111 */
4223 0x1b, 0x00, /* 0001101100 */
4224 0x1b, 0x00, /* 0001101100 */
4225 0x1b, 0x00, /* 0001101100 */
4226 0x1b, 0x00, /* 0001101100 */
4227 0x1b, 0x00, /* 0001101100 */
4228 0x1b, 0x00, /* 0001101100 */
4229 0x1b, 0x00, /* 0001101100 */
4230 0x1b, 0x00, /* 0001101100 */
4231
4232 /* 211 0xd3 '.' */
4233 0x1b, 0x00, /* 0001101100 */
4234 0x1b, 0x00, /* 0001101100 */
4235 0x1b, 0x00, /* 0001101100 */
4236 0x1b, 0x00, /* 0001101100 */
4237 0x1b, 0x00, /* 0001101100 */
4238 0x1b, 0x00, /* 0001101100 */
4239 0x1b, 0x00, /* 0001101100 */
4240 0x1b, 0x00, /* 0001101100 */
4241 0x1f, 0xc0, /* 0001111111 */
4242 0x1f, 0xc0, /* 0001111111 */
4243 0x00, 0x00, /* 0000000000 */
4244 0x00, 0x00, /* 0000000000 */
4245 0x00, 0x00, /* 0000000000 */
4246 0x00, 0x00, /* 0000000000 */
4247 0x00, 0x00, /* 0000000000 */
4248 0x00, 0x00, /* 0000000000 */
4249 0x00, 0x00, /* 0000000000 */
4250 0x00, 0x00, /* 0000000000 */
4251
4252 /* 212 0xd4 '.' */
4253 0x0c, 0x00, /* 0000110000 */
4254 0x0c, 0x00, /* 0000110000 */
4255 0x0c, 0x00, /* 0000110000 */
4256 0x0c, 0x00, /* 0000110000 */
4257 0x0c, 0x00, /* 0000110000 */
4258 0x0f, 0xc0, /* 0000111111 */
4259 0x0f, 0xc0, /* 0000111111 */
4260 0x0c, 0x00, /* 0000110000 */
4261 0x0f, 0xc0, /* 0000111111 */
4262 0x0f, 0xc0, /* 0000111111 */
4263 0x00, 0x00, /* 0000000000 */
4264 0x00, 0x00, /* 0000000000 */
4265 0x00, 0x00, /* 0000000000 */
4266 0x00, 0x00, /* 0000000000 */
4267 0x00, 0x00, /* 0000000000 */
4268 0x00, 0x00, /* 0000000000 */
4269 0x00, 0x00, /* 0000000000 */
4270 0x00, 0x00, /* 0000000000 */
4271
4272 /* 213 0xd5 '.' */
4273 0x00, 0x00, /* 0000000000 */
4274 0x00, 0x00, /* 0000000000 */
4275 0x00, 0x00, /* 0000000000 */
4276 0x00, 0x00, /* 0000000000 */
4277 0x00, 0x00, /* 0000000000 */
4278 0x0f, 0xc0, /* 0000111111 */
4279 0x0f, 0xc0, /* 0000111111 */
4280 0x0c, 0x00, /* 0000110000 */
4281 0x0f, 0xc0, /* 0000111111 */
4282 0x0f, 0xc0, /* 0000111111 */
4283 0x0c, 0x00, /* 0000110000 */
4284 0x0c, 0x00, /* 0000110000 */
4285 0x0c, 0x00, /* 0000110000 */
4286 0x0c, 0x00, /* 0000110000 */
4287 0x0c, 0x00, /* 0000110000 */
4288 0x0c, 0x00, /* 0000110000 */
4289 0x0c, 0x00, /* 0000110000 */
4290 0x0c, 0x00, /* 0000110000 */
4291
4292 /* 214 0xd6 '.' */
4293 0x00, 0x00, /* 0000000000 */
4294 0x00, 0x00, /* 0000000000 */
4295 0x00, 0x00, /* 0000000000 */
4296 0x00, 0x00, /* 0000000000 */
4297 0x00, 0x00, /* 0000000000 */
4298 0x00, 0x00, /* 0000000000 */
4299 0x00, 0x00, /* 0000000000 */
4300 0x00, 0x00, /* 0000000000 */
4301 0x1f, 0xc0, /* 0001111111 */
4302 0x1f, 0xc0, /* 0001111111 */
4303 0x1b, 0x00, /* 0001101100 */
4304 0x1b, 0x00, /* 0001101100 */
4305 0x1b, 0x00, /* 0001101100 */
4306 0x1b, 0x00, /* 0001101100 */
4307 0x1b, 0x00, /* 0001101100 */
4308 0x1b, 0x00, /* 0001101100 */
4309 0x1b, 0x00, /* 0001101100 */
4310 0x1b, 0x00, /* 0001101100 */
4311
4312 /* 215 0xd7 '.' */
4313 0x1b, 0x00, /* 0001101100 */
4314 0x1b, 0x00, /* 0001101100 */
4315 0x1b, 0x00, /* 0001101100 */
4316 0x1b, 0x00, /* 0001101100 */
4317 0x1b, 0x00, /* 0001101100 */
4318 0x1b, 0x00, /* 0001101100 */
4319 0x1b, 0x00, /* 0001101100 */
4320 0x1b, 0x00, /* 0001101100 */
4321 0xff, 0xc0, /* 1111111111 */
4322 0xff, 0xc0, /* 1111111111 */
4323 0x1b, 0x00, /* 0001101100 */
4324 0x1b, 0x00, /* 0001101100 */
4325 0x1b, 0x00, /* 0001101100 */
4326 0x1b, 0x00, /* 0001101100 */
4327 0x1b, 0x00, /* 0001101100 */
4328 0x1b, 0x00, /* 0001101100 */
4329 0x1b, 0x00, /* 0001101100 */
4330 0x1b, 0x00, /* 0001101100 */
4331
4332 /* 216 0xd8 '.' */
4333 0x0c, 0x00, /* 0000110000 */
4334 0x0c, 0x00, /* 0000110000 */
4335 0x0c, 0x00, /* 0000110000 */
4336 0x0c, 0x00, /* 0000110000 */
4337 0x0c, 0x00, /* 0000110000 */
4338 0xff, 0xc0, /* 1111111111 */
4339 0xff, 0xc0, /* 1111111111 */
4340 0x0c, 0x00, /* 0000110000 */
4341 0xff, 0xc0, /* 1111111111 */
4342 0xff, 0xc0, /* 1111111111 */
4343 0x0c, 0x00, /* 0000110000 */
4344 0x0c, 0x00, /* 0000110000 */
4345 0x0c, 0x00, /* 0000110000 */
4346 0x0c, 0x00, /* 0000110000 */
4347 0x0c, 0x00, /* 0000110000 */
4348 0x0c, 0x00, /* 0000110000 */
4349 0x0c, 0x00, /* 0000110000 */
4350 0x0c, 0x00, /* 0000110000 */
4351
4352 /* 217 0xd9 '.' */
4353 0x0c, 0x00, /* 0000110000 */
4354 0x0c, 0x00, /* 0000110000 */
4355 0x0c, 0x00, /* 0000110000 */
4356 0x0c, 0x00, /* 0000110000 */
4357 0x0c, 0x00, /* 0000110000 */
4358 0x0c, 0x00, /* 0000110000 */
4359 0x0c, 0x00, /* 0000110000 */
4360 0x0c, 0x00, /* 0000110000 */
4361 0xfc, 0x00, /* 1111110000 */
4362 0xfc, 0x00, /* 1111110000 */
4363 0x00, 0x00, /* 0000000000 */
4364 0x00, 0x00, /* 0000000000 */
4365 0x00, 0x00, /* 0000000000 */
4366 0x00, 0x00, /* 0000000000 */
4367 0x00, 0x00, /* 0000000000 */
4368 0x00, 0x00, /* 0000000000 */
4369 0x00, 0x00, /* 0000000000 */
4370 0x00, 0x00, /* 0000000000 */
4371
4372 /* 218 0xda '.' */
4373 0x00, 0x00, /* 0000000000 */
4374 0x00, 0x00, /* 0000000000 */
4375 0x00, 0x00, /* 0000000000 */
4376 0x00, 0x00, /* 0000000000 */
4377 0x00, 0x00, /* 0000000000 */
4378 0x00, 0x00, /* 0000000000 */
4379 0x00, 0x00, /* 0000000000 */
4380 0x00, 0x00, /* 0000000000 */
4381 0x0f, 0xc0, /* 0000111111 */
4382 0x0f, 0xc0, /* 0000111111 */
4383 0x0c, 0x00, /* 0000110000 */
4384 0x0c, 0x00, /* 0000110000 */
4385 0x0c, 0x00, /* 0000110000 */
4386 0x0c, 0x00, /* 0000110000 */
4387 0x0c, 0x00, /* 0000110000 */
4388 0x0c, 0x00, /* 0000110000 */
4389 0x0c, 0x00, /* 0000110000 */
4390 0x0c, 0x00, /* 0000110000 */
4391
4392 /* 219 0xdb '.' */
4393 0xff, 0xc0, /* 1111111111 */
4394 0xff, 0xc0, /* 1111111111 */
4395 0xff, 0xc0, /* 1111111111 */
4396 0xff, 0xc0, /* 1111111111 */
4397 0xff, 0xc0, /* 1111111111 */
4398 0xff, 0xc0, /* 1111111111 */
4399 0xff, 0xc0, /* 1111111111 */
4400 0xff, 0xc0, /* 1111111111 */
4401 0xff, 0xc0, /* 1111111111 */
4402 0xff, 0xc0, /* 1111111111 */
4403 0xff, 0xc0, /* 1111111111 */
4404 0xff, 0xc0, /* 1111111111 */
4405 0xff, 0xc0, /* 1111111111 */
4406 0xff, 0xc0, /* 1111111111 */
4407 0xff, 0xc0, /* 1111111111 */
4408 0xff, 0xc0, /* 1111111111 */
4409 0xff, 0xc0, /* 1111111111 */
4410 0xff, 0xc0, /* 1111111111 */
4411
4412 /* 220 0xdc '.' */
4413 0x00, 0x00, /* 0000000000 */
4414 0x00, 0x00, /* 0000000000 */
4415 0x00, 0x00, /* 0000000000 */
4416 0x00, 0x00, /* 0000000000 */
4417 0x00, 0x00, /* 0000000000 */
4418 0x00, 0x00, /* 0000000000 */
4419 0x00, 0x00, /* 0000000000 */
4420 0x00, 0x00, /* 0000000000 */
4421 0xff, 0xc0, /* 1111111111 */
4422 0xff, 0xc0, /* 1111111111 */
4423 0xff, 0xc0, /* 1111111111 */
4424 0xff, 0xc0, /* 1111111111 */
4425 0xff, 0xc0, /* 1111111111 */
4426 0xff, 0xc0, /* 1111111111 */
4427 0xff, 0xc0, /* 1111111111 */
4428 0xff, 0xc0, /* 1111111111 */
4429 0xff, 0xc0, /* 1111111111 */
4430 0xff, 0xc0, /* 1111111111 */
4431
4432 /* 221 0xdd '.' */
4433 0xf8, 0x00, /* 1111100000 */
4434 0xf8, 0x00, /* 1111100000 */
4435 0xf8, 0x00, /* 1111100000 */
4436 0xf8, 0x00, /* 1111100000 */
4437 0xf8, 0x00, /* 1111100000 */
4438 0xf8, 0x00, /* 1111100000 */
4439 0xf8, 0x00, /* 1111100000 */
4440 0xf8, 0x00, /* 1111100000 */
4441 0xf8, 0x00, /* 1111100000 */
4442 0xf8, 0x00, /* 1111100000 */
4443 0xf8, 0x00, /* 1111100000 */
4444 0xf8, 0x00, /* 1111100000 */
4445 0xf8, 0x00, /* 1111100000 */
4446 0xf8, 0x00, /* 1111100000 */
4447 0xf8, 0x00, /* 1111100000 */
4448 0xf8, 0x00, /* 1111100000 */
4449 0xf8, 0x00, /* 1111100000 */
4450 0xf8, 0x00, /* 1111100000 */
4451
4452 /* 222 0xde '.' */
4453 0x07, 0xc0, /* 0000011111 */
4454 0x07, 0xc0, /* 0000011111 */
4455 0x07, 0xc0, /* 0000011111 */
4456 0x07, 0xc0, /* 0000011111 */
4457 0x07, 0xc0, /* 0000011111 */
4458 0x07, 0xc0, /* 0000011111 */
4459 0x07, 0xc0, /* 0000011111 */
4460 0x07, 0xc0, /* 0000011111 */
4461 0x07, 0xc0, /* 0000011111 */
4462 0x07, 0xc0, /* 0000011111 */
4463 0x07, 0xc0, /* 0000011111 */
4464 0x07, 0xc0, /* 0000011111 */
4465 0x07, 0xc0, /* 0000011111 */
4466 0x07, 0xc0, /* 0000011111 */
4467 0x07, 0xc0, /* 0000011111 */
4468 0x07, 0xc0, /* 0000011111 */
4469 0x07, 0xc0, /* 0000011111 */
4470 0x07, 0xc0, /* 0000011111 */
4471
4472 /* 223 0xdf '.' */
4473 0xff, 0xc0, /* 1111111111 */
4474 0xff, 0xc0, /* 1111111111 */
4475 0xff, 0xc0, /* 1111111111 */
4476 0xff, 0xc0, /* 1111111111 */
4477 0xff, 0xc0, /* 1111111111 */
4478 0xff, 0xc0, /* 1111111111 */
4479 0xff, 0xc0, /* 1111111111 */
4480 0xff, 0xc0, /* 1111111111 */
4481 0x00, 0x00, /* 0000000000 */
4482 0x00, 0x00, /* 0000000000 */
4483 0x00, 0x00, /* 0000000000 */
4484 0x00, 0x00, /* 0000000000 */
4485 0x00, 0x00, /* 0000000000 */
4486 0x00, 0x00, /* 0000000000 */
4487 0x00, 0x00, /* 0000000000 */
4488 0x00, 0x00, /* 0000000000 */
4489 0x00, 0x00, /* 0000000000 */
4490 0x00, 0x00, /* 0000000000 */
4491
4492 /* 224 0xe0 '.' */
4493 0x00, 0x00, /* 0000000000 */
4494 0x00, 0x00, /* 0000000000 */
4495 0x00, 0x00, /* 0000000000 */
4496 0x00, 0x00, /* 0000000000 */
4497 0x00, 0x00, /* 0000000000 */
4498 0x1c, 0x80, /* 0001110010 */
4499 0x35, 0x80, /* 0011010110 */
4500 0x63, 0x00, /* 0110001100 */
4501 0x63, 0x00, /* 0110001100 */
4502 0x63, 0x00, /* 0110001100 */
4503 0x63, 0x00, /* 0110001100 */
4504 0x63, 0x00, /* 0110001100 */
4505 0x63, 0x00, /* 0110001100 */
4506 0x37, 0x80, /* 0011011110 */
4507 0x1c, 0x80, /* 0001110010 */
4508 0x00, 0x00, /* 0000000000 */
4509 0x00, 0x00, /* 0000000000 */
4510 0x00, 0x00, /* 0000000000 */
4511
4512 /* 225 0xe1 '.' */
4513 0x00, 0x00, /* 0000000000 */
4514 0x1e, 0x00, /* 0001111000 */
4515 0x33, 0x00, /* 0011001100 */
4516 0x61, 0x80, /* 0110000110 */
4517 0x61, 0x80, /* 0110000110 */
4518 0x61, 0x80, /* 0110000110 */
4519 0x63, 0x00, /* 0110001100 */
4520 0x6f, 0x00, /* 0110111100 */
4521 0x63, 0x00, /* 0110001100 */
4522 0x61, 0x80, /* 0110000110 */
4523 0x61, 0x80, /* 0110000110 */
4524 0x61, 0x80, /* 0110000110 */
4525 0x61, 0x80, /* 0110000110 */
4526 0x63, 0x00, /* 0110001100 */
4527 0x6e, 0x00, /* 0110111000 */
4528 0x00, 0x00, /* 0000000000 */
4529 0x00, 0x00, /* 0000000000 */
4530 0x00, 0x00, /* 0000000000 */
4531
4532 /* 226 0xe2 '.' */
4533 0x00, 0x00, /* 0000000000 */
4534 0x7f, 0x80, /* 0111111110 */
4535 0x61, 0x80, /* 0110000110 */
4536 0x61, 0x80, /* 0110000110 */
4537 0x60, 0x00, /* 0110000000 */
4538 0x60, 0x00, /* 0110000000 */
4539 0x60, 0x00, /* 0110000000 */
4540 0x60, 0x00, /* 0110000000 */
4541 0x60, 0x00, /* 0110000000 */
4542 0x60, 0x00, /* 0110000000 */
4543 0x60, 0x00, /* 0110000000 */
4544 0x60, 0x00, /* 0110000000 */
4545 0x60, 0x00, /* 0110000000 */
4546 0x60, 0x00, /* 0110000000 */
4547 0x60, 0x00, /* 0110000000 */
4548 0x00, 0x00, /* 0000000000 */
4549 0x00, 0x00, /* 0000000000 */
4550 0x00, 0x00, /* 0000000000 */
4551
4552 /* 227 0xe3 '.' */
4553 0x00, 0x00, /* 0000000000 */
4554 0x00, 0x00, /* 0000000000 */
4555 0x00, 0x00, /* 0000000000 */
4556 0x00, 0x00, /* 0000000000 */
4557 0x00, 0x00, /* 0000000000 */
4558 0x00, 0x00, /* 0000000000 */
4559 0x7f, 0x80, /* 0111111110 */
4560 0x33, 0x00, /* 0011001100 */
4561 0x33, 0x00, /* 0011001100 */
4562 0x33, 0x00, /* 0011001100 */
4563 0x33, 0x00, /* 0011001100 */
4564 0x33, 0x00, /* 0011001100 */
4565 0x33, 0x00, /* 0011001100 */
4566 0x33, 0x00, /* 0011001100 */
4567 0x33, 0x00, /* 0011001100 */
4568 0x00, 0x00, /* 0000000000 */
4569 0x00, 0x00, /* 0000000000 */
4570 0x00, 0x00, /* 0000000000 */
4571
4572 /* 228 0xe4 '.' */
4573 0x00, 0x00, /* 0000000000 */
4574 0x00, 0x00, /* 0000000000 */
4575 0xff, 0x80, /* 1111111110 */
4576 0x60, 0x00, /* 0110000000 */
4577 0x30, 0x00, /* 0011000000 */
4578 0x30, 0x00, /* 0011000000 */
4579 0x18, 0x00, /* 0001100000 */
4580 0x18, 0x00, /* 0001100000 */
4581 0x0c, 0x00, /* 0000110000 */
4582 0x0c, 0x00, /* 0000110000 */
4583 0x18, 0x00, /* 0001100000 */
4584 0x30, 0x00, /* 0011000000 */
4585 0x30, 0x80, /* 0011000010 */
4586 0x61, 0x80, /* 0110000110 */
4587 0xff, 0x80, /* 1111111110 */
4588 0x00, 0x00, /* 0000000000 */
4589 0x00, 0x00, /* 0000000000 */
4590 0x00, 0x00, /* 0000000000 */
4591
4592 /* 229 0xe5 '.' */
4593 0x00, 0x00, /* 0000000000 */
4594 0x00, 0x00, /* 0000000000 */
4595 0x00, 0x00, /* 0000000000 */
4596 0x00, 0x00, /* 0000000000 */
4597 0x00, 0x00, /* 0000000000 */
4598 0x00, 0x00, /* 0000000000 */
4599 0x00, 0x00, /* 0000000000 */
4600 0x1f, 0xc0, /* 0001111111 */
4601 0x36, 0x00, /* 0011011000 */
4602 0x63, 0x00, /* 0110001100 */
4603 0x61, 0x80, /* 0110000110 */
4604 0x61, 0x80, /* 0110000110 */
4605 0x61, 0x80, /* 0110000110 */
4606 0x33, 0x00, /* 0011001100 */
4607 0x3e, 0x00, /* 0011111000 */
4608 0x00, 0x00, /* 0000000000 */
4609 0x00, 0x00, /* 0000000000 */
4610 0x00, 0x00, /* 0000000000 */
4611
4612 /* 230 0xe6 '.' */
4613 0x00, 0x00, /* 0000000000 */
4614 0x00, 0x00, /* 0000000000 */
4615 0x00, 0x00, /* 0000000000 */
4616 0x61, 0x80, /* 0110000110 */
4617 0x61, 0x80, /* 0110000110 */
4618 0x61, 0x80, /* 0110000110 */
4619 0x61, 0x80, /* 0110000110 */
4620 0x61, 0x80, /* 0110000110 */
4621 0x61, 0x80, /* 0110000110 */
4622 0x61, 0x80, /* 0110000110 */
4623 0x61, 0x80, /* 0110000110 */
4624 0x73, 0x80, /* 0111001110 */
4625 0x6d, 0x80, /* 0110110110 */
4626 0x60, 0x00, /* 0110000000 */
4627 0x60, 0x00, /* 0110000000 */
4628 0x60, 0x00, /* 0110000000 */
4629 0x60, 0x00, /* 0110000000 */
4630 0xc0, 0x00, /* 1100000000 */
4631
4632 /* 231 0xe7 '.' */
4633 0x00, 0x00, /* 0000000000 */
4634 0x00, 0x00, /* 0000000000 */
4635 0x00, 0x00, /* 0000000000 */
4636 0x01, 0x80, /* 0000000110 */
4637 0x36, 0x40, /* 0011011001 */
4638 0x5e, 0x00, /* 0101111000 */
4639 0x8c, 0x00, /* 1000110000 */
4640 0x0c, 0x00, /* 0000110000 */
4641 0x0c, 0x00, /* 0000110000 */
4642 0x0c, 0x00, /* 0000110000 */
4643 0x0c, 0x00, /* 0000110000 */
4644 0x0c, 0x00, /* 0000110000 */
4645 0x0c, 0x00, /* 0000110000 */
4646 0x0c, 0x00, /* 0000110000 */
4647 0x0c, 0x00, /* 0000110000 */
4648 0x00, 0x00, /* 0000000000 */
4649 0x00, 0x00, /* 0000000000 */
4650 0x00, 0x00, /* 0000000000 */
4651
4652 /* 232 0xe8 '.' */
4653 0x00, 0x00, /* 0000000000 */
4654 0x00, 0x00, /* 0000000000 */
4655 0x7f, 0x80, /* 0111111110 */
4656 0x0c, 0x00, /* 0000110000 */
4657 0x0c, 0x00, /* 0000110000 */
4658 0x1e, 0x00, /* 0001111000 */
4659 0x33, 0x00, /* 0011001100 */
4660 0x61, 0x80, /* 0110000110 */
4661 0x61, 0x80, /* 0110000110 */
4662 0x61, 0x80, /* 0110000110 */
4663 0x33, 0x00, /* 0011001100 */
4664 0x1e, 0x00, /* 0001111000 */
4665 0x0c, 0x00, /* 0000110000 */
4666 0x0c, 0x00, /* 0000110000 */
4667 0x7f, 0x80, /* 0111111110 */
4668 0x00, 0x00, /* 0000000000 */
4669 0x00, 0x00, /* 0000000000 */
4670 0x00, 0x00, /* 0000000000 */
4671
4672 /* 233 0xe9 '.' */
4673 0x00, 0x00, /* 0000000000 */
4674 0x00, 0x00, /* 0000000000 */
4675 0x00, 0x00, /* 0000000000 */
4676 0x0e, 0x00, /* 0000111000 */
4677 0x1f, 0x00, /* 0001111100 */
4678 0x31, 0x80, /* 0011000110 */
4679 0x31, 0x80, /* 0011000110 */
4680 0x60, 0xc0, /* 0110000011 */
4681 0x7f, 0xc0, /* 0111111111 */
4682 0x7f, 0xc0, /* 0111111111 */
4683 0x60, 0xc0, /* 0110000011 */
4684 0x31, 0x80, /* 0011000110 */
4685 0x31, 0x80, /* 0011000110 */
4686 0x1f, 0x00, /* 0001111100 */
4687 0x0e, 0x00, /* 0000111000 */
4688 0x00, 0x00, /* 0000000000 */
4689 0x00, 0x00, /* 0000000000 */
4690 0x00, 0x00, /* 0000000000 */
4691
4692 /* 234 0xea '.' */
4693 0x00, 0x00, /* 0000000000 */
4694 0x00, 0x00, /* 0000000000 */
4695 0x00, 0x00, /* 0000000000 */
4696 0x00, 0x00, /* 0000000000 */
4697 0x1e, 0x00, /* 0001111000 */
4698 0x33, 0x00, /* 0011001100 */
4699 0x61, 0x80, /* 0110000110 */
4700 0xc0, 0xc0, /* 1100000011 */
4701 0xc0, 0xc0, /* 1100000011 */
4702 0xc0, 0xc0, /* 1100000011 */
4703 0x61, 0x80, /* 0110000110 */
4704 0x33, 0x00, /* 0011001100 */
4705 0x33, 0x00, /* 0011001100 */
4706 0x33, 0x00, /* 0011001100 */
4707 0x33, 0x00, /* 0011001100 */
4708 0xf3, 0xc0, /* 1111001111 */
4709 0x00, 0x00, /* 0000000000 */
4710 0x00, 0x00, /* 0000000000 */
4711
4712 /* 235 0xeb '.' */
4713 0x00, 0x00, /* 0000000000 */
4714 0x07, 0x00, /* 0000011100 */
4715 0x1f, 0x80, /* 0001111110 */
4716 0x30, 0xc0, /* 0011000011 */
4717 0x30, 0x00, /* 0011000000 */
4718 0x18, 0x00, /* 0001100000 */
4719 0x0c, 0x00, /* 0000110000 */
4720 0x0c, 0x00, /* 0000110000 */
4721 0x3e, 0x00, /* 0011111000 */
4722 0x66, 0x00, /* 0110011000 */
4723 0xc3, 0x00, /* 1100001100 */
4724 0xc3, 0x00, /* 1100001100 */
4725 0xc3, 0x00, /* 1100001100 */
4726 0x66, 0x00, /* 0110011000 */
4727 0x3c, 0x00, /* 0011110000 */
4728 0x18, 0x00, /* 0001100000 */
4729 0x00, 0x00, /* 0000000000 */
4730 0x00, 0x00, /* 0000000000 */
4731
4732 /* 236 0xec '.' */
4733 0x00, 0x00, /* 0000000000 */
4734 0x00, 0x00, /* 0000000000 */
4735 0x00, 0x00, /* 0000000000 */
4736 0x00, 0x00, /* 0000000000 */
4737 0x00, 0x00, /* 0000000000 */
4738 0x33, 0x00, /* 0011001100 */
4739 0x6d, 0x80, /* 0110110110 */
4740 0xcc, 0xc0, /* 1100110011 */
4741 0xcc, 0xc0, /* 1100110011 */
4742 0xcc, 0xc0, /* 1100110011 */
4743 0xcc, 0xc0, /* 1100110011 */
4744 0x6d, 0x80, /* 0110110110 */
4745 0x33, 0x00, /* 0011001100 */
4746 0x00, 0x00, /* 0000000000 */
4747 0x00, 0x00, /* 0000000000 */
4748 0x00, 0x00, /* 0000000000 */
4749 0x00, 0x00, /* 0000000000 */
4750 0x00, 0x00, /* 0000000000 */
4751
4752 /* 237 0xed '.' */
4753 0x00, 0x00, /* 0000000000 */
4754 0x01, 0x80, /* 0000000110 */
4755 0x01, 0x80, /* 0000000110 */
4756 0x03, 0x00, /* 0000001100 */
4757 0x03, 0x00, /* 0000001100 */
4758 0x37, 0x00, /* 0011011100 */
4759 0x6d, 0x80, /* 0110110110 */
4760 0xcc, 0xc0, /* 1100110011 */
4761 0xcc, 0xc0, /* 1100110011 */
4762 0xcc, 0xc0, /* 1100110011 */
4763 0xcc, 0xc0, /* 1100110011 */
4764 0x6d, 0x80, /* 0110110110 */
4765 0x3b, 0x00, /* 0011101100 */
4766 0x30, 0x00, /* 0011000000 */
4767 0x30, 0x00, /* 0011000000 */
4768 0x60, 0x00, /* 0110000000 */
4769 0x60, 0x00, /* 0110000000 */
4770 0x00, 0x00, /* 0000000000 */
4771
4772 /* 238 0xee '.' */
4773 0x00, 0x00, /* 0000000000 */
4774 0x03, 0x80, /* 0000001110 */
4775 0x0e, 0x00, /* 0000111000 */
4776 0x18, 0x00, /* 0001100000 */
4777 0x18, 0x00, /* 0001100000 */
4778 0x30, 0x00, /* 0011000000 */
4779 0x30, 0x00, /* 0011000000 */
4780 0x3f, 0x80, /* 0011111110 */
4781 0x3f, 0x80, /* 0011111110 */
4782 0x30, 0x00, /* 0011000000 */
4783 0x30, 0x00, /* 0011000000 */
4784 0x18, 0x00, /* 0001100000 */
4785 0x18, 0x00, /* 0001100000 */
4786 0x0e, 0x00, /* 0000111000 */
4787 0x03, 0x80, /* 0000001110 */
4788 0x00, 0x00, /* 0000000000 */
4789 0x00, 0x00, /* 0000000000 */
4790 0x00, 0x00, /* 0000000000 */
4791
4792 /* 239 0xef '.' */
4793 0x00, 0x00, /* 0000000000 */
4794 0x00, 0x00, /* 0000000000 */
4795 0x00, 0x00, /* 0000000000 */
4796 0x00, 0x00, /* 0000000000 */
4797 0x1e, 0x00, /* 0001111000 */
4798 0x33, 0x00, /* 0011001100 */
4799 0x61, 0x80, /* 0110000110 */
4800 0x61, 0x80, /* 0110000110 */
4801 0x61, 0x80, /* 0110000110 */
4802 0x61, 0x80, /* 0110000110 */
4803 0x61, 0x80, /* 0110000110 */
4804 0x61, 0x80, /* 0110000110 */
4805 0x61, 0x80, /* 0110000110 */
4806 0x61, 0x80, /* 0110000110 */
4807 0x61, 0x80, /* 0110000110 */
4808 0x00, 0x00, /* 0000000000 */
4809 0x00, 0x00, /* 0000000000 */
4810 0x00, 0x00, /* 0000000000 */
4811
4812 /* 240 0xf0 '.' */
4813 0x00, 0x00, /* 0000000000 */
4814 0x00, 0x00, /* 0000000000 */
4815 0x00, 0x00, /* 0000000000 */
4816 0x00, 0x00, /* 0000000000 */
4817 0x00, 0x00, /* 0000000000 */
4818 0x7f, 0x80, /* 0111111110 */
4819 0x7f, 0x80, /* 0111111110 */
4820 0x00, 0x00, /* 0000000000 */
4821 0x00, 0x00, /* 0000000000 */
4822 0x7f, 0x80, /* 0111111110 */
4823 0x7f, 0x80, /* 0111111110 */
4824 0x00, 0x00, /* 0000000000 */
4825 0x00, 0x00, /* 0000000000 */
4826 0x7f, 0x80, /* 0111111110 */
4827 0x7f, 0x80, /* 0111111110 */
4828 0x00, 0x00, /* 0000000000 */
4829 0x00, 0x00, /* 0000000000 */
4830 0x00, 0x00, /* 0000000000 */
4831
4832 /* 241 0xf1 '.' */
4833 0x00, 0x00, /* 0000000000 */
4834 0x00, 0x00, /* 0000000000 */
4835 0x0c, 0x00, /* 0000110000 */
4836 0x0c, 0x00, /* 0000110000 */
4837 0x0c, 0x00, /* 0000110000 */
4838 0x0c, 0x00, /* 0000110000 */
4839 0x7f, 0x80, /* 0111111110 */
4840 0x7f, 0x80, /* 0111111110 */
4841 0x0c, 0x00, /* 0000110000 */
4842 0x0c, 0x00, /* 0000110000 */
4843 0x0c, 0x00, /* 0000110000 */
4844 0x0c, 0x00, /* 0000110000 */
4845 0x00, 0x00, /* 0000000000 */
4846 0x7f, 0x80, /* 0111111110 */
4847 0x7f, 0x80, /* 0111111110 */
4848 0x00, 0x00, /* 0000000000 */
4849 0x00, 0x00, /* 0000000000 */
4850 0x00, 0x00, /* 0000000000 */
4851
4852 /* 242 0xf2 '.' */
4853 0x00, 0x00, /* 0000000000 */
4854 0x00, 0x00, /* 0000000000 */
4855 0x00, 0x00, /* 0000000000 */
4856 0x00, 0x00, /* 0000000000 */
4857 0x00, 0x00, /* 0000000000 */
4858 0xe0, 0x00, /* 1110000000 */
4859 0x38, 0x00, /* 0011100000 */
4860 0x0e, 0x00, /* 0000111000 */
4861 0x03, 0x80, /* 0000001110 */
4862 0x0e, 0x00, /* 0000111000 */
4863 0x38, 0x00, /* 0011100000 */
4864 0xe0, 0x00, /* 1110000000 */
4865 0x00, 0x00, /* 0000000000 */
4866 0xff, 0x00, /* 1111111100 */
4867 0xff, 0x00, /* 1111111100 */
4868 0x00, 0x00, /* 0000000000 */
4869 0x00, 0x00, /* 0000000000 */
4870 0x00, 0x00, /* 0000000000 */
4871
4872 /* 243 0xf3 '.' */
4873 0x00, 0x00, /* 0000000000 */
4874 0x00, 0x00, /* 0000000000 */
4875 0x00, 0x00, /* 0000000000 */
4876 0x00, 0x00, /* 0000000000 */
4877 0x00, 0x00, /* 0000000000 */
4878 0x03, 0x80, /* 0000001110 */
4879 0x0e, 0x00, /* 0000111000 */
4880 0x38, 0x00, /* 0011100000 */
4881 0xe0, 0x00, /* 1110000000 */
4882 0x38, 0x00, /* 0011100000 */
4883 0x0e, 0x00, /* 0000111000 */
4884 0x03, 0x80, /* 0000001110 */
4885 0x00, 0x00, /* 0000000000 */
4886 0xff, 0x80, /* 1111111110 */
4887 0xff, 0x80, /* 1111111110 */
4888 0x00, 0x00, /* 0000000000 */
4889 0x00, 0x00, /* 0000000000 */
4890 0x00, 0x00, /* 0000000000 */
4891
4892 /* 244 0xf4 '.' */
4893 0x00, 0x00, /* 0000000000 */
4894 0x00, 0x00, /* 0000000000 */
4895 0x1e, 0x00, /* 0001111000 */
4896 0x33, 0x00, /* 0011001100 */
4897 0x33, 0x00, /* 0011001100 */
4898 0x30, 0x00, /* 0011000000 */
4899 0x30, 0x00, /* 0011000000 */
4900 0x30, 0x00, /* 0011000000 */
4901 0x30, 0x00, /* 0011000000 */
4902 0x30, 0x00, /* 0011000000 */
4903 0x30, 0x00, /* 0011000000 */
4904 0x30, 0x00, /* 0011000000 */
4905 0x30, 0x00, /* 0011000000 */
4906 0x30, 0x00, /* 0011000000 */
4907 0x30, 0x00, /* 0011000000 */
4908 0x30, 0x00, /* 0011000000 */
4909 0x30, 0x00, /* 0011000000 */
4910 0x00, 0x00, /* 0000000000 */
4911
4912 /* 245 0xf5 '.' */
4913 0x00, 0x00, /* 0000000000 */
4914 0x00, 0x00, /* 0000000000 */
4915 0x1e, 0x00, /* 0001111000 */
4916 0x33, 0x00, /* 0011001100 */
4917 0x33, 0x00, /* 0011001100 */
4918 0x03, 0x00, /* 0000001100 */
4919 0x03, 0x00, /* 0000001100 */
4920 0x03, 0x00, /* 0000001100 */
4921 0x03, 0x00, /* 0000001100 */
4922 0x03, 0x00, /* 0000001100 */
4923 0x03, 0x00, /* 0000001100 */
4924 0x03, 0x00, /* 0000001100 */
4925 0x03, 0x00, /* 0000001100 */
4926 0x03, 0x00, /* 0000001100 */
4927 0x03, 0x00, /* 0000001100 */
4928 0x03, 0x00, /* 0000001100 */
4929 0x03, 0x00, /* 0000001100 */
4930 0x00, 0x00, /* 0000000000 */
4931
4932 /* 246 0xf6 '.' */
4933 0x00, 0x00, /* 0000000000 */
4934 0x00, 0x00, /* 0000000000 */
4935 0x00, 0x00, /* 0000000000 */
4936 0x00, 0x00, /* 0000000000 */
4937 0x00, 0x00, /* 0000000000 */
4938 0x0c, 0x00, /* 0000110000 */
4939 0x0c, 0x00, /* 0000110000 */
4940 0x00, 0x00, /* 0000000000 */
4941 0x00, 0x00, /* 0000000000 */
4942 0x7f, 0x80, /* 0111111110 */
4943 0x7f, 0x80, /* 0111111110 */
4944 0x00, 0x00, /* 0000000000 */
4945 0x00, 0x00, /* 0000000000 */
4946 0x0c, 0x00, /* 0000110000 */
4947 0x0c, 0x00, /* 0000110000 */
4948 0x00, 0x00, /* 0000000000 */
4949 0x00, 0x00, /* 0000000000 */
4950 0x00, 0x00, /* 0000000000 */
4951
4952 /* 247 0xf7 '.' */
4953 0x00, 0x00, /* 0000000000 */
4954 0x00, 0x00, /* 0000000000 */
4955 0x00, 0x00, /* 0000000000 */
4956 0x00, 0x00, /* 0000000000 */
4957 0x00, 0x00, /* 0000000000 */
4958 0x00, 0x00, /* 0000000000 */
4959 0x38, 0x00, /* 0011100000 */
4960 0x6c, 0x00, /* 0110110000 */
4961 0x06, 0xc0, /* 0000011011 */
4962 0x03, 0x80, /* 0000001110 */
4963 0x38, 0x00, /* 0011100000 */
4964 0x6c, 0x00, /* 0110110000 */
4965 0x06, 0xc0, /* 0000011011 */
4966 0x03, 0x80, /* 0000001110 */
4967 0x00, 0x00, /* 0000000000 */
4968 0x00, 0x00, /* 0000000000 */
4969 0x00, 0x00, /* 0000000000 */
4970 0x00, 0x00, /* 0000000000 */
4971
4972 /* 248 0xf8 '.' */
4973 0x00, 0x00, /* 0000000000 */
4974 0x1e, 0x00, /* 0001111000 */
4975 0x33, 0x00, /* 0011001100 */
4976 0x33, 0x00, /* 0011001100 */
4977 0x1e, 0x00, /* 0001111000 */
4978 0x00, 0x00, /* 0000000000 */
4979 0x00, 0x00, /* 0000000000 */
4980 0x00, 0x00, /* 0000000000 */
4981 0x00, 0x00, /* 0000000000 */
4982 0x00, 0x00, /* 0000000000 */
4983 0x00, 0x00, /* 0000000000 */
4984 0x00, 0x00, /* 0000000000 */
4985 0x00, 0x00, /* 0000000000 */
4986 0x00, 0x00, /* 0000000000 */
4987 0x00, 0x00, /* 0000000000 */
4988 0x00, 0x00, /* 0000000000 */
4989 0x00, 0x00, /* 0000000000 */
4990 0x00, 0x00, /* 0000000000 */
4991
4992 /* 249 0xf9 '.' */
4993 0x00, 0x00, /* 0000000000 */
4994 0x00, 0x00, /* 0000000000 */
4995 0x00, 0x00, /* 0000000000 */
4996 0x00, 0x00, /* 0000000000 */
4997 0x00, 0x00, /* 0000000000 */
4998 0x00, 0x00, /* 0000000000 */
4999 0x00, 0x00, /* 0000000000 */
5000 0x00, 0x00, /* 0000000000 */
5001 0x0c, 0x00, /* 0000110000 */
5002 0x1e, 0x00, /* 0001111000 */
5003 0x1e, 0x00, /* 0001111000 */
5004 0x0c, 0x00, /* 0000110000 */
5005 0x00, 0x00, /* 0000000000 */
5006 0x00, 0x00, /* 0000000000 */
5007 0x00, 0x00, /* 0000000000 */
5008 0x00, 0x00, /* 0000000000 */
5009 0x00, 0x00, /* 0000000000 */
5010 0x00, 0x00, /* 0000000000 */
5011
5012 /* 250 0xfa '.' */
5013 0x00, 0x00, /* 0000000000 */
5014 0x00, 0x00, /* 0000000000 */
5015 0x00, 0x00, /* 0000000000 */
5016 0x00, 0x00, /* 0000000000 */
5017 0x00, 0x00, /* 0000000000 */
5018 0x00, 0x00, /* 0000000000 */
5019 0x00, 0x00, /* 0000000000 */
5020 0x00, 0x00, /* 0000000000 */
5021 0x00, 0x00, /* 0000000000 */
5022 0x0c, 0x00, /* 0000110000 */
5023 0x0c, 0x00, /* 0000110000 */
5024 0x00, 0x00, /* 0000000000 */
5025 0x00, 0x00, /* 0000000000 */
5026 0x00, 0x00, /* 0000000000 */
5027 0x00, 0x00, /* 0000000000 */
5028 0x00, 0x00, /* 0000000000 */
5029 0x00, 0x00, /* 0000000000 */
5030 0x00, 0x00, /* 0000000000 */
5031
5032 /* 251 0xfb '.' */
5033 0x00, 0x00, /* 0000000000 */
5034 0x00, 0x00, /* 0000000000 */
5035 0x0f, 0xc0, /* 0000111111 */
5036 0x0f, 0xc0, /* 0000111111 */
5037 0x0c, 0x00, /* 0000110000 */
5038 0x0c, 0x00, /* 0000110000 */
5039 0x0c, 0x00, /* 0000110000 */
5040 0x0c, 0x00, /* 0000110000 */
5041 0x0c, 0x00, /* 0000110000 */
5042 0x0c, 0x00, /* 0000110000 */
5043 0xcc, 0x00, /* 1100110000 */
5044 0x6c, 0x00, /* 0110110000 */
5045 0x3c, 0x00, /* 0011110000 */
5046 0x1c, 0x00, /* 0001110000 */
5047 0x0c, 0x00, /* 0000110000 */
5048 0x00, 0x00, /* 0000000000 */
5049 0x00, 0x00, /* 0000000000 */
5050 0x00, 0x00, /* 0000000000 */
5051
5052 /* 252 0xfc '.' */
5053 0x00, 0x00, /* 0000000000 */
5054 0x27, 0x00, /* 0010011100 */
5055 0x7b, 0x00, /* 0111101100 */
5056 0x31, 0x00, /* 0011000100 */
5057 0x31, 0x00, /* 0011000100 */
5058 0x31, 0x00, /* 0011000100 */
5059 0x7b, 0x80, /* 0111101110 */
5060 0x00, 0x00, /* 0000000000 */
5061 0x00, 0x00, /* 0000000000 */
5062 0x00, 0x00, /* 0000000000 */
5063 0x00, 0x00, /* 0000000000 */
5064 0x00, 0x00, /* 0000000000 */
5065 0x00, 0x00, /* 0000000000 */
5066 0x00, 0x00, /* 0000000000 */
5067 0x00, 0x00, /* 0000000000 */
5068 0x00, 0x00, /* 0000000000 */
5069 0x00, 0x00, /* 0000000000 */
5070 0x00, 0x00, /* 0000000000 */
5071
5072 /* 253 0xfd '.' */
5073 0x00, 0x00, /* 0000000000 */
5074 0x1e, 0x00, /* 0001111000 */
5075 0x3f, 0x00, /* 0011111100 */
5076 0x63, 0x00, /* 0110001100 */
5077 0x43, 0x00, /* 0100001100 */
5078 0x06, 0x00, /* 0000011000 */
5079 0x0c, 0x00, /* 0000110000 */
5080 0x18, 0x00, /* 0001100000 */
5081 0x30, 0x80, /* 0011000010 */
5082 0x7f, 0x80, /* 0111111110 */
5083 0x7f, 0x80, /* 0111111110 */
5084 0x00, 0x00, /* 0000000000 */
5085 0x00, 0x00, /* 0000000000 */
5086 0x00, 0x00, /* 0000000000 */
5087 0x00, 0x00, /* 0000000000 */
5088 0x00, 0x00, /* 0000000000 */
5089 0x00, 0x00, /* 0000000000 */
5090 0x00, 0x00, /* 0000000000 */
5091
5092 /* 254 0xfe '.' */
5093 0x00, 0x00, /* 0000000000 */
5094 0x00, 0x00, /* 0000000000 */
5095 0x00, 0x00, /* 0000000000 */
5096 0x3f, 0x00, /* 0011111100 */
5097 0x3f, 0x00, /* 0011111100 */
5098 0x3f, 0x00, /* 0011111100 */
5099 0x3f, 0x00, /* 0011111100 */
5100 0x3f, 0x00, /* 0011111100 */
5101 0x3f, 0x00, /* 0011111100 */
5102 0x3f, 0x00, /* 0011111100 */
5103 0x3f, 0x00, /* 0011111100 */
5104 0x3f, 0x00, /* 0011111100 */
5105 0x3f, 0x00, /* 0011111100 */
5106 0x3f, 0x00, /* 0011111100 */
5107 0x3f, 0x00, /* 0011111100 */
5108 0x00, 0x00, /* 0000000000 */
5109 0x00, 0x00, /* 0000000000 */
5110 0x00, 0x00, /* 0000000000 */
5111
5112 /* 255 0xff '.' */
5113 0x00, 0x00, /* 0000000000 */
5114 0x00, 0x00, /* 0000000000 */
5115 0x00, 0x00, /* 0000000000 */
5116 0x00, 0x00, /* 0000000000 */
5117 0x00, 0x00, /* 0000000000 */
5118 0x00, 0x00, /* 0000000000 */
5119 0x00, 0x00, /* 0000000000 */
5120 0x00, 0x00, /* 0000000000 */
5121 0x00, 0x00, /* 0000000000 */
5122 0x00, 0x00, /* 0000000000 */
5123 0x00, 0x00, /* 0000000000 */
5124 0x00, 0x00, /* 0000000000 */
5125 0x00, 0x00, /* 0000000000 */
5126 0x00, 0x00, /* 0000000000 */
5127 0x00, 0x00, /* 0000000000 */
5128 0x00, 0x00, /* 0000000000 */
5129 0x00, 0x00, /* 0000000000 */
5130 0x00, 0x00, /* 0000000000 */
5131
5132};
5133
5134
5135struct font_desc font_10x18 = {
5136 FONT10x18_IDX,
5137 "10x18",
5138 10,
5139 18,
5140 fontdata_10x18,
5141#ifdef __sparc__
5142 5
5143#else
5144 -1
5145#endif
5146};
diff --git a/drivers/video/console/font_7x14.c b/drivers/video/console/font_7x14.c
new file mode 100644
index 000000000000..1fa7fcf2ff72
--- /dev/null
+++ b/drivers/video/console/font_7x14.c
@@ -0,0 +1,4118 @@
1/**************************************/
2/* this file adapted from font_8x16.c */
3/* by Jurriaan Kalkman 05-2005 */
4/**************************************/
5
6#include <linux/font.h>
7
8#define FONTDATAMAX 3584
9
10static unsigned char fontdata_7x14[FONTDATAMAX] = {
11
12 /* 0 0x00 '^@' */
13 0x00, /* 0000000 */
14 0x00, /* 0000000 */
15 0x00, /* 0000000 */
16 0x00, /* 0000000 */
17 0x00, /* 0000000 */
18 0x00, /* 0000000 */
19 0x00, /* 0000000 */
20 0x00, /* 0000000 */
21 0x00, /* 0000000 */
22 0x00, /* 0000000 */
23 0x00, /* 0000000 */
24 0x00, /* 0000000 */
25 0x00, /* 0000000 */
26 0x00, /* 0000000 */
27
28 /* 1 0x01 '^A' */
29 0x00, /* 0000000 */
30 0x7c, /* 0111110 */
31 0x82, /* 1000001 */
32 0xaa, /* 1010101 */
33 0x82, /* 1000001 */
34 0x82, /* 1000001 */
35 0xba, /* 1011101 */
36 0x92, /* 1001001 */
37 0x82, /* 1000001 */
38 0x7c, /* 0111110 */
39 0x00, /* 0000000 */
40 0x00, /* 0000000 */
41 0x00, /* 0000000 */
42 0x00, /* 0000000 */
43
44 /* 2 0x02 '^B' */
45 0x00, /* 0000000 */
46 0x7c, /* 0111110 */
47 0xfe, /* 1111111 */
48 0xd6, /* 1101011 */
49 0xfe, /* 1111111 */
50 0xfe, /* 1111111 */
51 0xc6, /* 1100011 */
52 0xee, /* 1110111 */
53 0xfe, /* 1111111 */
54 0xfe, /* 1111111 */
55 0x7c, /* 0111110 */
56 0x00, /* 0000000 */
57 0x00, /* 0000000 */
58 0x00, /* 0000000 */
59
60 /* 3 0x03 '^C' */
61 0x00, /* 0000000 */
62 0x00, /* 0000000 */
63 0x00, /* 0000000 */
64 0x00, /* 0000000 */
65 0x6c, /* 0110110 */
66 0x7c, /* 0111110 */
67 0xfe, /* 1111111 */
68 0x7c, /* 0111110 */
69 0x38, /* 0011100 */
70 0x18, /* 0001100 */
71 0x10, /* 0001000 */
72 0x00, /* 0000000 */
73 0x00, /* 0000000 */
74 0x00, /* 0000000 */
75
76 /* 4 0x04 '^D' */
77 0x00, /* 0000000 */
78 0x00, /* 0000000 */
79 0x00, /* 0000000 */
80 0x10, /* 0001000 */
81 0x38, /* 0011100 */
82 0x7c, /* 0111110 */
83 0xfe, /* 1111111 */
84 0x7c, /* 0111110 */
85 0x38, /* 0011100 */
86 0x10, /* 0001000 */
87 0x00, /* 0000000 */
88 0x00, /* 0000000 */
89 0x00, /* 0000000 */
90 0x00, /* 0000000 */
91
92 /* 5 0x05 '^E' */
93 0x00, /* 0000000 */
94 0x00, /* 0000000 */
95 0x38, /* 0011100 */
96 0x38, /* 0011100 */
97 0x38, /* 0011100 */
98 0xee, /* 1110111 */
99 0xee, /* 1110111 */
100 0xee, /* 1110111 */
101 0x10, /* 0001000 */
102 0x10, /* 0001000 */
103 0x38, /* 0011100 */
104 0x00, /* 0000000 */
105 0x00, /* 0000000 */
106 0x00, /* 0000000 */
107
108 /* 6 0x06 '^F' */
109 0x00, /* 0000000 */
110 0x00, /* 0000000 */
111 0x10, /* 0001000 */
112 0x38, /* 0011100 */
113 0x7c, /* 0111110 */
114 0xfe, /* 1111111 */
115 0xfe, /* 1111111 */
116 0x7c, /* 0111110 */
117 0x10, /* 0001000 */
118 0x10, /* 0001000 */
119 0x38, /* 0011100 */
120 0x00, /* 0000000 */
121 0x00, /* 0000000 */
122 0x00, /* 0000000 */
123
124 /* 7 0x07 '^G' */
125 0x00, /* 0000000 */
126 0x00, /* 0000000 */
127 0x00, /* 0000000 */
128 0x00, /* 0000000 */
129 0x00, /* 0000000 */
130 0x18, /* 0001100 */
131 0x3c, /* 0011110 */
132 0x3c, /* 0011110 */
133 0x18, /* 0001100 */
134 0x00, /* 0000000 */
135 0x00, /* 0000000 */
136 0x00, /* 0000000 */
137 0x00, /* 0000000 */
138 0x00, /* 0000000 */
139
140 /* 8 0x08 '^H' */
141 0xfe, /* 1111111 */
142 0xfe, /* 1111111 */
143 0xfe, /* 1111111 */
144 0xfe, /* 1111111 */
145 0xfe, /* 1111111 */
146 0xe6, /* 1110011 */
147 0xc2, /* 1100001 */
148 0xc2, /* 1100001 */
149 0xe6, /* 1110011 */
150 0xfe, /* 1111111 */
151 0xfe, /* 1111111 */
152 0xfe, /* 1111111 */
153 0xfe, /* 1111111 */
154 0xfe, /* 1111111 */
155
156 /* 9 0x09 '^I' */
157 0x00, /* 0000000 */
158 0x00, /* 0000000 */
159 0x00, /* 0000000 */
160 0x00, /* 0000000 */
161 0x00, /* 0000000 */
162 0x38, /* 0011100 */
163 0x6c, /* 0110110 */
164 0x44, /* 0100010 */
165 0x6c, /* 0110110 */
166 0x38, /* 0011100 */
167 0x00, /* 0000000 */
168 0x00, /* 0000000 */
169 0x00, /* 0000000 */
170 0x00, /* 0000000 */
171
172 /* 10 0x0a '^J' */
173 0xfe, /* 1111111 */
174 0xfe, /* 1111111 */
175 0xfe, /* 1111111 */
176 0xfe, /* 1111111 */
177 0xfe, /* 1111111 */
178 0xc6, /* 1100011 */
179 0x92, /* 1001001 */
180 0xba, /* 1011101 */
181 0x92, /* 1001001 */
182 0xc6, /* 1100011 */
183 0xfe, /* 1111111 */
184 0xfe, /* 1111111 */
185 0xfe, /* 1111111 */
186 0xfe, /* 1111111 */
187
188 /* 11 0x0b '^K' */
189 0x00, /* 0000000 */
190 0x1e, /* 0001111 */
191 0x0e, /* 0000111 */
192 0x1a, /* 0001101 */
193 0x1a, /* 0001101 */
194 0x78, /* 0111100 */
195 0xcc, /* 1100110 */
196 0xcc, /* 1100110 */
197 0xcc, /* 1100110 */
198 0xcc, /* 1100110 */
199 0x78, /* 0111100 */
200 0x00, /* 0000000 */
201 0x00, /* 0000000 */
202 0x00, /* 0000000 */
203
204 /* 12 0x0c '^L' */
205 0x00, /* 0000000 */
206 0x3c, /* 0011110 */
207 0x66, /* 0110011 */
208 0x66, /* 0110011 */
209 0x66, /* 0110011 */
210 0x66, /* 0110011 */
211 0x3c, /* 0011110 */
212 0x18, /* 0001100 */
213 0x7e, /* 0111111 */
214 0x18, /* 0001100 */
215 0x18, /* 0001100 */
216 0x00, /* 0000000 */
217 0x00, /* 0000000 */
218 0x00, /* 0000000 */
219
220 /* 13 0x0d '^M' */
221 0x00, /* 0000000 */
222 0x3e, /* 0011111 */
223 0x36, /* 0011011 */
224 0x3e, /* 0011111 */
225 0x30, /* 0011000 */
226 0x30, /* 0011000 */
227 0x30, /* 0011000 */
228 0x30, /* 0011000 */
229 0x70, /* 0111000 */
230 0xf0, /* 1111000 */
231 0xe0, /* 1110000 */
232 0x00, /* 0000000 */
233 0x00, /* 0000000 */
234 0x00, /* 0000000 */
235
236 /* 14 0x0e '^N' */
237 0x00, /* 0000000 */
238 0x7e, /* 0111111 */
239 0x66, /* 0110011 */
240 0x7e, /* 0111111 */
241 0x66, /* 0110011 */
242 0x66, /* 0110011 */
243 0x66, /* 0110011 */
244 0x66, /* 0110011 */
245 0x6e, /* 0110111 */
246 0xee, /* 1110111 */
247 0xec, /* 1110110 */
248 0xc0, /* 1100000 */
249 0x00, /* 0000000 */
250 0x00, /* 0000000 */
251
252 /* 15 0x0f '^O' */
253 0x00, /* 0000000 */
254 0x00, /* 0000000 */
255 0x10, /* 0001000 */
256 0x10, /* 0001000 */
257 0xd6, /* 1101011 */
258 0x38, /* 0011100 */
259 0xee, /* 1110111 */
260 0x38, /* 0011100 */
261 0xd6, /* 1101011 */
262 0x10, /* 0001000 */
263 0x10, /* 0001000 */
264 0x00, /* 0000000 */
265 0x00, /* 0000000 */
266 0x00, /* 0000000 */
267
268 /* 16 0x10 '^P' */
269 0x00, /* 0000000 */
270 0x80, /* 1000000 */
271 0xc0, /* 1100000 */
272 0xe0, /* 1110000 */
273 0xf0, /* 1111000 */
274 0xfc, /* 1111110 */
275 0xf0, /* 1111000 */
276 0xe0, /* 1110000 */
277 0xc0, /* 1100000 */
278 0x80, /* 1000000 */
279 0x00, /* 0000000 */
280 0x00, /* 0000000 */
281 0x00, /* 0000000 */
282 0x00, /* 0000000 */
283
284 /* 17 0x11 '^Q' */
285 0x00, /* 0000000 */
286 0x04, /* 0000010 */
287 0x0c, /* 0000110 */
288 0x1c, /* 0001110 */
289 0x3c, /* 0011110 */
290 0xfc, /* 1111110 */
291 0x3c, /* 0011110 */
292 0x1c, /* 0001110 */
293 0x0c, /* 0000110 */
294 0x04, /* 0000010 */
295 0x00, /* 0000000 */
296 0x00, /* 0000000 */
297 0x00, /* 0000000 */
298 0x00, /* 0000000 */
299
300 /* 18 0x12 '^R' */
301 0x00, /* 0000000 */
302 0x18, /* 0001100 */
303 0x3c, /* 0011110 */
304 0x7e, /* 0111111 */
305 0x18, /* 0001100 */
306 0x18, /* 0001100 */
307 0x18, /* 0001100 */
308 0x7e, /* 0111111 */
309 0x3c, /* 0011110 */
310 0x18, /* 0001100 */
311 0x00, /* 0000000 */
312 0x00, /* 0000000 */
313 0x00, /* 0000000 */
314 0x00, /* 0000000 */
315
316 /* 19 0x13 '^S' */
317 0x00, /* 0000000 */
318 0x6c, /* 0110110 */
319 0x6c, /* 0110110 */
320 0x6c, /* 0110110 */
321 0x6c, /* 0110110 */
322 0x6c, /* 0110110 */
323 0x6c, /* 0110110 */
324 0x6c, /* 0110110 */
325 0x00, /* 0000000 */
326 0x6c, /* 0110110 */
327 0x6c, /* 0110110 */
328 0x00, /* 0000000 */
329 0x00, /* 0000000 */
330 0x00, /* 0000000 */
331
332 /* 20 0x14 '^T' */
333 0x00, /* 0000000 */
334 0x7e, /* 0111111 */
335 0xd4, /* 1101010 */
336 0xd4, /* 1101010 */
337 0xd4, /* 1101010 */
338 0x74, /* 0111010 */
339 0x14, /* 0001010 */
340 0x14, /* 0001010 */
341 0x14, /* 0001010 */
342 0x14, /* 0001010 */
343 0x16, /* 0001011 */
344 0x00, /* 0000000 */
345 0x00, /* 0000000 */
346 0x00, /* 0000000 */
347
348 /* 21 0x15 '^U' */
349 0x78, /* 0111100 */
350 0xcc, /* 1100110 */
351 0x60, /* 0110000 */
352 0x38, /* 0011100 */
353 0x6c, /* 0110110 */
354 0xc6, /* 1100011 */
355 0xc6, /* 1100011 */
356 0x6c, /* 0110110 */
357 0x38, /* 0011100 */
358 0x18, /* 0001100 */
359 0xcc, /* 1100110 */
360 0x78, /* 0111100 */
361 0x00, /* 0000000 */
362 0x00, /* 0000000 */
363
364 /* 22 0x16 '^V' */
365 0x00, /* 0000000 */
366 0x00, /* 0000000 */
367 0x00, /* 0000000 */
368 0x00, /* 0000000 */
369 0x00, /* 0000000 */
370 0x00, /* 0000000 */
371 0x00, /* 0000000 */
372 0xfc, /* 1111110 */
373 0xfc, /* 1111110 */
374 0xfc, /* 1111110 */
375 0xfc, /* 1111110 */
376 0x00, /* 0000000 */
377 0x00, /* 0000000 */
378 0x00, /* 0000000 */
379
380 /* 23 0x17 '^W' */
381 0x00, /* 0000000 */
382 0x18, /* 0001100 */
383 0x3c, /* 0011110 */
384 0x7e, /* 0111111 */
385 0x18, /* 0001100 */
386 0x18, /* 0001100 */
387 0x18, /* 0001100 */
388 0x7e, /* 0111111 */
389 0x3c, /* 0011110 */
390 0x18, /* 0001100 */
391 0x7e, /* 0111111 */
392 0x00, /* 0000000 */
393 0x00, /* 0000000 */
394 0x00, /* 0000000 */
395
396 /* 24 0x18 '^X' */
397 0x00, /* 0000000 */
398 0x18, /* 0001100 */
399 0x3c, /* 0011110 */
400 0x7e, /* 0111111 */
401 0x18, /* 0001100 */
402 0x18, /* 0001100 */
403 0x18, /* 0001100 */
404 0x18, /* 0001100 */
405 0x18, /* 0001100 */
406 0x18, /* 0001100 */
407 0x18, /* 0001100 */
408 0x00, /* 0000000 */
409 0x00, /* 0000000 */
410 0x00, /* 0000000 */
411
412 /* 25 0x19 '^Y' */
413 0x00, /* 0000000 */
414 0x18, /* 0001100 */
415 0x18, /* 0001100 */
416 0x18, /* 0001100 */
417 0x18, /* 0001100 */
418 0x18, /* 0001100 */
419 0x18, /* 0001100 */
420 0x18, /* 0001100 */
421 0x7e, /* 0111111 */
422 0x3c, /* 0011110 */
423 0x18, /* 0001100 */
424 0x00, /* 0000000 */
425 0x00, /* 0000000 */
426 0x00, /* 0000000 */
427
428 /* 26 0x1a '^Z' */
429 0x00, /* 0000000 */
430 0x00, /* 0000000 */
431 0x00, /* 0000000 */
432 0x00, /* 0000000 */
433 0x30, /* 0011000 */
434 0x18, /* 0001100 */
435 0xfc, /* 1111110 */
436 0x18, /* 0001100 */
437 0x30, /* 0011000 */
438 0x00, /* 0000000 */
439 0x00, /* 0000000 */
440 0x00, /* 0000000 */
441 0x00, /* 0000000 */
442 0x00, /* 0000000 */
443
444 /* 27 0x1b '^[' */
445 0x00, /* 0000000 */
446 0x00, /* 0000000 */
447 0x00, /* 0000000 */
448 0x00, /* 0000000 */
449 0x30, /* 0011000 */
450 0x60, /* 0110000 */
451 0xfc, /* 1111110 */
452 0x60, /* 0110000 */
453 0x30, /* 0011000 */
454 0x00, /* 0000000 */
455 0x00, /* 0000000 */
456 0x00, /* 0000000 */
457 0x00, /* 0000000 */
458 0x00, /* 0000000 */
459
460 /* 28 0x1c '^\' */
461 0x00, /* 0000000 */
462 0x00, /* 0000000 */
463 0x00, /* 0000000 */
464 0x00, /* 0000000 */
465 0x00, /* 0000000 */
466 0xc0, /* 1100000 */
467 0xc0, /* 1100000 */
468 0xc0, /* 1100000 */
469 0xfc, /* 1111110 */
470 0x00, /* 0000000 */
471 0x00, /* 0000000 */
472 0x00, /* 0000000 */
473 0x00, /* 0000000 */
474 0x00, /* 0000000 */
475
476 /* 29 0x1d '^]' */
477 0x00, /* 0000000 */
478 0x00, /* 0000000 */
479 0x00, /* 0000000 */
480 0x00, /* 0000000 */
481 0x28, /* 0010100 */
482 0x6c, /* 0110110 */
483 0xfe, /* 1111111 */
484 0x6c, /* 0110110 */
485 0x28, /* 0010100 */
486 0x00, /* 0000000 */
487 0x00, /* 0000000 */
488 0x00, /* 0000000 */
489 0x00, /* 0000000 */
490 0x00, /* 0000000 */
491
492 /* 30 0x1e '^^' */
493 0x00, /* 0000000 */
494 0x00, /* 0000000 */
495 0x00, /* 0000000 */
496 0x00, /* 0000000 */
497 0x30, /* 0011000 */
498 0x30, /* 0011000 */
499 0x78, /* 0111100 */
500 0x78, /* 0111100 */
501 0xfc, /* 1111110 */
502 0xfc, /* 1111110 */
503 0x00, /* 0000000 */
504 0x00, /* 0000000 */
505 0x00, /* 0000000 */
506 0x00, /* 0000000 */
507
508 /* 31 0x1f '^_' */
509 0x00, /* 0000000 */
510 0x00, /* 0000000 */
511 0x00, /* 0000000 */
512 0x00, /* 0000000 */
513 0xfc, /* 1111110 */
514 0xfc, /* 1111110 */
515 0x78, /* 0111100 */
516 0x78, /* 0111100 */
517 0x30, /* 0011000 */
518 0x30, /* 0011000 */
519 0x00, /* 0000000 */
520 0x00, /* 0000000 */
521 0x00, /* 0000000 */
522 0x00, /* 0000000 */
523
524 /* 32 0x20 ' ' */
525 0x00, /* 0000000 */
526 0x00, /* 0000000 */
527 0x00, /* 0000000 */
528 0x00, /* 0000000 */
529 0x00, /* 0000000 */
530 0x00, /* 0000000 */
531 0x00, /* 0000000 */
532 0x00, /* 0000000 */
533 0x00, /* 0000000 */
534 0x00, /* 0000000 */
535 0x00, /* 0000000 */
536 0x00, /* 0000000 */
537 0x00, /* 0000000 */
538 0x00, /* 0000000 */
539
540 /* 33 0x21 '!' */
541 0x00, /* 0000000 */
542 0x18, /* 0001100 */
543 0x3c, /* 0011110 */
544 0x3c, /* 0011110 */
545 0x3c, /* 0011110 */
546 0x18, /* 0001100 */
547 0x18, /* 0001100 */
548 0x18, /* 0001100 */
549 0x00, /* 0000000 */
550 0x18, /* 0001100 */
551 0x18, /* 0001100 */
552 0x00, /* 0000000 */
553 0x00, /* 0000000 */
554 0x00, /* 0000000 */
555
556 /* 34 0x22 '"' */
557 0x00, /* 0000000 */
558 0x6c, /* 0110110 */
559 0x6c, /* 0110110 */
560 0x6c, /* 0110110 */
561 0x28, /* 0010100 */
562 0x00, /* 0000000 */
563 0x00, /* 0000000 */
564 0x00, /* 0000000 */
565 0x00, /* 0000000 */
566 0x00, /* 0000000 */
567 0x00, /* 0000000 */
568 0x00, /* 0000000 */
569 0x00, /* 0000000 */
570 0x00, /* 0000000 */
571
572 /* 35 0x23 '#' */
573 0x00, /* 0000000 */
574 0x6c, /* 0110110 */
575 0x6c, /* 0110110 */
576 0xfe, /* 1111111 */
577 0xfe, /* 1111111 */
578 0x6c, /* 0110110 */
579 0x6c, /* 0110110 */
580 0xfe, /* 1111111 */
581 0xfe, /* 1111111 */
582 0x6c, /* 0110110 */
583 0x6c, /* 0110110 */
584 0x00, /* 0000000 */
585 0x00, /* 0000000 */
586 0x00, /* 0000000 */
587
588 /* 36 0x24 '$' */
589 0x30, /* 0011000 */
590 0x30, /* 0011000 */
591 0x78, /* 0111100 */
592 0xcc, /* 1100110 */
593 0xc4, /* 1100010 */
594 0xc0, /* 1100000 */
595 0x78, /* 0111100 */
596 0x0c, /* 0000110 */
597 0x8c, /* 1000110 */
598 0xcc, /* 1100110 */
599 0x78, /* 0111100 */
600 0x30, /* 0011000 */
601 0x30, /* 0011000 */
602 0x00, /* 0000000 */
603
604 /* 37 0x25 '%' */
605 0x00, /* 0000000 */
606 0x00, /* 0000000 */
607 0x00, /* 0000000 */
608 0xc0, /* 1100000 */
609 0xc4, /* 1100010 */
610 0x0c, /* 0000110 */
611 0x18, /* 0001100 */
612 0x30, /* 0011000 */
613 0x60, /* 0110000 */
614 0xcc, /* 1100110 */
615 0x8c, /* 1000110 */
616 0x00, /* 0000000 */
617 0x00, /* 0000000 */
618 0x00, /* 0000000 */
619
620 /* 38 0x26 '&' */
621 0x00, /* 0000000 */
622 0x38, /* 0011100 */
623 0x6c, /* 0110110 */
624 0x6c, /* 0110110 */
625 0x38, /* 0011100 */
626 0x78, /* 0111100 */
627 0xde, /* 1101111 */
628 0xcc, /* 1100110 */
629 0xcc, /* 1100110 */
630 0xdc, /* 1101110 */
631 0x76, /* 0111011 */
632 0x00, /* 0000000 */
633 0x00, /* 0000000 */
634 0x00, /* 0000000 */
635
636 /* 39 0x27 ''' */
637 0x00, /* 0000000 */
638 0x30, /* 0011000 */
639 0x30, /* 0011000 */
640 0x30, /* 0011000 */
641 0x60, /* 0110000 */
642 0x00, /* 0000000 */
643 0x00, /* 0000000 */
644 0x00, /* 0000000 */
645 0x00, /* 0000000 */
646 0x00, /* 0000000 */
647 0x00, /* 0000000 */
648 0x00, /* 0000000 */
649 0x00, /* 0000000 */
650 0x00, /* 0000000 */
651
652 /* 40 0x28 '(' */
653 0x00, /* 0000000 */
654 0x0c, /* 0000110 */
655 0x18, /* 0001100 */
656 0x30, /* 0011000 */
657 0x30, /* 0011000 */
658 0x30, /* 0011000 */
659 0x30, /* 0011000 */
660 0x30, /* 0011000 */
661 0x30, /* 0011000 */
662 0x18, /* 0001100 */
663 0x0c, /* 0000110 */
664 0x00, /* 0000000 */
665 0x00, /* 0000000 */
666 0x00, /* 0000000 */
667
668 /* 41 0x29 ')' */
669 0x00, /* 0000000 */
670 0x30, /* 0011000 */
671 0x18, /* 0001100 */
672 0x0c, /* 0000110 */
673 0x0c, /* 0000110 */
674 0x0c, /* 0000110 */
675 0x0c, /* 0000110 */
676 0x0c, /* 0000110 */
677 0x0c, /* 0000110 */
678 0x18, /* 0001100 */
679 0x30, /* 0011000 */
680 0x00, /* 0000000 */
681 0x00, /* 0000000 */
682 0x00, /* 0000000 */
683
684 /* 42 0x2a '*' */
685 0x00, /* 0000000 */
686 0x00, /* 0000000 */
687 0x00, /* 0000000 */
688 0x00, /* 0000000 */
689 0x6c, /* 0110110 */
690 0x38, /* 0011100 */
691 0xfe, /* 1111111 */
692 0x38, /* 0011100 */
693 0x6c, /* 0110110 */
694 0x00, /* 0000000 */
695 0x00, /* 0000000 */
696 0x00, /* 0000000 */
697 0x00, /* 0000000 */
698 0x00, /* 0000000 */
699
700 /* 43 0x2b '+' */
701 0x00, /* 0000000 */
702 0x00, /* 0000000 */
703 0x00, /* 0000000 */
704 0x00, /* 0000000 */
705 0x10, /* 0001000 */
706 0x10, /* 0001000 */
707 0x7c, /* 0111110 */
708 0x10, /* 0001000 */
709 0x10, /* 0001000 */
710 0x00, /* 0000000 */
711 0x00, /* 0000000 */
712 0x00, /* 0000000 */
713 0x00, /* 0000000 */
714 0x00, /* 0000000 */
715
716 /* 44 0x2c ',' */
717 0x00, /* 0000000 */
718 0x00, /* 0000000 */
719 0x00, /* 0000000 */
720 0x00, /* 0000000 */
721 0x00, /* 0000000 */
722 0x00, /* 0000000 */
723 0x00, /* 0000000 */
724 0x00, /* 0000000 */
725 0x18, /* 0001100 */
726 0x18, /* 0001100 */
727 0x18, /* 0001100 */
728 0x30, /* 0011000 */
729 0x00, /* 0000000 */
730 0x00, /* 0000000 */
731
732 /* 45 0x2d '-' */
733 0x00, /* 0000000 */
734 0x00, /* 0000000 */
735 0x00, /* 0000000 */
736 0x00, /* 0000000 */
737 0x00, /* 0000000 */
738 0x00, /* 0000000 */
739 0xfc, /* 1111110 */
740 0x00, /* 0000000 */
741 0x00, /* 0000000 */
742 0x00, /* 0000000 */
743 0x00, /* 0000000 */
744 0x00, /* 0000000 */
745 0x00, /* 0000000 */
746 0x00, /* 0000000 */
747
748 /* 46 0x2e '.' */
749 0x00, /* 0000000 */
750 0x00, /* 0000000 */
751 0x00, /* 0000000 */
752 0x00, /* 0000000 */
753 0x00, /* 0000000 */
754 0x00, /* 0000000 */
755 0x00, /* 0000000 */
756 0x00, /* 0000000 */
757 0x00, /* 0000000 */
758 0x18, /* 0001100 */
759 0x18, /* 0001100 */
760 0x00, /* 0000000 */
761 0x00, /* 0000000 */
762 0x00, /* 0000000 */
763
764 /* 47 0x2f '/' */
765 0x00, /* 0000000 */
766 0x00, /* 0000000 */
767 0x00, /* 0000000 */
768 0x00, /* 0000000 */
769 0x04, /* 0000010 */
770 0x0c, /* 0000110 */
771 0x18, /* 0001100 */
772 0x30, /* 0011000 */
773 0x60, /* 0110000 */
774 0xc0, /* 1100000 */
775 0x80, /* 1000000 */
776 0x00, /* 0000000 */
777 0x00, /* 0000000 */
778 0x00, /* 0000000 */
779
780 /* 48 0x30 '0' */
781 0x00, /* 0000000 */
782 0x30, /* 0011000 */
783 0x78, /* 0111100 */
784 0xcc, /* 1100110 */
785 0xcc, /* 1100110 */
786 0xdc, /* 1101110 */
787 0xec, /* 1110110 */
788 0xcc, /* 1100110 */
789 0xcc, /* 1100110 */
790 0x78, /* 0111100 */
791 0x30, /* 0011000 */
792 0x00, /* 0000000 */
793 0x00, /* 0000000 */
794 0x00, /* 0000000 */
795
796 /* 49 0x31 '1' */
797 0x00, /* 0000000 */
798 0x18, /* 0001100 */
799 0x38, /* 0011100 */
800 0x78, /* 0111100 */
801 0x18, /* 0001100 */
802 0x18, /* 0001100 */
803 0x18, /* 0001100 */
804 0x18, /* 0001100 */
805 0x18, /* 0001100 */
806 0x18, /* 0001100 */
807 0x7c, /* 0111110 */
808 0x00, /* 0000000 */
809 0x00, /* 0000000 */
810 0x00, /* 0000000 */
811
812 /* 50 0x32 '2' */
813 0x00, /* 0000000 */
814 0x78, /* 0111100 */
815 0xcc, /* 1100110 */
816 0x0c, /* 0000110 */
817 0x18, /* 0001100 */
818 0x18, /* 0001100 */
819 0x30, /* 0011000 */
820 0x60, /* 0110000 */
821 0xc0, /* 1100000 */
822 0xcc, /* 1100110 */
823 0xfc, /* 1111110 */
824 0x00, /* 0000000 */
825 0x00, /* 0000000 */
826 0x00, /* 0000000 */
827
828 /* 51 0x33 '3' */
829 0x00, /* 0000000 */
830 0x78, /* 0111100 */
831 0xcc, /* 1100110 */
832 0x0c, /* 0000110 */
833 0x0c, /* 0000110 */
834 0x38, /* 0011100 */
835 0x0c, /* 0000110 */
836 0x0c, /* 0000110 */
837 0x0c, /* 0000110 */
838 0xcc, /* 1100110 */
839 0x78, /* 0111100 */
840 0x00, /* 0000000 */
841 0x00, /* 0000000 */
842 0x00, /* 0000000 */
843
844 /* 52 0x34 '4' */
845 0x00, /* 0000000 */
846 0x0c, /* 0000110 */
847 0x1c, /* 0001110 */
848 0x3c, /* 0011110 */
849 0x6c, /* 0110110 */
850 0xcc, /* 1100110 */
851 0xfe, /* 1111111 */
852 0x0c, /* 0000110 */
853 0x0c, /* 0000110 */
854 0x0c, /* 0000110 */
855 0x0c, /* 0000110 */
856 0x00, /* 0000000 */
857 0x00, /* 0000000 */
858 0x00, /* 0000000 */
859
860 /* 53 0x35 '5' */
861 0x00, /* 0000000 */
862 0xfc, /* 1111110 */
863 0xc0, /* 1100000 */
864 0xc0, /* 1100000 */
865 0xc0, /* 1100000 */
866 0xf8, /* 1111100 */
867 0x0c, /* 0000110 */
868 0x0c, /* 0000110 */
869 0x0c, /* 0000110 */
870 0xcc, /* 1100110 */
871 0x78, /* 0111100 */
872 0x00, /* 0000000 */
873 0x00, /* 0000000 */
874 0x00, /* 0000000 */
875
876 /* 54 0x36 '6' */
877 0x00, /* 0000000 */
878 0x30, /* 0011000 */
879 0x60, /* 0110000 */
880 0xc0, /* 1100000 */
881 0xc0, /* 1100000 */
882 0xf8, /* 1111100 */
883 0xcc, /* 1100110 */
884 0xcc, /* 1100110 */
885 0xcc, /* 1100110 */
886 0xcc, /* 1100110 */
887 0x78, /* 0111100 */
888 0x00, /* 0000000 */
889 0x00, /* 0000000 */
890 0x00, /* 0000000 */
891
892 /* 55 0x37 '7' */
893 0x00, /* 0000000 */
894 0xfc, /* 1111110 */
895 0xcc, /* 1100110 */
896 0x0c, /* 0000110 */
897 0x0c, /* 0000110 */
898 0x18, /* 0001100 */
899 0x18, /* 0001100 */
900 0x30, /* 0011000 */
901 0x30, /* 0011000 */
902 0x30, /* 0011000 */
903 0x30, /* 0011000 */
904 0x00, /* 0000000 */
905 0x00, /* 0000000 */
906 0x00, /* 0000000 */
907
908 /* 56 0x38 '8' */
909 0x00, /* 0000000 */
910 0x78, /* 0111100 */
911 0xcc, /* 1100110 */
912 0xcc, /* 1100110 */
913 0xcc, /* 1100110 */
914 0x78, /* 0111100 */
915 0xcc, /* 1100110 */
916 0xcc, /* 1100110 */
917 0xcc, /* 1100110 */
918 0xcc, /* 1100110 */
919 0x78, /* 0111100 */
920 0x00, /* 0000000 */
921 0x00, /* 0000000 */
922 0x00, /* 0000000 */
923
924 /* 57 0x39 '9' */
925 0x00, /* 0000000 */
926 0x78, /* 0111100 */
927 0xcc, /* 1100110 */
928 0xcc, /* 1100110 */
929 0xcc, /* 1100110 */
930 0x7c, /* 0111110 */
931 0x0c, /* 0000110 */
932 0x0c, /* 0000110 */
933 0x0c, /* 0000110 */
934 0x18, /* 0001100 */
935 0x70, /* 0111000 */
936 0x00, /* 0000000 */
937 0x00, /* 0000000 */
938 0x00, /* 0000000 */
939
940 /* 58 0x3a ':' */
941 0x00, /* 0000000 */
942 0x00, /* 0000000 */
943 0x00, /* 0000000 */
944 0x18, /* 0001100 */
945 0x18, /* 0001100 */
946 0x00, /* 0000000 */
947 0x00, /* 0000000 */
948 0x00, /* 0000000 */
949 0x18, /* 0001100 */
950 0x18, /* 0001100 */
951 0x00, /* 0000000 */
952 0x00, /* 0000000 */
953 0x00, /* 0000000 */
954 0x00, /* 0000000 */
955
956 /* 59 0x3b ';' */
957 0x00, /* 0000000 */
958 0x00, /* 0000000 */
959 0x00, /* 0000000 */
960 0x18, /* 0001100 */
961 0x18, /* 0001100 */
962 0x00, /* 0000000 */
963 0x00, /* 0000000 */
964 0x00, /* 0000000 */
965 0x18, /* 0001100 */
966 0x18, /* 0001100 */
967 0x30, /* 0011000 */
968 0x00, /* 0000000 */
969 0x00, /* 0000000 */
970 0x00, /* 0000000 */
971
972 /* 60 0x3c '<' */
973 0x00, /* 0000000 */
974 0x00, /* 0000000 */
975 0x04, /* 0000010 */
976 0x0c, /* 0000110 */
977 0x18, /* 0001100 */
978 0x30, /* 0011000 */
979 0x60, /* 0110000 */
980 0x30, /* 0011000 */
981 0x18, /* 0001100 */
982 0x0c, /* 0000110 */
983 0x04, /* 0000010 */
984 0x00, /* 0000000 */
985 0x00, /* 0000000 */
986 0x00, /* 0000000 */
987
988 /* 61 0x3d '=' */
989 0x00, /* 0000000 */
990 0x00, /* 0000000 */
991 0x00, /* 0000000 */
992 0x00, /* 0000000 */
993 0x7c, /* 0111110 */
994 0x00, /* 0000000 */
995 0x00, /* 0000000 */
996 0x7c, /* 0111110 */
997 0x00, /* 0000000 */
998 0x00, /* 0000000 */
999 0x00, /* 0000000 */
1000 0x00, /* 0000000 */
1001 0x00, /* 0000000 */
1002 0x00, /* 0000000 */
1003
1004 /* 62 0x3e '>' */
1005 0x00, /* 0000000 */
1006 0x00, /* 0000000 */
1007 0x40, /* 0100000 */
1008 0x60, /* 0110000 */
1009 0x30, /* 0011000 */
1010 0x18, /* 0001100 */
1011 0x0c, /* 0000110 */
1012 0x18, /* 0001100 */
1013 0x30, /* 0011000 */
1014 0x60, /* 0110000 */
1015 0x40, /* 0100000 */
1016 0x00, /* 0000000 */
1017 0x00, /* 0000000 */
1018 0x00, /* 0000000 */
1019
1020 /* 63 0x3f '?' */
1021 0x00, /* 0000000 */
1022 0x78, /* 0111100 */
1023 0xcc, /* 1100110 */
1024 0xcc, /* 1100110 */
1025 0x18, /* 0001100 */
1026 0x30, /* 0011000 */
1027 0x30, /* 0011000 */
1028 0x30, /* 0011000 */
1029 0x00, /* 0000000 */
1030 0x30, /* 0011000 */
1031 0x30, /* 0011000 */
1032 0x00, /* 0000000 */
1033 0x00, /* 0000000 */
1034 0x00, /* 0000000 */
1035
1036 /* 64 0x40 '@' */
1037 0x00, /* 0000000 */
1038 0x00, /* 0000000 */
1039 0x00, /* 0000000 */
1040 0x78, /* 0111100 */
1041 0xcc, /* 1100110 */
1042 0xcc, /* 1100110 */
1043 0xdc, /* 1101110 */
1044 0xdc, /* 1101110 */
1045 0xd8, /* 1101100 */
1046 0xc0, /* 1100000 */
1047 0x78, /* 0111100 */
1048 0x00, /* 0000000 */
1049 0x00, /* 0000000 */
1050 0x00, /* 0000000 */
1051
1052 /* 65 0x41 'A' */
1053 0x00, /* 0000000 */
1054 0x30, /* 0011000 */
1055 0x78, /* 0111100 */
1056 0xcc, /* 1100110 */
1057 0xcc, /* 1100110 */
1058 0xcc, /* 1100110 */
1059 0xfc, /* 1111110 */
1060 0xcc, /* 1100110 */
1061 0xcc, /* 1100110 */
1062 0xcc, /* 1100110 */
1063 0xcc, /* 1100110 */
1064 0x00, /* 0000000 */
1065 0x00, /* 0000000 */
1066 0x00, /* 0000000 */
1067
1068 /* 66 0x42 'B' */
1069 0x00, /* 0000000 */
1070 0xf8, /* 1111100 */
1071 0x6c, /* 0110110 */
1072 0x6c, /* 0110110 */
1073 0x6c, /* 0110110 */
1074 0x78, /* 0111100 */
1075 0x6c, /* 0110110 */
1076 0x6c, /* 0110110 */
1077 0x6c, /* 0110110 */
1078 0x6c, /* 0110110 */
1079 0xf8, /* 1111100 */
1080 0x00, /* 0000000 */
1081 0x00, /* 0000000 */
1082 0x00, /* 0000000 */
1083
1084 /* 67 0x43 'C' */
1085 0x00, /* 0000000 */
1086 0x38, /* 0011100 */
1087 0x6c, /* 0110110 */
1088 0xc4, /* 1100010 */
1089 0xc0, /* 1100000 */
1090 0xc0, /* 1100000 */
1091 0xc0, /* 1100000 */
1092 0xc0, /* 1100000 */
1093 0xc4, /* 1100010 */
1094 0x6c, /* 0110110 */
1095 0x38, /* 0011100 */
1096 0x00, /* 0000000 */
1097 0x00, /* 0000000 */
1098 0x00, /* 0000000 */
1099
1100 /* 68 0x44 'D' */
1101 0x00, /* 0000000 */
1102 0xf0, /* 1111000 */
1103 0xd8, /* 1101100 */
1104 0xcc, /* 1100110 */
1105 0xcc, /* 1100110 */
1106 0xcc, /* 1100110 */
1107 0xcc, /* 1100110 */
1108 0xcc, /* 1100110 */
1109 0xcc, /* 1100110 */
1110 0xd8, /* 1101100 */
1111 0xf0, /* 1111000 */
1112 0x00, /* 0000000 */
1113 0x00, /* 0000000 */
1114 0x00, /* 0000000 */
1115
1116 /* 69 0x45 'E' */
1117 0x00, /* 0000000 */
1118 0x7c, /* 0111110 */
1119 0x6c, /* 0110110 */
1120 0x64, /* 0110010 */
1121 0x68, /* 0110100 */
1122 0x78, /* 0111100 */
1123 0x68, /* 0110100 */
1124 0x60, /* 0110000 */
1125 0x64, /* 0110010 */
1126 0x6c, /* 0110110 */
1127 0x7c, /* 0111110 */
1128 0x00, /* 0000000 */
1129 0x00, /* 0000000 */
1130 0x00, /* 0000000 */
1131
1132 /* 70 0x46 'F' */
1133 0x00, /* 0000000 */
1134 0x7c, /* 0111110 */
1135 0x64, /* 0110010 */
1136 0x60, /* 0110000 */
1137 0x68, /* 0110100 */
1138 0x78, /* 0111100 */
1139 0x68, /* 0110100 */
1140 0x60, /* 0110000 */
1141 0x60, /* 0110000 */
1142 0x60, /* 0110000 */
1143 0x70, /* 0111000 */
1144 0x00, /* 0000000 */
1145 0x00, /* 0000000 */
1146 0x00, /* 0000000 */
1147
1148 /* 71 0x47 'G' */
1149 0x00, /* 0000000 */
1150 0x38, /* 0011100 */
1151 0x6c, /* 0110110 */
1152 0xc4, /* 1100010 */
1153 0xc0, /* 1100000 */
1154 0xc0, /* 1100000 */
1155 0xdc, /* 1101110 */
1156 0xcc, /* 1100110 */
1157 0xcc, /* 1100110 */
1158 0x6c, /* 0110110 */
1159 0x34, /* 0011010 */
1160 0x00, /* 0000000 */
1161 0x00, /* 0000000 */
1162 0x00, /* 0000000 */
1163
1164 /* 72 0x48 'H' */
1165 0x00, /* 0000000 */
1166 0xcc, /* 1100110 */
1167 0xcc, /* 1100110 */
1168 0xcc, /* 1100110 */
1169 0xcc, /* 1100110 */
1170 0xfc, /* 1111110 */
1171 0xcc, /* 1100110 */
1172 0xcc, /* 1100110 */
1173 0xcc, /* 1100110 */
1174 0xcc, /* 1100110 */
1175 0xcc, /* 1100110 */
1176 0x00, /* 0000000 */
1177 0x00, /* 0000000 */
1178 0x00, /* 0000000 */
1179
1180 /* 73 0x49 'I' */
1181 0x00, /* 0000000 */
1182 0x3c, /* 0011110 */
1183 0x18, /* 0001100 */
1184 0x18, /* 0001100 */
1185 0x18, /* 0001100 */
1186 0x18, /* 0001100 */
1187 0x18, /* 0001100 */
1188 0x18, /* 0001100 */
1189 0x18, /* 0001100 */
1190 0x18, /* 0001100 */
1191 0x3c, /* 0011110 */
1192 0x00, /* 0000000 */
1193 0x00, /* 0000000 */
1194 0x00, /* 0000000 */
1195
1196 /* 74 0x4a 'J' */
1197 0x00, /* 0000000 */
1198 0x1c, /* 0001110 */
1199 0x0c, /* 0000110 */
1200 0x0c, /* 0000110 */
1201 0x0c, /* 0000110 */
1202 0x0c, /* 0000110 */
1203 0x0c, /* 0000110 */
1204 0xcc, /* 1100110 */
1205 0xcc, /* 1100110 */
1206 0xcc, /* 1100110 */
1207 0x78, /* 0111100 */
1208 0x00, /* 0000000 */
1209 0x00, /* 0000000 */
1210 0x00, /* 0000000 */
1211
1212 /* 75 0x4b 'K' */
1213 0x00, /* 0000000 */
1214 0xcc, /* 1100110 */
1215 0xcc, /* 1100110 */
1216 0xcc, /* 1100110 */
1217 0xd8, /* 1101100 */
1218 0xf0, /* 1111000 */
1219 0xf0, /* 1111000 */
1220 0xd8, /* 1101100 */
1221 0xcc, /* 1100110 */
1222 0xcc, /* 1100110 */
1223 0xcc, /* 1100110 */
1224 0x00, /* 0000000 */
1225 0x00, /* 0000000 */
1226 0x00, /* 0000000 */
1227
1228 /* 76 0x4c 'L' */
1229 0x00, /* 0000000 */
1230 0xc0, /* 1100000 */
1231 0xc0, /* 1100000 */
1232 0xc0, /* 1100000 */
1233 0xc0, /* 1100000 */
1234 0xc0, /* 1100000 */
1235 0xc0, /* 1100000 */
1236 0xc0, /* 1100000 */
1237 0xc4, /* 1100010 */
1238 0xcc, /* 1100110 */
1239 0xfc, /* 1111110 */
1240 0x00, /* 0000000 */
1241 0x00, /* 0000000 */
1242 0x00, /* 0000000 */
1243
1244 /* 77 0x4d 'M' */
1245 0x00, /* 0000000 */
1246 0xc6, /* 1100011 */
1247 0xee, /* 1110111 */
1248 0xfe, /* 1111111 */
1249 0xfe, /* 1111111 */
1250 0xd6, /* 1101011 */
1251 0xc6, /* 1100011 */
1252 0xc6, /* 1100011 */
1253 0xc6, /* 1100011 */
1254 0xc6, /* 1100011 */
1255 0xc6, /* 1100011 */
1256 0x00, /* 0000000 */
1257 0x00, /* 0000000 */
1258 0x00, /* 0000000 */
1259
1260 /* 78 0x4e 'N' */
1261 0x00, /* 0000000 */
1262 0xcc, /* 1100110 */
1263 0xec, /* 1110110 */
1264 0xec, /* 1110110 */
1265 0xfc, /* 1111110 */
1266 0xdc, /* 1101110 */
1267 0xdc, /* 1101110 */
1268 0xcc, /* 1100110 */
1269 0xcc, /* 1100110 */
1270 0xcc, /* 1100110 */
1271 0xcc, /* 1100110 */
1272 0x00, /* 0000000 */
1273 0x00, /* 0000000 */
1274 0x00, /* 0000000 */
1275
1276 /* 79 0x4f 'O' */
1277 0x00, /* 0000000 */
1278 0x78, /* 0111100 */
1279 0xcc, /* 1100110 */
1280 0xcc, /* 1100110 */
1281 0xcc, /* 1100110 */
1282 0xcc, /* 1100110 */
1283 0xcc, /* 1100110 */
1284 0xcc, /* 1100110 */
1285 0xcc, /* 1100110 */
1286 0xcc, /* 1100110 */
1287 0x78, /* 0111100 */
1288 0x00, /* 0000000 */
1289 0x00, /* 0000000 */
1290 0x00, /* 0000000 */
1291
1292 /* 80 0x50 'P' */
1293 0x00, /* 0000000 */
1294 0xf8, /* 1111100 */
1295 0xcc, /* 1100110 */
1296 0xcc, /* 1100110 */
1297 0xcc, /* 1100110 */
1298 0xf8, /* 1111100 */
1299 0xc0, /* 1100000 */
1300 0xc0, /* 1100000 */
1301 0xc0, /* 1100000 */
1302 0xc0, /* 1100000 */
1303 0xc0, /* 1100000 */
1304 0x00, /* 0000000 */
1305 0x00, /* 0000000 */
1306 0x00, /* 0000000 */
1307
1308 /* 81 0x51 'Q' */
1309 0x00, /* 0000000 */
1310 0x78, /* 0111100 */
1311 0xcc, /* 1100110 */
1312 0xcc, /* 1100110 */
1313 0xcc, /* 1100110 */
1314 0xcc, /* 1100110 */
1315 0xcc, /* 1100110 */
1316 0xcc, /* 1100110 */
1317 0xcc, /* 1100110 */
1318 0xdc, /* 1101110 */
1319 0x78, /* 0111100 */
1320 0x18, /* 0001100 */
1321 0x1c, /* 0001110 */
1322 0x00, /* 0000000 */
1323
1324 /* 82 0x52 'R' */
1325 0x00, /* 0000000 */
1326 0xf8, /* 1111100 */
1327 0xcc, /* 1100110 */
1328 0xcc, /* 1100110 */
1329 0xcc, /* 1100110 */
1330 0xf8, /* 1111100 */
1331 0xd8, /* 1101100 */
1332 0xcc, /* 1100110 */
1333 0xcc, /* 1100110 */
1334 0xcc, /* 1100110 */
1335 0xcc, /* 1100110 */
1336 0x00, /* 0000000 */
1337 0x00, /* 0000000 */
1338 0x00, /* 0000000 */
1339
1340 /* 83 0x53 'S' */
1341 0x00, /* 0000000 */
1342 0x7c, /* 0111110 */
1343 0xc4, /* 1100010 */
1344 0xc0, /* 1100000 */
1345 0xc0, /* 1100000 */
1346 0x60, /* 0110000 */
1347 0x38, /* 0011100 */
1348 0x0c, /* 0000110 */
1349 0x0c, /* 0000110 */
1350 0x8c, /* 1000110 */
1351 0xf8, /* 1111100 */
1352 0x00, /* 0000000 */
1353 0x00, /* 0000000 */
1354 0x00, /* 0000000 */
1355
1356 /* 84 0x54 'T' */
1357 0x00, /* 0000000 */
1358 0xfc, /* 1111110 */
1359 0xfc, /* 1111110 */
1360 0xb4, /* 1011010 */
1361 0x30, /* 0011000 */
1362 0x30, /* 0011000 */
1363 0x30, /* 0011000 */
1364 0x30, /* 0011000 */
1365 0x30, /* 0011000 */
1366 0x30, /* 0011000 */
1367 0x78, /* 0111100 */
1368 0x00, /* 0000000 */
1369 0x00, /* 0000000 */
1370 0x00, /* 0000000 */
1371
1372 /* 85 0x55 'U' */
1373 0x00, /* 0000000 */
1374 0xcc, /* 1100110 */
1375 0xcc, /* 1100110 */
1376 0xcc, /* 1100110 */
1377 0xcc, /* 1100110 */
1378 0xcc, /* 1100110 */
1379 0xcc, /* 1100110 */
1380 0xcc, /* 1100110 */
1381 0xcc, /* 1100110 */
1382 0xcc, /* 1100110 */
1383 0x78, /* 0111100 */
1384 0x00, /* 0000000 */
1385 0x00, /* 0000000 */
1386 0x00, /* 0000000 */
1387
1388 /* 86 0x56 'V' */
1389 0x00, /* 0000000 */
1390 0xcc, /* 1100110 */
1391 0xcc, /* 1100110 */
1392 0xcc, /* 1100110 */
1393 0xcc, /* 1100110 */
1394 0xcc, /* 1100110 */
1395 0xcc, /* 1100110 */
1396 0xcc, /* 1100110 */
1397 0x78, /* 0111100 */
1398 0x78, /* 0111100 */
1399 0x30, /* 0011000 */
1400 0x00, /* 0000000 */
1401 0x00, /* 0000000 */
1402 0x00, /* 0000000 */
1403
1404 /* 87 0x57 'W' */
1405 0x00, /* 0000000 */
1406 0xcc, /* 1100110 */
1407 0xcc, /* 1100110 */
1408 0xcc, /* 1100110 */
1409 0xcc, /* 1100110 */
1410 0xcc, /* 1100110 */
1411 0xcc, /* 1100110 */
1412 0xcc, /* 1100110 */
1413 0xfc, /* 1111110 */
1414 0xfc, /* 1111110 */
1415 0x48, /* 0100100 */
1416 0x00, /* 0000000 */
1417 0x00, /* 0000000 */
1418 0x00, /* 0000000 */
1419
1420 /* 88 0x58 'X' */
1421 0x00, /* 0000000 */
1422 0xcc, /* 1100110 */
1423 0xcc, /* 1100110 */
1424 0x78, /* 0111100 */
1425 0x78, /* 0111100 */
1426 0x30, /* 0011000 */
1427 0x30, /* 0011000 */
1428 0x78, /* 0111100 */
1429 0x78, /* 0111100 */
1430 0xcc, /* 1100110 */
1431 0xcc, /* 1100110 */
1432 0x00, /* 0000000 */
1433 0x00, /* 0000000 */
1434 0x00, /* 0000000 */
1435
1436 /* 89 0x59 'Y' */
1437 0x00, /* 0000000 */
1438 0xcc, /* 1100110 */
1439 0xcc, /* 1100110 */
1440 0xcc, /* 1100110 */
1441 0xcc, /* 1100110 */
1442 0x78, /* 0111100 */
1443 0x30, /* 0011000 */
1444 0x30, /* 0011000 */
1445 0x30, /* 0011000 */
1446 0x30, /* 0011000 */
1447 0x30, /* 0011000 */
1448 0x00, /* 0000000 */
1449 0x00, /* 0000000 */
1450 0x00, /* 0000000 */
1451
1452 /* 90 0x5a 'Z' */
1453 0x00, /* 0000000 */
1454 0xfc, /* 1111110 */
1455 0xcc, /* 1100110 */
1456 0x8c, /* 1000110 */
1457 0x18, /* 0001100 */
1458 0x18, /* 0001100 */
1459 0x30, /* 0011000 */
1460 0x60, /* 0110000 */
1461 0xc4, /* 1100010 */
1462 0xcc, /* 1100110 */
1463 0xfc, /* 1111110 */
1464 0x00, /* 0000000 */
1465 0x00, /* 0000000 */
1466 0x00, /* 0000000 */
1467
1468 /* 91 0x5b '[' */
1469 0x00, /* 0000000 */
1470 0x78, /* 0111100 */
1471 0x60, /* 0110000 */
1472 0x60, /* 0110000 */
1473 0x60, /* 0110000 */
1474 0x60, /* 0110000 */
1475 0x60, /* 0110000 */
1476 0x60, /* 0110000 */
1477 0x60, /* 0110000 */
1478 0x60, /* 0110000 */
1479 0x78, /* 0111100 */
1480 0x00, /* 0000000 */
1481 0x00, /* 0000000 */
1482 0x00, /* 0000000 */
1483
1484 /* 92 0x5c '\' */
1485 0x00, /* 0000000 */
1486 0x00, /* 0000000 */
1487 0x00, /* 0000000 */
1488 0x80, /* 1000000 */
1489 0xc0, /* 1100000 */
1490 0xe0, /* 1110000 */
1491 0x70, /* 0111000 */
1492 0x38, /* 0011100 */
1493 0x1c, /* 0001110 */
1494 0x0c, /* 0000110 */
1495 0x04, /* 0000010 */
1496 0x00, /* 0000000 */
1497 0x00, /* 0000000 */
1498 0x00, /* 0000000 */
1499
1500 /* 93 0x5d ']' */
1501 0x00, /* 0000000 */
1502 0x78, /* 0111100 */
1503 0x18, /* 0001100 */
1504 0x18, /* 0001100 */
1505 0x18, /* 0001100 */
1506 0x18, /* 0001100 */
1507 0x18, /* 0001100 */
1508 0x18, /* 0001100 */
1509 0x18, /* 0001100 */
1510 0x18, /* 0001100 */
1511 0x78, /* 0111100 */
1512 0x00, /* 0000000 */
1513 0x00, /* 0000000 */
1514 0x00, /* 0000000 */
1515
1516 /* 94 0x5e '^' */
1517 0x10, /* 0001000 */
1518 0x38, /* 0011100 */
1519 0x6c, /* 0110110 */
1520 0xc6, /* 1100011 */
1521 0x00, /* 0000000 */
1522 0x00, /* 0000000 */
1523 0x00, /* 0000000 */
1524 0x00, /* 0000000 */
1525 0x00, /* 0000000 */
1526 0x00, /* 0000000 */
1527 0x00, /* 0000000 */
1528 0x00, /* 0000000 */
1529 0x00, /* 0000000 */
1530 0x00, /* 0000000 */
1531
1532 /* 95 0x5f '_' */
1533 0x00, /* 0000000 */
1534 0x00, /* 0000000 */
1535 0x00, /* 0000000 */
1536 0x00, /* 0000000 */
1537 0x00, /* 0000000 */
1538 0x00, /* 0000000 */
1539 0x00, /* 0000000 */
1540 0x00, /* 0000000 */
1541 0x00, /* 0000000 */
1542 0x00, /* 0000000 */
1543 0x00, /* 0000000 */
1544 0x00, /* 0000000 */
1545 0xfe, /* 1111111 */
1546 0x00, /* 0000000 */
1547
1548 /* 96 0x60 '`' */
1549 0x00, /* 0000000 */
1550 0x60, /* 0110000 */
1551 0x30, /* 0011000 */
1552 0x18, /* 0001100 */
1553 0x00, /* 0000000 */
1554 0x00, /* 0000000 */
1555 0x00, /* 0000000 */
1556 0x00, /* 0000000 */
1557 0x00, /* 0000000 */
1558 0x00, /* 0000000 */
1559 0x00, /* 0000000 */
1560 0x00, /* 0000000 */
1561 0x00, /* 0000000 */
1562 0x00, /* 0000000 */
1563
1564 /* 97 0x61 'a' */
1565 0x00, /* 0000000 */
1566 0x00, /* 0000000 */
1567 0x00, /* 0000000 */
1568 0x00, /* 0000000 */
1569 0x78, /* 0111100 */
1570 0x0c, /* 0000110 */
1571 0x7c, /* 0111110 */
1572 0xcc, /* 1100110 */
1573 0xcc, /* 1100110 */
1574 0xcc, /* 1100110 */
1575 0x76, /* 0111011 */
1576 0x00, /* 0000000 */
1577 0x00, /* 0000000 */
1578 0x00, /* 0000000 */
1579
1580 /* 98 0x62 'b' */
1581 0x00, /* 0000000 */
1582 0xc0, /* 1100000 */
1583 0xc0, /* 1100000 */
1584 0xc0, /* 1100000 */
1585 0xf0, /* 1111000 */
1586 0xd8, /* 1101100 */
1587 0xcc, /* 1100110 */
1588 0xcc, /* 1100110 */
1589 0xcc, /* 1100110 */
1590 0xcc, /* 1100110 */
1591 0xf8, /* 1111100 */
1592 0x00, /* 0000000 */
1593 0x00, /* 0000000 */
1594 0x00, /* 0000000 */
1595
1596 /* 99 0x63 'c' */
1597 0x00, /* 0000000 */
1598 0x00, /* 0000000 */
1599 0x00, /* 0000000 */
1600 0x00, /* 0000000 */
1601 0x78, /* 0111100 */
1602 0xcc, /* 1100110 */
1603 0xc0, /* 1100000 */
1604 0xc0, /* 1100000 */
1605 0xc0, /* 1100000 */
1606 0xcc, /* 1100110 */
1607 0x78, /* 0111100 */
1608 0x00, /* 0000000 */
1609 0x00, /* 0000000 */
1610 0x00, /* 0000000 */
1611
1612 /* 100 0x64 'd' */
1613 0x00, /* 0000000 */
1614 0x1c, /* 0001110 */
1615 0x0c, /* 0000110 */
1616 0x0c, /* 0000110 */
1617 0x3c, /* 0011110 */
1618 0x6c, /* 0110110 */
1619 0xcc, /* 1100110 */
1620 0xcc, /* 1100110 */
1621 0xcc, /* 1100110 */
1622 0xcc, /* 1100110 */
1623 0x76, /* 0111011 */
1624 0x00, /* 0000000 */
1625 0x00, /* 0000000 */
1626 0x00, /* 0000000 */
1627
1628 /* 101 0x65 'e' */
1629 0x00, /* 0000000 */
1630 0x00, /* 0000000 */
1631 0x00, /* 0000000 */
1632 0x00, /* 0000000 */
1633 0x78, /* 0111100 */
1634 0xcc, /* 1100110 */
1635 0xfc, /* 1111110 */
1636 0xc0, /* 1100000 */
1637 0xc0, /* 1100000 */
1638 0xcc, /* 1100110 */
1639 0x78, /* 0111100 */
1640 0x00, /* 0000000 */
1641 0x00, /* 0000000 */
1642 0x00, /* 0000000 */
1643
1644 /* 102 0x66 'f' */
1645 0x00, /* 0000000 */
1646 0x38, /* 0011100 */
1647 0x6c, /* 0110110 */
1648 0x64, /* 0110010 */
1649 0x60, /* 0110000 */
1650 0xf0, /* 1111000 */
1651 0x60, /* 0110000 */
1652 0x60, /* 0110000 */
1653 0x60, /* 0110000 */
1654 0x60, /* 0110000 */
1655 0xf0, /* 1111000 */
1656 0x00, /* 0000000 */
1657 0x00, /* 0000000 */
1658 0x00, /* 0000000 */
1659
1660 /* 103 0x67 'g' */
1661 0x00, /* 0000000 */
1662 0x00, /* 0000000 */
1663 0x00, /* 0000000 */
1664 0x00, /* 0000000 */
1665 0x76, /* 0111011 */
1666 0xcc, /* 1100110 */
1667 0xcc, /* 1100110 */
1668 0xcc, /* 1100110 */
1669 0xcc, /* 1100110 */
1670 0xcc, /* 1100110 */
1671 0x7c, /* 0111110 */
1672 0x0c, /* 0000110 */
1673 0xcc, /* 1100110 */
1674 0x78, /* 0111100 */
1675
1676 /* 104 0x68 'h' */
1677 0x00, /* 0000000 */
1678 0xc0, /* 1100000 */
1679 0xc0, /* 1100000 */
1680 0xc0, /* 1100000 */
1681 0xd8, /* 1101100 */
1682 0xec, /* 1110110 */
1683 0xcc, /* 1100110 */
1684 0xcc, /* 1100110 */
1685 0xcc, /* 1100110 */
1686 0xcc, /* 1100110 */
1687 0xcc, /* 1100110 */
1688 0x00, /* 0000000 */
1689 0x00, /* 0000000 */
1690 0x00, /* 0000000 */
1691
1692 /* 105 0x69 'i' */
1693 0x00, /* 0000000 */
1694 0x30, /* 0011000 */
1695 0x30, /* 0011000 */
1696 0x00, /* 0000000 */
1697 0x70, /* 0111000 */
1698 0x30, /* 0011000 */
1699 0x30, /* 0011000 */
1700 0x30, /* 0011000 */
1701 0x30, /* 0011000 */
1702 0x30, /* 0011000 */
1703 0x78, /* 0111100 */
1704 0x00, /* 0000000 */
1705 0x00, /* 0000000 */
1706 0x00, /* 0000000 */
1707
1708 /* 106 0x6a 'j' */
1709 0x00, /* 0000000 */
1710 0x0c, /* 0000110 */
1711 0x0c, /* 0000110 */
1712 0x00, /* 0000000 */
1713 0x1c, /* 0001110 */
1714 0x0c, /* 0000110 */
1715 0x0c, /* 0000110 */
1716 0x0c, /* 0000110 */
1717 0x0c, /* 0000110 */
1718 0x0c, /* 0000110 */
1719 0x0c, /* 0000110 */
1720 0xcc, /* 1100110 */
1721 0xcc, /* 1100110 */
1722 0x78, /* 0111100 */
1723
1724 /* 107 0x6b 'k' */
1725 0x00, /* 0000000 */
1726 0xc0, /* 1100000 */
1727 0xc0, /* 1100000 */
1728 0xc0, /* 1100000 */
1729 0xcc, /* 1100110 */
1730 0xd8, /* 1101100 */
1731 0xf0, /* 1111000 */
1732 0xf0, /* 1111000 */
1733 0xd8, /* 1101100 */
1734 0xcc, /* 1100110 */
1735 0xcc, /* 1100110 */
1736 0x00, /* 0000000 */
1737 0x00, /* 0000000 */
1738 0x00, /* 0000000 */
1739
1740 /* 108 0x6c 'l' */
1741 0x00, /* 0000000 */
1742 0x70, /* 0111000 */
1743 0x30, /* 0011000 */
1744 0x30, /* 0011000 */
1745 0x30, /* 0011000 */
1746 0x30, /* 0011000 */
1747 0x30, /* 0011000 */
1748 0x30, /* 0011000 */
1749 0x30, /* 0011000 */
1750 0x30, /* 0011000 */
1751 0x78, /* 0111100 */
1752 0x00, /* 0000000 */
1753 0x00, /* 0000000 */
1754 0x00, /* 0000000 */
1755
1756 /* 109 0x6d 'm' */
1757 0x00, /* 0000000 */
1758 0x00, /* 0000000 */
1759 0x00, /* 0000000 */
1760 0x00, /* 0000000 */
1761 0xec, /* 1110110 */
1762 0xfe, /* 1111111 */
1763 0xd6, /* 1101011 */
1764 0xd6, /* 1101011 */
1765 0xd6, /* 1101011 */
1766 0xd6, /* 1101011 */
1767 0xd6, /* 1101011 */
1768 0x00, /* 0000000 */
1769 0x00, /* 0000000 */
1770 0x00, /* 0000000 */
1771
1772 /* 110 0x6e 'n' */
1773 0x00, /* 0000000 */
1774 0x00, /* 0000000 */
1775 0x00, /* 0000000 */
1776 0x00, /* 0000000 */
1777 0xb8, /* 1011100 */
1778 0xcc, /* 1100110 */
1779 0xcc, /* 1100110 */
1780 0xcc, /* 1100110 */
1781 0xcc, /* 1100110 */
1782 0xcc, /* 1100110 */
1783 0xcc, /* 1100110 */
1784 0x00, /* 0000000 */
1785 0x00, /* 0000000 */
1786 0x00, /* 0000000 */
1787
1788 /* 111 0x6f 'o' */
1789 0x00, /* 0000000 */
1790 0x00, /* 0000000 */
1791 0x00, /* 0000000 */
1792 0x00, /* 0000000 */
1793 0x78, /* 0111100 */
1794 0xcc, /* 1100110 */
1795 0xcc, /* 1100110 */
1796 0xcc, /* 1100110 */
1797 0xcc, /* 1100110 */
1798 0xcc, /* 1100110 */
1799 0x78, /* 0111100 */
1800 0x00, /* 0000000 */
1801 0x00, /* 0000000 */
1802 0x00, /* 0000000 */
1803
1804 /* 112 0x70 'p' */
1805 0x00, /* 0000000 */
1806 0x00, /* 0000000 */
1807 0x00, /* 0000000 */
1808 0x00, /* 0000000 */
1809 0xb8, /* 1011100 */
1810 0xcc, /* 1100110 */
1811 0xcc, /* 1100110 */
1812 0xcc, /* 1100110 */
1813 0xcc, /* 1100110 */
1814 0xcc, /* 1100110 */
1815 0xf8, /* 1111100 */
1816 0xc0, /* 1100000 */
1817 0xc0, /* 1100000 */
1818 0xc0, /* 1100000 */
1819
1820 /* 113 0x71 'q' */
1821 0x00, /* 0000000 */
1822 0x00, /* 0000000 */
1823 0x00, /* 0000000 */
1824 0x00, /* 0000000 */
1825 0x74, /* 0111010 */
1826 0xcc, /* 1100110 */
1827 0xcc, /* 1100110 */
1828 0xcc, /* 1100110 */
1829 0xcc, /* 1100110 */
1830 0xcc, /* 1100110 */
1831 0x7c, /* 0111110 */
1832 0x0c, /* 0000110 */
1833 0x0c, /* 0000110 */
1834 0x0c, /* 0000110 */
1835
1836 /* 114 0x72 'r' */
1837 0x00, /* 0000000 */
1838 0x00, /* 0000000 */
1839 0x00, /* 0000000 */
1840 0x00, /* 0000000 */
1841 0xb8, /* 1011100 */
1842 0xec, /* 1110110 */
1843 0xcc, /* 1100110 */
1844 0xc0, /* 1100000 */
1845 0xc0, /* 1100000 */
1846 0xc0, /* 1100000 */
1847 0xc0, /* 1100000 */
1848 0x00, /* 0000000 */
1849 0x00, /* 0000000 */
1850 0x00, /* 0000000 */
1851
1852 /* 115 0x73 's' */
1853 0x00, /* 0000000 */
1854 0x00, /* 0000000 */
1855 0x00, /* 0000000 */
1856 0x00, /* 0000000 */
1857 0x78, /* 0111100 */
1858 0xcc, /* 1100110 */
1859 0x60, /* 0110000 */
1860 0x30, /* 0011000 */
1861 0x18, /* 0001100 */
1862 0xcc, /* 1100110 */
1863 0x78, /* 0111100 */
1864 0x00, /* 0000000 */
1865 0x00, /* 0000000 */
1866 0x00, /* 0000000 */
1867
1868 /* 116 0x74 't' */
1869 0x00, /* 0000000 */
1870 0x10, /* 0001000 */
1871 0x30, /* 0011000 */
1872 0x30, /* 0011000 */
1873 0xfc, /* 1111110 */
1874 0x30, /* 0011000 */
1875 0x30, /* 0011000 */
1876 0x30, /* 0011000 */
1877 0x30, /* 0011000 */
1878 0x36, /* 0011011 */
1879 0x1c, /* 0001110 */
1880 0x00, /* 0000000 */
1881 0x00, /* 0000000 */
1882 0x00, /* 0000000 */
1883
1884 /* 117 0x75 'u' */
1885 0x00, /* 0000000 */
1886 0x00, /* 0000000 */
1887 0x00, /* 0000000 */
1888 0x00, /* 0000000 */
1889 0xcc, /* 1100110 */
1890 0xcc, /* 1100110 */
1891 0xcc, /* 1100110 */
1892 0xcc, /* 1100110 */
1893 0xcc, /* 1100110 */
1894 0xcc, /* 1100110 */
1895 0x76, /* 0111011 */
1896 0x00, /* 0000000 */
1897 0x00, /* 0000000 */
1898 0x00, /* 0000000 */
1899
1900 /* 118 0x76 'v' */
1901 0x00, /* 0000000 */
1902 0x00, /* 0000000 */
1903 0x00, /* 0000000 */
1904 0x00, /* 0000000 */
1905 0xcc, /* 1100110 */
1906 0xcc, /* 1100110 */
1907 0xcc, /* 1100110 */
1908 0xcc, /* 1100110 */
1909 0xcc, /* 1100110 */
1910 0x78, /* 0111100 */
1911 0x30, /* 0011000 */
1912 0x00, /* 0000000 */
1913 0x00, /* 0000000 */
1914 0x00, /* 0000000 */
1915
1916 /* 119 0x77 'w' */
1917 0x00, /* 0000000 */
1918 0x00, /* 0000000 */
1919 0x00, /* 0000000 */
1920 0x00, /* 0000000 */
1921 0xc6, /* 1100011 */
1922 0xc6, /* 1100011 */
1923 0xd6, /* 1101011 */
1924 0xd6, /* 1101011 */
1925 0xd6, /* 1101011 */
1926 0xfe, /* 1111111 */
1927 0x6c, /* 0110110 */
1928 0x00, /* 0000000 */
1929 0x00, /* 0000000 */
1930 0x00, /* 0000000 */
1931
1932 /* 120 0x78 'x' */
1933 0x00, /* 0000000 */
1934 0x00, /* 0000000 */
1935 0x00, /* 0000000 */
1936 0x00, /* 0000000 */
1937 0xcc, /* 1100110 */
1938 0xcc, /* 1100110 */
1939 0x78, /* 0111100 */
1940 0x30, /* 0011000 */
1941 0x78, /* 0111100 */
1942 0xcc, /* 1100110 */
1943 0xcc, /* 1100110 */
1944 0x00, /* 0000000 */
1945 0x00, /* 0000000 */
1946 0x00, /* 0000000 */
1947
1948 /* 121 0x79 'y' */
1949 0x00, /* 0000000 */
1950 0x00, /* 0000000 */
1951 0x00, /* 0000000 */
1952 0x00, /* 0000000 */
1953 0xcc, /* 1100110 */
1954 0xcc, /* 1100110 */
1955 0xcc, /* 1100110 */
1956 0xcc, /* 1100110 */
1957 0xcc, /* 1100110 */
1958 0xcc, /* 1100110 */
1959 0x7c, /* 0111110 */
1960 0x0c, /* 0000110 */
1961 0x18, /* 0001100 */
1962 0xf0, /* 1111000 */
1963
1964 /* 122 0x7a 'z' */
1965 0x00, /* 0000000 */
1966 0x00, /* 0000000 */
1967 0x00, /* 0000000 */
1968 0x00, /* 0000000 */
1969 0xfc, /* 1111110 */
1970 0xcc, /* 1100110 */
1971 0x18, /* 0001100 */
1972 0x30, /* 0011000 */
1973 0x60, /* 0110000 */
1974 0xcc, /* 1100110 */
1975 0xfc, /* 1111110 */
1976 0x00, /* 0000000 */
1977 0x00, /* 0000000 */
1978 0x00, /* 0000000 */
1979
1980 /* 123 0x7b '{' */
1981 0x00, /* 0000000 */
1982 0x1c, /* 0001110 */
1983 0x30, /* 0011000 */
1984 0x30, /* 0011000 */
1985 0x30, /* 0011000 */
1986 0xe0, /* 1110000 */
1987 0x30, /* 0011000 */
1988 0x30, /* 0011000 */
1989 0x30, /* 0011000 */
1990 0x30, /* 0011000 */
1991 0x1c, /* 0001110 */
1992 0x00, /* 0000000 */
1993 0x00, /* 0000000 */
1994 0x00, /* 0000000 */
1995
1996 /* 124 0x7c '|' */
1997 0x00, /* 0000000 */
1998 0x30, /* 0011000 */
1999 0x30, /* 0011000 */
2000 0x30, /* 0011000 */
2001 0x30, /* 0011000 */
2002 0x30, /* 0011000 */
2003 0x30, /* 0011000 */
2004 0x30, /* 0011000 */
2005 0x30, /* 0011000 */
2006 0x30, /* 0011000 */
2007 0x30, /* 0011000 */
2008 0x00, /* 0000000 */
2009 0x00, /* 0000000 */
2010 0x00, /* 0000000 */
2011
2012 /* 125 0x7d '}' */
2013 0x00, /* 0000000 */
2014 0x70, /* 0111000 */
2015 0x18, /* 0001100 */
2016 0x18, /* 0001100 */
2017 0x18, /* 0001100 */
2018 0x0e, /* 0000111 */
2019 0x18, /* 0001100 */
2020 0x18, /* 0001100 */
2021 0x18, /* 0001100 */
2022 0x18, /* 0001100 */
2023 0x70, /* 0111000 */
2024 0x00, /* 0000000 */
2025 0x00, /* 0000000 */
2026 0x00, /* 0000000 */
2027
2028 /* 126 0x7e '~' */
2029 0x00, /* 0000000 */
2030 0xec, /* 1110110 */
2031 0xb8, /* 1011100 */
2032 0x00, /* 0000000 */
2033 0x00, /* 0000000 */
2034 0x00, /* 0000000 */
2035 0x00, /* 0000000 */
2036 0x00, /* 0000000 */
2037 0x00, /* 0000000 */
2038 0x00, /* 0000000 */
2039 0x00, /* 0000000 */
2040 0x00, /* 0000000 */
2041 0x00, /* 0000000 */
2042 0x00, /* 0000000 */
2043
2044 /* 127 0x7f '' */
2045 0x00, /* 0000000 */
2046 0x00, /* 0000000 */
2047 0x00, /* 0000000 */
2048 0x10, /* 0001000 */
2049 0x38, /* 0011100 */
2050 0x6c, /* 0110110 */
2051 0xc6, /* 1100011 */
2052 0xc6, /* 1100011 */
2053 0xc6, /* 1100011 */
2054 0xfe, /* 1111111 */
2055 0x00, /* 0000000 */
2056 0x00, /* 0000000 */
2057 0x00, /* 0000000 */
2058 0x00, /* 0000000 */
2059
2060 /* 128 0x80 '€' */
2061 0x00, /* 0000000 */
2062 0x38, /* 0011100 */
2063 0x6c, /* 0110110 */
2064 0xc4, /* 1100010 */
2065 0xc0, /* 1100000 */
2066 0xc0, /* 1100000 */
2067 0xc0, /* 1100000 */
2068 0xc0, /* 1100000 */
2069 0xc4, /* 1100010 */
2070 0x6c, /* 0110110 */
2071 0x38, /* 0011100 */
2072 0x18, /* 0001100 */
2073 0x70, /* 0111000 */
2074 0x00, /* 0000000 */
2075
2076 /* 129 0x81 '' */
2077 0x00, /* 0000000 */
2078 0xcc, /* 1100110 */
2079 0x00, /* 0000000 */
2080 0x00, /* 0000000 */
2081 0xcc, /* 1100110 */
2082 0xcc, /* 1100110 */
2083 0xcc, /* 1100110 */
2084 0xcc, /* 1100110 */
2085 0xcc, /* 1100110 */
2086 0xcc, /* 1100110 */
2087 0x76, /* 0111011 */
2088 0x00, /* 0000000 */
2089 0x00, /* 0000000 */
2090 0x00, /* 0000000 */
2091
2092 /* 130 0x82 '‚' */
2093 0x0c, /* 0000110 */
2094 0x18, /* 0001100 */
2095 0x30, /* 0011000 */
2096 0x00, /* 0000000 */
2097 0x78, /* 0111100 */
2098 0xcc, /* 1100110 */
2099 0xfc, /* 1111110 */
2100 0xc0, /* 1100000 */
2101 0xc0, /* 1100000 */
2102 0xcc, /* 1100110 */
2103 0x78, /* 0111100 */
2104 0x00, /* 0000000 */
2105 0x00, /* 0000000 */
2106 0x00, /* 0000000 */
2107
2108 /* 131 0x83 'ƒ' */
2109 0x10, /* 0001000 */
2110 0x38, /* 0011100 */
2111 0x6c, /* 0110110 */
2112 0x00, /* 0000000 */
2113 0x78, /* 0111100 */
2114 0x0c, /* 0000110 */
2115 0x7c, /* 0111110 */
2116 0xcc, /* 1100110 */
2117 0xcc, /* 1100110 */
2118 0xcc, /* 1100110 */
2119 0x76, /* 0111011 */
2120 0x00, /* 0000000 */
2121 0x00, /* 0000000 */
2122 0x00, /* 0000000 */
2123
2124 /* 132 0x84 '„' */
2125 0x00, /* 0000000 */
2126 0xcc, /* 1100110 */
2127 0x00, /* 0000000 */
2128 0x00, /* 0000000 */
2129 0x78, /* 0111100 */
2130 0x0c, /* 0000110 */
2131 0x7c, /* 0111110 */
2132 0xcc, /* 1100110 */
2133 0xcc, /* 1100110 */
2134 0xcc, /* 1100110 */
2135 0x76, /* 0111011 */
2136 0x00, /* 0000000 */
2137 0x00, /* 0000000 */
2138 0x00, /* 0000000 */
2139
2140 /* 133 0x85 '…' */
2141 0x60, /* 0110000 */
2142 0x30, /* 0011000 */
2143 0x18, /* 0001100 */
2144 0x00, /* 0000000 */
2145 0x78, /* 0111100 */
2146 0x0c, /* 0000110 */
2147 0x7c, /* 0111110 */
2148 0xcc, /* 1100110 */
2149 0xcc, /* 1100110 */
2150 0xcc, /* 1100110 */
2151 0x76, /* 0111011 */
2152 0x00, /* 0000000 */
2153 0x00, /* 0000000 */
2154 0x00, /* 0000000 */
2155
2156 /* 134 0x86 '†' */
2157 0x38, /* 0011100 */
2158 0x6c, /* 0110110 */
2159 0x38, /* 0011100 */
2160 0x00, /* 0000000 */
2161 0x78, /* 0111100 */
2162 0x0c, /* 0000110 */
2163 0x7c, /* 0111110 */
2164 0xcc, /* 1100110 */
2165 0xcc, /* 1100110 */
2166 0xcc, /* 1100110 */
2167 0x76, /* 0111011 */
2168 0x00, /* 0000000 */
2169 0x00, /* 0000000 */
2170 0x00, /* 0000000 */
2171
2172 /* 135 0x87 '‡' */
2173 0x00, /* 0000000 */
2174 0x00, /* 0000000 */
2175 0x00, /* 0000000 */
2176 0x00, /* 0000000 */
2177 0x78, /* 0111100 */
2178 0xcc, /* 1100110 */
2179 0xc0, /* 1100000 */
2180 0xc0, /* 1100000 */
2181 0xc0, /* 1100000 */
2182 0xcc, /* 1100110 */
2183 0x78, /* 0111100 */
2184 0x30, /* 0011000 */
2185 0x30, /* 0011000 */
2186 0xe0, /* 1110000 */
2187
2188 /* 136 0x88 'ˆ' */
2189 0x10, /* 0001000 */
2190 0x38, /* 0011100 */
2191 0x6c, /* 0110110 */
2192 0x00, /* 0000000 */
2193 0x78, /* 0111100 */
2194 0xcc, /* 1100110 */
2195 0xfc, /* 1111110 */
2196 0xc0, /* 1100000 */
2197 0xc0, /* 1100000 */
2198 0xcc, /* 1100110 */
2199 0x78, /* 0111100 */
2200 0x00, /* 0000000 */
2201 0x00, /* 0000000 */
2202 0x00, /* 0000000 */
2203
2204 /* 137 0x89 '‰' */
2205 0x00, /* 0000000 */
2206 0xcc, /* 1100110 */
2207 0x00, /* 0000000 */
2208 0x00, /* 0000000 */
2209 0x78, /* 0111100 */
2210 0xcc, /* 1100110 */
2211 0xfc, /* 1111110 */
2212 0xc0, /* 1100000 */
2213 0xc0, /* 1100000 */
2214 0xcc, /* 1100110 */
2215 0x78, /* 0111100 */
2216 0x00, /* 0000000 */
2217 0x00, /* 0000000 */
2218 0x00, /* 0000000 */
2219
2220 /* 138 0x8a 'Š' */
2221 0xc0, /* 1100000 */
2222 0x60, /* 0110000 */
2223 0x30, /* 0011000 */
2224 0x00, /* 0000000 */
2225 0x78, /* 0111100 */
2226 0xcc, /* 1100110 */
2227 0xfc, /* 1111110 */
2228 0xc0, /* 1100000 */
2229 0xc0, /* 1100000 */
2230 0xcc, /* 1100110 */
2231 0x78, /* 0111100 */
2232 0x00, /* 0000000 */
2233 0x00, /* 0000000 */
2234 0x00, /* 0000000 */
2235
2236 /* 139 0x8b '‹' */
2237 0x00, /* 0000000 */
2238 0x6c, /* 0110110 */
2239 0x00, /* 0000000 */
2240 0x00, /* 0000000 */
2241 0x38, /* 0011100 */
2242 0x18, /* 0001100 */
2243 0x18, /* 0001100 */
2244 0x18, /* 0001100 */
2245 0x18, /* 0001100 */
2246 0x18, /* 0001100 */
2247 0x3c, /* 0011110 */
2248 0x00, /* 0000000 */
2249 0x00, /* 0000000 */
2250 0x00, /* 0000000 */
2251
2252 /* 140 0x8c 'Œ' */
2253 0x30, /* 0011000 */
2254 0x78, /* 0111100 */
2255 0xcc, /* 1100110 */
2256 0x00, /* 0000000 */
2257 0x70, /* 0111000 */
2258 0x30, /* 0011000 */
2259 0x30, /* 0011000 */
2260 0x30, /* 0011000 */
2261 0x30, /* 0011000 */
2262 0x30, /* 0011000 */
2263 0x78, /* 0111100 */
2264 0x00, /* 0000000 */
2265 0x00, /* 0000000 */
2266 0x00, /* 0000000 */
2267
2268 /* 141 0x8d '' */
2269 0xc0, /* 1100000 */
2270 0x60, /* 0110000 */
2271 0x30, /* 0011000 */
2272 0x00, /* 0000000 */
2273 0x70, /* 0111000 */
2274 0x30, /* 0011000 */
2275 0x30, /* 0011000 */
2276 0x30, /* 0011000 */
2277 0x30, /* 0011000 */
2278 0x30, /* 0011000 */
2279 0x78, /* 0111100 */
2280 0x00, /* 0000000 */
2281 0x00, /* 0000000 */
2282 0x00, /* 0000000 */
2283
2284 /* 142 0x8e 'Ž' */
2285 0x00, /* 0000000 */
2286 0xcc, /* 1100110 */
2287 0x00, /* 0000000 */
2288 0x30, /* 0011000 */
2289 0x78, /* 0111100 */
2290 0xcc, /* 1100110 */
2291 0xcc, /* 1100110 */
2292 0xfc, /* 1111110 */
2293 0xcc, /* 1100110 */
2294 0xcc, /* 1100110 */
2295 0xcc, /* 1100110 */
2296 0x00, /* 0000000 */
2297 0x00, /* 0000000 */
2298 0x00, /* 0000000 */
2299
2300 /* 143 0x8f '' */
2301 0x30, /* 0011000 */
2302 0x48, /* 0100100 */
2303 0x48, /* 0100100 */
2304 0x30, /* 0011000 */
2305 0x78, /* 0111100 */
2306 0xcc, /* 1100110 */
2307 0xfc, /* 1111110 */
2308 0xcc, /* 1100110 */
2309 0xcc, /* 1100110 */
2310 0xcc, /* 1100110 */
2311 0xcc, /* 1100110 */
2312 0x00, /* 0000000 */
2313 0x00, /* 0000000 */
2314 0x00, /* 0000000 */
2315
2316 /* 144 0x90 '' */
2317 0x18, /* 0001100 */
2318 0x30, /* 0011000 */
2319 0xfc, /* 1111110 */
2320 0xcc, /* 1100110 */
2321 0xc4, /* 1100010 */
2322 0xd0, /* 1101000 */
2323 0xf0, /* 1111000 */
2324 0xd0, /* 1101000 */
2325 0xc4, /* 1100010 */
2326 0xcc, /* 1100110 */
2327 0xfc, /* 1111110 */
2328 0x00, /* 0000000 */
2329 0x00, /* 0000000 */
2330 0x00, /* 0000000 */
2331
2332 /* 145 0x91 '‘' */
2333 0x00, /* 0000000 */
2334 0x00, /* 0000000 */
2335 0x00, /* 0000000 */
2336 0x00, /* 0000000 */
2337 0xec, /* 1110110 */
2338 0x36, /* 0011011 */
2339 0x36, /* 0011011 */
2340 0x7e, /* 0111111 */
2341 0xd8, /* 1101100 */
2342 0xd8, /* 1101100 */
2343 0x6e, /* 0110111 */
2344 0x00, /* 0000000 */
2345 0x00, /* 0000000 */
2346 0x00, /* 0000000 */
2347
2348 /* 146 0x92 '’' */
2349 0x00, /* 0000000 */
2350 0x3e, /* 0011111 */
2351 0x6c, /* 0110110 */
2352 0xcc, /* 1100110 */
2353 0xcc, /* 1100110 */
2354 0xfe, /* 1111111 */
2355 0xcc, /* 1100110 */
2356 0xcc, /* 1100110 */
2357 0xcc, /* 1100110 */
2358 0xcc, /* 1100110 */
2359 0xce, /* 1100111 */
2360 0x00, /* 0000000 */
2361 0x00, /* 0000000 */
2362 0x00, /* 0000000 */
2363
2364 /* 147 0x93 '“' */
2365 0x10, /* 0001000 */
2366 0x38, /* 0011100 */
2367 0x6c, /* 0110110 */
2368 0x00, /* 0000000 */
2369 0x78, /* 0111100 */
2370 0xcc, /* 1100110 */
2371 0xcc, /* 1100110 */
2372 0xcc, /* 1100110 */
2373 0xcc, /* 1100110 */
2374 0xcc, /* 1100110 */
2375 0x78, /* 0111100 */
2376 0x00, /* 0000000 */
2377 0x00, /* 0000000 */
2378 0x00, /* 0000000 */
2379
2380 /* 148 0x94 '”' */
2381 0x00, /* 0000000 */
2382 0xcc, /* 1100110 */
2383 0x00, /* 0000000 */
2384 0x00, /* 0000000 */
2385 0x78, /* 0111100 */
2386 0xcc, /* 1100110 */
2387 0xcc, /* 1100110 */
2388 0xcc, /* 1100110 */
2389 0xcc, /* 1100110 */
2390 0xcc, /* 1100110 */
2391 0x78, /* 0111100 */
2392 0x00, /* 0000000 */
2393 0x00, /* 0000000 */
2394 0x00, /* 0000000 */
2395
2396 /* 149 0x95 '•' */
2397 0xc0, /* 1100000 */
2398 0x60, /* 0110000 */
2399 0x30, /* 0011000 */
2400 0x00, /* 0000000 */
2401 0x78, /* 0111100 */
2402 0xcc, /* 1100110 */
2403 0xcc, /* 1100110 */
2404 0xcc, /* 1100110 */
2405 0xcc, /* 1100110 */
2406 0xcc, /* 1100110 */
2407 0x78, /* 0111100 */
2408 0x00, /* 0000000 */
2409 0x00, /* 0000000 */
2410 0x00, /* 0000000 */
2411
2412 /* 150 0x96 '–' */
2413 0x30, /* 0011000 */
2414 0x78, /* 0111100 */
2415 0xcc, /* 1100110 */
2416 0x00, /* 0000000 */
2417 0xcc, /* 1100110 */
2418 0xcc, /* 1100110 */
2419 0xcc, /* 1100110 */
2420 0xcc, /* 1100110 */
2421 0xcc, /* 1100110 */
2422 0xcc, /* 1100110 */
2423 0x76, /* 0111011 */
2424 0x00, /* 0000000 */
2425 0x00, /* 0000000 */
2426 0x00, /* 0000000 */
2427
2428 /* 151 0x97 '—' */
2429 0x60, /* 0110000 */
2430 0x30, /* 0011000 */
2431 0x18, /* 0001100 */
2432 0x00, /* 0000000 */
2433 0xcc, /* 1100110 */
2434 0xcc, /* 1100110 */
2435 0xcc, /* 1100110 */
2436 0xcc, /* 1100110 */
2437 0xcc, /* 1100110 */
2438 0xcc, /* 1100110 */
2439 0x76, /* 0111011 */
2440 0x00, /* 0000000 */
2441 0x00, /* 0000000 */
2442 0x00, /* 0000000 */
2443
2444 /* 152 0x98 '˜' */
2445 0x00, /* 0000000 */
2446 0xcc, /* 1100110 */
2447 0x00, /* 0000000 */
2448 0x00, /* 0000000 */
2449 0xcc, /* 1100110 */
2450 0xcc, /* 1100110 */
2451 0xcc, /* 1100110 */
2452 0xcc, /* 1100110 */
2453 0xcc, /* 1100110 */
2454 0xcc, /* 1100110 */
2455 0x7c, /* 0111110 */
2456 0x0c, /* 0000110 */
2457 0x18, /* 0001100 */
2458 0x70, /* 0111000 */
2459
2460 /* 153 0x99 '™' */
2461 0xcc, /* 1100110 */
2462 0x00, /* 0000000 */
2463 0x78, /* 0111100 */
2464 0xcc, /* 1100110 */
2465 0xcc, /* 1100110 */
2466 0xcc, /* 1100110 */
2467 0xcc, /* 1100110 */
2468 0xcc, /* 1100110 */
2469 0xcc, /* 1100110 */
2470 0xcc, /* 1100110 */
2471 0x78, /* 0111100 */
2472 0x00, /* 0000000 */
2473 0x00, /* 0000000 */
2474 0x00, /* 0000000 */
2475
2476 /* 154 0x9a 'š' */
2477 0xcc, /* 1100110 */
2478 0x00, /* 0000000 */
2479 0xcc, /* 1100110 */
2480 0xcc, /* 1100110 */
2481 0xcc, /* 1100110 */
2482 0xcc, /* 1100110 */
2483 0xcc, /* 1100110 */
2484 0xcc, /* 1100110 */
2485 0xcc, /* 1100110 */
2486 0xcc, /* 1100110 */
2487 0x78, /* 0111100 */
2488 0x00, /* 0000000 */
2489 0x00, /* 0000000 */
2490 0x00, /* 0000000 */
2491
2492 /* 155 0x9b '›' */
2493 0x30, /* 0011000 */
2494 0x30, /* 0011000 */
2495 0x7c, /* 0111110 */
2496 0xcc, /* 1100110 */
2497 0xc0, /* 1100000 */
2498 0xc0, /* 1100000 */
2499 0xc0, /* 1100000 */
2500 0xcc, /* 1100110 */
2501 0x7c, /* 0111110 */
2502 0x30, /* 0011000 */
2503 0x30, /* 0011000 */
2504 0x00, /* 0000000 */
2505 0x00, /* 0000000 */
2506 0x00, /* 0000000 */
2507
2508 /* 156 0x9c 'œ' */
2509 0x38, /* 0011100 */
2510 0x6c, /* 0110110 */
2511 0x64, /* 0110010 */
2512 0x60, /* 0110000 */
2513 0xf0, /* 1111000 */
2514 0x60, /* 0110000 */
2515 0x60, /* 0110000 */
2516 0x60, /* 0110000 */
2517 0x60, /* 0110000 */
2518 0xe6, /* 1110011 */
2519 0xfc, /* 1111110 */
2520 0x00, /* 0000000 */
2521 0x00, /* 0000000 */
2522 0x00, /* 0000000 */
2523
2524 /* 157 0x9d '' */
2525 0x00, /* 0000000 */
2526 0xcc, /* 1100110 */
2527 0xcc, /* 1100110 */
2528 0x78, /* 0111100 */
2529 0x30, /* 0011000 */
2530 0xfc, /* 1111110 */
2531 0x30, /* 0011000 */
2532 0xfc, /* 1111110 */
2533 0x30, /* 0011000 */
2534 0x30, /* 0011000 */
2535 0x30, /* 0011000 */
2536 0x00, /* 0000000 */
2537 0x00, /* 0000000 */
2538 0x00, /* 0000000 */
2539
2540 /* 158 0x9e 'ž' */
2541 0xf8, /* 1111100 */
2542 0xcc, /* 1100110 */
2543 0xcc, /* 1100110 */
2544 0xf8, /* 1111100 */
2545 0xc4, /* 1100010 */
2546 0xcc, /* 1100110 */
2547 0xde, /* 1101111 */
2548 0xcc, /* 1100110 */
2549 0xcc, /* 1100110 */
2550 0xcc, /* 1100110 */
2551 0xc6, /* 1100011 */
2552 0x00, /* 0000000 */
2553 0x00, /* 0000000 */
2554 0x00, /* 0000000 */
2555
2556 /* 159 0x9f 'Ÿ' */
2557 0x1c, /* 0001110 */
2558 0x36, /* 0011011 */
2559 0x30, /* 0011000 */
2560 0x30, /* 0011000 */
2561 0x30, /* 0011000 */
2562 0xfc, /* 1111110 */
2563 0x30, /* 0011000 */
2564 0x30, /* 0011000 */
2565 0x30, /* 0011000 */
2566 0xb0, /* 1011000 */
2567 0xe0, /* 1110000 */
2568 0x00, /* 0000000 */
2569 0x00, /* 0000000 */
2570 0x00, /* 0000000 */
2571
2572 /* 160 0xa0 ' ' */
2573 0x18, /* 0001100 */
2574 0x30, /* 0011000 */
2575 0x60, /* 0110000 */
2576 0x00, /* 0000000 */
2577 0x78, /* 0111100 */
2578 0x0c, /* 0000110 */
2579 0x7c, /* 0111110 */
2580 0xcc, /* 1100110 */
2581 0xcc, /* 1100110 */
2582 0xcc, /* 1100110 */
2583 0x76, /* 0111011 */
2584 0x00, /* 0000000 */
2585 0x00, /* 0000000 */
2586 0x00, /* 0000000 */
2587
2588 /* 161 0xa1 '¡' */
2589 0x18, /* 0001100 */
2590 0x30, /* 0011000 */
2591 0x60, /* 0110000 */
2592 0x00, /* 0000000 */
2593 0x70, /* 0111000 */
2594 0x30, /* 0011000 */
2595 0x30, /* 0011000 */
2596 0x30, /* 0011000 */
2597 0x30, /* 0011000 */
2598 0x30, /* 0011000 */
2599 0x78, /* 0111100 */
2600 0x00, /* 0000000 */
2601 0x00, /* 0000000 */
2602 0x00, /* 0000000 */
2603
2604 /* 162 0xa2 '¢' */
2605 0x18, /* 0001100 */
2606 0x30, /* 0011000 */
2607 0x60, /* 0110000 */
2608 0x00, /* 0000000 */
2609 0x78, /* 0111100 */
2610 0xcc, /* 1100110 */
2611 0xcc, /* 1100110 */
2612 0xcc, /* 1100110 */
2613 0xcc, /* 1100110 */
2614 0xcc, /* 1100110 */
2615 0x78, /* 0111100 */
2616 0x00, /* 0000000 */
2617 0x00, /* 0000000 */
2618 0x00, /* 0000000 */
2619
2620 /* 163 0xa3 '£' */
2621 0x18, /* 0001100 */
2622 0x30, /* 0011000 */
2623 0x60, /* 0110000 */
2624 0x00, /* 0000000 */
2625 0xcc, /* 1100110 */
2626 0xcc, /* 1100110 */
2627 0xcc, /* 1100110 */
2628 0xcc, /* 1100110 */
2629 0xcc, /* 1100110 */
2630 0xcc, /* 1100110 */
2631 0x76, /* 0111011 */
2632 0x00, /* 0000000 */
2633 0x00, /* 0000000 */
2634 0x00, /* 0000000 */
2635
2636 /* 164 0xa4 '¤' */
2637 0x00, /* 0000000 */
2638 0x76, /* 0111011 */
2639 0xdc, /* 1101110 */
2640 0x00, /* 0000000 */
2641 0xb8, /* 1011100 */
2642 0xcc, /* 1100110 */
2643 0xcc, /* 1100110 */
2644 0xcc, /* 1100110 */
2645 0xcc, /* 1100110 */
2646 0xcc, /* 1100110 */
2647 0xcc, /* 1100110 */
2648 0x00, /* 0000000 */
2649 0x00, /* 0000000 */
2650 0x00, /* 0000000 */
2651
2652 /* 165 0xa5 '¥' */
2653 0x76, /* 0111011 */
2654 0xdc, /* 1101110 */
2655 0x00, /* 0000000 */
2656 0xcc, /* 1100110 */
2657 0xec, /* 1110110 */
2658 0xec, /* 1110110 */
2659 0xfc, /* 1111110 */
2660 0xdc, /* 1101110 */
2661 0xcc, /* 1100110 */
2662 0xcc, /* 1100110 */
2663 0xcc, /* 1100110 */
2664 0x00, /* 0000000 */
2665 0x00, /* 0000000 */
2666 0x00, /* 0000000 */
2667
2668 /* 166 0xa6 '¦' */
2669 0x00, /* 0000000 */
2670 0x78, /* 0111100 */
2671 0xd8, /* 1101100 */
2672 0xd8, /* 1101100 */
2673 0x7c, /* 0111110 */
2674 0x00, /* 0000000 */
2675 0xfc, /* 1111110 */
2676 0x00, /* 0000000 */
2677 0x00, /* 0000000 */
2678 0x00, /* 0000000 */
2679 0x00, /* 0000000 */
2680 0x00, /* 0000000 */
2681 0x00, /* 0000000 */
2682 0x00, /* 0000000 */
2683
2684 /* 167 0xa7 '§' */
2685 0x00, /* 0000000 */
2686 0x70, /* 0111000 */
2687 0xd8, /* 1101100 */
2688 0xd8, /* 1101100 */
2689 0x70, /* 0111000 */
2690 0x00, /* 0000000 */
2691 0xf8, /* 1111100 */
2692 0x00, /* 0000000 */
2693 0x00, /* 0000000 */
2694 0x00, /* 0000000 */
2695 0x00, /* 0000000 */
2696 0x00, /* 0000000 */
2697 0x00, /* 0000000 */
2698 0x00, /* 0000000 */
2699
2700 /* 168 0xa8 '¨' */
2701 0x00, /* 0000000 */
2702 0x30, /* 0011000 */
2703 0x30, /* 0011000 */
2704 0x00, /* 0000000 */
2705 0x30, /* 0011000 */
2706 0x30, /* 0011000 */
2707 0x60, /* 0110000 */
2708 0xc0, /* 1100000 */
2709 0xcc, /* 1100110 */
2710 0xcc, /* 1100110 */
2711 0x78, /* 0111100 */
2712 0x00, /* 0000000 */
2713 0x00, /* 0000000 */
2714 0x00, /* 0000000 */
2715
2716 /* 169 0xa9 '©' */
2717 0x00, /* 0000000 */
2718 0x00, /* 0000000 */
2719 0x00, /* 0000000 */
2720 0x00, /* 0000000 */
2721 0x00, /* 0000000 */
2722 0xfc, /* 1111110 */
2723 0xc0, /* 1100000 */
2724 0xc0, /* 1100000 */
2725 0xc0, /* 1100000 */
2726 0xc0, /* 1100000 */
2727 0x00, /* 0000000 */
2728 0x00, /* 0000000 */
2729 0x00, /* 0000000 */
2730 0x00, /* 0000000 */
2731
2732 /* 170 0xaa 'ª' */
2733 0x00, /* 0000000 */
2734 0x00, /* 0000000 */
2735 0x00, /* 0000000 */
2736 0x00, /* 0000000 */
2737 0x00, /* 0000000 */
2738 0xfc, /* 1111110 */
2739 0x0c, /* 0000110 */
2740 0x0c, /* 0000110 */
2741 0x0c, /* 0000110 */
2742 0x0c, /* 0000110 */
2743 0x00, /* 0000000 */
2744 0x00, /* 0000000 */
2745 0x00, /* 0000000 */
2746 0x00, /* 0000000 */
2747
2748 /* 171 0xab '«' */
2749 0x60, /* 0110000 */
2750 0xe0, /* 1110000 */
2751 0x62, /* 0110001 */
2752 0x66, /* 0110011 */
2753 0x6c, /* 0110110 */
2754 0x18, /* 0001100 */
2755 0x30, /* 0011000 */
2756 0x60, /* 0110000 */
2757 0xc0, /* 1100000 */
2758 0xb8, /* 1011100 */
2759 0x4c, /* 0100110 */
2760 0x18, /* 0001100 */
2761 0x30, /* 0011000 */
2762 0x7c, /* 0111110 */
2763
2764 /* 172 0xac '¬' */
2765 0x60, /* 0110000 */
2766 0xe0, /* 1110000 */
2767 0x62, /* 0110001 */
2768 0x66, /* 0110011 */
2769 0x6c, /* 0110110 */
2770 0x18, /* 0001100 */
2771 0x30, /* 0011000 */
2772 0x6c, /* 0110110 */
2773 0xdc, /* 1101110 */
2774 0xb4, /* 1011010 */
2775 0x7e, /* 0111111 */
2776 0x0c, /* 0000110 */
2777 0x0c, /* 0000110 */
2778 0x00, /* 0000000 */
2779
2780 /* 173 0xad '­' */
2781 0x00, /* 0000000 */
2782 0x30, /* 0011000 */
2783 0x30, /* 0011000 */
2784 0x00, /* 0000000 */
2785 0x30, /* 0011000 */
2786 0x30, /* 0011000 */
2787 0x30, /* 0011000 */
2788 0x78, /* 0111100 */
2789 0x78, /* 0111100 */
2790 0x78, /* 0111100 */
2791 0x30, /* 0011000 */
2792 0x00, /* 0000000 */
2793 0x00, /* 0000000 */
2794 0x00, /* 0000000 */
2795
2796 /* 174 0xae '®' */
2797 0x00, /* 0000000 */
2798 0x00, /* 0000000 */
2799 0x00, /* 0000000 */
2800 0x00, /* 0000000 */
2801 0x36, /* 0011011 */
2802 0x6c, /* 0110110 */
2803 0xd8, /* 1101100 */
2804 0x6c, /* 0110110 */
2805 0x36, /* 0011011 */
2806 0x00, /* 0000000 */
2807 0x00, /* 0000000 */
2808 0x00, /* 0000000 */
2809 0x00, /* 0000000 */
2810 0x00, /* 0000000 */
2811
2812 /* 175 0xaf '¯' */
2813 0x00, /* 0000000 */
2814 0x00, /* 0000000 */
2815 0x00, /* 0000000 */
2816 0x00, /* 0000000 */
2817 0xd8, /* 1101100 */
2818 0x6c, /* 0110110 */
2819 0x36, /* 0011011 */
2820 0x6c, /* 0110110 */
2821 0xd8, /* 1101100 */
2822 0x00, /* 0000000 */
2823 0x00, /* 0000000 */
2824 0x00, /* 0000000 */
2825 0x00, /* 0000000 */
2826 0x00, /* 0000000 */
2827
2828 /* 176 0xb0 '°' */
2829 0x88, /* 1000100 */
2830 0x22, /* 0010001 */
2831 0x88, /* 1000100 */
2832 0x22, /* 0010001 */
2833 0x88, /* 1000100 */
2834 0x22, /* 0010001 */
2835 0x88, /* 1000100 */
2836 0x22, /* 0010001 */
2837 0x88, /* 1000100 */
2838 0x22, /* 0010001 */
2839 0x88, /* 1000100 */
2840 0x22, /* 0010001 */
2841 0x88, /* 1000100 */
2842 0x22, /* 0010001 */
2843
2844 /* 177 0xb1 '±' */
2845 0x54, /* 0101010 */
2846 0xaa, /* 1010101 */
2847 0x54, /* 0101010 */
2848 0xaa, /* 1010101 */
2849 0x54, /* 0101010 */
2850 0xaa, /* 1010101 */
2851 0x54, /* 0101010 */
2852 0xaa, /* 1010101 */
2853 0x54, /* 0101010 */
2854 0xaa, /* 1010101 */
2855 0x54, /* 0101010 */
2856 0xaa, /* 1010101 */
2857 0x54, /* 0101010 */
2858 0xaa, /* 1010101 */
2859
2860 /* 178 0xb2 '²' */
2861 0xee, /* 1110111 */
2862 0xba, /* 1011101 */
2863 0xee, /* 1110111 */
2864 0xba, /* 1011101 */
2865 0xee, /* 1110111 */
2866 0xba, /* 1011101 */
2867 0xee, /* 1110111 */
2868 0xba, /* 1011101 */
2869 0xee, /* 1110111 */
2870 0xba, /* 1011101 */
2871 0xee, /* 1110111 */
2872 0xba, /* 1011101 */
2873 0xee, /* 1110111 */
2874 0xba, /* 1011101 */
2875
2876 /* 179 0xb3 '³' */
2877 0x30, /* 0011000 */
2878 0x30, /* 0011000 */
2879 0x30, /* 0011000 */
2880 0x30, /* 0011000 */
2881 0x30, /* 0011000 */
2882 0x30, /* 0011000 */
2883 0x30, /* 0011000 */
2884 0x30, /* 0011000 */
2885 0x30, /* 0011000 */
2886 0x30, /* 0011000 */
2887 0x30, /* 0011000 */
2888 0x30, /* 0011000 */
2889 0x30, /* 0011000 */
2890 0x30, /* 0011000 */
2891
2892 /* 180 0xb4 '´' */
2893 0x30, /* 0011000 */
2894 0x30, /* 0011000 */
2895 0x30, /* 0011000 */
2896 0x30, /* 0011000 */
2897 0x30, /* 0011000 */
2898 0x30, /* 0011000 */
2899 0xf0, /* 1111000 */
2900 0x30, /* 0011000 */
2901 0x30, /* 0011000 */
2902 0x30, /* 0011000 */
2903 0x30, /* 0011000 */
2904 0x30, /* 0011000 */
2905 0x30, /* 0011000 */
2906 0x30, /* 0011000 */
2907
2908 /* 181 0xb5 'µ' */
2909 0x30, /* 0011000 */
2910 0x30, /* 0011000 */
2911 0x30, /* 0011000 */
2912 0x30, /* 0011000 */
2913 0xf0, /* 1111000 */
2914 0x30, /* 0011000 */
2915 0xf0, /* 1111000 */
2916 0x30, /* 0011000 */
2917 0x30, /* 0011000 */
2918 0x30, /* 0011000 */
2919 0x30, /* 0011000 */
2920 0x30, /* 0011000 */
2921 0x30, /* 0011000 */
2922 0x30, /* 0011000 */
2923
2924 /* 182 0xb6 '¶' */
2925 0x6c, /* 0110110 */
2926 0x6c, /* 0110110 */
2927 0x6c, /* 0110110 */
2928 0x6c, /* 0110110 */
2929 0x6c, /* 0110110 */
2930 0x6c, /* 0110110 */
2931 0xec, /* 1110110 */
2932 0x6c, /* 0110110 */
2933 0x6c, /* 0110110 */
2934 0x6c, /* 0110110 */
2935 0x6c, /* 0110110 */
2936 0x6c, /* 0110110 */
2937 0x6c, /* 0110110 */
2938 0x6c, /* 0110110 */
2939
2940 /* 183 0xb7 '·' */
2941 0x00, /* 0000000 */
2942 0x00, /* 0000000 */
2943 0x00, /* 0000000 */
2944 0x00, /* 0000000 */
2945 0x00, /* 0000000 */
2946 0x00, /* 0000000 */
2947 0xfc, /* 1111110 */
2948 0x6c, /* 0110110 */
2949 0x6c, /* 0110110 */
2950 0x6c, /* 0110110 */
2951 0x6c, /* 0110110 */
2952 0x6c, /* 0110110 */
2953 0x6c, /* 0110110 */
2954 0x6c, /* 0110110 */
2955
2956 /* 184 0xb8 '¸' */
2957 0x00, /* 0000000 */
2958 0x00, /* 0000000 */
2959 0x00, /* 0000000 */
2960 0x00, /* 0000000 */
2961 0xf0, /* 1111000 */
2962 0x30, /* 0011000 */
2963 0xf0, /* 1111000 */
2964 0x30, /* 0011000 */
2965 0x30, /* 0011000 */
2966 0x30, /* 0011000 */
2967 0x30, /* 0011000 */
2968 0x30, /* 0011000 */
2969 0x30, /* 0011000 */
2970 0x30, /* 0011000 */
2971
2972 /* 185 0xb9 '¹' */
2973 0x6c, /* 0110110 */
2974 0x6c, /* 0110110 */
2975 0x6c, /* 0110110 */
2976 0x6c, /* 0110110 */
2977 0xec, /* 1110110 */
2978 0x0c, /* 0000110 */
2979 0xec, /* 1110110 */
2980 0x6c, /* 0110110 */
2981 0x6c, /* 0110110 */
2982 0x6c, /* 0110110 */
2983 0x6c, /* 0110110 */
2984 0x6c, /* 0110110 */
2985 0x6c, /* 0110110 */
2986 0x6c, /* 0110110 */
2987
2988 /* 186 0xba 'º' */
2989 0x6c, /* 0110110 */
2990 0x6c, /* 0110110 */
2991 0x6c, /* 0110110 */
2992 0x6c, /* 0110110 */
2993 0x6c, /* 0110110 */
2994 0x6c, /* 0110110 */
2995 0x6c, /* 0110110 */
2996 0x6c, /* 0110110 */
2997 0x6c, /* 0110110 */
2998 0x6c, /* 0110110 */
2999 0x6c, /* 0110110 */
3000 0x6c, /* 0110110 */
3001 0x6c, /* 0110110 */
3002 0x6c, /* 0110110 */
3003
3004 /* 187 0xbb '»' */
3005 0x00, /* 0000000 */
3006 0x00, /* 0000000 */
3007 0x00, /* 0000000 */
3008 0x00, /* 0000000 */
3009 0xfc, /* 1111110 */
3010 0x0c, /* 0000110 */
3011 0xec, /* 1110110 */
3012 0x6c, /* 0110110 */
3013 0x6c, /* 0110110 */
3014 0x6c, /* 0110110 */
3015 0x6c, /* 0110110 */
3016 0x6c, /* 0110110 */
3017 0x6c, /* 0110110 */
3018 0x6c, /* 0110110 */
3019
3020 /* 188 0xbc '¼' */
3021 0x6c, /* 0110110 */
3022 0x6c, /* 0110110 */
3023 0x6c, /* 0110110 */
3024 0x6c, /* 0110110 */
3025 0xec, /* 1110110 */
3026 0x0c, /* 0000110 */
3027 0xfc, /* 1111110 */
3028 0x00, /* 0000000 */
3029 0x00, /* 0000000 */
3030 0x00, /* 0000000 */
3031 0x00, /* 0000000 */
3032 0x00, /* 0000000 */
3033 0x00, /* 0000000 */
3034 0x00, /* 0000000 */
3035
3036 /* 189 0xbd '½' */
3037 0x6c, /* 0110110 */
3038 0x6c, /* 0110110 */
3039 0x6c, /* 0110110 */
3040 0x6c, /* 0110110 */
3041 0x6c, /* 0110110 */
3042 0x6c, /* 0110110 */
3043 0xfc, /* 1111110 */
3044 0x00, /* 0000000 */
3045 0x00, /* 0000000 */
3046 0x00, /* 0000000 */
3047 0x00, /* 0000000 */
3048 0x00, /* 0000000 */
3049 0x00, /* 0000000 */
3050 0x00, /* 0000000 */
3051
3052 /* 190 0xbe '¾' */
3053 0x30, /* 0011000 */
3054 0x30, /* 0011000 */
3055 0x30, /* 0011000 */
3056 0x30, /* 0011000 */
3057 0xf0, /* 1111000 */
3058 0x30, /* 0011000 */
3059 0xf0, /* 1111000 */
3060 0x00, /* 0000000 */
3061 0x00, /* 0000000 */
3062 0x00, /* 0000000 */
3063 0x00, /* 0000000 */
3064 0x00, /* 0000000 */
3065 0x00, /* 0000000 */
3066 0x00, /* 0000000 */
3067
3068 /* 191 0xbf '¿' */
3069 0x00, /* 0000000 */
3070 0x00, /* 0000000 */
3071 0x00, /* 0000000 */
3072 0x00, /* 0000000 */
3073 0x00, /* 0000000 */
3074 0x00, /* 0000000 */
3075 0xf0, /* 1111000 */
3076 0x30, /* 0011000 */
3077 0x30, /* 0011000 */
3078 0x30, /* 0011000 */
3079 0x30, /* 0011000 */
3080 0x30, /* 0011000 */
3081 0x30, /* 0011000 */
3082 0x30, /* 0011000 */
3083
3084 /* 192 0xc0 'À' */
3085 0x30, /* 0011000 */
3086 0x30, /* 0011000 */
3087 0x30, /* 0011000 */
3088 0x30, /* 0011000 */
3089 0x30, /* 0011000 */
3090 0x30, /* 0011000 */
3091 0x3e, /* 0011111 */
3092 0x00, /* 0000000 */
3093 0x00, /* 0000000 */
3094 0x00, /* 0000000 */
3095 0x00, /* 0000000 */
3096 0x00, /* 0000000 */
3097 0x00, /* 0000000 */
3098 0x00, /* 0000000 */
3099
3100 /* 193 0xc1 'Á' */
3101 0x30, /* 0011000 */
3102 0x30, /* 0011000 */
3103 0x30, /* 0011000 */
3104 0x30, /* 0011000 */
3105 0x30, /* 0011000 */
3106 0x30, /* 0011000 */
3107 0xfe, /* 1111111 */
3108 0x00, /* 0000000 */
3109 0x00, /* 0000000 */
3110 0x00, /* 0000000 */
3111 0x00, /* 0000000 */
3112 0x00, /* 0000000 */
3113 0x00, /* 0000000 */
3114 0x00, /* 0000000 */
3115
3116 /* 194 0xc2 'Â' */
3117 0x00, /* 0000000 */
3118 0x00, /* 0000000 */
3119 0x00, /* 0000000 */
3120 0x00, /* 0000000 */
3121 0x00, /* 0000000 */
3122 0x00, /* 0000000 */
3123 0xfe, /* 1111111 */
3124 0x30, /* 0011000 */
3125 0x30, /* 0011000 */
3126 0x30, /* 0011000 */
3127 0x30, /* 0011000 */
3128 0x30, /* 0011000 */
3129 0x30, /* 0011000 */
3130 0x30, /* 0011000 */
3131
3132 /* 195 0xc3 'Ã' */
3133 0x30, /* 0011000 */
3134 0x30, /* 0011000 */
3135 0x30, /* 0011000 */
3136 0x30, /* 0011000 */
3137 0x30, /* 0011000 */
3138 0x30, /* 0011000 */
3139 0x3e, /* 0011111 */
3140 0x30, /* 0011000 */
3141 0x30, /* 0011000 */
3142 0x30, /* 0011000 */
3143 0x30, /* 0011000 */
3144 0x30, /* 0011000 */
3145 0x30, /* 0011000 */
3146 0x30, /* 0011000 */
3147
3148 /* 196 0xc4 'Ä' */
3149 0x00, /* 0000000 */
3150 0x00, /* 0000000 */
3151 0x00, /* 0000000 */
3152 0x00, /* 0000000 */
3153 0x00, /* 0000000 */
3154 0x00, /* 0000000 */
3155 0xfe, /* 1111111 */
3156 0x00, /* 0000000 */
3157 0x00, /* 0000000 */
3158 0x00, /* 0000000 */
3159 0x00, /* 0000000 */
3160 0x00, /* 0000000 */
3161 0x00, /* 0000000 */
3162 0x00, /* 0000000 */
3163
3164 /* 197 0xc5 'Å' */
3165 0x30, /* 0011000 */
3166 0x30, /* 0011000 */
3167 0x30, /* 0011000 */
3168 0x30, /* 0011000 */
3169 0x30, /* 0011000 */
3170 0x30, /* 0011000 */
3171 0xfe, /* 1111111 */
3172 0x30, /* 0011000 */
3173 0x30, /* 0011000 */
3174 0x30, /* 0011000 */
3175 0x30, /* 0011000 */
3176 0x30, /* 0011000 */
3177 0x30, /* 0011000 */
3178 0x30, /* 0011000 */
3179
3180 /* 198 0xc6 'Æ' */
3181 0x30, /* 0011000 */
3182 0x30, /* 0011000 */
3183 0x30, /* 0011000 */
3184 0x30, /* 0011000 */
3185 0x3e, /* 0011111 */
3186 0x30, /* 0011000 */
3187 0x3e, /* 0011111 */
3188 0x30, /* 0011000 */
3189 0x30, /* 0011000 */
3190 0x30, /* 0011000 */
3191 0x30, /* 0011000 */
3192 0x30, /* 0011000 */
3193 0x30, /* 0011000 */
3194 0x30, /* 0011000 */
3195
3196 /* 199 0xc7 'Ç' */
3197 0x6c, /* 0110110 */
3198 0x6c, /* 0110110 */
3199 0x6c, /* 0110110 */
3200 0x6c, /* 0110110 */
3201 0x6c, /* 0110110 */
3202 0x6c, /* 0110110 */
3203 0x6e, /* 0110111 */
3204 0x6c, /* 0110110 */
3205 0x6c, /* 0110110 */
3206 0x6c, /* 0110110 */
3207 0x6c, /* 0110110 */
3208 0x6c, /* 0110110 */
3209 0x6c, /* 0110110 */
3210 0x6c, /* 0110110 */
3211
3212 /* 200 0xc8 'È' */
3213 0x6c, /* 0110110 */
3214 0x6c, /* 0110110 */
3215 0x6c, /* 0110110 */
3216 0x6c, /* 0110110 */
3217 0x6e, /* 0110111 */
3218 0x60, /* 0110000 */
3219 0x7e, /* 0111111 */
3220 0x00, /* 0000000 */
3221 0x00, /* 0000000 */
3222 0x00, /* 0000000 */
3223 0x00, /* 0000000 */
3224 0x00, /* 0000000 */
3225 0x00, /* 0000000 */
3226 0x00, /* 0000000 */
3227
3228 /* 201 0xc9 'É' */
3229 0x00, /* 0000000 */
3230 0x00, /* 0000000 */
3231 0x00, /* 0000000 */
3232 0x00, /* 0000000 */
3233 0x7e, /* 0111111 */
3234 0x60, /* 0110000 */
3235 0x6e, /* 0110111 */
3236 0x6c, /* 0110110 */
3237 0x6c, /* 0110110 */
3238 0x6c, /* 0110110 */
3239 0x6c, /* 0110110 */
3240 0x6c, /* 0110110 */
3241 0x6c, /* 0110110 */
3242 0x6c, /* 0110110 */
3243
3244 /* 202 0xca 'Ê' */
3245 0x6c, /* 0110110 */
3246 0x6c, /* 0110110 */
3247 0x6c, /* 0110110 */
3248 0x6c, /* 0110110 */
3249 0xee, /* 1110111 */
3250 0x00, /* 0000000 */
3251 0xfe, /* 1111111 */
3252 0x00, /* 0000000 */
3253 0x00, /* 0000000 */
3254 0x00, /* 0000000 */
3255 0x00, /* 0000000 */
3256 0x00, /* 0000000 */
3257 0x00, /* 0000000 */
3258 0x00, /* 0000000 */
3259
3260 /* 203 0xcb 'Ë' */
3261 0x00, /* 0000000 */
3262 0x00, /* 0000000 */
3263 0x00, /* 0000000 */
3264 0x00, /* 0000000 */
3265 0xfe, /* 1111111 */
3266 0x00, /* 0000000 */
3267 0xee, /* 1110111 */
3268 0x6c, /* 0110110 */
3269 0x6c, /* 0110110 */
3270 0x6c, /* 0110110 */
3271 0x6c, /* 0110110 */
3272 0x6c, /* 0110110 */
3273 0x6c, /* 0110110 */
3274 0x6c, /* 0110110 */
3275
3276 /* 204 0xcc 'Ì' */
3277 0x6c, /* 0110110 */
3278 0x6c, /* 0110110 */
3279 0x6c, /* 0110110 */
3280 0x6c, /* 0110110 */
3281 0x6e, /* 0110111 */
3282 0x60, /* 0110000 */
3283 0x6e, /* 0110111 */
3284 0x6c, /* 0110110 */
3285 0x6c, /* 0110110 */
3286 0x6c, /* 0110110 */
3287 0x6c, /* 0110110 */
3288 0x6c, /* 0110110 */
3289 0x6c, /* 0110110 */
3290 0x6c, /* 0110110 */
3291
3292 /* 205 0xcd 'Í' */
3293 0x00, /* 0000000 */
3294 0x00, /* 0000000 */
3295 0x00, /* 0000000 */
3296 0x00, /* 0000000 */
3297 0xfe, /* 1111111 */
3298 0x00, /* 0000000 */
3299 0xfe, /* 1111111 */
3300 0x00, /* 0000000 */
3301 0x00, /* 0000000 */
3302 0x00, /* 0000000 */
3303 0x00, /* 0000000 */
3304 0x00, /* 0000000 */
3305 0x00, /* 0000000 */
3306 0x00, /* 0000000 */
3307
3308 /* 206 0xce 'Î' */
3309 0x6c, /* 0110110 */
3310 0x6c, /* 0110110 */
3311 0x6c, /* 0110110 */
3312 0x6c, /* 0110110 */
3313 0xee, /* 1110111 */
3314 0x00, /* 0000000 */
3315 0xee, /* 1110111 */
3316 0x6c, /* 0110110 */
3317 0x6c, /* 0110110 */
3318 0x6c, /* 0110110 */
3319 0x6c, /* 0110110 */
3320 0x6c, /* 0110110 */
3321 0x6c, /* 0110110 */
3322 0x6c, /* 0110110 */
3323
3324 /* 207 0xcf 'Ï' */
3325 0x30, /* 0011000 */
3326 0x30, /* 0011000 */
3327 0x30, /* 0011000 */
3328 0x30, /* 0011000 */
3329 0xfe, /* 1111111 */
3330 0x00, /* 0000000 */
3331 0xfe, /* 1111111 */
3332 0x00, /* 0000000 */
3333 0x00, /* 0000000 */
3334 0x00, /* 0000000 */
3335 0x00, /* 0000000 */
3336 0x00, /* 0000000 */
3337 0x00, /* 0000000 */
3338 0x00, /* 0000000 */
3339
3340 /* 208 0xd0 'Ð' */
3341 0x6c, /* 0110110 */
3342 0x6c, /* 0110110 */
3343 0x6c, /* 0110110 */
3344 0x6c, /* 0110110 */
3345 0x6c, /* 0110110 */
3346 0x6c, /* 0110110 */
3347 0xfe, /* 1111111 */
3348 0x00, /* 0000000 */
3349 0x00, /* 0000000 */
3350 0x00, /* 0000000 */
3351 0x00, /* 0000000 */
3352 0x00, /* 0000000 */
3353 0x00, /* 0000000 */
3354 0x00, /* 0000000 */
3355
3356 /* 209 0xd1 'Ñ' */
3357 0x00, /* 0000000 */
3358 0x00, /* 0000000 */
3359 0x00, /* 0000000 */
3360 0x00, /* 0000000 */
3361 0xfe, /* 1111111 */
3362 0x00, /* 0000000 */
3363 0xfe, /* 1111111 */
3364 0x30, /* 0011000 */
3365 0x30, /* 0011000 */
3366 0x30, /* 0011000 */
3367 0x30, /* 0011000 */
3368 0x30, /* 0011000 */
3369 0x30, /* 0011000 */
3370 0x30, /* 0011000 */
3371
3372 /* 210 0xd2 'Ò' */
3373 0x00, /* 0000000 */
3374 0x00, /* 0000000 */
3375 0x00, /* 0000000 */
3376 0x00, /* 0000000 */
3377 0x00, /* 0000000 */
3378 0x00, /* 0000000 */
3379 0xfe, /* 1111111 */
3380 0x6c, /* 0110110 */
3381 0x6c, /* 0110110 */
3382 0x6c, /* 0110110 */
3383 0x6c, /* 0110110 */
3384 0x6c, /* 0110110 */
3385 0x6c, /* 0110110 */
3386 0x6c, /* 0110110 */
3387
3388 /* 211 0xd3 'Ó' */
3389 0x6c, /* 0110110 */
3390 0x6c, /* 0110110 */
3391 0x6c, /* 0110110 */
3392 0x6c, /* 0110110 */
3393 0x6c, /* 0110110 */
3394 0x6c, /* 0110110 */
3395 0x7e, /* 0111111 */
3396 0x00, /* 0000000 */
3397 0x00, /* 0000000 */
3398 0x00, /* 0000000 */
3399 0x00, /* 0000000 */
3400 0x00, /* 0000000 */
3401 0x00, /* 0000000 */
3402 0x00, /* 0000000 */
3403
3404 /* 212 0xd4 'Ô' */
3405 0x30, /* 0011000 */
3406 0x30, /* 0011000 */
3407 0x30, /* 0011000 */
3408 0x30, /* 0011000 */
3409 0x3e, /* 0011111 */
3410 0x30, /* 0011000 */
3411 0x3e, /* 0011111 */
3412 0x00, /* 0000000 */
3413 0x00, /* 0000000 */
3414 0x00, /* 0000000 */
3415 0x00, /* 0000000 */
3416 0x00, /* 0000000 */
3417 0x00, /* 0000000 */
3418 0x00, /* 0000000 */
3419
3420 /* 213 0xd5 'Õ' */
3421 0x00, /* 0000000 */
3422 0x00, /* 0000000 */
3423 0x00, /* 0000000 */
3424 0x00, /* 0000000 */
3425 0x3e, /* 0011111 */
3426 0x30, /* 0011000 */
3427 0x3e, /* 0011111 */
3428 0x30, /* 0011000 */
3429 0x30, /* 0011000 */
3430 0x30, /* 0011000 */
3431 0x30, /* 0011000 */
3432 0x30, /* 0011000 */
3433 0x30, /* 0011000 */
3434 0x30, /* 0011000 */
3435
3436 /* 214 0xd6 'Ö' */
3437 0x00, /* 0000000 */
3438 0x00, /* 0000000 */
3439 0x00, /* 0000000 */
3440 0x00, /* 0000000 */
3441 0x00, /* 0000000 */
3442 0x00, /* 0000000 */
3443 0x7e, /* 0111111 */
3444 0x6c, /* 0110110 */
3445 0x6c, /* 0110110 */
3446 0x6c, /* 0110110 */
3447 0x6c, /* 0110110 */
3448 0x6c, /* 0110110 */
3449 0x6c, /* 0110110 */
3450 0x6c, /* 0110110 */
3451
3452 /* 215 0xd7 '×' */
3453 0x6c, /* 0110110 */
3454 0x6c, /* 0110110 */
3455 0x6c, /* 0110110 */
3456 0x6c, /* 0110110 */
3457 0x6c, /* 0110110 */
3458 0x6c, /* 0110110 */
3459 0xfe, /* 1111111 */
3460 0x6c, /* 0110110 */
3461 0x6c, /* 0110110 */
3462 0x6c, /* 0110110 */
3463 0x6c, /* 0110110 */
3464 0x6c, /* 0110110 */
3465 0x6c, /* 0110110 */
3466 0x6c, /* 0110110 */
3467
3468 /* 216 0xd8 'Ø' */
3469 0x30, /* 0011000 */
3470 0x30, /* 0011000 */
3471 0x30, /* 0011000 */
3472 0x30, /* 0011000 */
3473 0xfe, /* 1111111 */
3474 0x30, /* 0011000 */
3475 0xfe, /* 1111111 */
3476 0x30, /* 0011000 */
3477 0x30, /* 0011000 */
3478 0x30, /* 0011000 */
3479 0x30, /* 0011000 */
3480 0x30, /* 0011000 */
3481 0x30, /* 0011000 */
3482 0x30, /* 0011000 */
3483
3484 /* 217 0xd9 'Ù' */
3485 0x30, /* 0011000 */
3486 0x30, /* 0011000 */
3487 0x30, /* 0011000 */
3488 0x30, /* 0011000 */
3489 0x30, /* 0011000 */
3490 0x30, /* 0011000 */
3491 0xf0, /* 1111000 */
3492 0x00, /* 0000000 */
3493 0x00, /* 0000000 */
3494 0x00, /* 0000000 */
3495 0x00, /* 0000000 */
3496 0x00, /* 0000000 */
3497 0x00, /* 0000000 */
3498 0x00, /* 0000000 */
3499
3500 /* 218 0xda 'Ú' */
3501 0x00, /* 0000000 */
3502 0x00, /* 0000000 */
3503 0x00, /* 0000000 */
3504 0x00, /* 0000000 */
3505 0x00, /* 0000000 */
3506 0x00, /* 0000000 */
3507 0x3e, /* 0011111 */
3508 0x30, /* 0011000 */
3509 0x30, /* 0011000 */
3510 0x30, /* 0011000 */
3511 0x30, /* 0011000 */
3512 0x30, /* 0011000 */
3513 0x30, /* 0011000 */
3514 0x30, /* 0011000 */
3515
3516 /* 219 0xdb 'Û' */
3517 0xfe, /* 1111111 */
3518 0xfe, /* 1111111 */
3519 0xfe, /* 1111111 */
3520 0xfe, /* 1111111 */
3521 0xfe, /* 1111111 */
3522 0xfe, /* 1111111 */
3523 0xfe, /* 1111111 */
3524 0xfe, /* 1111111 */
3525 0xfe, /* 1111111 */
3526 0xfe, /* 1111111 */
3527 0xfe, /* 1111111 */
3528 0xfe, /* 1111111 */
3529 0xfe, /* 1111111 */
3530 0xfe, /* 1111111 */
3531
3532 /* 220 0xdc 'Ü' */
3533 0x00, /* 0000000 */
3534 0x00, /* 0000000 */
3535 0x00, /* 0000000 */
3536 0x00, /* 0000000 */
3537 0x00, /* 0000000 */
3538 0x00, /* 0000000 */
3539 0xfe, /* 1111111 */
3540 0xfe, /* 1111111 */
3541 0xfe, /* 1111111 */
3542 0xfe, /* 1111111 */
3543 0xfe, /* 1111111 */
3544 0xfe, /* 1111111 */
3545 0xfe, /* 1111111 */
3546 0xfe, /* 1111111 */
3547
3548 /* 221 0xdd 'Ý' */
3549 0xe0, /* 1110000 */
3550 0xe0, /* 1110000 */
3551 0xe0, /* 1110000 */
3552 0xe0, /* 1110000 */
3553 0xe0, /* 1110000 */
3554 0xe0, /* 1110000 */
3555 0xe0, /* 1110000 */
3556 0xe0, /* 1110000 */
3557 0xe0, /* 1110000 */
3558 0xe0, /* 1110000 */
3559 0xe0, /* 1110000 */
3560 0xe0, /* 1110000 */
3561 0xe0, /* 1110000 */
3562 0xe0, /* 1110000 */
3563
3564 /* 222 0xde 'Þ' */
3565 0x1e, /* 0001111 */
3566 0x1e, /* 0001111 */
3567 0x1e, /* 0001111 */
3568 0x1e, /* 0001111 */
3569 0x1e, /* 0001111 */
3570 0x1e, /* 0001111 */
3571 0x1e, /* 0001111 */
3572 0x1e, /* 0001111 */
3573 0x1e, /* 0001111 */
3574 0x1e, /* 0001111 */
3575 0x1e, /* 0001111 */
3576 0x1e, /* 0001111 */
3577 0x1e, /* 0001111 */
3578 0x1e, /* 0001111 */
3579
3580 /* 223 0xdf 'ß' */
3581 0xfe, /* 1111111 */
3582 0xfe, /* 1111111 */
3583 0xfe, /* 1111111 */
3584 0xfe, /* 1111111 */
3585 0xfe, /* 1111111 */
3586 0xfe, /* 1111111 */
3587 0x00, /* 0000000 */
3588 0x00, /* 0000000 */
3589 0x00, /* 0000000 */
3590 0x00, /* 0000000 */
3591 0x00, /* 0000000 */
3592 0x00, /* 0000000 */
3593 0x00, /* 0000000 */
3594 0x00, /* 0000000 */
3595
3596 /* 224 0xe0 'à' */
3597 0x00, /* 0000000 */
3598 0x00, /* 0000000 */
3599 0x00, /* 0000000 */
3600 0x00, /* 0000000 */
3601 0x76, /* 0111011 */
3602 0xdc, /* 1101110 */
3603 0xd8, /* 1101100 */
3604 0xd8, /* 1101100 */
3605 0xd8, /* 1101100 */
3606 0xdc, /* 1101110 */
3607 0x76, /* 0111011 */
3608 0x00, /* 0000000 */
3609 0x00, /* 0000000 */
3610 0x00, /* 0000000 */
3611
3612 /* 225 0xe1 'á' */
3613 0x00, /* 0000000 */
3614 0x78, /* 0111100 */
3615 0xcc, /* 1100110 */
3616 0xcc, /* 1100110 */
3617 0xcc, /* 1100110 */
3618 0xd8, /* 1101100 */
3619 0xcc, /* 1100110 */
3620 0xc6, /* 1100011 */
3621 0xc6, /* 1100011 */
3622 0xc6, /* 1100011 */
3623 0xcc, /* 1100110 */
3624 0x00, /* 0000000 */
3625 0x00, /* 0000000 */
3626 0x00, /* 0000000 */
3627
3628 /* 226 0xe2 'â' */
3629 0x00, /* 0000000 */
3630 0xfc, /* 1111110 */
3631 0xcc, /* 1100110 */
3632 0xcc, /* 1100110 */
3633 0xc0, /* 1100000 */
3634 0xc0, /* 1100000 */
3635 0xc0, /* 1100000 */
3636 0xc0, /* 1100000 */
3637 0xc0, /* 1100000 */
3638 0xc0, /* 1100000 */
3639 0xc0, /* 1100000 */
3640 0x00, /* 0000000 */
3641 0x00, /* 0000000 */
3642 0x00, /* 0000000 */
3643
3644 /* 227 0xe3 'ã' */
3645 0x00, /* 0000000 */
3646 0x00, /* 0000000 */
3647 0xfe, /* 1111111 */
3648 0xfe, /* 1111111 */
3649 0x6c, /* 0110110 */
3650 0x6c, /* 0110110 */
3651 0x6c, /* 0110110 */
3652 0x6c, /* 0110110 */
3653 0x6c, /* 0110110 */
3654 0x6c, /* 0110110 */
3655 0x6c, /* 0110110 */
3656 0x00, /* 0000000 */
3657 0x00, /* 0000000 */
3658 0x00, /* 0000000 */
3659
3660 /* 228 0xe4 'ä' */
3661 0x00, /* 0000000 */
3662 0xfc, /* 1111110 */
3663 0xcc, /* 1100110 */
3664 0x60, /* 0110000 */
3665 0x30, /* 0011000 */
3666 0x18, /* 0001100 */
3667 0x18, /* 0001100 */
3668 0x30, /* 0011000 */
3669 0x60, /* 0110000 */
3670 0xcc, /* 1100110 */
3671 0xfc, /* 1111110 */
3672 0x00, /* 0000000 */
3673 0x00, /* 0000000 */
3674 0x00, /* 0000000 */
3675
3676 /* 229 0xe5 'å' */
3677 0x00, /* 0000000 */
3678 0x00, /* 0000000 */
3679 0x00, /* 0000000 */
3680 0x00, /* 0000000 */
3681 0x7e, /* 0111111 */
3682 0xd8, /* 1101100 */
3683 0xd8, /* 1101100 */
3684 0xd8, /* 1101100 */
3685 0xd8, /* 1101100 */
3686 0xd8, /* 1101100 */
3687 0x70, /* 0111000 */
3688 0x00, /* 0000000 */
3689 0x00, /* 0000000 */
3690 0x00, /* 0000000 */
3691
3692 /* 230 0xe6 'æ' */
3693 0x00, /* 0000000 */
3694 0x00, /* 0000000 */
3695 0x00, /* 0000000 */
3696 0x00, /* 0000000 */
3697 0xcc, /* 1100110 */
3698 0xcc, /* 1100110 */
3699 0xcc, /* 1100110 */
3700 0xcc, /* 1100110 */
3701 0xcc, /* 1100110 */
3702 0xcc, /* 1100110 */
3703 0xf8, /* 1111100 */
3704 0xc0, /* 1100000 */
3705 0xc0, /* 1100000 */
3706 0x80, /* 1000000 */
3707
3708 /* 231 0xe7 'ç' */
3709 0x00, /* 0000000 */
3710 0x00, /* 0000000 */
3711 0x00, /* 0000000 */
3712 0x76, /* 0111011 */
3713 0xdc, /* 1101110 */
3714 0x18, /* 0001100 */
3715 0x18, /* 0001100 */
3716 0x18, /* 0001100 */
3717 0x18, /* 0001100 */
3718 0x18, /* 0001100 */
3719 0x18, /* 0001100 */
3720 0x00, /* 0000000 */
3721 0x00, /* 0000000 */
3722 0x00, /* 0000000 */
3723
3724 /* 232 0xe8 'è' */
3725 0x00, /* 0000000 */
3726 0xfc, /* 1111110 */
3727 0x30, /* 0011000 */
3728 0x78, /* 0111100 */
3729 0xcc, /* 1100110 */
3730 0xcc, /* 1100110 */
3731 0xcc, /* 1100110 */
3732 0xcc, /* 1100110 */
3733 0x78, /* 0111100 */
3734 0x30, /* 0011000 */
3735 0xfc, /* 1111110 */
3736 0x00, /* 0000000 */
3737 0x00, /* 0000000 */
3738 0x00, /* 0000000 */
3739
3740 /* 233 0xe9 'é' */
3741 0x00, /* 0000000 */
3742 0x38, /* 0011100 */
3743 0x6c, /* 0110110 */
3744 0xcc, /* 1100110 */
3745 0xcc, /* 1100110 */
3746 0xfc, /* 1111110 */
3747 0xcc, /* 1100110 */
3748 0xcc, /* 1100110 */
3749 0xcc, /* 1100110 */
3750 0x6c, /* 0110110 */
3751 0x38, /* 0011100 */
3752 0x00, /* 0000000 */
3753 0x00, /* 0000000 */
3754 0x00, /* 0000000 */
3755
3756 /* 234 0xea 'ê' */
3757 0x00, /* 0000000 */
3758 0x38, /* 0011100 */
3759 0x6c, /* 0110110 */
3760 0xc6, /* 1100011 */
3761 0xc6, /* 1100011 */
3762 0xc6, /* 1100011 */
3763 0x6c, /* 0110110 */
3764 0x6c, /* 0110110 */
3765 0x6c, /* 0110110 */
3766 0x6c, /* 0110110 */
3767 0xee, /* 1110111 */
3768 0x00, /* 0000000 */
3769 0x00, /* 0000000 */
3770 0x00, /* 0000000 */
3771
3772 /* 235 0xeb 'ë' */
3773 0x00, /* 0000000 */
3774 0x3c, /* 0011110 */
3775 0x60, /* 0110000 */
3776 0x30, /* 0011000 */
3777 0x18, /* 0001100 */
3778 0x7c, /* 0111110 */
3779 0xcc, /* 1100110 */
3780 0xcc, /* 1100110 */
3781 0xcc, /* 1100110 */
3782 0xcc, /* 1100110 */
3783 0x78, /* 0111100 */
3784 0x00, /* 0000000 */
3785 0x00, /* 0000000 */
3786 0x00, /* 0000000 */
3787
3788 /* 236 0xec 'ì' */
3789 0x00, /* 0000000 */
3790 0x00, /* 0000000 */
3791 0x00, /* 0000000 */
3792 0x00, /* 0000000 */
3793 0x7c, /* 0111110 */
3794 0xd6, /* 1101011 */
3795 0xd6, /* 1101011 */
3796 0xd6, /* 1101011 */
3797 0x7c, /* 0111110 */
3798 0x00, /* 0000000 */
3799 0x00, /* 0000000 */
3800 0x00, /* 0000000 */
3801 0x00, /* 0000000 */
3802 0x00, /* 0000000 */
3803
3804 /* 237 0xed 'í' */
3805 0x00, /* 0000000 */
3806 0x00, /* 0000000 */
3807 0x06, /* 0000011 */
3808 0x0c, /* 0000110 */
3809 0x7c, /* 0111110 */
3810 0xd6, /* 1101011 */
3811 0xd6, /* 1101011 */
3812 0xe6, /* 1110011 */
3813 0x7c, /* 0111110 */
3814 0x60, /* 0110000 */
3815 0xc0, /* 1100000 */
3816 0x00, /* 0000000 */
3817 0x00, /* 0000000 */
3818 0x00, /* 0000000 */
3819
3820 /* 238 0xee 'î' */
3821 0x00, /* 0000000 */
3822 0x1c, /* 0001110 */
3823 0x30, /* 0011000 */
3824 0x60, /* 0110000 */
3825 0x60, /* 0110000 */
3826 0x7c, /* 0111110 */
3827 0x60, /* 0110000 */
3828 0x60, /* 0110000 */
3829 0x60, /* 0110000 */
3830 0x30, /* 0011000 */
3831 0x1c, /* 0001110 */
3832 0x00, /* 0000000 */
3833 0x00, /* 0000000 */
3834 0x00, /* 0000000 */
3835
3836 /* 239 0xef 'ï' */
3837 0x00, /* 0000000 */
3838 0x00, /* 0000000 */
3839 0x78, /* 0111100 */
3840 0xcc, /* 1100110 */
3841 0xcc, /* 1100110 */
3842 0xcc, /* 1100110 */
3843 0xcc, /* 1100110 */
3844 0xcc, /* 1100110 */
3845 0xcc, /* 1100110 */
3846 0xcc, /* 1100110 */
3847 0xcc, /* 1100110 */
3848 0x00, /* 0000000 */
3849 0x00, /* 0000000 */
3850 0x00, /* 0000000 */
3851
3852 /* 240 0xf0 'ð' */
3853 0x00, /* 0000000 */
3854 0x00, /* 0000000 */
3855 0x00, /* 0000000 */
3856 0xfc, /* 1111110 */
3857 0x00, /* 0000000 */
3858 0x00, /* 0000000 */
3859 0xfc, /* 1111110 */
3860 0x00, /* 0000000 */
3861 0x00, /* 0000000 */
3862 0xfc, /* 1111110 */
3863 0x00, /* 0000000 */
3864 0x00, /* 0000000 */
3865 0x00, /* 0000000 */
3866 0x00, /* 0000000 */
3867
3868 /* 241 0xf1 'ñ' */
3869 0x00, /* 0000000 */
3870 0x00, /* 0000000 */
3871 0x00, /* 0000000 */
3872 0x30, /* 0011000 */
3873 0x30, /* 0011000 */
3874 0xfc, /* 1111110 */
3875 0x30, /* 0011000 */
3876 0x30, /* 0011000 */
3877 0x00, /* 0000000 */
3878 0x00, /* 0000000 */
3879 0xfc, /* 1111110 */
3880 0x00, /* 0000000 */
3881 0x00, /* 0000000 */
3882 0x00, /* 0000000 */
3883
3884 /* 242 0xf2 'ò' */
3885 0x00, /* 0000000 */
3886 0x00, /* 0000000 */
3887 0x60, /* 0110000 */
3888 0x30, /* 0011000 */
3889 0x18, /* 0001100 */
3890 0x0c, /* 0000110 */
3891 0x18, /* 0001100 */
3892 0x30, /* 0011000 */
3893 0x60, /* 0110000 */
3894 0x00, /* 0000000 */
3895 0xfc, /* 1111110 */
3896 0x00, /* 0000000 */
3897 0x00, /* 0000000 */
3898 0x00, /* 0000000 */
3899
3900 /* 243 0xf3 'ó' */
3901 0x00, /* 0000000 */
3902 0x00, /* 0000000 */
3903 0x18, /* 0001100 */
3904 0x30, /* 0011000 */
3905 0x60, /* 0110000 */
3906 0xc0, /* 1100000 */
3907 0x60, /* 0110000 */
3908 0x30, /* 0011000 */
3909 0x18, /* 0001100 */
3910 0x00, /* 0000000 */
3911 0xfc, /* 1111110 */
3912 0x00, /* 0000000 */
3913 0x00, /* 0000000 */
3914 0x00, /* 0000000 */
3915
3916 /* 244 0xf4 'ô' */
3917 0x00, /* 0000000 */
3918 0x1c, /* 0001110 */
3919 0x36, /* 0011011 */
3920 0x36, /* 0011011 */
3921 0x30, /* 0011000 */
3922 0x30, /* 0011000 */
3923 0x30, /* 0011000 */
3924 0x30, /* 0011000 */
3925 0x30, /* 0011000 */
3926 0x30, /* 0011000 */
3927 0x30, /* 0011000 */
3928 0x30, /* 0011000 */
3929 0x30, /* 0011000 */
3930 0x30, /* 0011000 */
3931
3932 /* 245 0xf5 'õ' */
3933 0x18, /* 0001100 */
3934 0x18, /* 0001100 */
3935 0x18, /* 0001100 */
3936 0x18, /* 0001100 */
3937 0x18, /* 0001100 */
3938 0x18, /* 0001100 */
3939 0x18, /* 0001100 */
3940 0x18, /* 0001100 */
3941 0xd8, /* 1101100 */
3942 0xd8, /* 1101100 */
3943 0xd8, /* 1101100 */
3944 0x70, /* 0111000 */
3945 0x00, /* 0000000 */
3946 0x00, /* 0000000 */
3947
3948 /* 246 0xf6 'ö' */
3949 0x00, /* 0000000 */
3950 0x00, /* 0000000 */
3951 0x00, /* 0000000 */
3952 0x00, /* 0000000 */
3953 0x30, /* 0011000 */
3954 0x00, /* 0000000 */
3955 0xfc, /* 1111110 */
3956 0x00, /* 0000000 */
3957 0x30, /* 0011000 */
3958 0x00, /* 0000000 */
3959 0x00, /* 0000000 */
3960 0x00, /* 0000000 */
3961 0x00, /* 0000000 */
3962 0x00, /* 0000000 */
3963
3964 /* 247 0xf7 '÷' */
3965 0x00, /* 0000000 */
3966 0x00, /* 0000000 */
3967 0x00, /* 0000000 */
3968 0x00, /* 0000000 */
3969 0x76, /* 0111011 */
3970 0xdc, /* 1101110 */
3971 0x00, /* 0000000 */
3972 0x76, /* 0111011 */
3973 0xdc, /* 1101110 */
3974 0x00, /* 0000000 */
3975 0x00, /* 0000000 */
3976 0x00, /* 0000000 */
3977 0x00, /* 0000000 */
3978 0x00, /* 0000000 */
3979
3980 /* 248 0xf8 'ø' */
3981 0x38, /* 0011100 */
3982 0x6c, /* 0110110 */
3983 0x6c, /* 0110110 */
3984 0x38, /* 0011100 */
3985 0x00, /* 0000000 */
3986 0x00, /* 0000000 */
3987 0x00, /* 0000000 */
3988 0x00, /* 0000000 */
3989 0x00, /* 0000000 */
3990 0x00, /* 0000000 */
3991 0x00, /* 0000000 */
3992 0x00, /* 0000000 */
3993 0x00, /* 0000000 */
3994 0x00, /* 0000000 */
3995
3996 /* 249 0xf9 'ù' */
3997 0x00, /* 0000000 */
3998 0x00, /* 0000000 */
3999 0x00, /* 0000000 */
4000 0x00, /* 0000000 */
4001 0x00, /* 0000000 */
4002 0x00, /* 0000000 */
4003 0x30, /* 0011000 */
4004 0x30, /* 0011000 */
4005 0x00, /* 0000000 */
4006 0x00, /* 0000000 */
4007 0x00, /* 0000000 */
4008 0x00, /* 0000000 */
4009 0x00, /* 0000000 */
4010 0x00, /* 0000000 */
4011
4012 /* 250 0xfa 'ú' */
4013 0x00, /* 0000000 */
4014 0x00, /* 0000000 */
4015 0x00, /* 0000000 */
4016 0x00, /* 0000000 */
4017 0x00, /* 0000000 */
4018 0x00, /* 0000000 */
4019 0x30, /* 0011000 */
4020 0x00, /* 0000000 */
4021 0x00, /* 0000000 */
4022 0x00, /* 0000000 */
4023 0x00, /* 0000000 */
4024 0x00, /* 0000000 */
4025 0x00, /* 0000000 */
4026 0x00, /* 0000000 */
4027
4028 /* 251 0xfb 'û' */
4029 0x1e, /* 0001111 */
4030 0x18, /* 0001100 */
4031 0x18, /* 0001100 */
4032 0x18, /* 0001100 */
4033 0x18, /* 0001100 */
4034 0x18, /* 0001100 */
4035 0xd8, /* 1101100 */
4036 0xd8, /* 1101100 */
4037 0xd8, /* 1101100 */
4038 0x78, /* 0111100 */
4039 0x38, /* 0011100 */
4040 0x00, /* 0000000 */
4041 0x00, /* 0000000 */
4042 0x00, /* 0000000 */
4043
4044 /* 252 0xfc 'ü' */
4045 0xd8, /* 1101100 */
4046 0x6c, /* 0110110 */
4047 0x6c, /* 0110110 */
4048 0x6c, /* 0110110 */
4049 0x6c, /* 0110110 */
4050 0x6c, /* 0110110 */
4051 0x00, /* 0000000 */
4052 0x00, /* 0000000 */
4053 0x00, /* 0000000 */
4054 0x00, /* 0000000 */
4055 0x00, /* 0000000 */
4056 0x00, /* 0000000 */
4057 0x00, /* 0000000 */
4058 0x00, /* 0000000 */
4059
4060 /* 253 0xfd 'ý' */
4061 0x78, /* 0111100 */
4062 0xcc, /* 1100110 */
4063 0x18, /* 0001100 */
4064 0x30, /* 0011000 */
4065 0x64, /* 0110010 */
4066 0xfc, /* 1111110 */
4067 0x00, /* 0000000 */
4068 0x00, /* 0000000 */
4069 0x00, /* 0000000 */
4070 0x00, /* 0000000 */
4071 0x00, /* 0000000 */
4072 0x00, /* 0000000 */
4073 0x00, /* 0000000 */
4074 0x00, /* 0000000 */
4075
4076 /* 254 0xfe 'þ' */
4077 0x00, /* 0000000 */
4078 0x00, /* 0000000 */
4079 0x00, /* 0000000 */
4080 0x7c, /* 0111110 */
4081 0x7c, /* 0111110 */
4082 0x7c, /* 0111110 */
4083 0x7c, /* 0111110 */
4084 0x7c, /* 0111110 */
4085 0x7c, /* 0111110 */
4086 0x7c, /* 0111110 */
4087 0x00, /* 0000000 */
4088 0x00, /* 0000000 */
4089 0x00, /* 0000000 */
4090 0x00, /* 0000000 */
4091
4092 /* 255 0xff 'ÿ' */
4093 0x00, /* 0000000 */
4094 0x00, /* 0000000 */
4095 0x00, /* 0000000 */
4096 0x00, /* 0000000 */
4097 0x00, /* 0000000 */
4098 0x00, /* 0000000 */
4099 0x00, /* 0000000 */
4100 0x00, /* 0000000 */
4101 0x00, /* 0000000 */
4102 0x00, /* 0000000 */
4103 0x00, /* 0000000 */
4104 0x00, /* 0000000 */
4105 0x00, /* 0000000 */
4106 0x00, /* 0000000 */
4107
4108};
4109
4110
4111struct font_desc font_7x14 = {
4112 FONT7x14_IDX,
4113 "7x14",
4114 7,
4115 14,
4116 fontdata_7x14,
4117 0
4118};
diff --git a/drivers/video/console/font_sun12x22.c b/drivers/video/console/font_sun12x22.c
index 05215d0c3e09..c7bd967ea100 100644
--- a/drivers/video/console/font_sun12x22.c
+++ b/drivers/video/console/font_sun12x22.c
@@ -29,24 +29,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
29 0x00, 0x00, /* 000000000000 */ 29 0x00, 0x00, /* 000000000000 */
30 30
31 /* 1 0x01 '^A' */ 31 /* 1 0x01 '^A' */
32 /* FIXME */
33 0x00, 0x00, /* 000000000000 */ 32 0x00, 0x00, /* 000000000000 */
34 0x00, 0x00, /* 000000000000 */ 33 0x00, 0x00, /* 000000000000 */
35 0x00, 0x00, /* 000000000000 */ 34 0x00, 0x00, /* 000000000000 */
36 0x00, 0x00, /* 000000000000 */ 35 0x00, 0x00, /* 000000000000 */
36 0x1f, 0xc0, /* 000111111100 */
37 0x30, 0x60, /* 001100000110 */
38 0x65, 0x30, /* 011001010011 */
39 0x6d, 0xb0, /* 011011011011 */
40 0x60, 0x30, /* 011000000011 */
41 0x62, 0x30, /* 011000100011 */
42 0x62, 0x30, /* 011000100011 */
43 0x60, 0x30, /* 011000000011 */
44 0x6f, 0xb0, /* 011011111011 */
45 0x67, 0x30, /* 011001110011 */
46 0x30, 0x60, /* 001100000110 */
47 0x1f, 0xc0, /* 000111111100 */
37 0x00, 0x00, /* 000000000000 */ 48 0x00, 0x00, /* 000000000000 */
38 0x3f, 0xc0, /* 001111111100 */
39 0x3f, 0xc0, /* 001111111100 */
40 0x3f, 0xc0, /* 001111111100 */
41 0x3f, 0xc0, /* 001111111100 */
42 0x3f, 0xc0, /* 001111111100 */
43 0x3f, 0xc0, /* 001111111100 */
44 0x3f, 0xc0, /* 001111111100 */
45 0x3f, 0xc0, /* 001111111100 */
46 0x3f, 0xc0, /* 001111111100 */
47 0x3f, 0xc0, /* 001111111100 */
48 0x3f, 0xc0, /* 001111111100 */
49 0x3f, 0xc0, /* 001111111100 */
50 0x00, 0x00, /* 000000000000 */ 49 0x00, 0x00, /* 000000000000 */
51 0x00, 0x00, /* 000000000000 */ 50 0x00, 0x00, /* 000000000000 */
52 0x00, 0x00, /* 000000000000 */ 51 0x00, 0x00, /* 000000000000 */
@@ -54,24 +53,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
54 0x00, 0x00, /* 000000000000 */ 53 0x00, 0x00, /* 000000000000 */
55 54
56 /* 2 0x02 '^B' */ 55 /* 2 0x02 '^B' */
57 /* FIXME */
58 0x00, 0x00, /* 000000000000 */ 56 0x00, 0x00, /* 000000000000 */
59 0x00, 0x00, /* 000000000000 */ 57 0x00, 0x00, /* 000000000000 */
60 0x00, 0x00, /* 000000000000 */ 58 0x00, 0x00, /* 000000000000 */
61 0x00, 0x00, /* 000000000000 */ 59 0x00, 0x00, /* 000000000000 */
60 0x1f, 0xc0, /* 000111111100 */
61 0x3f, 0xe0, /* 001111111110 */
62 0x7a, 0xf0, /* 011110101111 */
63 0x72, 0x70, /* 011100100111 */
64 0x7f, 0xf0, /* 011111111111 */
65 0x7d, 0xf0, /* 011111011111 */
66 0x7d, 0xf0, /* 011111011111 */
67 0x7f, 0xf0, /* 011111111111 */
68 0x70, 0x70, /* 011100000111 */
69 0x78, 0xf0, /* 011110001111 */
70 0x3f, 0xe0, /* 001111111110 */
71 0x1f, 0xc0, /* 000111111100 */
62 0x00, 0x00, /* 000000000000 */ 72 0x00, 0x00, /* 000000000000 */
63 0x3f, 0xc0, /* 001111111100 */
64 0x3f, 0xc0, /* 001111111100 */
65 0x3f, 0xc0, /* 001111111100 */
66 0x3f, 0xc0, /* 001111111100 */
67 0x3f, 0xc0, /* 001111111100 */
68 0x3f, 0xc0, /* 001111111100 */
69 0x3f, 0xc0, /* 001111111100 */
70 0x3f, 0xc0, /* 001111111100 */
71 0x3f, 0xc0, /* 001111111100 */
72 0x3f, 0xc0, /* 001111111100 */
73 0x3f, 0xc0, /* 001111111100 */
74 0x3f, 0xc0, /* 001111111100 */
75 0x00, 0x00, /* 000000000000 */ 73 0x00, 0x00, /* 000000000000 */
76 0x00, 0x00, /* 000000000000 */ 74 0x00, 0x00, /* 000000000000 */
77 0x00, 0x00, /* 000000000000 */ 75 0x00, 0x00, /* 000000000000 */
@@ -79,24 +77,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
79 0x00, 0x00, /* 000000000000 */ 77 0x00, 0x00, /* 000000000000 */
80 78
81 /* 3 0x03 '^C' */ 79 /* 3 0x03 '^C' */
82 /* FIXME */
83 0x00, 0x00, /* 000000000000 */ 80 0x00, 0x00, /* 000000000000 */
84 0x00, 0x00, /* 000000000000 */ 81 0x00, 0x00, /* 000000000000 */
85 0x00, 0x00, /* 000000000000 */ 82 0x00, 0x00, /* 000000000000 */
86 0x00, 0x00, /* 000000000000 */ 83 0x00, 0x00, /* 000000000000 */
87 0x00, 0x00, /* 000000000000 */ 84 0x00, 0x00, /* 000000000000 */
85 0x00, 0x00, /* 000000000000 */
86 0x19, 0x80, /* 000110011000 */
88 0x3f, 0xc0, /* 001111111100 */ 87 0x3f, 0xc0, /* 001111111100 */
88 0x7f, 0xe0, /* 011111111110 */
89 0x3f, 0xc0, /* 001111111100 */ 89 0x3f, 0xc0, /* 001111111100 */
90 0x3f, 0xc0, /* 001111111100 */ 90 0x3f, 0xc0, /* 001111111100 */
91 0x3f, 0xc0, /* 001111111100 */ 91 0x1f, 0x80, /* 000111111000 */
92 0x3f, 0xc0, /* 001111111100 */ 92 0x1f, 0x80, /* 000111111000 */
93 0x3f, 0xc0, /* 001111111100 */ 93 0x0f, 0x00, /* 000011110000 */
94 0x3f, 0xc0, /* 001111111100 */ 94 0x0f, 0x00, /* 000011110000 */
95 0x3f, 0xc0, /* 001111111100 */ 95 0x06, 0x00, /* 000001100000 */
96 0x3f, 0xc0, /* 001111111100 */ 96 0x00, 0x00, /* 000000000000 */
97 0x3f, 0xc0, /* 001111111100 */
98 0x3f, 0xc0, /* 001111111100 */
99 0x3f, 0xc0, /* 001111111100 */
100 0x00, 0x00, /* 000000000000 */ 97 0x00, 0x00, /* 000000000000 */
101 0x00, 0x00, /* 000000000000 */ 98 0x00, 0x00, /* 000000000000 */
102 0x00, 0x00, /* 000000000000 */ 99 0x00, 0x00, /* 000000000000 */
@@ -104,49 +101,47 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
104 0x00, 0x00, /* 000000000000 */ 101 0x00, 0x00, /* 000000000000 */
105 102
106 /* 4 0x04 '^D' */ 103 /* 4 0x04 '^D' */
107 /* FIXME */
108 0x00, 0x00, /* 000000000000 */ 104 0x00, 0x00, /* 000000000000 */
109 0x00, 0x00, /* 000000000000 */ 105 0x00, 0x00, /* 000000000000 */
110 0x00, 0x00, /* 000000000000 */ 106 0x00, 0x00, /* 000000000000 */
107 0x02, 0x00, /* 000000100000 */
108 0x07, 0x00, /* 000001110000 */
109 0x0f, 0x80, /* 000011111000 */
110 0x0f, 0x80, /* 000011111000 */
111 0x1f, 0xc0, /* 000111111100 */
112 0x1f, 0xc0, /* 000111111100 */
113 0x3f, 0xe0, /* 001111111110 */
114 0x1f, 0xc0, /* 000111111100 */
115 0x1f, 0xc0, /* 000111111100 */
116 0x0f, 0x80, /* 000011111000 */
117 0x0f, 0x80, /* 000011111000 */
118 0x07, 0x00, /* 000001110000 */
119 0x02, 0x00, /* 000000100000 */
111 0x00, 0x00, /* 000000000000 */ 120 0x00, 0x00, /* 000000000000 */
112 0x00, 0x00, /* 000000000000 */ 121 0x00, 0x00, /* 000000000000 */
113 0x3f, 0xc0, /* 001111111100 */
114 0x3f, 0xc0, /* 001111111100 */
115 0x3f, 0xc0, /* 001111111100 */
116 0x3f, 0xc0, /* 001111111100 */
117 0x3f, 0xc0, /* 001111111100 */
118 0x3f, 0xc0, /* 001111111100 */
119 0x3f, 0xc0, /* 001111111100 */
120 0x3f, 0xc0, /* 001111111100 */
121 0x3f, 0xc0, /* 001111111100 */
122 0x3f, 0xc0, /* 001111111100 */
123 0x3f, 0xc0, /* 001111111100 */
124 0x3f, 0xc0, /* 001111111100 */
125 0x00, 0x00, /* 000000000000 */
126 0x00, 0x00, /* 000000000000 */ 122 0x00, 0x00, /* 000000000000 */
127 0x00, 0x00, /* 000000000000 */ 123 0x00, 0x00, /* 000000000000 */
128 0x00, 0x00, /* 000000000000 */ 124 0x00, 0x00, /* 000000000000 */
129 0x00, 0x00, /* 000000000000 */ 125 0x00, 0x00, /* 000000000000 */
130 126
131 /* 5 0x05 '^E' */ 127 /* 5 0x05 '^E' */
132 /* FIXME */
133 0x00, 0x00, /* 000000000000 */ 128 0x00, 0x00, /* 000000000000 */
134 0x00, 0x00, /* 000000000000 */ 129 0x00, 0x00, /* 000000000000 */
135 0x00, 0x00, /* 000000000000 */ 130 0x00, 0x00, /* 000000000000 */
136 0x00, 0x00, /* 000000000000 */ 131 0x00, 0x00, /* 000000000000 */
132 0x02, 0x00, /* 000000100000 */
133 0x07, 0x00, /* 000001110000 */
134 0x07, 0x00, /* 000001110000 */
135 0x02, 0x00, /* 000000100000 */
136 0x18, 0xc0, /* 000110001100 */
137 0x3d, 0xe0, /* 001111011110 */
138 0x3d, 0xe0, /* 001111011110 */
139 0x1a, 0xc0, /* 000110101100 */
140 0x02, 0x00, /* 000000100000 */
141 0x07, 0x00, /* 000001110000 */
142 0x0f, 0x80, /* 000011111000 */
143 0x1f, 0xc0, /* 000111111100 */
137 0x00, 0x00, /* 000000000000 */ 144 0x00, 0x00, /* 000000000000 */
138 0x3f, 0xc0, /* 001111111100 */
139 0x3f, 0xc0, /* 001111111100 */
140 0x3f, 0xc0, /* 001111111100 */
141 0x3f, 0xc0, /* 001111111100 */
142 0x3f, 0xc0, /* 001111111100 */
143 0x3f, 0xc0, /* 001111111100 */
144 0x3f, 0xc0, /* 001111111100 */
145 0x3f, 0xc0, /* 001111111100 */
146 0x3f, 0xc0, /* 001111111100 */
147 0x3f, 0xc0, /* 001111111100 */
148 0x3f, 0xc0, /* 001111111100 */
149 0x3f, 0xc0, /* 001111111100 */
150 0x00, 0x00, /* 000000000000 */ 145 0x00, 0x00, /* 000000000000 */
151 0x00, 0x00, /* 000000000000 */ 146 0x00, 0x00, /* 000000000000 */
152 0x00, 0x00, /* 000000000000 */ 147 0x00, 0x00, /* 000000000000 */
@@ -154,23 +149,22 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
154 0x00, 0x00, /* 000000000000 */ 149 0x00, 0x00, /* 000000000000 */
155 150
156 /* 6 0x06 '^F' */ 151 /* 6 0x06 '^F' */
157 /* FIXME */
158 0x00, 0x00, /* 000000000000 */
159 0x00, 0x00, /* 000000000000 */ 152 0x00, 0x00, /* 000000000000 */
160 0x00, 0x00, /* 000000000000 */ 153 0x00, 0x00, /* 000000000000 */
161 0x00, 0x00, /* 000000000000 */ 154 0x00, 0x00, /* 000000000000 */
162 0x00, 0x00, /* 000000000000 */ 155 0x00, 0x00, /* 000000000000 */
156 0x06, 0x00, /* 000001100000 */
157 0x0f, 0x00, /* 000011110000 */
158 0x1f, 0x80, /* 000111111000 */
159 0x1f, 0x80, /* 000111111000 */
163 0x3f, 0xc0, /* 001111111100 */ 160 0x3f, 0xc0, /* 001111111100 */
164 0x3f, 0xc0, /* 001111111100 */ 161 0x7f, 0xe0, /* 011111111110 */
165 0x3f, 0xc0, /* 001111111100 */ 162 0x7f, 0xe0, /* 011111111110 */
166 0x3f, 0xc0, /* 001111111100 */ 163 0x36, 0xc0, /* 001101101100 */
167 0x3f, 0xc0, /* 001111111100 */ 164 0x06, 0x00, /* 000001100000 */
168 0x3f, 0xc0, /* 001111111100 */ 165 0x06, 0x00, /* 000001100000 */
169 0x3f, 0xc0, /* 001111111100 */ 166 0x0f, 0x00, /* 000011110000 */
170 0x3f, 0xc0, /* 001111111100 */ 167 0x1f, 0x80, /* 000111111000 */
171 0x3f, 0xc0, /* 001111111100 */
172 0x3f, 0xc0, /* 001111111100 */
173 0x3f, 0xc0, /* 001111111100 */
174 0x3f, 0xc0, /* 001111111100 */ 168 0x3f, 0xc0, /* 001111111100 */
175 0x00, 0x00, /* 000000000000 */ 169 0x00, 0x00, /* 000000000000 */
176 0x00, 0x00, /* 000000000000 */ 170 0x00, 0x00, /* 000000000000 */
@@ -179,24 +173,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
179 0x00, 0x00, /* 000000000000 */ 173 0x00, 0x00, /* 000000000000 */
180 174
181 /* 7 0x07 '^G' */ 175 /* 7 0x07 '^G' */
182 /* FIXME */
183 0x00, 0x00, /* 000000000000 */
184 0x00, 0x00, /* 000000000000 */ 176 0x00, 0x00, /* 000000000000 */
185 0x00, 0x00, /* 000000000000 */ 177 0x00, 0x00, /* 000000000000 */
186 0x00, 0x00, /* 000000000000 */ 178 0x00, 0x00, /* 000000000000 */
187 0x00, 0x00, /* 000000000000 */ 179 0x00, 0x00, /* 000000000000 */
180 0x06, 0x00, /* 000001100000 */
181 0x0f, 0x00, /* 000011110000 */
182 0x0f, 0x00, /* 000011110000 */
183 0x1f, 0x80, /* 000111111000 */
184 0x1f, 0x80, /* 000111111000 */
188 0x3f, 0xc0, /* 001111111100 */ 185 0x3f, 0xc0, /* 001111111100 */
189 0x3f, 0xc0, /* 001111111100 */ 186 0x3f, 0xc0, /* 001111111100 */
190 0x3f, 0xc0, /* 001111111100 */ 187 0x1f, 0x80, /* 000111111000 */
191 0x3f, 0xc0, /* 001111111100 */ 188 0x1f, 0x80, /* 000111111000 */
192 0x3f, 0xc0, /* 001111111100 */ 189 0x0f, 0x00, /* 000011110000 */
193 0x3f, 0xc0, /* 001111111100 */ 190 0x0f, 0x00, /* 000011110000 */
194 0x3f, 0xc0, /* 001111111100 */ 191 0x06, 0x00, /* 000001100000 */
195 0x3f, 0xc0, /* 001111111100 */ 192 0x00, 0x00, /* 000000000000 */
196 0x3f, 0xc0, /* 001111111100 */
197 0x3f, 0xc0, /* 001111111100 */
198 0x3f, 0xc0, /* 001111111100 */
199 0x3f, 0xc0, /* 001111111100 */
200 0x00, 0x00, /* 000000000000 */ 193 0x00, 0x00, /* 000000000000 */
201 0x00, 0x00, /* 000000000000 */ 194 0x00, 0x00, /* 000000000000 */
202 0x00, 0x00, /* 000000000000 */ 195 0x00, 0x00, /* 000000000000 */
@@ -204,49 +197,47 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
204 0x00, 0x00, /* 000000000000 */ 197 0x00, 0x00, /* 000000000000 */
205 198
206 /* 8 0x08 '^H' */ 199 /* 8 0x08 '^H' */
207 /* FIXME */ 200 0xff, 0xf0, /* 111111111111 */
208 0x00, 0x00, /* 000000000000 */ 201 0xff, 0xf0, /* 111111111111 */
209 0x00, 0x00, /* 000000000000 */ 202 0xff, 0xf0, /* 111111111111 */
210 0x00, 0x00, /* 000000000000 */ 203 0xff, 0xf0, /* 111111111111 */
211 0x00, 0x00, /* 000000000000 */ 204 0xf9, 0xf0, /* 111110011111 */
212 0x00, 0x00, /* 000000000000 */ 205 0xf0, 0xf0, /* 111100001111 */
213 0x3f, 0xc0, /* 001111111100 */ 206 0xf0, 0xf0, /* 111100001111 */
214 0x3f, 0xc0, /* 001111111100 */ 207 0xe0, 0x70, /* 111000000111 */
215 0x3f, 0xc0, /* 001111111100 */ 208 0xe0, 0x70, /* 111000000111 */
216 0x3f, 0xc0, /* 001111111100 */ 209 0xc0, 0x30, /* 110000000011 */
217 0x3f, 0xc0, /* 001111111100 */ 210 0xc0, 0x30, /* 110000000011 */
218 0x3f, 0xc0, /* 001111111100 */ 211 0xe0, 0x70, /* 111000000111 */
219 0x3f, 0xc0, /* 001111111100 */ 212 0xe0, 0x70, /* 111000000111 */
220 0x3f, 0xc0, /* 001111111100 */ 213 0xf0, 0xf0, /* 111100001111 */
221 0x3f, 0xc0, /* 001111111100 */ 214 0xf0, 0xf0, /* 111100001111 */
222 0x3f, 0xc0, /* 001111111100 */ 215 0xf9, 0xf0, /* 111110011111 */
223 0x3f, 0xc0, /* 001111111100 */ 216 0xff, 0xf0, /* 111111111111 */
224 0x3f, 0xc0, /* 001111111100 */ 217 0xff, 0xf0, /* 111111111111 */
225 0x00, 0x00, /* 000000000000 */ 218 0xff, 0xf0, /* 111111111111 */
226 0x00, 0x00, /* 000000000000 */ 219 0xff, 0xf0, /* 111111111111 */
227 0x00, 0x00, /* 000000000000 */ 220 0xff, 0xf0, /* 111111111111 */
228 0x00, 0x00, /* 000000000000 */ 221 0xff, 0xf0, /* 111111111111 */
229 0x00, 0x00, /* 000000000000 */
230 222
231 /* 9 0x09 '^I' */ 223 /* 9 0x09 '^I' */
232 /* FIXME */
233 0x00, 0x00, /* 000000000000 */ 224 0x00, 0x00, /* 000000000000 */
234 0x00, 0x00, /* 000000000000 */ 225 0x00, 0x00, /* 000000000000 */
235 0x00, 0x00, /* 000000000000 */ 226 0x00, 0x00, /* 000000000000 */
236 0x00, 0x00, /* 000000000000 */ 227 0x00, 0x00, /* 000000000000 */
228 0x06, 0x00, /* 000001100000 */
229 0x0f, 0x00, /* 000011110000 */
230 0x0f, 0x00, /* 000011110000 */
231 0x19, 0x80, /* 000110011000 */
232 0x19, 0x80, /* 000110011000 */
233 0x30, 0xc0, /* 001100001100 */
234 0x30, 0xc0, /* 001100001100 */
235 0x19, 0x80, /* 000110011000 */
236 0x19, 0x80, /* 000110011000 */
237 0x0f, 0x00, /* 000011110000 */
238 0x0f, 0x00, /* 000011110000 */
239 0x06, 0x00, /* 000001100000 */
237 0x00, 0x00, /* 000000000000 */ 240 0x00, 0x00, /* 000000000000 */
238 0x3f, 0xc0, /* 001111111100 */
239 0x3f, 0xc0, /* 001111111100 */
240 0x3f, 0xc0, /* 001111111100 */
241 0x3f, 0xc0, /* 001111111100 */
242 0x3f, 0xc0, /* 001111111100 */
243 0x3f, 0xc0, /* 001111111100 */
244 0x3f, 0xc0, /* 001111111100 */
245 0x3f, 0xc0, /* 001111111100 */
246 0x3f, 0xc0, /* 001111111100 */
247 0x3f, 0xc0, /* 001111111100 */
248 0x3f, 0xc0, /* 001111111100 */
249 0x3f, 0xc0, /* 001111111100 */
250 0x00, 0x00, /* 000000000000 */ 241 0x00, 0x00, /* 000000000000 */
251 0x00, 0x00, /* 000000000000 */ 242 0x00, 0x00, /* 000000000000 */
252 0x00, 0x00, /* 000000000000 */ 243 0x00, 0x00, /* 000000000000 */
@@ -254,49 +245,47 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
254 0x00, 0x00, /* 000000000000 */ 245 0x00, 0x00, /* 000000000000 */
255 246
256 /* 10 0x0a '^J' */ 247 /* 10 0x0a '^J' */
257 /* FIXME */ 248 0xff, 0xf0, /* 111111111111 */
258 0x00, 0x00, /* 000000000000 */ 249 0xff, 0xf0, /* 111111111111 */
259 0x00, 0x00, /* 000000000000 */ 250 0xff, 0xf0, /* 111111111111 */
260 0x00, 0x00, /* 000000000000 */ 251 0xff, 0xf0, /* 111111111111 */
261 0x00, 0x00, /* 000000000000 */ 252 0xf9, 0xf0, /* 111110011111 */
262 0x00, 0x00, /* 000000000000 */ 253 0xf0, 0xf0, /* 111100001111 */
263 0x3f, 0xc0, /* 001111111100 */ 254 0xf0, 0xf0, /* 111100001111 */
264 0x3f, 0xc0, /* 001111111100 */ 255 0xe6, 0x70, /* 111001100111 */
265 0x3f, 0xc0, /* 001111111100 */ 256 0xe6, 0x70, /* 111001100111 */
266 0x3f, 0xc0, /* 001111111100 */ 257 0xcf, 0x30, /* 110011110011 */
267 0x3f, 0xc0, /* 001111111100 */ 258 0xcf, 0x30, /* 110011110011 */
268 0x3f, 0xc0, /* 001111111100 */ 259 0xe6, 0x70, /* 111001100111 */
269 0x3f, 0xc0, /* 001111111100 */ 260 0xe6, 0x70, /* 111001100111 */
270 0x3f, 0xc0, /* 001111111100 */ 261 0xf0, 0xf0, /* 111100001111 */
271 0x3f, 0xc0, /* 001111111100 */ 262 0xf0, 0xf0, /* 111100001111 */
272 0x3f, 0xc0, /* 001111111100 */ 263 0xf9, 0xf0, /* 111110011111 */
273 0x3f, 0xc0, /* 001111111100 */ 264 0xff, 0xf0, /* 111111111111 */
274 0x3f, 0xc0, /* 001111111100 */ 265 0xff, 0xf0, /* 111111111111 */
275 0x00, 0x00, /* 000000000000 */ 266 0xff, 0xf0, /* 111111111111 */
276 0x00, 0x00, /* 000000000000 */ 267 0xff, 0xf0, /* 111111111111 */
277 0x00, 0x00, /* 000000000000 */ 268 0xff, 0xf0, /* 111111111111 */
278 0x00, 0x00, /* 000000000000 */ 269 0xff, 0xf0, /* 111111111111 */
279 0x00, 0x00, /* 000000000000 */
280 270
281 /* 11 0x0b '^K' */ 271 /* 11 0x0b '^K' */
282 /* FIXME */
283 0x00, 0x00, /* 000000000000 */
284 0x00, 0x00, /* 000000000000 */
285 0x00, 0x00, /* 000000000000 */ 272 0x00, 0x00, /* 000000000000 */
286 0x00, 0x00, /* 000000000000 */ 273 0x00, 0x00, /* 000000000000 */
274 0x0f, 0xe0, /* 000011111110 */
275 0x0f, 0xe0, /* 000011111110 */
276 0x01, 0xe0, /* 000000011110 */
277 0x03, 0x60, /* 000000110110 */
278 0x06, 0x60, /* 000001100110 */
279 0x1e, 0x00, /* 000111100000 */
280 0x33, 0x00, /* 001100110000 */
281 0x33, 0x00, /* 001100110000 */
282 0x61, 0x80, /* 011000011000 */
283 0x61, 0x80, /* 011000011000 */
284 0x33, 0x00, /* 001100110000 */
285 0x33, 0x00, /* 001100110000 */
286 0x1e, 0x00, /* 000111100000 */
287 0x0c, 0x00, /* 000011000000 */
287 0x00, 0x00, /* 000000000000 */ 288 0x00, 0x00, /* 000000000000 */
288 0x3f, 0xc0, /* 001111111100 */
289 0x3f, 0xc0, /* 001111111100 */
290 0x3f, 0xc0, /* 001111111100 */
291 0x3f, 0xc0, /* 001111111100 */
292 0x3f, 0xc0, /* 001111111100 */
293 0x3f, 0xc0, /* 001111111100 */
294 0x3f, 0xc0, /* 001111111100 */
295 0x3f, 0xc0, /* 001111111100 */
296 0x3f, 0xc0, /* 001111111100 */
297 0x3f, 0xc0, /* 001111111100 */
298 0x3f, 0xc0, /* 001111111100 */
299 0x3f, 0xc0, /* 001111111100 */
300 0x00, 0x00, /* 000000000000 */ 289 0x00, 0x00, /* 000000000000 */
301 0x00, 0x00, /* 000000000000 */ 290 0x00, 0x00, /* 000000000000 */
302 0x00, 0x00, /* 000000000000 */ 291 0x00, 0x00, /* 000000000000 */
@@ -304,24 +293,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
304 0x00, 0x00, /* 000000000000 */ 293 0x00, 0x00, /* 000000000000 */
305 294
306 /* 12 0x0c '^L' */ 295 /* 12 0x0c '^L' */
307 /* FIXME */
308 0x00, 0x00, /* 000000000000 */
309 0x00, 0x00, /* 000000000000 */
310 0x00, 0x00, /* 000000000000 */
311 0x00, 0x00, /* 000000000000 */ 296 0x00, 0x00, /* 000000000000 */
312 0x00, 0x00, /* 000000000000 */ 297 0x00, 0x00, /* 000000000000 */
298 0x06, 0x00, /* 000001100000 */
299 0x0f, 0x00, /* 000011110000 */
300 0x19, 0x80, /* 000110011000 */
301 0x30, 0xc0, /* 001100001100 */
302 0x30, 0xc0, /* 001100001100 */
303 0x19, 0x80, /* 000110011000 */
304 0x0f, 0x00, /* 000011110000 */
305 0x06, 0x00, /* 000001100000 */
306 0x06, 0x00, /* 000001100000 */
307 0x06, 0x00, /* 000001100000 */
313 0x3f, 0xc0, /* 001111111100 */ 308 0x3f, 0xc0, /* 001111111100 */
314 0x3f, 0xc0, /* 001111111100 */ 309 0x3f, 0xc0, /* 001111111100 */
315 0x3f, 0xc0, /* 001111111100 */ 310 0x06, 0x00, /* 000001100000 */
316 0x3f, 0xc0, /* 001111111100 */ 311 0x06, 0x00, /* 000001100000 */
317 0x3f, 0xc0, /* 001111111100 */ 312 0x00, 0x00, /* 000000000000 */
318 0x3f, 0xc0, /* 001111111100 */
319 0x3f, 0xc0, /* 001111111100 */
320 0x3f, 0xc0, /* 001111111100 */
321 0x3f, 0xc0, /* 001111111100 */
322 0x3f, 0xc0, /* 001111111100 */
323 0x3f, 0xc0, /* 001111111100 */
324 0x3f, 0xc0, /* 001111111100 */
325 0x00, 0x00, /* 000000000000 */ 313 0x00, 0x00, /* 000000000000 */
326 0x00, 0x00, /* 000000000000 */ 314 0x00, 0x00, /* 000000000000 */
327 0x00, 0x00, /* 000000000000 */ 315 0x00, 0x00, /* 000000000000 */
@@ -329,149 +317,143 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
329 0x00, 0x00, /* 000000000000 */ 317 0x00, 0x00, /* 000000000000 */
330 318
331 /* 13 0x0d '^M' */ 319 /* 13 0x0d '^M' */
332 /* FIXME */
333 0x00, 0x00, /* 000000000000 */
334 0x00, 0x00, /* 000000000000 */
335 0x00, 0x00, /* 000000000000 */
336 0x00, 0x00, /* 000000000000 */
337 0x00, 0x00, /* 000000000000 */
338 0x3f, 0xc0, /* 001111111100 */
339 0x3f, 0xc0, /* 001111111100 */
340 0x3f, 0xc0, /* 001111111100 */
341 0x3f, 0xc0, /* 001111111100 */
342 0x3f, 0xc0, /* 001111111100 */
343 0x3f, 0xc0, /* 001111111100 */
344 0x3f, 0xc0, /* 001111111100 */
345 0x3f, 0xc0, /* 001111111100 */
346 0x3f, 0xc0, /* 001111111100 */
347 0x3f, 0xc0, /* 001111111100 */
348 0x3f, 0xc0, /* 001111111100 */
349 0x3f, 0xc0, /* 001111111100 */
350 0x00, 0x00, /* 000000000000 */ 320 0x00, 0x00, /* 000000000000 */
351 0x00, 0x00, /* 000000000000 */ 321 0x00, 0x00, /* 000000000000 */
322 0x0f, 0xe0, /* 000011111110 */
323 0x0c, 0x60, /* 000011000110 */
324 0x0c, 0x60, /* 000011000110 */
325 0x0f, 0xe0, /* 000011111110 */
326 0x0c, 0x00, /* 000011000000 */
327 0x0c, 0x00, /* 000011000000 */
328 0x0c, 0x00, /* 000011000000 */
329 0x0c, 0x00, /* 000011000000 */
330 0x0c, 0x00, /* 000011000000 */
331 0x0c, 0x00, /* 000011000000 */
332 0x0c, 0x00, /* 000011000000 */
333 0x0c, 0x00, /* 000011000000 */
334 0x0c, 0x00, /* 000011000000 */
335 0x3c, 0x00, /* 001111000000 */
336 0x7c, 0x00, /* 011111000000 */
337 0x78, 0x00, /* 011110000000 */
338 0x30, 0x00, /* 001100000000 */
352 0x00, 0x00, /* 000000000000 */ 339 0x00, 0x00, /* 000000000000 */
353 0x00, 0x00, /* 000000000000 */ 340 0x00, 0x00, /* 000000000000 */
354 0x00, 0x00, /* 000000000000 */ 341 0x00, 0x00, /* 000000000000 */
355 342
356 /* 14 0x0e '^N' */ 343 /* 14 0x0e '^N' */
357 /* FIXME */
358 0x00, 0x00, /* 000000000000 */
359 0x00, 0x00, /* 000000000000 */
360 0x00, 0x00, /* 000000000000 */
361 0x00, 0x00, /* 000000000000 */
362 0x00, 0x00, /* 000000000000 */
363 0x3f, 0xc0, /* 001111111100 */
364 0x3f, 0xc0, /* 001111111100 */
365 0x3f, 0xc0, /* 001111111100 */
366 0x3f, 0xc0, /* 001111111100 */
367 0x3f, 0xc0, /* 001111111100 */
368 0x3f, 0xc0, /* 001111111100 */
369 0x3f, 0xc0, /* 001111111100 */
370 0x3f, 0xc0, /* 001111111100 */
371 0x3f, 0xc0, /* 001111111100 */
372 0x3f, 0xc0, /* 001111111100 */
373 0x3f, 0xc0, /* 001111111100 */
374 0x3f, 0xc0, /* 001111111100 */
375 0x00, 0x00, /* 000000000000 */ 344 0x00, 0x00, /* 000000000000 */
376 0x00, 0x00, /* 000000000000 */ 345 0x00, 0x00, /* 000000000000 */
346 0x1f, 0xe0, /* 000111111110 */
347 0x18, 0x60, /* 000110000110 */
348 0x18, 0x60, /* 000110000110 */
349 0x1f, 0xe0, /* 000111111110 */
350 0x18, 0x60, /* 000110000110 */
351 0x18, 0x60, /* 000110000110 */
352 0x18, 0x60, /* 000110000110 */
353 0x18, 0x60, /* 000110000110 */
354 0x18, 0x60, /* 000110000110 */
355 0x18, 0x60, /* 000110000110 */
356 0x19, 0xe0, /* 000110011110 */
357 0x1b, 0xe0, /* 000110111110 */
358 0x1b, 0xc0, /* 000110111100 */
359 0x79, 0x80, /* 011110011000 */
360 0xf8, 0x00, /* 111110000000 */
361 0xf0, 0x00, /* 111100000000 */
362 0x60, 0x00, /* 011000000000 */
377 0x00, 0x00, /* 000000000000 */ 363 0x00, 0x00, /* 000000000000 */
378 0x00, 0x00, /* 000000000000 */ 364 0x00, 0x00, /* 000000000000 */
379 0x00, 0x00, /* 000000000000 */ 365 0x00, 0x00, /* 000000000000 */
380 366
381 /* 15 0x0f '^O' */ 367 /* 15 0x0f '^O' */
382 /* FIXME */
383 0x00, 0x00, /* 000000000000 */
384 0x00, 0x00, /* 000000000000 */ 368 0x00, 0x00, /* 000000000000 */
385 0x00, 0x00, /* 000000000000 */ 369 0x00, 0x00, /* 000000000000 */
386 0x00, 0x00, /* 000000000000 */ 370 0x00, 0x00, /* 000000000000 */
387 0x00, 0x00, /* 000000000000 */ 371 0x00, 0x00, /* 000000000000 */
388 0x3f, 0xc0, /* 001111111100 */
389 0x3f, 0xc0, /* 001111111100 */
390 0x3f, 0xc0, /* 001111111100 */
391 0x3f, 0xc0, /* 001111111100 */
392 0x3f, 0xc0, /* 001111111100 */
393 0x3f, 0xc0, /* 001111111100 */
394 0x3f, 0xc0, /* 001111111100 */
395 0x3f, 0xc0, /* 001111111100 */
396 0x3f, 0xc0, /* 001111111100 */
397 0x3f, 0xc0, /* 001111111100 */
398 0x3f, 0xc0, /* 001111111100 */
399 0x3f, 0xc0, /* 001111111100 */
400 0x00, 0x00, /* 000000000000 */
401 0x00, 0x00, /* 000000000000 */
402 0x00, 0x00, /* 000000000000 */ 372 0x00, 0x00, /* 000000000000 */
403 0x00, 0x00, /* 000000000000 */ 373 0x00, 0x00, /* 000000000000 */
404 0x00, 0x00, /* 000000000000 */ 374 0x00, 0x00, /* 000000000000 */
405 375 0x18, 0xc0, /* 000110001100 */
406 /* 16 0x10 '^P' */ 376 0x0d, 0x80, /* 000011011000 */
407 /* FIXME */ 377 0x6d, 0xb0, /* 011011011011 */
378 0x3d, 0xe0, /* 001111011110 */
408 0x00, 0x00, /* 000000000000 */ 379 0x00, 0x00, /* 000000000000 */
380 0x3d, 0xe0, /* 001111011110 */
381 0x6d, 0xb0, /* 011011011011 */
382 0x0d, 0x80, /* 000011011000 */
383 0x18, 0xc0, /* 000110001100 */
409 0x00, 0x00, /* 000000000000 */ 384 0x00, 0x00, /* 000000000000 */
410 0x00, 0x00, /* 000000000000 */ 385 0x00, 0x00, /* 000000000000 */
411 0x00, 0x00, /* 000000000000 */ 386 0x00, 0x00, /* 000000000000 */
412 0x00, 0x00, /* 000000000000 */ 387 0x00, 0x00, /* 000000000000 */
413 0x3f, 0xc0, /* 001111111100 */
414 0x3f, 0xc0, /* 001111111100 */
415 0x3f, 0xc0, /* 001111111100 */
416 0x3f, 0xc0, /* 001111111100 */
417 0x3f, 0xc0, /* 001111111100 */
418 0x3f, 0xc0, /* 001111111100 */
419 0x3f, 0xc0, /* 001111111100 */
420 0x3f, 0xc0, /* 001111111100 */
421 0x3f, 0xc0, /* 001111111100 */
422 0x3f, 0xc0, /* 001111111100 */
423 0x3f, 0xc0, /* 001111111100 */
424 0x3f, 0xc0, /* 001111111100 */
425 0x00, 0x00, /* 000000000000 */ 388 0x00, 0x00, /* 000000000000 */
426 0x00, 0x00, /* 000000000000 */ 389 0x00, 0x00, /* 000000000000 */
390
391 /* 16 0x10 '^P' */
427 0x00, 0x00, /* 000000000000 */ 392 0x00, 0x00, /* 000000000000 */
393 0x00, 0x20, /* 000000000010 */
394 0x00, 0x60, /* 000000000110 */
395 0x00, 0xe0, /* 000000001110 */
396 0x01, 0xe0, /* 000000011110 */
397 0x03, 0xe0, /* 000000111110 */
398 0x07, 0xe0, /* 000001111110 */
399 0x0f, 0xe0, /* 000011111110 */
400 0x1f, 0xe0, /* 000111111110 */
401 0x3f, 0xe0, /* 001111111110 */
402 0x7f, 0xe0, /* 011111111110 */
403 0x3f, 0xe0, /* 001111111110 */
404 0x1f, 0xe0, /* 000111111110 */
405 0x0f, 0xe0, /* 000011111110 */
406 0x07, 0xe0, /* 000001111110 */
407 0x03, 0xe0, /* 000000111110 */
408 0x01, 0xe0, /* 000000011110 */
409 0x00, 0xe0, /* 000000001110 */
410 0x00, 0x60, /* 000000000110 */
411 0x00, 0x20, /* 000000000010 */
428 0x00, 0x00, /* 000000000000 */ 412 0x00, 0x00, /* 000000000000 */
429 0x00, 0x00, /* 000000000000 */ 413 0x00, 0x00, /* 000000000000 */
430 414
431 /* 17 0x11 '^Q' */ 415 /* 17 0x11 '^Q' */
432 /* FIXME */
433 0x00, 0x00, /* 000000000000 */
434 0x00, 0x00, /* 000000000000 */
435 0x00, 0x00, /* 000000000000 */
436 0x00, 0x00, /* 000000000000 */
437 0x00, 0x00, /* 000000000000 */
438 0x3f, 0xc0, /* 001111111100 */
439 0x3f, 0xc0, /* 001111111100 */
440 0x3f, 0xc0, /* 001111111100 */
441 0x3f, 0xc0, /* 001111111100 */
442 0x3f, 0xc0, /* 001111111100 */
443 0x3f, 0xc0, /* 001111111100 */
444 0x3f, 0xc0, /* 001111111100 */
445 0x3f, 0xc0, /* 001111111100 */
446 0x3f, 0xc0, /* 001111111100 */
447 0x3f, 0xc0, /* 001111111100 */
448 0x3f, 0xc0, /* 001111111100 */
449 0x3f, 0xc0, /* 001111111100 */
450 0x00, 0x00, /* 000000000000 */
451 0x00, 0x00, /* 000000000000 */
452 0x00, 0x00, /* 000000000000 */ 416 0x00, 0x00, /* 000000000000 */
417 0x40, 0x00, /* 010000000000 */
418 0x60, 0x00, /* 011000000000 */
419 0x70, 0x00, /* 011100000000 */
420 0x78, 0x00, /* 011110000000 */
421 0x7c, 0x00, /* 011111000000 */
422 0x7e, 0x00, /* 011111100000 */
423 0x7f, 0x00, /* 011111110000 */
424 0x7f, 0x80, /* 011111111000 */
425 0x7f, 0xc0, /* 011111111100 */
426 0x7f, 0xe0, /* 011111111110 */
427 0x7f, 0xc0, /* 011111111100 */
428 0x7f, 0x80, /* 011111111000 */
429 0x7f, 0x00, /* 011111110000 */
430 0x7e, 0x00, /* 011111100000 */
431 0x7c, 0x00, /* 011111000000 */
432 0x78, 0x00, /* 011110000000 */
433 0x70, 0x00, /* 011100000000 */
434 0x60, 0x00, /* 011000000000 */
435 0x40, 0x00, /* 010000000000 */
453 0x00, 0x00, /* 000000000000 */ 436 0x00, 0x00, /* 000000000000 */
454 0x00, 0x00, /* 000000000000 */ 437 0x00, 0x00, /* 000000000000 */
455 438
456 /* 18 0x12 '^R' */ 439 /* 18 0x12 '^R' */
457 /* FIXME */
458 0x00, 0x00, /* 000000000000 */ 440 0x00, 0x00, /* 000000000000 */
459 0x00, 0x00, /* 000000000000 */ 441 0x00, 0x00, /* 000000000000 */
460 0x00, 0x00, /* 000000000000 */ 442 0x00, 0x00, /* 000000000000 */
461 0x00, 0x00, /* 000000000000 */ 443 0x00, 0x00, /* 000000000000 */
444 0x04, 0x00, /* 000001000000 */
445 0x0e, 0x00, /* 000011100000 */
446 0x1f, 0x00, /* 000111110000 */
447 0x3f, 0x80, /* 001111111000 */
448 0x7f, 0xc0, /* 011111111100 */
449 0x0e, 0x00, /* 000011100000 */
450 0x0e, 0x00, /* 000011100000 */
451 0x7f, 0xc0, /* 011111111100 */
452 0x3f, 0x80, /* 001111111000 */
453 0x1f, 0x00, /* 000111110000 */
454 0x0e, 0x00, /* 000011100000 */
455 0x04, 0x00, /* 000001000000 */
462 0x00, 0x00, /* 000000000000 */ 456 0x00, 0x00, /* 000000000000 */
463 0x3f, 0xc0, /* 001111111100 */
464 0x3f, 0xc0, /* 001111111100 */
465 0x3f, 0xc0, /* 001111111100 */
466 0x3f, 0xc0, /* 001111111100 */
467 0x3f, 0xc0, /* 001111111100 */
468 0x3f, 0xc0, /* 001111111100 */
469 0x3f, 0xc0, /* 001111111100 */
470 0x3f, 0xc0, /* 001111111100 */
471 0x3f, 0xc0, /* 001111111100 */
472 0x3f, 0xc0, /* 001111111100 */
473 0x3f, 0xc0, /* 001111111100 */
474 0x3f, 0xc0, /* 001111111100 */
475 0x00, 0x00, /* 000000000000 */ 457 0x00, 0x00, /* 000000000000 */
476 0x00, 0x00, /* 000000000000 */ 458 0x00, 0x00, /* 000000000000 */
477 0x00, 0x00, /* 000000000000 */ 459 0x00, 0x00, /* 000000000000 */
@@ -551,99 +533,95 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
551 0x00, 0x00, /* 000000000000 */ 533 0x00, 0x00, /* 000000000000 */
552 534
553 /* 22 0x16 '^V' */ 535 /* 22 0x16 '^V' */
554 /* FIXME */
555 0x00, 0x00, /* 000000000000 */ 536 0x00, 0x00, /* 000000000000 */
556 0x00, 0x00, /* 000000000000 */ 537 0x00, 0x00, /* 000000000000 */
557 0x00, 0x00, /* 000000000000 */ 538 0x00, 0x00, /* 000000000000 */
558 0x00, 0x00, /* 000000000000 */ 539 0x00, 0x00, /* 000000000000 */
559 0x00, 0x00, /* 000000000000 */ 540 0x00, 0x00, /* 000000000000 */
560 0x3f, 0xc0, /* 001111111100 */
561 0x3f, 0xc0, /* 001111111100 */
562 0x3f, 0xc0, /* 001111111100 */
563 0x3f, 0xc0, /* 001111111100 */
564 0x3f, 0xc0, /* 001111111100 */
565 0x3f, 0xc0, /* 001111111100 */
566 0x3f, 0xc0, /* 001111111100 */
567 0x3f, 0xc0, /* 001111111100 */
568 0x3f, 0xc0, /* 001111111100 */
569 0x3f, 0xc0, /* 001111111100 */
570 0x3f, 0xc0, /* 001111111100 */
571 0x3f, 0xc0, /* 001111111100 */
572 0x00, 0x00, /* 000000000000 */
573 0x00, 0x00, /* 000000000000 */ 541 0x00, 0x00, /* 000000000000 */
574 0x00, 0x00, /* 000000000000 */ 542 0x00, 0x00, /* 000000000000 */
575 0x00, 0x00, /* 000000000000 */ 543 0x00, 0x00, /* 000000000000 */
576 0x00, 0x00, /* 000000000000 */ 544 0x00, 0x00, /* 000000000000 */
577
578 /* 23 0x17 '^W' */
579 /* FIXME */
580 0x00, 0x00, /* 000000000000 */ 545 0x00, 0x00, /* 000000000000 */
581 0x00, 0x00, /* 000000000000 */ 546 0x00, 0x00, /* 000000000000 */
582 0x00, 0x00, /* 000000000000 */ 547 0x00, 0x00, /* 000000000000 */
583 0x00, 0x00, /* 000000000000 */ 548 0x00, 0x00, /* 000000000000 */
549 0x7f, 0xe0, /* 011111111110 */
550 0x7f, 0xe0, /* 011111111110 */
551 0x7f, 0xe0, /* 011111111110 */
584 0x00, 0x00, /* 000000000000 */ 552 0x00, 0x00, /* 000000000000 */
585 0x3f, 0xc0, /* 001111111100 */
586 0x3f, 0xc0, /* 001111111100 */
587 0x3f, 0xc0, /* 001111111100 */
588 0x3f, 0xc0, /* 001111111100 */
589 0x3f, 0xc0, /* 001111111100 */
590 0x3f, 0xc0, /* 001111111100 */
591 0x3f, 0xc0, /* 001111111100 */
592 0x3f, 0xc0, /* 001111111100 */
593 0x3f, 0xc0, /* 001111111100 */
594 0x3f, 0xc0, /* 001111111100 */
595 0x3f, 0xc0, /* 001111111100 */
596 0x3f, 0xc0, /* 001111111100 */
597 0x00, 0x00, /* 000000000000 */ 553 0x00, 0x00, /* 000000000000 */
598 0x00, 0x00, /* 000000000000 */ 554 0x00, 0x00, /* 000000000000 */
599 0x00, 0x00, /* 000000000000 */ 555 0x00, 0x00, /* 000000000000 */
600 0x00, 0x00, /* 000000000000 */ 556 0x00, 0x00, /* 000000000000 */
601 0x00, 0x00, /* 000000000000 */ 557 0x00, 0x00, /* 000000000000 */
602 558
603 /* 24 0x18 '^X' */ 559 /* 23 0x17 '^W' */
604 /* FIXME */
605 0x00, 0x00, /* 000000000000 */ 560 0x00, 0x00, /* 000000000000 */
606 0x00, 0x00, /* 000000000000 */ 561 0x00, 0x00, /* 000000000000 */
562 0x04, 0x00, /* 000001000000 */
563 0x0e, 0x00, /* 000011100000 */
564 0x1f, 0x00, /* 000111110000 */
565 0x3f, 0x80, /* 001111111000 */
566 0x7f, 0xc0, /* 011111111100 */
567 0x0e, 0x00, /* 000011100000 */
568 0x0e, 0x00, /* 000011100000 */
569 0x7f, 0xc0, /* 011111111100 */
570 0x3f, 0x80, /* 001111111000 */
571 0x1f, 0x00, /* 000111110000 */
572 0x0e, 0x00, /* 000011100000 */
573 0x04, 0x00, /* 000001000000 */
607 0x00, 0x00, /* 000000000000 */ 574 0x00, 0x00, /* 000000000000 */
575 0x7f, 0xe0, /* 011111111110 */
576 0x7f, 0xe0, /* 011111111110 */
608 0x00, 0x00, /* 000000000000 */ 577 0x00, 0x00, /* 000000000000 */
609 0x00, 0x00, /* 000000000000 */ 578 0x00, 0x00, /* 000000000000 */
610 0x3f, 0xc0, /* 001111111100 */
611 0x3f, 0xc0, /* 001111111100 */
612 0x3f, 0xc0, /* 001111111100 */
613 0x3f, 0xc0, /* 001111111100 */
614 0x3f, 0xc0, /* 001111111100 */
615 0x3f, 0xc0, /* 001111111100 */
616 0x3f, 0xc0, /* 001111111100 */
617 0x3f, 0xc0, /* 001111111100 */
618 0x3f, 0xc0, /* 001111111100 */
619 0x3f, 0xc0, /* 001111111100 */
620 0x3f, 0xc0, /* 001111111100 */
621 0x3f, 0xc0, /* 001111111100 */
622 0x00, 0x00, /* 000000000000 */ 579 0x00, 0x00, /* 000000000000 */
623 0x00, 0x00, /* 000000000000 */ 580 0x00, 0x00, /* 000000000000 */
624 0x00, 0x00, /* 000000000000 */ 581 0x00, 0x00, /* 000000000000 */
582
583 /* 24 0x18 '^X' */
625 0x00, 0x00, /* 000000000000 */ 584 0x00, 0x00, /* 000000000000 */
626 0x00, 0x00, /* 000000000000 */ 585 0x00, 0x00, /* 000000000000 */
627 586 0x04, 0x00, /* 000001000000 */
628 /* 25 0x19 '^Y' */ 587 0x0e, 0x00, /* 000011100000 */
629 /* FIXME */ 588 0x1f, 0x00, /* 000111110000 */
589 0x3f, 0x80, /* 001111111000 */
590 0x7f, 0xc0, /* 011111111100 */
591 0x0e, 0x00, /* 000011100000 */
592 0x0e, 0x00, /* 000011100000 */
593 0x0e, 0x00, /* 000011100000 */
594 0x0e, 0x00, /* 000011100000 */
595 0x0e, 0x00, /* 000011100000 */
596 0x0e, 0x00, /* 000011100000 */
597 0x0e, 0x00, /* 000011100000 */
598 0x0e, 0x00, /* 000011100000 */
599 0x0e, 0x00, /* 000011100000 */
630 0x00, 0x00, /* 000000000000 */ 600 0x00, 0x00, /* 000000000000 */
631 0x00, 0x00, /* 000000000000 */ 601 0x00, 0x00, /* 000000000000 */
632 0x00, 0x00, /* 000000000000 */ 602 0x00, 0x00, /* 000000000000 */
633 0x00, 0x00, /* 000000000000 */ 603 0x00, 0x00, /* 000000000000 */
634 0x00, 0x00, /* 000000000000 */ 604 0x00, 0x00, /* 000000000000 */
635 0x3f, 0xc0, /* 001111111100 */ 605 0x00, 0x00, /* 000000000000 */
636 0x3f, 0xc0, /* 001111111100 */ 606
637 0x3f, 0xc0, /* 001111111100 */ 607 /* 25 0x19 '^Y' */
638 0x3f, 0xc0, /* 001111111100 */ 608 0x00, 0x00, /* 000000000000 */
639 0x3f, 0xc0, /* 001111111100 */ 609 0x00, 0x00, /* 000000000000 */
640 0x3f, 0xc0, /* 001111111100 */ 610 0x0e, 0x00, /* 000011100000 */
641 0x3f, 0xc0, /* 001111111100 */ 611 0x0e, 0x00, /* 000011100000 */
642 0x3f, 0xc0, /* 001111111100 */ 612 0x0e, 0x00, /* 000011100000 */
643 0x3f, 0xc0, /* 001111111100 */ 613 0x0e, 0x00, /* 000011100000 */
644 0x3f, 0xc0, /* 001111111100 */ 614 0x0e, 0x00, /* 000011100000 */
645 0x3f, 0xc0, /* 001111111100 */ 615 0x0e, 0x00, /* 000011100000 */
646 0x3f, 0xc0, /* 001111111100 */ 616 0x0e, 0x00, /* 000011100000 */
617 0x0e, 0x00, /* 000011100000 */
618 0x0e, 0x00, /* 000011100000 */
619 0x0e, 0x00, /* 000011100000 */
620 0x7f, 0xc0, /* 011111111100 */
621 0x3f, 0x80, /* 001111111000 */
622 0x1f, 0x00, /* 000111110000 */
623 0x0e, 0x00, /* 000011100000 */
624 0x04, 0x00, /* 000001000000 */
647 0x00, 0x00, /* 000000000000 */ 625 0x00, 0x00, /* 000000000000 */
648 0x00, 0x00, /* 000000000000 */ 626 0x00, 0x00, /* 000000000000 */
649 0x00, 0x00, /* 000000000000 */ 627 0x00, 0x00, /* 000000000000 */
@@ -651,24 +629,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
651 0x00, 0x00, /* 000000000000 */ 629 0x00, 0x00, /* 000000000000 */
652 630
653 /* 26 0x1a '^Z' */ 631 /* 26 0x1a '^Z' */
654 /* FIXME */
655 0x00, 0x00, /* 000000000000 */ 632 0x00, 0x00, /* 000000000000 */
656 0x00, 0x00, /* 000000000000 */ 633 0x00, 0x00, /* 000000000000 */
657 0x00, 0x00, /* 000000000000 */ 634 0x00, 0x00, /* 000000000000 */
658 0x00, 0x00, /* 000000000000 */ 635 0x00, 0x00, /* 000000000000 */
659 0x00, 0x00, /* 000000000000 */ 636 0x00, 0x00, /* 000000000000 */
660 0x3f, 0xc0, /* 001111111100 */ 637 0x00, 0x00, /* 000000000000 */
661 0x3f, 0xc0, /* 001111111100 */ 638 0x08, 0x00, /* 000010000000 */
662 0x3f, 0xc0, /* 001111111100 */ 639 0x18, 0x00, /* 000110000000 */
663 0x3f, 0xc0, /* 001111111100 */ 640 0x38, 0x00, /* 001110000000 */
664 0x3f, 0xc0, /* 001111111100 */ 641 0x7f, 0xe0, /* 011111111110 */
665 0x3f, 0xc0, /* 001111111100 */ 642 0xff, 0xe0, /* 111111111110 */
666 0x3f, 0xc0, /* 001111111100 */ 643 0x7f, 0xe0, /* 011111111110 */
667 0x3f, 0xc0, /* 001111111100 */ 644 0x38, 0x00, /* 001110000000 */
668 0x3f, 0xc0, /* 001111111100 */ 645 0x18, 0x00, /* 000110000000 */
669 0x3f, 0xc0, /* 001111111100 */ 646 0x08, 0x00, /* 000010000000 */
670 0x3f, 0xc0, /* 001111111100 */ 647 0x00, 0x00, /* 000000000000 */
671 0x3f, 0xc0, /* 001111111100 */ 648 0x00, 0x00, /* 000000000000 */
672 0x00, 0x00, /* 000000000000 */ 649 0x00, 0x00, /* 000000000000 */
673 0x00, 0x00, /* 000000000000 */ 650 0x00, 0x00, /* 000000000000 */
674 0x00, 0x00, /* 000000000000 */ 651 0x00, 0x00, /* 000000000000 */
@@ -676,24 +653,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
676 0x00, 0x00, /* 000000000000 */ 653 0x00, 0x00, /* 000000000000 */
677 654
678 /* 27 0x1b '^[' */ 655 /* 27 0x1b '^[' */
679 /* FIXME */
680 0x00, 0x00, /* 000000000000 */ 656 0x00, 0x00, /* 000000000000 */
681 0x00, 0x00, /* 000000000000 */ 657 0x00, 0x00, /* 000000000000 */
682 0x00, 0x00, /* 000000000000 */ 658 0x00, 0x00, /* 000000000000 */
683 0x00, 0x00, /* 000000000000 */ 659 0x00, 0x00, /* 000000000000 */
684 0x00, 0x00, /* 000000000000 */ 660 0x00, 0x00, /* 000000000000 */
685 0x3f, 0xc0, /* 001111111100 */ 661 0x00, 0x00, /* 000000000000 */
686 0x3f, 0xc0, /* 001111111100 */ 662 0x01, 0x00, /* 000000010000 */
687 0x3f, 0xc0, /* 001111111100 */ 663 0x01, 0x80, /* 000000011000 */
688 0x3f, 0xc0, /* 001111111100 */ 664 0x01, 0xc0, /* 000000011100 */
689 0x3f, 0xc0, /* 001111111100 */ 665 0x7f, 0xe0, /* 011111111110 */
690 0x3f, 0xc0, /* 001111111100 */ 666 0x7f, 0xf0, /* 011111111111 */
691 0x3f, 0xc0, /* 001111111100 */ 667 0x7f, 0xe0, /* 011111111110 */
692 0x3f, 0xc0, /* 001111111100 */ 668 0x01, 0xc0, /* 000000011100 */
693 0x3f, 0xc0, /* 001111111100 */ 669 0x01, 0x80, /* 000000011000 */
694 0x3f, 0xc0, /* 001111111100 */ 670 0x01, 0x00, /* 000000010000 */
695 0x3f, 0xc0, /* 001111111100 */ 671 0x00, 0x00, /* 000000000000 */
696 0x3f, 0xc0, /* 001111111100 */ 672 0x00, 0x00, /* 000000000000 */
697 0x00, 0x00, /* 000000000000 */ 673 0x00, 0x00, /* 000000000000 */
698 0x00, 0x00, /* 000000000000 */ 674 0x00, 0x00, /* 000000000000 */
699 0x00, 0x00, /* 000000000000 */ 675 0x00, 0x00, /* 000000000000 */
@@ -701,24 +677,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
701 0x00, 0x00, /* 000000000000 */ 677 0x00, 0x00, /* 000000000000 */
702 678
703 /* 28 0x1c '^\' */ 679 /* 28 0x1c '^\' */
704 /* FIXME */
705 0x00, 0x00, /* 000000000000 */ 680 0x00, 0x00, /* 000000000000 */
706 0x00, 0x00, /* 000000000000 */ 681 0x00, 0x00, /* 000000000000 */
707 0x00, 0x00, /* 000000000000 */ 682 0x00, 0x00, /* 000000000000 */
708 0x00, 0x00, /* 000000000000 */ 683 0x00, 0x00, /* 000000000000 */
709 0x00, 0x00, /* 000000000000 */ 684 0x00, 0x00, /* 000000000000 */
710 0x3f, 0xc0, /* 001111111100 */ 685 0x00, 0x00, /* 000000000000 */
711 0x3f, 0xc0, /* 001111111100 */ 686 0x00, 0x00, /* 000000000000 */
712 0x3f, 0xc0, /* 001111111100 */ 687 0x00, 0x00, /* 000000000000 */
713 0x3f, 0xc0, /* 001111111100 */ 688 0x00, 0x00, /* 000000000000 */
714 0x3f, 0xc0, /* 001111111100 */ 689 0x00, 0x00, /* 000000000000 */
715 0x3f, 0xc0, /* 001111111100 */ 690 0x00, 0x00, /* 000000000000 */
716 0x3f, 0xc0, /* 001111111100 */ 691 0x00, 0x00, /* 000000000000 */
717 0x3f, 0xc0, /* 001111111100 */ 692 0x00, 0x00, /* 000000000000 */
718 0x3f, 0xc0, /* 001111111100 */ 693 0x30, 0x00, /* 001100000000 */
719 0x3f, 0xc0, /* 001111111100 */ 694 0x30, 0x00, /* 001100000000 */
720 0x3f, 0xc0, /* 001111111100 */ 695 0x3f, 0xe0, /* 001111111110 */
721 0x3f, 0xc0, /* 001111111100 */ 696 0x3f, 0xe0, /* 001111111110 */
722 0x00, 0x00, /* 000000000000 */ 697 0x00, 0x00, /* 000000000000 */
723 0x00, 0x00, /* 000000000000 */ 698 0x00, 0x00, /* 000000000000 */
724 0x00, 0x00, /* 000000000000 */ 699 0x00, 0x00, /* 000000000000 */
@@ -726,24 +701,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
726 0x00, 0x00, /* 000000000000 */ 701 0x00, 0x00, /* 000000000000 */
727 702
728 /* 29 0x1d '^]' */ 703 /* 29 0x1d '^]' */
729 /* FIXME */
730 0x00, 0x00, /* 000000000000 */ 704 0x00, 0x00, /* 000000000000 */
731 0x00, 0x00, /* 000000000000 */ 705 0x00, 0x00, /* 000000000000 */
732 0x00, 0x00, /* 000000000000 */ 706 0x00, 0x00, /* 000000000000 */
733 0x00, 0x00, /* 000000000000 */ 707 0x00, 0x00, /* 000000000000 */
734 0x00, 0x00, /* 000000000000 */ 708 0x00, 0x00, /* 000000000000 */
735 0x3f, 0xc0, /* 001111111100 */ 709 0x00, 0x00, /* 000000000000 */
736 0x3f, 0xc0, /* 001111111100 */ 710 0x09, 0x00, /* 000010010000 */
737 0x3f, 0xc0, /* 001111111100 */ 711 0x19, 0x80, /* 000110011000 */
738 0x3f, 0xc0, /* 001111111100 */ 712 0x39, 0xc0, /* 001110011100 */
739 0x3f, 0xc0, /* 001111111100 */ 713 0x7f, 0xe0, /* 011111111110 */
740 0x3f, 0xc0, /* 001111111100 */ 714 0xff, 0xf0, /* 111111111111 */
741 0x3f, 0xc0, /* 001111111100 */ 715 0x7f, 0xe0, /* 011111111110 */
742 0x3f, 0xc0, /* 001111111100 */ 716 0x39, 0xc0, /* 001110011100 */
743 0x3f, 0xc0, /* 001111111100 */ 717 0x19, 0x80, /* 000110011000 */
744 0x3f, 0xc0, /* 001111111100 */ 718 0x09, 0x00, /* 000010010000 */
745 0x3f, 0xc0, /* 001111111100 */ 719 0x00, 0x00, /* 000000000000 */
746 0x3f, 0xc0, /* 001111111100 */ 720 0x00, 0x00, /* 000000000000 */
747 0x00, 0x00, /* 000000000000 */ 721 0x00, 0x00, /* 000000000000 */
748 0x00, 0x00, /* 000000000000 */ 722 0x00, 0x00, /* 000000000000 */
749 0x00, 0x00, /* 000000000000 */ 723 0x00, 0x00, /* 000000000000 */
@@ -751,24 +725,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
751 0x00, 0x00, /* 000000000000 */ 725 0x00, 0x00, /* 000000000000 */
752 726
753 /* 30 0x1e '^^' */ 727 /* 30 0x1e '^^' */
754 /* FIXME */
755 0x00, 0x00, /* 000000000000 */ 728 0x00, 0x00, /* 000000000000 */
756 0x00, 0x00, /* 000000000000 */ 729 0x00, 0x00, /* 000000000000 */
757 0x00, 0x00, /* 000000000000 */ 730 0x00, 0x00, /* 000000000000 */
758 0x00, 0x00, /* 000000000000 */ 731 0x00, 0x00, /* 000000000000 */
759 0x00, 0x00, /* 000000000000 */ 732 0x00, 0x00, /* 000000000000 */
760 0x3f, 0xc0, /* 001111111100 */ 733 0x00, 0x00, /* 000000000000 */
761 0x3f, 0xc0, /* 001111111100 */ 734 0x04, 0x00, /* 000001000000 */
762 0x3f, 0xc0, /* 001111111100 */ 735 0x04, 0x00, /* 000001000000 */
763 0x3f, 0xc0, /* 001111111100 */ 736 0x0e, 0x00, /* 000011100000 */
764 0x3f, 0xc0, /* 001111111100 */ 737 0x0e, 0x00, /* 000011100000 */
765 0x3f, 0xc0, /* 001111111100 */ 738 0x1f, 0x00, /* 000111110000 */
766 0x3f, 0xc0, /* 001111111100 */ 739 0x1f, 0x00, /* 000111110000 */
767 0x3f, 0xc0, /* 001111111100 */ 740 0x3f, 0x80, /* 001111111000 */
768 0x3f, 0xc0, /* 001111111100 */ 741 0x3f, 0x80, /* 001111111000 */
769 0x3f, 0xc0, /* 001111111100 */ 742 0x7f, 0xc0, /* 011111111100 */
770 0x3f, 0xc0, /* 001111111100 */ 743 0x7f, 0xc0, /* 011111111100 */
771 0x3f, 0xc0, /* 001111111100 */ 744 0x00, 0x00, /* 000000000000 */
772 0x00, 0x00, /* 000000000000 */ 745 0x00, 0x00, /* 000000000000 */
773 0x00, 0x00, /* 000000000000 */ 746 0x00, 0x00, /* 000000000000 */
774 0x00, 0x00, /* 000000000000 */ 747 0x00, 0x00, /* 000000000000 */
@@ -776,24 +749,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
776 0x00, 0x00, /* 000000000000 */ 749 0x00, 0x00, /* 000000000000 */
777 750
778 /* 31 0x1f '^_' */ 751 /* 31 0x1f '^_' */
779 /* FIXME */
780 0x00, 0x00, /* 000000000000 */ 752 0x00, 0x00, /* 000000000000 */
781 0x00, 0x00, /* 000000000000 */ 753 0x00, 0x00, /* 000000000000 */
782 0x00, 0x00, /* 000000000000 */ 754 0x00, 0x00, /* 000000000000 */
783 0x00, 0x00, /* 000000000000 */ 755 0x00, 0x00, /* 000000000000 */
784 0x00, 0x00, /* 000000000000 */ 756 0x00, 0x00, /* 000000000000 */
785 0x3f, 0xc0, /* 001111111100 */ 757 0x00, 0x00, /* 000000000000 */
786 0x3f, 0xc0, /* 001111111100 */ 758 0x7f, 0xc0, /* 011111111100 */
787 0x3f, 0xc0, /* 001111111100 */ 759 0x7f, 0xc0, /* 011111111100 */
788 0x3f, 0xc0, /* 001111111100 */ 760 0x3f, 0x80, /* 001111111000 */
789 0x3f, 0xc0, /* 001111111100 */ 761 0x3f, 0x80, /* 001111111000 */
790 0x3f, 0xc0, /* 001111111100 */ 762 0x1f, 0x00, /* 000111110000 */
791 0x3f, 0xc0, /* 001111111100 */ 763 0x1f, 0x00, /* 000111110000 */
792 0x3f, 0xc0, /* 001111111100 */ 764 0x0e, 0x00, /* 000011100000 */
793 0x3f, 0xc0, /* 001111111100 */ 765 0x0e, 0x00, /* 000011100000 */
794 0x3f, 0xc0, /* 001111111100 */ 766 0x04, 0x00, /* 000001000000 */
795 0x3f, 0xc0, /* 001111111100 */ 767 0x04, 0x00, /* 000001000000 */
796 0x3f, 0xc0, /* 001111111100 */ 768 0x00, 0x00, /* 000000000000 */
797 0x00, 0x00, /* 000000000000 */ 769 0x00, 0x00, /* 000000000000 */
798 0x00, 0x00, /* 000000000000 */ 770 0x00, 0x00, /* 000000000000 */
799 0x00, 0x00, /* 000000000000 */ 771 0x00, 0x00, /* 000000000000 */
@@ -3081,29 +3053,28 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
3081 0x00, 0x00, /* 000000000000 */ 3053 0x00, 0x00, /* 000000000000 */
3082 3054
3083 /* 127 0x7f '.' */ 3055 /* 127 0x7f '.' */
3084 /* FIXME */
3085 0x00, 0x00, /* 000000000000 */ 3056 0x00, 0x00, /* 000000000000 */
3086 0x00, 0x00, /* 000000000000 */ 3057 0x00, 0x00, /* 000000000000 */
3087 0x00, 0x00, /* 000000000000 */ 3058 0x00, 0x00, /* 000000000000 */
3088 0x00, 0x00, /* 000000000000 */ 3059 0x00, 0x00, /* 000000000000 */
3089 0x00, 0x00, /* 000000000000 */ 3060 0x00, 0x00, /* 000000000000 */
3090 0x3f, 0xc0, /* 001111111100 */
3091 0x3f, 0xc0, /* 001111111100 */
3092 0x3f, 0xc0, /* 001111111100 */
3093 0x3f, 0xc0, /* 001111111100 */
3094 0x3f, 0xc0, /* 001111111100 */
3095 0x3f, 0xc0, /* 001111111100 */
3096 0x3f, 0xc0, /* 001111111100 */
3097 0x3f, 0xc0, /* 001111111100 */
3098 0x3f, 0xc0, /* 001111111100 */
3099 0x3f, 0xc0, /* 001111111100 */
3100 0x3f, 0xc0, /* 001111111100 */
3101 0x3f, 0xc0, /* 001111111100 */
3102 0x00, 0x00, /* 000000000000 */ 3061 0x00, 0x00, /* 000000000000 */
3103 0x00, 0x00, /* 000000000000 */ 3062 0x00, 0x00, /* 000000000000 */
3104 0x00, 0x00, /* 000000000000 */ 3063 0x00, 0x00, /* 000000000000 */
3105 0x00, 0x00, /* 000000000000 */ 3064 0x00, 0x00, /* 000000000000 */
3106 0x00, 0x00, /* 000000000000 */ 3065 0x00, 0x00, /* 000000000000 */
3066 0x00, 0x00, /* 000000000000 */
3067 0x00, 0x00, /* 000000000000 */
3068 0x00, 0x00, /* 000000000000 */
3069 0x00, 0x00, /* 000000000000 */
3070 0x00, 0x00, /* 000000000000 */
3071 0x00, 0x00, /* 000000000000 */
3072 0x00, 0x00, /* 000000000000 */
3073 0x00, 0x00, /* 000000000000 */
3074 0x00, 0x00, /* 000000000000 */
3075 0xff, 0xf0, /* 111111111111 */
3076 0xff, 0xf0, /* 111111111111 */
3077 0x00, 0x00, /* 000000000000 */
3107 3078
3108 /* 128 0x80 '.' */ 3079 /* 128 0x80 '.' */
3109 0x00, 0x00, /* 000000000000 */ 3080 0x00, 0x00, /* 000000000000 */
@@ -3826,24 +3797,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
3826 0x00, 0x00, /* 000000000000 */ 3797 0x00, 0x00, /* 000000000000 */
3827 3798
3828 /* 158 0x9e '.' */ 3799 /* 158 0x9e '.' */
3829 /* FIXME */
3830 0x00, 0x00, /* 000000000000 */
3831 0x00, 0x00, /* 000000000000 */
3832 0x00, 0x00, /* 000000000000 */
3833 0x00, 0x00, /* 000000000000 */ 3800 0x00, 0x00, /* 000000000000 */
3801 0x7f, 0x80, /* 011111111000 */
3802 0x30, 0xc0, /* 001100001100 */
3803 0x30, 0x60, /* 001100000110 */
3804 0x30, 0x60, /* 001100000110 */
3805 0x30, 0x60, /* 001100000110 */
3806 0x30, 0xc0, /* 001100001100 */
3807 0x37, 0x80, /* 001101111000 */
3808 0x30, 0x00, /* 001100000000 */
3809 0x33, 0x00, /* 001100110000 */
3810 0x37, 0x80, /* 001101111000 */
3811 0x33, 0x00, /* 001100110000 */
3812 0x33, 0x00, /* 001100110000 */
3813 0x33, 0x30, /* 001100110011 */
3814 0x31, 0xe0, /* 001100011110 */
3815 0x78, 0xc0, /* 011110001100 */
3834 0x00, 0x00, /* 000000000000 */ 3816 0x00, 0x00, /* 000000000000 */
3835 0x3f, 0xc0, /* 001111111100 */
3836 0x3f, 0xc0, /* 001111111100 */
3837 0x3f, 0xc0, /* 001111111100 */
3838 0x3f, 0xc0, /* 001111111100 */
3839 0x3f, 0xc0, /* 001111111100 */
3840 0x3f, 0xc0, /* 001111111100 */
3841 0x3f, 0xc0, /* 001111111100 */
3842 0x3f, 0xc0, /* 001111111100 */
3843 0x3f, 0xc0, /* 001111111100 */
3844 0x3f, 0xc0, /* 001111111100 */
3845 0x3f, 0xc0, /* 001111111100 */
3846 0x3f, 0xc0, /* 001111111100 */
3847 0x00, 0x00, /* 000000000000 */ 3817 0x00, 0x00, /* 000000000000 */
3848 0x00, 0x00, /* 000000000000 */ 3818 0x00, 0x00, /* 000000000000 */
3849 0x00, 0x00, /* 000000000000 */ 3819 0x00, 0x00, /* 000000000000 */
@@ -3851,28 +3821,27 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
3851 0x00, 0x00, /* 000000000000 */ 3821 0x00, 0x00, /* 000000000000 */
3852 3822
3853 /* 159 0x9f '.' */ 3823 /* 159 0x9f '.' */
3854 /* FIXME */
3855 0x00, 0x00, /* 000000000000 */
3856 0x00, 0x00, /* 000000000000 */
3857 0x00, 0x00, /* 000000000000 */
3858 0x00, 0x00, /* 000000000000 */
3859 0x00, 0x00, /* 000000000000 */
3860 0x3f, 0xc0, /* 001111111100 */
3861 0x3f, 0xc0, /* 001111111100 */
3862 0x3f, 0xc0, /* 001111111100 */
3863 0x3f, 0xc0, /* 001111111100 */
3864 0x3f, 0xc0, /* 001111111100 */
3865 0x3f, 0xc0, /* 001111111100 */
3866 0x3f, 0xc0, /* 001111111100 */
3867 0x3f, 0xc0, /* 001111111100 */
3868 0x3f, 0xc0, /* 001111111100 */
3869 0x3f, 0xc0, /* 001111111100 */
3870 0x3f, 0xc0, /* 001111111100 */
3871 0x3f, 0xc0, /* 001111111100 */
3872 0x00, 0x00, /* 000000000000 */
3873 0x00, 0x00, /* 000000000000 */
3874 0x00, 0x00, /* 000000000000 */
3875 0x00, 0x00, /* 000000000000 */ 3824 0x00, 0x00, /* 000000000000 */
3825 0x00, 0xc0, /* 000000001100 */
3826 0x01, 0xe0, /* 000000011110 */
3827 0x03, 0x30, /* 000000110011 */
3828 0x06, 0x00, /* 000001100000 */
3829 0x06, 0x00, /* 000001100000 */
3830 0x06, 0x00, /* 000001100000 */
3831 0x06, 0x00, /* 000001100000 */
3832 0x06, 0x00, /* 000001100000 */
3833 0x06, 0x00, /* 000001100000 */
3834 0x3f, 0xe0, /* 001111111110 */
3835 0x7f, 0xc0, /* 011111111100 */
3836 0x06, 0x00, /* 000001100000 */
3837 0x06, 0x00, /* 000001100000 */
3838 0x06, 0x00, /* 000001100000 */
3839 0x06, 0x00, /* 000001100000 */
3840 0x06, 0x00, /* 000001100000 */
3841 0x06, 0x00, /* 000001100000 */
3842 0xcc, 0x00, /* 110011000000 */
3843 0x78, 0x00, /* 011110000000 */
3844 0x30, 0x00, /* 001100000000 */
3876 0x00, 0x00, /* 000000000000 */ 3845 0x00, 0x00, /* 000000000000 */
3877 3846
3878 /* 160 0xa0 '.' */ 3847 /* 160 0xa0 '.' */
@@ -4092,24 +4061,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
4092 0x00, 0x00, /* 000000000000 */ 4061 0x00, 0x00, /* 000000000000 */
4093 4062
4094 /* 169 0xa9 '.' */ 4063 /* 169 0xa9 '.' */
4095 /* FIXME */
4096 0x00, 0x00, /* 000000000000 */
4097 0x00, 0x00, /* 000000000000 */ 4064 0x00, 0x00, /* 000000000000 */
4098 0x00, 0x00, /* 000000000000 */ 4065 0x00, 0x00, /* 000000000000 */
4099 0x00, 0x00, /* 000000000000 */ 4066 0x00, 0x00, /* 000000000000 */
4100 0x00, 0x00, /* 000000000000 */ 4067 0x00, 0x00, /* 000000000000 */
4101 0x3f, 0xc0, /* 001111111100 */ 4068 0x3f, 0xc0, /* 001111111100 */
4102 0x3f, 0xc0, /* 001111111100 */ 4069 0x3f, 0xc0, /* 001111111100 */
4103 0x3f, 0xc0, /* 001111111100 */ 4070 0x30, 0x00, /* 001100000000 */
4104 0x3f, 0xc0, /* 001111111100 */ 4071 0x30, 0x00, /* 001100000000 */
4105 0x3f, 0xc0, /* 001111111100 */ 4072 0x30, 0x00, /* 001100000000 */
4106 0x3f, 0xc0, /* 001111111100 */ 4073 0x00, 0x00, /* 000000000000 */
4107 0x3f, 0xc0, /* 001111111100 */ 4074 0x00, 0x00, /* 000000000000 */
4108 0x3f, 0xc0, /* 001111111100 */ 4075 0x00, 0x00, /* 000000000000 */
4109 0x3f, 0xc0, /* 001111111100 */ 4076 0x00, 0x00, /* 000000000000 */
4110 0x3f, 0xc0, /* 001111111100 */ 4077 0x00, 0x00, /* 000000000000 */
4111 0x3f, 0xc0, /* 001111111100 */ 4078 0x00, 0x00, /* 000000000000 */
4112 0x3f, 0xc0, /* 001111111100 */ 4079 0x00, 0x00, /* 000000000000 */
4080 0x00, 0x00, /* 000000000000 */
4113 0x00, 0x00, /* 000000000000 */ 4081 0x00, 0x00, /* 000000000000 */
4114 0x00, 0x00, /* 000000000000 */ 4082 0x00, 0x00, /* 000000000000 */
4115 0x00, 0x00, /* 000000000000 */ 4083 0x00, 0x00, /* 000000000000 */
@@ -5413,24 +5381,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5413 0x00, 0x00, /* 000000000000 */ 5381 0x00, 0x00, /* 000000000000 */
5414 5382
5415 /* 224 0xe0 '.' */ 5383 /* 224 0xe0 '.' */
5416 /* FIXME */
5417 0x00, 0x00, /* 000000000000 */ 5384 0x00, 0x00, /* 000000000000 */
5418 0x00, 0x00, /* 000000000000 */ 5385 0x00, 0x00, /* 000000000000 */
5419 0x00, 0x00, /* 000000000000 */ 5386 0x00, 0x00, /* 000000000000 */
5420 0x00, 0x00, /* 000000000000 */ 5387 0x00, 0x00, /* 000000000000 */
5421 0x00, 0x00, /* 000000000000 */ 5388 0x00, 0x00, /* 000000000000 */
5422 0x3f, 0xc0, /* 001111111100 */ 5389 0x00, 0x00, /* 000000000000 */
5423 0x3f, 0xc0, /* 001111111100 */ 5390 0x0f, 0x60, /* 000011110110 */
5424 0x3f, 0xc0, /* 001111111100 */ 5391 0x13, 0xe0, /* 000100111110 */
5425 0x3f, 0xc0, /* 001111111100 */ 5392 0x21, 0xc0, /* 001000011100 */
5426 0x3f, 0xc0, /* 001111111100 */ 5393 0x60, 0xc0, /* 011000001100 */
5427 0x3f, 0xc0, /* 001111111100 */ 5394 0x60, 0xc0, /* 011000001100 */
5428 0x3f, 0xc0, /* 001111111100 */ 5395 0x60, 0xc0, /* 011000001100 */
5429 0x3f, 0xc0, /* 001111111100 */ 5396 0x60, 0xc0, /* 011000001100 */
5430 0x3f, 0xc0, /* 001111111100 */ 5397 0x70, 0x80, /* 011100001000 */
5431 0x3f, 0xc0, /* 001111111100 */ 5398 0x39, 0xc0, /* 001110011100 */
5432 0x3f, 0xc0, /* 001111111100 */ 5399 0x1f, 0x60, /* 000111110110 */
5433 0x3f, 0xc0, /* 001111111100 */ 5400 0x00, 0x00, /* 000000000000 */
5434 0x00, 0x00, /* 000000000000 */ 5401 0x00, 0x00, /* 000000000000 */
5435 0x00, 0x00, /* 000000000000 */ 5402 0x00, 0x00, /* 000000000000 */
5436 0x00, 0x00, /* 000000000000 */ 5403 0x00, 0x00, /* 000000000000 */
@@ -5462,24 +5429,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5462 0x00, 0x00, /* 000000000000 */ 5429 0x00, 0x00, /* 000000000000 */
5463 5430
5464 /* 226 0xe2 '.' */ 5431 /* 226 0xe2 '.' */
5465 /* FIXME */
5466 0x00, 0x00, /* 000000000000 */
5467 0x00, 0x00, /* 000000000000 */
5468 0x00, 0x00, /* 000000000000 */ 5432 0x00, 0x00, /* 000000000000 */
5469 0x00, 0x00, /* 000000000000 */ 5433 0x00, 0x00, /* 000000000000 */
5434 0x3f, 0xe0, /* 001111111110 */
5435 0x3f, 0xe0, /* 001111111110 */
5436 0x30, 0x60, /* 001100000110 */
5437 0x30, 0x60, /* 001100000110 */
5438 0x30, 0x00, /* 001100000000 */
5439 0x30, 0x00, /* 001100000000 */
5440 0x30, 0x00, /* 001100000000 */
5441 0x30, 0x00, /* 001100000000 */
5442 0x30, 0x00, /* 001100000000 */
5443 0x30, 0x00, /* 001100000000 */
5444 0x30, 0x00, /* 001100000000 */
5445 0x30, 0x00, /* 001100000000 */
5446 0x30, 0x00, /* 001100000000 */
5447 0x30, 0x00, /* 001100000000 */
5470 0x00, 0x00, /* 000000000000 */ 5448 0x00, 0x00, /* 000000000000 */
5471 0x3f, 0xc0, /* 001111111100 */
5472 0x3f, 0xc0, /* 001111111100 */
5473 0x3f, 0xc0, /* 001111111100 */
5474 0x3f, 0xc0, /* 001111111100 */
5475 0x3f, 0xc0, /* 001111111100 */
5476 0x3f, 0xc0, /* 001111111100 */
5477 0x3f, 0xc0, /* 001111111100 */
5478 0x3f, 0xc0, /* 001111111100 */
5479 0x3f, 0xc0, /* 001111111100 */
5480 0x3f, 0xc0, /* 001111111100 */
5481 0x3f, 0xc0, /* 001111111100 */
5482 0x3f, 0xc0, /* 001111111100 */
5483 0x00, 0x00, /* 000000000000 */ 5449 0x00, 0x00, /* 000000000000 */
5484 0x00, 0x00, /* 000000000000 */ 5450 0x00, 0x00, /* 000000000000 */
5485 0x00, 0x00, /* 000000000000 */ 5451 0x00, 0x00, /* 000000000000 */
@@ -5487,49 +5453,47 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5487 0x00, 0x00, /* 000000000000 */ 5453 0x00, 0x00, /* 000000000000 */
5488 5454
5489 /* 227 0xe3 '.' */ 5455 /* 227 0xe3 '.' */
5490 /* FIXME */
5491 0x00, 0x00, /* 000000000000 */ 5456 0x00, 0x00, /* 000000000000 */
5492 0x00, 0x00, /* 000000000000 */ 5457 0x00, 0x00, /* 000000000000 */
5493 0x00, 0x00, /* 000000000000 */ 5458 0x00, 0x00, /* 000000000000 */
5494 0x00, 0x00, /* 000000000000 */ 5459 0x00, 0x00, /* 000000000000 */
5495 0x00, 0x00, /* 000000000000 */ 5460 0x00, 0x00, /* 000000000000 */
5496 0x3f, 0xc0, /* 001111111100 */
5497 0x3f, 0xc0, /* 001111111100 */
5498 0x3f, 0xc0, /* 001111111100 */
5499 0x3f, 0xc0, /* 001111111100 */
5500 0x3f, 0xc0, /* 001111111100 */
5501 0x3f, 0xc0, /* 001111111100 */
5502 0x3f, 0xc0, /* 001111111100 */
5503 0x3f, 0xc0, /* 001111111100 */
5504 0x3f, 0xc0, /* 001111111100 */
5505 0x3f, 0xc0, /* 001111111100 */
5506 0x3f, 0xc0, /* 001111111100 */
5507 0x3f, 0xc0, /* 001111111100 */
5508 0x00, 0x00, /* 000000000000 */
5509 0x00, 0x00, /* 000000000000 */ 5461 0x00, 0x00, /* 000000000000 */
5462 0x7f, 0xe0, /* 011111111110 */
5463 0x7f, 0xe0, /* 011111111110 */
5464 0x19, 0x80, /* 000110011000 */
5465 0x19, 0x80, /* 000110011000 */
5466 0x19, 0x80, /* 000110011000 */
5467 0x19, 0x80, /* 000110011000 */
5468 0x19, 0x80, /* 000110011000 */
5469 0x19, 0x80, /* 000110011000 */
5470 0x19, 0x80, /* 000110011000 */
5471 0x19, 0x80, /* 000110011000 */
5510 0x00, 0x00, /* 000000000000 */ 5472 0x00, 0x00, /* 000000000000 */
5511 0x00, 0x00, /* 000000000000 */ 5473 0x00, 0x00, /* 000000000000 */
5512 0x00, 0x00, /* 000000000000 */ 5474 0x00, 0x00, /* 000000000000 */
5513
5514 /* 228 0xe4 '.' */
5515 /* FIXME */
5516 0x00, 0x00, /* 000000000000 */ 5475 0x00, 0x00, /* 000000000000 */
5517 0x00, 0x00, /* 000000000000 */ 5476 0x00, 0x00, /* 000000000000 */
5518 0x00, 0x00, /* 000000000000 */ 5477 0x00, 0x00, /* 000000000000 */
5478
5479 /* 228 0xe4 '.' */
5519 0x00, 0x00, /* 000000000000 */ 5480 0x00, 0x00, /* 000000000000 */
5481 0x7f, 0xe0, /* 011111111110 */
5482 0x7f, 0xe0, /* 011111111110 */
5483 0x60, 0x60, /* 011000000110 */
5484 0x30, 0x60, /* 001100000110 */
5485 0x30, 0x00, /* 001100000000 */
5486 0x18, 0x00, /* 000110000000 */
5487 0x18, 0x00, /* 000110000000 */
5488 0x0c, 0x00, /* 000011000000 */
5489 0x18, 0x00, /* 000110000000 */
5490 0x18, 0x00, /* 000110000000 */
5491 0x30, 0x00, /* 001100000000 */
5492 0x30, 0x60, /* 001100000110 */
5493 0x60, 0x60, /* 011000000110 */
5494 0x7f, 0xe0, /* 011111111110 */
5495 0x7f, 0xe0, /* 011111111110 */
5520 0x00, 0x00, /* 000000000000 */ 5496 0x00, 0x00, /* 000000000000 */
5521 0x3f, 0xc0, /* 001111111100 */
5522 0x3f, 0xc0, /* 001111111100 */
5523 0x3f, 0xc0, /* 001111111100 */
5524 0x3f, 0xc0, /* 001111111100 */
5525 0x3f, 0xc0, /* 001111111100 */
5526 0x3f, 0xc0, /* 001111111100 */
5527 0x3f, 0xc0, /* 001111111100 */
5528 0x3f, 0xc0, /* 001111111100 */
5529 0x3f, 0xc0, /* 001111111100 */
5530 0x3f, 0xc0, /* 001111111100 */
5531 0x3f, 0xc0, /* 001111111100 */
5532 0x3f, 0xc0, /* 001111111100 */
5533 0x00, 0x00, /* 000000000000 */ 5497 0x00, 0x00, /* 000000000000 */
5534 0x00, 0x00, /* 000000000000 */ 5498 0x00, 0x00, /* 000000000000 */
5535 0x00, 0x00, /* 000000000000 */ 5499 0x00, 0x00, /* 000000000000 */
@@ -5537,24 +5501,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5537 0x00, 0x00, /* 000000000000 */ 5501 0x00, 0x00, /* 000000000000 */
5538 5502
5539 /* 229 0xe5 '.' */ 5503 /* 229 0xe5 '.' */
5540 /* FIXME */
5541 0x00, 0x00, /* 000000000000 */ 5504 0x00, 0x00, /* 000000000000 */
5542 0x00, 0x00, /* 000000000000 */ 5505 0x00, 0x00, /* 000000000000 */
5543 0x00, 0x00, /* 000000000000 */ 5506 0x00, 0x00, /* 000000000000 */
5544 0x00, 0x00, /* 000000000000 */ 5507 0x00, 0x00, /* 000000000000 */
5545 0x00, 0x00, /* 000000000000 */ 5508 0x00, 0x00, /* 000000000000 */
5546 0x3f, 0xc0, /* 001111111100 */ 5509 0x07, 0xe0, /* 000001111110 */
5547 0x3f, 0xc0, /* 001111111100 */ 5510 0x0f, 0xe0, /* 000011111110 */
5548 0x3f, 0xc0, /* 001111111100 */ 5511 0x13, 0x80, /* 000100111000 */
5549 0x3f, 0xc0, /* 001111111100 */ 5512 0x21, 0xc0, /* 001000011100 */
5550 0x3f, 0xc0, /* 001111111100 */ 5513 0x60, 0xc0, /* 011000001100 */
5551 0x3f, 0xc0, /* 001111111100 */ 5514 0x60, 0xc0, /* 011000001100 */
5552 0x3f, 0xc0, /* 001111111100 */ 5515 0x60, 0xc0, /* 011000001100 */
5553 0x3f, 0xc0, /* 001111111100 */ 5516 0x60, 0xc0, /* 011000001100 */
5554 0x3f, 0xc0, /* 001111111100 */ 5517 0x70, 0x80, /* 011100001000 */
5555 0x3f, 0xc0, /* 001111111100 */ 5518 0x39, 0x00, /* 001110010000 */
5556 0x3f, 0xc0, /* 001111111100 */ 5519 0x1e, 0x00, /* 000111100000 */
5557 0x3f, 0xc0, /* 001111111100 */ 5520 0x00, 0x00, /* 000000000000 */
5558 0x00, 0x00, /* 000000000000 */ 5521 0x00, 0x00, /* 000000000000 */
5559 0x00, 0x00, /* 000000000000 */ 5522 0x00, 0x00, /* 000000000000 */
5560 0x00, 0x00, /* 000000000000 */ 5523 0x00, 0x00, /* 000000000000 */
@@ -5586,24 +5549,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5586 0x00, 0x00, /* 000000000000 */ 5549 0x00, 0x00, /* 000000000000 */
5587 5550
5588 /* 231 0xe7 '.' */ 5551 /* 231 0xe7 '.' */
5589 /* FIXME */
5590 0x00, 0x00, /* 000000000000 */
5591 0x00, 0x00, /* 000000000000 */
5592 0x00, 0x00, /* 000000000000 */
5593 0x00, 0x00, /* 000000000000 */ 5552 0x00, 0x00, /* 000000000000 */
5594 0x00, 0x00, /* 000000000000 */ 5553 0x19, 0x80, /* 000110011000 */
5595 0x3f, 0xc0, /* 001111111100 */
5596 0x3f, 0xc0, /* 001111111100 */
5597 0x3f, 0xc0, /* 001111111100 */
5598 0x3f, 0xc0, /* 001111111100 */
5599 0x3f, 0xc0, /* 001111111100 */
5600 0x3f, 0xc0, /* 001111111100 */
5601 0x3f, 0xc0, /* 001111111100 */
5602 0x3f, 0xc0, /* 001111111100 */
5603 0x3f, 0xc0, /* 001111111100 */
5604 0x3f, 0xc0, /* 001111111100 */
5605 0x3f, 0xc0, /* 001111111100 */
5606 0x3f, 0xc0, /* 001111111100 */ 5554 0x3f, 0xc0, /* 001111111100 */
5555 0x66, 0x60, /* 011001100110 */
5556 0x66, 0x60, /* 011001100110 */
5557 0x06, 0x00, /* 000001100000 */
5558 0x06, 0x00, /* 000001100000 */
5559 0x06, 0x00, /* 000001100000 */
5560 0x06, 0x00, /* 000001100000 */
5561 0x06, 0x00, /* 000001100000 */
5562 0x06, 0x00, /* 000001100000 */
5563 0x06, 0x00, /* 000001100000 */
5564 0x06, 0x00, /* 000001100000 */
5565 0x06, 0x00, /* 000001100000 */
5566 0x06, 0x00, /* 000001100000 */
5567 0x06, 0x00, /* 000001100000 */
5568 0x00, 0x00, /* 000000000000 */
5607 0x00, 0x00, /* 000000000000 */ 5569 0x00, 0x00, /* 000000000000 */
5608 0x00, 0x00, /* 000000000000 */ 5570 0x00, 0x00, /* 000000000000 */
5609 0x00, 0x00, /* 000000000000 */ 5571 0x00, 0x00, /* 000000000000 */
@@ -5611,24 +5573,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5611 0x00, 0x00, /* 000000000000 */ 5573 0x00, 0x00, /* 000000000000 */
5612 5574
5613 /* 232 0xe8 '.' */ 5575 /* 232 0xe8 '.' */
5614 /* FIXME */
5615 0x00, 0x00, /* 000000000000 */
5616 0x00, 0x00, /* 000000000000 */
5617 0x00, 0x00, /* 000000000000 */ 5576 0x00, 0x00, /* 000000000000 */
5618 0x00, 0x00, /* 000000000000 */ 5577 0x00, 0x00, /* 000000000000 */
5578 0x7f, 0xe0, /* 011111111110 */
5579 0x7f, 0xe0, /* 011111111110 */
5580 0x06, 0x00, /* 000001100000 */
5581 0x06, 0x00, /* 000001100000 */
5582 0x0f, 0x00, /* 000011110000 */
5583 0x19, 0x80, /* 000110011000 */
5584 0x30, 0xc0, /* 001100001100 */
5585 0x30, 0xc0, /* 001100001100 */
5586 0x19, 0x80, /* 000110011000 */
5587 0x0f, 0x00, /* 000011110000 */
5588 0x06, 0x00, /* 000001100000 */
5589 0x06, 0x00, /* 000001100000 */
5590 0x7f, 0xe0, /* 011111111110 */
5591 0x7f, 0xe0, /* 011111111110 */
5619 0x00, 0x00, /* 000000000000 */ 5592 0x00, 0x00, /* 000000000000 */
5620 0x3f, 0xc0, /* 001111111100 */
5621 0x3f, 0xc0, /* 001111111100 */
5622 0x3f, 0xc0, /* 001111111100 */
5623 0x3f, 0xc0, /* 001111111100 */
5624 0x3f, 0xc0, /* 001111111100 */
5625 0x3f, 0xc0, /* 001111111100 */
5626 0x3f, 0xc0, /* 001111111100 */
5627 0x3f, 0xc0, /* 001111111100 */
5628 0x3f, 0xc0, /* 001111111100 */
5629 0x3f, 0xc0, /* 001111111100 */
5630 0x3f, 0xc0, /* 001111111100 */
5631 0x3f, 0xc0, /* 001111111100 */
5632 0x00, 0x00, /* 000000000000 */ 5593 0x00, 0x00, /* 000000000000 */
5633 0x00, 0x00, /* 000000000000 */ 5594 0x00, 0x00, /* 000000000000 */
5634 0x00, 0x00, /* 000000000000 */ 5595 0x00, 0x00, /* 000000000000 */
@@ -5636,24 +5597,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5636 0x00, 0x00, /* 000000000000 */ 5597 0x00, 0x00, /* 000000000000 */
5637 5598
5638 /* 233 0xe9 '.' */ 5599 /* 233 0xe9 '.' */
5639 /* FIXME */
5640 0x00, 0x00, /* 000000000000 */ 5600 0x00, 0x00, /* 000000000000 */
5641 0x00, 0x00, /* 000000000000 */ 5601 0x00, 0x00, /* 000000000000 */
5642 0x00, 0x00, /* 000000000000 */ 5602 0x00, 0x00, /* 000000000000 */
5643 0x00, 0x00, /* 000000000000 */ 5603 0x00, 0x00, /* 000000000000 */
5604 0x0f, 0x00, /* 000011110000 */
5605 0x1f, 0x80, /* 000111111000 */
5606 0x30, 0xc0, /* 001100001100 */
5607 0x60, 0x60, /* 011000000110 */
5608 0x60, 0x60, /* 011000000110 */
5609 0x7f, 0xe0, /* 011111111110 */
5610 0x7f, 0xe0, /* 011111111110 */
5611 0x60, 0x60, /* 011000000110 */
5612 0x60, 0x60, /* 011000000110 */
5613 0x30, 0xc0, /* 001100001100 */
5614 0x1f, 0x80, /* 000111111000 */
5615 0x0f, 0x00, /* 000011110000 */
5644 0x00, 0x00, /* 000000000000 */ 5616 0x00, 0x00, /* 000000000000 */
5645 0x3f, 0xc0, /* 001111111100 */
5646 0x3f, 0xc0, /* 001111111100 */
5647 0x3f, 0xc0, /* 001111111100 */
5648 0x3f, 0xc0, /* 001111111100 */
5649 0x3f, 0xc0, /* 001111111100 */
5650 0x3f, 0xc0, /* 001111111100 */
5651 0x3f, 0xc0, /* 001111111100 */
5652 0x3f, 0xc0, /* 001111111100 */
5653 0x3f, 0xc0, /* 001111111100 */
5654 0x3f, 0xc0, /* 001111111100 */
5655 0x3f, 0xc0, /* 001111111100 */
5656 0x3f, 0xc0, /* 001111111100 */
5657 0x00, 0x00, /* 000000000000 */ 5617 0x00, 0x00, /* 000000000000 */
5658 0x00, 0x00, /* 000000000000 */ 5618 0x00, 0x00, /* 000000000000 */
5659 0x00, 0x00, /* 000000000000 */ 5619 0x00, 0x00, /* 000000000000 */
@@ -5661,24 +5621,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5661 0x00, 0x00, /* 000000000000 */ 5621 0x00, 0x00, /* 000000000000 */
5662 5622
5663 /* 234 0xea '.' */ 5623 /* 234 0xea '.' */
5664 /* FIXME */
5665 0x00, 0x00, /* 000000000000 */ 5624 0x00, 0x00, /* 000000000000 */
5666 0x00, 0x00, /* 000000000000 */ 5625 0x00, 0x00, /* 000000000000 */
5667 0x00, 0x00, /* 000000000000 */ 5626 0x00, 0x00, /* 000000000000 */
5668 0x00, 0x00, /* 000000000000 */ 5627 0x00, 0x00, /* 000000000000 */
5628 0x1f, 0x00, /* 000111110000 */
5629 0x31, 0x80, /* 001100011000 */
5630 0x30, 0xc0, /* 001100001100 */
5631 0x30, 0xc0, /* 001100001100 */
5632 0x60, 0x60, /* 011000000110 */
5633 0x60, 0x60, /* 011000000110 */
5634 0x30, 0xc0, /* 001100001100 */
5635 0x30, 0xc0, /* 001100001100 */
5636 0x19, 0x80, /* 000110011000 */
5637 0x19, 0x80, /* 000110011000 */
5638 0xd9, 0xb0, /* 110110011011 */
5639 0x79, 0xe0, /* 011110011110 */
5669 0x00, 0x00, /* 000000000000 */ 5640 0x00, 0x00, /* 000000000000 */
5670 0x3f, 0xc0, /* 001111111100 */
5671 0x3f, 0xc0, /* 001111111100 */
5672 0x3f, 0xc0, /* 001111111100 */
5673 0x3f, 0xc0, /* 001111111100 */
5674 0x3f, 0xc0, /* 001111111100 */
5675 0x3f, 0xc0, /* 001111111100 */
5676 0x3f, 0xc0, /* 001111111100 */
5677 0x3f, 0xc0, /* 001111111100 */
5678 0x3f, 0xc0, /* 001111111100 */
5679 0x3f, 0xc0, /* 001111111100 */
5680 0x3f, 0xc0, /* 001111111100 */
5681 0x3f, 0xc0, /* 001111111100 */
5682 0x00, 0x00, /* 000000000000 */ 5641 0x00, 0x00, /* 000000000000 */
5683 0x00, 0x00, /* 000000000000 */ 5642 0x00, 0x00, /* 000000000000 */
5684 0x00, 0x00, /* 000000000000 */ 5643 0x00, 0x00, /* 000000000000 */
@@ -5686,24 +5645,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5686 0x00, 0x00, /* 000000000000 */ 5645 0x00, 0x00, /* 000000000000 */
5687 5646
5688 /* 235 0xeb '.' */ 5647 /* 235 0xeb '.' */
5689 /* FIXME */
5690 0x00, 0x00, /* 000000000000 */
5691 0x00, 0x00, /* 000000000000 */
5692 0x00, 0x00, /* 000000000000 */
5693 0x00, 0x00, /* 000000000000 */ 5648 0x00, 0x00, /* 000000000000 */
5649 0x07, 0x80, /* 000001111000 */
5650 0x0c, 0xc0, /* 000011001100 */
5651 0x18, 0x60, /* 000110000110 */
5652 0x18, 0x00, /* 000110000000 */
5653 0x0c, 0x00, /* 000011000000 */
5654 0x06, 0x00, /* 000001100000 */
5655 0x03, 0x00, /* 000000110000 */
5656 0x0f, 0x80, /* 000011111000 */
5657 0x11, 0xc0, /* 000100011100 */
5658 0x20, 0xe0, /* 001000001110 */
5659 0x60, 0x60, /* 011000000110 */
5660 0x60, 0x60, /* 011000000110 */
5661 0x70, 0x40, /* 011100000100 */
5662 0x38, 0x80, /* 001110001000 */
5663 0x1f, 0x00, /* 000111110000 */
5694 0x00, 0x00, /* 000000000000 */ 5664 0x00, 0x00, /* 000000000000 */
5695 0x3f, 0xc0, /* 001111111100 */
5696 0x3f, 0xc0, /* 001111111100 */
5697 0x3f, 0xc0, /* 001111111100 */
5698 0x3f, 0xc0, /* 001111111100 */
5699 0x3f, 0xc0, /* 001111111100 */
5700 0x3f, 0xc0, /* 001111111100 */
5701 0x3f, 0xc0, /* 001111111100 */
5702 0x3f, 0xc0, /* 001111111100 */
5703 0x3f, 0xc0, /* 001111111100 */
5704 0x3f, 0xc0, /* 001111111100 */
5705 0x3f, 0xc0, /* 001111111100 */
5706 0x3f, 0xc0, /* 001111111100 */
5707 0x00, 0x00, /* 000000000000 */ 5665 0x00, 0x00, /* 000000000000 */
5708 0x00, 0x00, /* 000000000000 */ 5666 0x00, 0x00, /* 000000000000 */
5709 0x00, 0x00, /* 000000000000 */ 5667 0x00, 0x00, /* 000000000000 */
@@ -5711,99 +5669,95 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5711 0x00, 0x00, /* 000000000000 */ 5669 0x00, 0x00, /* 000000000000 */
5712 5670
5713 /* 236 0xec '.' */ 5671 /* 236 0xec '.' */
5714 /* FIXME */
5715 0x00, 0x00, /* 000000000000 */ 5672 0x00, 0x00, /* 000000000000 */
5716 0x00, 0x00, /* 000000000000 */ 5673 0x00, 0x00, /* 000000000000 */
5717 0x00, 0x00, /* 000000000000 */ 5674 0x00, 0x00, /* 000000000000 */
5718 0x00, 0x00, /* 000000000000 */ 5675 0x00, 0x00, /* 000000000000 */
5719 0x00, 0x00, /* 000000000000 */ 5676 0x00, 0x00, /* 000000000000 */
5720 0x3f, 0xc0, /* 001111111100 */
5721 0x3f, 0xc0, /* 001111111100 */
5722 0x3f, 0xc0, /* 001111111100 */
5723 0x3f, 0xc0, /* 001111111100 */
5724 0x3f, 0xc0, /* 001111111100 */
5725 0x3f, 0xc0, /* 001111111100 */
5726 0x3f, 0xc0, /* 001111111100 */
5727 0x3f, 0xc0, /* 001111111100 */
5728 0x3f, 0xc0, /* 001111111100 */
5729 0x3f, 0xc0, /* 001111111100 */
5730 0x3f, 0xc0, /* 001111111100 */
5731 0x3f, 0xc0, /* 001111111100 */
5732 0x00, 0x00, /* 000000000000 */ 5677 0x00, 0x00, /* 000000000000 */
5733 0x00, 0x00, /* 000000000000 */ 5678 0x00, 0x00, /* 000000000000 */
5734 0x00, 0x00, /* 000000000000 */ 5679 0x00, 0x00, /* 000000000000 */
5680 0x39, 0xc0, /* 001110011100 */
5681 0x6f, 0x60, /* 011011110110 */
5682 0x66, 0x60, /* 011001100110 */
5683 0xc6, 0x30, /* 110001100011 */
5684 0xc6, 0x30, /* 110001100011 */
5685 0x66, 0x60, /* 011001100110 */
5686 0x6f, 0x60, /* 011011110110 */
5687 0x39, 0xc0, /* 001110011100 */
5735 0x00, 0x00, /* 000000000000 */ 5688 0x00, 0x00, /* 000000000000 */
5736 0x00, 0x00, /* 000000000000 */ 5689 0x00, 0x00, /* 000000000000 */
5737
5738 /* 237 0xed '.' */
5739 /* FIXME */
5740 0x00, 0x00, /* 000000000000 */ 5690 0x00, 0x00, /* 000000000000 */
5741 0x00, 0x00, /* 000000000000 */ 5691 0x00, 0x00, /* 000000000000 */
5742 0x00, 0x00, /* 000000000000 */ 5692 0x00, 0x00, /* 000000000000 */
5743 0x00, 0x00, /* 000000000000 */ 5693 0x00, 0x00, /* 000000000000 */
5694
5695 /* 237 0xed '.' */
5744 0x00, 0x00, /* 000000000000 */ 5696 0x00, 0x00, /* 000000000000 */
5745 0x3f, 0xc0, /* 001111111100 */
5746 0x3f, 0xc0, /* 001111111100 */
5747 0x3f, 0xc0, /* 001111111100 */
5748 0x3f, 0xc0, /* 001111111100 */
5749 0x3f, 0xc0, /* 001111111100 */
5750 0x3f, 0xc0, /* 001111111100 */
5751 0x3f, 0xc0, /* 001111111100 */
5752 0x3f, 0xc0, /* 001111111100 */
5753 0x3f, 0xc0, /* 001111111100 */
5754 0x3f, 0xc0, /* 001111111100 */
5755 0x3f, 0xc0, /* 001111111100 */
5756 0x3f, 0xc0, /* 001111111100 */
5757 0x00, 0x00, /* 000000000000 */ 5697 0x00, 0x00, /* 000000000000 */
5758 0x00, 0x00, /* 000000000000 */ 5698 0x00, 0x00, /* 000000000000 */
5759 0x00, 0x00, /* 000000000000 */ 5699 0x00, 0x00, /* 000000000000 */
5700 0x00, 0xc0, /* 000000001100 */
5701 0x00, 0xc0, /* 000000001100 */
5702 0x01, 0x80, /* 000000011000 */
5703 0x01, 0x80, /* 000000011000 */
5704 0x3b, 0xc0, /* 001110111100 */
5705 0x6f, 0x60, /* 011011110110 */
5706 0x66, 0x60, /* 011001100110 */
5707 0xc6, 0x30, /* 110001100011 */
5708 0xc6, 0x30, /* 110001100011 */
5709 0x66, 0x60, /* 011001100110 */
5710 0x6f, 0x60, /* 011011110110 */
5711 0x3d, 0xc0, /* 001111011100 */
5712 0x18, 0x00, /* 000110000000 */
5713 0x18, 0x00, /* 000110000000 */
5714 0x30, 0x00, /* 001100000000 */
5715 0x30, 0x00, /* 001100000000 */
5760 0x00, 0x00, /* 000000000000 */ 5716 0x00, 0x00, /* 000000000000 */
5761 0x00, 0x00, /* 000000000000 */ 5717 0x00, 0x00, /* 000000000000 */
5762 5718
5763 /* 238 0xee '.' */ 5719 /* 238 0xee '.' */
5764 /* FIXME */
5765 0x00, 0x00, /* 000000000000 */ 5720 0x00, 0x00, /* 000000000000 */
5721 0x01, 0xc0, /* 000000011100 */
5722 0x03, 0x00, /* 000000110000 */
5723 0x06, 0x00, /* 000001100000 */
5724 0x06, 0x00, /* 000001100000 */
5725 0x0c, 0x00, /* 000011000000 */
5726 0x0c, 0x00, /* 000011000000 */
5727 0x18, 0x00, /* 000110000000 */
5728 0x1f, 0xc0, /* 000111111100 */
5729 0x18, 0x00, /* 000110000000 */
5730 0x0c, 0x00, /* 000011000000 */
5731 0x0c, 0x00, /* 000011000000 */
5732 0x06, 0x00, /* 000001100000 */
5733 0x06, 0x00, /* 000001100000 */
5734 0x03, 0x00, /* 000000110000 */
5735 0x01, 0xc0, /* 000000011100 */
5766 0x00, 0x00, /* 000000000000 */ 5736 0x00, 0x00, /* 000000000000 */
5767 0x00, 0x00, /* 000000000000 */ 5737 0x00, 0x00, /* 000000000000 */
5768 0x00, 0x00, /* 000000000000 */ 5738 0x00, 0x00, /* 000000000000 */
5769 0x00, 0x00, /* 000000000000 */ 5739 0x00, 0x00, /* 000000000000 */
5770 0x3f, 0xc0, /* 001111111100 */
5771 0x3f, 0xc0, /* 001111111100 */
5772 0x3f, 0xc0, /* 001111111100 */
5773 0x3f, 0xc0, /* 001111111100 */
5774 0x3f, 0xc0, /* 001111111100 */
5775 0x3f, 0xc0, /* 001111111100 */
5776 0x3f, 0xc0, /* 001111111100 */
5777 0x3f, 0xc0, /* 001111111100 */
5778 0x3f, 0xc0, /* 001111111100 */
5779 0x3f, 0xc0, /* 001111111100 */
5780 0x3f, 0xc0, /* 001111111100 */
5781 0x3f, 0xc0, /* 001111111100 */
5782 0x00, 0x00, /* 000000000000 */
5783 0x00, 0x00, /* 000000000000 */
5784 0x00, 0x00, /* 000000000000 */
5785 0x00, 0x00, /* 000000000000 */ 5740 0x00, 0x00, /* 000000000000 */
5786 0x00, 0x00, /* 000000000000 */ 5741 0x00, 0x00, /* 000000000000 */
5787 5742
5788 /* 239 0xef '.' */ 5743 /* 239 0xef '.' */
5789 /* FIXME */
5790 0x00, 0x00, /* 000000000000 */ 5744 0x00, 0x00, /* 000000000000 */
5791 0x00, 0x00, /* 000000000000 */ 5745 0x00, 0x00, /* 000000000000 */
5792 0x00, 0x00, /* 000000000000 */ 5746 0x00, 0x00, /* 000000000000 */
5793 0x00, 0x00, /* 000000000000 */ 5747 0x00, 0x00, /* 000000000000 */
5794 0x00, 0x00, /* 000000000000 */ 5748 0x00, 0x00, /* 000000000000 */
5795 0x3f, 0xc0, /* 001111111100 */ 5749 0x0f, 0x00, /* 000011110000 */
5796 0x3f, 0xc0, /* 001111111100 */ 5750 0x1f, 0x80, /* 000111111000 */
5797 0x3f, 0xc0, /* 001111111100 */ 5751 0x39, 0xc0, /* 001110011100 */
5798 0x3f, 0xc0, /* 001111111100 */ 5752 0x30, 0xc0, /* 001100001100 */
5799 0x3f, 0xc0, /* 001111111100 */ 5753 0x30, 0xc0, /* 001100001100 */
5800 0x3f, 0xc0, /* 001111111100 */ 5754 0x30, 0xc0, /* 001100001100 */
5801 0x3f, 0xc0, /* 001111111100 */ 5755 0x30, 0xc0, /* 001100001100 */
5802 0x3f, 0xc0, /* 001111111100 */ 5756 0x30, 0xc0, /* 001100001100 */
5803 0x3f, 0xc0, /* 001111111100 */ 5757 0x30, 0xc0, /* 001100001100 */
5804 0x3f, 0xc0, /* 001111111100 */ 5758 0x30, 0xc0, /* 001100001100 */
5805 0x3f, 0xc0, /* 001111111100 */ 5759 0x30, 0xc0, /* 001100001100 */
5806 0x3f, 0xc0, /* 001111111100 */ 5760 0x30, 0xc0, /* 001100001100 */
5807 0x00, 0x00, /* 000000000000 */ 5761 0x00, 0x00, /* 000000000000 */
5808 0x00, 0x00, /* 000000000000 */ 5762 0x00, 0x00, /* 000000000000 */
5809 0x00, 0x00, /* 000000000000 */ 5763 0x00, 0x00, /* 000000000000 */
@@ -5811,24 +5765,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5811 0x00, 0x00, /* 000000000000 */ 5765 0x00, 0x00, /* 000000000000 */
5812 5766
5813 /* 240 0xf0 '.' */ 5767 /* 240 0xf0 '.' */
5814 /* FIXME */
5815 0x00, 0x00, /* 000000000000 */ 5768 0x00, 0x00, /* 000000000000 */
5816 0x00, 0x00, /* 000000000000 */ 5769 0x00, 0x00, /* 000000000000 */
5817 0x00, 0x00, /* 000000000000 */ 5770 0x00, 0x00, /* 000000000000 */
5818 0x00, 0x00, /* 000000000000 */ 5771 0x00, 0x00, /* 000000000000 */
5819 0x00, 0x00, /* 000000000000 */ 5772 0x00, 0x00, /* 000000000000 */
5820 0x3f, 0xc0, /* 001111111100 */ 5773 0x7f, 0xe0, /* 011111111110 */
5821 0x3f, 0xc0, /* 001111111100 */ 5774 0x7f, 0xe0, /* 011111111110 */
5822 0x3f, 0xc0, /* 001111111100 */ 5775 0x00, 0x00, /* 000000000000 */
5823 0x3f, 0xc0, /* 001111111100 */ 5776 0x00, 0x00, /* 000000000000 */
5824 0x3f, 0xc0, /* 001111111100 */ 5777 0x00, 0x00, /* 000000000000 */
5825 0x3f, 0xc0, /* 001111111100 */ 5778 0x7f, 0xe0, /* 011111111110 */
5826 0x3f, 0xc0, /* 001111111100 */ 5779 0x7f, 0xe0, /* 011111111110 */
5827 0x3f, 0xc0, /* 001111111100 */ 5780 0x00, 0x00, /* 000000000000 */
5828 0x3f, 0xc0, /* 001111111100 */ 5781 0x00, 0x00, /* 000000000000 */
5829 0x3f, 0xc0, /* 001111111100 */ 5782 0x00, 0x00, /* 000000000000 */
5830 0x3f, 0xc0, /* 001111111100 */ 5783 0x7f, 0xe0, /* 011111111110 */
5831 0x3f, 0xc0, /* 001111111100 */ 5784 0x7f, 0xe0, /* 011111111110 */
5832 0x00, 0x00, /* 000000000000 */ 5785 0x00, 0x00, /* 000000000000 */
5833 0x00, 0x00, /* 000000000000 */ 5786 0x00, 0x00, /* 000000000000 */
5834 0x00, 0x00, /* 000000000000 */ 5787 0x00, 0x00, /* 000000000000 */
@@ -5860,24 +5813,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5860 0x00, 0x00, /* 000000000000 */ 5813 0x00, 0x00, /* 000000000000 */
5861 5814
5862 /* 242 0xf2 '.' */ 5815 /* 242 0xf2 '.' */
5863 /* FIXME */
5864 0x00, 0x00, /* 000000000000 */ 5816 0x00, 0x00, /* 000000000000 */
5865 0x00, 0x00, /* 000000000000 */ 5817 0x00, 0x00, /* 000000000000 */
5866 0x00, 0x00, /* 000000000000 */ 5818 0x00, 0x00, /* 000000000000 */
5867 0x00, 0x00, /* 000000000000 */ 5819 0x00, 0x00, /* 000000000000 */
5820 0x60, 0x00, /* 011000000000 */
5821 0x38, 0x00, /* 001110000000 */
5822 0x0e, 0x00, /* 000011100000 */
5823 0x03, 0x80, /* 000000111000 */
5824 0x00, 0xe0, /* 000000001110 */
5825 0x00, 0xe0, /* 000000001110 */
5826 0x03, 0x80, /* 000000111000 */
5827 0x0e, 0x00, /* 000011100000 */
5828 0x38, 0x00, /* 001110000000 */
5829 0x60, 0x00, /* 011000000000 */
5868 0x00, 0x00, /* 000000000000 */ 5830 0x00, 0x00, /* 000000000000 */
5869 0x3f, 0xc0, /* 001111111100 */ 5831 0x7f, 0xe0, /* 011111111110 */
5870 0x3f, 0xc0, /* 001111111100 */ 5832 0x7f, 0xe0, /* 011111111110 */
5871 0x3f, 0xc0, /* 001111111100 */
5872 0x3f, 0xc0, /* 001111111100 */
5873 0x3f, 0xc0, /* 001111111100 */
5874 0x3f, 0xc0, /* 001111111100 */
5875 0x3f, 0xc0, /* 001111111100 */
5876 0x3f, 0xc0, /* 001111111100 */
5877 0x3f, 0xc0, /* 001111111100 */
5878 0x3f, 0xc0, /* 001111111100 */
5879 0x3f, 0xc0, /* 001111111100 */
5880 0x3f, 0xc0, /* 001111111100 */
5881 0x00, 0x00, /* 000000000000 */ 5833 0x00, 0x00, /* 000000000000 */
5882 0x00, 0x00, /* 000000000000 */ 5834 0x00, 0x00, /* 000000000000 */
5883 0x00, 0x00, /* 000000000000 */ 5835 0x00, 0x00, /* 000000000000 */
@@ -5885,24 +5837,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5885 0x00, 0x00, /* 000000000000 */ 5837 0x00, 0x00, /* 000000000000 */
5886 5838
5887 /* 243 0xf3 '.' */ 5839 /* 243 0xf3 '.' */
5888 /* FIXME */
5889 0x00, 0x00, /* 000000000000 */ 5840 0x00, 0x00, /* 000000000000 */
5890 0x00, 0x00, /* 000000000000 */ 5841 0x00, 0x00, /* 000000000000 */
5891 0x00, 0x00, /* 000000000000 */ 5842 0x00, 0x00, /* 000000000000 */
5843 0x00, 0x60, /* 000000000110 */
5844 0x01, 0xc0, /* 000000011100 */
5845 0x07, 0x00, /* 000001110000 */
5846 0x1c, 0x00, /* 000111000000 */
5847 0x70, 0x00, /* 011100000000 */
5848 0x70, 0x00, /* 011100000000 */
5849 0x1c, 0x00, /* 000111000000 */
5850 0x07, 0x00, /* 000001110000 */
5851 0x01, 0xc0, /* 000000011100 */
5852 0x00, 0x60, /* 000000000110 */
5892 0x00, 0x00, /* 000000000000 */ 5853 0x00, 0x00, /* 000000000000 */
5854 0x7f, 0xe0, /* 011111111110 */
5855 0x7f, 0xe0, /* 011111111110 */
5893 0x00, 0x00, /* 000000000000 */ 5856 0x00, 0x00, /* 000000000000 */
5894 0x3f, 0xc0, /* 001111111100 */
5895 0x3f, 0xc0, /* 001111111100 */
5896 0x3f, 0xc0, /* 001111111100 */
5897 0x3f, 0xc0, /* 001111111100 */
5898 0x3f, 0xc0, /* 001111111100 */
5899 0x3f, 0xc0, /* 001111111100 */
5900 0x3f, 0xc0, /* 001111111100 */
5901 0x3f, 0xc0, /* 001111111100 */
5902 0x3f, 0xc0, /* 001111111100 */
5903 0x3f, 0xc0, /* 001111111100 */
5904 0x3f, 0xc0, /* 001111111100 */
5905 0x3f, 0xc0, /* 001111111100 */
5906 0x00, 0x00, /* 000000000000 */ 5857 0x00, 0x00, /* 000000000000 */
5907 0x00, 0x00, /* 000000000000 */ 5858 0x00, 0x00, /* 000000000000 */
5908 0x00, 0x00, /* 000000000000 */ 5859 0x00, 0x00, /* 000000000000 */
@@ -5910,54 +5861,52 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5910 0x00, 0x00, /* 000000000000 */ 5861 0x00, 0x00, /* 000000000000 */
5911 5862
5912 /* 244 0xf4 '.' */ 5863 /* 244 0xf4 '.' */
5913 /* FIXME */
5914 0x00, 0x00, /* 000000000000 */
5915 0x00, 0x00, /* 000000000000 */
5916 0x00, 0x00, /* 000000000000 */
5917 0x00, 0x00, /* 000000000000 */
5918 0x00, 0x00, /* 000000000000 */
5919 0x3f, 0xc0, /* 001111111100 */
5920 0x3f, 0xc0, /* 001111111100 */
5921 0x3f, 0xc0, /* 001111111100 */
5922 0x3f, 0xc0, /* 001111111100 */
5923 0x3f, 0xc0, /* 001111111100 */
5924 0x3f, 0xc0, /* 001111111100 */
5925 0x3f, 0xc0, /* 001111111100 */
5926 0x3f, 0xc0, /* 001111111100 */
5927 0x3f, 0xc0, /* 001111111100 */
5928 0x3f, 0xc0, /* 001111111100 */
5929 0x3f, 0xc0, /* 001111111100 */
5930 0x3f, 0xc0, /* 001111111100 */
5931 0x00, 0x00, /* 000000000000 */
5932 0x00, 0x00, /* 000000000000 */
5933 0x00, 0x00, /* 000000000000 */
5934 0x00, 0x00, /* 000000000000 */
5935 0x00, 0x00, /* 000000000000 */ 5864 0x00, 0x00, /* 000000000000 */
5865 0x03, 0x80, /* 000000111000 */
5866 0x07, 0xc0, /* 000001111100 */
5867 0x0c, 0x60, /* 000011000110 */
5868 0x0c, 0x60, /* 000011000110 */
5869 0x0c, 0x00, /* 000011000000 */
5870 0x0c, 0x00, /* 000011000000 */
5871 0x0c, 0x00, /* 000011000000 */
5872 0x0c, 0x00, /* 000011000000 */
5873 0x0c, 0x00, /* 000011000000 */
5874 0x0c, 0x00, /* 000011000000 */
5875 0x0c, 0x00, /* 000011000000 */
5876 0x0c, 0x00, /* 000011000000 */
5877 0x0c, 0x00, /* 000011000000 */
5878 0x0c, 0x00, /* 000011000000 */
5879 0x0c, 0x00, /* 000011000000 */
5880 0x0c, 0x00, /* 000011000000 */
5881 0x0c, 0x00, /* 000011000000 */
5882 0x0c, 0x00, /* 000011000000 */
5883 0x0c, 0x00, /* 000011000000 */
5884 0x0c, 0x00, /* 000011000000 */
5885 0x0c, 0x00, /* 000011000000 */
5936 5886
5937 /* 245 0xf5 '.' */ 5887 /* 245 0xf5 '.' */
5938 /* FIXME */
5939 0x00, 0x00, /* 000000000000 */
5940 0x00, 0x00, /* 000000000000 */
5941 0x00, 0x00, /* 000000000000 */
5942 0x00, 0x00, /* 000000000000 */
5943 0x00, 0x00, /* 000000000000 */
5944 0x3f, 0xc0, /* 001111111100 */
5945 0x3f, 0xc0, /* 001111111100 */
5946 0x3f, 0xc0, /* 001111111100 */
5947 0x3f, 0xc0, /* 001111111100 */
5948 0x3f, 0xc0, /* 001111111100 */
5949 0x3f, 0xc0, /* 001111111100 */
5950 0x3f, 0xc0, /* 001111111100 */
5951 0x3f, 0xc0, /* 001111111100 */
5952 0x3f, 0xc0, /* 001111111100 */
5953 0x3f, 0xc0, /* 001111111100 */
5954 0x3f, 0xc0, /* 001111111100 */
5955 0x3f, 0xc0, /* 001111111100 */
5956 0x00, 0x00, /* 000000000000 */
5957 0x00, 0x00, /* 000000000000 */
5958 0x00, 0x00, /* 000000000000 */
5959 0x00, 0x00, /* 000000000000 */
5960 0x00, 0x00, /* 000000000000 */ 5888 0x00, 0x00, /* 000000000000 */
5889 0x1c, 0x00, /* 000111000000 */
5890 0x3e, 0x00, /* 001111100000 */
5891 0x63, 0x00, /* 011000110000 */
5892 0x63, 0x00, /* 011000110000 */
5893 0x03, 0x00, /* 000000110000 */
5894 0x03, 0x00, /* 000000110000 */
5895 0x03, 0x00, /* 000000110000 */
5896 0x03, 0x00, /* 000000110000 */
5897 0x03, 0x00, /* 000000110000 */
5898 0x03, 0x00, /* 000000110000 */
5899 0x03, 0x00, /* 000000110000 */
5900 0x03, 0x00, /* 000000110000 */
5901 0x03, 0x00, /* 000000110000 */
5902 0x03, 0x00, /* 000000110000 */
5903 0x03, 0x00, /* 000000110000 */
5904 0x03, 0x00, /* 000000110000 */
5905 0x03, 0x00, /* 000000110000 */
5906 0x03, 0x00, /* 000000110000 */
5907 0x03, 0x00, /* 000000110000 */
5908 0x03, 0x00, /* 000000110000 */
5909 0x03, 0x00, /* 000000110000 */
5961 5910
5962 /* 246 0xf6 '.' */ 5911 /* 246 0xf6 '.' */
5963 0x00, 0x00, /* 000000000000 */ 5912 0x00, 0x00, /* 000000000000 */
@@ -5984,24 +5933,23 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
5984 0x00, 0x00, /* 000000000000 */ 5933 0x00, 0x00, /* 000000000000 */
5985 5934
5986 /* 247 0xf7 '.' */ 5935 /* 247 0xf7 '.' */
5987 /* FIXME */
5988 0x00, 0x00, /* 000000000000 */ 5936 0x00, 0x00, /* 000000000000 */
5989 0x00, 0x00, /* 000000000000 */ 5937 0x00, 0x00, /* 000000000000 */
5990 0x00, 0x00, /* 000000000000 */ 5938 0x00, 0x00, /* 000000000000 */
5991 0x00, 0x00, /* 000000000000 */ 5939 0x00, 0x00, /* 000000000000 */
5992 0x00, 0x00, /* 000000000000 */ 5940 0x00, 0x00, /* 000000000000 */
5993 0x3f, 0xc0, /* 001111111100 */ 5941 0x00, 0x00, /* 000000000000 */
5994 0x3f, 0xc0, /* 001111111100 */ 5942 0x00, 0x00, /* 000000000000 */
5995 0x3f, 0xc0, /* 001111111100 */ 5943 0x38, 0x00, /* 001110000000 */
5996 0x3f, 0xc0, /* 001111111100 */ 5944 0x6c, 0x00, /* 011011000000 */
5997 0x3f, 0xc0, /* 001111111100 */ 5945 0x06, 0x30, /* 000001100011 */
5998 0x3f, 0xc0, /* 001111111100 */ 5946 0x03, 0x60, /* 000000110110 */
5999 0x3f, 0xc0, /* 001111111100 */ 5947 0x39, 0xc0, /* 001110011100 */
6000 0x3f, 0xc0, /* 001111111100 */ 5948 0x6c, 0x00, /* 011011000000 */
6001 0x3f, 0xc0, /* 001111111100 */ 5949 0x06, 0x30, /* 000001100011 */
6002 0x3f, 0xc0, /* 001111111100 */ 5950 0x03, 0x60, /* 000000110110 */
6003 0x3f, 0xc0, /* 001111111100 */ 5951 0x01, 0xc0, /* 000000011100 */
6004 0x3f, 0xc0, /* 001111111100 */ 5952 0x00, 0x00, /* 000000000000 */
6005 0x00, 0x00, /* 000000000000 */ 5953 0x00, 0x00, /* 000000000000 */
6006 0x00, 0x00, /* 000000000000 */ 5954 0x00, 0x00, /* 000000000000 */
6007 0x00, 0x00, /* 000000000000 */ 5955 0x00, 0x00, /* 000000000000 */
@@ -6033,44 +5981,31 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
6033 0x00, 0x00, /* 000000000000 */ 5981 0x00, 0x00, /* 000000000000 */
6034 5982
6035 /* 249 0xf9 '.' */ 5983 /* 249 0xf9 '.' */
6036 /* FIXME */
6037 0x00, 0x00, /* 000000000000 */ 5984 0x00, 0x00, /* 000000000000 */
6038 0x00, 0x00, /* 000000000000 */ 5985 0x00, 0x00, /* 000000000000 */
6039 0x00, 0x00, /* 000000000000 */ 5986 0x00, 0x00, /* 000000000000 */
6040 0x00, 0x00, /* 000000000000 */ 5987 0x00, 0x00, /* 000000000000 */
6041 0x00, 0x00, /* 000000000000 */ 5988 0x00, 0x00, /* 000000000000 */
6042 0x3f, 0xc0, /* 001111111100 */
6043 0x3f, 0xc0, /* 001111111100 */
6044 0x3f, 0xc0, /* 001111111100 */
6045 0x3f, 0xc0, /* 001111111100 */
6046 0x3f, 0xc0, /* 001111111100 */
6047 0x3f, 0xc0, /* 001111111100 */
6048 0x3f, 0xc0, /* 001111111100 */
6049 0x3f, 0xc0, /* 001111111100 */
6050 0x3f, 0xc0, /* 001111111100 */
6051 0x3f, 0xc0, /* 001111111100 */
6052 0x3f, 0xc0, /* 001111111100 */
6053 0x3f, 0xc0, /* 001111111100 */
6054 0x00, 0x00, /* 000000000000 */ 5989 0x00, 0x00, /* 000000000000 */
6055 0x00, 0x00, /* 000000000000 */ 5990 0x00, 0x00, /* 000000000000 */
6056 0x00, 0x00, /* 000000000000 */ 5991 0x00, 0x00, /* 000000000000 */
6057 0x00, 0x00, /* 000000000000 */ 5992 0x00, 0x00, /* 000000000000 */
6058 0x00, 0x00, /* 000000000000 */ 5993 0x00, 0x00, /* 000000000000 */
6059
6060 /* 250 0xfa '.' */
6061 0x00, 0x00, /* 000000000000 */
6062 0x00, 0x00, /* 000000000000 */ 5994 0x00, 0x00, /* 000000000000 */
5995 0x1c, 0x00, /* 000111000000 */
5996 0x3e, 0x00, /* 001111100000 */
5997 0x3e, 0x00, /* 001111100000 */
5998 0x3e, 0x00, /* 001111100000 */
5999 0x1c, 0x00, /* 000111000000 */
6063 0x00, 0x00, /* 000000000000 */ 6000 0x00, 0x00, /* 000000000000 */
6064 0x00, 0x00, /* 000000000000 */ 6001 0x00, 0x00, /* 000000000000 */
6065 0x00, 0x00, /* 000000000000 */ 6002 0x00, 0x00, /* 000000000000 */
6066 0x00, 0x00, /* 000000000000 */ 6003 0x00, 0x00, /* 000000000000 */
6067 0x00, 0x00, /* 000000000000 */ 6004 0x00, 0x00, /* 000000000000 */
6068 0x00, 0x00, /* 000000000000 */ 6005 0x00, 0x00, /* 000000000000 */
6006
6007 /* 250 0xfa '.' */
6069 0x00, 0x00, /* 000000000000 */ 6008 0x00, 0x00, /* 000000000000 */
6070 0x06, 0x00, /* 000001100000 */
6071 0x0f, 0x00, /* 000011110000 */
6072 0x0f, 0x00, /* 000011110000 */
6073 0x06, 0x00, /* 000001100000 */
6074 0x00, 0x00, /* 000000000000 */ 6009 0x00, 0x00, /* 000000000000 */
6075 0x00, 0x00, /* 000000000000 */ 6010 0x00, 0x00, /* 000000000000 */
6076 0x00, 0x00, /* 000000000000 */ 6011 0x00, 0x00, /* 000000000000 */
@@ -6080,51 +6015,61 @@ static unsigned char fontdata_sun12x22[FONTDATAMAX] = {
6080 0x00, 0x00, /* 000000000000 */ 6015 0x00, 0x00, /* 000000000000 */
6081 0x00, 0x00, /* 000000000000 */ 6016 0x00, 0x00, /* 000000000000 */
6082 0x00, 0x00, /* 000000000000 */ 6017 0x00, 0x00, /* 000000000000 */
6083
6084 /* 251 0xfb '.' */
6085 /* FIXME */
6086 0x00, 0x00, /* 000000000000 */ 6018 0x00, 0x00, /* 000000000000 */
6087 0x00, 0x00, /* 000000000000 */ 6019 0x00, 0x00, /* 000000000000 */
6020 0x18, 0x00, /* 000110000000 */
6021 0x3c, 0x00, /* 001111000000 */
6022 0x3c, 0x00, /* 001111000000 */
6023 0x18, 0x00, /* 000110000000 */
6088 0x00, 0x00, /* 000000000000 */ 6024 0x00, 0x00, /* 000000000000 */
6089 0x00, 0x00, /* 000000000000 */ 6025 0x00, 0x00, /* 000000000000 */
6090 0x00, 0x00, /* 000000000000 */ 6026 0x00, 0x00, /* 000000000000 */
6091 0x3f, 0xc0, /* 001111111100 */
6092 0x3f, 0xc0, /* 001111111100 */
6093 0x3f, 0xc0, /* 001111111100 */
6094 0x3f, 0xc0, /* 001111111100 */
6095 0x3f, 0xc0, /* 001111111100 */
6096 0x3f, 0xc0, /* 001111111100 */
6097 0x3f, 0xc0, /* 001111111100 */
6098 0x3f, 0xc0, /* 001111111100 */
6099 0x3f, 0xc0, /* 001111111100 */
6100 0x3f, 0xc0, /* 001111111100 */
6101 0x3f, 0xc0, /* 001111111100 */
6102 0x3f, 0xc0, /* 001111111100 */
6103 0x00, 0x00, /* 000000000000 */ 6027 0x00, 0x00, /* 000000000000 */
6104 0x00, 0x00, /* 000000000000 */ 6028 0x00, 0x00, /* 000000000000 */
6105 0x00, 0x00, /* 000000000000 */ 6029 0x00, 0x00, /* 000000000000 */
6030
6031 /* 251 0xfb '.' */
6106 0x00, 0x00, /* 000000000000 */ 6032 0x00, 0x00, /* 000000000000 */
6033 0x07, 0xe0, /* 000001111110 */
6034 0x06, 0x00, /* 000001100000 */
6035 0x06, 0x00, /* 000001100000 */
6036 0x06, 0x00, /* 000001100000 */
6037 0x06, 0x00, /* 000001100000 */
6038 0x06, 0x00, /* 000001100000 */
6039 0x06, 0x00, /* 000001100000 */
6040 0x06, 0x00, /* 000001100000 */
6041 0x06, 0x00, /* 000001100000 */
6042 0x06, 0x00, /* 000001100000 */
6043 0x06, 0x00, /* 000001100000 */
6044 0x06, 0x00, /* 000001100000 */
6045 0x06, 0x00, /* 000001100000 */
6046 0xc6, 0x00, /* 110001100000 */
6047 0x66, 0x00, /* 011001100000 */
6048 0x36, 0x00, /* 001101100000 */
6049 0x1e, 0x00, /* 000111100000 */
6050 0x0e, 0x00, /* 000011100000 */
6051 0x06, 0x00, /* 000001100000 */
6052 0x02, 0x00, /* 000000100000 */
6107 0x00, 0x00, /* 000000000000 */ 6053 0x00, 0x00, /* 000000000000 */
6108 6054
6109 /* 252 0xfc '.' */ 6055 /* 252 0xfc '.' */
6110 /* FIXME */ 6056 0x00, 0x00, /* 000000000000 */
6057 0x00, 0x00, /* 000000000000 */
6058 0x13, 0x80, /* 000100111000 */
6059 0x3d, 0xc0, /* 001111011100 */
6060 0x18, 0xc0, /* 000110001100 */
6061 0x18, 0xc0, /* 000110001100 */
6062 0x18, 0xc0, /* 000110001100 */
6063 0x18, 0xc0, /* 000110001100 */
6064 0x3d, 0xe0, /* 001111011110 */
6065 0x00, 0x00, /* 000000000000 */
6066 0x00, 0x00, /* 000000000000 */
6067 0x00, 0x00, /* 000000000000 */
6111 0x00, 0x00, /* 000000000000 */ 6068 0x00, 0x00, /* 000000000000 */
6112 0x00, 0x00, /* 000000000000 */ 6069 0x00, 0x00, /* 000000000000 */
6113 0x00, 0x00, /* 000000000000 */ 6070 0x00, 0x00, /* 000000000000 */
6114 0x00, 0x00, /* 000000000000 */ 6071 0x00, 0x00, /* 000000000000 */
6115 0x00, 0x00, /* 000000000000 */ 6072 0x00, 0x00, /* 000000000000 */
6116 0x3f, 0xc0, /* 001111111100 */
6117 0x3f, 0xc0, /* 001111111100 */
6118 0x3f, 0xc0, /* 001111111100 */
6119 0x3f, 0xc0, /* 001111111100 */
6120 0x3f, 0xc0, /* 001111111100 */
6121 0x3f, 0xc0, /* 001111111100 */
6122 0x3f, 0xc0, /* 001111111100 */
6123 0x3f, 0xc0, /* 001111111100 */
6124 0x3f, 0xc0, /* 001111111100 */
6125 0x3f, 0xc0, /* 001111111100 */
6126 0x3f, 0xc0, /* 001111111100 */
6127 0x3f, 0xc0, /* 001111111100 */
6128 0x00, 0x00, /* 000000000000 */ 6073 0x00, 0x00, /* 000000000000 */
6129 0x00, 0x00, /* 000000000000 */ 6074 0x00, 0x00, /* 000000000000 */
6130 0x00, 0x00, /* 000000000000 */ 6075 0x00, 0x00, /* 000000000000 */
diff --git a/drivers/video/console/fonts.c b/drivers/video/console/fonts.c
index 465d678230ae..e79b29702649 100644
--- a/drivers/video/console/fonts.c
+++ b/drivers/video/console/fonts.c
@@ -36,6 +36,10 @@ static struct font_desc *fonts[] = {
36#undef NO_FONTS 36#undef NO_FONTS
37 &font_vga_6x11, 37 &font_vga_6x11,
38#endif 38#endif
39#ifdef CONFIG_FONT_7x14
40#undef NO_FONTS
41 &font_7x14,
42#endif
39#ifdef CONFIG_FONT_SUN8x16 43#ifdef CONFIG_FONT_SUN8x16
40#undef NO_FONTS 44#undef NO_FONTS
41 &font_sun_8x16, 45 &font_sun_8x16,
@@ -44,6 +48,10 @@ static struct font_desc *fonts[] = {
44#undef NO_FONTS 48#undef NO_FONTS
45 &font_sun_12x22, 49 &font_sun_12x22,
46#endif 50#endif
51#ifdef CONFIG_FONT_10x18
52#undef NO_FONTS
53 &font_10x18,
54#endif
47#ifdef CONFIG_FONT_ACORN_8x8 55#ifdef CONFIG_FONT_ACORN_8x8
48#undef NO_FONTS 56#undef NO_FONTS
49 &font_acorn_8x8, 57 &font_acorn_8x8,
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
index bcf59b28a14f..d27fa91e5886 100644
--- a/drivers/video/console/vgacon.c
+++ b/drivers/video/console/vgacon.c
@@ -95,6 +95,7 @@ static unsigned long vgacon_uni_pagedir[2];
95/* Description of the hardware situation */ 95/* Description of the hardware situation */
96static unsigned long vga_vram_base; /* Base of video memory */ 96static unsigned long vga_vram_base; /* Base of video memory */
97static unsigned long vga_vram_end; /* End of video memory */ 97static unsigned long vga_vram_end; /* End of video memory */
98static int vga_vram_size; /* Size of video memory */
98static u16 vga_video_port_reg; /* Video register select port */ 99static u16 vga_video_port_reg; /* Video register select port */
99static u16 vga_video_port_val; /* Video register value port */ 100static u16 vga_video_port_val; /* Video register value port */
100static unsigned int vga_video_num_columns; /* Number of text columns */ 101static unsigned int vga_video_num_columns; /* Number of text columns */
@@ -288,6 +289,7 @@ static const char __init *vgacon_startup(void)
288 289
289 vga_vram_base = VGA_MAP_MEM(vga_vram_base); 290 vga_vram_base = VGA_MAP_MEM(vga_vram_base);
290 vga_vram_end = VGA_MAP_MEM(vga_vram_end); 291 vga_vram_end = VGA_MAP_MEM(vga_vram_end);
292 vga_vram_size = vga_vram_end - vga_vram_base;
291 293
292 /* 294 /*
293 * Find out if there is a graphics card present. 295 * Find out if there is a graphics card present.
@@ -504,9 +506,13 @@ static int vgacon_switch(struct vc_data *c)
504 */ 506 */
505 vga_video_num_columns = c->vc_cols; 507 vga_video_num_columns = c->vc_cols;
506 vga_video_num_lines = c->vc_rows; 508 vga_video_num_lines = c->vc_rows;
509
510 /* We can only copy out the size of the video buffer here,
511 * otherwise we get into VGA BIOS */
512
507 if (!vga_is_gfx) 513 if (!vga_is_gfx)
508 scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf, 514 scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf,
509 c->vc_screenbuf_size); 515 c->vc_screenbuf_size > vga_vram_size ? vga_vram_size : c->vc_screenbuf_size);
510 return 0; /* Redrawing not needed */ 516 return 0; /* Redrawing not needed */
511} 517}
512 518
@@ -961,7 +967,6 @@ static int vgacon_scrolldelta(struct vc_data *c, int lines)
961 if (!lines) /* Turn scrollback off */ 967 if (!lines) /* Turn scrollback off */
962 c->vc_visible_origin = c->vc_origin; 968 c->vc_visible_origin = c->vc_origin;
963 else { 969 else {
964 int vram_size = vga_vram_end - vga_vram_base;
965 int margin = c->vc_size_row * 4; 970 int margin = c->vc_size_row * 4;
966 int ul, we, p, st; 971 int ul, we, p, st;
967 972
@@ -971,7 +976,7 @@ static int vgacon_scrolldelta(struct vc_data *c, int lines)
971 we = vga_rolled_over + c->vc_size_row; 976 we = vga_rolled_over + c->vc_size_row;
972 } else { 977 } else {
973 ul = 0; 978 ul = 0;
974 we = vram_size; 979 we = vga_vram_size;
975 } 980 }
976 p = (c->vc_visible_origin - vga_vram_base - ul + we) % we + 981 p = (c->vc_visible_origin - vga_vram_base - ul + we) % we +
977 lines * c->vc_size_row; 982 lines * c->vc_size_row;
@@ -1012,9 +1017,13 @@ static void vgacon_save_screen(struct vc_data *c)
1012 c->vc_x = ORIG_X; 1017 c->vc_x = ORIG_X;
1013 c->vc_y = ORIG_Y; 1018 c->vc_y = ORIG_Y;
1014 } 1019 }
1020
1021 /* We can't copy in more then the size of the video buffer,
1022 * or we'll be copying in VGA BIOS */
1023
1015 if (!vga_is_gfx) 1024 if (!vga_is_gfx)
1016 scr_memcpyw((u16 *) c->vc_screenbuf, (u16 *) c->vc_origin, 1025 scr_memcpyw((u16 *) c->vc_screenbuf, (u16 *) c->vc_origin,
1017 c->vc_screenbuf_size); 1026 c->vc_screenbuf_size > vga_vram_size ? vga_vram_size : c->vc_screenbuf_size);
1018} 1027}
1019 1028
1020static int vgacon_scroll(struct vc_data *c, int t, int b, int dir, 1029static int vgacon_scroll(struct vc_data *c, int t, int b, int dir,
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index 8cef020d1801..2222de6ad844 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -76,70 +76,22 @@ int fb_get_color_depth(struct fb_var_screeninfo *var)
76EXPORT_SYMBOL(fb_get_color_depth); 76EXPORT_SYMBOL(fb_get_color_depth);
77 77
78/* 78/*
79 * Drawing helpers. 79 * Data padding functions.
80 */ 80 */
81void fb_iomove_buf_aligned(struct fb_info *info, struct fb_pixmap *buf, 81void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height)
82 u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch,
83 u32 height)
84{ 82{
85 int i; 83 int i;
86 84
87 for (i = height; i--; ) { 85 for (i = height; i--; ) {
88 buf->outbuf(info, dst, src, s_pitch); 86 memcpy(dst, src, s_pitch);
89 src += s_pitch; 87 src += s_pitch;
90 dst += d_pitch; 88 dst += d_pitch;
91 } 89 }
92} 90}
91EXPORT_SYMBOL(fb_pad_aligned_buffer);
93 92
94void fb_sysmove_buf_aligned(struct fb_info *info, struct fb_pixmap *buf, 93void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 idx, u32 height,
95 u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, 94 u32 shift_high, u32 shift_low, u32 mod)
96 u32 height)
97{
98 int i, j;
99
100 for (i = height; i--; ) {
101 for (j = 0; j < s_pitch; j++)
102 dst[j] = src[j];
103 src += s_pitch;
104 dst += d_pitch;
105 }
106}
107
108void fb_iomove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
109 u8 *dst, u32 d_pitch, u8 *src, u32 idx,
110 u32 height, u32 shift_high, u32 shift_low,
111 u32 mod)
112{
113 u8 mask = (u8) (0xfff << shift_high), tmp;
114 int i, j;
115
116 for (i = height; i--; ) {
117 for (j = 0; j < idx; j++) {
118 tmp = buf->inbuf(info, dst+j);
119 tmp &= mask;
120 tmp |= *src >> shift_low;
121 buf->outbuf(info, dst+j, &tmp, 1);
122 tmp = *src << shift_high;
123 buf->outbuf(info, dst+j+1, &tmp, 1);
124 src++;
125 }
126 tmp = buf->inbuf(info, dst+idx);
127 tmp &= mask;
128 tmp |= *src >> shift_low;
129 buf->outbuf(info, dst+idx, &tmp, 1);
130 if (shift_high < mod) {
131 tmp = *src << shift_high;
132 buf->outbuf(info, dst+idx+1, &tmp, 1);
133 }
134 src++;
135 dst += d_pitch;
136 }
137}
138
139void fb_sysmove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
140 u8 *dst, u32 d_pitch, u8 *src, u32 idx,
141 u32 height, u32 shift_high, u32 shift_low,
142 u32 mod)
143{ 95{
144 u8 mask = (u8) (0xfff << shift_high), tmp; 96 u8 mask = (u8) (0xfff << shift_high), tmp;
145 int i, j; 97 int i, j;
@@ -166,6 +118,7 @@ void fb_sysmove_buf_unaligned(struct fb_info *info, struct fb_pixmap *buf,
166 dst += d_pitch; 118 dst += d_pitch;
167 } 119 }
168} 120}
121EXPORT_SYMBOL(fb_pad_unaligned_buffer);
169 122
170/* 123/*
171 * we need to lock this section since fb_cursor 124 * we need to lock this section since fb_cursor
@@ -1081,7 +1034,7 @@ register_framebuffer(struct fb_info *fb_info)
1081 fb_info->pixmap.size = FBPIXMAPSIZE; 1034 fb_info->pixmap.size = FBPIXMAPSIZE;
1082 fb_info->pixmap.buf_align = 1; 1035 fb_info->pixmap.buf_align = 1;
1083 fb_info->pixmap.scan_align = 1; 1036 fb_info->pixmap.scan_align = 1;
1084 fb_info->pixmap.access_align = 4; 1037 fb_info->pixmap.access_align = 32;
1085 fb_info->pixmap.flags = FB_PIXMAP_DEFAULT; 1038 fb_info->pixmap.flags = FB_PIXMAP_DEFAULT;
1086 } 1039 }
1087 } 1040 }
@@ -1357,10 +1310,6 @@ EXPORT_SYMBOL(fb_set_var);
1357EXPORT_SYMBOL(fb_blank); 1310EXPORT_SYMBOL(fb_blank);
1358EXPORT_SYMBOL(fb_pan_display); 1311EXPORT_SYMBOL(fb_pan_display);
1359EXPORT_SYMBOL(fb_get_buffer_offset); 1312EXPORT_SYMBOL(fb_get_buffer_offset);
1360EXPORT_SYMBOL(fb_iomove_buf_unaligned);
1361EXPORT_SYMBOL(fb_iomove_buf_aligned);
1362EXPORT_SYMBOL(fb_sysmove_buf_unaligned);
1363EXPORT_SYMBOL(fb_sysmove_buf_aligned);
1364EXPORT_SYMBOL(fb_set_suspend); 1313EXPORT_SYMBOL(fb_set_suspend);
1365EXPORT_SYMBOL(fb_register_client); 1314EXPORT_SYMBOL(fb_register_client);
1366EXPORT_SYMBOL(fb_unregister_client); 1315EXPORT_SYMBOL(fb_unregister_client);
diff --git a/drivers/video/i810/i810_main.c b/drivers/video/i810/i810_main.c
index a9a618f2aa6a..7513fb9b19cf 100644
--- a/drivers/video/i810/i810_main.c
+++ b/drivers/video/i810/i810_main.c
@@ -1885,6 +1885,7 @@ static int __devinit i810fb_init_pci (struct pci_dev *dev,
1885 memset(info->pixmap.addr, 0, 8*1024); 1885 memset(info->pixmap.addr, 0, 8*1024);
1886 info->pixmap.size = 8*1024; 1886 info->pixmap.size = 8*1024;
1887 info->pixmap.buf_align = 8; 1887 info->pixmap.buf_align = 8;
1888 info->pixmap.access_align = 32;
1888 info->pixmap.flags = FB_PIXMAP_SYSTEM; 1889 info->pixmap.flags = FB_PIXMAP_SYSTEM;
1889 1890
1890 if ((err = i810_allocate_pci_resource(par, entry))) { 1891 if ((err = i810_allocate_pci_resource(par, entry))) {
diff --git a/drivers/video/intelfb/intelfbdrv.c b/drivers/video/intelfb/intelfbdrv.c
index 25f9a9a65c24..298bc9cd99e7 100644
--- a/drivers/video/intelfb/intelfbdrv.c
+++ b/drivers/video/intelfb/intelfbdrv.c
@@ -214,7 +214,7 @@ static struct fb_ops intel_fb_ops = {
214 214
215/* PCI driver module table */ 215/* PCI driver module table */
216static struct pci_driver intelfb_driver = { 216static struct pci_driver intelfb_driver = {
217 .name = "Intel(R) " SUPPORTED_CHIPSETS " Framebuffer Driver", 217 .name = "intelfb",
218 .id_table = intelfb_pci_table, 218 .id_table = intelfb_pci_table,
219 .probe = intelfb_pci_register, 219 .probe = intelfb_pci_register,
220 .remove = __devexit_p(intelfb_pci_unregister) 220 .remove = __devexit_p(intelfb_pci_unregister)
@@ -238,12 +238,15 @@ static int noregister = 0;
238static int probeonly = 0; 238static int probeonly = 0;
239static int idonly = 0; 239static int idonly = 0;
240static int bailearly = 0; 240static int bailearly = 0;
241static int voffset = 48;
241static char *mode = NULL; 242static char *mode = NULL;
242 243
243module_param(accel, bool, S_IRUGO); 244module_param(accel, bool, S_IRUGO);
244MODULE_PARM_DESC(accel, "Enable console acceleration"); 245MODULE_PARM_DESC(accel, "Enable console acceleration");
245module_param(vram, int, S_IRUGO); 246module_param(vram, int, S_IRUGO);
246MODULE_PARM_DESC(vram, "System RAM to allocate to framebuffer in MiB"); 247MODULE_PARM_DESC(vram, "System RAM to allocate to framebuffer in MiB");
248module_param(voffset, int, S_IRUGO);
249MODULE_PARM_DESC(voffset, "Offset of framebuffer in MiB");
247module_param(hwcursor, bool, S_IRUGO); 250module_param(hwcursor, bool, S_IRUGO);
248MODULE_PARM_DESC(hwcursor, "Enable HW cursor"); 251MODULE_PARM_DESC(hwcursor, "Enable HW cursor");
249module_param(mtrr, bool, S_IRUGO); 252module_param(mtrr, bool, S_IRUGO);
@@ -503,6 +506,7 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
503 struct agp_bridge_data *bridge; 506 struct agp_bridge_data *bridge;
504 int aperture_bar = 0; 507 int aperture_bar = 0;
505 int mmio_bar = 1; 508 int mmio_bar = 1;
509 int offset;
506 510
507 DBG_MSG("intelfb_pci_register\n"); 511 DBG_MSG("intelfb_pci_register\n");
508 512
@@ -659,17 +663,21 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
659 return -ENODEV; 663 return -ENODEV;
660 } 664 }
661 665
666 if (MB(voffset) < stolen_size)
667 offset = (stolen_size >> 12);
668 else
669 offset = ROUND_UP_TO_PAGE(MB(voffset))/GTT_PAGE_SIZE;
670
662 /* set the mem offsets - set them after the already used pages */ 671 /* set the mem offsets - set them after the already used pages */
663 if (dinfo->accel) { 672 if (dinfo->accel) {
664 dinfo->ring.offset = (stolen_size >> 12) 673 dinfo->ring.offset = offset + gtt_info.current_memory;
665 + gtt_info.current_memory;
666 } 674 }
667 if (dinfo->hwcursor) { 675 if (dinfo->hwcursor) {
668 dinfo->cursor.offset = (stolen_size >> 12) + 676 dinfo->cursor.offset = offset +
669 + gtt_info.current_memory + (dinfo->ring.size >> 12); 677 + gtt_info.current_memory + (dinfo->ring.size >> 12);
670 } 678 }
671 if (dinfo->fbmem_gart) { 679 if (dinfo->fbmem_gart) {
672 dinfo->fb.offset = (stolen_size >> 12) + 680 dinfo->fb.offset = offset +
673 + gtt_info.current_memory + (dinfo->ring.size >> 12) 681 + gtt_info.current_memory + (dinfo->ring.size >> 12)
674 + (dinfo->cursor.size >> 12); 682 + (dinfo->cursor.size >> 12);
675 } 683 }
@@ -1083,6 +1091,7 @@ intelfb_set_fbinfo(struct intelfb_info *dinfo)
1083 1091
1084 info->pixmap.size = 64*1024; 1092 info->pixmap.size = 64*1024;
1085 info->pixmap.buf_align = 8; 1093 info->pixmap.buf_align = 8;
1094 info->pixmap.access_align = 32;
1086 info->pixmap.flags = FB_PIXMAP_SYSTEM; 1095 info->pixmap.flags = FB_PIXMAP_SYSTEM;
1087 1096
1088 if (intelfb_init_var(dinfo)) 1097 if (intelfb_init_var(dinfo))
@@ -1293,7 +1302,7 @@ intelfb_set_par(struct fb_info *info)
1293 1302
1294 intelfb_blank(FB_BLANK_POWERDOWN, info); 1303 intelfb_blank(FB_BLANK_POWERDOWN, info);
1295 1304
1296 if (dinfo->accel) 1305 if (ACCEL(dinfo, info))
1297 intelfbhw_2d_stop(dinfo); 1306 intelfbhw_2d_stop(dinfo);
1298 1307
1299 memcpy(hw, &dinfo->save_state, sizeof(*hw)); 1308 memcpy(hw, &dinfo->save_state, sizeof(*hw));
@@ -1309,7 +1318,7 @@ intelfb_set_par(struct fb_info *info)
1309 1318
1310 update_dinfo(dinfo, &info->var); 1319 update_dinfo(dinfo, &info->var);
1311 1320
1312 if (dinfo->accel) 1321 if (ACCEL(dinfo, info))
1313 intelfbhw_2d_start(dinfo); 1322 intelfbhw_2d_start(dinfo);
1314 1323
1315 intelfb_pan_display(&info->var, info); 1324 intelfb_pan_display(&info->var, info);
diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c
index 47733f58153b..b2e6b2407869 100644
--- a/drivers/video/nvidia/nvidia.c
+++ b/drivers/video/nvidia/nvidia.c
@@ -516,9 +516,9 @@ static struct backlight_controller nvidia_backlight_controller = {
516static void nvidiafb_load_cursor_image(struct nvidia_par *par, u8 * data8, 516static void nvidiafb_load_cursor_image(struct nvidia_par *par, u8 * data8,
517 u16 bg, u16 fg, u32 w, u32 h) 517 u16 bg, u16 fg, u32 w, u32 h)
518{ 518{
519 u32 *data = (u32 *) data8;
519 int i, j, k = 0; 520 int i, j, k = 0;
520 u32 b, tmp; 521 u32 b, tmp;
521 u32 *data = (u32 *) data8;
522 522
523 w = (w + 1) & ~1; 523 w = (w + 1) & ~1;
524 524
@@ -890,11 +890,11 @@ static int nvidiafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
890{ 890{
891 struct nvidia_par *par = info->par; 891 struct nvidia_par *par = info->par;
892 u8 data[MAX_CURS * MAX_CURS / 8]; 892 u8 data[MAX_CURS * MAX_CURS / 8];
893 u16 fg, bg;
894 int i, set = cursor->set; 893 int i, set = cursor->set;
894 u16 fg, bg;
895 895
896 if (cursor->image.width > MAX_CURS || cursor->image.height > MAX_CURS) 896 if (cursor->image.width > MAX_CURS || cursor->image.height > MAX_CURS)
897 return soft_cursor(info, cursor); 897 return -ENXIO;
898 898
899 NVShowHideCursor(par, 0); 899 NVShowHideCursor(par, 0);
900 900
@@ -931,21 +931,18 @@ static int nvidiafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
931 if (src) { 931 if (src) {
932 switch (cursor->rop) { 932 switch (cursor->rop) {
933 case ROP_XOR: 933 case ROP_XOR:
934 for (i = 0; i < s_pitch * cursor->image.height; 934 for (i = 0; i < s_pitch * cursor->image.height; i++)
935 i++)
936 src[i] = dat[i] ^ msk[i]; 935 src[i] = dat[i] ^ msk[i];
937 break; 936 break;
938 case ROP_COPY: 937 case ROP_COPY:
939 default: 938 default:
940 for (i = 0; i < s_pitch * cursor->image.height; 939 for (i = 0; i < s_pitch * cursor->image.height; i++)
941 i++)
942 src[i] = dat[i] & msk[i]; 940 src[i] = dat[i] & msk[i];
943 break; 941 break;
944 } 942 }
945 943
946 fb_sysmove_buf_aligned(info, &info->pixmap, data, 944 fb_pad_aligned_buffer(data, d_pitch, src, s_pitch,
947 d_pitch, src, s_pitch, 945 cursor->image.height);
948 cursor->image.height);
949 946
950 bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) | 947 bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
951 ((info->cmap.green[bg_idx] & 0xf8) << 2) | 948 ((info->cmap.green[bg_idx] & 0xf8) << 2) |
@@ -1348,6 +1345,7 @@ static int __devinit nvidia_set_fbinfo(struct fb_info *info)
1348 1345
1349 info->pixmap.scan_align = 4; 1346 info->pixmap.scan_align = 4;
1350 info->pixmap.buf_align = 4; 1347 info->pixmap.buf_align = 4;
1348 info->pixmap.access_align = 32;
1351 info->pixmap.size = 8 * 1024; 1349 info->pixmap.size = 8 * 1024;
1352 info->pixmap.flags = FB_PIXMAP_SYSTEM; 1350 info->pixmap.flags = FB_PIXMAP_SYSTEM;
1353 1351
diff --git a/drivers/video/pm3fb.c b/drivers/video/pm3fb.c
index 8e024aad1b57..e0dad948467b 100644
--- a/drivers/video/pm3fb.c
+++ b/drivers/video/pm3fb.c
@@ -5,7 +5,7 @@
5 * Based on code written by: 5 * Based on code written by:
6 * Sven Luther, <luther@dpt-info.u-strasbg.fr> 6 * Sven Luther, <luther@dpt-info.u-strasbg.fr>
7 * Alan Hourihane, <alanh@fairlite.demon.co.uk> 7 * Alan Hourihane, <alanh@fairlite.demon.co.uk>
8 * Russel King, <rmk@arm.linux.org.uk> 8 * Russell King, <rmk@arm.linux.org.uk>
9 * Based on linux/drivers/video/skeletonfb.c: 9 * Based on linux/drivers/video/skeletonfb.c:
10 * Copyright (C) 1997 Geert Uytterhoeven 10 * Copyright (C) 1997 Geert Uytterhoeven
11 * Based on linux/driver/video/pm2fb.c: 11 * Based on linux/driver/video/pm2fb.c:
diff --git a/drivers/video/riva/fbdev.c b/drivers/video/riva/fbdev.c
index b0c886de0404..6a9e183be41b 100644
--- a/drivers/video/riva/fbdev.c
+++ b/drivers/video/riva/fbdev.c
@@ -1582,12 +1582,11 @@ static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
1582{ 1582{
1583 struct riva_par *par = (struct riva_par *) info->par; 1583 struct riva_par *par = (struct riva_par *) info->par;
1584 u8 data[MAX_CURS * MAX_CURS/8]; 1584 u8 data[MAX_CURS * MAX_CURS/8];
1585 u16 fg, bg;
1586 int i, set = cursor->set; 1585 int i, set = cursor->set;
1586 u16 fg, bg;
1587 1587
1588 if (cursor->image.width > MAX_CURS || 1588 if (cursor->image.width > MAX_CURS || cursor->image.height > MAX_CURS)
1589 cursor->image.height > MAX_CURS) 1589 return -ENXIO;
1590 return soft_cursor(info, cursor);
1591 1590
1592 par->riva.ShowHideCursor(&par->riva, 0); 1591 par->riva.ShowHideCursor(&par->riva, 0);
1593 1592
@@ -1625,21 +1624,18 @@ static int rivafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
1625 if (src) { 1624 if (src) {
1626 switch (cursor->rop) { 1625 switch (cursor->rop) {
1627 case ROP_XOR: 1626 case ROP_XOR:
1628 for (i = 0; i < s_pitch * cursor->image.height; 1627 for (i = 0; i < s_pitch * cursor->image.height; i++)
1629 i++)
1630 src[i] = dat[i] ^ msk[i]; 1628 src[i] = dat[i] ^ msk[i];
1631 break; 1629 break;
1632 case ROP_COPY: 1630 case ROP_COPY:
1633 default: 1631 default:
1634 for (i = 0; i < s_pitch * cursor->image.height; 1632 for (i = 0; i < s_pitch * cursor->image.height; i++)
1635 i++)
1636 src[i] = dat[i] & msk[i]; 1633 src[i] = dat[i] & msk[i];
1637 break; 1634 break;
1638 } 1635 }
1639 1636
1640 fb_sysmove_buf_aligned(info, &info->pixmap, data, 1637 fb_pad_aligned_buffer(data, d_pitch, src, s_pitch,
1641 d_pitch, src, s_pitch, 1638 cursor->image.height);
1642 cursor->image.height);
1643 1639
1644 bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) | 1640 bg = ((info->cmap.red[bg_idx] & 0xf8) << 7) |
1645 ((info->cmap.green[bg_idx] & 0xf8) << 2) | 1641 ((info->cmap.green[bg_idx] & 0xf8) << 2) |
@@ -1727,6 +1723,7 @@ static int __devinit riva_set_fbinfo(struct fb_info *info)
1727 1723
1728 info->pixmap.size = 8 * 1024; 1724 info->pixmap.size = 8 * 1024;
1729 info->pixmap.buf_align = 4; 1725 info->pixmap.buf_align = 4;
1726 info->pixmap.access_align = 32;
1730 info->pixmap.flags = FB_PIXMAP_SYSTEM; 1727 info->pixmap.flags = FB_PIXMAP_SYSTEM;
1731 info->var.yres_virtual = -1; 1728 info->var.yres_virtual = -1;
1732 NVTRACE_LEAVE(); 1729 NVTRACE_LEAVE();
diff --git a/drivers/video/s1d13xxxfb.c b/drivers/video/s1d13xxxfb.c
index b637c389e4f4..789de13f461f 100644
--- a/drivers/video/s1d13xxxfb.c
+++ b/drivers/video/s1d13xxxfb.c
@@ -493,7 +493,7 @@ s1d13xxxfb_fetch_hw_state(struct fb_info *info)
493} 493}
494 494
495 495
496static int __devexit 496static int
497s1d13xxxfb_remove(struct device *dev) 497s1d13xxxfb_remove(struct device *dev)
498{ 498{
499 struct fb_info *info = dev_get_drvdata(dev); 499 struct fb_info *info = dev_get_drvdata(dev);
diff --git a/drivers/video/savage/savagefb_driver.c b/drivers/video/savage/savagefb_driver.c
index 03d74e8ee067..8fadcdae6f42 100644
--- a/drivers/video/savage/savagefb_driver.c
+++ b/drivers/video/savage/savagefb_driver.c
@@ -1897,7 +1897,7 @@ static int __devinit savage_init_fb_info (struct fb_info *info,
1897 info->pixmap.size = 8*1024; 1897 info->pixmap.size = 8*1024;
1898 info->pixmap.scan_align = 4; 1898 info->pixmap.scan_align = 4;
1899 info->pixmap.buf_align = 4; 1899 info->pixmap.buf_align = 4;
1900 info->pixmap.access_align = 4; 1900 info->pixmap.access_align = 32;
1901 1901
1902 fb_alloc_cmap (&info->cmap, NR_PALETTE, 0); 1902 fb_alloc_cmap (&info->cmap, NR_PALETTE, 0);
1903 info->flags |= FBINFO_HWACCEL_COPYAREA | 1903 info->flags |= FBINFO_HWACCEL_COPYAREA |
diff --git a/drivers/video/softcursor.c b/drivers/video/softcursor.c
index 13a4511539a1..229c4bc35079 100644
--- a/drivers/video/softcursor.c
+++ b/drivers/video/softcursor.c
@@ -58,17 +58,10 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor)
58 } else 58 } else
59 memcpy(src, image->data, dsize); 59 memcpy(src, image->data, dsize);
60 60
61 if (info->pixmap.outbuf) 61 fb_pad_aligned_buffer(dst, d_pitch, src, s_pitch, image->height);
62 fb_iomove_buf_aligned(info, &info->pixmap, dst, d_pitch, src,
63 s_pitch, image->height);
64 else
65 fb_sysmove_buf_aligned(info, &info->pixmap, dst, d_pitch, src,
66 s_pitch, image->height);
67
68 image->data = dst; 62 image->data = dst;
69 info->fbops->fb_imageblit(info, image); 63 info->fbops->fb_imageblit(info, image);
70 kfree(src); 64 kfree(src);
71
72 return 0; 65 return 0;
73} 66}
74 67
diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c
index 3027841f9c24..f3069b01e248 100644
--- a/drivers/video/vesafb.c
+++ b/drivers/video/vesafb.c
@@ -271,7 +271,7 @@ static int __init vesafb_probe(struct device *device)
271 271
272 if (!request_mem_region(vesafb_fix.smem_start, size_total, "vesafb")) { 272 if (!request_mem_region(vesafb_fix.smem_start, size_total, "vesafb")) {
273 printk(KERN_WARNING 273 printk(KERN_WARNING
274 "vesafb: abort, cannot reserve video memory at 0x%lx\n", 274 "vesafb: cannot reserve video memory at 0x%lx\n",
275 vesafb_fix.smem_start); 275 vesafb_fix.smem_start);
276 /* We cannot make this fatal. Sometimes this comes from magic 276 /* We cannot make this fatal. Sometimes this comes from magic
277 spaces our resource handlers simply don't know about */ 277 spaces our resource handlers simply don't know about */
@@ -279,13 +279,13 @@ static int __init vesafb_probe(struct device *device)
279 279
280 info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev); 280 info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
281 if (!info) { 281 if (!info) {
282 release_mem_region(vesafb_fix.smem_start, vesafb_fix.smem_len); 282 release_mem_region(vesafb_fix.smem_start, size_total);
283 return -ENOMEM; 283 return -ENOMEM;
284 } 284 }
285 info->pseudo_palette = info->par; 285 info->pseudo_palette = info->par;
286 info->par = NULL; 286 info->par = NULL;
287 287
288 info->screen_base = ioremap(vesafb_fix.smem_start, vesafb_fix.smem_len); 288 info->screen_base = ioremap(vesafb_fix.smem_start, vesafb_fix.smem_len);
289 if (!info->screen_base) { 289 if (!info->screen_base) {
290 printk(KERN_ERR 290 printk(KERN_ERR
291 "vesafb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n", 291 "vesafb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n",
@@ -386,7 +386,7 @@ static int __init vesafb_probe(struct device *device)
386 request_region(0x3c0, 32, "vesafb"); 386 request_region(0x3c0, 32, "vesafb");
387 387
388 if (mtrr) { 388 if (mtrr) {
389 int temp_size = size_total; 389 unsigned int temp_size = size_total;
390 /* Find the largest power-of-two */ 390 /* Find the largest power-of-two */
391 while (temp_size & (temp_size - 1)) 391 while (temp_size & (temp_size - 1))
392 temp_size &= (temp_size - 1); 392 temp_size &= (temp_size - 1);